You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多Target环境下如何无需手动修改watchOS应用Info.plist中的WKCompanionAppBundleIdentifier?

无需手动修改watchOS应用Bundle ID匹配的解决方案

绝对能搞定这个重复手动操作的麻烦!作为iOS开发者,我们经常遇到这种多环境配置的问题,下面几个自动化方案你可以按需选择:

方案一:用Xcode自定义Build变量(最推荐)

这是最简洁且易维护的方式,核心是通过共享变量让watchApp自动继承主App的Bundle ID:

  • 打开你的主App(myApp)的每个Target(UAT/PRD)的Build Settings,滚动到最底部,点击+号添加一个User-Defined Setting,命名为COMPANION_APP_BUNDLE_ID。
    • 给UAT Target的这个变量赋值co.company.myApp-UAT
    • 给PRD Target的这个变量赋值co.company.myApp-PRD
  • 切换到myWatchApp的项目配置,打开它的Info.plist文件,找到WKCompanionAppBundleIdentifier这一项,把值改成$(COMPANION_APP_BUNDLE_ID)。
  • 最后确保myWatchApp的Target依赖对应的主App Target(在myWatchApp的General标签页的Frameworks, Libraries, and Embedded Content里添加对应主App Target),这样Build时变量会自动传递过来。

方案二:多环境Info.plist文件替换

如果你的watchApp还有其他需要分环境配置的参数,这个方案更灵活:

  • 给myWatchApp创建两个Info.plist文件,比如Info-UAT.plist和Info-PRD.plist,分别在这两个文件里把WKCompanionAppBundleIdentifier设为对应的主App Bundle ID。
  • 打开myWatchApp的Build Settings,找到Info.plist File选项,点击旁边的箭头展开,为每个Build Configuration(比如UAT Debug/PRD Release)指定对应的plist文件。这样切换环境Build时,Xcode会自动用对应的plist文件。

方案三:Build时自动替换的Run Script

如果前两种方案不适合你的项目结构,可以用脚本在Build过程中自动修改plist:

  • 打开myWatchApp的Target配置,切换到Build Phases标签,点击+号选择New Run Script Phase,把这个Phase拖到Compile Sources之前。
  • 在脚本输入框里粘贴以下代码(根据你的Target名称调整逻辑):
# 从主App Target获取Bundle ID(假设主App Target名称是myApp-UAT/myApp-PRD,watchApp是myWatchApp-UAT/myWatchApp-PRD)
MAIN_APP_TARGET_NAME="${TARGET_NAME/WatchApp/}"
COMPANION_BUNDLE_ID=$(xcodebuild -showBuildSettings -target "$MAIN_APP_TARGET_NAME" | grep -E "^    PRODUCT_BUNDLE_IDENTIFIER" | awk '{print $3}')

# 替换watchApp Info.plist中的WKCompanionAppBundleIdentifier
/usr/libexec/PlistBuddy -c "Set :WKCompanionAppBundleIdentifier $COMPANION_BUNDLE_ID" "${INFOPLIST_FILE}"
  • 记得测试一下:切换不同Target Build,然后查看myWatchApp的产物里的Info.plist,确认值是否正确。

注意事项

  • 不管用哪个方案,都要先切换Target/Build Configuration进行Build测试,确保最终的plist值正确匹配主App环境。
  • 如果用自定义变量,若myWatchApp无法直接获取到主App的变量,可以在myWatchApp的Build Settings里也添加同名变量,然后通过$(PRODUCT_BUNDLE_IDENTIFIER)或者主App的Target变量传递。

内容的提问来源于stack exchange,提问作者behrad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 08:49:08