verificar puedo plus fiables desarrolladores como apps app activo activar abrir iphone ios cocoa keychain code-signing-entitlements

iphone - puedo - ¿Puede una aplicación de iOS leer sus propios derechos en tiempo de ejecución?



nfc iphone se (3)

¿Puede una aplicación iOS descubrir, inspeccionar o leer sus propios derechos en tiempo de ejecución?

Idealmente, podría leer todo el contenido (procesado) de mi archivo .entitlements como un plist. Obtener solo el prefijo del identificador de la aplicación sería un segundo mejor aceptable.

Los objetivos aquí incluyen: permitir que la aplicación se firme con varios prefijos de identificador de aplicación, sin necesidad de hacer un cambio coincidente en el código; y actuar de manera diferente en presencia o ausencia de grupos de acceso de llavero compartido. Este es el código de la biblioteca, por lo que cuanto menos impongo en la configuración de la aplicación cliente, mejor.


AFAIK, puedes hacerlo. Por ejemplo, para leer YourFileName.entitlements y obtener el ID del grupo de aplicaciones, siga los pasos a continuación:

Paso 1: agregue sus .entitlements a su destino mediante "Copy Bundle Resources"

Paso 2: Usando el código fuente de abajo:

NSString *path = [[NSBundle mainBundle] pathForResource:@"YourFileName" ofType:@"entitlements"]; NSDictionary *dict = [[NSDictionary alloc]initWithContentsOfFile:path]; NSString *suiteName = [[dict objectForKey:@"com.apple.security.application-groups"] firstObject]; // It''s your data


Como se mencionó en otros comentarios, el ejecutable firmado de su aplicación contiene una lista de derechos incrustada, lo que sugiere que debería ser posible.

Deberá usar algunas API no públicas ( but documented ). Prueba el siguiente código:

// Declare the private SecTask functions in your header file void* (SecTaskCopyValueForEntitlement)(void* task, CFStringRef entitlement, CFErrorRef _Nullable *error); void* (SecTaskCreateFromSelf)(CFAllocatorRef allocator); // And call it in your code like this: CFErrorRef err = nil; NSArray* groups = SecTaskCopyValueForEntitlement(SecTaskCreateFromSelf(NULL), CFSTR("com.apple.security.application-groups"), &err);


En resumen, no. El archivo de derechos solo se utiliza en tiempo de compilación y no se copia en el paquete de la aplicación.

Aclaración : durante el desarrollo, los derechos se escriben en el archivo embedded.mobileprovision en el paquete de la aplicación. Cuando su aplicación se publique como una IPA en la tienda de aplicaciones, no contendrá una presentación embedded.mobileprovision .