使用适用于macOS App的App Sandbox

沙盒是保持应用程序数据访问可控的想法。

每个硬币都有两个面。 让我们看看两者。

没有沙箱

传统上,Mac Apps没有沙盒,开发人员可以完全访问计算机中的所有资源。 例如,一个人可以从任何位置存储和读取文件。

通常,默认情况下会将相同类型的文件放在一起。 以下是一些常见的路径:

  #文件 
〜/图书馆/应用程序支持/com.abc.MyApp/
  #NSUserDefaults 
〜/ Library / Preferences / com.abc.MyApp.plist
  #缓存 
〜/图书馆/应用程序支持/com.pinterest.PINDiskCache.mycache/

在此示例中,“ com.abc.MyApp”是我的应用程序的捆绑标识符。 我正在使用PINCache来存储缓存,并将其持久化到磁盘空间。 您会注意到PINCache所存储的文件与应用程序文档处于同一级别。

非沙盒的问题

我知道有些开发人员喜欢完全可配置的环境。 但是,此方法存在一些问题:

1)骇客

由于应用程序可以访问整个系统,因此如果它被恶意代码注入,则系统可能会被黑客入侵

2) 杂乱的文件存储

由于文档,设置,缓存存储在不同的位置,因此花费了更多的开发工作。 例如,如果我想清理文件以重置应用程序,则应前往各个位置进行清理。

使用应用沙箱

随着iOS的发布,这一概念成为一种规范。 每个iOS应用程序都应带有自己的沙箱。 因此,开发人员应要求特定的权限才能获得系统中的其他资源。

为了通过Mac App Store分发应用程序,开发人员必须打开App Sandbox授权。

例如,我正在构建一个使用CloudKit同步数据的应用程序。 我将在“传入和传出网络连接”两个框中打勾。 如果要将检索到的CloudKit记录保存到Documents文件夹中的文件中,则应为“ User Selected File”选择“ Read / Write access”。

在沙盒模式下,所有文件都存储在一个容器中。 例如,上一个示例中的位置将变为:

  〜/图书馆/应用程序支持/容器/com.abc.MyApp/Data/图书馆/应用程序支持/ 

沙盒问题

主要问题来自首次设置。 此外,访问系统资源也有限制。

1)代码签名证书

处理证书和代码签名问题总是很烦人。 由于需要授权,开发人员应确保正确生成了配置文件。 在Xcode 8中,它将为您管理证书,应用程序ID和配置。 强烈建议这样做。 有时,它仍然不起作用。 简单的解决方案是关闭然后重新打开。 该过程将再次运行并为您配置。

2)权限

确保根据需要在沙盒中获取适当的权限。 如果您错过了它,该应用程序将不会给您任何错误,也不会崩溃。 处理选项时要格外小心。

3)使用GUI进行设置

您可以手动修改权利文件,但是它将与Xcode界面不同步。 这可能会导致代码签名问题。