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
.
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]]}
- construir un archivo con
xcodebuild archive
- 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><none></string>
</dict>
</plist>
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
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!
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/
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"
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