在 Xcode 中为 iOS 应用定制多种配置(应用名、图标、接口环境等)

| Swift , iOS , Xcode

 

内容概览

  • 前言
  • 配置 Configurations
  • 为不同环境的应用配置不同的名称、图标
  • 为不同环境的应用接入不同的后端接口
  • 使用 Scheme 组织不同环境的配置
  • 总结

 

前言

 

Xcode 中的 Configurations 以及 Build Settings 可以很好地让一个项目生成不同环境配置的应用。

在日常的开发工作中,为 App 定制多种环境配置是非常常见的需求。比如:

  • 测试版本显示测试版的应用名称和图标;
  • 测试版本接入测试版本的后端接口;

接下来,Ficow 就用实例来演示配置过程。

如果您感兴趣,您可以在 这个 Github 仓库 中查看相关的代码。

 

配置 Configurations

 

创建项目后,您会看到默认的 ConfigurationsDebug, 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):

替换后的值:

此时,不同的 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 组织不同环境的配置

 

每次都去 Scheme 修改当前使用的构建配置,实在太繁琐,而且容易出错。其实,我们可以配置多个常用的 Shceme,用的时候就直接选择即可。

根据不同的环境来命名 Scheme,比如 Release 环境可以这样命名:

最终,Ficow 创建了 2 个 Scheme ,分别对应了 Release 和 AppStore 环境,默认的 Scheme 用于 Debug 环境:

此时,您就可以对不同的 Scheme 进行定制:

  • 用于 Debug 环境的 Scheme

  • 用于 Release 环境的 Scheme

  • 用于 AppStore 环境的 Scheme

以后,您只需要切换不同的 Scheme 就可以很方便地切换到不同的应用环境:

 

总结

 

很多人吐槽 Xcode 不好用,各种问题。其实,Xcode 很好很强大,关键还是在于用这个工具的人对工具的掌握程度。

当然,Ficow 其实还是比较菜的,还在不断地学习提升。如果您有什么好的想法,也欢迎您给我留言!

 

参考内容:

Xcode Help

 

觉得不错?点个赞呗~

本文链接:在 Xcode 中为 iOS 应用定制多种配置(应用名、图标、接口环境等)

转载声明:本站文章如无特别说明,皆为原创。转载请注明:Ficow Shen's Blog

评论区(期待你的留言)