我正在开始2个应用程序扩展的工作,我想设置我的构建如下:
- 应用商店的构建不应该包含扩展名 用于TestFlight的构建应该包括几乎准备好的扩展
- 本地构建应该包括两个扩展
目前,我对每一个都有不同的构建配置,以显示和隐藏应用程序的其他方面(在某些情况下也有编译器标志)。我使用快速通道构建。
据我所知,添加或删除应用程序扩展的唯一方法是:
- 将主目标复制两次,并为上述构建中的每个构建使用一个(缺点-必须维护目标的3个副本,直到扩展完全完成)
- 在构建之前手动添加/删除扩展(缺点-不可能在CI环境中从给定分支构建TestFlight和App Store,因为需要手动干预)
谁能想到一个更好的解决方案,有条件地包括应用程序扩展?
这可以通过向您的主要目标添加一个Run Script Build Phase来完成。
添加此脚本并将配置名称替换为您自己的构建配置名称,并将扩展名替换为您想要包含的每个配置:
function embedExtensions() {
for extension in $1
do
rsync -r --copy-links "${CONFIGURATION_BUILD_DIR}/${extension}.appex" "${CONFIGURATION_BUILD_DIR}/${PLUGINS_FOLDER_PATH}"
done
}
debug_extensions=("PacketTunnelProvider WidgetExtension ShareExtension")
beta_extensions=("PacketTunnelProvider WidgetExtension")
if [ "${CONFIGURATION}" = "Debug" ]
then
embedExtensions $debug_extensions
elif [ "${CONFIGURATION}" = "Beta" ]
then
embedExtensions $beta_extensions
fi
我通过查看Xcode的嵌入应用扩展构建阶段的构建输出发现了这一点,该阶段使用Xcode内部工具builtin-copy
。但rsync
达到了相同的结果,并有大致相同的选择。需要--copy-links
选项来解析符号链接的.appex
包。