问题:

相信大家在公司上班的时候,会经常遇到, 正式版本,开发版本,还有预上线版本等等。 然后要根据老板的要求,测试人员的要求,需要给他们安装不同的版本,并且多个版本要同事存在,以便于他们发现问题,其实版本与版本之间差别并不是很大,仅仅只是一部分的请求,证书,些许功能上的变化,以前想到的最简单的办法就是,copy 工程,然后改 - 改 - 改, 到时候给他们装的时候, 就各种打开工程,给他们装。 这样是可以实现这种在同一部机器上,可以实现安装多个版本,但是管理却不方便。所以如果实现在同一台手机能同时安装同个应用的测试和生产版本?应用名称要有区分,图标也要有所区别。不要手动修改Bundle id和应用名称,也不要手动替换图标,更不要维护两个项目。如何才能简单地实现?解决方法就是建立多个Target即可。

解决过程:

1. 复制Target

关于Xcode中Target的概念,文档中是这么一段说明:

A target specifies a product to build and contains the instructions for building the product from a set of files in a project or workspace. A target defines a single product; it organizes the inputs into the build system—the source files and instructions for processing those source files—required to build that product. Projects can contain one or more targets, each of which produces one product.

即是说,每个Target代表一个编译的产品。每个Target,可以有不同的编译源文件和资源文件。那么,实现环境分离的方案,就是分别建立测试环境和生产环境的两个Target。默认的Target作为生产环境的Target,在此基础上复制多一个Target作为测试环境的Target。

如下图,选择默认的Target,从右键菜单中选择Duplicate,就可以复制出一个新的Target了。


新Target默认名称为TestApp copy。复制完成后,不只是TARGETS列表中多出了名为TestApp copy的新Target,同时也会为该新Target生成名为TestApp copy的新的scheme,以及在项目的根目录下生成TestApp copy-Info.plist文件。

2. 更名Target

不喜欢TestApp copy这样的名字,TestAppBeta这样的名字才是测试版本该有的名字。那么,需要改名的地方有三处:target名称、scheme名称、plist文件名称。

1. target名称:修改target名称很简单只要在TARGETS列表中选中后,再点击一下即可编辑修改名称。

2. 修改scheme则可以在Xcode左上角的Run\Stop按钮右边的scheme列表菜单中选择Manage Schemes,打开弹出框,如下图,则可将TestApp copy修改为TestAppBeta

3.修改plist: plist文件则修改为TestApp copy-Info.plist(这个文件,在工程的根目录),同时,我还将其移到与默认的Info.plist文件在同个目录下。不只是在同一个分组下,也是在同一个物理目录下。改完plist文件后,还需要修改TestAppBeta的Target的Info.plist File设置,该属性设置了相应Target绑定的plist文件是哪个。该属性值本来为productname copy-Info.plist,现需要更改为TestAppname/TestAppBeta-Info.plist。

3. 修改配置

接下来,就要修改Target的配置,实现真正的环境分离了。默认的TestApp的Target,作为生产版本,基本不需要改动,需要改的是作为测试版的TestAppBeta。

首先,修改TestAppBeta的Bundle id,在原有的基础上添加后缀“.beta”,以实现能和生产版同时安装在同一台设备上。

接着,修改Bundle display name,可在原有名称的基础上添加后缀“Beta”,以实现和生产版应用名称上的区分。

然后,需要更换图标了。默认会使用AppIcon这一项Assets,但AppIcon是给生产版设置的图标,既然测试版要使用不同图标,那就需要新建一套新的App Icon,如下图:

新建的App Icon将其命名为AppIcon-Beta,放置测试版的图标。并将TestAppBeta的App Icons Source指定为新建的AppIcon-Beta。至此,图标也与生产版的有所区别了。

4. 判别版本

那么,设置了不同Target后,代码上可能需要根据不同Target做不同处理,因此,需要在代码上能判断当前编译的是哪个Target。这可以通过预编译宏来区分。例如,我们在TestAppBeta的Build Settings中,将Preprocessor Macros属性值设置为BETA,也就是为TestAppBetaBeta定义了一个预编译宏,宏名称为BETA。

然后,在代码中可以通过如下预编译指令判断当前是在哪个Target下:

#ifdef BETA// 测试版需要执行的代码
#else// 默认生产版需要执行的代码
#endif
   
总结 : 
       1.以后就不同烦恼,打开各种工程,各种煎熬了。 现在只要运行不同的target,就可以实现安装不同的版本,只打开一个工程,管理起来也方便太多了。 
      

App环境分离的实现:iOS篇,正式版 与 beta版本的快速分离相关推荐

  1. [其它]iOS 13 正式版发布 iPhone 6s或更新型号均可升级

    苹果今天(2019.09.20)发布了 iOS 13 正式版,可以升级的设备包括 iPhone 6s 或更新型号.第七代 iPod Touch. iOS 13 推出深色模式,为 iPhone 带来截然 ...

  2. 苹果iOS 13正式版推送:深色模式来了 速度再次提升!

    最近手机圈还真是比较热闹,苹果.华为年度旗舰发布后,9月20号0点,华为Mate 30系列开启预售,另一边iPhone 11系列也在今天正式开卖,之前首批预订的用户,将会在今天陆续收到新机:同时,苹果 ...

  3. 苹果最新动态 苹果推送 iOS 14 正式版发布

    苹果发布会此次虽然没有公布新手机,预计是在国庆期间吧,不过发布会上还是公布了一些信息,下面给大家整理下苹果的最新动态,一起来看看! 苹果推送 iOS 14 正式版 9 月 17 日,苹果正式推送了 i ...

  4. php pdt,PDT(php开发环境) v3.2.0 官方最新正式版 - 爱win10

    其他相关 PDT(php开发环境) v3.2.0 官方最新正式版 - 爱win102020年12月24日 爱win10收集的PDT是开源的PHP集成开发环境(IDE).PDT可为Eclipse平台提供 ...

  5. 聚观早报 | 苹果iOS 16正式版发布;任天堂直面会即将举办

    今日要闻:苹果 iOS 16 正式版发布:任天堂直面会将于9月13日举办:苹果股价创5月份以来新高:新一代福特驾驶辅助系统发布:迪士尼乐园发布漫威宇宙新项目 苹果 iOS 16 正式版发布 9 月 1 ...

  6. 苹果iOS 6正式版更新详细教程

    9月20日凌晨消息,苹果今日凌晨正式放出了iOS 6正式版更新,苹果称此次iOS 6拥有200多项新功能.首次抛弃Google地图,转而采用苹果自家的地图.iOS 6新功能Siri新增15个国家和地区 ...

  7. 「图文教程」iOS 16测试版如何升级iOS 16正式版?

    苹果iOS 16正式版已经更新到iOS 16.1.2了,如果你的iPhone之前为了尝鲜已经下载安装iOS 16测试版,该如何升级iOS 16正式版呢?一起来了解下吧! 方法一.移除iOS 16 Be ...

  8. Red Hat Enterprise Linux 5.1 Server(正式版)各版本下载2011-04-17 22:21

    Red Hat Enterprise Linux 5.1 Server(正式版)各版本下载2011-04-17 22:21 linuxserver虚拟化云计算ibm服务器 Red Hat领导着Linu ...

  9. Ext JS 6正式版的GPL版本下载地址

    下面是Ext JS 6正式版的GPL版本下载地址 https://www.sencha.com/legal/gpl/ 转载于:https://blog.51cto.com/dqhuang/167041 ...

最新文章

  1. HashMap 你真的了解吗?
  2. oracle错误12518,ORA-12518: 错误 客户端连接不上
  3. 一道PHP题引出的“短路求值”
  4. OpenCV C++ 05 - Change Contrast
  5. Springboot:监控与管理 Actuator
  6. Redis09-集群相关笔记
  7. 硅谷半夜3点惊现无人驾驶特斯拉!百公里时速飞驰,交警围追10公里才逼停
  8. appim自动化--点击指定控件的指定位置
  9. python模板语言_3 个 Python语言 模板库比较
  10. 手机组态软件_安卓平板组态软件​_移动端组态软件介绍
  11. 《21天学通Java(第7版)》—— 导读
  12. 微信消息模板换行符转义问题处理
  13. 物联网常见的几种通信方式
  14. 期货开户手续费组成和最低价
  15. Java在编译到执行过程的编码问题
  16. asp生成带参数的二维码并合成推广海报图片,asp合并合成推广海报图片asp代码...
  17. request.getParameter和SpringMVC后台控制层获取参数的方式
  18. 【BZOJ4355】Play with sequence 线段树
  19. SpringBoot 使用Redis缓存
  20. 总结各大主流浏览器内核

热门文章

  1. Win10系统下环境变量Path编辑变成旧版本如何恢复
  2. 极客日报:小米回应造车传闻;饿了么就春节“套路”骑手活动致歉;苹果研发 iPhone12 无线充电电池组...
  3. Nifty Gateway与区块链技术:探索数字艺术的革命
  4. 不容错过的十大小米手机玩机技巧
  5. layui数据表格url是什么
  6. 计算机纸带打孔编程,人机交互演变史:从打孔纸带到人工智能
  7. solidity修饰符、节省gas技巧
  8. HtmlEncode和JavaScriptEncode(预防XSS)
  9. ssh远程登陆阿里云服务器ECS
  10. 学会python可以做自己想做的事----用Python给你喜欢的音乐分个类吧