我正在尝试为TestFlight版本构建和导出IPA。我正在Azure DevOps托管的Mac代理上运行构建管道,因此无法使用自动签名。(这是一个Flutter应用程序,但我不确定它是否与我遇到的特定问题有关(这是我在构建步骤中发生的事情:
- 我安装";"iPhone分发";证书和";AppStore配置文件";在构建机器上。("AppStore配置文件"是使用苹果开发者门户中的"iPhone分发"证书生成的(
- 运行Flutter版本构建,以便生成本机xcode构建所需的xcodeproject资源
- 运行";xcodebuild档案";xcworkspace上的命令;project.pbxproj":
CODE_SIGN_IDENTITY= "iPhone Distribution: XXXXX PTY LTD (XXXXXXXXXX)";
PROVISIONING_PROFILE_SPECIFIER = "AppStore Profile";
步骤3使用** ARCHIVE SUCCEEDED **
成功
- 运行;xcodebuild-exportArchive";用"-exportOptionsPlist XcodeTaskExportOptions.plist"。以下是";XcodeTaskExportOptions.plist":
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>signingStyle</key>
<string>manual</string>
<key>teamID</key>
<string>XXXXXXXX</string>
<key>signingCertificate</key>
<string>iPhone Distribution: XXXXX PTY LTD (XXXXXXXXXX)</string>
<key>provisioningProfiles</key>
<dict>
<key>com.myproj.app</key>
<string>AppStore Profile</string>
<key>method</key>
<string>app-store</string>
</dict>
</dict>
</plist>
步骤4失败,出现以下错误:
...Error Domain=IDEProfileQualificationErrorDomain Code=3
"Provisioning profile "AppStore Profile" is not an "iOS App Development" profile."
UserInfo={IDEProfileQualification...
出于某种原因,它在抱怨我的";AppStore配置文件";不是";开发";轮廓显然,我正试图为TestFlight版本创建一个AppStore IPA,所以我不想使用任何";开发";证书或配置文件。我不明白我在这里做错了什么。感谢您的帮助。谢谢
好吧,我发现了错误。这是由于我在XcodeTaskExportOptions.list中使用了错误的格式;方法";内部";provisioningProfiles";。应该将其移动到根级别。
修正后的plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>signingStyle</key>
<string>manual</string>
<key>method</key>
<string>app-store</string>
<key>teamID</key>
<string>XXXXXXXX</string>
<key>signingCertificate</key>
<string>iPhone Distribution: XXXXX PTY LTD (XXXXXXXXXX)</string>
<key>provisioningProfiles</key>
<dict>
<key>com.myproj.app</key>
<string>AppStore Profile</string>
</dict>
</dict>
</plist>