Xcode7:更改产品包标识符

Xcode 7: changing product bundle identifier

我正在设置 Jenkins 以自动执行构建过程。特别是,根据我的需要,我希望能够设置不同的包标识符。

我正在使用 Xcode Jenkins 插件来设置包标识符:

问题是这会更改 Info.plist 文件和 MyTarget > General > Bundle Identifier 中的包标识符。但它不会更改构建设置 > 打包 > 产品包标识符中的包标识符。

如果我手动执行,也会发生同样的事情。 我在Xcode7新建一个项目,默认三个值是:

当我像这样更改 Info.plist 文件中的值时:

另外两个值为:

所以您如何查看构建设置中的值并没有改变。如果我在 Xcode 中,我会手动更改该值,但如果我在 Jenkins 中构建项目,这是另一个问题。

有人遇到过同样的问题吗?你是怎么解决的?

谢谢!

遇到了同样的问题。

PRODUCT_BUNDLE_IDENTIFIER 是您的 project.pbxproj 文件中的一个变量。将其更改为您想要的任何内容,它将反映在您的 Info.plist 以及项目设置中。

是正确的。最佳实践是在 plist 中将 Bundle ID 值设置为 $PRODUCT_BUNDLE_IDENTIFIER。然后在 Build Settings 中,使用不同的配置(Debug、Release .etc)根据需要设置不同的 bundle ID:

您不再需要 xCode 插件来更改 bundle id,但需要在其中指定配置。

请参阅 以获取使用 shell 命令替换 $PRODUCT_BUNDLE_IDENTIFIER 的简单解决方案,例如 -

sed -i '' 's/com.example.oldbundleid/com.example.newbundleid/g' project.pbxproj

您可以使用 Jenkins/Shell 相应地传递您的变量。

另一种方法是使用 mod-pbxproj

python -m mod_pbxproj -b -af PRODUCT_BUNDLE_IDENTIFIER=com.example.newbundleid -rf PRODUCT_BUNDLE_IDENTIFIER=com.example.oldbundleid project.pbxproj All

//编辑

旧的包 ID 可以通过 -

获取

awk -F '=' '/PRODUCT_BUNDLE_IDENTIFIER/ {print ; exit}' project.pbxproj

这可以存储在字符串变量中并用于代替 com.example.oldbundleid

对于xcode8.x

在目标下更改应用程序名称> your_app_name - 信息> 添加新的 属性 密钥 不会在整个过程中对所有地方的应用程序名称进行完全更改 项目。

执行此操作时,您的项目仅在 mac 中即可顺利运行(即,在您用来进行这些更改的系统中,因为您的所有 属性 密钥和身份都将被保存在你的系统中)。当你尝试在另一个系统中使用你的项目时,如果你在你的项目中使用 pods,你会得到这个奇怪的错误,你的项目丢失了。

因此,要克服这个问题,您只需在构建设置中做一些更改,保持“常规”选项卡和“信息”选项卡不变。

目标>构建设置下,滚动到打包

将您的产品名称更改为所需的名称,并将产品捆绑包标识符更改为新名称。执行此操作后,您的项目显示名称和包 ID 会自动更改为“常规”选项卡中的新名称。

您还可以通过转到目标和 select "Levels" 查看纯文本数据,这将显示一个包含捆绑包标识符的列。

如果您使用 bundle id suffixes,请不要在 Target SettingsGeneral 选项卡上设置 Product Bundle Identifier

Build Settings 选项卡上进行设置。

例如:

com.company.app${BUNDLE_ID_SUFFIX}