我在访问 mac cli 应用程序内的联系人时遇到一些问题。 主要问题是该应用程序没有触发请求访问联系人的对话框。一些消息来源指出 NSContactsUsageDescription 应添加到 info.plist 中。在 xcode 的项目中找不到这个 info.plist。然后,一些消息来源称有 xcode 更新,现在在
Targets -> Info
选项卡上添加了权限,但 mac cli 项目中不存在此选项卡。
这是一个代码片段:
#import <Foundation/Foundation.h>
#import <Contacts/Contacts.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
CNAuthorizationStatus status = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];
if (status == CNAuthorizationStatusNotDetermined) {
NSLog(@"Contact access not determined.");
CNContactStore *contactStore = [[CNContactStore alloc] init];
[contactStore requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) {
NSLog(@"Got response");
}];
} else if (status == CNAuthorizationStatusAuthorized) {
NSLog(@"Access granted");
} else {
NSLog(@"Access to contacts is denied or restricted.");
}
}
return 0;
}
运行此输出:
Contact access not determined.
并且应用程序退出并显示代码0
。
如何访问 mac cli 应用程序项目中的联系人?或者设置适当的权限以便触发对话框?
PS。我也尝试过手动添加 info.plist,但没有区别。也许我做错了什么? info.plist 甚至在 mac cli 项目中使用吗?
Info.plist
。 您可以在目标的构建设置中添加
Info.plist
。
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>MyCLI</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>NSContactsUsageDescription</key>
<string>Contacts access needed</string>
</dict>
</plist>
Packaging
将
Create Info.plist Section in Binary
设置为
YES
。
Packaging > Info.plist File
输入相对于项目的路径。
return 0
行之前插入
CFRunLoopRun();
CFRunLoopStop(CFRunLoopGetCurrent());
行之后插入
NSLog(@"Got response");