有没有办法获取应用程序的最后打开的文件?我知道使用LSSharedFileListCreate你可以获得用户的全局最新文档数组,但我想知道是否有可能使用cocoa或objective-c获取特定应用程序(如Xcode)的最新文档。
答案 0 :(得分:3)
我认为没有公共API可以获取您自己以外的应用程序的最新文档。最近的文件在~/Library/Preferences
中保存为plists,因此您可以直接阅读这些文件。
但是请注意,这些plist的格式可能会随着未来的操作系统升级而改变,因此理想情况下不应该依赖于此。
以下是阅读Xcode最新文档的示例:
NSString *bundleID = @"com.apple.dt.Xcode";
NSString *prefPath = [[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"Preferences"];
NSString *recentFilesFileName = [bundleID stringByAppendingPathExtension:@"LSSharedFileList.plist"];
NSString *recentFilesPath = [prefPath stringByAppendingPathComponent:recentFilesFileName];
NSArray *recentDocumentItems = [[[NSDictionary dictionaryWithContentsOfFile:recentFilesPath] objectForKey:@"RecentDocuments"] objectForKey:@"CustomListItems"];
for (NSDictionary *recentDocumentItem in recentDocumentItems) {
NSString *name = [recentDocumentItem objectForKey:@"Name"];
NSData *bookmarkData = [recentDocumentItem objectForKey:@"Bookmark"];
NSError *error = nil;
NSURL *bookmarkURL = [NSURL URLByResolvingBookmarkData:bookmarkData options:NSURLBookmarkResolutionWithoutMounting | NSURLBookmarkResolutionWithoutUI relativeToURL:nil bookmarkDataIsStale:NULL error:&error];
if (bookmarkURL) {
NSLog(@"File name: %@", name);
NSLog(@"URL: %@", bookmarkURL);
} else {
NSLog(@"Could not resolve URL for file %@: %@", name, error);
}
}
当然,这不适用于沙盒应用程序。
答案 1 :(得分:2)
您可以使用-[NSDocumentController recentDocumentURLs]
,它会检索最近打开的文档的网址数组:
NSArray *array = [[NSDocumentController sharedDocumentController] recentDocumentURLs];