Présentation
Nos versions de ligne de commande (pour construire et créer le .ipa) ne fonctionnent plus.
iTunesConnect a commencé à rejeter les versions utilisant le paramètre de génération CODE_SIGN_RESOURCE_RULES_PATH
.
Si nous construisons SANS ce paramètre, l'outil PackageApplication (que nous utilisons pour créer le .ipa signé) échoue.
Il semble que PackageApplication appelle/usr/bin/codesign avec des arguments de règles de ressources même si le paramètre de construction CODE_SIGN_RESOURCE_RULES_PATH
Est exclu
Je soupçonne que PackageApplication doit être mis à jour afin qu'il n'appelle pas/usr/bin/codesign avec des arguments de règles de ressources lorsque le paramètre de construction CODE_SIGN_RESOURCE_RULES_PATH
Est exclu.
Quelqu'un a-t-il trouvé une solution à cela?
Détails
Nous construisons notre application sur la ligne de commande comme ceci:
xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution OBJROOT=$PWD/build SYMROOT=$PWD/build ONLY_ACTIVE_Arch=NO 'CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist'
Nous créons le .ipa signé sur la ligne de commande comme ceci:
xcrun -log -sdk iphoneos PackageApplication "/Users/mpv/dev/myApp/build/AppStoreDistribution-iphoneos/myApp.app" -o "/Users/mpv/dev/myApp/build/AppStoreDistribution-iphoneos/myApp.ipa" -sign "iPhone Distribution: MyTeam (XXXXXXXXXX)" -embed /Users/mpv/Library/MobileDevice/Provisioning\ Profiles/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.mobileprovision
iTunesConnect rejette maintenant nos versions avec l'erreur suivante:
"Ce bundle n'est pas valide. Info.plist contient une clé non valide 'CFBundleResourceSpecification' dans le bundle myApp [myApp.app]"
Si nous supprimons le bit 'CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist'
de la commande build, l'application est construite sans la clé CFBundleResourceSpecification
plist (ce qui, je présume, est ce que nous voulons). La nouvelle commande de construction ressemble à ceci:
xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution OBJROOT=$PWD/build SYMROOT=$PWD/build ONLY_ACTIVE_Arch=NO
Le problème est maintenant que la commande pour générer le .ipa échoue avec l'erreur suivante:
erreur:/usr/bin/codesign --force --preserve-metadata = identifiant, droits, règles de ressources --sign Distribution iPhone: MyTeam (XXXXXXXXXX) --resource-rules =/var/dossiers/2b/7hylk7nn13dgrl9yyh2wp0lm0000gn/T /zDRRJMkKtQ/Payload/myApp.app/ResourceRules.plist --entitlements/var/chemises/2b/7hylk7nn13dgrl9yyh2wp0lm0000gn/T/zDRRJMkKtQ/habilitations_plistIUdGWLYee/var/foldersnbJlk 1. Sortie: Attention: utilisation de --preserve-metadata avec l'option "resource-rules" (déconseillée sous Mac OS X> = 10.10)!
Attention: --resource-rules est déconseillé sous Mac OS X> = 10.10! /var/folders/2b/7hylk7nn13dgrl9yyh2wp0lm0000gn/T/zDRRJMkKtQ/Payload/myApp.app/ResourceRules.plist: impossible de lire les ressources
Il semble que PackageApplication appelle/usr/bin/codesign avec des arguments de règles de ressources même si le paramètre d'argument/build CODE_SIGN_RESOURCE_RULES_PATH
Est exclu.
Je pense que PackageApplication doit être mis à jour afin qu'il n'appelle pas/usr/bin/codesign avec des arguments de règles de ressources lorsque l'argument CODE_SIGN_RESOURCE_RULES_PATH
/Paramètre de construction est exclu.
Apple m'a recontacté avec une solution. Depuis Xcode 7, nous devrions utiliser xcodebuild
au lieu de PackageApplication
pour produire le fichier .ipa.
xcodebuild a une nouvelle option -exportArchive pour créer un .ipa qui fonctionne plus comme Xcode Organizer.
Nous devons donc maintenant:
xcodebuild archive
xcodebuild -exportArchive
Nous construisons maintenant l'archive comme ceci:
xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution archive -archivePath $PWD/build/myApp.xcarchive
Nous exportons maintenant le .ipa comme ceci:
xcodebuild -exportArchive -archivePath $PWD/build/myApp.xcarchive -exportOptionsPlist exportOptions.plist -exportPath $PWD/build
Ces deux commandes créent les fichiers build/myApp.xcarchive
et build/myApp.ipa
Notez que xcodebuild -exportArchive
nécessite un -exportOptionsPlist
argument qui pointe vers un fichier .plist avec des options d'exportation. Pour une liste complète de ce que vous pouvez mettre dans cette liste, exécutez xcodebuild -help
. Le contenu minimal du fichier ressemble à ceci:
<?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>method</key>
<string>app-store</string>
<key>teamID</key>
<string>YOUR_TEN_CHARACTER_TEAM_ID</string>
</dict>
</plist>
Dans Xcode 9, vous devez maintenant spécifier plus de détails dans exportOptions.plist comme ci-dessous:
<?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>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><none></string>
</dict>
</plist>
Étapes pour créer un terminal iPA Usig
Projet propre:
Version
xcodebuild clean -project ProjectPath/myApp.xcodeproj -configuration ReleaseAdhoc -alltargets
Déboguer
xcodebuild clean -project ProjectPath/myApp.xcodeproj -configuration Debug -alltargets
Projet d'archive:
Débogage
xcodebuild archive -project ProjectPath/myApp.xcodeproj -scheme “myApp” -configuration Debug -archivePath pathForArchiveFolder/myApp.xcarchive
Version
xcodebuild archive -project ProjectPath/myApp.xcodeproj -scheme “myApp” -archivePath pathForArchiveFolder/myApp.xcarchive
Export IPA
Ancienne version: Cela peut donner Une ressource signée a été ajoutée, modifiée ou supprimée. Erreur
xcodebuild -exportArchive -archivePath projectPath/myapp.xcarchive -exportPath projectPath/myApp.ipa -exportFormat ipa -exportProvisioningProfile “provisioning profile”
Nouvelle version:
xcodebuild -exportArchive -archivePath ProjectPath/myapp.xcarchive -exportPath projectPath/myApp.ipa -exportOptionsPlist ProjectFolder/exportPlist.plist
Voici un petit conseil au cas où vous auriez besoin de créer le fichier exportOptions.plist dans le cadre de votre processus de construction (peut-être Jenkins).
Vous pouvez utiliser l'outil plutil
pour transformer JSON en plist. Exemple:
echo "{\"method\":\"app-store\"}" | plutil -convert xml1 -o /tmp/exportOptions.plist -- -
Prendre plaisir!
Accédez au dossier du projet:
Archiver:
pour DEBUG:
xcrun xcodebuild -scheme MyApp -configuration Debug archive -archivePath build/MyApp.xcarchive
pour publication:
xcrun xcodebuild -scheme MyApp -configuration Release archive -archivePath build/MyApp.xcarchive
Récupérer iPA:
xcrun xcodebuild -exportArchive -exportPath build/ -archivePath build/MyApp.xcarchive/
J'ai créé un nom de projet myFirstApp et l'emplacement du projet est Desktop/myFirstApp. Testé sur Xcode
8.3
Étape 1 -
cd /Users/Ved/Desktop/myFirstApp/
Étape 2 -
xcodebuild -scheme myFirstApp archive \
-archivePath /Users/Ved/Desktop/myFirstApp.xcarchive
Étape 3 -
xcodebuild -exportArchive -exportFormat ipa \
-archivePath "/Users/Ved/Desktop/myFirstApp.xcarchive" \
-exportPath "/Users/Ved/Desktop/myFirstApp.ipa" \
-exportProvisioningProfile "myFirstAppDevProfile"