with tool rejected non error cordovaerror but active ios plist xcodebuild ipa xcarchive

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:

  1. construir un archivo con xcodebuild

  2. 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:

  1. revisar esquema de edición -> Construir
  2. desmarque otros objetivos, incluidos Analizar, Probar, Ejecutar, Perfil, Archivar
  3. xcodebuild el archivo
  4. 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.

https://github.com/fastlane/gym