¿Distribuir remotamente una aplicación de iOS compilada en Xcode 7 sin App Store, sub programa de desarrollador o jailbreak?

10

Siguiendo estas instrucciones (consulte también la documentación del desarrollador de Apple y la respuesta de BoltClock a la aplicación de prueba de iOS en el dispositivo sin el programa de desarrollador de Apple o jailbreak ), pude compilar una aplicación de iOS (en este caso procedencia , una aplicación de emulador de consola de videojuegos que no funciona) cumplir con las pautas de Apple y nunca se permitirá en la App Store de Apple) en Xcode 7, firmarlo con mi cuenta personal de iCloud, cargarlo en mi iPhone (conectándolo a mi Mac por USB y seleccionando mi iPhone en el menú xcode -> Producto -> Destino), y permitir que mi teléfono lo ejecute "confiando" en las aplicaciones con esta firma en Configuración -> General -> Perfil, que instala el certificado asociado a mi cuenta de icloud en el dispositivo.

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

La Red StackExchange logró algo así aparentemente para su programa beta de la aplicación iOS, mediante el uso de la distribución empresarial de Apple a través de Mobile Device Management, como se menciona en esta pregunta . También está BuildStore ( http://builds.io/ ), que por $ 10 / año también habilita esta funcionalidad, aparentemente al agregar usuarios a un "equipo de desarrolladores" asociado a una cuenta paga del Programa de Desarrolladores de Apple (ver documentos de desarrollo de Apple ) . Con Xcode 7, ¿es posible hacer tal cosa sin una empresa o incluso una cuenta de desarrollador paga regular?

Actualización: Gracias a la ayuda de Stacksza, he hecho algunos progresos, que resumiré aquí.

  1. XCode creará un archivo (Producto -> Archivo), pero no le permite exportar un archivo a un archivo .ipa para su distribución ad hoc sin suscribirse al nivel de cuenta de ADP pagado.
  2. No hay problema, sin embargo, debido a que la herramienta de línea de comandos Xcode hace crear un ejecutable .ipa, incluso con ninguna cuenta de pago ADP. Utilice un comando como xcodebuild -exportArchive -archivePath Provenance-Release\ 11-20-15\,\ 22.24.xcarchive/ -exportOptionsPlist ~/manifest.plist -exportPath ~/Provenance(consulte la respuesta de Khawar en Cómo crear ipa en xcode 6 sin la cuenta de desarrollador de Apple? )
  3. Pero este comando requiere que especifique un archivo .plist manifiesto. ¿La respuesta de Razvan en Over The Air (OTA) iOS IPA File Distribution For Public? contiene un manifiesto manifest.plist, 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. Es posible que la URL SSL deba corresponder con el ID del paquete de la aplicación, no estoy seguro.
  4. Pero lo anterior solo funciona si la aplicación se aprovisiona para el dispositivo que la descarga, y el dispositivo ya ha instalado el certificado de desarrollador. Entonces, por ejemplo, un dispositivo que anteriormente se había conectado a través de USB a mi Xcode ahora puede descargar la aplicación por aire, lo cual es genial. Esto es progreso. Pero para 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 en la aplicación Apple Configurator).
  5. Para una aplicación al que se dotará de un dispositivo, que tiene que contener UDID del dispositivo en el embedded.mobileprovisionarchivo, ver ¿Cómo funcionan incrustar un perfil de datos en una aplicación para iOS , Cómo automatizar la comprobación de un campo en embedded.mobileprovision de una API? , ¿Cómo averiguar qué perfil se utilizó para crear el archivo * .ipa? , y ¿Hay alguna forma de ver qué UDID se incluyen en una compilación? . Sin embargo, no puede editar este archivo para agregar el UDID, porque la CODESIGNATURE de la aplicación no coincide y el dispositivo informará el errorFailed 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 codesignque puede hacer esto. Las instrucciones se encuentran en ¿Cómo volver a firmar el archivo ipa? y vuelva a firmar IPA (iPhone) y renuncie a una aplicación de iPhone, inserte una nueva ID de paquete y envíela a Xcode Organizer para cargar y cómo volver a firmar manualmente una IPA con un nuevo perfil de aprovisionamiento . Tenía que especificar mi certificado de desarrollador, cuyo nombre exacto se puede encontrar en Keychain Access, en la pestaña Certificados, y se ve como "iPhone Developer: [email protected] (ABCDEFGHIJ)". Entonces el comando es como codesign -f -s "iPhone Developer: [email protected] (ABCDEFGHIJ)" Payload/Provenance.app. Los comandos de ejemplo en las instrucciones anteriores incluyen una bandera llamada--resource-rules, pero no encontré dicho archivo en mi aplicación compilada, por lo que eliminé esa marca. Me pregunto qué hace y si es necesario. Editar: La excelente publicación de blog Inside Code Signing de Thomas Kollbach explica que la --resource-rulesbandera solía usarse para indicar qué partes de una aplicación deben firmarse, pero dado que iOS8 está en desuso, y toda la aplicación debe estar firmada.
  7. Ahora que la aplicación tiene el UDID agregado y está firmado, descargarlo en el dispositivo nuevo da los errores Could not install embedded profile: 0xe8008003 (This provisioning profile is malformedy A valid provisioning profile for this executable was not found. Supongo que el problema ahora es que el dispositivo aún no ha instalado el certificado de desarrollador. Al realizar una carga lateral a través de Xcode, antes de que la aplicación se ejecute, debe encontrar el certificado instalado en Configuración -> General -> Perfil, seleccione su certificado y toque "confiar". Sin embargo, esta opción no aparece después de la descarga inalámbrica 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 la instalación del perfil de aprovisionamiento en iOS 8.0.2, solía ser 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 de iPhone desde Keychain Access y enviarlo por correo electrónico al dispositivo. El dispositivo pudo instalar el certificado, pero se mostró con 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, ¿ es posible volver a cifrar un archivo de aprovisionamiento móvil incrustado? , el perfil debe estar firmado por Apple para funcionar. Este puede ser el punto conflictivo. Apple solo firmará su certificado si tiene una cuenta ADP paga.
  9. Esta publicación de blog sobre el aprovisionamiento de Sean Heber fue muy esclarecedora sobre la teoría general de los certificados de desarrollador y los perfiles de aprovisionamiento (junto con los de Kollbach, ambos deben leerse). 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árselos. La firma de los perfiles de aprovisionamiento es algo que solo Apple puede hacer. Por lo tanto, el archivo que descarga no puede ser manipulado sin que sea inválido. IOS no aceptará un perfil de aprovisionamiento no válido y, por lo tanto, Apple puede controlar exactamente qué puede y no puede aprovisionar 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 el primer lugar: aunque los perfiles de aprovisionamiento pueden admitir cualquier cantidad de otras opciones increíbles que no puede usar sin jailbreak. Es por eso que debe registrar dispositivos de prueba en el portal, agregue sus certificados al portal, etc., solo las cosas en el portal (y, por lo tanto, los números de los cuales Apple puede controlar y limitar arbitrariamente) se pueden incluir en un perfil de aprovisionamiento generado y firmado correctamente. El portal es donde se aplican las políticas y limitaciones de aprovisionamiento de Apple.

Esto parece responder definitivamente a mi pregunta (¿puedo hacer que la aplicación se ejecute sin una cuenta ADP pagada) 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á en respuesta un perfil de aprovisionamiento firmado por Apple que contiene ese UDID. Xcode 7 solo hace esto cuando el dispositivo está enchufado a través de USB y Xcode lo reconoce, pero uno se pregunta si podría elaborarse una solicitud manual de Xcode a Apple. Eso se profundiza en la ingeniería inversa de las cosas de Apple con 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 acerca de BuildStore , gestionan algo similar por correo electrónico, por lo que puede ser posible.

Xcode "Build and Archive" de la línea de comandos es bastante antiguo (alrededor de xcode 3), pero sugiere usar en xcrunlugar de xcodebuildlo que he estado usando.

ziggurismo
fuente
1
Por favor considere dividir esto. La pregunta debe ser breve, simple y fácil de entender. Toda la respuesta / proceso de cómo llegó a su respuesta y publicación de blog debe estar en la sección de respuestas.
bmike

Respuestas:

2

¡La respuesta es casi SÍ!

Logré instalar nuevas compilaciones de la misma aplicación en los dispositivos a través de Fabric.io sin suscripción de Apple. (Supongo que también puede distribuirlos con iTunes. Envíe ipa al probador, y debería poder instalarlo a través de iTunes).

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

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

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

  1. Registrarse en Fabric.io
  2. Configure Fabric para su proyecto (hay una guía paso a paso)
  3. Asegúrate de que xcode use prov. perfil para firmarlo. Automatictrabajó para mi.
  4. Xcode> proyecto> archivo
  5. Fabric Helper detectará la compilación y podrás distribuirla.

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

SUGERENCIA: use este complemento de vista rápida para ver el interior de ipas y prov. perfiles!

DanSkeel
fuente
1
Sí, esta respuesta es consistente con lo que descubrí en mis pruebas. Todavía me pregunto si sería posible evitar que "conecte el dispositivo a xcode al menos una vez" falsificando el mensaje que Xcode envía a los servidores de Apple con el nuevo UDID del dispositivo
ziggurismo
2

A partir de alguna versión de iOS 9.x lanzada desde que mi respuesta se publicó originalmente, esto ya ni siquiera es una posibilidad. Apple ahora restringe las descargas de OTA a cuentas no gratuitas, como lo demuestran los errores en los registros del dispositivo cuando falla 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 del Programa de Desarrolladores (cuesta dinero)?

Puede 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 firmando correctamente con el UDID). Incluso puede ver que esto suceda si intenta conectar un nuevo dispositivo a la Mac y ejecutar su aplicación a través de Xcode. La respuesta corta es no.

¿Qué puedo hacer para que esto funcione?

Puede inscribirse en el Programa de Desarrolladores con Apple (cuesta dinero) y agregar el UDID de su dispositivo a su perfil, luego crear un archivo IPA y de manifiesto, cargarlos en 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. Sin mencionar mantener la mayoría de las descargas de aplicaciones en la App Store.

¿Me he registrado en el programa de desarrollador? ¿Cómo lo distribuyo ahora?

Debe tener un servidor web HTTPS (y un certificado SSL para el que pueda crear su propia raíz). También debe haber agregado su UDID a su perfil de desarrollador (no estoy exactamente seguro de cómo hacerlo). Debe usar Xcode para crear el IPA (Producto> Archivo> Exportar> Guardar para implementación ad-hoc> Iniciar sesión con Apple ID> Seguir instrucciones) y obtendrá un Plist y un archivo IPA. Coloque ambos en su servidor y cambie los valores en el archivo Plist para que coincidan con las URL HTTPS en su servidor. Luego, usa un enlace especial para vincular al manifiesto de Plist, y aparecerá pidiéndole al usuario que instale su aplicación. Si todo sale bien, el usuario tendrá su aplicación. También debe codificar su propio método de actualización si lo desea.

Si esta es una aplicación que desea distribuir en este momento, podría tener más sentido ponerla en la App Store, o si es para pruebas beta, use TestFlight. Si tiene una cuenta de desarrollador, puede usar TestFlight y omitir todo esto para probar la aplicación. Todo lo que necesita es su correo electrónico y hacer que instalen la aplicación TestFlight desde App Store. TestFlight se puede administrar desde iTunes Connect.

AppleBetas
fuente
Y una vez que se haya registrado para el Desarrollador, ¿cómo distribuye la aplicación?
ziggurismo el
Actualicé mi publicación con las instrucciones.
AppleBetas
Gracias, eso es lo que estaba buscando. Sé que dijiste que era necesario tener una cuenta de desarrollo pagada y aprovisionar UDID, pero me gustaría probar este método sin antes. Informaré los resultados.
ziggurismo
Siguiendo sus instrucciones para crear un archivo, pero los botones "Cargar en la tienda de aplicaciones", "validar" y "exportar" estaban en gris, con un enlace a continuación que decía "La distribución requiere la inscripción en el Programa de Desarrolladores de Apple" que pateó me a una página web para inscribirme en el ADP. Entonces, por un lado, es como lo prometió: parece que se requiere una suscripción de $ 99 al Programa de Desarrolladores de Apple, incluso si solo desea hacer una distribución ad hoc por aire (OTA) de su aplicación. La interfaz gráfica de usuario de XCode no creará el IPA y el perfil de aprovisionamiento.
ziggurismo
Por otro lado, en stackoverflow.com/questions/26928721/…, el usuario Khawar afirma que se puede hacer sin el sub ADP usando la xcodebuildlínea de comandos que creará el archivo .ipa, así como firmar y aprovisionar la aplicación si usa la -exportProvisioningProfilebandera (Ver comentario de Pankaj Rathor).
ziggurismo
1

Básicamente, alguien tiene que firmar la aplicación. Puede obtener el archivo IPA, pero no se ejecutará en dispositivos arbitrarios. Concéntrese en eso y rápidamente decidirá si desea soportar las molestias de cada persona que usa Xcode o si tiene sentido pagar a Apple para que firme sus aplicaciones.

Si confía en la firma de iOS 9 no desarrollador con cualquier ID de Apple anterior, todos sus evaluadores deben iniciar sesión con su ID de Apple para ejecutar la aplicación.

Puede pagar para que Apple maneje las cuentas y la firma pagando por un año de cuentas de desarrollador. Luego, puede enviar un correo electrónico, abrir la aplicación en cualquier servidor, usar TestFlight o cualquier otro método más fácil para usted que no sea entregar su ID de Apple a sus evaluadores / usuarios de la aplicación.

Siempre puede enviar el código fuente a su hermano si tiene Xcode, pero mencionó que ese era el punto de no tener a alguien que tenga una 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.

bmike
fuente
¿Dónde tendrían que iniciar sesión los evaluadores con mi ID de Apple para ejecutar las aplicaciones firmadas que no son de desarrollador?
ziggurismo
En Xcode, usar tu Mac es lo más fácil. Me gustaría que le envíen su teléfono para cargar la aplicación si no puede llegar a Xcode ...
bmike
Sí, la instalación de Xcode a través de USB funciona muy bien. Mi pregunta fue sobre la posibilidad de distribución / instalación remota. StackExchange lo hizo para su aplicación beta. Yo también quiero hacerlo.
ziggurismo
@ziggurism SE pagó por un certificado de empresa. Necesitará un poco de papeleo legal para que eso suceda. Además de varios cientos de dólares anuales. TestFlight es la opción más barata y menos área gris. Lo que hizo SE no es probable "según el libro" de acuerdo con la licencia de los certificados que usaron, pero no soy un abogado ...
bmike