1. 错误内容
error: exportArchive: "xxx.appex" requires a provisioning profile with the App Groups feature.
详细内容:
error: exportArchive: "AirStar.appex" requires a provisioning profile with the App Groups feature.
Error Domain=IDEProvisioningErrorDomain Code=9 ""xxx.appex" requires a provisioning profile with the App Groups feature." UserInfo={IDEDistributionIssueSeverity=3, NSLocalizedDescription="xxx.appex" requires a provisioning profile with the App Groups feature., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.}
2. 问题出现的场景:
在使用 Jenkins 打 app store 包的时候之前打包都正常没有问题,项目添加了 Extension 之后打包出现的这个错误。
3. 问题分析:
首先我们项目次用的是 手动管理证书 manual
模式
从错误的内容中可以看出 是在 exportArchive
的时候出现的问题。
内容是 需要授权文件 和 当前的 Extension 程序匹配。
我们看一下 具体的脚本:
xcodebuild -exportArchive -archivePath xxx.xcarchive -exportPath . -exportOptionsPlist ${plist}
在 exportArchive
的时候 是需要读取 一个 exportOptionsPlist
的导出选项的配置文件。
我们先试用 xcode archive 一下 看看 这个配置文件做了什么。
可以看到,在 xcode archive
的时候 完成之后,我们导出 ipa 是会有一些列的配置 需要选择操作的。如下图:
选择导出的类型( Distribution AdHoc 等),是 Export 还是 Upload 等,之后等待导出
其中我们可以看到 ExportOptions.plist 文件,这个是 Distribution 的文件,具体内容如下 :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>destination</key>
<string>export</string>
<key>method</key>
<string>app-store</string>
<key>provisioningProfiles</key>
<dict>
<key>com.organization.app1</key>
<string>app1 Distribution</string>
</dict>
<key>signingCertificate</key>
<string>Apple Distribution</string>
<key>signingStyle</key>
<string>manual</string>
<key>stripSwiftSymbols</key>
<true/>
<key>teamID</key>
<string>teamId-1234567</string>
<key>uploadBitcode</key>
<false/>
<key>uploadSymbols</key>
<false/>
</dict>
</plist>
我们在使用 jenkins
打 Distribution
包的时候直接把 Distribution
版本的 ExportOptionsPlist
拿出来用就可以了。
4. 解决方案:
1. 方法一:
将 证书管理模式修改为自动模式
//修改
<key>signingStyle</key>
<string>automatic</string>
// 删除
<dict>
<key>com.organization.app</key>
<string>app Distribution</string>
</dict>
或者 通过 xcode archive 一次 生成新的 ExportOptions.plist
文件 来替换 当前 Jenkins 使用的
2. 方法二:
一般情况下我们配置好 ExportOptions.plist
只要配置好导出Distribution
的 ipa
的格式, 这个文件就不会在修改了。因为这次添加了 Extension
所以当前的 ExportOptionsPlist
文件就需要修改,把 Extension
的bundleId
和对应的 profile
文件 写入到 ExportOptions.plist
中即可。
<dict>
<key>com.organization.app</key>
<string>app Distribution</string>
<key>com.organization.app.extensionAction</key>
<string>appAction Distribution</string>
</dict>
com.organization.app.extensionAction
对应的 profile
文件名称从这里可以查看
cd /Users/zhangsan/Library/MobileDevice/Provisioning Profiles
open .
哈哈有点花,但是红框的位置就是当前这个
profile
名字,写在对应的位置即可。