如何使用Xcode Configuration 管理 iOS Apps 不同构建版本
如何使用Xcode Configuration 管理 iOS Apps 不同构建版本
- 面临的问题
- 解决方案
- 如何操作
- 建立Build Configuration
- 使用Xcode配置文件(.xcconfig)
- 更改配置信息(Changing the Build Information)
- 更改App Icon
- 通过配置文件存取变量
- 在不同的配置文件之间切换
- 总结
面临的问题
我们在开发过程中,会遇到不同的环境,dev的,uat的,prod的等等,不同环境,会有不同的domain,也有不同的配置,像dev环境会有一些log,埋点辅助开发,一旦到prod环境,就不再有开发log;再比如不同版本,app icon不同啊; 不同版本的提示不同信息啊。我们需要构建不同版本。但如何在Xcode中有效率的管理所有构建版本,而且不改变原有的代码呢?
解决方案
- 首先,讲一讲我之前用的笨法子: 手动修改获取domain name的方法,通过build setting里的配置项,将当前环境调成debug 模式,然后再连调,打包,给测试测。
问题: 手动改code,还有有约定俗成的切换方式,分几步,都改哪些,每个人都要关注这些事情,在local办公区还算说得过去,如果是global办公环境,那就真的口口相传吧~~~ - 当然,你可以通过创建不同targets,不同的target使用对应的info.plist,可以借此进行不同配置的设置
- 还有可以使用Bundle Identifiers來实现,定义不同的preprocessor macros控制各個代码块的编译条件
可以参考: How to Use Xcode Targets to Manage Development and Production Builds - 重头戏 – 简单更改scheme来切换不同版本的配置
将你的构建配置设定放到.xcconfig文件中,在对应的info文件内引用它,通过切换scheme来换不同配置。将这些配置(build configuration)设定放在项目里,特别方便配置管理了(configuration management)
如何操作
话不多说,直接上图
建立Build Configuration
- 首先,选中你的project,找到info,看到Configurations底下有2个选项,这就是2个不同的版本。
- 你可以选底下的“+”,来再添加一个你需要的版本,比如:Uat,我们这里选择Duplicate ”Debug" Configuration,因为debug配置中删除我们不需要的东西,比release配置要容易的多。
- 添加之后就是如下图所示,你有三个级别的配置。
你也可以修改名字,比如将release修改称Prod
使用Xcode配置文件(.xcconfig)
我们使用Xcode配置文件(.xcconfig)取代conditional compilation blocks,来管理不同配置(token,domainURL等等)
.xcconfig其实就是一个基于key/value的文件,像dictionary. 你可以通过key/value对不同的配置简单设置参数.
- 选导航栏里,Xcode 旁边的File -> New -> File… (or 快捷键:Command + N) ,调出创建新文件窗口
- 在如下框里,搜索configuration -> 选中“Configuration Settings File” -> Next
- 改名为你想要的配置文件名,比如:“Debug”,“Uat”,“Prod”,跟不同版本配置保持一致.
并确保targets里全部都是未选状态,因为我们不希望将其包含在程序的bundle中.
- 创建好不同配置文件之后,回到Project-> Info -> Configurations 里,分别在不同的版本下,选不同的配置
更改配置信息(Changing the Build Information)
基本配置搞定,接下来改配置文件里的内容了。
比如你想改:应用名称,应用版本,bundle identifier以及每个版本的bundle version等等,你可以这样编辑每个.xcconfig文件。
Debug.xcconfig:
SU_APP_NAME = SwiftUI-SwiftUI Debug
SU_APP_VERSION = 0.1
SU_APP_BUNDLE_ID = com.apple.SwiftUI-SwiftUIDebug
Uat.xcconfig:
SU_APP_NAME = SwiftUI-SwiftUI Uat
SU_APP_VERSION = 0.2
SU_APP_BUNDLE_ID = com.apple.SwiftUI-SwiftUIUat
Release.xcconfig:
SU_APP_NAME = SwiftUI-SwiftUI Prod
SU_APP_VERSION = 0.3
SU_APP_BUNDLE_ID = com.apple.SwiftUI-SwiftUIProd
你可以在project settings,info.plist和entitlement files中使用你的配置变量(configuration variables)。这里,我们在info.plist中使用它改变app名称、app版本和bundle identifier,如下所示:
更改App Icon
通过**.xcconfig** , 你现在可以轻松配置不同版本的app icon,只是这变量将在Build settings中使用。
Debug.xcconfig:
SU_APP_ICON = AppIconDebug
Uat.xcconfig:
SU_APP_ICON = AppIconUat
Prod.xcconfig:
SU_APP_ICON = AppIconProd
完成后,切換到Build Settings,将AppIcon替换为变量**${SU_APP_ICON}**:
最后,在“Assets.xcassets”中創建几套新的iOS App Icon,并按顺序重命名它们。
通过配置文件存取变量
- 在.xcconfig文件里存储变量
Debug.xcconfig:
BACKEND_URL = http:\/\/api.baidu.com/development
CONSUMER_KEY = ck_a57e4fa2e14c12ae3f400371cf2951ec3dea5_dev
CONSUMER_SECRET = cs_c847caa35ce1041e9c69d239141f13f63bb22b_dev
Uat.xcconfig:
BACKEND_URL = http:\/\/api.baidu.com/Uat
CONSUMER_KEY = ck_a57e4fa2e14c12f400371cf2951ec3dea5_uat
CONSUMER_SECRET = cs_c847caa35ce1041e9c69d239141f13f63bb22b_uat
Prod.xcconfig:
BACKEND_URL = http:\/\/api.baidu.com/
CONSUMER_KEY = ck_a57e4fa2e14c12f400371cf2951ec3dea5
CONSUMER_SECRET = cs_c847caa35ce1041e9c69d239141f1f63bb22b
- 然后,将这些变量添加到Info.plist:
- 你就可以使用下面的代码在运行时从plist文件读取所需的值:
func infoForKey(_ key: String) -> String? {return (Bundle.main.infoDictionary?[key] as? String)?.replacingOccurrences(of: "\\", with: "")}
代码很简单,我们正在访问Main Bundle来获取我们想要的信息,如果返回的值是一个URL,我们从字符中刪除所有反斜杠(backslashes).
在不同的配置文件之间切换
最后就是使用,要想切换不同版本(build configuration),选scheme -> Edit Scheme(or 按住Option + 顶部的scheme) 即可更改scheme.
总结
好啦,你可以轻松管理不同的配置变量了,欢迎讨论和指正
参考文章:
- https://help.apple.com/xcode/mac/11.4/#/dev745c5c974
- https://www.appcoda.com/xcconfig-guide/
如何使用Xcode Configuration 管理 iOS Apps 不同构建版本相关推荐
- 使用 Xcode 在越狱 iOS 设备上进行开发调试
1 目的 2 iOS 设备的设置 3 生成私有签名 4 设置 Xcode 4.1 告诉 Xcode 不需要签名 4.2 告诉 Xcode 不用做签发动作 4.3 指示 Xcode 使用私有签名签发 A ...
- Python脚本实现iOS自动化构建版本
Python脚本实现iOS打包并上传蒲公英.钉钉群通知 该方法可以快速实现iOS版本构建,发布测试: 注意:构建的版本有可能不完整,一些本地资源文件会丢失:发布App Store的版本不要使用该方法! ...
- Linux配置scheme环境,用 Xcode Configuration 和 Scheme 配置项目环境
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 想象一个场景,我们正在开发一款支付系统,这个支付系统同时支持有Web版和原生的iOS APP版本. 这个支付系统有三个环 ...
- Start Developing iOS Apps Today系列(二)
2019独角兽企业重金招聘Python工程师标准>>> Start Developing iOS Apps Today系列之入门 二.教程:基础 本教程描述了什么是应用程序.创建简单 ...
- iOS-Core Bluetooth Background Processing for iOS Apps(API Reference) the fifth part
Core Bluetooth Background Processing for iOS Apps 对于iOS程序,它是至关重要的,它知道你的app是否在前台后者后台运行.一个app后台比前台必须是行 ...
- 【转】使用Xcode中的iOS SDK给iphone开发出第一个App程序
之前已经折腾过用Xcode开发OS X的程序了,现在继续折腾,用iOS SDK开发移动设备(iphone/ipad/ipod touch)的程序. 1.从iOS Developer Library中找 ...
- Start Developing iOS Apps Today系列(十二)
2019独角兽企业重金招聘Python工程师标准>>> Start Developing iOS Apps Today系列之后续 十二.iOS 技术 之前您已了解了如何编写一个具有简 ...
- CocoaPods管理iOS的第三方类库
2019独角兽企业重金招聘Python工程师标准>>> 使用CocoaPods管理iOS的第三方类库 OCT 15TH, 2012 iOS第三方类库的管理是一个很麻烦的事,项目信赖的 ...
- [ios2]iOS 使用subversion管理iOS源代码 【转】
使用subversion管理iOS源代码 1.安装和配置subversion服务器 在windows 服务器上安装VisualSVN-Server,下载地址http://www.visualsvn.c ...
最新文章
- 2011清华MBA备考全记录
- 7216:Minecraft
- ie9浏览器两个ajax请求同步不兼容_浏览器拦截问题
- LeetCode 47全排列Ⅱ48旋转图像
- 经常在比特币中看到的merkle树是什么?
- 异步编程的 async/await
- Texlive中jpg和pdf转成eps
- 不通过ios审核 安装苹果app php,iOS APP审核被拒的解决之道(2.1)
- VC中树状控件(TreeCtrl)的用法
- 【java】彩票中奖码生成器:java.util.Random里的方法public int nextInt(int bound)
- DataSet 用法
- 国开大学计算机应用基础形考作业三答案,国开学习指南形考作业答案
- 红旗Linux中文教程
- 时间序列预测 | Python实现GAN时间序列数据生成建模
- 三层vxlan原理_VXLAN技术在园区网的应用探讨
- 金融业大数据应用场景
- 80端口和443端口是什么?有什么区别?
- Win XP iis组件补丁(ghost xp)iis5.1
- android 多个按键精灵,Android 一种通用的按键精灵的实现思路
- 高级查询组件下拉框联动(三)
热门文章
- 什么运动蓝牙耳机好?狂甩不掉蓝牙运动耳机推荐
- 如何选用 vector 和 list
- java技术及ssh框架和jsp技术的介绍 外文文献及翻译_外文翻译 java技术及ssh框架和jsp技术的介绍 jsp程序.docx...
- 【AI资讯】第二届中国国际智能产业博览会讲了哪些?马云、马化腾、李彦宏、雷军都讲了什么
- 如何选择适合你的兴趣爱好(五十),篮球
- Fedora14 root 登陆 (by lsyz0021)
- 中国平安旗下vipJr开拓多种招聘渠道缓解就业压力
- 【C#】VisualStudio 2019
- 图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN(转)
- bash: Is :command not found的解决方法和思考总结