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。