Actualmente construyo todas mis aplicaciones con hudson usando xcodebuild seguido de un xcrun sin ningún problema
He recibido un par de archivos IPA de diferentes personas que me gustaría volver a firmar con una cuenta empresarial en lugar de la cuenta corporativa (para la tienda de aplicaciones, o en ocasiones distribuida ad-hoc).
Mi problema es que cuando intento renunciar a la aplicación, no se instalará en mi dispositivo (y debería hacerlo, ya que es una compilación Enterprise). El mensaje de error está en el dispositivo (no en iTunes) y me dice simplemente que no pudo instalar la aplicación. No se da más información.
He encontrado alguna información, ( http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for- subir / )
Y esto podría ser posible. El problema al que me enfrento es que no parece incrustar el perfil de aprovisionamiento móvil como lo hago con mis compilaciones normales (usando xcrun), ¿es posible controlarlo con la herramienta de firma de código o es posible volver a firmar con xcrun? ?
Con mi guión de renuncia actualmente lo hago
- descomprimir app.ipa
- appname = $ (ls Payload)
- xcrun -sdk iphoneos PackageApplication -s "$ provisioning_profile" "$ project_dir / Payload / $ appname" -o "$ project_dir / app-resigned.ipa" --sign "$ provisioning_profile" --embed "$ mobileprovision"
He buscado en el archivo ipa resultante y parece ser muy similar a la aplicación original. ¿Qué archivos realmente deberían cambiar aquí? Inicialmente pensé que la _CodeSignature / CodeResources cambiaría, pero el contenido se ve exactamente igual.
Los punteros son muy apreciados.
/usr/bin/codesign -d --entitlements :entitlements.plist /Payload/appname.app
Luego, durante el anuncio de dimisión--entitlements entitlements.plist
Las respuestas a esta pregunta están un poco desactualizadas y faltan pasos potencialmente clave, por lo que esta es una guía actualizada para instalar una aplicación de un desarrollador externo.
----- Cómo renunciar a una aplicación de iOS -----
Supongamos que recibe una aplicación (por ejemplo, MyApp.ipa) de otro desarrollador y desea poder instalarla y ejecutarla en sus dispositivos (mediante el uso de ideviceinstaller , por ejemplo).
Preparar nuevos activos de firma
El primer paso es obtener un perfil de aprovisionamiento que incluya todos los dispositivos que desea instalar y ejecutar. Asegúrese de que el perfil contenga un certificado que haya instalado en su Acceso a llaveros (por ejemplo, Desarrollador de iPhone: Algún cuerpo (XXXXXXXXXX)). Descargue el perfil (MyProfile.mobileprovision) para que pueda reemplazar el perfil incrustado en la aplicación.
A continuación, vamos a preparar un archivo de derechos para incluir en la firma. Abre tu terminal y ejecuta lo siguiente.
Esto creará un archivo xml que describe su perfil de aprovisionamiento . A continuación, queremos extraer los derechos en un archivo.
Reemplazar el perfil de aprovisionamiento y la aplicación de renuncia
Si está trabajando con un archivo .ipa , primero descomprima la aplicación (si tiene un .app , puede omitir este paso).
Su directorio de trabajo ahora contendrá
Payload/
yPayload/MyApp.app/
. Luego, elimine los viejos archivos de firma de código.Reemplace el perfil de aprovisionamiento existente (es decir, embedded.mobileprovision) con el suyo.
Ahora firme la aplicación con el certificado incluido en su perfil de aprovisionamiento y la lista de derechos que creó anteriormente.
IMPORTANTE: también debe renunciar a todos los marcos incluidos en la aplicación . Los encontrarás en
Payload/MyApp.app/Frameworks
. Si la aplicación está escrita en Swift o si incluye marcos adicionales, estos se deben renunciar o la aplicación se instalará pero no se ejecutará.Ahora puede volver a comprimir la aplicación.
Hecho
Ahora puede eliminar el
Payload
directorio ya que tiene su aplicación original (MyApp.ipa) y su versión renunciada (MyApp-resigned.ipa). Ahora puede instalar MyApp-resigned.ipa en cualquier dispositivo incluido en su perfil de aprovisionamiento.fuente
Seguí con éxito esta respuesta, pero como los derechos han cambiado, simplemente eliminé la
--entitlements "Payload/Application.app/Entitlements.plist"
parte de la penúltima declaración y funcionó de maravilla.fuente
SecItemCopyMatching: missing entitlement
. No tengo Entitlements.plist archivo separado, de manera de preservar los derechos que utilicé @ comentario de lordt : en primer lugar crear un archivo de derechos:echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>/usr/bin/codesign -d --entitlements - temp/Payload/$APP_NAME | sed -E -e '1d'" > temp/newEntitlements
, entonces utilizar para la firma:--entitlements temp/newEntitlements
.Comprobado con Mac OS High Sierra y Xcode 10
Simplemente puede implementar lo mismo utilizando la aplicación iResign .
Dar ruta de 1) .ipa
2) Nuevo perfil de provisión
3) Archivo de titularidad (Opcional, agregue solo si tiene derecho)
4) ID del paquete
5) Certificado de distribución
Puede ver el archivo .ipa de salida guardado después de volver a firmar
Herramienta simple y potente
fuente
Ninguno de estos enfoques de renuncia funcionaba para mí, así que tuve que resolver algo más.
En mi caso, tenía una IPA con un certificado caducado. Podría haber reconstruido la aplicación, pero como queríamos asegurarnos de que estábamos distribuyendo exactamente la misma versión (solo con un nuevo certificado), no queríamos reconstruirla.
En lugar de las formas de renuncia mencionadas en las otras respuestas, recurrí al método de Xcode para crear una IPA, que comienza con un archivo .xcarchive de una compilación.
Dupliqué un archivo .xcarchive existente y comencé a reemplazar el contenido. (Ignoré el archivo .dSYM).
Extraje la aplicación anterior del archivo IPA anterior (mediante descompresión; la aplicación es lo único en la carpeta Payload)
Moví esta aplicación al nuevo .xcarchive,
Products/Applications
reemplazando la aplicación que estaba allí.Edité
Info.plist
, editandoApplicationProperties/ApplicationPath
ApplicationProperties/CFBundleIdentifier
ApplicationProperties/CFBundleShortVersionString
ApplicationProperties/CFBundleVersion
Name
Moví el archivo .xcarchive a la carpeta de archivo de Xcode, por lo general
/Users/xxxx/Library/Developer/Xcode/Archives
.En Xcode, abrí la ventana Organizador, elegí este nuevo archivo e hice una exportación regular (en este caso Enterprise).
El resultado fue una buena IPA que funciona.
fuente
Creo que lo más fácil es usar Fastlane:
fuente
Con la opción de renuncia de Fastlane Sigh puedes hacer esto muy fácilmente.
Puede descargar el perfil usando suspiro también, justo antes del comando.
fuente
Gracias, Erik, por publicar esto. Esto funcionó para mí. Me gustaría agregar una nota sobre un paso adicional que necesitaba. Dentro de "Payload / Application.app /" había un directorio llamado " CACertChains " que contenía un archivo llamado " cacert.pem ". Tuve que eliminar el directorio y el .pem para completar estos pasos. ¡Gracias de nuevo! -
fuente
Si tiene una aplicación con extensiones y / o una aplicación de observación y tiene múltiples perfiles de aprovisionamiento para cada aplicación de extensión / observación, entonces debe usar este script para volver a firmar el archivo ipa.
Re-firmando script en Github
Aquí hay un ejemplo de cómo usar este script:
También puede incluir otros perfiles de aprovisionamiento de extensiones agregándolo con otra opción -p.
Para mí, todos los perfiles de aprovisionamiento fueron firmados por el mismo certificado / identidad de firma.
fuente
fastlane sigh resign YourApp.ipa --signing_identity "iPhone Distribution: YourCompanyOrDeveloperName" -p <path_to_provisioning_profile_for_app>.mobileprovision -p <path_to_provisioning_profile_for_watchkitextension>.mobileprovision
lugar.