【问题标题】:Get "GeneratedUID" programmatically in COCOA在 COCOA 中以编程方式获取“GeneratedUID”
【发布时间】:2014-07-18 15:53:03
【问题描述】:

我正在尝试以编程方式获取系统 GeneratedUID,我可以使用“dscl .-search /Users GeneratedUID 00052AE8-5000-6000-9007-666F6B666A66”从命令行获取 UID

谁能帮助如何以编程方式获取此 GeneratedUID?

【问题讨论】:

标签: macos cocoa uuid


【解决方案1】:

这对我有用。它返回为当前用户找到的第一个 GeneratedUID,如果没有找到,则返回 nil。

有很多错误需要处理,使得逻辑比实际应该的要复杂。

-(NSString*) getGeneratedUID {

    NSString* retval = nil;
    ODSession *mySession = [ODSession defaultSession];
    NSError *err;
    ODNode *myNode = [ODNode nodeWithSession:mySession type:kODNodeTypeAuthentication error:&err];
    NSString* username = NSUserName();

    ODQuery *myQuery = [ODQuery  queryWithNode: myNode
                                forRecordTypes: kODRecordTypeUsers
                                     attribute: kODAttributeTypeRecordName
                                     matchType: kODMatchEqualTo
                                   queryValues: username
                              returnAttributes: kODAttributeTypeStandardOnly
                                maximumResults: 0
                                         error: &err];

    if (err) {
        NSLog(@"Error creating current user query: %@", [err localizedDescription]);
    }
    else {
        NSArray* queryResults = [myQuery resultsAllowingPartial:NO error:&err];

        if (err) {
            NSLog(@"Error executing current user query: %@", [err localizedDescription]);
        }
        else {
            if ( [queryResults count] > 0 ) {

                ODRecord* firstQueryResult = [queryResults objectAtIndex:0];
                NSArray* uidValues = [firstQueryResult valuesForAttribute:@kDS1AttrGeneratedUID error:&err];

                if (err) {
                    NSLog(@"Error getting GeneratedUID attribute for current user: %@", [err localizedDescription]);
                }
                else {
                    if ([uidValues count] > 0) {
                        retval = (NSString*) [uidValues objectAtIndex:0];
                    }
                    else {
                        NSLog(@"No GeneratedUID values for current username: %@", username);
                    }
                }
            }
            else {
                NSLog(@"No results from current user query for username: %@", username);
            }
        }
    }

    return retval;
}

【讨论】:

    【解决方案2】:

    只需使用以下代码检索 UID....在添加代码之前导入 SecurityConfiguration.framework..

    NSString* GetConsoleUser(uid_t* p_uid, gid_t* p_gid) {
      NSString* name = (NSString*)CFBridgingRelease(SCDynamicStoreCopyConsoleUser(
                                                              NULL, p_uid, p_gid));
    
      return name ;
    } 
    

    您必须围绕字符串进行操作才能获得“UID”。

    【讨论】:

      猜你喜欢
      • 2010-09-25
      • 1970-01-01
      • 2010-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多