34 votes

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 à partir de xcode 8.3.2 à la version 9. Et maintenant, notre entreprise de distribution apache cordova application ios refuse de construire.

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é les apps nom de "Nom de l'Application" pour cette question)

J'ai vérifié que tous les certificats et les profils de configuration sont définis dans xcode. Et la construire.json est réglé. Je ne suis pas vraiment un Mac mec et je suis perplexe sur ce qu'il faut faire ensuite.

-Edit, la Rétrogradation xcode pour 8.3.3 résolu le problème. Pas une solution idéale, mais pas beaucoup que je peux faire.

67voto

Jerry Horton Points 825

Si vous spécifiez un profil de configuration explicitement, comme moi. Comme ceci dans votre Cordova construire.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"
    }
}

Veuillez Noter iCloudContainerEnvironment = Production/Développement est nécessaire uniquement si vous utilisez les notifications push

Vous devez définir explicitement manuel de la signature et de fournir l'approvisionnement clés dans votre ExportOptions.plist qui est généré par Cordova. Malheureusement Cordova ne génère actuellement toutes les clés requises.

Voici à quoi ça doit ressembler, au 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 Cordova génère @ cordova/app/plates-formes/ios/exportOptions.plist ressemble:

<?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 des choses importantes que Xcode 9 exige.

J'ai généré le fichier correct par l'archivage de la construire manuellement, puis de l'exporter ce qui contribue également à la exportOptions.plist que j'utilise désormais comme référence.

Après pour aller plus loin, j'ai trouvé que cela ne peut pas être fixé après l'exécution de "Cordova ajouter de la plate-forme iOS", car il est généré lors de la phase de construction de façon dynamique. J'ai décidé de fourche Cordova-ios repo et soumettre une demande d'extraction. Vous pouvez utiliser ma fourchette directement, ou attendre jusqu'à ce que la demande d'extraction est fusionné.

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

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

Remarques sur l'utilisation de pull request

Voir l'exemple ci-dessous, veuillez noter que le profil de configuration peut être le nom ou l'UUID du profil. Le nom est préféré pour maintenance, comme 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"
    }
}
}

J'ai l'intention de patch manuellement jusqu'à ce que le/un correctif a été intégré dans la prochaine Cordova libération. Vous aurez pour régénérer votre plate-forme iOS, après le patch via "Cordova plate-forme de rm iOS" et puis "Cordova plate-forme d'ajouter ~/fourches/cordova-ios". ~/fourches/cordova-ios mon chemin d'accès local, utilisez le chemin d'accès sur votre ordinateur local où vous avez téléchargé la fourche Cordova-ios repo.

Mise à jour

cordova-ios 4.5.2 a été officiellement lancée! Mise à niveau en exécutant les commandes suivantes: "cordova plate-forme de rm ios", et puis "cordova plate-forme de l'ajouter ios@4.5.2"

Cheers!

3voto

Pavel Kovalev Points 302

Alors que l’aide arrive et que vous ne voulez pas utiliser Xcode directement (et je ne vous juge pas

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X