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

如何分别修改iOS与watchOS的PRODUCT_BUNDLE_IDENTIFIER值?

问题描述

现有Shell脚本里的sed命令:

sed -i -e "s/PRODUCT_BUNDLE_IDENTIFIER =.*/PRODUCT_BUNDLE_IDENTIFIER = abc;/g" text.txt

会把所有PRODUCT_BUNDLE_IDENTIFIER统一改成abc。现在要针对下面的配置内容,分别把iOS Identifier和Apple Watch OS Identifier对应的PRODUCT_BUNDLE_IDENTIFIER改成不同的值:

{
   2D02E400000000001C7 /* iOS Identifier */ = {
        isa = XCBuildConfiguration;
        buildSettings = {
            PRODUCT_BUNDLE_IDENTIFIER = "com.iOS";
        };
        name = Debug;
    };
    2D02E000000000051C7 /* Apple Watch OS Identifier */ = {
        isa = XCBuildConfiguration;
        buildSettings = {
            PRODUCT_BUNDLE_IDENTIFIER = "com.watchOS";
        };
        name = Debug;
    };
}
解决方案

可以借助sed的上下文匹配功能,先定位到目标配置块的标识行,再替换块内的PRODUCT_BUNDLE_IDENTIFIER字段:

1. 修改iOS Identifier对应的Bundle ID

用sed匹配包含/* iOS Identifier */的行,然后在后续的配置块内找到目标行替换:

sed -i -e '/\/\* iOS Identifier \*\//,/}.*}/ s/PRODUCT_BUNDLE_IDENTIFIER =.*/PRODUCT_BUNDLE_IDENTIFIER = "com.new.ios";/' text.txt

2. 修改Apple Watch OS Identifier对应的Bundle ID

用同样的逻辑,匹配对应标识行后替换块内字段:

sed -i -e '/\/\* Apple Watch OS Identifier \*\//,/}.*}/ s/PRODUCT_BUNDLE_IDENTIFIER =.*/PRODUCT_BUNDLE_IDENTIFIER = "com.new.watch";/' text.txt

合并成单条命令(可选)

如果想一次性完成两个修改,把两个编辑指令合并即可:

sed -i -e '/\/\* iOS Identifier \*\//,/}.*}/ s/PRODUCT_BUNDLE_IDENTIFIER =.*/PRODUCT_BUNDLE_IDENTIFIER = "com.new.ios";/' \
       -e '/\/\* Apple Watch OS Identifier \*\//,/}.*}/ s/PRODUCT_BUNDLE_IDENTIFIER =.*/PRODUCT_BUNDLE_IDENTIFIER = "com.new.watch";/' text.txt

命令说明

  • /\/\* iOS Identifier \*\//,/}.*}/:定义匹配范围,从包含/* iOS Identifier */的行开始,到配置块的闭合行};结束。
  • s/PRODUCT_BUNDLE_IDENTIFIER =.*/PRODUCT_BUNDLE_IDENTIFIER = "com.new.ios";/:在上述范围内,将原Bundle ID行替换为新值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:05:37