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

如何基于Scheme移除「Embed watch content」仅为指定应用发布手表端

可行解决方案汇总

完全可以通过Scheme配置实现仅给指定版本App嵌入手表端的需求,以下是两种可直接落地的方案:

方案1:Build Phase 条件化配置(无脚本,稳定性最高)

该方案依赖Xcode原生的Build Phase条件判断能力,无需额外清理操作,不会产生冗余中间产物:

  • 打开Xcode选中iOS主target,进入Build Settings页面,点击左上角+号选择「Add User-Defined Setting」,新增自定义变量EMBED_WATCH_APP
  • 打开需要带手表端的Scheme,进入Edit Scheme → Build → Pre-actions,添加Run Script内容为:
    export EMBED_WATCH_APP=YES
    
  • 打开不需要带手表端的Scheme,同样在Pre-actions里添加Run Script内容为:
    export EMBED_WATCH_APP=NO
    
  • 回到主target的Build Phases页面,找到Embed Watch Content阶段,点击右上角的Condition输入框,填入判断条件:$EMBED_WATCH_APP == YES
  • 配置完成后,只有对应Scheme构建时才会执行手表内容嵌入逻辑,无手表需求的包不会包含任何手表相关的二进制、资源文件。

方案2:后置清理脚本(灵活度更高,适配旧版本Xcode)

如果你的Xcode版本不支持Build Phase条件配置,或者需要同时清理其他手表相关冗余内容,可以用编译后脚本处理:

  • 首先给两个Scheme分别配置编译标记:进入需要带手表端的Scheme的Build Settings,在Swift Compiler - Custom Flags里添加-DINCLUDE_WATCH_APP,在Other C Flags里添加-DINCLUDE_WATCH_APP;不需要带手表端的Scheme不添加该标记
  • 在主target的Build Phases中新增一个Run Script阶段,拖到所有阶段的最末尾,脚本内容为:
    # 检查当前编译是否需要保留手表内容
    if [[ ! "${OTHER_CFLAGS}" =~ "INCLUDE_WATCH_APP" ]]; then
      # 清理构建产物中的手表相关目录
      rm -rf "${TARGET_BUILD_DIR}/${WRAPPER_NAME}/Watch"
      rm -rf "${TARGET_BUILD_DIR}/${WRAPPER_NAME}/Plugins"/*Watch*
    fi
    

注意:两种方案都建议你将代码中调用手表相关API的逻辑用#if INCLUDE_WATCH_APP / #endif包裹,避免无手表需求的包出现无用符号、链接错误等问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:45:07