no se ha encontrado una cadena de autorización válida 'aps-environment' para la aplicación


83

Estoy tratando de configurar mi aplicación para que admita notificaciones push, pero sigo recibiendo este error: No se pudo obtener el token, error: Error Domain = NSCocoaErrorDomain Code = 3000 "no se encontró una cadena de autorización válida 'aps-environment' para la aplicación" UserInfo = 0x1f818fc0 { NSLocalizedDescription = no se encontró una cadena de autorización válida 'aps-environment' para la aplicación}

  • Permití que mi aplicación admita notificaciones push (solo para desarrollo en este momento).
  • Creé el perfil de aprovisionamiento DESPUÉS de habilitar las notificaciones push.
  • Mi identificador de paquete es el mismo que aparece en el perfil.
  • En mi archivo de perfil hay una cadena: aps-environment
  • Me aseguré de que tanto en el proyecto como en el destino, en la sección "Identidad de firma de código", TODOS los valores estén seleccionados para ser mi perfil de aprovisionamiento.

¿Más ideas? Gracias.


¿No tienes idea de este? Parece algo que muchos encontrarían ...
bashan

Respuestas:


64

En mi caso, las cosas en mi perfil de aprovisionamiento:

security cms -D -i ~/Downloads/spolskyDevelop.mobileprovision 
...
<key>application-identifier</key>
<string>P5GM95Q9VV.com.dca.spolsky</string>
<key>aps-environment</key>
<string>development</string>

Era diferente a las cosas de la aplicación que realmente se construyeron (puede averiguar dónde está construido mirando la pestaña Registros de Xcode)

codesign -d --entitlements - '/Users/drew/Library/Developer/Xcode/DerivedData/spolsky-bdbtdfjeeywhqzccpmmceqvnhgtm/Build/Products/Debug-iphoneos/spolsky-ios.app'
<dict>
    <key>application-identifier</key>
    <string>Y2X6Z7Z2GR.com.dca.spolsky-ios</string>
    <key>get-task-allow</key>
    <true/>
    <key>keychain-access-groups</key>
    <array>
        <string>Y2X6Z7Z2GR.com.dca.spolsky-ios</string>
    </array>
</dict>

Esto era cierto a pesar de que el texto de la sugerencia "Coincide actualmente" en Identidad de firma de código indicaba el perfil de aprovisionamiento correcto. Es extraño, ¿eh? Para hacer una historia extraña más extraña, el perfil de aprovisionamiento correcto se estaba instalando en el dispositivo cuando ejecuté, (Configuración-> General-> Perfiles) lo que me llevó a creer que el perfil de aprovisionamiento era correcto, pero estaba recurriendo a una ID comodín. cuando se lanzó la aplicación .

La pista fue la diferencia en la salida de estos dos comandos:

Y2X6Z7Z2GR .com.dca. spolsky-ios frente a P5GM95Q9VV .com.dca. spolsky

Cuando hice coincidir la parte en negrita, la parte en cursiva cambió para coincidir automáticamente. Además, el resultado de la seguridad y el código de firma coincidieron, y no más errores de autorización de aps.

Supongo que XCode estaba usando una coincidencia de estilo comodín en mi ID no comodín. ("spolsky" es, después de todo, casi "spolsky-ios"), y esto explica la salida "Actualmente coincide". Pero algo en la cadena de compilación es más estricto al respecto, por lo que recurre a un ID comodín real durante la compilación.


7
Experimenté un problema similar: la 'Configuración de compilación' del proyecto era diferente a la 'Configuración de compilación' de TARGET ... en mi caso, la configuración de Target estaba predeterminada en los perfiles de aprovisionamiento incorrectos.
Rob

1
Apoyos al descubrir esto, encontré el mismo problema.
Codemonk

1
Uno de mis compañeros de trabajo tuvo este problema de aprovisionamiento. Sin embargo, solo pude seleccionar la clave de aprovisionamiento sin comodines después de ingresar a la configuración del perfil en Xcode y actualizar la lista de certificados / claves de aprovisionamiento.
cbh2000

1
Mi configuración de destino para 'depuración' usaba iOS Developer / Automatic, lo que provocaba que mi .app saliera con la identidad de firma de código incorrecta. Tuve que establecer explícitamente la configuración de mi proyecto y destino tanto para la depuración como para el lanzamiento para usar mi nuevo ID de firma de código, mi problema se solucionó. No es solo su perfil de aprovisionamiento, también debe verificar esas identidades de firma de código. ¡No podría haberlo resuelto sin estos increíbles comandos de terminal!
self.name

6
Solo para que conste: para que las notificaciones push funcionen, uno tiene que usar un perfil de aprovisionamiento específico , con el ID de paquete de la aplicación, y no uno con el comodín * .
mgarciaisaia

37

El problema se debe a que el perfil de aprovisionamiento actual no contiene información de APNS, ya que el perfil de aprovisionamiento se crea ANTES de crear el certificado APNS.

Por lo tanto, para resolver el problema, cree un nuevo perfil de aprovisionamiento y seleccione el perfil de aprovisionamiento en Xcode para borrar el error.


No funcionó para mí. Cualquier otro consejo. Mire esto: stackoverflow.com/questions/25679750/…
Ajeet

29

Tuve el mismo problema después de que las notificaciones push ya estaban funcionando en mi dispositivo. Parecía que Xcode almacenaba en caché algo incorrectamente, por lo que la actualización solucionó mi problema:

  1. Xcode -> Preferencias -> Cuentas
  2. Ver detalles de su cuenta de desarrollador
  3. Simplemente haga clic en Actualizar para los perfiles de suministro varias veces. Veía estos cambios con cada actualización. Sigue refrescando hasta que dejen de cambiar.

Por extraño que parezca, ¡esto funcionó para mí! Actualicé hasta que dejó de actualizarse, luego limpié mi carpeta de compilación y luego reinicié XCode. Esto fue después de que verifiqué el ID del paquete en el perfil de aprovisionamiento y la aplicación construida (donde coincidió en ambos, lo que me dejó aún más perplejo).
Sean Michael Dorian

Ya no hay botón Actualizar (?)
Gerry

9

recibí este error y no creé un nuevo perfil de aprovisionamiento; creó uno nuevo y luego tuvo que reiniciar xCode, ¡pero funciona ahora!


9

Tenga en cuenta que el identificador del paquete debe coincidir con el perfil de aprovisionamiento distinguiendo entre mayúsculas y minúsculas . Tenía algo como com.FirstLast.appname cuando debería haber sido com.firstlast.appname. Bueno, eso me mantuvo ocupado durante bastante tiempo.


Tuve el mismo problema, esto me lo solucionó.
kuba

9

Solucioné este problema habilitando la función de notificación automática.

Seleccione Proyecto> Destino> Capacidades> Activar notificaciones push

mira la imagen


3

Si este problema ocurrió repentinamente después de actualizar a Xcode 8, es posible que encuentre una advertencia en la pantalla de capacidades que le permitirá solucionarlo automáticamente:

Seleccione Proyecto> Destino> Capacidades> Activar notificaciones push


Eso es lo que me salvó de los dolores de cabeza. ¡Gracias!
jpaljasma

2

Producto-> Clean lo hizo por mí. Ojalá lo haga por alguien más.


hago ambas limpiezas. La limpieza secundaria a través de command-option-shift-k también es útil.
dibujó ..

2

Me encontré con esto en lo que posiblemente sea un caso de uso poco frecuente. Estoy trabajando con Xcode 6 y iOS 8. Estaba creando una serie de proyectos de aplicaciones completamente nuevos e intentando reutilizar el mismo ID de paquete para no tener que volver a pasar por toda la configuración del portal. Esto también fue solo para pruebas de sandbox.

Descubriría que, si bien la configuración y el registro funcionarían bien para la primera aplicación, si eliminé esa aplicación del dispositivo, configuré el mismo ID de paquete para la segunda aplicación y luego intenté registrar PN con esa aplicación, obtendría este error.

Mi solución fue:

  1. Elimine el perfil de aprovisionamiento asociado del dispositivo.
  2. Elimine el perfil de aprovisionamiento asociado de Xcode.
  3. Cerrar Xcode
  4. Haga doble clic en mi .mobileprovisionarchivo descargado para instalarlo de nuevo en Xcode
  5. Abra el proyecto e impleméntelo.

Este enfoque parece perder el estado anterior que estaba allí, y puedo registrarme para PN con la nueva aplicación / el mismo ID de paquete.


2

Para aquellos que recibieron este error en ios 10, pueden intentar los siguientes pasos:

1.limpia tu proyecto.
2. y marque Objetivos -> Capacidades -> Notificación push. Si está desactivado, activado.

Y el problema se resolverá Los pasos anteriores me ayudan a deshacerme de este problema. Espero que sea de ayuda para alguien.


0

El nuevo perfil de aprovisionamiento funcionó para mí. Asegúrese de utilizar un perfil de desarrollador si está en desarrollo (no utilice Ad Hoc). Estuvo bien después de eso, no tengo idea de por qué el anterior dejó de funcionar bien.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.