App Extension能否根据构建场景有条件地纳入安装包?
条件化引入App Extension的最优方案
核心思路完全不需要复制多份主Target,也不用手动调整Extension嵌入配置,基于你已经建好的三类Build Configuration和Fastlane工作流就能实现全自动化的按需打包。
具体配置步骤
- 先将两个App Extension都加入主Target的「Embed App Extensions」构建阶段,无需按场景手动增减
- 分别打开两个Extension Target的Build Settings,找到
SKIP_INSTALL配置项,按你的场景给不同Build Configuration赋值:- 接近开发完成的Extension A:Debug=NO、TestFlight=NO、Release=YES
- 仍在开发的Extension B:Debug=NO、TestFlight=YES、Release=YES
- 给主Target新增一个靠前的Run Script构建阶段,加入以下脚本兜底,避免不需要的Extension被意外打入包:
# 按构建场景清理不需要的Extension if [ "${CONFIGURATION}" = "Release" ]; then rm -rf "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/PlugIns/"*.appex elif [ "${CONFIGURATION}" = "TestFlight" ]; then rm -rf "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/PlugIns/ExtensionB.appex" fi
- 你的Fastlane lane不需要做额外调整,直接按原有逻辑指定对应Configuration构建即可,CI环境下同一分支跑不同lane就能生成符合要求的三类包,无需人工介入。
方案优势
- 只需要维护1份主Target和2份Extension Target配置,没有额外维护成本
- 完全兼容你现有的编译器Flag、功能显隐配置逻辑
- 不需要修改工程结构,所有配置都可随代码提交到仓库,CI/CD流程无需额外改造
内容的提问来源于stack exchange,提问作者Colin Tremblay
相关产品推荐
相关产品推荐

