ios - tool - Errores al convertir xcarchive a IPA-archivo de un solo paquete+valores faltantes del método plist
cordovaerror promise rejected with non error xcode select error tool xcodebuild requires xcode (7)
Apple me respondió con una solución. A partir de Xcode 7, deberíamos usar xcodebuild en lugar de PackageApplication para generar el archivo .ipa
.
xcodebuild tiene una nueva opción -exportArchive
para crear un .ipa
que funciona más como Xcode Organizer.
Así que deberíamos ahora:
construir un archivo con xcodebuild
crear el
.ipa
con xcodebuild-exportArchive
Ahora construimos el archivo de esta manera:
xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution archive -archivePath $PWD/build/myApp.xcarchive
Ahora exportamos la .ipa así:
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 un 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>
Estoy tratando de convertir mi xcarchive a una IPA (XCode 7.1.1). El siguiente comando
xcodebuild
-exportArchive -archivePath foo.xcarchive -exportPath . -exportFormat IPA
Falla con el error
el archivo en la ruta ''foo.xcarchive'' no es un archivo de paquete único
Como el comando anterior está técnicamente en desuso, también probé la nueva forma:
xcodebuild
-exportArchive -archivePath foo.xcarchive -exportPath .
-exportOptionsPlist ipa.plist
Donde el ipa.plist
es el siguiente:
<?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>
</dict>
</plist>
Que luego resultó en el error:
error: exportArchive: exportOptionsPlist error para clave ''método'': se esperaba uno de {}, pero se encontró la tienda de aplicaciones
Ahora, tratando de depurar esto, abrí la carpeta xcarchive e inspeccioné su estructura. Noté que tengo una carpeta en el mismo nivel que Products/Applications/foo.app
así que la Products/Applications/foo.app
e intenté nuevamente sin éxito (los mismos resultados). Luego procedí a eliminar archivos desde foo.app hasta que me quedé sin nada más que el binario DWARF, aún sin cigarro (mismo resultado), aunque eso podría deberse al hecho de que arruiné la firma de la aplicación al eliminar archivos manualmente.
Dado que la forma en que está creando una IPA está en desuso, debe hacer lo siguiente:
xcodebuild -scheme "Foo" -configuration Release clean build CODE_SIGN_IDENTITY="iPhone Distribution: Foo Corporation" -derivedDataPath "/path/to/some/folder/"
xcrun -sdk iphoneos PackageApplication "/path/to/some/folder/Build/Products/Release-iphoneos/foo.app" -o "/path/to/some/folder/foo.ipa"
Asegúrese de reemplazar "Foo" con el nombre de su esquema y "Distribución de iPhone: Foo Corporation" con su identidad de firma. Y "/ path / to / some / folder /" debería ser alguna carpeta de compilación.
El archivo en la ruta foo.xcarchive
no es un archivo de paquete único.
Acerca de este error:
- revisar esquema de edición -> Construir
- desmarque otros objetivos, incluidos Analizar, Probar, Ejecutar, Perfil, Archivar
-
xcodebuild
el archivo - exportar el archivo de nuevo
El problema fue que uno de nuestros pasos posteriores a la construcción dejó una carpeta extraviada en el TARGET_BUILD_DIR
. Esto causó que el xcarchive
generado se formatee como el archivo genérico temido. Mis intentos de eliminar la carpeta después del hecho de xcarchive
fueron condenados a fallar ya que xcarchive
se ha marcado como genérico en el momento de su creación (como lo demuestran algunos campos de Info.plist
faltantes). Una vez que me aseguré de que TARGET_BUILD_DIR
contuviera solo el .app
después de que todas las fases de compilación se hubieran dicho y hecho, el xcarchive
generado se xcarchive
correctamente como un archivo de aplicaciones de iOS . Ese xcarchive
, a su vez, fue fácilmente exportado a una IPA adecuada a través de xcodebuild -exportArchive -exportPlistOptions
, que es la recomendación de Apple con soporte oficial que se encarga de todas las carpetas problemáticas de soporte de SWIFT y similares.
Intente usar rutas absolutas como parámetros para xcodebuild
opciones de xcodebuild
lugar de rutas relativas.
Así que algo como esto:
xcodebuild -exportArchive -archivePath "$PWD/foo.xcarchive" /
-exportPath "$PWD" -exportOptionsPlist "$PWD/ipa.plist"
Siempre y cuando su .xcarchive
esté intacto y firmado correctamente, debería funcionar. Esto es lo que estoy usando en mi sistema de compilación.
Obtuve algunos errores extraños similares de XCode 7.2 al compilar para el simulador en la línea de comandos. Puedes intentar agregar -sdk iphoneos
a tu comando xcodebuild
(para omitir las construcciones del simulador), o agregar algo como -destination ''platform=iOS Simulator,name=iPhone 6,OS=latest''
si estás construyendo para el simulador.
Recientemente cambié a usar la herramienta de gym
Fastlane para compilar y crear archivos ipa ... Tuve un problema en el que una línea de comandos funcionaba para hacer compilaciones ad-hoc y necesitaba una configuración diferente para hacer compilaciones de la tienda de aplicaciones y no podía resolverla. . Las cosas de Fastlane prácticamente funcionaron fuera de la caja.