iOS multi-environment configuration with multi lanes use fastlane.
##iOS multi-environment configuration
###1. 各个环境及功能定位🕸
Configuration | 模式 | API Server | Provisioning Profiles | Lane |
---|---|---|---|---|
Debug | 调试模式 | Development | Development | - |
Dev | 开发模式 | Development | Development | Dev |
AdHoc | 内部测试 | Production | Distribution Ad Hoc | AdHoc |
Beta | TestFlight | Production | Distribution Ad Hoc | Beta |
Release | 发布模式 | Production | Distribution App Store | App Store |
备注:【Debug模式】打包的时候不会出现这种模式
详细.xcconfig配置参照xcconfigREADME.md
###2. 各个环境中的配置⚙
- Build identifier(适用)
- Display name
- Icon
- API Server(适用)
- 支持webview页面跳转到本APP
info.plist中需要设置如下参数:
- APPBundleURLName
- APPBundleURLSchemes
- 第三方key(适用)
- 分享、授权登录
- 微博
- WBAPPKey
- WBAPPScret
- WBRedirectURL
- WBBundleURLName
- WBBundleURLSchemes
- 微信
- WXAPPID
- WXAPPScret
- WXBundleURLName
- WXBundleURLSchemes
- QQ
- QQAPPID
- QQBundleURLName
- QQBundleURLSchemes
- 微博
- 推送
- 百度
- 极光
- 地图
- 高德
- 百度
- 统计
- 友盟
- UMengAppKey
- Google Analytics
- 友盟
- 语音
- 讯飞
- 分享、授权登录
###3. 配置步骤🐎
-
添加configurations到Xcode工程中
-
在build scheme中设置configuration
-
创建多个.xcconfig文件
-
重写.xcconfig文件中变量的值
APPBundleURLName = com.yourcompany.MultiConfigDemo APPBundleURLSchemes = MultiConfigDemo // 微博 WBAPPKey = YourWBAPPKey(ProductEnvironment) WBAPPScret = YourWBAPPScret(ProductEnvironment) WBRedirectURL = YourWBRedirectURL(ProductEnvironment)
-
Info.plist文件中引用.xcconfig文件中定义的变量 例如:
<key>CFBundleName</key> <string>$(PRODUCT_NAME)</string> 引用.xcconfig文件中定义的变量后: <key>CFBundleName</key> <string>$(CUSTOM_PRODUCT_NAME)</string>
如果项目中使用了第三方授权登录/分享,现在info.plist文件可以如下配置: 如果想着项目代码中引用第三方相关key,info.plist文件需要添加如下设置:
-
不同的Configuration对应不同的lane
- 初始化fastlane
###4. 附录📖 ####1. 添加 Build Phase
- 添加 Run Script Build Phase
####2. 添加 Build Setting
- 添加 User-Defined Setting
####3. Preprocessor Macros
Build Settings中定位到Preprocessor Macros,每个configuration添加
CONFIGURATION_${CONFIGURATION}
然后在代码中根据添加的宏判断configuration类型
#if defined (CONFIGURATION_AdHoc) || defined (CONFIGURATION_Debug)
//Code placed here will only be compiled and thus
//included at runtime in AdHoc and Debug releases.
#endif
###5. Refrence🔗
###6. TODO⚓️
- 如果让多个Configuration和fastlane中不同的lane对应?
之前的做法是,项目中配置多个target,每个target对应1个schema;然后不同的scheme对应不同的lane。 现在的实现是:配置1个target,1个target对应多个Configuration;不同的Configuration对应不同的lane。
Configuration | scheme | Lane |
---|---|---|
Dev | MultiConfigDemo Dev | Dev |
AdHoc | MultiConfigDemo AdHoc | AdHoc |
Beta | MultiConfigDemo Beta | Beta |
Release | MultiConfigDemo Release | App Store |