Comment réparer «aucune chaîne de droit d'accès 'aps-environnement' valide trouvée pour l'application» dans Xcode 4.3?

153

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 faire cela est d'établir une procédure à utiliser par certains autres membres de l'équipe, et je n'ai pas été en mesure de trouver une version à jour et fonctionnelle de ces instructions ailleurs sur le Web. Notre boutique est assez nouvelle pour les développeurs iOS, je suis personnellement totalement inexpérimenté avec les développeurs iOS et Xcode. Je suis tombé sur des dizaines de tutoriels, d'articles et de messages de problèmes d'Apple et d'ailleurs et j'ai l'impression d'être presque là ...

Voici où je dois (notez que j'utilise Xcode 4.3 et que j'essaie initialement de déployer uniquement sur iOS 5.1, et je suppose que certaines choses peuvent avoir changé récemment par rapport aux versions antérieures de Xcode, mais encore une fois, je suis nouveau pour tous ceci - et le trouvant complètement déroutant et alambiqué):

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

2) Dans mon projet Xcode de test, 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 informations> Propriétés de la cible iOS personnalisée correctement définies * (je pense ??)

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

5) J'ai didRegisterForRemoteNotificationsWithDeviceToken et didFailToRegisterForRemoteNotificationsWithError dans mon délégué, configuré pour enregistrer respectivement le jeton de l'appareil ou l'erreur

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

7) Juste en dessous, le fichier de 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 fichier Tinker6.

entrez la description de l'image ici

Actualisé

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

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

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

/ terminer la mise à jour

Lorsque j'essaye de l'exécuter sur mon appareil, 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 string found for application" UserInfo=0x24a3b0 
{NSLocalizedDescription=no valid 'aps-environment' entitlement string 
found for application}

J'ai essayé de régler get-task-allow sur NO, aps-environment sur production, les quatre combinaisons possibles, même chose.

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

- un autre contexte suit -

* En ce qui concerne l'identifiant du bundle, je ne sais toujours pas comment cela doit être défini par rapport aux identifiants d'application et aux identifiants de profil dans le profil d'approvisionnement. Dans le portail de provisioning sous App Ids, j'ai ceci (encore une fois, j'ai brouillé le numéro et le domaine):

entrez la description de l'image ici

Et l'ID de paquet à deux endroits est défini, j'ai ceci:

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

Je ne suis pas du tout sûr que ceux-ci soient corrects ou si l'un ou les deux devraient être définis sur 12355456A7.com.whatever.tinker, bien que j'aie essayé ceux-ci plus tôt dans le processus sans succès ...

Remarque je me rends compte qu'il existe de nombreux articles avec des titres similaires, mais ils semblent tous obsolètes en fonction des noms de fichiers et ainsi de suite donnés, et du fait qu'aucune des solutions ne semble utile. J'espère que le plus grand niveau de détail que j'ai donné justifiera une réponse de qualité. Je vais probablement attribuer une prime dès que possible et si vous donnez une réponse de haute qualité qui mène à une solution, je vous attribuerai la prime ainsi que la promotion de votre réponse via Twitter et mon blog. Surtout si vous publiez un très bon article "voici les 500 étapes exactes dont vous avez besoin pour faire fonctionner une application de notification push simple, y compris l'approvisionnement et tout autre article" sur votre blog ou autre.

jwl
la source

Réponses:

94

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

Portail de provisionnement iOS -> Provisioning -> Votre certificat -> EDIT -> Effectuer une modification -> Télécharger un nouveau provisionnement

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

elp
la source
pouvez-vous être plus explicite sur ce qu'implique exactement «régénérer le profil d'approvisionnement»? Est-ce une étape dans XCode, dans le portail de provisioning, où? Merci!
jwl
2
Dans le portail. Ajoutez ou supprimez simplement un appareil et votre provisioning sera généré. Après cela, double-cliquez et installez dans votre trousseau.
elp
désolé si je suis dense, mais l'ajouter / le supprimer sous Appareils? Ou quelque part sous le profil de provisionnement réel en question, et si oui, où exactement?
jwl
L'ajout ou la suppression d'appareils est une astuce pour régénérer votre provisioning. Vous devez en régénérer un pour utiliser la notification push, car il est lié à l'identifiant de l'application et au certificat push ..
elp
69

Tout d'abord, vous n'avez pas besoin du fichier de droits, sauf si vous ajoutez des paires clé / 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 concernant les droits manquants, je ne peux que supposer que les options de signature de code ne sont pas correctes dans les paramètres de construction.

Vous devez vous assurer que le profil correct est sélectionné pour la configuration "Déboguer" et, pour être sûr, que vous avez sélectionné le profil correct pour le "Debug" et le nœud enfant intitulé "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 liste déroulante, uniquement à des fins de test. Il se peut que Xcode choisisse automatiquement un profil différent de celui que vous souhaitez.

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

Mike Weller
la source
Par n ° 2 dans mon message, il est correctement défini, je pense, même si j'ai ajouté une capture d'écran de clarification pour vérifier. J'ai également essayé de supprimer complètement l'application et de la laisser éteinte pendant 2 jours par une recommandation que j'ai vue quelque part qu'il faut un jour pour que certaines informations soient réinitialisées (oui, je saisis des pailles!?). Mais quand vous dites "Vous devez vous assurer que le bon profil est sélectionné pour la configuration" Déboguer "", que voulez-vous dire exactement - où dois-je le sélectionner?
jwl
Si vous cliquez sur la partie "iPhone Developer", ou sur ce qui est défini comme valeur actuelle, vous verrez une liste déroulante de tous les profils de provisioning que Xcode connaît. Assurez-vous que le bon est sélectionné ou que l'élément "Développeur automatique" choisit le bon. La liste déroulante devrait tout vous montrer.
Mike Weller le
Et êtes-vous sûr de disposer du dernier profil d'approvisionnement? Se pourrait-il que vous ayez une ancienne version, antérieure à l'activation du push?
Mike Weller
2
Eh bien, oui je le crois. Ce que j'ai fait pour obtenir le nouveau profil d'approvisionnement est, dans Xcode Organizer, de supprimer le profil à la fois de la bibliothèque et de l'appareil, puis de nouveau sur l'écran de la bibliothèque, j'ai cliqué sur Actualiser. Cela l'a retiré du portail d'approvisionnement. J'ai ensuite ajouté ceci à l'appareil. Et comme indiqué ci-dessus, le contenu XML ish du fichier mobileprovision affiche les droits appropriés
jwl
3
Ach, désolé. Il doit y avoir un -avant le chemin: codesign -d --entitlements - /path/to/my.app. Cela vaut également la peine à ce stade de vérifier que vous vous trouvez dans le répertoire Debug-iphoneos, car "Show In Finder" peut parfois vous amener au mauvais endroit.
Mike Weller
64

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

entrez la description de l'image ici

DipakSonara
la source
1
Cela m'aide !!!! Cliquez simplement sur un bouton ... résoudre mon problème que je débogue pendant des heures ... Xcode8 aussi.
Veck Hsiao
3
Merci OMG! Allez Apple, donnez-nous un message d'erreur plus raisonnable!
Ferran Maylinch
Xcode 8 a désactivé les notifications push pour mon application, donc cette solution a fonctionné.
Kevin
1
Merci, j'ai dû faire les autres étapes de configuration 3 fois avant de trouver cela. Je me sens idiot, mais aussi que les outils sont mauvais pour permettre que ce soit le problème.
Collin Flynn
tu as sauvé ma journée, mon pote!
oskarko
47

Le moyen le plus simple est de le faire à partir de vos comptes avec Xcode:

Rendez-vous sur Xcode -> Préférences -> Choisissez l'onglet Comptes -> Afficher les détails -> Appuyez sur le bouton d'actualisation en bas à gauche -> Terminé.

Construisez à nouveau et cela devrait fonctionner.

ooxio
la source
19

Ok, j'ai fait face au problème avant. Étant donné que la notification push nécessite une implémentation côté serveur, pour moi, recréer le profil n'était pas une option. J'ai donc trouvé cette solution SANS créer de nouveau profil d'approvisionnement.

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

Allez d'abord à l'organisateur. Dans l'onglet Appareils, Profil de provisionnement de la liste Bibliothèque, sélectionnez le profil souhaité que nous essayons d'utiliser. Faites un clic droit dessus puis "Révéler le profil dans le Finder".

entrez la description de l'image ici

Le profil correct sera sélectionné dans la fenêtre Finder ouverte. Notez le nom.

entrez la description de l'image ici

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

Maintenant, dans la fenêtre Opened Finder, supprimez le profil de provisioning non autorisé que Xcode utilise. Maintenant reconstruisez. L'erreur doit être résolue. Sinon, répétez le processus pour trouver un autre profil non autorisé pour le supprimer.

J'espère que cela t'aides.

Max
la source
C'était ma faute mais je l'ai corrigé en utilisant cette méthode. J'avais accidentellement mis dans la boîte d'information un identifiant différent de celui avec lequel j'ai généré le certificat.
JavaCoderEx
18

La réponse était: recommencez, faites tout de même, mais créez un nouveau profil d'approvisionnement et installez-le. Ça a marché. L'inspection de tous les détails (droits dans la fourniture mobile) ressemble exactement à tout ce qui est dans ma question ici. Mais maintenant ça marche. Apple: WAT?

Bien sûr, cela aurait été évident de le faire s'il était possible de supprimer des profils de provisioning. Mais comme ce n'est pas possible, je ne voulais pas encombrer notre équipe avec un tas de profils de test. Pourtant, j'ai finalement perdu patience et essayé quand même, et cela a fini par fonctionner. Whatevs.

jwl
la source
Créer un nouveau profil et "salir" l'ancien comme il est dit dans cette autre question SO a fonctionné pour moi: stackoverflow.com/questions/5681172/…
scurioni
Tout ce que j'avais à faire était de supprimer le profil d'approvisionnement existant du portail et de le recréer. Vous pouvez supprimer les profils maintenant après la mise à jour, donc pas besoin de créer un nouvel identifiant d'application.
odyth
Un nouveau profil d'approvisionnement avec le même identifiant d'application et le même certificat de distribution a résolu le problème pour moi. +1 :)
Azik Abdullah
18

Supprimez l'ancien profil d'approvisionnement de XCode dans l'Organisateur.

Ensuite, générez un nouveau profil de provisionnement pour le même ID de bundle dans le portail de provisionnement iOS (après avoir activé le push).

Importez le nouveau profil d'approvisionnement dans XCode, définissez-le dans les paramètres de création de votre application.

Construisez, exécutez, ça marche.

Je viens de le faire.

Il m'a fallu 10 minutes entre l'erreur et le succès.

user1006117
la source
C'est celui qui a fonctionné pour moi aussi. La modification de l'ancien profil d'approvisionnement et le téléchargement n'ont pas fonctionné pour moi. Merci!
prageeth
En guise d'addendum utile, plutôt que d'obtenir un nouveau profil d'approvisionnement, j'ai simplement pu supprimer l'ancien
ritmatter
1
Je recommande vivement de ne pas le faire à la main. Utilisez github.com/fastlane/PEM .
fatuhoku
16

XCode 6.1.1 et plusieurs comptes de développeur Apple

Une autre réponse à ce mix déjà assez complet: je suis tombé à nouveau sur ce problème aujourd'hui, et cette fois, c'était dû au fait que j'avais plusieurs comptes Apple. J'avais besoin d'ajouter d'abord le 2ème compte développeur dans XCode> Préférences> Comptes> +

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

Ensuite, je devais activer explicitement l'achat intégré dans l'application (je n'avais pas besoin de le faire auparavant). XCode> (la fenêtre de l'application)> Cibles> Capacités> Achat In-App ACTIVÉ (et à ce stade, j'ai eu la possibilité de choisir le bon certificat)

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

entrez la description de l'image ici

kris
la source
J'étais en train de me creuser la tête, je suppose que lorsque je suis passé à la version bêta de Xcode 8, cela a désactivé mon commutateur de notifications push ou quelque chose du genre. Merci
inVINCEable
Merci, c'est pourquoi j'ai eu ce problème. Mon identifiant d'application est activé pour l'achat intégré, le centre de jeu, etc., mais dans Xcode / capacités, ils sont tous désactivés auparavant, pas de problème. Depuis la mise à jour vers Xcode 8, j'ai ce problème. Après avoir activé IAP et Game Center dans Xcode, le problème est résolu!
Ethan Long
11

(Xcode 5) Eh bien, après avoir passé une heure, j'ai résolu mon problème. Même si vous recréez le fichier d'approvisionnement dans Xcode 5, vous devez mettre à jour manuellement votre compte. J'ai seulement changé le fichier d'approvisionnement dans l'onglet Organisateur qui ne fonctionnait pas, Xcode a continué à construire avec l'ancien fichier d'approvisionnement.

Alors allez à

Xcode> Préférences> Comptes> Afficher les détails (sélectionnez votre compte)

Actualisez ensuite vos fichiers d'approvisionnement.

Ömer Faruk Almalı
la source
7

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 à l'application (et l'avoir téléchargé, double-cliqué dessus et vérifié que mes paramètres de construction y faisaient référence), j'ai reçu avec succès un jeton d'appareil APNS.

Avantages Graham
la source
J'ai eu ce problème aussi. Xcode 5 est assez bon pour mettre à jour tous les profils d'approvisionnement. J'ai ajouté le service APNS plus tard dans le développement. Vous devez vous assurer, comme le souligne l'affiche ci-dessus, que votre profil d'approvisionnement est en fait le profil unique de l'application sur laquelle vous travaillez et non un profil générique.
Michael
@Michael, comment vous en assurez-vous? J'ai essayé de le changer dans mes paramètres de construction (sous Signature du code), qui est actuellement défini sur aucun. Lorsque je choisis le profil et la construction corrects, une erreur s'affiche, puis revient au profil d'approvisionnement générique.
Ian Jamieson le
@ian quelle erreur obtenez-vous? Êtes-vous sûr qu'il s'agit d'un profil valide?
Michael
Ah, je l'ai trié, j'avais besoin de re-télécharger le bon certificat sur mon Mac. Cela semble avoir fait l'affaire. Merci.
Ian Jamieson
Heureux de l'entendre. C'est ce que je fais habituellement quand il semble que les paramètres sont corrects. Refaites tous les certificats. Semble être le problème plus souvent qu'autrement.
Michael
6

J'ai eu le même problème que tout le monde et j'ai essayé toutes les astuces ci-dessus, rien n'a fonctionné. J'ai même supprimé et recommencé avec un autre compte de développeur.

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

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

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

Michael Ellams
la source
2
Mais cela n'ajoute rien aux réponses existantes, qui donnent déjà ce conseil. De toute évidence, une application push a besoin de son propre profil; les documents indiquent clairement que le profil générique ne peut être utilisé pour aucune application nécessitant des droits spéciaux.
mat du
1
J'ai fait cela, mais mon application ne sélectionnera jamais que le profil d'approvisionnement générique, je ne peux pas le forcer à sélectionner celui avec les notifications push activées.
Ian Jamieson le
3

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 publication). Après l'avoir créé, vous devrez vous assurer qu'il contient les certificats appropriés (voir la section MODIFIER ci-dessous).

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

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

Cela me prendrait, ou à quiconque, des heures et des heures pour écrire une réponse détaillée et approfondie comme ce tutoriel, donc je ne vais pas tenter de le faire, ni revendiquer la prime lorsque ce tutoriel existe déjà.

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

EDIT: Vous devez également vérifier que vous avez les profils nécessaires sur l'appareil - allez dans les paramètres, puis général, profils, vérifiez que 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 l'Organisateur, il y a deux sections qui disent Provision Profiles - une en haut à gauche dans Library (il s'agit des profils dans XCode que vous utilisez pour signer, etc.) Vous verrez également une section Appeler Provisioning Profiles pour l'appareil connecté, ceci est le profil installé sur le combiné. Si vous ne les avez pas installés sur le combiné, vous pouvez les télécharger à partir du site Web du portail d'approvisionnement, puis cliquez sur le bouton Ajouter en bas de la fenêtre de l'organisateur.

Dans le portail d'approvisionnement, vous devez également vérifier que le profil Apple Push comprend les certificats: - cliquez sur Provisioning dans le menu de gauche - vous verrez une liste de votre profil, sélectionnez pour MODIFIER le profil push Apple - vous verrez une section de certificats, avec une liste de développeurs ou de testeurs, etc. que vous avez dans votre projet, assurez-vous que la case est cochée pour eux. - vous verrez également une section sur les appareils, assurez-vous que l'appareil sur lequel vous testez a été ajouté.

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

Gruntcakes
la source
Si les droits sont hérités, pourquoi est-ce que je reçois un message me plaignant de l'absence de droits? J'ai déjà suivi le tutoriel lié à la lettre sans chance ... merci cependant.
jwl
De plus, j'ai ajouté des informations sur le fichier mobileprovision qui pourraient être utiles.
jwl
c'est vrai, je ne configure même aucun .entitlements pour pousser les notifications avec succès. Une chose qui m'a trébuché quand je le faisais était que je devais télécharger la provision mobile manuellement, puis aller aux paramètres de construction et changer l'identité de signature pour qu'elle corresponde à celle qui vient de télécharger, dans mon cas, apparemment Xcode choisit la provision mobile joker.
X Slash
J'ai aussi reçu un message d'erreur sur les droits il y a quelque temps, c'est un hareng rouge, voir la réponse de Mike Wellers, c'est ce que j'ai fait dans mon cas.
Gruntcakes
J'ai mis à jour la réponse avec d'autres éléments à vérifier.
Gruntcakes
2

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

J'ai changé ma cible en minuscules et cela a fonctionné. Remarque: L'indice pour moi était que le paramètre de signature de code dans les paramètres de construction était défini sur mon certificat de développeur par défaut; pas le profil d'approvisionnement APNTest.

David Carrico
la source
1

Un grand nombre des réponses ci-dessus sont correctes. Cependant, il semble y avoir plus d'une erreur possible en traitant cela.

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

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

matrinox
la source
1

Il m'a fallu des heures pour le résoudre. Étant donné que quelqu'un utilise des scripts personnalisés pour signer et emballer tandis 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-environmentet application-identifier.

dwery
la source
J'ai été confronté au même problème. Je voulais juste demander, est-ce que le chemin vers l'application est pour l'application installée sur le simulateur?
Ajeet le
non, c'est le chemin de l'application compilée pour le périphérique réel, dans le répertoire de construction xcode.
Dwery
1

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

La solution consiste à renouveler le certificat et à signer l'application avec lui.

vahotm
la source
1

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

Lorsque vous téléchargez depuis xCode vers l'App Store, assurez-vous que l'environnement aps figure dans les droits. Sinon, téléchargez-les depuis Afficher les comptes -> Afficher les détails -> Tout télécharger.

Nadav B
la source
1

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

Brent Brookler
la source
1

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

Faris Muhammed
la source
0

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

Il existe un fichier Entitlement.plist pour chaque SDK à l'adresse:

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

Une solution de contournement que j'ai trouvée consistait à modifier ce fichier et à ajouter manuellement la clé sournoise aps-environment 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>
    <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
    <key>aps-environment</key>
    <string>development</string>
    <key>keychain-access-groups</key>
    <array>
        <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
    </array>
</dict>
</plist>

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

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

Vous pouvez localiser l'emplacement de création de votre fichier Xcent à l'aide du navigateur
de journaux Xcode, recherchez «ProcessProductPackaging».

Malheureusement, c'est le seul moyen que j'ai trouvé pour résoudre le problème .
(et enfin capable d'obtenir correctement le jeton push maintenant)

Je me demande simplement si une autre solution plus élégante est disponible.
Veuillez consulter ma question SO pour plus de détails à ce sujet:
l'autorisation automatique Xcode 4.6 ne fonctionne pas - "aucun environnement aps valide"

AmitP
la source
0

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

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

Le problème était (duh) que je n'avais pas importé les profils dans la bibliothèque Xcode sur la nouvelle machine (dans Organisateur / Périphériques sous Bibliothèque-> Profils d'approvisionnement).

La partie déroutante était que l'APPAREIL avait déjà les bons profils et qu'ils apparaissaient comme prévu dans les paramètres de construction, donc tout semblait correct là-bas, mais la BIBLIOTHÈQUE XCode ne les avait pas, donc elle signait l'application avec ... ?? ?

Rodin Lyasoff
la source
0

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

Dans l' onglet Paramètres de construction , dans Droits de signature de code , mon fichier .entitlements n'était pas lié à 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

mogile_oli
la source
0

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 à ma stupide erreur dans la création d'Appid. J'ai utilisé l' ID d'application Wildcard au lieu d'utiliser l' ID d'application explicite a causé le problème

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. *

Veuillez trouver le ScreenShot, entrez la description de l'image ici

arunjos007
la source