iOS使用 jenkins 打包错误问题

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

WX20210924-155008@2x.png

WX20210924-155029@2x.png

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


WX20210924-160139.png

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

WX20210924-161305.png

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容