如何使用 Mac CLI 应用程序 (XCode 14) 访问联系人?

问题描述 投票:0回答:2

我在访问 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 项目中使用吗?

objective-c xcode macos command-line-interface
2个回答
0
投票
使用XCode 15.1 (15C65),打开TARGETS-Info,添加

NSContactsUsageDescription

使用代码打开Mac App。


0
投票
有两个问题:

    您正确地提到访问联系人需要
  1. Info.plist
    。
    您可以在目标的构建设置中添加 
    Info.plist
    • 首先添加一个新的属性列表文件到目标
    • 将内容替换为(将MyCLI替换为真实姓名)
    <!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");
       
© www.soinside.com 2019 - 2024. All rights reserved.