Xcode 使用 Configuration 来配置不一样的项目环境

不少项目在开发时都会常常在开发环境和生产环境之间切换,切换随之伴来的还有好比更换 App 名称、Bundle identitier、服务端接口地址等等相关参数和属性,这个时候咱们就能够利用 Xcode 提供的 Configuration 来配置不一样的环境,从而进行快速切换、编译等等一系列操做。xcode

xcode_ configuration_list

注: Xcode 中 Build Settings 的全部项均可以针对不一样的 Configuration 设置不一样的值ide

使用不一样的环境配置进行调试

定义好不一样的环境后,你就能够分别设置 runtestArchive... 这些操做分别使用哪个 Build Configuration 进行编译,从而能够很轻松得分离开各个配置环境的设置。好比分离不一样的服务端开发和正式环境,就能够利用宏定义进行参数区分(参见后文)轻松实现,而后开发的时候须要切换环境测试之类的就能够直接在 Edit Scheme 里修改对应的 Configuration,不用再修改代码。测试

edit_scheme

切换不一样的 Bundle identifier

在 Targets -> Build Settings -> Packaging -> Product Bundle Identifier 中设置不一样的值便可。ui

切换不一样的 App Name

若是须要实现根据 Configuration 设定不一样的应用显示名称,能够经过增长 User-Define 属性实现,甚至能够直接使用 Product Name,这里说一下前者的设置方法。spa

在 Targets -> Build Settings 顶部 "+" 按钮弹出菜单中选择 "Add User-Defined Setting" 来增长一项 User-Defined 属性,值能够本身随意设定,名称能够叫 "BUNDLEDISPLAY_NAME",而后在 "xxx-Info.plist" 中的 Bundle display name 项中设置值为 ${BUNDLE_DISPLAY_NAMEAA},搞定!调试

利用宏定义进行参数区分

若是想在代码中对不一样环境进行各自的参数加载或者操做处理,咱们能够经过预处理宏来判断,经过给 Configuration 增长宏定义和 #ifdef 预处理命令就能够实现。code

好比咱们要给一个名为 DebugBeta 的 Configuration 设定加载非正式环境的服务端接口地址,在 Targets -> Build Settings -> Preprocessor Macros 中给 DebugBeta 设定一个特殊标识就好了,好比 "BETASERVERURL=1"。server

而后经过预处理代码进行判断就能够实现加载不一样的参数项,好比还能够设定一些 SDK 区分正式/开发环境的 Key,作一些很是灵活的操做。blog

NSString *serverURL;
#ifdef BETASERVERURL
    serverURL = @"http://xxx";
#else
    serverURL = @"http://yyy";
#endif

Cocoapods 可能会遇到的问题

定义好本身的 Configuration 后,再执行 pod install 可能会遇到相似下面的警告信息,这个时候只须要在 Project -> Info -> Configurations 中自定义的配置 'Based on Configuration File' 设为 None 就能够了。接口

[!] CocoaPods did not set the base configuration of your project because your project already has a custom config set. In order for CocoaPods integration to work at all, please either set the base configurations of the target 项目名 to Pods/Target Support Files/Pods-项目名/Pods-项目名.release.xcconfig or include the Pods/Target Support Files/Pods-项目名/Pods-项目名.release.xcconfig in your build configuration.

相关文章
相关标签/搜索