xcodebuild不同的供应configuration文件的目标依赖

我试图用xcodebuild来构build我的应用程序:

xcodebuild -workspace "RG.xcworkspace" -scheme "Production" -configuration "Release" build CONFIGURATION_BUILD_DIR="${TEMP_DIR}" PROVISIONING_PROFILE="1234-5678-9098-7654-3210" 

我的计划有两个目标。 一个目标是应用程序,另一个是应用程序扩展(我为Safaribuild立了一个扩展)。 应用扩展程序是目标依赖项。 每个目标都需要一个单独的configuration文件。 我不知道如何为依赖项指定PROVISIONING_PROFILE。 正如预期的那样,我收到了这个错误:

 CodeSign error: code signing is required for product type 'App Extension' in SDK 'iOS 8.1' 

StackOverflow和xcodebuild的手册页似乎没有任何东西。 有谁知道如何build立一个项目与xcodebuild依赖于两个configuration文件?

我今天花了很长时间在这方面工作。 当我的回答打到我的时候,我正在去睡觉的路上:

在每个目标的Build Settings中,您应该为configuration文件名称设置一个$VARIABLE 。 要做到这一点,从configuration文件列表的底部select“其他”。 这样做会打开一个文本字段 – 为每个目标select一个不同的$VARIABLE – 例如我为容器应用程序目标选​​择了$APP_PROFILE ,为我的今天扩展目标select$APP_PROFILE $EXTENSION_PROFILE

添加一个构建变量变量...

这将导致如下内容:

简介

最后,在使用xcodebuild构build时,像使用PROVISIONING_PROFILE一样指定configuration文件UUID:

 xcodebuild ... APP_PROFILE="85b6f019-d5e5-43a7-9e8f-e3aaed64a7e4" EXTENSION_PROFILE="e50cf605-ab63-40ad-8329-2758359ea748" 

从XCode内部构build似乎不受影响 – 就我所知,XCode正在select默认configuration文件(就像在“自动”模式下一样)

理论上这也会支持多个扩展。

用XCode 6.3为我工作:)

无variables解决scheme

有一个选项-exportSigningIdentity可以帮助你,因为Application&Extension / Widget的configuration文件可能不同,但是签名app和extension的身份应该是相同的。

例如,你会看到,

  • TargetApp – >生成设置 – >“代码签名身份(id)”(发布)
  • TargetExtension – >生成设置 – >“代码签名身份(id)”(发布)

本质上是相同的string,可以说这个身份是“Code Signing Identity(id)” 。 所以build立和出口档案,你可以运行,简单地说,

清洁的

xcodebuild clean -workspace HelloWorld.xcworkspace -scheme HelloWorld

build造

xcodebuild -workspace HelloWorld.xcworkspace -scheme HelloWorld archive -archivePath ~/output/HelloWorld.xcarchive

出口

xcodebuild -exportArchive -exportFormat ipa -archivePath ~/output/HelloWorld.xcarchive -exportPath "HelloWorld.ipa" -exportSigningIdentity "Code Signing Identity (id)"

参考: xcodebuild文档

几个月后…find了一个不涉及Xcode中的设置值的解决scheme:在sigh里有一个脚本 ,能够使用给定的configuration文件来退出一个ipa文件。 以下为我工作:

 bash resign.sh Experiments-AdHocProd.ipa "iPhone Distribution: Company Pty Ltd" output.ipa -p com.company.experiments.AudioPlugin=Experiments-AdHocProd_com.company.experiments.AudioPlugin.mobileprovision -p com.company.experiments=Experiments-AdHocProd.mobileprovision --verbose 

哪里:

  • Experiments-AdHocProd.ipa是现有的ipa
  • com.company.experiments.AudioPlugin是扩展束ID
  • Experiments-AdHocProd_com.company.experiments.AudioPlugin.mobileprovision是扩展程序configuration文件
  • com.company.experiments是主要的应用程序包标识符
  • Experiments-AdHocProd.mobileprovision是主要的应用程序configuration文件

每个configuration文件的包标识符必须与将要签名的应用程序相匹配。

我发现的一点很重要,就是如果一个bundle标识符有一个通配符(在我的情况下是Experiments-AdHocProd.mobileprovision ),那么带有显式ID的configuration文件必须首先传递给-p


或者,您可以使用sigh执行辞职。 不幸的是, sigh --help没有说任何关于延期辞职的二进制文件,但sigh resign --help

在Swift中,Pod文件框架将被分开打包。 以下步骤解决了这个问题。

  1. Select pods 2. Targets 3. General 4. Edit bundle id 5. Build Settings 6. Code Signing 7. Provisioning profile -> select the valid profile 8. Code Signing Identity -> Select the respective identity from profile. 

对所有目标重复相同的操作。

我能够生成构build。