使用核心服务和 Objective-C 在 MacOS Catalina 上创建本地组

Creating local group on MacOS Catalina using Core Services and Objective-C

如何使用 Core Services. 创建本地群组?核心服务的文档说 "The Core Services Identity Reference allows developers to support user and group creation.." 但没有关于如何做到这一点的示例。

更新。这是我到目前为止的代码,但它不起作用并且 ErrorCode return -2,错误描述为空。真的很难找到任何解释如何做的文档。还有 0 个关于错误代码的信息。


    CFStringRef realName = CFStringCreateWithCString(NULL, "newGroupTest",
                                              kCFStringEncodingMacRoman);

    CFStringRef posixName = CFStringCreateWithCString(NULL, "newgrptst1", 
                                              kCFStringEncodingMacRoman);

    AuthorizationRef auth;
    OSStatus status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, 
                                                kAuthorizationFlagDefaults, 
                                                &auth);

    CSIdentityAuthorityRef authority = CSGetDefaultIdentityAuthority();
    CSIdentityRef identity = CSIdentityCreate(NULL, kCSIdentityClassGroup, realName,
                                       posixName, kCSIdentityFlagNone, authority);

    CFErrorRef error;
    BOOL success = CSIdentityCommit(Identity, auth, &error);

    if(!success)
    {
        CFIndex index = CFErrorGetCode(error);
        CFStringRef desc = CFErrorCopyDescription(error);
        const char* cDesc = CFStringGetCStringPtr(desc, CFStringGetSystemEncoding());  
    }

找到问题所在。我没有使用正确的身份权限。要创建一个本地组,您需要使用 CSGetLocaldentityAuthority() 来获取本地身份授权,该授权存储系统本地的身份,而不是 CSGetDefaultIdentityAuthority()代表网络权限。