He estado intentando crear una aplicación de iOS simple y simple que pueda recibir notificaciones push. Mi única razón para hacerlo es establecer un procedimiento para que lo usen otros miembros del equipo, y no he podido encontrar una versión actualizada y funcional de tales instrucciones en otra parte de la web. Nuestra tienda es bastante nueva para el desarrollador de iOS, personalmente no tengo experiencia con el desarrollador de iOS y Xcode. He tropezado con decenas de tutoriales, artículos y publicaciones de problemas de Apple y otros lugares y siento que podría estar casi allí ...
Aquí es donde tengo que hacerlo (tenga en cuenta que estoy usando Xcode 4.3 y estoy tratando inicialmente de implementar solo en iOS 5.1, y deduzco que algunas cosas pueden haber cambiado recientemente en comparación con versiones anteriores de Xcode, pero nuevamente soy nuevo para todos esto, y encontrarlo completamente confuso y complicado):
1) Tengo un perfil de aprovisionamiento en mi iPhone que tiene habilitado Push
2) En mi proyecto Xcode de prueba, seleccioné ese perfil de aprovisionamiento como identidad de firma (en Configuración de compilación> Firma de código)
3) Tengo mi identificador de paquete en Resumen e información> Propiedades de destino de iOS personalizadas configuradas correctamente * (creo que ??)
4) Tengo que registrar registerForRemoteNotificationTypes en didFinishLaunchingWithOptions de mi delegado
5) Tengo didRegisterForRemoteNotificationsWithDeviceToken y didFailToRegisterForRemoteNotificationsWithError en mi delegado, configurado para registrar el token o error del dispositivo respectivamente
6) Tengo habilitados los derechos marcados en Resumen
7) Justo debajo de que el archivo de derechos seleccionado es Tinker6 (el nombre de mi proyecto de prueba), que se generó automáticamente cuando marqué Habilitar derechos
8) En el archivo Tinker6.entitlements tengo lo siguiente (que he recopilado es correcto en base a varias publicaciones diferentes en toda la web, pero que no puedo encontrar nada definitivo de Apple en sí):
Actualizado
9) Además, he intentado todo sin un archivo de derechos y obtengo esencialmente el mismo resultado.
10) El contenido de mi archivo de aprovisionamiento móvil incluye derechos correctamente (he codificado el número y el dominio pero estructuralmente el mismo):
<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>
/ finaliza la actualización
Cuando intento ejecutar esto en mi dispositivo, aparece el siguiente error en la salida de 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}
He intentado establecer get-task-allow en NO, aps-environment en producción, las cuatro combinaciones posibles, lo mismo.
¿Cómo puedo superar esto? ¿Dónde está la documentación definitiva sobre esto?
- Siguen más antecedentes -
* En cuanto a la identificación del paquete, todavía no tengo claro cómo se debe establecer en relación con los ID de aplicaciones y los ID de perfil en el perfil de aprovisionamiento. En el portal de aprovisionamiento en App Ids tengo esto (nuevamente, codifiqué el número y el dominio):
Y la identificación del paquete de dos lugares está configurada. Tengo esto:
No estoy del todo seguro de que estos sean correctos o de si uno o ambos deben establecerse en 12355456A7.com.whatever.tinker, aunque los he intentado anteriormente en el proceso sin éxito ...
Tenga en cuenta que hay muchas publicaciones con títulos similares, sin embargo, todas parecen estar desactualizadas en función de los nombres de archivo y demás, y el hecho de que ninguna de las soluciones parece ser útil. Espero que el mayor nivel de detalle que he dado garantice una respuesta de calidad. Probablemente asignaré una recompensa lo antes posible y si da una respuesta de alta calidad que conduzca a una solución, le otorgaré la recompensa y promocionaré su respuesta a través de Twitter y mi blog. Especialmente si publica una publicación cruzada realmente buena "aquí están los 500 pasos exactos que necesita para que una aplicación de notificación push simple funcione, incluido el aprovisionamiento y cualquier otra cosa" en su blog o lo que sea.
En primer lugar, no necesita el archivo de derechos a menos que esté agregando pares de clave / valor personalizados que no existen en el perfil de aprovisionamiento. Cuando se crea su aplicación, todos los derechos del perfil de aprovisionamiento se copiarán a la aplicación.
Dado que todavía ve un mensaje de error sobre derechos faltantes, solo puedo suponer que las opciones de firma de código no son correctas en la configuración de compilación.
Debe asegurarse de seleccionar el perfil correcto para la configuración "Depurar" y, para estar seguro, de haber seleccionado el perfil correcto tanto para "Depurar" como para el nodo secundario con la etiqueta "Cualquier SDK de iOS":
Aunque esta captura de pantalla muestra el perfil "Desarrollador automático" seleccionado, elija el perfil de aprovisionamiento exacto que desea del menú desplegable, solo para fines de prueba. Puede ser que Xcode elija automáticamente un perfil diferente al que desea.
También asegúrese de hacer una compilación limpia, eliminar por completo la aplicación de su dispositivo, etc. Esto es solo para asegurarse de que no tenga alguna pelusa vieja por ahí.
fuente
-
antes de la ruta:codesign -d --entitlements - /path/to/my.app
. En este punto, también vale la pena verificar que se encuentre en el directorio Debug-iphoneos, ya que "Mostrar en el buscador" a veces puede llevarlo al lugar equivocado.Me he enfrentado a este problema en Xcode 8. Debe tener que habilitar Target—> capacidades—> notificación push. Mira la captura de pantalla.
fuente
La forma más fácil es hacer esto desde sus cuentas con Xcode:
Pásate por Xcode -> Preferencias -> Elija la pestaña Cuentas -> Ver detalles -> Pulse el botón actualizar en la parte inferior izquierda -> Listo.
Construir de nuevo y debería funcionar.
fuente
Ok, me enfrenté al problema antes. Dado que la notificación push requiere la implementación en el servidor, volver a crear el perfil no era una opción. Entonces encontré esta solución SIN crear un nuevo perfil de aprovisionamiento.
Xcode no está seleccionando correctamente el perfil de aprovisionamiento correcto, aunque lo estamos seleccionando correctamente.
Primero ve al organizador. En la pestaña Dispositivos, Perfil de aprovisionamiento de la lista Biblioteca, seleccione el perfil deseado que estamos tratando de usar. Haga clic derecho sobre él y luego "Mostrar perfil en Finder".
Se seleccionará el perfil correcto en la ventana del Finder abierta. Anota el nombre.
Ahora ve a Xcode> Log Navigator. Seleccione el filtro para "Todos" y "Todos los mensajes". Ahora en la última fase (Build Target) busque el paso llamado "ProcessProductPackaging", amplíelo. Anote el nombre del perfil de aprovisionamiento. NO deben coincidir si tiene el error.
Ahora, en la ventana del buscador abierto, elimine el perfil de aprovisionamiento falso que Xcode está utilizando. Ahora construye de nuevo. El error debe resolverse. Si no, repita el proceso para encontrar otro perfil falso para eliminarlo.
Espero que esto ayude.
fuente
La respuesta fue: comenzar de nuevo, hacer todo lo mismo pero crear un nuevo perfil de aprovisionamiento e instalarlo. Eso funciono. Inspeccionar todos los detalles (derechos en la provisión móvil) se ve exactamente igual a todo en mi pregunta aquí. Pero ahora funciona. Apple: ¿WAT?
Por supuesto, habría sido obvio hacer esto si fuera posible eliminar los perfiles de aprovisionamiento. Pero como eso no es posible, no quería saturar nuestro equipo con un montón de perfiles de prueba. Aún así, finalmente perdió la paciencia y lo intenté de todos modos, y terminó funcionando. Whatevs.
fuente
Eliminar el antiguo perfil de aprovisionamiento de XCode en el Organizador.
Luego, genere un nuevo perfil de aprovisionamiento para el mismo ID de paquete en el portal de aprovisionamiento de iOS (después de haber habilitado la inserción).
Importe el nuevo perfil de aprovisionamiento en XCode, configúrelo en la configuración de compilación de su aplicación.
Construye, corre, funciona.
Solo lo hice.
Me tomó 10 minutos desde el error hasta el éxito.
fuente
XCode 6.1.1 y varias cuentas de desarrollador de Apple
Otra respuesta para esta combinación ya bastante completa: me encontré con este problema nuevamente hoy, y esta vez se debió a que tenía varias cuentas de Apple. Primero necesitaba agregar la segunda cuenta de desarrollador en XCode> Preferencias> Cuentas> +
Asegúrese de que la capacidad de notificación push esté activada
A continuación, necesitaba habilitar explícitamente la compra desde la aplicación en la aplicación (no tenía que hacer esto anteriormente). XCode> (la ventana de la aplicación)> Objetivos> Capacidades> Compra en la aplicación activada (y en esta etapa me dieron la opción de elegir el certificado correcto)
Tenga en cuenta que ya había agregado el certificado Push habilitado haciendo doble clic en Finder.
fuente
(Xcode 5) Bueno, después de pasar una hora resolví mi problema. Incluso si vuelve a generar el archivo de aprovisionamiento en Xcode 5, debe actualizar manualmente su cuenta. Solo cambié el archivo de aprovisionamiento en la pestaña Organizador que no funcionó, Xcode siguió compilando con el antiguo archivo de aprovisionamiento.
Así que ve a
Luego actualice sus archivos de aprovisionamiento.
fuente
Mi problema era simplemente que estaba firmando con el perfil de aprovisionamiento de comodines administrado por Xcode.
Después de crear un perfil específico de la aplicación (y lo descargué, hice doble clic en él y me aseguré de que mi configuración de compilación se refiriera a él), recibí con éxito un token de dispositivo APNS.
fuente
Tuve el mismo problema que todos los demás y probé todos los trucos anteriores, nada funcionó. Incluso eliminé y comencé de nuevo con una cuenta de desarrollador diferente.
Lo que funcionó para mí al final fue
No sé si puede habilitarlo para una aplicación comodín, pero después de probar al menos 12 sugerencias diferentes y perder unos días, espero que esto ayude a alguien
fuente
Menciona un perfil de aprovisionamiento pero no veo ninguna mención de un perfil de Apple Push.
Para usar Push debe tener un perfil de inserción (hay dos, uno para desarrollo y otro para lanzamiento). Una vez que lo haya creado, deberá asegurarse de que contenga los certificados relevantes (consulte la sección EDITAR a continuación).
Este es un excelente tutorial que lo guiará a través de todos los pasos:
http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12
Me tomaría a mí, o a cualquier otra persona, horas y horas escribir una respuesta detallada detallada como este tutorial, por lo que no voy a intentar ni reclamar la recompensa cuando este tutorial ya existe.
PD: Creo que ya no necesita derechos, esto es algo heredado.
EDITAR: también debe verificar que tiene los perfiles necesarios en el dispositivo: vaya a la configuración, luego a los perfiles generales, verifique que sus perfiles estén en la lista, especialmente el perfil push, por supuesto. También puede verificar esto desde la sección Organizador de XCode. En Organizer hay dos secciones que dicen Provision Profiles: una en la parte superior izquierda de la Biblioteca (estos son los perfiles en XCode que usa para firmar, etc.) También verá una sección llamada Provisioning Profiles para el dispositivo que está conectado, esto es el perfil que está instalado en el teléfono. Si no los tiene instalados en el teléfono, puede descargarlos del sitio web del portal de aprovisionamiento, luego haga clic en el botón Agregar en la parte inferior de la ventana del Organizador.
Mientras esté en el portal de aprovisionamiento, también debe verificar que el perfil de inserción de Apple incluya los certificados: - haga clic en Aprovisionamiento en el menú de la izquierda - verá una lista de su perfil, seleccione EDITAR el perfil de inserción de Apple - verá una sección de certificados, con una lista de desarrolladores o evaluadores, etc. que tenga en su proyecto, asegúrese de que la casilla esté marcada para ellos. - también verá una sección de dispositivos, asegúrese de que se haya agregado el dispositivo que está probando.
Si tiene algún perfil antiguo en XCode o en el dispositivo, elimínelos y descargue / actualice / instale todos los nuevos perfiles desde el portal de aprovisionamiento
fuente
Me encontré con este mismo problema yo mismo. Para mí, el problema era que el nombre de mi producto ($ TARGET_NAME) no estaba en mayúscula de la misma manera presentada en el certificado proporcionado por apple. Por ejemplo, tenía com.companyid.APNDemo mientras que el certificado de Apple estaba usando com.companyid.apndemo.
Cambié mi objetivo a minúsculas y funcionó. Nota: La clave para mí fue que la configuración de firma de códigos en Configuración de compilación se estableció en mi certificado de desarrollador predeterminado; no el perfil de aprovisionamiento APNTest.
fuente
Muchas de las respuestas anteriores son correctas. Sin embargo, parece haber más de un posible error cuando se trata de esto.
El que tuve fue un problema de capitalización con mi ID de aplicación. El ID de mi aplicación por alguna razón no estaba en mayúscula, pero sí. Una vez que recreé la ID de la aplicación con las mayúsculas correctas, todo funcionó sin problemas. Espero que esto ayude. Frustrante como el infierno sin embargo.
PD: si aún no funciona, intente editar el campo de identidad de firma de código manualmente con "editar". Cambie la segunda línea con el nombre del perfil de aprovisionamiento correcto.
fuente
Me llevó horas resolverlo. Dado que alguien usa scripts personalizados para firmar y empacar mientras que otros usan xcode, solo hay una forma de verificar qué terminó en su aplicación. Volcar sus derechos con
codesign --display --entitlements :- path/to/MyApp.app
y comprobar
aps-environment
yapplication-identifier
.fuente
Este error puede ocurrir cuando su certificado ha expirado.
La solución es renovar el certificado y firmar la solicitud con él.
fuente
Debe asegurarse de tener en sus perfiles de aprovisionamiento ( https://developer.apple.com/account/ios/profile/ ) un perfil de distribución de iOS.
Cuando cargue desde xCode a la App Store, asegúrese de tener el entorno aps en los derechos. De lo contrario, descárguelos de Ver cuentas -> Ver detalles -> Descargar todo.
fuente
Tuve un problema similar He estado rebotando entre XCode 7 y 8 por una variedad de razones. Una vez que use 8 para construir, necesitará usar 8. Simplemente usé Xcode 8 y apliqué algunos de los cambios sugeridos anteriormente y funcionó.
fuente
recrear archivos provisionales solucionó todos mis problemas.
fuente
Parece que hay algo peculiar con los derechos 'automáticos' en Xcode 4.6.
Hay un archivo Entitlement.plist para cada SDK en:
Una solución alternativa que se me ocurrió fue editar este archivo y agregar la clave de entorno aps furtivo manualmente de la siguiente manera:
Luego, Xcode está generando el archivo Xcent correcto, que contiene la clave de entorno aps en:
Puede localizar dónde se crea su archivo Xcent utilizando el Log Navigator de Xcode,
busque "ProcessProductPackaging".
Desafortunadamente, esta es la única forma en que encontré que soluciona el problema .
(y finalmente puede obtener correctamente el token de inserción ahora)
Solo me pregunto si hay otra solución más elegante disponible.
Consulte mi pregunta SO para obtener más detalles al respecto:
el derecho automático Xcode 4.6 no funciona: "no hay un entorno aps válido"
fuente
Antes de eliminar y regenerar AppIDs / Profiles, asegúrese de que su Biblioteca y Dispositivo tengan los mismos (y correctos) perfiles instalados.
Comencé a ver este error después de migrar a una nueva computadora. Push había estado funcionando correctamente antes de la migración.
El problema era (duh) que no había importado los perfiles a la biblioteca Xcode en la nueva máquina (en Organizador / Dispositivos en Biblioteca-> Perfiles de aprovisionamiento).
La parte confusa fue que el DISPOSITIVO ya tenía los perfiles correctos y se mostraban como se esperaba en la configuración de compilación, por lo que todo parecía correcto allí, pero la BIBLIOTECA XCode no los tenía, por lo que estaba firmando la aplicación con ... ?? ?
fuente
Esto fue lo que me arregló. (Ya había intentado activar / desactivar las capacidades, recrear el perfil de aprovisionamiento, etc.).
En la pestaña Configuración de compilación , en Derechos de firma de código , mi archivo .entitlements no era un enlace para todas las secciones. Una vez que lo agregué a la sección Cualquier SDK , se resolvió el error.
fuente
Probé todas las respuestas enumeradas aquí, pero nadie resolvió mi problema. En mi caso, este error se debe a mi error tonto en la creación de Appid. Utilicé la ID de la aplicación Wildcard en lugar de la ID explícita de la aplicación causó el problema
Si desea que una aplicación reciba notificaciones remotas (notificación push), debe usar una ID de aplicación explícita , como com.tutsplus.push , en lugar de com.tutsplus. *
Encuentra la captura de pantalla,
fuente