Comment réparer "pas valide 'string d'autorisation' aps-environment 'trouvé pour l'application" dans Xcode 4.3?

J'ai essayé très très dur de créer une application iOS simple et simple qui peut recevoir des notifications push. Ma seule raison de le faire est d'établir une procédure à utiliser par d'autres membres de l'équipe, et je n'ai pas réussi à find une version à jour de ces instructions ailleurs sur le web. Notre boutique est relativement nouvelle pour iOS dev, je suis personnellement totalement inexpérimenté avec iOS dev et Xcode. Je suis tombé sur des dizaines de tutoriels, d'articles et de messages d'Apple et d'ailleurs, et j'ai l'printing que je serai bientôt là …

Voici où je dois (notez que j'utilise Xcode 4.3 et que j'essaye initialement de déployer uniquement vers iOS 5.1, et je suppose que certaines choses ont pu changer récemment par rapport aux versions précédentes de Xcode, mais encore une fois je suis nouveau à tous ceci – et le find complètement confus et alambiqué):

1) J'ai un profil d'approvisionnement sur mon iPhone qui a Push activé

2) Dans mon projet de test Xcode, ce profil d'approvisionnement est sélectionné comme identité de signature (dans Paramètres de construction> Signature de code)

entrez la description de l'image ici

3) J'ai mon identifiant de bundle sous Résumé et Infos> properties de la cible iOS personnalisée correctement définies * (Je pense ??)

4) J'ai registerForRemoteNotificationTypes appelé dans didFinishLaunchingWithOptions de mon délégué

5) J'ai didRegisterForRemoteNotificationsWithDeviceToken et didFailToRegisterForRemoteNotificationsWithError dans mon délégué, configuré pour save le jeton de périphérique ou l'erreur respectivement

6) J'ai Activer les droits cochez sous Résumé.

7) Juste en dessous que le file des droits sélectionné est Tinker6 (le nom de mon projet de test), qui a été généré automatiquement lorsque j'ai coché Activer les droits

8) Dans le file Tinker6.entitlements j'ai ce qui suit (que j'ai compris est correct sur la base de plusieurs messages différents sur le web, mais que je ne trouve rien de définitif d'Apple lui-même sur):

entrez la description de l'image ici

Actualisé

9) En outre, j'ai essayé le tout sans un file de droits, et get essentiellement le même résultat.

10) Le contenu de mon file mobileprovision inclut correctement les droits (j'ai brouillé le numéro et le domaine mais structurellement le même):

<key>application-identifier</key> <ssortingng>12355456A7.com.whatever.tinker</ssortingng> <key>aps-environment</key> <ssortingng>development</ssortingng> <key>get-task-allow</key> <true/> <key>keychain-access-groups</key> <array> <ssortingng>12355456A7.*</ssortingng> </array> 

/ fin mise à jour

Lorsque je tente d'exécuter ceci sur mon périphérique, j'obtiens l'erreur suivante dans la sortie Xcode:

 2012-06-11 12:45:23.762 Tinker6[13332:707] Failed to get token, error: Error Domain=NSCocoaErrorDomain Code=3000 "no valid 'aps-environment' entitlement ssortingng found for application" UserInfo=0x24a3b0 {NSLocalizedDescription=no valid 'aps-environment' entitlement ssortingng found for application} 

J'ai essayé de définir get-task-allow à NO, aps-environment à la production, les quatre combinaisons possibles, la même chose.

Comment puis-je surmonter cela? Où est la documentation définitive à ce sujet?

plus de fond suit

* En ce qui concerne l'identifiant de l'set, je ne suis toujours pas clair sur la façon dont cela devrait être défini par rapport aux identifiants d'application et aux identifiants de profil dans le profil d'approvisionnement. Dans le portail Provisioning sous App Ids j'ai ceci (encore une fois, brouillé le nombre et le domaine):

entrez la description de l'image ici

Et l'id de faisceau de deux places est fixé J'ai ceci:

entrez la description de l'image icientrez la description de l'image ici

Je ne suis pas du tout sûr que ce soit correct ou si l'un ou les deux devraient être réglés sur 12355456A7.com.whatever.tinker, bien que j'ai essayé ceux-ci plus tôt dans le process sans succès …

Remarque: Je me rends count qu'il existe de nombreux articles avec des titres similaires, mais ils semblent tous être périmés sur la base des noms de files et ainsi de suite, et le fait qu'aucune des solutions ne semble être utile. J'espère que le plus grand niveau de détail que je vais donner vaudra une réponse de qualité. Je vais probablement atsortingbuer une prime dès que possible et si vous donnez une réponse de haute qualité qui mène à une solution, je vais vous atsortingbuer la prime ainsi que promouvoir votre réponse via Twitter et mon blog. Surtout si vous affichez un très bon «voici les 500 étapes exactes dont vous avez besoin pour get une application de notification push simple, y compris le provisionnement et tout autre article» sur votre blog ou autre.

Si vous avez créé votre profil d'approvisionnement avant de configurer l' app ID pour push, essayez de régénérer le profil d'approvisionnement.

iOS Provisioning Portal -> Provisioning -> Votre cert -> EDIT -> Faire un edit -> Télécharger le nouveau provisioning

A travaillé pour moi. Maintenant, je suis capable d'utiliser push.

Tout d'abord, vous n'avez pas besoin du file de droits d'access, sauf si vous ajoutez des paires key / valeur personnalisées qui n'existent pas dans le profil d'approvisionnement. Lorsque votre application est créée, tous les droits du profil d'approvisionnement seront copiés dans l'application.

Étant donné que vous voyez toujours un message d'erreur sur les droits manquants, je ne peux que supposer que les options de signature de code ne sont pas correctes dans les parameters de construction.

Vous devez vous assurer que le profil correct est sélectionné pour la configuration "Debug", et pour être sûr, que vous avez sélectionné le bon profil pour le "Débogage" et le nœud enfant étiqueté "Any iOS SDK":

entrez la description de l'image ici

Bien que cette capture d'écran montre le profil "Développeur automatique" sélectionné, choisissez le profil d'approvisionnement exact que vous souhaitez dans la list déroulante, uniquement à des fins de test. Il se peut que Xcode choisisse automatiquement un profil différent de celui que vous voulez.

Assurez-vous également de faire une construction propre, supprimez complètement l'application de votre appareil, etc. Ceci est juste pour s'assurer que vous n'avez pas de vieux peluches qui traînent.

J'ai rencontré ce problème dans Xcode 8. Vous devez activer Target-> capabilities-> push notification. Vérifiez la capture d'écran.

entrez la description de l'image ici

Le plus simple est de le faire depuis vos counts avec Xcode:

Tête sur Xcode -> Preferences -> Choisir l'onglet Comptes -> Voir les détails -> Hit button d'actualisation en bas à gauche -> Terminé.

Construire à nouveau et cela devrait fonctionner.

Ok, j'ai fait face au problème avant. Puisque la notification push nécessite une implémentation côté server, pour moi, recréer le profil n'était pas une option. J'ai donc trouvé cette solution SANS créer un nouveau profil de provisioning.

Xcode ne sélectionne pas correctement le profil d'approvisionnement correct, bien que nous le sélectionnions correctement.

D'abord aller à l'organisateur. Dans l'onglet Périphériques, profil Provisioning de la list Bibliothèque, select le profil que nous essayons d'utiliser. Faites un clic droit dessus puis "Afficher le profil dans le Finder".

entrez la description de l'image ici

Le profil correct sera sélectionné dans la window ouverte du Finder. Notez le nom.

entrez la description de l'image ici

Maintenant, allez dans Xcode> Log Navigator. Sélectionnez le filter pour "Tous" et "Tous les messages". Maintenant dans la dernière phase (Build Target) searchz l'étape appelée "ProcessProductPackaging" développez-la. Notez le nom du profil d'approvisionnement. Ils ne devraient pas correspondre si vous rencontrez l'erreur. entrez la description de l'image ici

Maintenant, dans la window Opened Finder, supprimez le profil d'approvisionnement malveillant utilisé par Xcode. Maintenant construisez à nouveau. L'erreur devrait être résolue. Si ce n'est pas le cas, répétez le process pour find un autre profil voyou pour le supprimer.

J'espère que cela t'aides.

La réponse a été: recommencer, faire tout pareil mais créer un nouveau profil d'approvisionnement, et l'installer. Ça a marché. Inspecter tous les détails (droits dans la fourniture mobile) ressemble exactement à tout dans ma question ici. Mais maintenant ça marche. Apple: WAT?

Bien sûr, il aurait été évident de le faire s'il était possible de supprimer les profils de provisionnement. Mais puisque ce n'est pas possible, je ne voulais pas encombrer notre équipe avec un tas de profils de test. Pourtant, finalement perdu patience et essayé de toute façon, et il a fini par travailler. Whatevs.

Supprimez l'ancien profil de configuration de XCode dans Organizer.

Ensuite, générez un nouveau profil d'approvisionnement pour le même ID d'set dans le portail d'approvisionnement iOS (après avoir activé l'option Push).

Importez le nouveau profil d'approvisionnement dans XCode, définissez-le dans les parameters de construction de votre application.

Construire, courir, ça marche.

Je viens de le faire.

Il m'a fallu 10 minutes d'erreur pour réussir.

XCode 6.1.1 et plusieurs counts de développeur Apple

Une autre réponse à ce mélange déjà assez complet: Je suis revenu sur ce problème aujourd'hui, et cette fois, c'était parce que j'avais plusieurs counts Apple. Je devais d'abord append le deuxième count de développeur dans XCode> Preferences> Comptes> +

Assurez-vous que la capacité de notification push est activée

Ensuite, je devais effectivement activer explicitement In-App Purchase dans l'application (je n'avais pas besoin de le faire précédemment). XCode> (la window de l'application)> Cibles> Capacités> Achat In-App ON (et à ce stade, j'ai eu la possibilité de choisir le bon certificate)

Notez que j'avais déjà ajouté le certificate Push activé en double-cliquant dessus dans le Finder.

entrez la description de l'image ici

(Xcode 5) Eh bien, après avoir passé une heure j'ai résolu mon problème. Même si vous générez de nouveau le file d'approvisionnement dans Xcode 5, vous devez mettre à jour votre count manuellement. J'ai seulement changé le file de provisioning dans l'onglet Organisateur qui n'a pas fonctionné, Xcode a continué à build avec l'ancien file de provisioning.

Alors allez à

Xcode> Preferences> Comptes> Afficher les détails (Sélectionnez votre count)

Ensuite, actualisez vos files de provisioning.

Mon problème était simplement que je signais avec le profil de provisionnement générique géré par Xcode.

Après avoir créé un profil spécifique à une application (et l'avoir téléchargé, puis cliqué deux fois dessus et vérifié que mes parameters de construction s'y rapportaient), j'ai reçu avec succès un jeton d'appareil APNS.

J'ai eu le même problème était tout le monde et essayé tous les trucs ci-dessus, rien n'a fonctionné. J'ai même supprimé et commencé frais avec un autre count de développeur.

Ce qui a fonctionné pour moi à la fin était

  1. Faites comme suggéré ci-dessus et créez l'ID APP
  2. Ensuite, créez un profil d'approvisionnement
  3. N'utilisez PAS le profil générique de l'équipe (géré par xcode one) dans la section de développement de l'approvisionnement. Vous devez en créer un distinct en utilisant l'identifiant d'application pour lequel vous avez activé la notification push. De cette façon, lorsque vous le développez, la fonction de notification push sera embeddede.

Je ne sais pas si vous pouvez activer cela pour une application générique, mais après avoir essayé au less 12 suggestions différentes et perdre quelques jours, j'espère que cela aidera quelqu'un

Vous mentionnez un profil d'approvisionnement, mais je ne vois aucune mention d'un profil Apple Push.

Pour utiliser Push, vous devez avoir un profil push (il y en a deux, un pour le développement et un pour la version). Après l'avoir créé, vous devez vous assurer qu'il contient les certificates appropriés (voir la section EDITER ci-dessous).

Ceci est un excellent tutoriel qui vous guidera à travers toutes les étapes:

http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12

Il me faudrait, ou quelqu'un d'autre, des heures et des heures pour écrire une réponse détaillée détaillée comme ce tutoriel, donc je ne vais pas essayer de prétendre à la prime quand ce tutoriel existe déjà.

PS Je crois que vous n'avez plus besoin de droits, c'est un inheritance.

EDIT: Vous devez également vérifier que vous avez les profils nécessaires sur l'appareil – allez dans les parameters, puis général, profils, vérifiez vos profils sont répertoriés, en particulier le profil push bien sûr. Vous pouvez également vérifier cela dans la section Organisateur de XCode. Dans Organizer, deux sections indiquent Provision Profiles: l'une en haut à gauche dans Library (il s'agit des profils en XCode que vous utilisez pour signer, etc.). Vous verrez également une section intitulée Provisioning Profiles pour le périphérique connecté, est le profil qui est installé sur le combiné. Si vous ne les avez pas installés sur le téléphone, vous pouvez les download à partir du site Web du portail d'approvisionnement, puis cliquer sur le button Ajouter en bas de la window de l'organisateur.

Dans le portail d'approvisionnement, vous devez également vérifier que le profil Apple Push inclut les certificates: – click Provisioning dans le menu de gauche – vous verrez une list de votre profil, select EDIT le profil push Apple – vous verrez une section de certificates, avec une list de développeurs ou de testeurs etc. que vous avez dans votre projet, assurez-vous que la checkbox est cochée pour eux. – vous verrez également une section de périphériques, assurez-vous que l'appareil que vous testez a été ajouté.

Si vous avez des anciens profils dans XCode ou sur l'appareil, supprimez-les et téléchargez / actualisez / installez tous les nouveaux profils depuis le portail d'approvisionnement

Ran dans ce même problème moi-même. Pour moi, le problème était que mon nom de produit ($ TARGET_NAME) n'était pas capitalisé de la même manière que celui présenté dans le certificate fourni par Apple. Par exemple, j'ai eu com.companyid.APNDemo alors que le cert Apple utilisait com.companyid.apndemo.

J'ai changé ma cible pour qu'elle soit en minuscule et ça a marché. Note: L'indice pour moi était le paramètre de codesigning dans les parameters de construction a été défini sur mon certificate de développeur par défaut; pas le profil d'approvisionnement APNTest.

Beaucoup des réponses ci-dessus sont correctes. Cependant, il semble y avoir plus d'une erreur possible en traitant de ceci.

Celui que j'ai eu était un problème de capitalisation avec mon ID d'application. Mon identifiant d'application pour une raison quelconque n'a pas été activé, mais mon application l'était. Une fois que j'ai recréé l'identifiant de l'application avec une majuscule correcte, tout a fonctionné correctement. J'espère que cela t'aides. Frustrant comme l'enfer cependant.

PS si cela ne fonctionne toujours pas, essayez de modifier le champ d'identification de signature de code manuellement avec "modifier". Modifiez la deuxième ligne avec le nom du nom de profil d'approvisionnement approprié.

Il m'a fallu des heures pour le résoudre. Étant donné que quelqu'un utilise des scripts personnalisés pour signer et emballer alors que d'autres utilisent xcode lui-même, il n'y a qu'une seule façon de vérifier ce qui s'est terminé dans votre application. Vider vos droits avec

codesign --display --entitlements :- path/to/MyApp.app

et vérifiez aps-environment et application-identifier .

Cette erreur peut se produire lorsque votre certificate a expiré.

La solution est de renouveler le certificate et de signer l'application avec.

Vous devez vous assurer que vous avez dans vos profils de configuration ( https://developer.apple.com/account/ios/profile/ ) un profil de dissortingbution iOS.

Lorsque vous téléchargez depuis xCode vers l'App Store, assurez-vous d'avoir l'environnement aps dans les droits. Sinon, téléchargez-les depuis Afficher les counts -> Afficher les détails -> Télécharger tout.

J'ai eu un problème similaire. J'ai rebondi entre XCode 7 et 8 pour une variété de raisons. Une fois que vous utilisez 8 pour build, vous devrez utiliser 8. J'ai simplement utilisé Xcode 8 et appliqué certaines des modifications suggérées ci-dessus et cela a fonctionné.

recréer des files provisoires a résolu tous mes problèmes.

Il semble y avoir quelque chose de bizarre avec les droits «automatiques» dans Xcode 4.6.

Il y a un file Entitlement.plist pour chaque SDK à:

 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/Entitlements.plist 

Une solution de contournement que je suis venu avec était de modifier ce file et append manuellement la key sps-environnement sournoise comme suit:

 <?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>application-identifier</key> <ssortingng>$(AppIdentifierPrefix)$(CFBundleIdentifier)</ssortingng> <key>aps-environment</key> <ssortingng>development</ssortingng> <key>keychain-access-groups</key> <array> <ssortingng>$(AppIdentifierPrefix)$(CFBundleIdentifier)</ssortingng> </array> </dict> </plist> 

Ensuite, Xcode génère le file Xcent correct, qui contient la key aps-environment à:

 /Users/mySelf/Library/Developer/Xcode/DerivedData/myApp-buauvgusocvjyjcwdtpewdzycfmc/Build/Intermediates/myApp.build/Debug-iphoneos/myApp.build/myApp.xcent 

Vous pouvez localiser où votre file Xcent est créé en utilisant Log Navigator de Xcode,
Recherchez "ProcessProductPackaging".

Malheureusement, c'est la seule façon de résoudre le problème .
(et enfin capable d'get un jeton push maintenant)

Je me demandais si une autre solution plus élégante est disponible.
S'il vous plaît voir ma question SO pour plus de détails à ce sujet:
Le droit automatique Xcode 4.6 ne fonctionne pas – "no aps-environment valide"

Avant de supprimer et de régénérer des AppIDs / Profils, assurez-vous que votre bibliothèque et votre périphérique ont les mêmes profils (et corrects) installés.

J'ai commencé à voir cette erreur après la migration vers un nouvel ordinateur. Push avait fonctionné correctement avant la migration.

Le problème était (duh) que je n'avais pas importé les profils à la bibliothèque Xcode sur la nouvelle machine (dans Organizer / Devices sous Library-> Provisioning Profiles).

La partie confuse était que le DEVICE avait déjà les bons profils et ils se présentaient comme prévu dans les parameters de construction, donc tout semblait correct là, mais la bibliothèque XCode ne les avait pas, donc il signait l'application avec … ?? ?

C'est ce qui m'a arrangé. (J'avais déjà essayé d'activer / désactiver les fonctionnalités, recréer le profil d'approvisionnement, etc.).

Dans l'onglet Paramètres de construction , dans Code Signing Entitlements , mon file .entitlements n'était pas un lien pour toutes les sections. Une fois que je l'ai ajouté à la section Any SDK , l'erreur a été résolue.

entrez la description de l'image ici

J'ai essayé toutes les réponses énumérées ici mais personne n'a résolu mon problème. Dans mon cas, cette erreur est due à mon erreur stupide dans la création d'Appid. J'ai utilisé l' ID d'application générique au lieu d'utiliser l' ID d'application explicite

Si vous souhaitez qu'une application reçoive des notifications à distance (notification push), vous devez utiliser un ID d'application explicite , tel que com.tutsplus.push , au lieu de com.tutsplus. *

S'il vous plaît find le ScreenShot, entrez la description de l'image ici