升级到xcode 9之后,cordova app不会生成,错误70需要configuration文件

昨天我们从xcode 8.3.2升级到了版本9.现在我们的企业发行apache cordova ios应用程序拒绝构build。

2017-09-21 07:37:16.787 xcodebuild[70400:217569] [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Created bundle at path '/var/folders/wj/yj3cfvh954gbc_btlhcrcx7nk7t4dj/T/App Name_2017-09-21_07-37-16.786.xcdistributionlogs'. 2017-09-21 07:37:16.938 xcodebuild[70400:217569] [MT] IDEDistribution: Step failed: <IDEDistributionSigningAssetsStep: 0x7ff756bbdf70>: Error Domain=IDEDistributionSigningAssetStepErrorDomain Code=0 "Locating signing assets failed." UserInfo={NSLocalizedDescription=Locating signing assets failed., IDEDistributionSigningAssetStepUnderlyingErrors=( "Error Domain=IDEProvisioningErrorDomain Code=9 \"\"App Name.app\" requires a provisioning profile.\" UserInfo={NSLocalizedDescription=\"App Name.app\" requires a provisioning profile., NSLocalizedRecoverySuggestion=Add a profile to the \"provisioningProfiles\" dictionary in your Export Options property list.}" )} error: exportArchive: "App Name.app" requires a provisioning profile. Error Domain=IDEProvisioningErrorDomain Code=9 ""App Name.app" requires a provisioning profile." UserInfo={NSLocalizedDescription="App Name.app" requires a provisioning profile., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.} ** EXPORT FAILED ** Error: Error code 70 for command: xcodebuild with args: -exportArchive,-archivePath,App Name.xcarchive,-exportOptionsPlist,/Users/Shared/Workspace/github/AppName/platforms/ios/exportOptions.plist,-exportPath,/Users/Shared/Workspace/github/AppName/platforms/ios/build/device 

(我用这个问题的“应用程序名称”replace了应用程序名称)

我已经validation所有证书和供应configuration文件在xcode中设置。 build.json被设置。 我不是一个真正的Mac家伙,我很难接下来做什么。

– 编辑,降级到8.3.3的Xcode解决了这个问题。 不是一个理想的解决scheme,但我可以做的不多。

如果您明确指定configuration文件,就像我一样。 像你的Cordova build.json一样:

 "ios": { "debug": { "codeSignIdentitiy": "iPhone Developer", "developmentTeam":"MYTEAMID", "packageType": "developer", "iCloudContainerEnvironment": "Development" }, "release": { "codeSignIdentitiy": "iPhone Distribution", "developmentTeam":"MYTEAMID", "provisioningProfile": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "packageType": "ad-hoc", "iCloudContainerEnvironment": "Production" } } 

请注意 iCloudContainerEnvironment =生产/开发只有在您使用推送通知时才需要

您需要明确设置手动签名,并在由Cordova生成的ExportOptions.plist中提供configuration密钥。 不幸的是,cordova目前没有生成所有必需的钥匙。

至less对我来说,这就是它需要的样子:

 <?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>ad-hoc</string> <key>iCloudContainerEnvironment</key > <string>Production</string> <key>provisioningProfiles</key> <dict> <key>my.bundle.idenifier</key> <string>My Provisioning Profile Name</string> </dict> <key>signingCertificate</key> <string>iPhone Distribution</string> <key>signingStyle</key> <string>manual</string> <key>stripSwiftSymbols</key> <true/> <key>teamID</key> <string>YOURTEAMID</string> <key>thinning</key> <string>&lt;none&gt;</string> </dict> </plist> 

Cordova生成的文件为@ cordova / app / platforms / ios / 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>teamID</key> <string>MYTEAMID</string> </dict> </plist> 

注意到它缺lessXcode 9需要的重要部分。

我通过手动归档构build生成了正确的文件,然后导出它,这也创build了我现在用作参考的exportOptions.plist。

深入挖掘之后,发现运行“Cordova add platform iOS”后无法修复,因为它是在构build阶段dynamic生成的。 我决定分叉cordova – IOS的​​回购,并提交拉请求。 您可以直接使用我的分支,或者等到pull请求被合并。

请求 https://github.com/apache/cordova-ios/pull/338/commits

https://github.com/jrryhrtn/cordova-ios

拉请求的使用说明

请参阅下面的示例,请注意,configurationconfiguration文件可以是configuration文件的名称或UUID。 因为UUID每次更改以重新生成configuration文件,所以优先使用名称。

 { "ios": { "debug": { "codeSignIdentity": "iPhone Developer", "developmentTeam":"YOURTEAMID", "provisioningProfile": "provisioning profile name or UUID", "packageType": "development" }, "release": { "codeSignIdentity": "iPhone Distribution", "developmentTeam":"YOURTEAMID", "provisioningProfile": "provisioning profile name or UUID", "packageType": "ad-hoc" } } } 

我打算手动补丁,直到/ a修复合并到下一个Cordova版本。 你将不得不通过“Cordova platform rm iOS”,然后“Cordova platform add〜/ forks / cordova-ios”来修复你的iOS平台。 〜/ forks / cordova-ios我的本地path,使用您下载分叉的Cordova-ios回购的本地机器上的path。

更新

cordova-ios 4.5.2已经正式发布! 通过运行以下命令来升级:“cordova platform rm ios”,然后“cordova platform add ios@4.5.2”

干杯!

虽然帮助来了,你不想直接使用Xcode(我不认为你😉)…这是一个临时的解决scheme,为我工作得很好:

删除ios

 cordova platform rm ios 

从dev早午餐中添加这个问题已经解决的 ios。 (以后你可以使用ios v4.6.0或者其他的#)

 cordova platform add https://github.com/apache/cordova-ios.git 

我希望它也能帮助你! 🙂