70 votes

Identifiant de package et certificat de push... Erreur d'attribution d'environnement aps-environment

J'ai lu Où Xcode prend-il l'Identifiant de l'application?, Formatage de l'identifiant de bundle Xcode à partir de {NOM_DU_PRODUIT} , et bien d'autres mais...

J'essaie de mettre en place les notifications push et j'obtiens l'erreur redoutée

"Erreur Domain=NSCocoaErrorDomain Code=3000 "aucune chaîne d'autorisation 'aps-environment' valide trouvée pour l'application" UserInfo=0x15b200 {NSLocalizedDescription=aucune chaîne d'autorisation 'aps-environment' valide trouvée pour l'application}" erreur.

Je suis assez sûr d'avoir suivi toutes les étapes correctement, y compris :

  • avoir créé le certificat push bien avant le certificat de provisionnement
  • avoir créé un 'Entitlements.plist'
  • avoir ajouté un booléen get-task-allow et l'avoir réglé sur true (version ad-hoc)

La seule chose sur laquelle je n'arrive pas à m'en sortir est l'Identifiant de Bundle

Le certificat push est pour

XXXXXXXXXX.com.julianbaker.pwcnewsuk

L'Identifiant de Bundle dans PwCNewUK-Info.plist est pour

com.julianbaker.${PRODUCT_NAME:rfc1034identifier}

Si je le change manuellement à

com.julianbaker.pwcnewsuk

J'obtiens une erreur de correspondance de l'UDID car l'application est considérée comme PwCNewsUK

Lorsque j'ai recherché sur Google, il semble y avoir de la confusion à ce sujet, mais il semble qu'ils doivent correspondre ?

QUESTION:

Quel devrait être l'Identifiant de Bundle pour correspondre au certificat push de
XXXXXXXXXX.com.julianbaker.pwcnewsuk ?

QUESTION:

Dois-je ajouter une autorisation "aps-environment" au profil de provisionnement, et si oui, où et comment? (Voir http://www.airplaysdk.com/node/3174 entre autres)

J'adore le développement iPhone mais parfois c'est un vrai casse-tête!

4 votes

En fouillant un peu plus, j'ai trouvé la RÉPONSE à la deuxième question... Apple devrait inclure la paire "aps-environment" dans le fichier mobileprovision, la valeur devrait être "development" ou "distribution". Il y a apparemment un bug où cette paire est parfois omise lors de la génération du certificat. Vérifiez en ouvrant le fichier dans un éditeur de texte.

0 votes

Et il semble que l'identificateur de bundle de l'application soit sensible à la casse (champ Indentifier dans le volet Propriétés de la fenêtre Info de la cible)

68 votes

CE PROBLÈME ME DONNE ENVIE DE PLEURER

88voto

J.R. Armstrong Points 966

J'ai trouvé cette question lorsque je passais d'un environnement de développement à un environnement de production sur une application sur laquelle je travaille. Ce processus impliquait la création d'un nouveau profil, d'un nouvel ID d'application, etc. J'ai créé l'ID d'application et un profil, mais l'Agent de l'équipe a dû configurer les notifications push. J'ai rencontré le problème de "no valid 'aps-environment' entitlement string found for application" lorsque j'ai essayé de reprendre les tests avec le nouveau profil (après que l'application ait été configurée pour les notifications push). J'ai alors pensé à lire un petit avertissement dans la documentation :

"Vous devez modifier le profil d'une certaine manière (par exemple, basculer une option) pour que le portail génère un nouveau profil de provisionnement. Si le profil n'est pas si "salit", vous obtenez le profil sans les droits de notification push."

Source : Guide de programmation des notifications locales et push

Pour moi, "salir" le profil de provisionnement et le réinstaller était tout ce qui était nécessaire pour résoudre le problème. Selon la documentation, cela était nécessaire car le profil de provisionnement avait été créé avant que l'application ne soit configurée pour les notifications push. Cela peut ou non aider quelqu'un, mais cela explique (et élimine) probablement le besoin d'ajouter manuellement quelque chose au profil de provisionnement.

17 votes

Totally worked for me, thanks! Absolument inacceptable que le site de développement d'Apple fonctionne si mal.

1 votes

Oui, cela a fonctionné pour moi. Chaque fois que vous mettez à jour l'identifiant de l'application, mettez à jour vos profils de provisionnement. Vous ne recevrez aucune notification d'Apple pour le faire. Mais vous devez le faire. Pas besoin de modifier les fichiers XML ou les permissions.

0 votes

Je suis tombé sur ce problème après avoir supprimé mon application de développement de mon iPad puis avoir essayé de la lancer à nouveau. J'ai suivi les instructions pour "souiller" le profil de provisionnement, le re-télécharger via l'organisateur, fermer et ouvrir Xcode, reconstruire et déployer, ensuite ça a fonctionné. C'est une solution de contournement pas très élégante.

21voto

huhitschris Points 722

J'ai rencontré le même problème "aucune chaîne d'autorisation 'aps-environment' valide trouvée pour l'application", mais les solutions ci-dessus n'ont pas fonctionné pour moi.

Je n'ai pas pu trouver de très bonne documentation sur cette erreur ou même sur la clé "aps-environment".

Après quelques bidouillages, voici ce qui a résolu le problème pour moi :

Ouvrez votre certificat de provisionnement de développement, "NomApplication.mobileprovision", avec un éditeur de texte, recherchez la clé "Entitlements", puis ajoutez toutes les valeurs trouvées ici à votre fichier Entitlements référencé par votre paramètre de signature de code Entitlements.

Voici un exemple des clés/valeurs que vous trouverez à l'intérieur :

application-identifier
xyz.com.xyz.xyz
aps-environment
development
com.apple.developer.ubiquity-container-identifiers

xyz.*

com.apple.developer.ubiquity-kvstore-identifier
xyz.*
get-task-allow

keychain-access-groups

xyz.*

Après avoir ajouté toutes ces valeurs à mon fichier Entitlements, mon application se construit avec succès et je peux enfin me remettre à travailler sur les notifications Push.

Je ne suis pas sûr si ces valeurs sont censées être automatiquement ajoutées à votre fichier d'entitlements par XCode, mais elles n'étaient certainement pas générées pour moi dans mon projet.

2 votes

Voici la réponse correcte. La solution consiste simplement à copier les valeurs de votre fichier .mobileprovision dans votre fichier Entitlements. J'aimerais qu'Apple documente cela quelque part. Si vous continuez à obtenir une erreur après avoir fait cela, redémarrez Xcode. Cela a résolu le problème pour moi.

0 votes

Il m'a aussi aidé. J'étais sûr d'avoir les mêmes valeurs, et j'ai essayé différentes combinaisons d'entre elles, mais quelque chose était différent et le copier-coller a résolu le problème. Peut-être que l'ordre des clés était pertinent.

6voto

vinzenzweber Points 2339

Configuration:

Mac OS X 10.8 + Xcode 4.4

Ma Solution Simple:

  1. Réémettez votre profil de provisionnement ad hoc après avoir configuré les notifications push pour votre identifiant d'application et les importer dans Xcode.
  2. Jetez un œil dans votre dossier .xcodeproj (clic droit -> Afficher le contenu du paquet) et supprimez le dossier xcuserdata.
  3. C'est tout ;)

Quelques indices sur ce problème:

Après avoir activé les notifications Push pour mon application, je n'ai soudainement plus pu créer de fichiers ad hoc. J'ai rencontré des erreurs dans le log de la Console sur mon iPhone en essayant d'installer mon application comme celles-ci:

Avr  1 20:56:10 inconnu installd[384] : l'autorisation 'keychain-access-groups' a une valeur non autorisée par un profil de provisionnement
Avr  1 20:56:10 inconnu installd[384] : l'autorisation 'get-task-allow' a une valeur non autorisée par un profil de provisionnement
Avr  1 20:56:10 inconnu installd[384] : l'autorisation 'application-identifier' a une valeur non autorisée par un profil de provisionnement
Avr  1 20:56:10 inconnu installd[384] : 2ff66000 verify_signer_identity: Impossible de copier la signature validée : -402620394
Avr  1 20:56:11 inconnu installd[384] : 2ff66000 preflight_application_install: Impossible de vérifier l'exécutable à /var/tmp/install_staging.44jV0O/foo_extracted/Payload/PersonalTrainer-Tester-iPhone.app
Avr  1 20:56:11 inconnu com.apple.itunesstored[392] : MobileInstallationInstall: échec avec -1
Avr  1 20:56:11 inconnu installd[384] : 2ff66000 install_application: Impossible de préparer l'installation de l'application
Avr  1 20:56:11 inconnu installd[384] : 2ff66000 handle_install: Échec de l'API
Avr  1 20:56:11 inconnu installd[384] : 2ff66000 send_message: Impossible d'envoyer un message Mach de 71 octets : 10000003
Avr  1 20:56:11 inconnu installd[384] : 2ff66000 send_error: Impossible d'envoyer une réponse d'erreur au client

Il y a une note technique qui recommande d'utiliser codesign -d --entitlements - .app pour vérifier si votre application est correctement signée pour les notifications push d'Apple. Dans le cas où la sortie de la commande codesign n'a pas un environnement aps défini sur production ou développement, il y a quelque chose qui cloche!

Jusqu'à présent, mes applications signées avec un profil de provisionnement adhoc ont toujours un embedded.mobileprovision à l'intérieur du dossier .app avec une partie spécifique, tel que:

Entitlements

    application-identifier
    ABCDEFGH.com.myappname.tester
    aps-environment
    production
    get-task-allow

    keychain-access-groups

        ABCDEFGH.*

Après avoir utilisé codesign, j'ai réalisé que le binaire réel dans .app avait aussi un XML inclus, qui disait quelque chose de très différent que mon fichier embedded.mobileprovision:

    application-identifier
    ABCDEFGH.com.myappname.tester
    get-task-allow

    keychain-access-groups

        ABCDEFGH.com.myappname.tester

Je suppose que cela est la cause du message d'erreur que nous rencontrons tous. (bien que cette erreur puisse avoir différentes origines comme le suggèrent d'autres posts sur stackoverflow également)

L'exécutable a été signé avec des autorisations invalides.
Les autorisations spécifiées dans le fichier Entitlements de signature de code de votre application
ne correspondent pas à celles spécifiées dans votre profil de provisionnement. (0xE8008016).

Je pense qu'il y a un bug dans Xcode qui garde les réglages de votre fichier plist sans être mis à jour dans vos schémas ce qui fait que votre application est finalement signée avec le mauvais profil de provisionnement. Donc en supprimant le dossier xcuserdata, vous supprimez tous les schémas. Par conséquent, Xcode les recréera la prochaine fois avec les paramètres corrects et vous serez à nouveau heureux.

0 votes

Suppression des dossiers xcuserdata a résolu le problème pour moi! Merci!

0 votes

Le xcuserdata l'a corrigé pour nous, merci beaucoup! J'ai seulement eu besoin de supprimer la carte liée à l'utilisateur qui avait auparavant le contrôle du projet.

5voto

JulianB Points 885

Fondamentalement, la réponse est la même vague que tout le monde dit

  • Assurez-vous d'avoir ajouté un "Entitlements.plist" (Nouveau fichier / Signature de code / Droits)
  • Ajoutez "get-task-allow" (Boolean Off) à Entitlements.plist
  • Ajoutez la paire "aps-environnement" "production" à Entitlements.plist -- Cette dernière étape peut être inutile mais c'était l'une des étapes que j'ai fait juste avant que cela fonctionne
  • Supprimez les anciens fichiers de provisionnement mobile de l'iPhone/iPod (Dans Paramètres/Général),
  • Supprimez les anciens fichiers de provisionnement mobile de l'Organiseur XCode
  • Supprimez l'application de l'iPhone/iPod
  • Quittez XCode
  • Téléchargez une copie fraîche du certificat de provisionnement
  • Vérifiez la paire "aps-environnement" "production" dans le certificat avec un éditeur de texte
  • Démarrer XCode
  • Ajoutez un nouveau fichier de provisionnement en le faisant glisser jusqu'à l'icône du document XCode
  • Assurez-vous d'avoir réassigné / assigné le bon certificat dans les informations de la cible : Signature du code : Identité de signature du code
  • Vérifiez deux fois que les résultats de la construction pour voir s'ils utilisent le bon profil et sont correctement signés

Répétez ces étapes calmement jusqu'à ce que cela fonctionne, cela m'a pris environ cinq essais de diverses combinaisons. J'ai également basculé de Développement à Ad-hoc, ce qui apparemment n'est pas nécessaire mais a garanti un nouveau fichier de provisionnement mobile.

1 votes

Donc je n'avais pas besoin du fichier Entitlements.plist pour que cela fonctionne ... mais j'ai dû le refaire plusieurs fois. Principalement parce que l'ancien profil continuait à apparaître. Assurez-vous de le supprimer partout (projet et cible) et vérifiez régulièrement pour vous assurer qu'il a bien disparu !!.

0 votes

Comme vous l'avez dit, je ne suis pas sûr de la combinaison qui a fait que ça fonctionne, mais après des jours de recherche, votre message est le seul qui a résolu le problème pour moi. Merci un million de fois!

5voto

max ogden Points 510

En utilisant XCode4 et recevant le même message d'erreur "aucune chaîne 'aps-environment' de privilège valide trouvée pour l'application", j'ai dû faire ce qui suit :

  • Supprimer d'anciens profils de provisionnement des volets Bibliothèque et Appareil dans l'Organiseur
  • Générer un nouveau profil avec APN dev activé depuis le site web du portail des développeurs
  • S'assurer que le nouveau profil est ajouté aux volets Bibliothèque et Appareil dans l'Organiseur
  • Supprimer manuellement mon application de mon appareil (en maintenant jusqu'à ce qu'elle tremble et en appuyant sur X)
  • CMD+OPT+MAJ+K (Nettoyer le dossier de construction) et CMD+MAJ+K (Nettoyer)
  • Définir le bon profil sous Projet > Paramètres de compilation > Signature du code
  • S'assurer que 'Utiliser les privilèges' n'est pas coché sous Cibles > Résumé

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X