web-dev-qa-db-fra.com

La création de builds / ipa iOS ne fonctionne plus depuis la ligne de commande

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.

33
Mike Vosseller

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:

  1. construire une archive avec xcodebuild archive
  2. créer le .ipa avec 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>&lt;none&gt;</string>
</dict>
</plist> 
103
Mike Vosseller

É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
13
Devesh

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!

2

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/
1
Devesh

J'ai créé un nom de projet myFirstApp et l'emplacement du projet est Desktop/myFirstApp. Testé sur Xcode8.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"
0
Ved Rauniyar