惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
IT之家
IT之家
H
Heimdal Security Blog
Jina AI
Jina AI
宝玉的分享
宝玉的分享
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
T
Tailwind CSS Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
有赞技术团队
有赞技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
AWS News Blog
AWS News Blog
C
Cisco Blogs
Cisco Talos Blog
Cisco Talos Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Hacker News
The Hacker News
The Cloudflare Blog
Hugging Face - Blog
Hugging Face - Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threatpost
S
Securelist
P
Privacy International News Feed
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 聂微东
博客园 - 叶小钗
J
Java Code Geeks
V
V2EX
博客园 - Franky
Spread Privacy
Spread Privacy
K
Kaspersky official blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Simon Willison's Weblog
Simon Willison's Weblog
Project Zero
Project Zero
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
C
Cybersecurity and Infrastructure Security Agency CISA
C
CERT Recently Published Vulnerability Notes
Latest news
Latest news
NISL@THU
NISL@THU
罗磊的独立博客
W
WeLiveSecurity
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园_首页
V
Visual Studio Blog

isaced

使用 TypeScript 构建的 appstore-connect-sdk 归档 我用 SwiftUI 写了一个 V2ex 客户端 Docker 容器化多应用部署 Swift Server-side SDWebImage 为什么无法读取 webpmux 生成的 WebP 动图? [译] 探索 Swift 4 中新的 String API 对一个 Django 站点做 ab 压力测试 fir-mac 开发笔记 iOS10 Safari 引导用户信任企业签名 Swift Web 开发之 Vapor - 模版 Leaf(三) Swift Web 开发之 Vapor - 路由(二) HoloLens 初体验 Swift Web 开发之 Vapor - 入门(一) Jenkins for iOS 搭建日记 iOS HOOK 注入与重签名 图床从SAE迁移到七牛 给 UIProgressView 脱掉那层微弱的渐变 初用 CocoaAsyncSocket 记一次 SQLite 性能优化 有多色 - 开发小记 海岛风情 - 泰国普吉岛六日游 EGOCache 源码解析 日语五十音假名临摹校验算法 [iOS] UITextView 追加文字自动跳到顶部解决方法 Cocoa 新的依赖管理工具:Carthage 新年快乐! 博客主机换到搬瓦工 写了个iOS小游戏:有多色 iOS 后台任务之 Long-running background task 悄悄的就必须用 XCode 5.1.1 上传了! HTTP Content-type 与 AFNetworking Objective-Cloud 初体验(1) 掌中站上架小记 NSLoger 上线了 Python Markdown 做语法限制 Nginx + Gunicorn + Django 部署小记 用Shell脚本批量裁剪App Icon各个尺寸 LaunchRocket使用小记 用宏提速NSCoding 2014新年伊始:近期读过的好文推荐 [iOS] stringWithFormat 和 initWithFormat 有何不同? Apache + Flask + mod_wsgi + Koding 部署小记 收集几个Objective-C的HTML解析库 NSMapTable: 不只是一个能放weak指针的 NSDictionary 2013,再见! Emlog到Typecho的迁移工具:emlog2typecho [iOS]给上拉下拉刷新PullToRefresh做本地化 [iOS]代码推荐:大图缩放视图 - Vertigo iOS:hidesBottomBarWhenPushed的正确用法 Xcode 5新的Interface Builder,你准备好了吗? [翻译]如何使用Django创建简单的博客 我的Mac音乐播放器 初识 NSDataDetector Objective-C 计算代码运行时间 WordPress上传文件自动重命名 iOS:仿jing.fm的音乐播放视图 我的啃黑苹果之路 关于 搜索 项目
Xcode 使用 Configuration 来配置不同的项目环境
2016-04-22 · via isaced

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

xcode_ configuration_list

注: Xcode 中 Build Settings 的所有项都可以针对不同的 Configuration 设置不同的值

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

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

edit_scheme

切换不同的 Bundle identifier

在 Targets -> Build Settings -> Packaging -> Product Bundle Identifier 中设置不同的值即可。

切换不同的 App Name

如果需要实现根据 Configuration 设定不同的应用显示名称,可以通过增加 User-Define 属性实现,甚至可以直接使用 Product Name,这里说一下前者的设置方法。

在 Targets -> Build Settings 顶部 “+” 按钮弹出菜单中选择 “Add User-Defined Setting” 来增加一项 User-Defined 属性,值可以自己随意设定,名称可以叫 “BUNDLEDISPLAY_NAME”,然后在 “xxx-Info.plist” 中的 Bundle display name 项中设置值为 ${BUNDLE_DISPLAY_NAMEAA},搞定!

利用宏定义进行参数区分

如果想在代码中对不同环境进行各自的参数加载或者操作处理,我们可以通过预处理宏来判断,通过给 Configuration 增加宏定义和 #ifdef 预处理命令就可以实现。

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

然后通过预处理代码进行判断就可以实现加载不同的参数项,比如还可以设定一些 SDK 区分正式/开发环境的 Key,做一些非常灵活的操作。

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.