Compartir a través de


¿Se pueden agregar archivos a un archivo IPA, o eliminarlos de este, después de crearlo en Visual Studio?

Sí, es posible, pero normalmente será necesario volver a firmar la agrupación .app después de realizar el cambio.

Tenga en cuenta que la modificación del archivo .ipa no es necesaria en uso normal. Este artículo se proporciona únicamente con propósito informativo.

Ejemplo: quitar un archivo de un archivo .ipa

En este ejemplo se supone que el nombre del proyecto de Xamarin.iOS es iPhoneApp1 y el generated session id es cc530d20d6b19da63f6f1c6f67a0a254

  1. Compile el archivo .ipa como normalmente desde Visual Studio.

  2. Cambie al host de compilación de Mac.

  3. Busque la compilación en la carpeta ~/Library/Caches/Xamarin/mtbs/builds. Puede pegar esta ruta de acceso en Finder> Ir > Ir a carpeta para examinar la carpeta en el Finder. Busque la carpeta que coincide con el nombre del proyecto. Dentro de esa carpeta, busque la carpeta que coincide con el generated session id de la compilación. Probablemente será la subcarpeta que tiene el tiempo de modificación más reciente.

  4. Abra una nueva ventana de Terminal.app.

  5. Escriba cd en la ventana de Terminal.app y, a continuación, arrastre y coloque la carpeta generated session id en la ventana de Terminal.app:

    Locating the generated session id folder in Finder

  6. Escriba la clave de retorno para cambiar el directorio en la carpeta generated session id.

  7. Descomprima el archivo .ipa en una carpeta old/ temporal con el comando siguiente. Ajuste los nombres Ad-Hoc y iPhoneApp1 según sea necesario para el proyecto concreto.

    ditto -xk bin/iPhone/Ad-Hoc/iPhoneApp1-1.0.ipa old/

  8. Mantenga abierta la ventana Terminal.app.

  9. Elimine los archivos deseados de .ipa. Puede moverlos a la papelera mediante Finder o eliminarlos en la línea de comandos mediante Terminal.app. Para ver el contenido del archivo Payload/iPhone en Finder, haga clic en el archivo y seleccione Mostrar contenido del paquete.

  10. Con el mismo enfoque general que en el paso 3, busque el archivo de registro en ~/Library/Logs/Xamarin/MonoTouchVS/ que tiene el nombre del proyecto y generated session id en el nombre: Locate the project build log in Finder

  11. Abra el registro de compilación del paso 10, por ejemplo, haciendo doble clic en él.

  12. Busque la línea que incluye tool /usr/bin/codesign execution started with arguments: -v --force --sign.

  13. Escriba /usr/bin/codesign en la ventana Terminal.app del paso 8.

  14. Copie todos los argumentos a partir de -v de la línea del paso 12 y péguelos en la ventana Terminal.app.

  15. Cambie el último argumento para que sea el conjunto de .app ubicado dentro de la carpeta old/Payload/ y, a continuación, ejecute el comando.

    /usr/bin/codesign -v --force --sign SOME_LONG_STRING in/iPhone/Ad-Hoc/iPhoneApp1.app/ResourceRules.plist --entitlements obj/iPhone/Ad-Hoc/Entitlements.xcent old/Payload/iPhoneApp1.app
    
  16. Cambie al directorio old/ en Terminal:

    cd old
    
  17. Comprima el contenido del directorio en un nuevo archivo .ipa mediante el comando zip. Puede cambiar el argumento "$HOME/Desktop/iPhoneApp1-1.0.ipa" para generar el archivo .ipa donde quiera:

    zip -yr "$HOME/Desktop/iPhoneApp1-1.0.ipa" *
    

Mensajes comunes de error

Si ve Invalid Signature. A sealed resource is missing or invalid., esto significa generalmente que algo ha cambiado dentro de la agrupación de .app y que la agrupación de .app no se volvió a firmar correctamente después. Tenga en cuenta también que si desea crear un .ipa con un perfil de distribución, debe crear el .ipa original con un perfil de distribución. De lo contrario, Entitlements.xcent será incorrecto.

Para dar un ejemplo concreto de cómo puede surgir este error, si ejecuta el siguiente comando codesign --verify en la ventana de Terminal después del paso 9, verá el error junto con la causa precisa del error:

$ codesign -dvvv --no-strict --verify old/Payload/iPhoneApp1.app
old/Payload/iPhoneApp1.app: a sealed resource is missing or invalid
file missing: /Users/macuser/Library/Caches/Xamarin/mtbs/builds/iPhoneApp1/cc530d20d6b19da63f6f1c6f67a0a254/old/Payload/iPhoneApp1.app/MyFile.png

Y el proceso de comprobación de App Store notificará un mensaje de error similar:

ERROR ITMS-90035: "Firma no válida. Falta un recurso sellado o no es válido. El binario en la ruta de acceso [iPhoneApp1.app/iPhoneApp1] contiene una firma no válida. Asegúrese de que ha firmado la aplicación con un certificado de distribución, no un certificado ad hoc o un certificado de desarrollo. Compruebe que la configuración de firma de código en Xcode es correcta en el nivel de destino (que invalida los valores en el nivel de proyecto). Además, asegúrese de que la agrupación que está cargando se creó con un destino Release en Xcode, no con un destino de simulador. Si está seguro de que la configuración de firma de código es correcta, elija "Limpiar todo" en Xcode, elimine el directorio "build" en el Finder y recompile el destino de lanzamiento. Para obtener más información, consulte https://developer.apple.com/library/ios/documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html"