如何使用覆盖非通配符PROVISIONING_PROFILE从命令行构建带有框架的工作空间

时间:2015-06-16 17:11:22

标签: ios xcode xcodebuild

我的工作区包含具有框架目标的项目和使用这些框架的应用程序项目。

使用覆盖的配置文件构建工作区我正在使用下一个命令:

/usr/bin/xcodebuild -sdk iphoneos clean build -workspace <workspace-name> 
-scheme <scheme-name> -configuration Release 
PROVISIONING_PROFILE=<profile-uuid>

配置文件是非通配符。

从Xcode分发构建正常执行。 从命令行生成错误是因为xcodebuild还会覆盖框架的配置文件并尝试对其进行签名。

Code Sign error: Provisioning profile does not match bundle identifier: 
The provisioning profile specified in your build settings (“<profile-name>”) 
has an AppID of “<profile-app-id>” which does not match your 
bundle identifier “<framework-bundle-id>”.

这很奇怪,因为从Xcode构建时,在构建最终应用程序之后,框架会使用应用程序的配置文件重新签名,并且不需要在构建期间对其进行签名。

如何避免此问题?

UPD:命令行构建由Continuous Integration系统上的插件执行,该系统覆盖PROVISIONING_PROFILE变量。这就是为什么继续使用该变量至关重要,而不是一些用户定义的变量。但似乎不可能。 Xcode首先使用您指定的任何匹配配置文件执行框架的冗余签名,然后 - 在将框架安装到捆绑包时使用应用程序的配置文件,并且无法避免这种冗余的首次签名。

1 个答案:

答案 0 :(得分:0)

来自Apple的答案,我已经报告了错误:

  

此问题的行为基于以下内容:

     

在命令行上传递给xcodebuild的设置将覆盖所有设置   正在构建的所有目标的该设置的实例。这就是如何   它有效。

     

要覆盖仅选定的目标,您需要这样做   在你的目标设置中有些棘手,例如:

     

在目标中,假设目标名为“MyTarget”:

     

PROVISIONING_PROFILE = $(PROVISIONING_PROFILE _ $(TARGET_NAME))     PROVISIONING_PROFILE_MyTarget =

     

然后在xcodebuild中,你会这样做:

     

xcodebuild联编   PROVISIONING_PROFILE_MyTarget =

     

如果你有多个目标,你需要有选择地覆盖你   可以为他们每个人做这个,取代设置中的'MyTarget'   名称,每个目标都有适当的名称。

所以目前他们更愿意在工作区构建期间保持框架的冗余签名。