down apple app ios swift xcode itunesconnect xcode8

ios - down - https appstoreconnect apple com login



¿Qué es libswiftRemoteMirror.dylib y por qué se incluye en mi paquete de aplicaciones? (5)

Tengo una aplicación para iOS que recientemente cambié a Xcode 8. Como parte de eso, cambiamos de swift 2.2 a 2.3 (swift 3 vendrá más adelante).

Tengo una canalización de compilación automatizada que básicamente ejecuta xcodebuild para producir un binario de lanzamiento en una máquina de compilación dedicada, y después de eso solucioné todo (la firma automática de códigos de Xcode 8 realmente lo estropea todo), ahora cuando subo mi aplicación a iTunes conecte, falla con este error:

ERROR ITMS-90171: "Estructura de paquete no válida: el archivo binario ''MyApp.app/libswiftRemoteMirror.dylib'' no está permitido. Su aplicación no puede contener archivos ejecutables o bibliotecas independientes, excepto el archivo ejecutable de paquetes compatibles de CFBundle. Consulte la programación del paquete. Guía en https://developer.apple.com/go/?id=bundle-structure para obtener información sobre la estructura del paquete de aplicaciones de iOS ".

Efectivamente, si descomprimo el archivo .ipa y miro, hay libswiftRemoteMirror.dylib ahí.

Si archivo / exporto para iTunes a través de Xcode, produce un paquete de aplicaciones que no tiene libswiftRemoteMirror.dylib , sin embargo, todas las otras versiones de mi aplicación parecen tenerlo. Incluso solo haciendo una compilación de depuración dentro de Xcode, luego, al mirar la salida, se muestra que libswiftRemoteMirror.dylib se encuentra en el paquete de mi aplicación, lo que indica que Xcode definitivamente lo está poniendo allí, no una parte de mi script de compilación automatizado.

¿Qué es este archivo, por qué se coloca allí y qué debo hacer al respecto? Puedo modificar mi script de compilación para eliminar este archivo para compilaciones de lanzamiento, pero me preocupa que pueda afectar el proceso de firma de código. Lo intentaré de todos modos y veré qué sucede, pero parece que no es lo correcto.

Cualquier consejo sería apreciado.


En mi caso obtuve ERROR ITMS-90171 porque estoy usando marcos personalizados.

"Estructura de paquete no válida - el archivo binario ''MyFramework.framework / libswiftRemoteMirror.dylib''

(No lo conseguí para mi aplicación.)

Probé el gimnasio pero se quedó atascado en xcrun . Así que intenté hacer rm -rf libswiftRemoteMirror en la frase de compilación (con un script de ejecución personalizado) para cada framework personalizado que tengo y, curiosamente, no rompí nada: funcionó.


Me encontré con el mismo problema después de instalar Xcode 8, mediante la construcción a través de shenzhen .

Decidí ver a Fastlane como una alternativa, y su programa de gym produce un ipa que se puede enviar a Apple.

Fue razonablemente fácil para mí reemplazar la llamada a ipa (el ejecutable de shenzhen) con una llamada al gym , y el resto de mis scripts de compilación y carga funcionaron sin modificaciones.

Si prefieres construir directamente, eliminé lo siguiente del gym Léame del gym . Produce un .xcarchive contiene un archivo .app sin el libswiftRemoteMirror.dylib . Yo no uso ese tipo de flujo, así que no puedo decir cómo procederías desde allí.

xcodebuild / -scheme Scheme / -workspace Project.xcworkspace / -configuration ''Release'' / -destination ''generic/platform=iOS'' / -archivePath ''./Output.xcarchive'' / archive


Nunca podría obtener la línea de comandos xcodebuild para trabajar con la firma automática de código. Supongo que debido a que la máquina de compilación automática se ejecuta como una cuenta diferente a la que solo se accede a través de SSH, nunca se ejecutó Xcode "completo" como esa cuenta de usuario y no tiene ningún certificado en su llavero de inicio de sesión ni nada de eso.

No quería usar algo como shenzhen porque en el pasado no he tenido más que malas experiencias de ese tipo de cosas. El sistema de compilación Xcode es lo suficientemente complicado y frágil sin tener que agregar más scripts y cosas que podrían salir mal o estar desactualizadas.

Esto es lo que terminé haciendo para solucionar el problema (es horrible, pero fue lo único que pude encontrar que hizo que funcionara al final)

  1. En la secuencia de comandos de compilación automática, edite el .pbxproj para buscar y reemplazar el Provisioning Style = Automatic; con Provisioning Style = Manual; . También reemplace iOS Developer con iOS Distribution para las cosas de firma de código en el mismo archivo pbxproj. Estas dos cosas apagan la firma automática.

  2. Ejecute xcodebuild para compilar (pero no archivar) el proyecto de la misma manera que lo hice en Xcode7. Xcode compila la aplicación y la firma, pero aún no es válida, ya que contiene libswiftRemoteMirror.dylib y, por alguna razón, no tiene ningún archivo de derechos.

  3. Elimine libswiftRemoteMirror.dylib del libswiftRemoteMirror.dylib de la aplicación (esto invalida la firma)

  4. Genere un Entitlements.plist en la carpeta del paquete de la aplicación extrayendo el bit de derechos del perfil de aprovisionamiento (como lo hace el script SWSiOSResign.sh de BlackBerry )

    1. Vuelva a firmar el paquete de la aplicación usando codesign --entitlements <file>

    2. A partir de ahí, utilice una técnica similar a la que hace bq/package_ipa.sh y copie la carpeta SwiftSupport, luego comprima el archivo en una ipa .

Realmente no podía usar el archivo package_ipa.sh , necesitaba reimplementar una lógica similar en su lugar porque necesito hacer referencia a Swift_2.3.toolchain para obtener SwiftSupport ya que mi aplicación aún es XcodeDefault.toolchain 2.3, no XcodeDefault.toolchain (que es veloz 3)

Parece que debería poder usar xcodebuild --archive en combinación con otras cosas para evitar algunos de estos pasos. Nunca podría lograr que funcionara bajo Xcode7, pero podría intentarlo de nuevo con XC8 si tengo tiempo.


Simplemente vaya a la configuración de compilación y haga lo que sea, su problema se resolverá.


simplemente archive su compilación desde Xcode haga clic con el botón derecho en el archivo comprimido -> muestre en el buscador -> haga clic derecho -> muestre el contenido del paquete -> producto -> aplicación -> copie el archivo .app genere la carga útil y cárguelo usando el Cargador de aplicaciones. Ayuda en mi caso.