您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
简单的iOS多环境切换配置技巧
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
简单的iOS多环境切换配置技巧
自猿其说Tech
2021-02-23
IP归属:未知
246360浏览
前端
计算机编程
在客户端开发过程中,我们经常会需要在不同的开发环境下,需要设置不同的参数、使用不同的代码逻辑。例如:在Debug模式下,我们需要输出log,而在Release模式下所有的log输出应该被关闭。我们通常是通过使用项目中默认的Debug和Release模式来做相应的区分的。 Xcode在创建项目时默认创建Debug和Release两种Build Configuration。但有时候这两种Build Configuration可能无法完全满足我们的需求。例如,有时可能还需要一种ADHoc模式来实现通过企业证书来发布企业版APP给测试同学来进行测试或者进行UAT。 本文就通过在一个Flutter和iOS混合项目中新增一个ADHoc模式,来实现在一个工程的Target中可以同时支持企业版本的APP和APP Store版本的APP的开发和自动化打包。 #### 整个流程如下图所示: ![](//img1.jcloudcs.com/developer.jdcloud.com/15e207be-a5ef-4ee2-9379-a56e1d532a9620210223134746.png) #### 1. 创建新的Build Configuration 在Xcode的Project的Configurations选项中,可以看到默认的两种Build Configuration:Debug和Release。点击下面的“+”按钮,就可以新建一个Build Configuration。 ![](//img1.jcloudcs.com/developer.jdcloud.com/7593260f-3662-41f5-b8a1-e586b2c8c48420210223135715.png) 点击Duplicate “Release” Configuration可以新建一个编译配置,其中的设置和已有的Release模式的设置完全一样。将新建的编译模式命名为“ADHoc_Release”,同样可以新建一个编译模式为“ADHoc_Debug”。 ![](//img1.jcloudcs.com/developer.jdcloud.com/d5d48d10-f032-48b3-aafa-fe69ec1e61c720210223135739.png) #### 2. 修改Build Configuration 新建的Build Configuration的目的是为了区分通过APPStore证书还是通过企业证书来开发和打包,同时由于我们的APP需要支持Push推送,所以Build Configuration需要修改的内容主要有: a.Bundle ID(修改Xcode配置) b.APP的名称(修改Info.plist) c.Push SDK的初始化参数(修改工程代码) d.证书(修改Xcode配置)。 ##### a.修改BuildSetting的Bundle ID 在Target的Build Settings中的Product Bundle Identifer中,可以根据Build Configuration分别设置不同的编译配置的Bundle ID。 ![](//img1.jcloudcs.com/developer.jdcloud.com/d45d902e-cb4f-4962-93a0-b4ceffa6109420210223135802.png) ##### b.修改APP的名称 **-新增自定义参数** 由于APP的名称是在Info.plist中的Bundle display name被设置的,而为了让Info.plist中的设置可以根据不同的Build Configuration设置不同的名称,首先需要在Build Setting中新建一个用户自定义的参数BUNDLE_DISPLAY_NAME,并根据不同的Build Configuration,设置不同的名称。 首先新建一个User-Defined Setting: ![](//img1.jcloudcs.com/developer.jdcloud.com/19271e97-7d53-429c-8c74-8b6f23e16c8c20210223140100.png) 修改设置的名称和内容: ![](//img1.jcloudcs.com/developer.jdcloud.com/445a00bb-742a-4355-ad99-9eb386bc971c20210223140134.png) **-修改Info.plist** 在Info.plist中,设置Bundle display name的值为刚才自定义的参数BUNDLE_DISPLAY_NAME。 ![](//img1.jcloudcs.com/developer.jdcloud.com/804e220f-f128-47d4-b08b-bf4b31a12e7d20210223140211.png) ##### c.修改Push SDK的初始化参数 因为企业版APP和APP Store版APP的Bundle ID不同,因此需要在Push SDK的初始化时,设置不同的appid和appSecret。 **-增加宏定义** 首先,在Project的Apple Clang-Processing中,设置预编译的宏定义。在ADHoc_Debug中添加宏定义ADHOC_DEBUG,在 ADHoc_Release中添加宏定义ADHOC_RELEASE。 ![](//img1.jcloudcs.com/developer.jdcloud.com/64dafc43-672d-45c6-ad16-9d64fab6b69720210223140309.png) **-修改代码** 修改完以后,就可以在代码中直接使用我们新加的宏定义,在代码中修改Push SDK的初始化逻辑。 ![](//img1.jcloudcs.com/developer.jdcloud.com/59cb2bcd-89d0-4f7c-84b6-637746ff14cb20210223140343.png) ##### d.证书 在Signing&Capabilities中,需要根据不同的编译配置,设置不同的证书和配置文件。其中ADHoc需要配置企业证书,而其他的需要配置的是APP Store证书。 ![](//img1.jcloudcs.com/developer.jdcloud.com/f17ff9f7-c866-4f02-b0f1-bb99b6c5870b20210223140424.png) ##### 使用Cocoapods注意事项 如果是使用Cocoapods来管理整个项目的话,一定不要忘记在修改完成后执行pod install命令,执行完后,我们就可以在工程中发现多了adhoc_debug.xcconfig和adhoc_release.xcconfig这两个文件存储着我们刚才所做的各种修改。 ##### 在Flutter项目中的注意事项 之所以把新建的两个build Setting命名为ADHoc_Debug和ADHoc_Release是因为,在Flutter的编译脚本xcode_backend.sh中有如下代码: ![](//img1.jcloudcs.com/developer.jdcloud.com/9f47ef50-2665-4f02-bdb3-4d3e87a01b7b20210223140502.png) 也就是说,我们可以在编译配置中,设置FLUTTER_BUILD_MODE这个宏定义,并设置为release、profile或者debug,Flutter就能根据此来编译成对应的SDK。 如果没有设置,Flutter就会根据我们的build configuration的名称来选择Flutter SDK的编译模式。因此,我们只需要在build configuration中包含debug、profile或者release这几个字段中的一个,Flutter就能根据此来编译成对应的SDK。否则Flutter就无法决定到底使用哪一种编译模式来进行编译,而导致编译失败。 #### 3.自动化打包 在阿凡达平台提供的持续集成CI中,也支持设置不同的build configuration。只需要在构建类型中输入我们自己定义的build configuration的名称,打包平台就会自动根据当前选择的build configuration来进行自动打包和持续集成。 ![](//img1.jcloudcs.com/developer.jdcloud.com/fc9f4772-9e62-4895-80d6-3c09e9c09b6320210223140545.png) #### 总结 在Xcode中可以通过设置不同的build configuration来实现多环境的切换,而build configuration可以设置的内容很多,既可以设置不同的各种Xcode 的编译选项,也可以设置Info.plist中的内容,当然也可以通过配置宏定义,在代码中实现根据不同配置,运行不同的代码代码逻辑。使用好build configuration可以节省我们很多的工作量。 当然如果build configuration无法完全满足需求,也可以通过设置不同的Target来实现根据不同的配置打包不同的app。 ------------ ###### 自猿其说Tech-JDL京东物流技术发展部 ###### 作者:用户产品部 郝宏伟
原创文章,需联系作者,授权转载
上一篇:Chrome 控制台实用技巧
下一篇:一次minerd肉鸡木马的排查思路
相关文章
前端十年回顾 | 漫画前端的前世今生
Taro小程序跨端开发入门实战
【技术干货】企业级扫描平台EOS关于JS扫描落地与实践!
自猿其说Tech
文章数
426
阅读量
2149964
作者其他文章
01
深入JDK中的Optional
本文将从Optional所解决的问题开始,逐层解剖,由浅入深,文中会出现Optioanl方法之间的对比,实践,误用情况分析,优缺点等。与大家一起,对这项Java8中的新特性,进行理解和深入。
01
Taro小程序跨端开发入门实战
为了让小程序开发更简单,更高效,我们采用 Taro 作为首选框架,我们将使用 Taro 的实践经验整理了出来,主要内容围绕着什么是 Taro,为什么用 Taro,以及 Taro 如何使用(正确使用的姿势),还有 Taro 背后的一些设计思想来进行展开,让大家能够对 Taro 有个完整的认识。
01
Flutter For Web实践
Flutter For Web 已经发布一年多时间,它的发布意味着我们可以真正地使用一套代码、一套资源部署整个大前端系统(包括:iOS、Android、Web)。渠道研发组经过一段时间的探索,使用Flutter For Web技术开发了移动端可视化编程平台—Flutter乐高,在这里希望和大家分享下使用Flutter For Web实践过程和踩坑实践
01
配运基础数据缓存瘦身实践
在基础数据的常规能力当中,数据的存取是最基础也是最重要的能力,为了整体提高数据的读取能力,缓存技术在基础数据的场景中得到了广泛的使用,下面会重点展示一下配运组近期针对数据缓存做的瘦身实践。
最新回复
丨
点赞排行
共1条评论
自猿其说Tech
文章数
426
阅读量
2149964
作者其他文章
01
深入JDK中的Optional
01
Taro小程序跨端开发入门实战
01
Flutter For Web实践
01
配运基础数据缓存瘦身实践
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号