web-dev-qa-db-fra.com

Le déploiement d'applications d'entreprise ne fonctionne pas sur iOS 7.1

Nous distribuons des applications via un compte Enterprise, en utilisant une URL itms-services://. Cela a toujours bien fonctionné, mais après avoir installé iOS 7.1 beta sur notre iPad, il refuse de l'installer. Au lieu de cela, nous obtenons simplement le message générique Cannot connect to example.com que iOS affiche de manière inopinée en cas de problème de téléchargement de l'application.

J'ai été incapable de trouver quoi que ce soit ici sur SO, sur Google ou dans les notes de version 7.1 pour suggérer ce qui pourrait être à l'origine du problème.

316
Mark Parnell

J'ai trouvé le problème en connectant l'iPad à l'ordinateur et en visualisant la console via XCode Organizer lors de l'installation de l'application. L'erreur s'avère être:

Impossible de charger l'URL du manifeste non https: http://example.com/manifest.plist

Il s'avère que dans iOS 7.1, l'URL du fichier manifest.plist doit être HTTPS, où nous utilisions HTTP. Changer l'URL en HTTPS a résolu le problème.

C'est à dire.

itms-services://?action=download-manifest&url=http://example.com/manifest.plist

devient

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

Je suppose que vous devez avoir un certificat SSL valide pour le domaine en question. Nous l'avons déjà fait, mais j'imagine que vous aurez des problèmes sans cela.

330
Mark Parnell

ingconti a raison.

  1. Téléchargez votre app.plist dans un dropbox.
  2. Obtenir le lien partagé de app.plist, comme https://www.dropbox.com/s/qgknrfngaxazm38/app.plist
  3. remplacez www.dropbox.com par dl.dropboxusercontent.com dans le lien, comme https://dl.dropboxusercontent.com/s/qgknrfngaxazm38/app.plist
  4. Supprimez tous les paramètres du lien partageable dans la zone de dépôt, tels que "? Dl = 0t" (selon Carlos Aguirre Tradeco à l'adresse le déploiement d'applications d'entreprise ne fonctionne pas sur iOS 7.1 et ma propre expérience).
  5. Créez un fichier download.html avec un lien au format <a href="itms-services://?action=download-manifest&url=https://dl.dropboxusercontent.com/s/qgknrfngaxazm38/app.plist">INSTALL!!</a>
  6. Transférez votre download.html vers une liste déroulante
  7. Encore une fois, obtenez un lien partagé de download.html, tel que https://www.dropbox.com/s/gnoctp7n9g0l3hx/download.html , et supprimez tous les paramètres.
  8. Remplacez www.dropbox.com par dl.dropboxusercontent.com dans le deuxième lien également, par exemple https://dl.dropboxusercontent.com/s/gnoctp7n9g0l3hx/download.html

Maintenant, visitez https://dl.dropboxusercontent.com/s/gnoctp7n9g0l3hx/download.html sur votre appareil, vous pouvez installer l’application comme avant.

QUEL MONDE MERVEILLEUX!

231
oldman

En réponse à la réponse de Mark Parnell, un moyen simple et rapide de résoudre ce problème consiste à placer le plist manifeste dans Dropbox, puis à utiliser l'interface Web de Dropbox pour obtenir un lien https direct ("Lien de partage" -> " Obtenir le lien '->' Télécharger ').

Le ipa réel peut rester où vous l'avez toujours servi. Vous aurez besoin de coder l'URL de l'URL du plist avant de l'insérer dans la requête de l'URL itms-servivces (bien que le remplacement de tout & s par% 3D puisse fonctionner).

Un inconvénient est que la boîte de dialogue d'installation va maintenant indiquer "dl.dropbox.com veut installer [que ce soit]".

72
Mike

Il est vrai que, à l'avenir, vous devrez effectuer tous les déploiements d'OTA sur https à l'aide de iOS 7.1. Honte à Apple pour ne pas avoir documenté cela.

Pour ceux d'entre vous qui recherchent une meilleure solution interne que de dépendre de Dropbox ou de devoir débourser de l'argent pour obtenir un certificat, vous pouvez avoir une solution si vous suivez les étapes décrites dans le conseil n ° 5 ici: http: //blog.httpwatch.com/2013/12/12/five-tips-for-using-self-signed-ssl-certificates-with-ios/

L'essentiel est le suivant:

  • Créez votre propre certificat d'autorité de certification que vous pouvez installer sur le périphérique entièrement approuvé (je l'ai installé en l'envoyant simplement par courrier électronique)
  • Créez la paire clé/certificat sur le certificat racine et installez-la sur votre serveur
  • Assurez-vous que votre serveur Web utilise la paire clé/certificat correspondant au certificat racine de l'autorité de certification.
  • À ce stade, vous devriez pouvoir installer vos applications comme d'habitude via https
  • Tout cela peut être accompli sur OSX en utilisant openssl qui est déjà installé par défaut

Ce n'est pas la même chose que de simplement produire un certificat auto-signé. Dans cette solution, vous agissez également en tant que votre propre autorité de certification privée. Si votre certificat racine installé sur votre périphérique Apple n'est pas marqué comme étant approuvé (vert), il y a quelque chose qui ne va pas. Fais le sur.

Cela fonctionne absolument.

Mise à jour: 13/03/2014 - J'ai fourni un petit utilitaire de ligne de commande qui simplifie l'ensemble du processus. Vous pouvez l'obtenir à l'adresse suivante: https://github.com/deckarep/EasyCert/releases

36
Ralph Caraveo

J'ai eu le même problème et bien que j'utilisais déjà un serveur SSL, changer les liens en https ne fonctionnait pas car il y avait un problème sous-jacent.

enter image description here Cliquez ici pour l'image

Ce bit en surbrillance m'a dit que devrait avoir l'option de faire confiance au certificat, mais comme il s'agit de l'App Store, travaillant via Safari, cette suggestion de récupération n'est tout simplement pas présentée.


Je n'étais pas satisfait des solutions existantes car:

  • Certaines options nécessitent une dépendance vis-à-vis d'un tiers (Dropbox)
  • Nous n'étions pas disposés à payer pour un certificat SSL
    • Les certificats SSL gratuits ne sont qu'une solution temporaire.

J'ai finalement trouvé une solution en créant une autorité de certification racine auto-signée et en générant le certificat SSL de notre serveur à l'aide de cette option.

J'ai utilisé Keychain Access et OSX Server, mais il existe d'autres solutions valables à chaque étape.


Création d'une autorité de certification

D'après ce que je comprends, les autorités de certification sont utilisées pour vérifier que les certificats sont authentiques. Puisque nous sommes sur le point d'en créer un nous-mêmes, ce n'est pas exactement secure , mais cela signifie que vous pouvez faire confiance à tous les certificats d'une autorité donnée. Une liste de ces autorités est généralement incluse par défaut dans vos navigateurs, car elles sont en fait approuvées. (GeoTrust Global CA, Verisign, etc.)

  • Ouvrez le trousseau et utilisez l'assistant de certificat pour créer une autorité.

enter image description here

  • Remplissez les informations de votre autorité de certification

enter image description here

  • Je ne sais pas si c'est nécessaire, mais j'ai fait confiance à l'autorité.

enter image description here


Générer une demande de signature de certificat

Dans notre cas, les demandes de signature de certificat sont générées par l'administrateur du serveur. C'est simplement un fichier qui demande "Puis-je avoir un certificat avec cette information pour mon site s'il vous plaît".

  • Ensuite, vous devrez créer votre demande de signature de certificat (j'ai utilisé le gestionnaire de certificats du serveur OSX pour ce bit

enter image description here

  • Remplissez les informations de votre certificat (ne doit contenir que des caractères ascii !, merci @Jasper Blues)

enter image description here

  • Enregistrer la génération de CSR quelque part

enter image description here


Création du certificat

En tant qu'autorité de certification à nouveau, c'est à vous de décider si la personne qui vous a envoyé le REA est authentique et si elle ne prétend pas être quelqu'un d'autre. Les vraies autorités ont leurs propres façons de le faire, mais puisque vous êtes sûr de l'être, votre vérification devrait être tout à fait certaine :)

  • Retournez dans Keychain Access et ouvrez l'option "Create A Certificate .." comme indiqué

enter image description here

  • Faites glisser votre CSR enregistrée dans la case indiquée

enter image description here

  • Cliquez sur le bouton "Me laisser remplacer les valeurs par défaut pour cette demande"

enter image description here

  • J'aime augmenter la période de validité.

enter image description here

  • Pour une raison quelconque, nous devons remplir à nouveau certaines informations

enter image description here

  • Cliquez sur Continuer sur cet écran

enter image description here

  • ASSUREZ-VOUS DE CLIQUER L'AUTHENTIFICATION DU SERVEUR SSL , celle-ci m'a causé des maux de tête.

enter image description here

  • Vous pouvez cliquer sur Continuer dans les autres options.

  • L'application Mail s'ouvrira pour vous permettre d'envoyer le certificat. Au lieu d'envoyer un courriel, cliquez dessus avec le bouton droit de la souris et enregistrez-le.

enter image description here


Installer le certificat

Nous devons maintenant configurer le serveur pour utiliser le certificat que nous venons de créer pour son trafic SSL.

  • Si le périphérique sur lequel vous travaillez est votre serveur, vous constaterez peut-être que le certificat est déjà installé.

enter image description here

  • Sinon, double-cliquez sur le certificat en attente et faites glisser le fichier PEM que nous venons tout juste d’enregistrer du courrier électronique dans l’espace indiqué. (Vous pouvez également exporter votre PEM depuis le trousseau si vous ne l'avez pas sauvegardé.)

enter image description here

  • Mettez à jour votre serveur pour utiliser ce nouveau certificat. Si vous constatez que le nouveau certificat ne "collera" pas et que vous reviendrez sans cesse, revenez au bit situé dans BOLD ITALIC CAPS

enter image description here


Configuration des appareils

Chaque appareil sur lequel vous devez installer des applications doit disposer d'une copie de cette autorité de certification afin de savoir qu'il peut faire confiance aux certificats SSL de cette autorité.

  • Retournez dans Keychain Access et exportez votre autorité de certification en tant que .cer

enter image description here

  • J'ai ensuite placé ce fichier sur mon serveur avec mes applications OTA. Les utilisateurs peuvent cliquer sur ce lien et télécharger le certificat d'autorité. Envoyer le certificat directement aux utilisateurs par courrier électronique est également une option valide.

enter image description here

  • Installez le certificat sur votre appareil.

enter image description here


Tester

  • Assurez-vous que vos liens de plist sont https

    • Essayez d'installer une application! Cela devrait maintenant fonctionner. L'autorité de certification est approuvée et le certificat SSL provient de cette autorité.
34
James Webster

Je peux confirmer que cela fonctionne, mais vous devez mettre HTML ET plist sur la liste déroulante. Cela fonctionne aussi pour les OTA non-entreprises, c'est-à-dire que vous voulez partager l'application avec votre dev. équipe.

J'ai fait:

a) sur mon site j'ai créé une page avec ce lien:

.. href = "https://dl.dropboxusercontent.com/u//(y votre ID de base de données) /ipa.html"> MyApp

b) sur DropBox, j'ai écrit une autre page HTML:

.. https://dl.dropboxusercontent.com/u/(votre ID de base de données) /MyApp.plist "> Appuyez pour installer MyApp

c) déplacé la plist sur DropBox mais en la laissant à POINT sur mon ancien serveur (pas de https)

6
ingconti

Ouvrez le terminal et lancez la commande: curl -i https: // (le chemin du fichier .ipa n'est pas plist)

Cela vous dira si l'installateur peut ou non voir le fichier IPA. Si vous exécutez la commande curl avec le '-i', vous verrez la réponse complète et ce n'est probablement pas le fichier IPA. C’est la réponse que le programme d’installation voit. Par conséquent, s’il ne renvoie pas HTTP 200 et IPA, vous devrez le renvoyer de votre côté.

Le programme d'installation ITMS n'enregistre aucun contexte de Safari. Si vous vous êtes authentifié sur un portail sécurisé dans Safari, les cookies d'authentification ne sont pas transmis à l'installateur. C'est-à-dire que l'installateur doit pouvoir voir l'application sans authentification, ce qui pourrait expliquer le message "Connexion impossible au serveur".

3
Gagan_iOS

J'ai eu le même problème et fait comme mentionné ci-dessus.

  • Placez le plist dans la boîte de dépôt.
  • Sur le bouton de téléchargement du fichier, sous l’image du document avec le bouton droit de la souris, sélectionnez l’action Copier le lien. Ce lien est déjà quelque chose comme https://dl.dropboxusercontent.com/s/xyz123/app.plist?stuff=stuff avec de nombreux paramètres.
  • Supprimer les paramètres (conservée seulement l'adresse entre https et .plist)
  • Recherchez l’URL encoder en ligne, sélectionnez l’un de ces liens, copiez, collez, exécutez, puis le texte résultant est copié et collé dans le code HTML où j’ai le lien itms-services. En passant, j'ai ce code HTML dans deux endroits différents, l'un d'entre eux est l'endroit où se trouve l'ipa.
  • Assurez-vous que la pliste inclut des références absolues au fichier ipa.

Les deux pages ont fonctionné avec succès pour installer l'application dans iphones avec ios 7.1

Mais maintenant, les iphones avec ios 7.0x ne peuvent pas installer l’application.

J'ai créé une nouvelle question: le déploiement de l'application adhoc mise à niveau ne fonctionne pas sur iOS précédant la version 7.1

Les deux problèmes sont étroitement liés et liés également par le manque de références officielles.

2

Un type sympa a résolu le problème en utilisant le certificat de classe 1 StartSSL et la configuration Apache partagée qui ajoute la prise en charge du certificat (fonctionnera avec n’importe quel certificat) et le code permettant de modifier automatiquement les liens dans les fichiers * .plist existants. Trop long à copier, voici donc le lien: http://cases.azoft.com/how-to-fix-certificate-is-not-valid-error-on-ios-7/

2
ice.cube

Si vous possédez AWS S3, cela fonctionne également comme un charme. Bien. Relativement parlant :-)

Créez un compartiment pour vos documents publicitaires dans AWS, ajoutez un fichier d'index (il peut s'agir simplement d'un fichier index.html vide), puis utilisez un client pouvant se connecter à S3, tel que CyberDuck ou Coda (j'ai utilisé Coda), puis sélectionnez Ajouter. Pour obtenir une fenêtre de connexion) puis définissez les connexions comme suit:

Ensuite, créez votre entreprise ad hoc en XCode et assurez-vous d'utiliser https://s3.amazonaws.com/votre-bucket-name/votre-ad-hoc-folder/votre-app.ipa as l’URL de l’application et chargez-le dans votre nouveau répertoire de compartiment S3.

Votre lien itms doit correspondre, c'est-à-dire itms-services: //? Action = download-manifest & url = https://s3.amazonaws.com/your-bucket-name/your-ad-hoc-folder/your- app.plist

Et voila.

Ceci concerne uniquement les URL AWS génériques. Je n'ai pas essayé d'utiliser d'URL personnalisées sur AWS. Il est donc possible que vous deviez procéder différemment.

J'étais déterminé à essayer de faire fonctionner la solution de James Webster ci-dessus, mais je ne pouvais pas la faire fonctionner avec Plesk.

2
Catherine

Au lieu d'utiliser Dropbox pour la distribution d'entreprise, vous pouvez utiliser TestFlight pour la distribution d'applications signées par l'entreprise.

https://www.testflightapp.com/

Il s'agit d'un service fantastique pour l'hébergement et la distribution des versions de développement ad hoc et des versions d'entreprise.

1
Brody Robertson

En complément des réponses précédentes à propos de Dropbox, j’ai implémenté l’arborescence de fichiers suivante, par exemple, seul le fichier PLIST doit être chargé dans Dropbox:

  1. télécharger le fichier ipa sur votre serveur en http (pas de changement ici)
  2. téléchargez le fichier de provisionnement (.mobileprovision) sur votre serveur au format http (aucun changement ici)
  3. télécharger le fichier plist sur votre boîte de dépôt (aucune modification à faire à l'intérieur du fichier plist car les URL sont absolues)
  4. utilisez l'option "Partager le lien avec Dropbox" qui copie le lien dans votre presse-papier. Ce lien doit être copié dans votre fichier html dans la requête de l'URL itms-servivces après avoir modifié la partie www.dropbox.com de dl.dropboxusercontent.com. Notez que l'URL a codé le lien comme suggéré par @Mike mais je ne teste pas sans le faire. La requête de l'URL itms-services devrait ressembler à ceci: itms-services://?action=download-manifest&url=https%3A%2F%2Fdl.dropboxusercontent.com%2Fs%2FYourShortDropboxLink.plist

  5. télécharger le fichier html sur votre serveur en http. Notez que le fichier html contient à la fois des liens vers des fichiers ipa et des fichiers de provisioning.

  6. l'accès à votre fichier html à partir de votre appareil et l'ipa peut maintenant être installé par OTA comme d'habitude.

A partir de maintenant, seul le fichier ipa doit être modifié pour fournir les prochaines versions d'applications par OTA à vos bêta-testeurs. Jusqu'à ce que Apple change encore les règles de sécurité.

Je rejoins ici après le très simple fichier HTML que j'utilise:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>iPhone app for test</title>
</head>
<body>
<h1>iPhone app for test</h1>
<br/>
<ul>
    <li><a href="http://www.yourdomain.com/with/directories/provision/v.last/yourprovision_adhoc.mobileprovision">
            Install Provisioning File</a></li>
    <li><a href="itms-services://?action=download-manifest&url=https%3A%2F%2Fdl.dropboxusercontent.com%2Fs%2FYourShortDropboxLink.plist">
            Install Application</a></li>
</ul>
</body>
</html>
1
Lisarien

Après avoir lu cet article, le téléchargement de mon application me posait toujours un problème. Le problème était dû au certificat SSL auto-signé.

J'ai trouvé une solution à ce problème. Vous devez télécharger votre fichier de certificat avec l'extension ".crt" sur le Web et en saisir l'adresse dans votre safari mobile. Le système vous demande d'ajouter votre certificat à la liste des certificats de confiance. Après cette opération, vous pourrez installer votre application ad-hoc.

0
ArturOlszak

La solution universelle consiste à connecter votre appareil à un Mac et à observer ce qui se passe pendant l'installation. J'ai une erreur:

Impossible de charger le manifeste de téléchargement avec l'erreur sous-jacente: Domaine d'erreur = Code NSURLErrorDomain = -1202 "Connexion au magasin impossible" UserInfo = 0x146635d0 {NSLocalizedDescription = Connexion impossible au magasin, NSLocalizedRecoverySuggestion = Voulez-vous vous connecter au serveur de toute façon ?, NSLocalizedFailureReason = Une connexion sécurisée n'a pas pu être établie. Vérifiez vos paramètres de date et heure. , NSErrorFailingURLStringKey = https://myserver.com/app/manifest.plist , NSUnderlyingError = 0x14678880 "Le certificat de ce serveur n'est pas valide. Vous vous connectez peut-être à un serveur se faisant passer pour" myserver.com ", ce qui pourrait mettre en péril vos informations confidentielles.", NSURLErrorFailingURLPeerTrustErrorKey =, NSErrorFailingURLKey = https : //myserver.com/app/manifest.plist }

Il y avait même la suggestion dans cette erreur de vérifier les paramètres de date. Pour une raison quelconque, la date était le 1er janvier 1970. Le réglage correct de la date résolvait le problème.

0
beryllium

Notre équipe utilise dropbox pour la distribution ad-hoc qui utilise https, mais notre application n’a toujours pas été installée. Après beaucoup de problèmes, nous nous sommes rendus compte que le champ title est également requis. Chaque fois que nous avons envoyé un lien sans ce champ, Safari a ignoré le lien et n'a pas invité l'utilisateur à installer. Parfois, pour des tests de développement rapides, nous avons ignoré le nœud de titre dans le fichier XML et ne l'avons pas renseigné. Si cela est utile pour quiconque ayant ce problème, assurez-vous que votre .plist contient les noeuds suivants remplis:

      ....
     <string>software</string>
    <key>title</key>
     <string>Your App Name</string>
      ...
0
user2325031