Las compilaciones de iOS / la creación de ipa ya no funciona desde la línea de comandos


Sinopsis

Nuestra línea de comandos construye (para construir y crear el .ipa) ya no funcionan.

ITunesConnect ha comenzado a rechazar compilaciones que usan la configuración de compilación CODE_SIGN_RESOURCE_RULES_PATH.

Si construimos SIN ese ajuste la herramienta PackageApplication (que usamos para crear el firmado .ipa) falla.

Parece que PackageApplication llama a/usr/bin / codesign con argumentos resource-rules incluso si la configuración de compilación CODE_SIGN_RESOURCE_RULES_PATH está excluida

I sospeche que la aplicación PackageApplication necesita ser actualizada para que no llame a /usr/bin/codesign con argumentos resource-rules cuando la configuración de compilación CODE_SIGN_RESOURCE_RULES_PATH está excluida.

Alguien Ha encontrado una solución para esto?

Detalles

Construimos nuestra aplicación en la línea de comandos de esta manera:

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'

Creamos el firmado .ipa en la línea de comandos de esta manera:

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 ahora está rechazando nuestras compilaciones con el siguiente error:

"Este paquete no es válido. INFO.plist contiene una clave no válida 'CFBundleResourceSpecification' en bundle myApp [myApp.app]"

Si eliminamos el bit 'CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist' del comando build, entonces la aplicación se construye sin la clave plist CFBundleResourceSpecification (que supongo que es lo que queremos). El nuevo comando build se ve así:

xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution OBJROOT=$PWD/build SYMROOT=$PWD/build ONLY_ACTIVE_ARCH=NO 

El problema ahora es que el comando para construir el .ipa falla con el siguiente error:

Error: / usr / bin / codesign force force -- preserve-metadata = identifier,entitlements,resource-rules sign sign iPhone Distribution: MyTEAM (XXXXXXXXX) -- resource-rules = /var/folders/2b/7hylk7nn13dgrl9yyh2wp0lm0000gn/T/zDRRJMkKtQ/Payload / myApp.app / ResourceRules.plist -- entitlements / var / folders / 2b / 7hylk7nn13dgrl9yyh2wp0lm0000gn / T / zDRRJMkKtQ / entitlements_plistIUdGWLYe / var/folders/2b/7hylk7nn13dgrl9yyh2wp0lm0000gn/T/zDRRJMkKtQ/Payload / myApp.app error 1. Salida: Advertencia: uso de metadata preserve-metadata con opción "reglas de recursos" (obsoletas en Mac OS X >= 10.10)!

Advertencia: resource resource-rules ha sido obsoleto en Mac OS X >= 10.10! / var/folders/2b/7hylk7nn13dgrl9yyh2wp0lm0000gn/T/zDRRJMkKtQ/Payload / myApp.app / ResourceRules.plist: no se pueden leer recursos

Parece que PackageApplication llama a /usr/bin/codesign con argumentos resource-rules incluso si el parámetro CODE_SIGN_RESOURCE_RULES_PATH argumento / build está excluido.

Creo que la aplicación PackageApplication debe actualizarse para que no llama a/usr/bin / codesign con argumentos resource-rules cuando se excluye el parámetro argumento / build de CODE_SIGN_RESOURCE_RULES_PATH.

Author: Vadim Kotov, 2015-09-24

5 answers

Apple me respondió con una solución. A partir de Xcode 7 debemos usar xcodebuild en lugar de PackageApplication para producir el .archivo ipa.

Xcodebuild tiene una opción new-exportArchive para crear un .ipa que funciona más como Xcode Organizer.

Así que ahora debemos: {[14]]}

  1. construir un archivo con xcodebuild archive
  2. crear el .ipa con xcodebuild -exportArchive

Ahora construimos el archivo así:

xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution archive -archivePath $PWD/build/myApp.xcarchive

Ahora exportamos el .ipa como esto:

xcodebuild -exportArchive -archivePath $PWD/build/myApp.xcarchive -exportOptionsPlist exportOptions.plist -exportPath $PWD/build

Estos dos comandos crean los archivos build/myApp.xcarchive y build/myApp.ipa

Tenga en cuenta que xcodebuild -exportArchive requiere un argumento -exportOptionsPlist que apunta a a .archivo plist con opciones de exportación. Para obtener una lista completa de lo que puede poner en esa lista, ejecute xcodebuild -help. El contenido mínimo del archivo se ve así:

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

En Xcode 9, ahora tiene que especificar más detalles en exportOptions.plist como abajo:

<?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> 
 101
Author: Mike Vosseller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-26 01:58:31

Pasos para hacer iPA Usig terminal

Proyecto limpio:

Liberación

xcodebuild clean -project ProjectPath/myApp.xcodeproj -configuration  ReleaseAdhoc  -alltargets

Depurar

xcodebuild clean -project ProjectPath/myApp.xcodeproj -configuration Debug -alltargets

Proyecto de archivo:

Depurar

xcodebuild archive -project  ProjectPath/myApp.xcodeproj  -scheme “myApp” -configuration Debug  -archivePath  pathForArchiveFolder/myApp.xcarchive

Liberación

xcodebuild archive -project  ProjectPath/myApp.xcodeproj  -scheme “myApp”  -archivePath  pathForArchiveFolder/myApp.xcarchive

IPA de exportación

Versión anterior: Esto puede dar un recurso firmado ha sido añadido, modificado o eliminado. Error

xcodebuild -exportArchive -archivePath  projectPath/myapp.xcarchive  -exportPath  projectPath/myApp.ipa  -exportFormat ipa  -exportProvisioningProfile  “provisioning profile”

Nueva versión:

xcodebuild -exportArchive -archivePath  ProjectPath/myapp.xcarchive  -exportPath  projectPath/myApp.ipa  -exportOptionsPlist  ProjectFolder/exportPlist.plist
 12
Author: Devesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-19 11:31:11

Aquí hay un consejo rápido en caso de que necesite crear las exportOptions.archivo plist como parte de su proceso de compilación (tal vez Jenkins).

Puede usar la herramienta plutil para convertir JSON en un plist. Ejemplo:

echo "{\"method\":\"app-store\"}" | plutil -convert xml1 -o /tmp/exportOptions.plist -- -

Disfrute!

 2
Author: Johannes Fahrenkrug,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-31 19:06:38

Ir a la carpeta del proyecto:

Archivo:

Para DEPURAR:

xcrun xcodebuild -scheme MyApp -configuration Debug archive -archivePath build/MyApp.xcarchive

Para la Liberación:

xcrun xcodebuild -scheme MyApp -configuration Release archive -archivePath build/MyApp.xcarchive

Obtener iPA:

xcrun xcodebuild -exportArchive -exportPath build/ -archivePath build/MyApp.xcarchive/
 1
Author: Devesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-15 14:15:20

He creado un nombre de proyecto myFirstApp y la ubicación del proyecto es Desktop/myFirstApp. Probado en Xcode 8.3

Paso 1 -

cd /Users/Ved/Desktop/myFirstApp/

Paso 2 -

xcodebuild -scheme myFirstApp archive \

-archivePath /Users/Ved/Desktop/myFirstApp.xcarchive

Paso 3 -

xcodebuild -exportArchive -exportFormat ipa \

-archivePath "/Users/Ved/Desktop/myFirstApp.xcarchive" \

-exportPath "/Users/Ved/Desktop/myFirstApp.ipa" \

-exportProvisioningProfile "myFirstAppDevProfile"
 0
Author: Ved Rauniyar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-15 11:54:14