10 votos

¿Distribuir remotamente una aplicación iOS compilada en Xcode 7 sin App Store, subprograma de desarrolladores o Jailbreak?

Después de estas instrucciones (véase también Documentación para desarrolladores de Apple y la respuesta de BoltClock a Probar la aplicación iOS en el dispositivo sin el programa de desarrolladores de apple o Jailbreak ), pude compilar una aplicación iOS (en este caso procedencia (una aplicación emuladora de consolas de videojuegos que no cumple con las directrices de Apple y nunca será permitida en la App Store de Apple) en Xcode 7, firmarla con mi cuenta personal de iCloud, cargarla lateralmente en mi iPhone (conectándola a mi Mac por USB, y seleccionando mi iPhone en el menú de xcode -> Producto -> Destino), y permitir que mi teléfono la ejecute "confiando" en las aplicaciones con esta firma en Ajustes -> General -> Perfil, que instala el certificado asociado a mi cuenta de icloud en el dispositivo.

Me gustaría replicar estos pasos con una descarga aérea. ¿Puedo hacer que Xcode produzca un ejecutable que pueda compartir con mi hermano, que tiene un iPhone, pero no tiene acceso a un Mac con Xcode?

La red StackExchange logró algo así aparentemente para su programa beta de aplicaciones iOS, utilizando la distribución empresarial de Apple a través de Mobile Device Management, como se menciona en esta pregunta . También está el BuildStore ( http://builds.io/ ), que por 10 dólares al año también permite esta funcionalidad, aparentemente añadiendo usuarios a un "equipo de desarrolladores" asociado a una cuenta de pago del Programa de Desarrolladores de Apple (ver Documentos de desarrollo de Apple ). Con Xcode 7, ¿es posible hacer algo así sin una cuenta de desarrollador empresarial o incluso de pago?

actualizar: Gracias a la ayuda de Stacksza, he hecho algunos progresos, que voy a resumir aquí.

  1. XCode creará un archivo (Producto -> Archivo), pero no permite exportar un archivo a un fichero .ipa para su distribución ad hoc sin suscribirse al nivel de cuenta ADP de pago.
  2. Sin embargo, no hay problema, porque la herramienta de línea de comandos xcode hace crear un ejecutable .ipa, incluso sin una cuenta ADP de pago. Utilice un comando como xcodebuild -exportArchive -archivePath Provenance-Release\ 11-20-15\,\ 22.24.xcarchive/ -exportOptionsPlist ~/manifest.plist -exportPath ~/Provenance (véase la respuesta de Khawar en ¿Cómo crear ipa en xcode 6 sin cuenta de desarrollador de Apple? )
  3. Pero este comando requiere que se especifique un archivo de manifiesto .plist. La respuesta de Razvan en ¿Distribución de archivos IPA de iOS por aire (OTA) para el público? contiene un manifest.plist de ejemplo, así como instrucciones para el formato de hipervínculo necesario para proporcionar un enlace de descarga, que debe estar alojado en una página web SSL. Puede ser que la URL SSL deba matematizar el ID del paquete de la aplicación, no estoy seguro.
  4. Pero lo anterior sólo funciona si la aplicación está aprovisionada para el dispositivo que la descarga, y el dispositivo ya ha instalado el certificado de desarrollador. Así que, por ejemplo, un dispositivo que se ha conectado previamente a través de USB a mi Xcode ahora puede descargar la aplicación a través del aire, lo cual es genial. Esto es un progreso. Pero para los dispositivos limpios, obtengo el error Could not install embedded profile: 0xe8008012 (This provisioning profile cannot be installed on this device.) (como se ve en la consola del dispositivo, que se puede ver en Xcode -> Ventana -> Dispositivos, o bien en la aplicación Apple Configurator).
  5. Para que una aplicación se aprovisione para un dispositivo, tiene que contener el UDID del dispositivo en el embedded.mobileprovision archivo, véase Cómo incrustar un perfil de aprovisionamiento en una aplicación iOS , ¿Cómo automatizar la comprobación de un campo en el embedded.mobileprovision de una ipa? , ¿Cómo averiguar qué perfil se ha utilizado para crear el archivo *.ipa? y ¿Hay alguna forma de ver qué UDID se incluyen en una compilación? . Sin embargo, no se puede simplemente editar este archivo para añadir el UDID, porque entonces la CODESIGNATURA de la aplicación no coincide, y el dispositivo informará del error Failed to verify code signature of /private/var/mobile/Library/Caches/com.apple.mobile.installd.staging/temp.7jBjpk‌​/extracted/Payload/Provenance.app : 0xe8008017 (A signed resource has been added, modified, or deleted.)}
  6. Ok, entonces tenemos que renunciar a la aplicación. Xcode proporciona una herramienta de línea de comandos llamada codesign que puede hacer esto. Las instrucciones se encuentran en ¿Cómo volver a firmar el archivo ipa? y Volver a firmar IPA (iPhone) y Renuncie a una aplicación de iPhone, inserte un nuevo ID de paquete y envíelo a Xcode Organizer para cargarlo y Cómo volver a firmar manualmente un IPA con un nuevo perfil de aprovisionamiento . Tuve que especificar mi certificado de desarrollador, cuyo nombre exacto se encuentra en Keychain Access, en la pestaña Certificados, y tiene el aspecto de "iPhone Developer: username@mac.com (ABCDEFGHIJ)". Entonces el comando es como codesign -f -s "iPhone Developer: username@mac.com (ABCDEFGHIJ)" Payload/Provenance.app . Los comandos de ejemplo en las instrucciones anteriores incluían una bandera llamada --resource-rules pero no encontré tal archivo en mi aplicación compilada, así que eliminé esa bandera. Me pregunto qué hace y si es necesario. Editar: El excelente artículo del blog Firma de código interior de Thomas Kollbach explica que el --resource-rules solía utilizarse para indicar qué partes de una aplicación debían estar firmadas, pero desde iOS8 está obsoleta, y toda la aplicación debe estar firmada.
  7. Ahora que la aplicación tiene el UDID añadido y está firmada, al descargarla en el dispositivo nuevo aparecen los errores Could not install embedded profile: 0xe8008003 (This provisioning profile is malformed y A valid provisioning profile for this executable was not found . Supongo que el problema ahora es que el dispositivo todavía no ha instalado el certificado de desarrollador. Cuando se realiza la carga lateral a través de Xcode, antes de que la aplicación se ejecute, tienes que encontrar el certificado instalado en Ajustes -> General -> Perfil, seleccionar tu certificado y tocar "confiar". Sin embargo, esta opción no aparece después de la descarga por aire de la aplicación ad hoc, por lo que no estoy seguro de cómo proceder. Creo que necesito alguna forma de instalar el certificado de desarrollador en el dispositivo. Según Instalación del perfil de aprovisionamiento en iOS 8.0.2 Antes era posible simplemente enviando el certificado por correo electrónico al dispositivo, pero eso ya no funciona a partir de iOS 8. No he intentado confirmarlo. ¿Cómo puedo instalar mi certificado de desarrollador en un dispositivo iOS de forma remota?
  8. Intenté exportar mi certificado de desarrollador del iPhone desde Keychain Access y enviarlo por correo electrónico al dispositivo. El dispositivo pudo instalar el certificado, pero mostró una advertencia roja de que no estaba firmado, mientras que cuando el certificado se instaló a través de Xcode/USB no tenía esa advertencia. Según Rhythmic Fistman en ¿es posible volver a cifrar un archivo embedded.mobileprovision? El perfil debe estar firmado por Apple para que funcione. Este puede ser el punto conflictivo. Apple sólo firmará tu certificado si tienes una cuenta ADP de pago.
  9. Esta entrada del blog sobre aprovisionamiento de Sean Heber fue muy esclarecedor sobre la teoría general de los certificados de desarrollador y los perfiles de aprovisionamiento (junto con Kollbach's ambos deberían ser de lectura obligatoria). Contiene este párrafo:

    La razón por la que todo esto funciona y es seguro es que Apple genera los perfiles de aprovisionamiento en el portal y luego los firma con sus propias claves privadas antes de entregártelos. La firma de los perfiles de aprovisionamiento es algo que sólo puede hacer Apple. Por lo tanto, el archivo que se descarga no puede ser manipulado sin que sea inválido. Un perfil de aprovisionamiento inválido no será aceptado por iOS y, por lo tanto, Apple puede controlar exactamente lo que puede y no puede ser aprovisionado por un desarrollador simplemente restringiendo el acceso a la firma del perfil de aprovisionamiento a las cosas que el portal del desarrollador le da permiso para configurar en primer lugar - a pesar de que los perfiles de aprovisionamiento pueden soportar cualquier número de otras opciones impresionantes que no se puede utilizar sin jailbreak. Esta es la razón por la que tienes que registrar los dispositivos de prueba en el portal, añadir tus certificados al portal, etc - sólo las cosas en el portal (y por lo tanto los números de los cuales pueden ser controlados y limitados arbitrariamente por Apple) pueden ser incluidos en un perfil de aprovisionamiento generado y debidamente firmado. El portal es donde se aplican realmente las políticas y limitaciones de aprovisionamiento de Apple.

Esto parece responder definitivamente a mi pregunta (¿puedo conseguir que la aplicación se ejecute sin una cuenta ADP de pago) con un "no". Aunque este artículo es anterior a Xcode 7. Aparentemente Xcode 7 enviará el UDID de un dispositivo al portal de Apple, y recibirá como respuesta un perfil de aprovisionamiento firmado por Apple, que contiene ese UDID. Xcode 7 sólo hace esto cuando el dispositivo está conectado por USB y es reconocido por Xcode, pero uno se pregunta si una solicitud manual de Xcode a Apple podría ser elaborada. Eso se adentra más en la ingeniería inversa de las cosas de Apple de lo que me siento cómodo, y probablemente viola ToS o lo que sea, así que creo que estoy satisfecho con la respuesta "no".

Según la página de BuildStore En la actualidad, gestionan algo similar a través del correo electrónico, por lo que puede ser posible.

Xcode "Build and Archive" desde la línea de comandos es bastante antiguo (alrededor de xcode 3), pero sugiere utilizar xcrun en lugar de xcodebuild que he estado usando.

3voto

DanSkeel Puntos 132

¡La respuesta es casi SÍ!

He conseguido instalar nuevas compilaciones de la misma aplicación en los dispositivos a través de Fabric.io sin la suscripción de apple dev. (Supongo que también se pueden distribuir con iTunes. Envíe el ipa al probador, y debería ser capaz de instalarlo a través de iTunes).

La única desventaja es que tienes que conectar el dispositivo a Xcode al menos una vez . Entonces puedes instalar remotamente nuevas versiones. (No encontré la forma de hacerlo manualmente conociendo el udid)

Cuando se conecta el dispositivo "desconocido" a xcode 7, hay un fix issue botón en Target general settings . Arregla el problema y Xcode generará un nuevo perfil de aprovisionamiento con este dispositivo incluido. (puede encontrarlo en ~/Library/MobileDevice/Provisioning Profiles )

Entonces puede utilizar este perfil de aprovisionamiento para distribuir aplicaciones a través de Fabric.io

  1. Regístrese en Fabric.io
  2. Configure Fabric para su proyecto (hay una guía paso a paso)
  3. Asegúrese de que xcode utiliza el perfil prov. correcto para firmarlo. Automatic me ha funcionado.
  4. Xcode>proyecto>archivo
  5. fabric helper detectará la compilación y podrá distribuirla.

Lo siento chicos que no son lo suficientemente competentes con Xcode, no tengo mucho tiempo para añadir una guía con menos errores, pero espero que esta respuesta ayude a alguien con ideas.

CONSEJO: utilice este plugin de quicklook para ver el interior de los perfiles de ipas y prov.

2voto

Stacksza Puntos 74

A partir de alguna versión de iOS 9.x lanzada desde que mi respuesta fue publicada originalmente, esto ya no es ni siquiera una posibilidad. Apple ahora restringe las descargas OTA a las cuentas no gratuitas, como lo demuestran los errores en los registros del dispositivo al fallar la instalación.

He probado esto extensamente, ya que esto sería increíble para mis aplicaciones también.

¿Puedo distribuir mis aplicaciones OTA sin una membresía en el Programa de Desarrolladores (que cuesta dinero)?

Puedes crear y firmar un IPA y crear el archivo de manifiesto para él, pero no se instalará en el dispositivo. La razón de esto es que Xcode necesita configurar el IPA para ese dispositivo (supuestamente firmándolo correctamente con el UDID). Incluso puedes ver que esto sucede si intentas conectar un nuevo dispositivo al Mac y ejecutar tu aplicación a través de Xcode en él. La respuesta corta es no.

¿Qué puedo hacer para que esto funcione?

Puedes inscribirte en el Programa de Desarrolladores de Apple (cuesta dinero) y añadir el UDID de su dispositivo a tu perfil, luego crear un archivo IPA y un manifiesto, subirlos a un servidor web y enviarle la URL.

Realmente es por seguridad, ya que la barrera del precio suele ser lo que impide que las aplicaciones maliciosas se distribuyan por la web. Por no hablar de mantener la mayoría de las descargas de aplicaciones en la App Store.

¿Me he inscrito en el programa para desarrolladores? ¿Cómo lo distribuyo ahora?

Debes tener un servidor web HTTPS (y un certificado SSL que puedes hacer tu propio Root). También debes haber añadido su UDID a tu perfil de desarrollador (no estoy muy seguro de cómo hacerlo). Debe utilizar Xcode para crear el IPA (Producto > Archivo > Exportar > Guardar para el despliegue ad hoc > Iniciar sesión con el ID de Apple > Siga las instrucciones) y obtendrá un Plist y un archivo IPA. Coloca ambos en tu servidor y cambia los valores del archivo Plist para que coincidan con las URLs HTTPS de tu servidor. A continuación, utilice un enlace especial para enlazar con el manifiesto Plist, y aparecerá pidiendo al usuario que instale su aplicación. Si todo va bien, el usuario tendrá su aplicación. También tienes que codificar tu propio método de actualización si quieres eso.

Si se trata de una aplicación que desea distribuir en este punto, podría tener más sentido para ponerlo en la App Store, o si esto es para las pruebas beta utilizar TestFlight. Si usted tiene una cuenta de desarrollador puede utilizar TestFlight y omitir todas estas cosas para las pruebas de la aplicación. Todo lo que necesitas es su correo electrónico y hacer que instalen la aplicación TestFlight desde la App Store. TestFlight se puede gestionar desde iTunes Connect.

1voto

Oskar Puntos 1242

Básicamente, alguien tiene que firmar la aplicación. Puedes obtener el archivo IPA, pero no se ejecutará en dispositivos arbitrarios. Céntrate en eso y decidirás rápidamente si quieres soportar la molestia de que cada persona utilice Xcode o si tiene sentido pagar para que Apple firme tus aplicaciones.

Si confías en la firma de los no desarrolladores de iOS 9 con cualquier ID de Apple antiguo, todos tus probadores deben iniciar sesión con tu ID de Apple para ejecutar la aplicación.

Puedes pagar para que Apple se encargue de las cuentas y la firma pagando un año de cuentas de desarrollador. A continuación, puede enviar un correo electrónico, hacer estallar la aplicación en cualquier servidor, utilizar TestFlight o todos los métodos más fáciles para usted que la entrega de su ID de Apple a sus probadores / usuarios de la aplicación.

Siempre puedes enviar el código fuente a tu hermano si tiene Xcode, pero mencionaste que ese era el objetivo de no tener un Mac para instalar y firmar la aplicación.

Romper la cárcel es más fácil que falsificar la cadena de certificados de Apple, pero no lo recomiendo.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X