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)
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.
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):
Et l'ID de paquet à deux endroits est défini, j'ai ceci:
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.
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":
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.
la source
-
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.J'ai rencontré ce problème dans Xcode 8. Vous devez avoir activé Target -> capacités -> notification push. Vérifiez la capture d'écran.
la source
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.
la source
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".
Le profil correct sera sélectionné dans la fenêtre Finder ouverte. Notez le nom.
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.
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.
la source
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.
la source
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.
la source
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.
la source
(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 à
Actualisez ensuite vos fichiers d'approvisionnement.
la source
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.
la source
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
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
la source
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
la source
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.
la source
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.
la source
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-environment
etapplication-identifier
.la source
Cette erreur peut se produire lorsque votre certificat a expiré.
La solution consiste à renouveler le certificat et à signer l'application avec lui.
la source
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.
la source
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é.
la source
recréer des fichiers provisoires a résolu tous mes problèmes.
la source
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:
Une solution de contournement que j'ai trouvée consistait à modifier ce fichier et à ajouter manuellement la clé sournoise aps-environment comme suit:
Ensuite, Xcode génère le fichier Xcent correct, qui contient la clé aps-environment à:
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"
la source
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 ... ?? ?
la source
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.
la source
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,
la source