我正在使用 GitLab CI 自动构建适用于 Android 和 iOS 的应用程序。我的 iOS 命令行构建不断失败并出现以下错误:
Code Signing Error: Code signing is required for product type 'Application' in SDK 'iOS 11.0'
我正在使用master
分支来自cordova-ios
GitHub。因为这有以下修复,如下所述:升级到 Xcode 9 后,cordova 应用程序将无法构建,错误 70,需要配置文件 https://stackoverflow.com/questions/46344443/after-upgrading-to-xcode-9-cordova-app-wont-build-error-70-requires-provisio/46370957#46370957
In my build.json
我使用以下设置:
{
"android": {
"debug": {
"keystore": "config/android.keystore",
"storePassword": "<pass>",
"alias": "debug",
"password" : "<pass>",
"keystoreType": ""
},
"release": {
"keystore": "config/android.keystore",
"storePassword": "<pass>",
"alias": "release",
"password" : "<pass>",
"keystoreType": ""
}
},
"ios": {
"debug": {
"codeSignIdentity": "iPhone Developer",
"developmentTeam": "<team id>",
"packageType": "development",
"buildFlag": [
"EMBEDDED_CONTENT_CONTAINS_SWIFT = YES",
"ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES=NO",
"LD_RUNPATH_SEARCH_PATHS = \"@executable_path/Frameworks\""
],
"iCloudContainerEnvironment": "Development"
},
"release": {
"codeSignIdentity": "iPhone Developer",
"developmentTeam": "<team id>",
"packageType": "app-store",
"buildFlag": [
"EMBEDDED_CONTENT_CONTAINS_SWIFT = YES",
"ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES=NO",
"LD_RUNPATH_SEARCH_PATHS = \"@executable_path/Frameworks\""
],
"iCloudContainerEnvironment": "Production"
}
}
}
我确实使用iCloudContainerEnvironment
因为我需要启用推送。
另外,我使用正确的配置文件开始构建过程。我使用 CLI 参数执行此操作,因为我为多个不同的应用程序 IDS 构建应用程序:cordova build ios --device --provisioningProfile=<uuid>
但无论我做什么或尝试它都不会签署应用程序并不断抛出错误。
EDIT:
根据@Jerry Horton的建议,我将配置文件添加到build.json
文件。我尝试使用配置文件名称和配置文件 UUID。两种情况都会抛出以下错误并且没有exportOptions.plist
是可以在platforms/ios/
dir:
Code Signing Error: Provisioning profile "iOS Team Provisioning Profile: nl.XXX.loc.app" is Xcode managed, but signing settings require a manually managed profile.
我什至删除了所有插件,以确保它们不会妨碍我。所以我的build.json
现在看起来像这样:
{
"android": {
"debug": {
"keystore": "config/android.keystore",
"storePassword": "<pass>",
"alias": "debug",
"password" : "<pass>",
"keystoreType": ""
},
"release": {
"keystore": "config/android.keystore",
"storePassword": "<pass>",
"alias": "release",
"password" : "<pass>",
"keystoreType": ""
}
},
"ios": {
"debug": {
"codeSignIdentity": "iPhone Developer",
"developmentTeam": "<team id>",
"provisioningProfile": "<nl.XXX.loc.app or UUID>",
"packageType": "development",
"buildFlag": [
"EMBEDDED_CONTENT_CONTAINS_SWIFT = YES",
"ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES=NO",
"LD_RUNPATH_SEARCH_PATHS = \"@executable_path/Frameworks\""
],
"iCloudContainerEnvironment": "Development"
},
"release": {
"codeSignIdentity": "iPhone Developer",
"developmentTeam": "<team id>",
"packageType": "app-store",
"provisioningProfile": "<nl.XXX.app or UUID>",
"buildFlag": [
"EMBEDDED_CONTENT_CONTAINS_SWIFT = YES",
"ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES=NO",
"LD_RUNPATH_SEARCH_PATHS = \"@executable_path/Frameworks\""
],
"iCloudContainerEnvironment": "Production"
}
}
}
导出选项.plist:
当我手动打开 op XCode 并手动创建存档/导出以进行调试时,我确实得到了一个 IPA,并且在该文件夹中有一个ExportOptions.plist
, 像这样:
<?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>compileBitcode</key>
<false/>
<key>method</key>
<string>development</string>
<key>provisioningProfiles</key>
<dict>
<key>nl.XXX.loc.app</key>
<string>nl.XXX.loc.app</string>
</dict>
<key>signingCertificate</key>
<string>iPhone Developer</string>
<key>signingStyle</key>
<string>manual</string>
<key>stripSwiftSymbols</key>
<true/>
<key>teamID</key>
<string>TEAMID</string>
<key>thinning</key>
<string><none></string>
</dict>
</plist>
我真的看不出这里出了什么问题。也许是细化的部分?