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 Settings
的 General
选项卡上设置 Product Bundle Identifier
。
在 Build Settings
选项卡上进行设置。
例如:
com.company.app${BUNDLE_ID_SUFFIX}
我正在设置 Jenkins 以自动执行构建过程。特别是,根据我的需要,我希望能够设置不同的包标识符。
我正在使用 Xcode Jenkins 插件来设置包标识符:
问题是这会更改 Info.plist 文件和 MyTarget > General > Bundle Identifier 中的包标识符。但它不会更改构建设置 > 打包 > 产品包标识符中的包标识符。
如果我手动执行,也会发生同样的事情。 我在Xcode7新建一个项目,默认三个值是:
当我像这样更改 Info.plist
文件中的值时:
另外两个值为:
所以您如何查看构建设置中的值并没有改变。如果我在 Xcode 中,我会手动更改该值,但如果我在 Jenkins 中构建项目,这是另一个问题。
有人遇到过同样的问题吗?你是怎么解决的?
谢谢!
遇到了同样的问题。
PRODUCT_BUNDLE_IDENTIFIER
是您的 project.pbxproj
文件中的一个变量。将其更改为您想要的任何内容,它将反映在您的 Info.plist
以及项目设置中。
您不再需要 xCode 插件来更改 bundle id,但需要在其中指定配置。
请参阅
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 Settings
的 General
选项卡上设置 Product Bundle Identifier
。
在 Build Settings
选项卡上进行设置。
例如:
com.company.app${BUNDLE_ID_SUFFIX}