rge*_*rge 22 iphone cocoa keychain ios code-signing-entitlements
iOS应用程序可以在运行时发现,检查或以其他方式读取自己的权利吗?
理想情况下,我可以将我的.entitlements文件的整个(已处理)内容作为plist读取.获得应用程序标识符前缀将是可接受的第二好的.
这里的目标包括:允许应用程序使用各种应用程序标识符前缀进行签名,而无需在代码中进行匹配更改; 并且在共享钥匙串访问组存在或不存在的情况下采取不同的行动.这是库代码,因此我对客户端应用程序配置的影响越小越好.
简而言之,没有.权利文件仅在编译时使用,不会复制到应用程序包中.
说明:在开发期间,权利将写入embedded.mobileprovision应用程序包中的文件中.当您的应用程序在App Store上作为IPA发布时,它将不包含embedded.mobileprovision.
AFAIK,你可以做到.例如,要阅读YourFileName.entitlements并获取AppGroup ID,请按照以下步骤操作:
第1步:将您.entitlements的目标添加到目标中"Copy Bundle Resources"
第2步:使用以下源代码:
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
正如其他人在评论中提到的,您的应用程序的签名可执行文件包含嵌入的权利 plist,这表明它应该是可能的。
您将需要使用一些非 ios 公共(但 已记录)的 API。尝试以下代码:
// 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);