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í.
- 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.
- 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? ) - 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.
- 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). - Para una aplicación al que se dotará de un dispositivo, que tiene que contener UDID del dispositivo en el
embedded.mobileprovision
archivo, 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.)}
- 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 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: username@mac.com (ABCDEFGHIJ)". Entonces el comando es comocodesign -f -s "iPhone Developer: username@mac.com (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-rules
bandera 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. - 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 malformed
yA 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? - 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.
- 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 xcrun
lugar de xcodebuild
lo que he estado usando.