gpt4 book ai didi

macos - 在沙盒应用中访问桌面

转载 作者:行者123 更新时间:2023-12-04 21:59:06 25 4
gpt4 key购买 nike

我正在构建一个具有打开新截屏功能的应用程序。我想使用 Mac App Store 分发它。不幸的是,它需要被沙盒化。

为了找到新的截图,我运行了一个 NSMetaDataQuery。它返回一些条目,但不幸的是我无法获取它们的 URL,因为它们在桌面上(在我的应用程序的沙箱之外)。

我怎样才能解决这个问题 ?

这是一些代码

query = [[NSMetadataQuery alloc] init];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(queryUpdated:) name:NSMetadataQueryDidStartGatheringNotification object:query];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(queryUpdated:) name:NSMetadataQueryDidUpdateNotification object:query];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(queryUpdated:) name:NSMetadataQueryDidFinishGatheringNotification object:query];

[query setDelegate:self];
[query setPredicate:[NSPredicate predicateWithFormat:@"kMDItemIsScreenCapture = 1"]];
[query startQuery];
numberOfScreenshots = [query resultCount];
[self uploadToAmazonS3:[[[query results]objectAtIndex:([query resultCount]-1)]valueForAttribute:NSMetadataItemURLKey]];

谢谢

最佳答案

在不征得用户许可的情况下,您只能访问音乐、电影、图片和下载文件夹。
Entitlements

您必须要求用户授予您对桌面文件夹的访问权限。然后使用称为安全范围书签的机制,在 AppSandboxDesignGuide 中了解更多信息.

  • 使用 NSOpenPanel 选择目录。
  • 保存书签以备将来使用,例如在 NSUserDefaults 中。
  • 获取访问权限

  • 1 和 2
        NSOpenPanel *openPanel = [[NSOpenPanel alloc] init];
    [openPanel setCanChooseFiles:NO];
    [openPanel setCanChooseDirectories:YES];
    [openPanel setCanCreateDirectories:YES];

    [openPanel beginWithCompletionHandler:^(NSInteger result){
    if (result == NSFileHandlingPanelOKButton) {
    for (NSURL *fileURL in [openPanel URLs]) {
    NSString *filename = [fileURL path];
    [[NSUserDefaults standardUserDefaults] setObject:filename forKey:@"PathToFolder"];

    NSError *error = nil;
    NSData *bookmark = [fileURL bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
    includingResourceValuesForKeys:nil
    relativeToURL:nil
    error:&error];
    if (error) {
    NSLog(@"Error creating bookmark for URL (%@): %@", fileURL, error);
    [NSApp presentError:error];
    } else {
    [[NSUserDefaults standardUserDefaults] setObject:bookmark forKey:@"PathToFolder"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    }
    break;
    }
    }
    }];

    3.
        NSError *error = nil;
    NSData *bookmark = [[NSUserDefaults standardUserDefaults] objectForKey:@"PathToFolder"];
    bookmarkedURL = [NSURL URLByResolvingBookmarkData:bookmark options:NSURLBookmarkResolutionWithSecurityScope relativeToURL:nil bookmarkDataIsStale:nil error:&error];
    BOOL ok = [bookmarkedURL startAccessingSecurityScopedResource];
    NSLog(@"Accessed ok: %d %@", ok, [bookmarkedURL relativePath]);

    所以,就这样吧。

    关于macos - 在沙盒应用中访问桌面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12153504/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com