我正在尝试使用xcodebuild构建我的应用程序:
xcodebuild -workspace "RG.xcworkspace" -scheme "Production" -configuration "Release" build CONFIGURATION_BUILD_DIR="${TEMP_DIR}" PROVISIONING_PROFILE="1234-5678-9098-7654-3210"
我的计划有两个目标。一个目标是应用程序,另一个是应用程序扩展(我为Safari构建了一个扩展)。应用扩展程序是目标依赖项。每个目标都需要单独的配置文件。我不知道如何为依赖项指定PROVISIONING_PROFILE。我正如预期的那样收到此错误:
CodeSign error: code signing is required for product type 'App Extension' in SDK 'iOS 8.1'
StackOverflow和xcodebuild的手册页似乎没有提出任何建议。有谁知道如何使用xcodebuild构建一个依赖于两个配置文件的项目?
答案 0 :(得分:48)
我今天花了很长时间研究这个问题。当答案袭击我时,我正在去睡觉的路上:
在每个目标的构建设置中,您应为个人资料名称设置$VARIABLE
。为此,请从配置文件列表底部选择“其他”。这样做会打开一个文本字段 - 为每个目标选择不同的$VARIABLE
- 例如,我为容器应用目标选择$APP_PROFILE
,为今天的扩展目标选择$EXTENSION_PROFILE
这将产生如下内容:
最后,在使用xcodebuild
进行构建时,请像使用PROVISIONING_PROFILE
一样指定配置文件UUID:
xcodebuild ... APP_PROFILE="85b6f019-d5e5-43a7-9e8f-e3aaed64a7e4" EXTENSION_PROFILE="e50cf605-ab63-40ad-8329-2758359ea748"
从XCode内部构建似乎不受影响 - 据我所知,XCode正在选择默认配置文件(就像在“自动”模式下一样)
理论上,这也支持多个扩展。
使用XCode 6.3为我工作:)
答案 1 :(得分:2)
有一个选项,-exportSigningIdentity
可以帮助您,因为应用程序&提供配置文件。扩展/窗口小部件可能不同,但签署了app& amp;扩展应该是相同的。
例如,你会看到,
基本上是相同的字符串,假设此标识是“代码签名标识(id)”。所以建立&导出存档,你可以运行的,简单,
xcodebuild clean -workspace HelloWorld.xcworkspace -scheme HelloWorld
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)"
答案 2 :(得分:1)
几个月后......找到一个不涉及Xcode中设置值的解决方案:在sigh
内,有script能够使用给定的配置文件重新签名ipa文件。以下适用于我:
n = int(input())
input = [int(i) for i in input().split()]
count, t_length = 0, 0
cmp = input[0]
while True:
length = len(input)
for i in range(1, length):
if input[i] == -1:
t_length += 1
continue
if input[i] > cmp:
cmp = input[i]
input[i] = -1
else:
t_length += 1
cmp = input[i]
if t_length+1 == length:
break
count += 1
cmp, t_length = input[0], 0
print(count)
其中:
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
是现有的ipa Experiments-AdHocProd.ipa
是扩展程序包ID com.company.experiments.AudioPlugin
是扩展程序资料Experiments-AdHocProd_com.company.experiments.AudioPlugin.mobileprovision
是主要的应用包标识符com.company.experiments
是主要应用个人资料每个配置文件的包标识符必须与将要签名的应用程序的标识符匹配。
我发现需要注意的重要事项的是,如果包标识符有通配符(在我的情况下Experiments-AdHocProd.mobileprovision
确实存在),那么具有显式ID的配置文件必须传递到{{ 1}}首先。
或者,您可以使用Experiments-AdHocProd.mobileprovision
执行辞职。不幸的是,-p
没有提及有关使用扩展程序重新签名二进制文件的任何内容,但是sigh
会这样做。
答案 3 :(得分:0)
在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.
对所有目标重复相同的操作。
我能够生成构建。