web-dev-qa-db-fra.com

Après la mise à niveau vers xcode 9, cordova app ne construit pas, erreur 70, nécessite un profil de provisioning

Hier, nous avons mis à niveau la version 9 de xcode 8.3.2 vers la version 9. Et maintenant, notre application de distribution d'entreprise Apache Cordova ios refuse de créer.

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

(J'ai remplacé le nom de l'application par "Nom de l'application" pour cette question)

J'ai vérifié que tous les certificats et les profils de provisioning sont définis dans xcode. Et le build.json est défini. Je ne suis pas vraiment un gars Mac et je ne sais pas quoi faire par la suite.

-Edit, le déclassement de xcode en 8.3.3 a résolu le problème. Pas une solution idéale mais je ne peux pas faire grand chose.

32
Trevor

Si vous spécifiez explicitement votre profil d'approvisionnement, comme moi. Comme ceci dans votre build.json Cordova:

"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"
    }
}

Remarque: iCloudContainerEnvironment = La production/le développement n'est requis que si vous utilisez des notifications push

Vous devez définir explicitement la signature manuelle et fournir les clés de provisioning dans votre fichier ExportOptions.plist généré par Cordova. Malheureusement, Cordova ne génère pas actuellement toutes les clés requises.

Voici à quoi cela doit ressembler, du moins pour moi:

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

Le fichier généré par Cordova @ cordova/app/plates-formes/ios/exportOptions.plist se présente comme suit:

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

remarquez qu'il manque les bits importants requis par Xcode 9.

J'ai généré le fichier correct en archivant manuellement la construction, puis en l'exportant, ce qui crée également le fichier exportOptions.plist que j'utilise maintenant comme référence.

Après avoir approfondi mes connaissances, j’ai constaté que ce problème ne pouvait plus être résolu après l’exécution de "Cordova add platform iOS", car il est généré de manière dynamique pendant la phase de construction. J'ai décidé de bifurquer le dépôt Cordova-ios et de soumettre une demande de tirage. Vous pouvez utiliser mon fork directement ou attendre la fusion de la demande d'extraction.

Demande d'extraction https://github.com/Apache/cordova-ios/pull/338/commits

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

Notes d'utilisation de la demande d'extraction

Voir l'exemple ci-dessous. Veuillez noter que le profil d'approvisionnement peut être le nom ou l'UUID du profil. Le nom est préféré pour la maintenance, car UUID change chaque fois pour régénérer le profil.

{
"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"
    }
}
}

Je prévois de corriger manuellement jusqu'à ce que le/un correctif soit intégré à la prochaine version de Cordova. Vous devrez régénérer votre plate-forme iOS après le patch via "Cordova platform rm iOS", puis "Cordova platform add ~/forks/cordova-ios". ~/forks/cordova-ios mon chemin local, utilisez le chemin de votre machine locale où vous avez téléchargé le référentiel Cordova-ios.

Mettre à jour

cordova-ios 4.5.2 a été officiellement publié! Mettez à niveau en exécutant les commandes suivantes: "cordova platform rm ios", puis "cordova platform add [email protected]"

À votre santé!

64
Jerry Horton

Alors que de l'aide arrive et que vous ne voulez pas utiliser Xcode directement (et je ne vous juge pas ????) ... voici une solution temporaire qui a bien fonctionné pour moi:

enlever ios

cordova platform rm ios

ajoutez ios de dev brunch où ce problème est déjà résol . (Plus tard, vous pourrez utiliser ios v4.6.0 ou quel que soit le numéro final qui sera utilisé)

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

J'espère que cela vous aidera aussi! ????

3
Pavel Kovalev