在 COCOA 中以编程方式获取“GeneratedUID”
Posted
技术标签:
【中文标题】在 COCOA 中以编程方式获取“GeneratedUID”【英文标题】:Get "GeneratedUID" programmatically in COCOA 【发布时间】:2014-07-18 15:53:03 【问题描述】:我正在尝试以编程方式获取系统 GeneratedUID,我可以使用“dscl .-search /Users GeneratedUID 00052AE8-5000-6000-9007-666F6B666A66”从命令行获取 UID
谁能帮助如何以编程方式获取此 GeneratedUID?
【问题讨论】:
检查这个 - ***.com/questions/10319275/… OS X 上的用户和组信息存储在目录服务中,OpenDirectory.framework (developer.apple.com/library/mac/documentation/networking/…) 提供了一个编程接口。 - 并且“dscl”是开源的 (opensource.apple.com/source/DSTools/DSTools-162/dscl) 所以应该给你一个起点。 【参考方案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”。
【讨论】:
以上是关于在 COCOA 中以编程方式获取“GeneratedUID”的主要内容,如果未能解决你的问题,请参考以下文章
Cocoa - 在情节提要中以编程方式呈现 NSViewController LIKE “显示选项”(不是模态)