Mac App Store 沙盒文件异常不起作用

问题描述 投票:0回答:1

我在 Xcode 中有一个项目,它在没有启用沙箱的情况下正常工作,但我希望在 Mac App Store 上发布,所以我需要启用沙箱。

我的应用程序需要写入另一个应用程序的

~/Library/Application Support
文件夹,因此我将临时文件例外添加到权利文件中 - 但它似乎不起作用。

这是一些细节:

  • 我已在目标的功能页面中启用了应用程序沙箱;
  • 我的
    .entitlements
    文件有一个
    com.apple.security.temporary-exception.files.home-relative-path.read-write
    的数组条目。它有一个子项,一个字符串当前设置为“/”(出于测试目的 - 一旦我让它工作,我将缩小范围);
  • 我使用以下内容设置我的写作 URL,然后向其附加适当的路径组件:

    let applicationSupportURL = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first

  • 尽管如此,我看到我的应用程序正在内部执行操作

    /Users/<username>/Library/Containers/<appID>/Data/Library/Application Support/
    ...

我在 macOS 10.13.6 下运行 Xcode 9.4.1。

有什么想法吗?

xcode macos mac-app-store appstore-sandbox
1个回答
0
投票

启用沙箱后,FileManager 返回相对于应用程序容器的路径,而不是用户的真实主目录。

奎因“爱斯基摩人!”建议使用

getpwuid
来获取用户的真实主目录,如下所示:

func realHomeDirectory() -> URL? {
    guard let pw = getpwuid(getuid()) else { return nil }
    return URL(fileURLWithFileSystemRepresentation: pw.pointee.pw_dir, isDirectory: true, relativeTo: nil)
}

这将允许访问通过

com.apple.security.temporary-exception.files.home-relative-path.*
配置的路径,但这些例外可能不会得到 App Store 审核的批准。

接下来我们来说说App Review。首先,请注意,我不为应用程序审核工作,因此我无法代表他们做出明确的声明。不过,我的理解是,App Review 会仔细审核任何使用文件访问临时异常的情况。我怀疑你能否让他们相信你的例外是合理的。

© www.soinside.com 2019 - 2024. All rights reserved.