iOS使用-jenkins-打包错误问题

949 阅读2分钟

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 是会有一些列的配置 需要选择操作的。如下图:

23926378-9801060498b7111a.webp

23926378-ae2edb6d4bc73c31.webp

选择导出的类型( Distribution AdHoc 等),是 Export 还是 Upload 等,之后等待导出

23926378-1a04d9d43a6509a2.webp

其中我们可以看到 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>

我们在使用 jenkinsDistribution 包的时候直接把 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 只要配置好导出Distributionipa 的格式, 这个文件就不会在修改了。因为这次添加了 Extension 所以当前的 ExportOptionsPlist 文件就需要修改,把 ExtensionbundleId 和对应的 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 .

23926378-96f2f63f36a55025.webp

哈哈有点花,但是红框的位置就是当前这个 profile 名字,写在对应的位置即可。