J'ai lu Où xcode récupère-t-il l'identifiant de l'application? , Le formatage de l'identifiant de bundle XCode de {PRODUCT_NAME} , et en charge plus, mais ...
J'essaie d'obtenir des notifications Push et d'obtenir le redouté
"Domaine d'erreur = Code NSCocoaErrorDomain = 3000" aucune chaîne de droits d'accès 'aps-environment' valide n'a été trouvée pour l'application "UserInfo = 0x15b200 {NSLocalizedDescription = aucune chaîne de droits d'accès 'aps-environment' valide n'a été trouvée pour l'application}".
Je suis à peu près certain d'avoir bien suivi toutes les étapes, y compris:
La seule chose à laquelle je ne parviens pas à comprendre, c'est le Bundle Identifier
Le certificat Push est pour
XXXXXXXXXX.com.julianbaker.pwcnewsuk
L’indentifiant de paquet dans PwCNewUK-Info.plist est pour
com.julianbaker.${PRODUCT_NAME:rfc1034identifier}
Si je le change manuellement pour
com.julianbaker.pwcnewsuk
Je reçois une erreur d'incompatibilité UDID car l'application est vue comme PwCNewsUK
Quand j'ai googlé cela, il semble y avoir une certaine confusion à ce sujet, mais il semble qu'ils doivent correspondre.
QUESTION:
Quel doit être l’indentifer de lot pour correspondre au certificat Push de
XXXXXXXXXX.com.julianbaker.pwcnewsuk?
QUESTION:
Dois-je ajouter un droit "environnement-aps" au profil d'approvisionnement, et si oui où et comment? (Voir http://www.airplaysdk.com/node/3174 parmi d'autres)
Aimer le développement de l'iPhone, mais ça peut être parfois un headbanger!
J'ai trouvé cette question lorsque je passais d'un environnement de développement à un environnement de production pour une application sur laquelle je travaille. Ce processus impliquait la création d'un nouveau profil, d'un nouvel identifiant d'application, etc. J'ai créé l'identifiant d'application et un profil, mais Team Agent devait configurer les notifications Push. J'ai rencontré le problème "aucune chaîne de droits d'accès 'environnement-aps' valide trouvée pour l'application" lorsque j'ai essayé de reprendre les tests avec le nouveau profil (après la configuration de l'application pour les notifications Push). Je me suis alors souvenu d'avoir lu une petite mise en garde dans la documentation:
"Vous devez modifier le profil d’une manière ou d’une autre (par exemple, basculer d’une option à l’autre) pour que le portail génère un nouveau profil de provisioning. Si le profil n’est pas si" sali ", vous recevez le profil sans les autorisations Push. "
Source: Guide de programmation des notifications locales et push
Pour moi, "salir" le profil d'approvisionnement 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 provisioning avait été créé avant la configuration de l'application pour les notifications Push. Cela peut aider ou non, mais cela explique probablement (et élimine) la nécessité d'ajouter manuellement quelque chose au profil d'approvisionnement.
J'ai rencontré le même problème "aucune chaîne de droits d'accès 'environnement-aps' valide trouvée pour l'application", mais les solutions ci-dessus ne fonctionnaient pas pour moi.
Je ne pouvais pas trouver une très bonne documentation sur cette erreur ou même simplement la clé "environnement-aps".
Après avoir bricolé, voici ce qui a résolu le problème pour moi:
Ouvrez votre certificat d'approvisionnement de développement, "Appname.mobileprovision" avec un éditeur de texte, recherchez la clé "Droits", puis ajoutez toutes les valeurs trouvées ici dans votre fichier Droits, référencé par votre paramètre Droits de signature de code.
Voici un exemple des clés/valeurs que vous trouverez à l'intérieur:
<key>application-identifier</key>
<string>xyz.com.xyz.xyz</string>
<key>aps-environment</key>
<string>development</string>
<key>com.Apple.developer.ubiquity-container-identifiers</key>
<array>
<string>xyz.*</string>
</array>
<key>com.Apple.developer.ubiquity-kvstore-identifier</key>
<string>xyz.*</string>
<key>get-task-allow</key>
<true/>
<key>keychain-access-groups</key>
<array>
<string>xyz.*</string>
</array>
Après avoir ajouté toutes ces valeurs à mon fichier Entitlements, mon application a été générée avec succès et je peux enfin reprendre le travail sur les notifications push.
Je ne sais pas si ces valeurs sont censées être automatiquement ajoutées à votre fichier de droits par XCode, mais elles n'ont certainement pas été générées pour moi dans mon projet.
Configuration:
Mac OS X 10.8 + Xcode 4.4
Ma solution simple:
xcuserdata
.Quelques astuces sur ce sujet:
Après avoir activé les notifications push pour mon application, je ne pouvais plus créer de fichiers ad hoc. J'ai rencontré des erreurs dans le journal de la console sur mon iPhone en essayant d'installer mon application, par exemple:
Apr 1 20:56:10 unknown installd[384] <Error>: entitlement 'keychain-access-groups' has value not permitted by a provisioning profile
Apr 1 20:56:10 unknown installd[384] <Error>: entitlement 'get-task-allow' has value not permitted by a provisioning profile
Apr 1 20:56:10 unknown installd[384] <Error>: entitlement 'application-identifier' has value not permitted by a provisioning profile
Apr 1 20:56:10 unknown installd[384] <Error>: 2ff66000 verify_signer_identity: Could not copy validate signature: -402620394
Apr 1 20:56:11 unknown installd[384] <Error>: 2ff66000 preflight_application_install: Could not verify executable at /var/tmp/install_staging.44jV0O/foo_extracted/Payload/PersonalTrainer-Tester-iPhone.app
Apr 1 20:56:11 unknown com.Apple.itunesstored[392] <Notice>: MobileInstallationInstall: failed with -1
Apr 1 20:56:11 unknown installd[384] <Error>: 2ff66000 install_application: Could not preflight application install
Apr 1 20:56:11 unknown installd[384] <Error>: 2ff66000 handle_install: API failed
Apr 1 20:56:11 unknown installd[384] <Error>: 2ff66000 send_message: failed to send mach message of 71 bytes: 10000003
Apr 1 20:56:11 unknown installd[384] <Error>: 2ff66000 send_error: Could not send error response to client
Il y a quelques note technique qui recommande d'utiliser codesign -d --entitlements - <YourAppName>.app
pour vérifier si votre application est bien signée pour Apple). Si la sortie de la commande codesign n'a pas d'environnement aps défini pour la production ou le développement, il y a quelque chose de louche!
Pour autant que je sache, mes applications signées avec un profil de provisioning ad hoc ont toujours un embedded.mobileprovision
à l'intérieur de <YourAppName>.app
dossier contenant une partie spécifique, telle que:
<key>Entitlements</key>
<dict>
<key>application-identifier</key>
<string>ABCDEFGH.com.myappname.tester</string>
<key>aps-environment</key>
<string>production</string>
<key>get-task-allow</key>
<false/>
<key>keychain-access-groups</key>
<array>
<string>ABCDEFGH.*</string>
</array>
</dict>
Après avoir utilisé codesign, je me suis rendu compte que le binaire actuel dans <YourAppName>.app
avait également un code XML, qui disait quelque chose de très différent de mon embedded.mobileprovision
fichier:
<!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>ABCDEFGH.com.myappname.tester</string>
<key>get-task-allow</key>
<true/>
<key>keychain-access-groups</key>
<array>
<string>ABCDEFGH.com.myappname.tester</string>
</array>
</dict>
</plist>
J'imagine que c'est la cause du message d'erreur que nous rencontrons tous. (bien que cette erreur puisse avoir différentes racines ainsi que d'autres publications sur stackoverflow suggèrent)
The executable was signed with invalid entitlements.
The entitlements specified in your application's Code Signing Entitlements
file do not match those specified in your provisioning profile. (0xE8008016).
Mon hypothèse est qu’il existe un bogue dans Xcode qui empêche la mise à jour des paramètres de votre plist dans vos schémas, ce qui entraîne la signature de votre application avec le mauvais profil de provisioning. Donc, en supprimant le dossier xcuserdata, vous supprimez tous les régimes. Par conséquent, Xcode les recréera la prochaine fois avec les paramètres appropriés et vous serez à nouveau heureux.
Essentiellement, la réponse est la même.
Répétez ces étapes calmement jusqu'à ce que cela fonctionne, cela m'a pris environ cinq fois différentes combinaisons. Je suis également passé de développement à ad-hoc, ce qui n'est apparemment pas nécessaire, mais j'ai garanti un nouveau fichier de provision mobile.
En utilisant XCode4 et en recevant la même chaîne de droits "pas valide 'aps-environment' trouvée pour l'application", je devais effectuer les opérations suivantes:
Sous 'Projet' -> 'Paramètres de construction' -> 'Signature du code', assurez-vous que vous avez sélectionné le profil de provisioning approprié (celui avec Push activé).
C'était tout ce dont j'avais besoin de changer pour que cela fonctionne.
Aucun de ce qui précède n'a fonctionné pour moi!
Assurez-vous d'utiliser correctement l'application avec le profil d'approvisionnement.
Ce que je veux dire, c'est que si vous avez activé votre application pour les notifications Push pour la distribution uniquement et que vous essayez de faire en sorte que les notifications Push fonctionnent via la génération avec XCode, cela ne fonctionnera pas.
J'ai rencontré ce problème et en activant la notification Push pour le développement pour l'ID d'application, puis en utilisant le profil d'approvisionnement de développement, je ne recevais plus l'erreur et le bon message d'alerte me demandait si je souhaitais recevoir des notifications Push.
la solution pour 10.8 Xcode 4.4 est d’ouvrir le appname.entitlements
fichier
et si la clé DataProtectionClass
a la valeur NSFileProtectionComplete
, supprimez-la!
La suppression de cette clé me permet de tester les applications de Xcode sur des appareils (cela n’affectait pas la simulation).
J'ai eu le même problème. Pour moi, le correctif était comme ça:
Le profil générique ([préfixe]. *) Ne fonctionnera pas si vous essayez d'exécuter une application compatible APN, vous devez spécifier le profil compatible APN.
Mon problème était celui-ci. J'ai créé une application qui avait configuré les notifications Push et, dans l'application déléguée, je m'inscrivais pour les notifications Push avec:
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
Mais avant de publier l'application, je devais créer un nouveau profil d'approvisionnement sur un autre portail de développeur. J'ai créé un nouvel identifiant d'application, un nouveau provisioning pour le développement et la distribution, téléchargé un nouveau provisioning, dans l'application cible, j'ai défini le provisioning correct. De plus, j'ai changé l'identifiant du paquet. Mais je commençais à avoir cette erreur.
Le problème était que la nouvelle AppId n’était pas configurée pour les notifications Push, mais appelait
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
créait une erreur. Lorsque j'ai configuré les notifications push, l'erreur ne s'est pas affichée.
Assurez-vous d'avoir sélectionné correct. Profil d'approvisionnement. J'ai constaté que j'essayais avec le profil Team Provisioning. (pour l'identifiant de l'application: *) Plus bas dans la liste, il y en avait un correct pour l'application.
Je viens de comprendre cela après quelques heures, donc en plus de ce que JulianB a dit,
Ma solution a été de supprimer et de créer à nouveau Profil d'approvisionnement de développement. C'était classé comme "non valide" - pas expiré et échec de renouvellement également (Xcode 4.3.2 et iOS 5.1)
Faites le bon profil et cela fonctionne pour moi. J'espère que cette aide.
Dans mon cas, la solution à cette erreur s’est révélée simple après des heures de bricolage avec des certificats ...
Dans l'onglet Capabilities
de la configuration du projet, je devais activer le Push Notification
flag pour que les fichiers d’environnement soient générés.
macOS Sierra 10.12 - Xcode 8.1
Pour moi, cela a fonctionné après le changement de l'identifiant de paquet en quelque chose de aléatoire. Assurez-vous que l'erreur de signature est bel et bien visible (supprimez tous les profils de provision de l'organiseur et du périphérique et effectuez un build propre CMD + OPT + SHFT + K
puis CMS + SHFT + K
et alors CMD + R
), puis remplacez l'identifiant de paquet par l'identifiant approprié.
J'ai eu ce problème, le scénario était:
J'avais configuré un identifiant d'application sans le support des notifications Push. J'utilise Xcode 5.1 + iOS 7.1
Plus tard, a modifié l'identifiant de l'application pour ajouter des notifications Push en développement et en production.
Créé les certificats APN pour les deux.
Lorsque vous testez PN à l'aide de votre appareil connecté à Xcode, tout fonctionne correctement. Le problème apparaît lorsque vous mettez l'application en production, vous continuez à recevoir:
"Error Domain=NSCocoaErrorDomain Code=3000 "no valid 'aps-environment' entitlement string
found for application" UserInfo=0x15b200 {NSLocalizedDescription=no valid
'apsenvironment' entitlement string found for application}" error.
La solution qui a fonctionné pour moi était: