47

我正在设置 Jenkins 以自动化构建过程。特别是,为了我的需要,我希望能够设置不同的捆绑标识符。

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

Jenkins Xcode 插件 - 代码签名和 OS X 钥匙串选项

问题是这将更改 Info.plist 文件和 MyTarget > General > Bundle Identifier 中的包标识符。但它不会更改 Build Settings > Packaging > Product Bundle Identifier 中的包标识符。

如果我手动执行,也会发生同样的事情。我在 Xcode 7 中创建了一个新项目。默认情况下,三个值是:

之前的信息列表目标将军之前包装

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

信息列表已更改

另外两个值将是:

目标将军后 包装后

因此,如何查看 Build Settings 中的值并没有改变。如果我在 Xcode 中,我会手动更改该值,但如果我在 Jenkins 中构建项目,这是一个 bis 问题。

有人遇到同样的问题吗?你如何解决它?

谢谢!

4

6 回答 6

35

面临同样的问题。

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

于 2015-09-30T14:08:09.040 回答
29

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

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

在此处输入图像描述

于 2015-10-02T14:40:58.257 回答
14

有关使用 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 $2; exit}' project.pbxproj

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

于 2015-10-02T17:28:08.170 回答
3

对于xcode 8.x

在 Targets > your_app_name - Info > 添加新属性键下更改应用程序名称不会在整个项目中对应用程序名称进行完全更改。

当您这样做时,您的项目仅在您的 mac 中运行顺利(即,在您用来进行这些更改的系统中,因为您的所有属性键和身份都将保存在您的系统中)。当您尝试在另一个系统中使用您的项目时,如果您在项目中使用 pod,您将收到您的项目丢失的奇怪错误。

因此,要克服这个问题,您只需在 Build settings 中进行一些更改,保持 General 选项卡和 Info 选项卡不变。

Targets > Build settings 下,滚动到Packaging

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

于 2017-02-21T04:49:46.400 回答
0

您还可以通过转到 Targets 并选择“Levels”以纯文本形式查看数据,这将显示包含 Bundle Identifier 的列。

在此处输入图像描述

于 2018-10-31T14:09:51.410 回答
0

如果您使用bundle id suffixes,请不要设置 的Product Bundle IdentifieronGeneral选项卡Target Settings

将其设置在Build Settings选项卡上。

例如:

com.company.app${BUNDLE_ID_SUFFIX}
于 2019-09-26T16:18:13.663 回答