macOS允许用户为他们的本地帐户设置个人资料图片。可以在“帐户系统”首选项窗格中修改此图片,并在登录时特别显示。是否可以使用Cocoa或其他系统框架来访问它?
答案 0 :(得分:0)
如具有dscl . -read /Users/my_user_name_here
和JPEGPhoto
属性的Picture
所建议,可以从Open Directory访问该信息。 Open Directory框架相当古老:文档稀疏,示例几乎不存在,但在挖掘过程中,我在Apple存储库中发现了Python test,足以显示如何使用API入门。我终于想到了:
NSData *getODImage(NSString *userName) {
ODNode *local = [ODNode nodeWithSession:ODSession.defaultSession name:@"/Local/Default" error:nil];
if (!local) {
return nil;
}
ODRecord *record = [local recordWithRecordType:kODRecordTypeUsers name:userName attributes:nil error:nil];
if (!record) {
return nil;
}
NSArray *photoAttributes = @[kODAttributeTypePicture, kODAttributeTypeJPEGPhoto];
NSDictionary *details = [record recordDetailsForAttributes:photoAttributes error:nil];
if (!details) {
return nil;
}
NSData *jpegData = [details[kODAttributeTypeJPEGPhoto] objectAtIndex:0];
if (jpegData) {
return jpegData;
}
for (NSString *picturePath in details[kODAttributeTypePicture]) {
NSData *pictureContents = [NSData dataWithContentsOfFile:picturePath];
if (pictureContents) {
return pictureContents;
}
}
return nil;
}
其中userName
是NSUserName()
的结果。这似乎可以在本地快速执行,但是我仍然让它从并发队列运行以避免阻塞主线程。
通过kODAttributeTypePicture
返回的图片路径位于全局/Library
目录中,可从默认沙箱中读取该目录。所有默认用户图片都是这种情况。但是,可能并非总是如此,因此请准备好没有照片。
该用户为网络用户时说的是正确的YMMV;我认为您必须将节点从/ Local / Default更改为其他内容。