web-dev-qa-db-fra.com

Bundle Identifier and Push certificate ... erreur de droit d'accès aps-environment

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:

  • fait le certificat Push bien avant le cert de provisioning
  • fait un 'Entitlements.plist'
  • ajout d'un booléen get-task-allow et le mettre à true (version ad-hoc)

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!

68
JulianB

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.

88
J.R. Armstrong

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.

20
ozz

Configuration:

Mac OS X 10.8 + Xcode 4.4

Ma solution simple:

  1. Relancez votre profil d'approvisionnement ad hoc après avoir configuré les notifications Push pour votre ID d'application et les avoir importées dans Xcode.
  2. Jetez un coup d’œil dans votre dossier .xcodeproj (clic droit -> Afficher le contenu du paquet) et supprimez le dossier xcuserdata.
  3. C'est ça ;)

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.

6
vinzenzweber

Essentiellement, la réponse est la même.

  • Assurez-vous d'avoir un "Entitlements.plist" ajouté (Nouveau fichier/Code Signing/Droits)
  • Ajoutez "get-task-allow" (Boolean Off) à Entitlements.plist
  • Ajoutez la paire "production" "aps-environment" à Entitlements.plist - Cette dernière étape est peut-être inutile, mais c’est une des étapes que j’ai accomplies juste avant que cela fonctionne.
  • Supprimer les anciens fichiers mobileprovision de l'iPhone/iPod (dans Réglages/Général),
  • Supprimer les anciens fichiers mobileprovision de XCode Organizer
  • Supprimer l'application de l'iPhone/iPod
  • Quitter XCode
  • Télécharger une nouvelle copie du certificat de provisioning
  • Recherchez la paire "production" "environnement-aps" dans le certificat avec un éditeur de texte.
  • Démarrer XCode
  • Ajouter un nouveau fichier mobileprovision en le faisant glisser vers l'icône XCode Doc
  • Assurez-vous que vous avez réaffecté/attribué le bon certificat dans les informations de cible: Signature de code: Identité de signature de code
  • Vérifiez que les résultats de la construction 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 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.

5
JulianB

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:

  • Supprimez les anciens profils de provisioning des deux panneaux Bibliothèque + Périphériques de l'Organiseur.
  • Régénérez le nouveau profil avec APN dev activé à partir du site Web du portail des développeurs
  • Assurez-vous que le nouveau profil est ajouté aux deux panneaux Bibliothèque + Périphérique dans Organizer.
  • Supprimer manuellement mon application de mon appareil (en la tenant jusqu'à ce qu'elle bouge et en appuyant sur X)
  • CMD + OPT + SHIFT + K (Dossier de génération propre) et CMD + SHIFT + K (Nettoyer)
  • Définissez le profil approprié sous Projet> Paramètres de construction> Signature de code
  • Assurez-vous que l'option 'Utiliser les droits' n'est pas cochée sous Cibles> Résumé.
5
Max Ogden

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.

3
Steffo

Aucun de ce qui précède n'a fonctionné pour moi!

  1. Supprimer tout profils d'approvisionnement dans organisateur Xcode
  2. Supprimer tous les certificats de développeur dans troussea
  3. Supprimer tout profils d'approvisionnement dans appareil iPhone
  4. Dans Portail d'approvisionnement iOS, supprimez Profil d'approvisionnement de développement créé automatiquement par Xcode
  5. Créez un nouveau profil d'approvisionnement en attribuant la combinaison correcte (certificat/appID/périphérique)
  6. Téléchargez le nouveau profil d'approvisionnement
  7. Importez le nouveau profil d'approvisionnement dans organisateur Xcode
  8. CMD + Option + Maj + K
  9. CMD + Maj + K
  10. CMD + R
  11. Hourra :)
3
DeZigny

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.

2
Will

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

1
Flori

J'ai eu le même problème. Pour moi, le correctif était comme ça:

  1. Suppression et rechargement des profils d'approvisionnement de l'organiseur.
  2. Sélectionné mon profil d'approvisionnement nommé dans Paramètres du projet-> Signature du code. D'une manière ou d'une autre, il souhaitait utiliser l'identité blabla. *.

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.

1
Hersker

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.

0
Josip B.

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.

0
MadNik

Je viens de comprendre cela après quelques heures, donc en plus de ce que JulianB a dit,

  • assurez-vous d'avoir une icône d'application. Vous en avez probablement un, mais il m'est arrivé d'ajouter Push lorsque nous étions entre des versions d'icônes. J'ai essayé beaucoup de choses différentes et à la fin c'est tout ce qui a été nécessaire pour que ce ne soit même pas un problème de cert ou de signature.
  • J'ai aussi lu un fichier image corrompu qui pourrait aussi en être la cause
  • je n'ai pas ajouté/vu de clé aps-environment dans mon fichier rightslement.plist
  • nettoyer toutes les cibles avant de construire
0
katbyte

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)

0
JOM

enter image description here

Faites le bon profil et cela fonctionne pour moi. J'espère que cette aide.

0
jxdwinter

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

enter image description here

0
RWIL

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

0
Samyak Bhuta

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:

  1. Supprimez les profils de provisioning pour le développement et la distribution (portail Xcode et développeur).
  2. Supprimez votre ID d'application (portail de développeur).
  3. Créez un nouvel identifiant d'application avec prise en charge des notifications push pour le développement et la production.
  4. Créez de nouveaux profils de provisioning à l'aide de NOUVEL ID d'application.
  5. Installez-les sur Xcode.
  6. Test sur la version de développement et de distribution.
0