web-dev-qa-db-fra.com

distribution iOS Enterprise OTA impossible à télécharger l'application

J'ai créé une application iOS et je souhaite la distribuer par voie hertzienne. J'ai suivi ce guide:

http://help.Apple.com/iosdeployment-apps/mac/1.1/?lang=en-us#app43ad77ea

L'application est signée avec le certificat d'entreprise et contient le profil d'approvisionnement de distribution.

Lorsque j'essaie de télécharger l'application sur l'ipad (en utilisant la technique décrite dans ce guide), une icône carrée avec mon icône de téléchargement apparaît à l'écran avec le nom "En attente ...", nom de l'application réelle, puis à nouveau une seconde plus tard, je reçois le message d'erreur:

Impossible de télécharger l'application

"Votre application" n'a pas pu être téléchargé pour le moment.

dans le guide, il existe trois conseils de dépannage:

si la distribution des applications sans fil échoue avec un message «impossible de télécharger» message, vérifiez les points suivants:

Assurez-vous que l'application est bien signée. Testez-le en l'installant sur un appareil utilisant iPhone Configuration Utility ou Apple Configurator, et voir si des erreurs se produisent.

Assurez-vous que le lien vers le fichier manifeste est correct et que le manifeste le fichier est accessible aux utilisateurs du Web.

Assurez-vous que l'URL du fichier .ipa (dans le fichier manifeste) est correcte et le fichier .ipa est accessible aux utilisateurs du Web.

J'ai vérifié les trois choses et elles vont bien.

Quoi d'autre pourrait causer mes problèmes de téléchargement?

30
user1282931

Comme alexey mentionné, trop de raisons peuvent être à l'origine de ce message. Apple l'utilise comme un "attrape toutes les erreurs".

Vous pouvez le diagnostiquer via Console. Connectez le périphérique à votre bureau et accédez-y à partir de XCode's Organizer (mac uniquement) ou de iPhone Configuration Utility (mac et windows). Mais...

Ce n'est pas si simple! :-(

Console peut être loin d'être suffisant. Parfois, il y a pas de message pertinent ici.

Ensuite, le dernier recours est après un liste de contrôle . Faire tout à partir de zéro à nouveau. Il y a beaucoup de outthere ... Mais voici mon nom générique et non détaillé liste de contrôle pour la distribution Over The Air, pour le moment.



  1. Avoir une version de distribution - C’est la partie la plus compliquée, toujours effectuée sur le Web, et Apple modifie les étapes à tout moment. En général, vous avez besoin d'un certificat, d'un identifiant et du profil d'approvisionnement. La liste des périphériques est presque toujours requise. Mon choix actuel est "Distribution -> In House".

    Apple Developer -> Member Center -> Certificates, Identifiers & Profiles -> Provisioning Profiles -> Add (+)

    P.S .: Si vous voulez lister les périphériques, assurez-vous que les UDID sont corrects. Beaucoup de problèmes rapportés ici.

  2. Définissez le profil sous Projet -> Paramètres de construction - Depuis XCode 5, les choses ont changé. Au lieu de signature de code _ avec un identité, vous pouvez effacer tout cela et le définir sous * Signature du code -> * Profil de provisioning. L’identité devrait automatiquement changer en "Automatique _". Il n'est également plus nécessaire de télécharger manuellement les fichiers de l'étape 1 et de les installer. XCode gère cela maintenant.

    XCode 5 -> Project Navigator -> Project -> Build Settings

  3. Archive - Dans Xcode 5, il n’est plus nécessaire de "Construire pour archive". Il suffit de l'archiver. Il devrait apparaître ensuite sur Organizer, et cela prendra du temps s'il s'agit d'un gros projet. De nombreuses erreurs peuvent survenir à ce stade, mais elles sont presque toujours liées à la compilation de code et non à l'OTA.

  4. Deploy - Maintenant dans Organiseur -> Archives, sélectionnez l'archive appropriée (doit déjà être sélectionnée comme étant la plus récente), cliquez sur "Distribuer", puis sur Enregistrer. pour le déploiement en entreprise ou ad hoc. Peut-être grand attendre maintenant. Lors de l'enregistrement du fichier, l'option "Enregistrer pour Enterprise Distribution} _" est disponible. C'est un nom complètement trompeur. En réalité, il crée le fichier plist. Si vous en avez déjà un, c'est bon. Vous pouvez même le modifier manuellement, ce qui est généralement préférable. Le plist sera nécessaire pour l'étape (5). En voici un bon:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>items</key>
        <array>
            <dict>
                <key>assets</key>
                <array>
                    <dict>
                        <key>kind</key>
                        <string>software-package</string>
                        <key>url</key>
                        <string>http://example.com/app.ipa</string>
                    </dict>
                    <dict>
                        <key>kind</key>
                        <string>full-size-image</string>
                        <key>needs-shine</key>
                        <false/>
                        <key>url</key>
                        <string>http://example.com/FullSizeImage.png</string>
                    </dict>
                    <dict>
                        <key>kind</key>
                        <string>display-image</string>
                        <key>needs-shine</key>
                        <false/>
                        <key>url</key>
                        <string>http://example.com/Icon.png</string>
                    </dict>
                </array>
                <key>metadata</key>
                <dict>
                    <key>bundle-identifier</key>
                    <string>com.example.app</string>
                    <key>kind</key>
                    <string>software</string>
                    <key>subtitle</key>
                    <string>for iOS</string>
                    <key>title</key>
                    <string>My App</string>
                </dict>
            </dict>
        </array>
    </dict>
    </plist>
    
  5. Distribuer - Ignorez cette étape si vous souhaitez l'installer à l'aide de XCode ou de l'utilitaire de configuration iPhone. Vous avez terminé. C’est mettre le fichier sur un site Web. "Simplement" ajoutez une page HTML avec un lien a href comme celui-ci: 

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

    Malheureusement, traiter avec des serveurs Web n'est jamais simple. Alors aussi vérifiez le type mime du serveur ! J'ai créé deux PHP fichiers pour les gérer, si votre serveur prend en charge php. Conservez simplement vos fichiers tels qu’ils sont (les plist, html et ipa) et le link vers app.plist.php à la place:

    app.plist.php

    $file = fopen("app.plist", "r");
    while(!feof($file)){
        $line = fgets($file);
        print str_replace(".ipa", ".ipa.php", $line);
    }
    fclose($file);
    ?>
    

    app.ipa.php

    <?php
    header('Content-type: application/octet-stream');
    
    $file = fopen("app.ipa", "r");
    while(!feof($file)){
        $line = fgets($file);
        print $line;
    }
    fclose($file);
    ?>
    
  6. Verify - Assurez-vous que tous les fichiers répertoriés dans le tableau d’actifs sont disponibles au téléchargement. Si l'un de ces fichiers retourne 404 ou tel (y compris les icônes), l'installation entière échouera. Vous devez soit (A) rendre ces fichiers disponibles, soit (B) supprimer les entrées manquantes du répertoire. Les entrées d'icône ne sont pas nécessaires pour que le téléchargement fonctionne.

    Voici un exemple de plist sans icônes:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>items</key>
        <array>
            <dict>
                <key>assets</key>
                <array>
                    <dict>
                        <key>kind</key>
                        <string>software-package</string>
                        <key>url</key>
                        <string>http://example.com/app.ipa</string>
                    </dict>
                </array>
                <key>metadata</key>
                <dict>
                    <key>bundle-identifier</key>
                    <string>com.example.app</string>
                    <key>kind</key>
                    <string>software</string>
                    <key>subtitle</key>
                    <string>for iOS</string>
                    <key>title</key>
                    <string>My App</string>
                </dict>
            </dict>
        </array>
    </dict>
    </plist>
    

Les exemples de fichiers sont une partie très importante de la liste de contrôle. Ils doivent être 100% correct.

Vérifiez les fichiers plist et html!

P.S .: J'écris cette réponse parce que, dans mon cas, il s'agissait d'un "simple" problème de mauvais lien sur le fichier .plist. Et, en tant que tel, il est très difficile à diagnostiquer. Eh bien, seule cette liste de contrôle pourrait me permettre de trouver l'erreur! Cela pointait vers "autre-app.ipa" plutôt que "app.ipa"!

33
cregox

Il y a beaucoup de raisons de provoquer ce message.

La meilleure façon de le diagnostiquer consiste à connecter un périphérique à Mac et à rechercher Console pour le périphérique dans Organizer .

Dans mon cas, par exemple, c'était:

verify_bundle_metadata: Cette application n'a pas été conçue pour prendre en charge cette famille de périphériques.

12
alexey

Répondre à ma propre question:

Le problème était qu’un des miniatures n’avait pas le chemin correct défini dans le fichier manifest.plist - de sorte que non seulement l’ipa a besoin du chemin correct, mais aussi des icônes de téléchargement temporaires, sinon l’installation échouera avec le message d'erreur mentionné.

7
user1282931

Un autre problème pourrait être que les fichiers .plistET.ipa doivent être hébergés avec HTTPS et pas uniquement avec le protocole HTTP standard. La chaîne de package logiciel devrait ressembler à celle ci-dessous:

<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>https://example.com/app.ipa</string>

Stupide petit oubli, mais ça me faisait trébucher pendant un moment.

6
Gary Keeler

Nous avons rencontré le même message d'erreur lorsque nous avons essayé d'installer une application iOS 5+ sur un téléphone iOS4.3.5. Avez-vous également vérifié que les cibles de déploiement/construction et l'architecture de cible correspondent au (x) périphérique (s) présentant ce problème?

3
Christoph

J'ai trouvé dans la console.

installcoordinationd (MobileInstallation) [99]: **** bundleID ****: 5: 11: 1: 1: Mise à jour de PlaceholderMetadata pour **** bundleID **** avec l'échec 1 _LSInstallType 1, sous-jacentError (Error Domain = MIInstallerErrorDomain Code = 13 "Échec de la vérification du code Signature de /Private/var/installd/Library/Caches/com.Apple.mobile.installd.staging/temp.IoCSM9/extracted/Payload/ App.app : 0xe8008016 (l'exécutable a été signé avec des droits non valides.) " UserInfo = {LibMISErrorNumber = -402620394, LegacyErrorString = ApplicationVerificationFailed, SourceFileLine = 147, FunctionName = + [MICodeSigningVerifier _validateSignatureAndCopyInfoForURL: withOptions: erreur:], NSLocalizedDescription = Impossible de vérifier la signature de code de /private/var/installd/Library/Caches/com.Apple.mobile.installd.staging/temp.IoCSM9/extricated/Payload/ App.app : 0xe8008016 (l'exécutable a été signé avec des droits non valides.)}), source 17>

Ici nous devrions regarder:
Échec de la vérification de la signature de code de App.app
L’exécutable a été signé avec des droits non valides.

Dans mon cas, c’est parce que j’ai téléchargé la version d’entreprise de Amazon. Mais le profil de provisioning, avec lequel il a été créé, a expiré (indiqué dans developer console ).


Un autre avec l'autre but:

"Cette application n'a pas pu être installée pour le moment.". UserInfo = {NSLocalizedDescription = Cette application n'a pas pu être installée à cette fois., NSUnderlyingError = 0x100cbd3c0 {Erreur Domain = MIInstallerErrorDomain Code = 64 "La chaîne de droits d'accès pour l'identificateur d'application .__ (BBBUUUU.com.bundle.www) De la mise à niveau ne correspond pas à la chaîne d'identificateur d'application de l'application installée (CCCEEEE.com.bundle.www); rejeter la mise à niveau. " UserInfo = {LegacyErrorString = MismatchedApplicationIdentifierEntitlement, FunctionName = - [MIInstallableBundle _validateApplicationIdentifierForNewBundleSigningInfo: erreur:], SourceFileLine = 878, NSLocalizedDescription = Mettre à niveau Chaîne de droits d'accès identifiant d'application (BBBUUUU.com.bundle.www) ne correspond pas à la chaîne d'identificateur d'application de l'application installée (CCCEEEE.com.bundle.www); rejeté

Ici, je viens de supprimer la version précédente de l'application. L'erreur était due au fait que j'ai changé l'équipe pour l'ID de l'ensemble et que l'application avec l'ID de l'ensemble précédent a été installée.


Ouvrir la console avec:

  • Xcode> Window> Devices
  • Sélectionnez l'appareil
  • Développez une console avec une boîte avec une flèche dans le coin inférieur gauche.
1
Nik Kov

Assurez-vous que le boîtier correspond à tous les fichiers. Ils ont tendance à être insensibles à la casse.

1
Tim Glenn

Dans mon cas, le problème était sur mon appareil. Une ancienne version de la même application avait été installée avec le même identifiant de paquet (téléchargé à partir de l'appStore). Désormais, lorsque j'essayais de télécharger sa nouvelle version via une distribution d'entreprise, cela ne faisait rien, aucune erreur. Supprimer la version existante de l'appareil a résolu mon problème. 

1
Irfan DANISH

Essayez de vérifier bundle identifier dans votre fichier XCode et .plist

0
Garnik

Dans mon cas, j’ai suivi pour vous débarrasser du message "ne peut pas se connecter à dl.dropboxusercontent" après avoir fourni le lien partagé ipa . 1. Suppression de la section md5 du répertoire 2. 512 * 512 et 57 * 57 images téléchargées dans une boîte de dépôt et un lien partagé fourni dans fill_size_image et display_image dans une liste déroulante.

0
Lakhwinder

Dans mon cas, il y avait un problème avec les autorisations de fichier incorrectes du dossier FTP et des fichiers à l'intérieur (manifeste, ipa, images). Vérifiez qu'ils ont 775 (rwx) et que le propriétaire/groupe est votre propriétaire.

L'erreur dans la console du périphérique ressemblait à " Impossible de se connecter à iTunes Store " ou " Échec de l'illustration pour bundleID " ou " Impossible de charger l'illustration réservée pour bundleID ". Mais il ne s'agit que de fichiers.

0
atereshkov

La première chose à vérifier ici est que le périphérique sur lequel vous installez a le bon système d'exploitation pour l'application que vous installez. Par exemple, si l'application est conçue pour iOS 11 et que votre appareil est équipé d'iOS 10, l'application va s'installer, mais l'erreur "Impossible de télécharger l'application" s'affiche.

0
Kurt Arnlund