使用适用于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界面不同步。 这可能会导致代码签名问题。