distribución inalámbrica de aplicaciones para iPhone: problema con el protocolo de services de itms

He seguido todas las instrucciones de Apple y algunas otras publicaciones de blog. Archivé la aplicación, hice los files .plist y .ipa, los puse en un server y los vincule. Puedo instalar el perfil de aprovisionamiento bien. Pero cuando hago clic en el enlace para instalar la aplicación (en safari en el iPhone), no pasa nada. No hay post de error. Nada. Así es como se ve el enlace:

<a href="itms-services://?action=download-manifest&url=http://mydomain.com/test/myApp.plist">Install the app</a> 

¿Alguna idea de por qué esto no funciona? Parece que el protocolo de services de itms está muerto. Los types MIME están bien (puedo señalar el file Plist en la barra de direcciones y se muestra como text).

Tenía síntomas similares cuando tenía un espacio en los nombres de file del file de manifiesto y el file de file de la aplicación. Eliminé todos los espacios de ellos y la installation inalámbrica funcionó para mí. Parece que su manifiesto no tiene un espacio, entonces, ¿tal vez su file de aplicación lo hace?

La respuesta es en realidad muy simple: la URL debe ser "doble escapada", es decir

 itms-services://?action=download-manifest&url=https://example.com/My%2520App.plist 

Esto se debe a que el valor se evita a https://example.com/My%20App.plist antes de tratarse como otra URL. Esto se escapa por el server en example.com a un espacio.

El analizador no trata + especialmente: ...&url=https://.../test/a+b da ...&url=https://.../test/a+b resultado que "GET /test/a+b HTTP/1.1" aparezca en los loggings de Apache. (No es prudente suponer que todas las cadenas de consulta son application/x-www-form-urlencoded ; esto solo está estandarizado en HTML).

Por cierto, parece que itms-services usa +[NSURL URLWithString:] para validar URL: url=.../My%20App.plist genera ningún pedido porque [NSURL URLWithString:@"https://.../My App.plist"] devuelve nil . Sin embargo, hay un error de larga data en NSURL: Escapará de un único carácter inválido (BMP) al final en lugar de devolver nil. Mis casos de testing

  • url=.../test/%3c da como resultado el logging "GET /test/< HTTP/1.1" (esto definitivamente es válido HTTP!)
  • url=.../test/%0a produce un error en el dispositivo, pero no hay ningún post de logging (porque Apache lo trata como una request con formatting erróneo)
  • url=.../test/%0d resulta en el logging "GET /test/\r HTTP/1.1"

itms-services es un identificador por el cual apple / iphone identificará que debe validar el certificate y debe instalarlo.

Para validar el perfil de aprovisionamiento antes de instalar el file ipa, se conectará a "ax.init.itunes.apple.com" y "ocsp.apple.com".

Si está utilizando una connection a la intranet, compruebe si estos enlaces son accesibles o no. De lo contrario, no puede instalar la aplicación por air.

El mínimo de OS en el dispositivo debería ser 4.0.

Estaba usando IIS 6.0 y la página index.html se estaba cargando, pero cuando el usuario hizo clic en el enlace .plist desde el dispositivo Apple (es decir) el iPhone 4, seguí recibiendo "no puedo conectar http://www.mywebsite.com". La solución, además de agregar el tipo MIME, fue compartir el intercambio web donde estaba el file .plist y lo más importante: cambiar el acceso de security del file manifiesto .plist. dio el control total al usuario pnetworkingeterminado de Windows

haga que las configuraciones MIME de su server sean correctas.

google para ello encontrarás la forma correcta

http://developer.apple.com/library/ios/#featunetworkingarticles/FA_Wireless_Enterprise_App_Distribution/Introduction/Introduction.html

Parece que tiene varios pointers aquí para ver cuál podría ser el problema, para la próxima vez: compruebe la console del dispositivo desde Xcode Organizer, generalmente contiene información útil sobre la distribución OTA fallida.

Asegúrese de que todas las URL estén totalmente calificadas. Incluyendo los de los files png.

Tuve el mismo problema que el anterior. Después de probar todo lo anterior y fallar, me di count de que cuando estaba archivando mi aplicación, no puse la URL de la aplicación en la configuration, por lo que esta URL nunca estuvo en mi file de plist. Asegúrese de que cuando vea su file Plist que la URL de la aplicación esté allí.

Como muchos otros antes, también encontré este demonio de un problema. En mi caso, el problema era que el file Plist no estaba correctamente formado. Asegúrese de que el file sigue el patrón exacto descrito en la documentation: http://developer.apple.com/library/ios/#featunetworkingarticles/FA_Wireless_Enterprise_App_Distribution/Introduction/Introduction.html

Para cualquiera que esté interesado en generar dinámicamente su plist, este ejemplo es PHP:

 $appUrl='itms-services://?action=download-manifest&url=http://server/iOSpList.php?'. 'url%3D'.$app['url']. '%26bundle%3D'.$app['bundle']. '%26version%3D'.$app['version']. '%26name%3D'.$app['name']; 

Además, asegúrese de que el tipo mime se devuelve como application/xml .

Encontré este problema exactamente como lo describiste, y mi problema resultó ser que me perdí "http: //" en la url. Después de agregar esta parte al campo url en el file .plist, todo funcionó bien. ¡Espero eso ayude!

Tuve problemas similares al distribuir mi aplicación utilizando el perfil de aprovisionamiento de AdHoc. Intenté eliminar perfiles antiguos, generar nuevos perfiles, reiniciar Xcode, limpiar y rebuild, comprobar los nombres de routes URL, etc. La aplicación se instalará en algunos dispositivos, pero no en otros.

Lo que funcionó para mí fue cambiar la versión de la aplicación y comstackr a un número más nuevo.

Encontré que 'no puedo usar index.html' para ios 6 para instalar la aplicación. Corregido por el cambio de 'index.html' a 'dev.html'. la esperanza ayudará a alguien

Probé algunos al mismo time, así que no estoy seguro de cuál era el bueno.

Se creó una ID de aplicación comodín (nombre comodín, identificador bunde *), se creó un perfil para esta aplicación y se firmó la ipa con este perfil.

Registrado un dispositivo en el portal de aprovisionamiento.

nombré el file donde relacioné la aplicación dev.html en lugar de index.html

La solución adecuada es replace espacios con "+" (más) como … url = … significa que es un parámetro de cadena de consulta y se codificarán como parámetro de datos de formulario cuando se codifican para URL.

Desde aquí W3.org – Formularios en documentos HTML :

"Los nombres y los valores de control se escapan. Los caracteres espaciales se reemplazan por '+', y luego los caracteres reservados se escapan como se describe en [RFC1738]"

PS Eso resolvió el mismo problema que encontramos durante el desarrollo de icenium.com. Puede verificar la firma de la disposition de AdHoc allí y ver cómo funciona para proyectos con espacios en los nombres.

Si está enviando el enlace desde un correo electrónico, NO PUEDE usar el formatting HTML en el correo electrónico. Debe usar el formatting de "text enriquecido"

No sé por qué, pero así es como es (al less con Outlook)