Identificador de paquete y certificado push error aps-error de autorización del entorno


He leído ¿De dónde toma xcode el identificador de la aplicación? , Formato de identificador de paquete XCode desde {PRODUCT_NAME}, y mucho más, pero...

Estoy tratando de obtener notificaciones push y obtener el temido

"Error Domain = NSCocoaErrorDomain Code = 3000" no valid 'aps-environment' se ha encontrado una cadena de derechos para la aplicación " userInfo = 0x15b200 {NSLocalizedDescription=no valid 'aps-environment' entitlement string encontrado para aplicación}" error.

Estoy bastante seguro de que he seguido todos los pasos correctamente, incluyendo:

  • hizo el certificado push mucho antes del certificado de aprovisionamiento
  • hizo un 'Derechos.plist '
  • se agregó un booleano get-task-allow y se lo puso en true (ad-hoc release)

Lo único que creo que no puedo entender es el Identificador del Paquete

El certificado push es para

XXXXXXXXXX.com.julianbaker.pwcnewsuk

El Identificador de Paquete en PwCNewUK-Info.plist es para

com.julianbaker.${PRODUCT_NAME:rfc1034identifier}

Si lo cambio manualmente a

com.julianbaker.pwcnewsuk

Recibo un error UDID mismatch ya que la aplicación se ve como PwCNewsUK

Cuando he Googleado esto parece haber cierta confusión sobre el asunto, pero parece que tienen que coincidir?

PREGUNTA:

¿Qué debe ser el identificador de paquete para que coincida con el certificado push de
XXXXXXXXXX.com.julianbaker.pwcnewsuk ?

PREGUNTA:

¿Necesito agregar un permiso "aps-environment" a el perfil de aprovisionamiento, y si es así, ¿dónde y cómo? (Véase http://www.airplaysdk.com/node/3174 entre otros)

Me encanta el desarrollo de iPhone, pero sheesh puede ser un headbanger a veces!

Author: Community, 2011-04-15

19 answers

Encontré esta pregunta cuando estaba pasando de un entorno de desarrollo a uno de producción en una aplicación en la que estoy trabajando. Este proceso implicó la creación de un nuevo perfil, un nuevo ID de aplicación, etc. Creé el ID de la aplicación y un perfil, pero el Agente del Equipo tuvo que configurar las notificaciones push. Me encontré con el problema de " no se encontró una cadena de derechos válida 'aps-environment' para la aplicación " cuando traté de reanudar las pruebas con el nuevo perfil (después de que la aplicación se había configurado para notificaciones push). Entonces recordé leer una pequeña advertencia en la documentación:

"Debe modificar el perfil de alguna manera (por ejemplo, alternar una opción) para que el portal genere un nuevo perfil de aprovisionamiento. Si el perfil no está tan "sucio", se te da el perfil sin los derechos de inserción."

Fuente: Guía de Programación de Notificaciones Locales y Push

Para mí, "ensuciar" el perfil de aprovisionamiento y reinstalarlo era todo lo que se necesitaba para soluciona el problema. Según la documentación, esto era necesario porque el perfil de aprovisionamiento se creó antes de que la aplicación se configurara para las notificaciones push. Esto puede o no ayudar a nadie, pero esto probablemente explica (y elimina) la necesidad de agregar manualmente cualquier cosa al perfil de aprovisionamiento.

 88
Author: J.R. Armstrong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-21 01:04:45

Me encontré con el mismo problema "no valid 'aps-environment' entitlement string found for application", pero las soluciones anteriores no funcionaron para mí.

No pude encontrar muy buena documentación sobre este error o incluso solo la clave "aps-environment".

Después de algunos retoques, aquí está lo que resolvió el problema para mí:

Abra su certificado de aprovisionamiento de desarrollo, "Appname.mobileprovision "con un editor de texto, busque la clave "Derechos" y luego agregue todos los valores encontrados aquí en el archivo de derechos referenciados por la configuración de Derechos de firma de código.

Aquí hay un ejemplo de las claves/valores que encontrarás dentro:

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

Después de agregar todos estos valores a mi archivo de derechos, mi aplicación se construye correctamente y finalmente puedo volver a trabajar en las notificaciones push.

No estoy seguro de si se supone que estos valores se agregarán automáticamente a su archivo de derechos por XCode, pero ciertamente no se generaron para mí en mi proyecto.

 20
Author: ozz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-12 03:38:21

Configuración:

Mac OS X 10.8 + Xcode 4.4

Mi Solución Simple:

  1. Vuelva a emitir su perfil de aprovisionamiento ad hoc después de haber configurado las notificaciones push para su ID de aplicación e impórtelas a Xcode.
  2. Echa un vistazo a tu .carpeta xcodeproj (clic derecho - > Mostrar contenido del paquete) y eliminar la carpeta xcuserdata.
  3. Eso es todo;)

Algunos consejos sobre este tema:

Después de activar Push Notificaciones para mi aplicación De repente ya no podía crear archivos ad hoc. Me encontré con errores en el registro de mi consola en mi iPhone al intentar instalar mi aplicación, como los siguientes:

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

Hay una nota técnica que recomienda usar codesign -d --entitlements - <YourAppName>.app para verificar si su aplicación está firmada correctamente para las notificaciones Push de Apple. En caso de que la salida del comando codesign no tenga un aps-environment establecido en producción o desarrollo, ¡hay algo sospechoso!

Hasta donde yo sabía hasta ahora, mis aplicaciones firmadas con un perfil de aprovisionamiento adhoc siempre tienen un embedded.mobileprovision dentro de la carpeta <YourAppName>.app con una parte específica en ellas como:

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

Después de usar codesign me di cuenta de que el binario real en <YourAppName>.app también tenía algo de XML incluido, lo que decía algo muy diferente a mi archivo embedded.mobileprovision:

<!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>

Asumo que esta es la causa del mensaje de error que todos estamos experimentando. (aunque este error puede tener algunas raíces diferentes, así como otros mensajes en stackoverflow suggest)

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

Mi conjetura es que hay algún error en Xcode que evita que la configuración de su plist se actualice en sus esquemas, lo que hace que su aplicación se firme con el perfil de aprovisionamiento incorrecto al final. Así que al eliminar la carpeta xcuserdata se eliminan todos los esquemas. Por lo tanto, Xcode los recreará la próxima vez con la configuración adecuada y estará feliz de nuevo.

 6
Author: vinzenzweber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-01 22:43:19

Esencialmente la respuesta es la misma vaga que todos los demás dicen

  • Asegúrese de que tiene un "Derechos.plist " añadido (Nuevo Archivo/Firma de código/Derechos)
  • Agregue "get-task-allow" (Booleano Desactivado) a las Autorizaciones.plist
  • Añada el par "producción" "aps-environment" a las Autorizaciones.plist -- Este último paso puede ser innecesario, pero fue uno de los pasos que hice justo antes de que funcionara
  • Eliminar viejos archivos mobileprovision desde el iPhone / iPod (En Configuración / General),
  • Eliminar archivos antiguos de mobileprovision de XCODE Organiser
  • Eliminar la aplicación desde el iPhone / iPod
  • Salir de XCode
  • Descargue una copia nueva del Certificado de aprovisionamiento
  • Compruebe si "aps-environment" "production" se empareja en el certificado con un Editor de texto
  • Iniciar XCode
  • Agregue el archivo mobileprovision fresco arrastrando al icono de Xcode Doc
  • Asegúrese de haber reasignado / asignado el certificado correcto en la Información de destino: Firma de código: Firma de código Identidad
  • Verifique que la compilación resulte para ver que está usando el perfil correcto y está firmada correctamente

Repita estos pasos con calma hasta que funcione, me tomó alrededor de cinco intentos de varias combinaciones. También cambié de Desarrollo a Ad-hoc, que aparentemente no es necesario, pero garantizó un nuevo archivo mobileprovision.

 5
Author: JulianB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-29 16:39:46

Usando XCode4 y recibiendo la misma " no valid 'aps-environment' entitlement string found for application " Tuve que hacer lo siguiente:

  • Elimine los perfiles de aprovisionamiento antiguos de ambos paneles Biblioteca + Dispositivo en Organizer
  • Regenerar nuevo perfil con APN dev habilitado desde el sitio web del portal para desarrolladores
  • Asegúrese de que se agrega un nuevo perfil a ambos paneles Biblioteca + Dispositivo en Organizer
  • Eliminar manualmente mi aplicación de mi dispositivo (mantener hasta que se agita y golpear X)
  • CMD + OPT + SHIFT + K (Limpiar carpeta de compilación) y CMD+SHIFT+K (Limpiar)
  • Establezca el perfil adecuado en Proyecto > Configuración de compilación > Firma de código
  • Asegúrese de que' Usar derechos ' no esté marcado en Destinos > Resumen
 5
Author: max ogden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-30 22:12:30

En 'Proyecto' - > 'Configuración de compilación' - > 'Firma de código', asegúrese de haber seleccionado el perfil de aprovisionamiento correcto(el que tiene activado push).

Eso era todo lo que necesitaba cambiar para que funcionara.

 3
Author: Steffo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-21 18:30:41

¡Nada de lo anterior funcionó para mí!

  1. Eliminar todos los perfiles de aprovisionamiento en Xcode Organizer
  2. Eliminar todos los Certificados de desarrolladores en Llavero
  3. Eliminar todos los Perfiles de aprovisionamiento en dispositivo iPhone
  4. En iOS Provisioning Portal , elimine Development Provisioning Profile que fue creado automáticamente por Xcode
  5. Crear un nuevo Perfil de aprovisionamiento por asignar la combinación correcta (Certificado/AppID/Dispositivo)
  6. Descargue el nuevo Perfil de aprovisionamiento
  7. Importe el nuevo Perfil de aprovisionamiento en Xcode Organizer
  8. CMD + Option + Shift + K
  9. CMD + Shift + K
  10. CMD + R
  11. Hurra :)
 3
Author: DeZigny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-31 21:49:42

Asegúrese de que está utilizando la aplicación de la manera correcta con el perfil de aprovisionamiento.

Lo que quiero decir es que si ha habilitado su aplicación para notificaciones Push solo para Distribución, y está tratando de que las notificaciones push funcionen a través de la construcción con XCode, esto no funcionará.

Me encontré con este problema, y al habilitar la notificación push para el Desarrollo para el ID de la aplicación, y luego usar el perfil de aprovisionamiento de desarrollo ya no obtuve el error y la alerta correcta view me preguntó si quería recibir notificaciones push.

 2
Author: Will,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-17 13:27:27

La solución para 10.8 Xcode 4.4 es para abrir el archivo appname.entitlements

Y si la clave DataProtectionClass tiene el valor NSFileProtectionComplete, ¡bórralo!

Eliminar esta clave me permite probar aplicaciones de Xcode en dispositivos (no afectaba a la simulación).

 1
Author: Flori,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-06 12:25:33

Yo tenía el mismo problema. Para mí la solución era así:

  1. Se han eliminado y vuelto a cargar los perfiles de aprovisionamiento del organizador.
  2. Seleccioné mi perfil de aprovisionamiento con nombre en configuración del proyecto->firma de código. De alguna manera quería usar el blabla.* identidad.

El perfil comodín ([prefijo].* ) no lo hará cuando intente ejecutar una aplicación habilitada para APN, debe especificar el perfil habilitado para APN.

 1
Author: Hersker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-20 08:50:47

Me acabo de dar cuenta de esto después de unas horas, así que además de lo que dijo JulianB,

  • asegúrese de tener un icono de aplicación. Es probable que tenga uno, pero me pasó a añadir push cuando estábamos entre versiones de iconos. Intenté asignar diferentes cosas y al final eso fue todo lo que tomó, por lo que podría ni siquiera ser un problema de configuración de cert o firma.
  • También he leído que un archivo de imagen corrupto también podría ser la causa
  • no he añadido / visto una clave aps-environment en mis derechos.plist
  • limpiar todos los objetivos antes de construir
 0
Author: katbyte,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-25 14:01:46

Para mí funcionó después de cambiar el identificador de paquete a algo aleatorio. Asegúrese de que aparece el error de firma (elimine todos los perfiles de provisión del organizador y el dispositivo y realice una compilación limpia CMD + OPT + SHFT + K, luego CMS + SHFT + K y luego CMD + R) y, a continuación, cambie el identificador del paquete a uno apropiado.

 0
Author: Samyak Bhuta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-27 17:09:33

Mi solución fue eliminar y crear de nuevo Development Provisioning Profile. Fue enumerado como"Inválido" - no expiró y también renovó falló (Xcode 4.3.2 e iOS 5.1)

 0
Author: JOM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-28 12:00:44

Asegúrese de haber seleccionado correcto. Perfil de Aprovisionamiento. Descubrí que estaba tratando con el perfil de aprovisionamiento del equipo.( para el identificador de la aplicación: *) Más abajo en la lista, había uno correcto para la aplicación.

 0
Author: MadNik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-28 05:54:14

Mi problema era este. Creé la aplicación que había configurado las notificaciones push, y en app delegate me estaba registrando para las notificaciones push con:

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];

Pero antes de lanzar la aplicación tuve que crear un nuevo perfil de aprovisionamiento en otro portal de desarrolladores. He creado un nuevo Id de aplicación, un nuevo aprovisionamiento para el desarrollo y la distribución, descargado un nuevo aprovisionamiento, en el destino de la aplicación he establecido el aprovisionamiento correcto. También cambié el identificador del paquete. Pero estaba recibiendo ese error.

Problema ¿era que el nuevo AppID no estaba configurado para notificaciones push, sino que llamaba a

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];

Estaba creando un error. Cuando configuré el error de notificaciones push no se volvió a mostrar.

 0
Author: Josip B.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-29 11:45:38

Tuve este problema, el escenario era:

Había configurado un id de aplicación sin soporte de notificaciones push. Estoy usando Xcode 5.1 + iOS 7.1

Más tarde, editó el id de la aplicación para agregar notificaciones push en desarrollo y producción.

Se crearon los certificados APNs para ambos.

Cuando pruebas PN usando tu dispositivo conectado a Xcode, todo funciona bien. El problema aparece cuando sueltas la aplicación a producción, sigues obteniendo:

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

El la solución que funcionó para mí fue :

  1. Elimine los perfiles de aprovisionamiento para desarrollo y distribución (Xcode y portal para desarrolladores).
  2. Elimine su ID de aplicación (portal para desarrolladores).
  3. Cree un nuevo ID de aplicación con soporte de Notificaciones Push para Desarrollo y Producción.
  4. Cree nuevos perfiles de aprovisionamiento utilizando el NUEVO ID de aplicación.
  5. Instálalos en Xcode.
  6. Prueba de desarrollo y distribución.
 0
Author: Fabian Guerra Soto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-01 18:13:42

introduzca la descripción de la imagen aquí

Haz el perfil correcto y esto funciona para mí.Espero que esto ayude.

 0
Author: jxdwinter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-11 10:55:23

En mi caso, la solución para este error resultó ser simple después de horas de retoques con los certificados...

En la pestaña Capabilities de la configuración del proyecto, tuve que habilitar el indicador Push Notification para que se generaran los archivos de entorno.

MacOS Sierra 10.12-Xcode 8.1

introduzca la descripción de la imagen aquí

 0
Author: RWIL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-07 09:13:31

En realidad su perfil provisional eliminado del sitio de desarrolladores de Apple.& obtiene el error de

 -2
Author: dipak dhondge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-21 13:16:28