前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS 设置Build Configuration实现多环境切换

iOS 设置Build Configuration实现多环境切换

作者头像
京东技术
发布2021-04-22 10:11:13
1.9K0
发布2021-04-22 10:11:13
举报
文章被收录于专栏:京东技术京东技术

Tech

前言

在客户端开发过程中,我们经常会需要在不同的开发环境下,需要设置不同的参数、使用不同的代码逻辑。例如:在Debug模式下,我们需要输出log,而在Release模式下所有的log输出应该被关闭。我们通常是通过使用项目中默认的Debug和Release模式来做相应的区分的。Xcode在创建项目时默认创建Debug和Release两种Build Configuration。但有时候这两种Build Configuration可能无法完全满足我们的需求。例如,有时可能还需要一种ADHoc模式来实现通过企业证书来发布企业版APP给测试同学来进行测试或者进行UAT。

本文就通过在一个Flutter和iOS混合项目中新增一个ADHoc模式来实现在一个工程的Target中可以同时支持企业版本的APP和APP Store版本的APP的开发和自动化打包。

整个流程如下图所示:

01 创建新的Build Configuration

在Xcode的Project的Configurations选项中,可以看到默认的两种Build Configuration:Debug和Release。点击下面的“+”按钮,就可以新建一个Build Configuration。

点击Duplicate “Release” Configuration可以新建一个编译配置,其中的设置和已有的Release模式的设置完全一样。将新建的编译模式命名为“ADHoc_Release”,同样可以新建一个编译模式为“ADHoc_Debug”。

02 修改Build Configuration

新建的Build Configuration的目的是为了区分通过APPStore证书还是通过企业证书来开发和打包,同时由于我们的APP需要支持Push推送,所以Build Configuration需要修改的内容主要有:

a. Bundle ID(修改Xcode配置)

b. APP的名称(修改Info.plist)

c. Push SDK的初始化参数(修改工程代码)

d. 证书(修改Xcode配置)

a. 修改BuildSetting的Bundle ID

在Target的Build Settings中的Product Bundle Identifer中,可以根据Build Configuration分别设置不同的编译配置的Bundle ID。

b. 修改APP的名称

新增自定义参数

由于APP的名称是在Info.plist中的Bundle display name被设置的,而为了让Info.plist中的设置可以根据不同的Build Configuration设置不同的名称,首先需要在Build Setting中新建一个用户自定义的参数BUNDLE_DISPLAY_NAME,并根据不同的Build Configuration,设置不同的名称。

首先新建一个User-Defined Setting:
修改设置的名称和内容:
修改Info.plist
在Info.plist中,设置Bundle display name的值为刚才自定义的参数BUNDLE_DISPLAY_NAME。
c. 修改Push SDK的初始化参数

因为企业版APP和APP Store版APP的Bundle ID不同,因此需要在Push SDK的初始化时,设置不同的appid和appSecret。

增加宏定义

首先,在Project的Apple Clang-Processing中,设置预编译的宏定义。在ADHoc_Debug中添加宏定义ADHOC_DEBUG,在 ADHoc_Release中添加宏定义ADHOC_RELEASE。

修改代码

修改完以后,就可以在代码中直接使用我们新加的宏定义,在代码中修改Push SDK的初始化逻辑。

d. 证书

在Signing&Capabilities中,需要根据不同的编译配置,设置不同的证书和配置文件。其中ADHoc需要配置企业证书,而其他的需要配置的是APP Store证书。

使用Cocoapods注意事项

如果是使用Cocoapods来管理整个项目的话,一定不要忘记在修改完成后执行pod install命令,执行完后,我们就可以在工程中发现多了adhoc_debug.xcconfig和adhoc_release.xcconfig这两个文件存储着我们刚才所做的各种修改。

在Flutter项目中的注意事项

之所以把新建的两个build Setting命名为ADHoc_Debug和ADHoc_Release是因为,在Flutter的编译脚本xcode_backend.sh中有如下代码:

也就是说,我们可以在编译配置中,设置FLUTTER_BUILD_MODE这个宏定义,并设置为release、profile或者debug,Flutter就能根据此来编译成对应的SDK。

如果没有设置,Flutter就会根据我们的build configuration的名称来选择Flutter SDK的编译模式。因此,我们只需要在build configuration中包含debug、profile或者release这几个字段中的一个,Flutter就能根据此来编译成对应的SDK。否则Flutter就无法决定到底使用哪一种编译模式来进行编译,而导致编译失败。

03 自动化打包

在阿凡达平台提供的持续集成CI中,也支持设置不同的build configuration。只需要在构建类型中输入我们自己定义的build configuration的名称,打包平台就会自动根据当前选择的build configuration来进行自动打包和持续集成。

04 总结

在Xcode中可以通过设置不同的build configuration来实现多环境的切换,而build configuration可以设置的内容很多,既可以设置不同的各种Xcode 的编译选项,也可以设置Info.plist中的内容,当然也可以通过配置宏定义,在代码中实现根据不同配置,运行不同的代码代码逻辑。使用好build configuration可以节省我们很多的工作量。

当然如果build configuration无法完全满足需求,也可以通过设置不同的Target来实现根据不同的配置打包不同的app。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 京东技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Tech
    • 前言
      • 01 创建新的Build Configuration
        • 02 修改Build Configuration
          • 03 自动化打包
            • 04 总结
              • 当然如果build configuration无法完全满足需求,也可以通过设置不同的Target来实现根据不同的配置打包不同的app。
              相关产品与服务
              持续集成
              CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档