Xcode 中的 Configurations 以及 Build Settings 可以很好地让一个项目生成不同环境配置的应用。
在日常的开发工作中,为 App 定制多种环境配置是非常常见的需求。比如:
接下来,Ficow 就用实例来演示配置过程。
如果您感兴趣,您可以在 这个 Github 仓库 中查看相关的代码。
创建项目后,您会看到默认的 Configurations
(Debug
, Release
):
您可以根据自己的需要进行增删。Ficow 将复制 Release 这个 Configuration:
以 Release 这个 Configuration 为基础,创建一个 AppStore Configuration:
有了这些不同的 Configurations,我们就可以进行下一步了。
创建一个自定义设置:
比如:Ficow 就以 APP_DISPLAY_NAME
为它命名:
展开这个自定义的设置,你将会看到不同的 Configurations 可以设置不同的值(此时是空的):
然后,Ficow 针对不同的 Configurations 进行了命名:
接下来,在主程序所在的 Target 的目录下找到 Info.plist
文件,在其中增加 Bundle display name
这个 key:
然后,将这个 key 的值设置为 $(APP_DISPLAY_NAME)
。最后的结果如下所示:
此时,直接运行项目,您会看到 App 的名称为 Debug
:
我们可以在 Scheme(方案) 中切换不同的 Configuration 以使用不同的 APP_DISPLAY_NAME
值。
点击箭头所指的位置:
然后,在弹出的菜单中选择 Edit Scheme
:
接下来,您可以看到 Run 使用的 Configuration 是 Debug:
此时,Ficow 将这个 Configuration 改为了 AppStore。然后构建并运行应用,看到应用名称变为了 AppStore
:
有了前面的配置项,修改应用图标就变得非常简单。
首先,在主程序所在的 Target 中的 Assets.xcassets
中创建不同的应用图标集合:
在 Assets.xcassets
编辑页面的底部区域找到并点击箭头所示的 + 号:
然后找到 iOS App Icon
并点击:
Ficow 新建了 2 个 App Icon 集合,最后共计 3 个,分别对应了 Debug, Release, AppStore:
这里为了方便区分,Ficow 用 小粤粤 App 的素材来做演示:
Debug | Release | AppStore |
---|---|---|
然后,找到 Xcode 中预定义的设置项(Asset Catalog App Icon Set Name
):
请注意,在新版 Xcode 中,此设置项已被更名为:
Primary App Icon Set Name
。
替换后的值:
此时,不同的 Configuration 就可以显示不同的应用图标:
Debug | Release | AppStore |
---|---|---|
怎么样,这是您想要的效果吗?赶快试一下吧~
实现的思路应该不只一种,Ficow 和您分享自己目前比较喜欢的一种实现方式。
主要是通过 Other Swift Flags
添加编译器标识,然后利用枚举类型来区分应用所处的环境。
首先,在主应用 Target 的 Build Settings 中找到 Other Swift Flags
配置项并展开:
然后,双击下图中 1 所示的位置,点击2所示的位置添加编译器标识:
分别为 Debug
, Release
, AppStore
添加:-DDEBUG_CONFIG
, -DRELEASE_CONFIG
, -DAPPSTORE_CONFIG
。
最终效果如下图所示:
然后,创建 AppEnvironment
枚举类型,根据当前的编译器标识返回对应环境的枚举值:
enum AppEnvironment {
case debug
case release
case appStore
static var current: Self {
#if DEBUG_CONFIG
return .debug
#elseif RELEASE_CONFIG
return .release
#elseif APPSTORE_CONFIG
return .appStore
#else
fatalError("No valid configuration for current scheme!")
#endif
}
}
接下来,在需要对环境进行区分的地方使用该枚举类型即可:
switch AppEnvironment.current {
case .debug:
print("code for debug environment")
case .release, .appStore:
print("code for release environment")
}
您可以为不同的环境提供不同的接口URL,然后通过
AppEnvironment.current
的值来区分当前的环境并返回不同的接口URL。
当这些配置都做完之后,您可以去 Scheme 修改当前使用的构建配置(Build Configuration)以检验配置的效果:
目前,Ficow 自行开发的 小粤粤 App 就是采用了这种方案来区分应用的环境。
每次都去 Scheme 修改当前使用的构建配置,实在太繁琐,而且容易出错。其实,我们可以配置多个常用的 Shceme,用的时候就直接选择即可。
根据不同的环境来命名 Scheme,比如 Release 环境可以这样命名:
最终,Ficow 创建了 2 个 Scheme ,分别对应了 Release 和 AppStore 环境,默认的 Scheme 用于 Debug 环境:
此时,您就可以对不同的 Scheme 进行定制:
以后,您只需要切换不同的 Scheme 就可以很方便地切换到不同的应用环境:
很多人吐槽 Xcode 不好用,各种问题。其实,Xcode 很好很强大,关键还是在于用这个工具的人对工具的掌握程度。
当然,Ficow 其实还是比较菜的,还在不断地学习提升。如果您有什么好的想法,也欢迎您给我留言!
参考内容:
Xcode Help
Configuring Your App Icon
觉得不错?点个赞呗~
本文链接:在 Xcode 中为 iOS 应用定制多种配置(应用名、图标、接口环境等)
转载声明:本站文章如无特别说明,皆为原创。转载请注明:Ficow Shen's Blog