Xcode 7:更改产品包标识符

问题描述 投票:40回答:5

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

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

Jenkins Xcode plugin - Code signing & OS X keychain options

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

如果我手动完成同样的事情。我在Xcode 7中创建了一个新项目。默认情况下,这三个值是:

Info plist beforetarget general beforepackaging

当我更改Info.plist文件中的值时,如下所示:

Info plist changed

另外两个值将是:

target general after packaging after

那么你如何看待Build Settings中的值并没有改变。如果我在Xcode中,我手动更改该值,但如果我在Jenkins中构建项目,则这是一个双重问题。

有谁遇到过同样的问题?你是如何解决的?

谢谢!

xcode jenkins jenkins-plugins xcode7 bundle-identifier
5个回答
29
投票

面临同样的问题。

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


26
投票

udit's answer是正确的。最佳做法是将plist set Bundle ID值设置为$ PRODUCT_BUNDLE_IDENTIFIER。然后在Build Settings中,使用不同的配置(Debug,Release .etc)根据需要设置不同的bundle ID:enter image description here

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

enter image description here


11
投票

有关使用shell命令替换$ PRODUCT_BUNDLE_IDENTIFIER的简单解决方案,请参阅this,如 -

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


3
投票

对于xcode 8.x

更改“目标”>“您的帐户”下的应用程序名称 - “信息”>添加新属性键不会在整个项目中随处更改应用程序名称。

执行此操作时,您的项目将在您的Mac中顺利运行(即,在您用于执行这些更改的系统中,因为所有属性键和标识都将保存在您的系统中)。当您尝试在另一个系统中使用您的项目时,如果您在项目中使用了pod,那么您将得到项目丢失的奇怪错误。

因此,要克服这一点,您只需在构建设置中进行一些更改,而不改变常规选项卡和信息选项卡。

在目标>构建设置下,滚动到包装。

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


0
投票

您还可以通过转到目标并选择“级别”来查看纯文本数据,这将显示包含捆绑标识符的列。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.