iOS 利用Target快速科学的区分开发环境
什么是区分开发环境:
请求的域名+第三方SDK账号的不同。
- 请求的域名-->因为开发环境和正式环境的服务器和数据库基本上都不是同一个。
- 第三方SDK账号-->第三方SDK需要账号区分防止开发测试数据污染正式环境
(推送+友盟统计是最明显的例子)
这篇文章要点:
- 如何使用Target去区分开发环境
- 如何在1的基础上面巧妙的区分第三方SDK的账号
最终目的
在打包的时候切换对应环境的Target进行编译即可获得对应的安装包。
引子:
开发APP区分环境是必不可少的话题,从 开发测试环境->pr环境->生产环境,甚至更多的环境,如何快速的进行管理是一个值得探讨的话题。
不少项目在这方面好像没有一个很好的解决方案导致项目到后期的时候第三方SDK的混乱以及各个环境之间的相互污染。虽然很多SDK已经提前给出了测试机的注册等等方案,但是个人觉得还是比较麻烦。所以我们公司在很早的时候iOS小组一起讨论出下面这种方案。已经在我们公司的后期开发的多个APP进行使用。
下面开始讲讲我们公司的解决方案吧(文章底部有Demo链接)
1.建立项目
2.将项目的target更改为dev环境的
D0D3DDF8-678D-438A-AE9F-07D3F89CD45D.png3.建立管理第三方平台的类目
这张有疑问不要紧,步骤完成后会详细讲解
BA464E94-7F7F-4A31-A680-F1EA63121BC7.png
4.建立APPStore环境下对应的Target
在开发环境的Target上面右键Duplicate一个新的Target,并且修改Target名称为CBTDisTingGuishAppStoreEnvironment
5.修改Plist文件,对应上正确的Target
这时候你会看到多生成了一个Plist文件,不同的Target的Plist文件不共享我们需要修改这个Plist的对应关系以及名字。在修改plist名字的时候你会发现Target下面的对应的plist都空了,这时候就可以选择对应的plist文件了。
下面是新建好对应关系的Target和Plist文件
EDC2D1E3-D4B7-45F1-BC19-CBEEF7ACABFB.png
6.ManagerScheme
修改对应的scheme名字,用于更好的辨认APP环境
9C238025-C695-4404-8E3D-3E88C8A1E7B5.png 屏幕快照 2017-07-19 上午11.11.15.png
7.上面步骤完成之后,打包之用切换Target进行编译即可获取对应环境的APP
(demo里面切换环境运行打印,你会发现得到的是不同的结果)
屏幕快照 2017-07-19 上午11.11.15.png这里来解释一下这个方案的核心
屏幕快照 2017-07-19 上午11.21.24.png文件
a.分别定义两个环境的BundleID对应的宏
b.定义了一个能够在不同环境下面获取到对应环境BundleID的宏
c.定义根据不同环境区分不同的请求地址
d.定义根据不同环境区分不同的sdk区域
用法:
kGetuiConfig[kBundleID][@"AppID"]
假设现在APP环境处于测试环境
-
kGetuiConfig
是一个字典
AA6D2D1F-57B8-4CEA-AA6E-3916BE452CE3.png -
kGetuiConfig[kBundleID]
是如图字典
-
kGetuiConfig[kBundleID][@"AppID"]
-->ebCsh9J11111111GhSZ9Hb5
如果你觉得有点绕是正常的,多看两遍就知道了。
踩过的坑和注意点
- 第三方SDK去注册账号需要区分BundleID的时候,这时候一定需要创建两个账号(n个环境n个账号),其他不需要区分BundleID的,尽量创建两个账号,这样区分环境才有意义。
- 不同Target必须要对应不同的Plist,需要进行配置,如果实在搞不清楚,就删除所有的Plist,然后重新添加,这样Target上面对应的pilst为空的时候就能进行选择配置。
-
添加新类的的时候记得勾选上两个Target
EC5AF5E2-5441-491B-949E-5EF96922DF78.png - Target进行Duplicate的时候会复制所有的代码。但是plist不共享。
文章demo
最后是demo地址,如果大家觉得文章对你有帮助,请star一下,不胜感激。