2017-09-21 1 views
23

Gestern haben wir von Xcode 8.3.2 auf Version 9 aktualisiert. Und jetzt weigert sich unsere Unternehmensverteilung Apache Cordova IOS App zu bauen.Nach dem Upgrade auf Xcode 9, Cordova App wird nicht gebaut, Fehler 70, benötigt Provisioning-Profil

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 

(I ersetzt den Namen Apps mit "App-Name" für diese Frage)

Ich habe festgestellt, dass alle Zertifikate und Provisioning-Profile in Xcode gesetzt sind. Und die build.json ist gesetzt. Ich bin nicht wirklich ein Mac-Typ und ich bin ratlos, was ich als nächstes tun soll.

-Edit, Downgrade xcode zu 8.3.3 behob das Problem. Keine ideale Lösung, aber nicht viel, was ich tun kann.

+1

Ich unterschreibe immer manuell. Bis jetzt bringt mich nichts so in Schwierigkeiten. – Hoon

+0

Wie wird das gemacht? –

+0

Nichts Besonderes. Öffnen Sie nach dem Hinzufügen der Plattform vor dem Build xcode und aktivieren Sie das Kontrollkästchen "Signaturen automatisch verwalten". Wenn es kein Problem gibt, fahren Sie mit Build Ios fort. – Hoon

Antwort

45

Wenn Sie explizit Ihr Bereitstellungsprofil angeben, wie ich. Wie dies in Ihrem 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" 
    } 
} 

Bitte beachten iCloudContainerEnvironment = Produktion/Entwicklung nur, wenn Sie Push-Benachrichtigungen verwenden erforderlich ist

Sie müssen manuelle Signierung und bieten die Bereitstellung Schlüssel explizit festgelegt in Ihrer ExportOptions.plist, die von Cordova generiert wird. Leider generiert Cordova derzeit nicht alle erforderlichen Schlüssel. Hier

ist, wie es aussehen muss, zumindest für mich:

<?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> 

Die Datei Cordova erzeugt @ cordova/app/platforms/ios/exportOptions.plist wie folgt aussieht:

<?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> 

Beachten Sie, dass die wichtigen Bits fehlen, die Xcode 9 benötigt.

Ich habe die korrekte Datei erstellt, indem ich den Build manuell archiviert habe, und dann exportiert, was auch die exportOptions.plist erzeugt, die ich jetzt als Referenz verwende.

Nach tiefer graben, fand ich, dass dies nicht behoben werden kann nach dem Ausführen "Cordova add Plattform iOS", weil es während der Build-Phase dynamisch generiert wird. Ich entschied mich, das Cordova-ios Repo auszugeben und eine Pull-Anfrage einzureichen. Sie können meine Verzweigung direkt verwenden oder warten, bis die Pull-Anforderung zusammengeführt wird.

Pull-Request https://github.com/apache/cordova-ios/pull/338/commits

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

Hinweise zur Verwendung von Pull-Request

Beispiel siehe unten Bitte beachten Sie, dass das Bereitstellungsprofil der Name oder die UUID sein kann des Profils. Der Name wird für die Wartung bevorzugt, da sich die UUID jedes Mal ändert, um das Profil neu zu generieren.

Ich plane, manuell zu patchen, bis der/a Fix in der nächsten Cordova-Version zusammengeführt wird. Sie müssen Ihre iOS-Plattform nach dem Patch über "Cordova platform rm iOS" und dann "Cordova platform add ~/forks/cordova-ios" neu generieren.~/forks/cordova-ios mein lokaler Pfad, benutze den Pfad auf deinem lokalen Rechner, wo du das gabelförmige Cordova-ios Repo heruntergeladen hast.

aktualisieren

cordova-ios offiziell freigegeben 4.5.2 wurde! Aktualisieren Sie, indem Sie die folgenden Befehle ausführen: "cordova platform rm ios" und dann "cordova platform add [email protected]"

Prost!

+0

Wow, was für eine Antwort. Vielen Dank. –

+0

Gabel rettete mein Leben, bevor Cordova Merge akzeptiert, danke Mann! – fifth

+0

Ich kann bestätigen, dass dies für Push-Benachrichtigungen funktioniert. Vielen Dank! – JedatKinports

3

Während Hilfe kommt und Sie wollen nicht Xcode direkt verwenden (und ich beurteilen Sie nicht) ... hier ist eine temporäre Lösung, die gut für mich gearbeitet:

ios entfernen

cordova platform rm ios 

hinzufügen ios von dev brunch wo this issue already fixed. (Später können Sie ios V4.6.0 verwenden oder was auch immer endgültig # sein wird)

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

Ich hoffe, es wird Ihnen auch helfen!

Verwandte Themen