Xcode 8: diferentes derechos para cada esquema que causa errores

Encontré un problema con XCode 8 donde los files .entitlements no están siendo referencedos correctamente para cada esquema. Básicamente, mi file Debug .entitlements está siendo referencedo para mi esquema de Liberación. Esto está causando un problema porque implementamos la nueva lógica de notificación push Rich y eso requiere el uso de grupos de aplicaciones.

Estoy usando dos equipos diferentes (Desarrollo y Producción), por lo que habrá dos grupos de aplicaciones específicos.

¿Alguien sabe cómo resolver este problema?

Gracias

Encontré una solución Cree un file .entitlements agregue esto:

 <key>aps-environment</key> <string>$(APS_ENVIRONMENT)</string> <key>com.apple.security.application-groups</key> <array> <string>$(APP_GROUP)</string> </array> 

Luego, en Target> Build settings Establezca el mismo file .entitlements en Signing> Code Signing Entitlements Agregue la configuration definida por el usuario para APS_ENVIRONMENT y APP_GROUP configurando el grupo correcto para cada objective.

Entonces, según el objective, Xcode utilizará lo que configuró para APS_ENVIRONMENT y APP_GROUP.

También puedes hacer esto en plist … hizo una limpieza increíble hoy.

Aunque la solución de Tim en su mayoría funcionó para mí, Xcode se molestó y dijo que el aprovisionamiento automático no podía resolver problemas con el file de derechos. No creo que le haya gustado la variable.

Nuestra solución fue:

  1. Habilite todos los grupos de aplicaciones en cada objective que necesite acceso.

Habilitar todos los grupos de aplicaciones.

  1. Defina una configuration definida por el usuario a nivel de proyecto llamada PROJECT_APP_GROUP para el nombre del grupo de aplicaciones, vaya a Proyecto -> Configuración de creación, click el button "+" y select "Agregar configuration definida por el usuario".

Configuración PROJECT_APP_GROUP definida por el usuario

  1. Establezca una variable en el file info.plist para cada objective que necesita acceso a su grupo de aplicaciones.

introduzca la descripción de la imagen aquí

  1. Luego, acceda al grupo de aplicaciones correcto en time de ejecución al get la variable info.plist file info.plist de su destino.

     + (NSString *)appGroupIdentifier { // this method returns the app group identifier by fetching it from the info.plist file. // this string is dynamic based on build scheme. for instance group.ourApp vs. group.ourApp-dev return [[[NSBundle mainBundle] infoDictionary] valueForKey:@"APP_GROUP"]; } 

O

Ahora que lo pienso, si tiene macros de preprocesador configuradas para cada compilation, podría ser más fácil hacer algo como:

 + (NSString *)appGroupIdentifier { #ifdef BUILD_DEV return @"group.myApp-dev"; #elif BUILD_STAGING return @"group.myApp-staging"; #else return @"group.myApp"; #endif }