iOS SandBox 之应用程序沙盒快速入门

来源:互联网 发布:淘宝卖家账号注册 编辑:程序博客网 时间:2024/06/10 03:47

App Sandbox Quick Start

应用程序沙盒快速入门
在这个快速启动你的OS X应用程序启动并运行在沙盒中。您验证的应用程序确实沙盒,然后学习如何排查并解决一个典型的应用程序沙箱错误。您使用的应用程序是Xcode的,钥匙串访问,活动监控器和控制台。

Create the Xcode Project

创建Xcode项目
在此快速入门创建应用程序使用WebKit的Web视图,从而使用网络连接。在应用程序沙箱,网络连接不工作,除非您特别允许,使之成为一个很好的了解沙盒的示例应用程序。
bullet
To create the Xcode project for this Quick Start




Enable App Sandbox
启用应用程序沙盒
重要提示:对于Xcode的6或更高版本,阅读App Distribution Quick Start 如何建立你的团队调配配置文件,使应用于程序沙箱。

启用应用程序沙箱中的Xcode目标编辑器中选择一个复选框。
在Xcode中,点击项目导航项目文件并单击AppSandboxQuickStart目标,如果他们没有被选中。查看目标编辑器的摘要选项卡。

为了使应用程序沙箱项目
1.在目标编辑器的摘要选项卡中,确保“使用权利文件”复选框被选中,并指定这些权利的文件。
  一项权利是一个键值对,在属性列表文件中定义,赋予特定的功能或安全许可的目标。
  当您单击启用权利,Xcode中自动检查代码签名应用程序复选框并启用应用程序沙箱复选框。总之,这些都是使应用程序沙箱中必不可少的项目设置。
  当您单击“使用权利文件”,Xcode中也创造了.entitlements属性列表文件,在Project Navigator可见。当您使用图形界面的权利在目标编辑器,Xcode的更新属性列表文件。

2.如果你使用Xcode的旧版本不具有启用iCloud的复选框,清除iCloud的权利字段的内容。
   该快速入门不使用的iCloud。因为旧版本的Xcode,当您启用权利,删除它们如下自动添加的iCloud权利价值:
   在目标编辑器的摘要选项卡,选择,然后删除iCloud的key-value存储字段的内容。
   点击iCloud的集装箱领域的最上面一排,然后单击减号按钮。


在这一点上,在快速启动,您已启用应用程序沙箱,但尚未提供的Xcode项目代码签名的身份。如果你已经配置你的系统有签约的身份,Xcode中应该默认使用开发的身份在签署这个程序。
如果您的系统没有配置开发的身份并尝试构建项目,构建就会失败;然后再继续本教程中,创建作为应用程序分发指南描述签名标识的代码。

现在,构建应用程序。


Confirm That the App Is Sandboxed

构建和运行快速启动应用程序。该窗口打开,但如果应用程序是成功沙盒,不显示网页内容。这是因为你还没有授予访问权限的网络连接。

除了封锁的行为,具体有三个迹象表明,一个OS X的应用程序是成功沙盒。

要确认快速启动应用程序是成功沙盒
在Finder中,看看 ~/Library/Containers/文件夹的内容。

如果快速启动应用程序是沙箱,现在您的应用程序命名的容器文件夹。这个名字包含该项目的公司标识,因此完整的文件夹名称将是,例如,com.yourcompany.AppSandboxQuickStart。

系统创建的应用程序的容器文件夹,用于给定用户,该用户第一次运行应用程序。

2.在活动监视器中,检查系统识别应用程序的沙盒。

启动活动监控(在/ Applications / Utilities中可用)。
在活动监视器中,选择查看>列。
确保沙盒菜单项被选中。

在沙盒列中,确认为快速启动应用程序的价值是肯定的。
为了更方便地查找在活动监视器的应用程序,在过滤器字段中输入快速启动应用程序的名称。

检查应用程序二进制是沙箱。

codesign -dvvv --entitlements :- executable_path
其中,executable_path是应用程序的主执行程序二进制文件的完整路径(例如,Quick Start.app/Contents/MacOS/Quick Start)。
重要提示:上述步骤是足够快速启动应用程序,但不足以包含嵌入的助手应用程序的应用程序,XPC服务,或其他工具。欲了解更多信息,请阅读External Tools, XPC Services, and Privilege Separation.

提示:如果当您尝试运行它,特别是通过接收EXC_BAD_INSTRUCTION信号的应用程序崩溃,最可能的原因是,先前已运行的同捆标识符,但不同的代码签名的沙盒应用程序。这崩溃一经推出是一个应用程序沙箱安全功能,防止伪装成另一个,从而获得访问其他应用程序的容器一个应用程序。
您将学习如何设计和构建您的应用程序,鉴于此安全特性,在App Sandbox and Code Signing.

Resolve an App Sandbox Violation

解决一个应用程序沙箱冲突
如果您的应用程序试图做一些应用程序沙箱不允许出现一个应用程序沙箱冲突。例如,您已经看到了在这个快速启动的沙盒应用程序是无法从该网页内容。在访问系统资源的细粒度限制是应用程序沙箱如何提供保护应的应用程序成为破坏恶意代码的心脏。

对应用程序沙箱侵犯最常见的来源是你在Xcode中指定的授权设置和您的应用程序的需求之间的不匹配。在本节中,您观察到,然后纠正应用程序沙箱冲突。

要诊断一个应用程序沙箱冲
1.构建和运行快速启动应用程序。
该应用程序可以正常启动,但无法显示其awakeFromNib中方法中指定的网页(如您在确认该应用程序是沙箱以前已经观察到的)。您正确的沙盒应用程序之前,因为显示的网页的工作,很适合在这种情况下,怀疑是应用程序沙箱冲突。
打开控制台应用程序(在/Applications/Utilities/),并确保所有邮件将在侧边栏选择。


在控制台窗口中的过滤器字段中输入sandboxd显示唯一的应用程序沙箱侵犯。


sandboxd是应用程序沙箱守护沙盒违反该报告的名称。有关信息,如显示在控制台中,类似于以下内容:
../Art/sandbox_errors.png

产生这些控制台消息的问题是,快速启动应用程序还没有的权利的出站网络访问。


提示:要查看完整的回溯的任何侵犯,请点击附近对应的控制台消息的右边缘的回形针图标。

--------------------
在先前的任务的步骤说明了一般模式用于标识应用程序沙箱侵犯:

1.确认冲突发生只与应用程序沙箱中的项目启用。
2.挑起冲突(如通过尝试使用网络连接,如果你的应用程序是专门做的)。
3.看在控制台sandboxd消息。
还有用于解决此类违法行为简单,一般模式。


通过添加适当的授权解决应用程序沙箱冲突
1.退出快速启动应用程序。
  在目标编辑器的摘要选项卡中,查找对应于报道sandboxd侵犯的权利。
2.在这种情况下,主错误是拒绝网络出站。相应的权利是允许拨出网络连接。
3.在目标编辑器的摘要选项卡,选中允许传出的网络连接复选框。
   这样做应用的真正价值,为需要的权利,到Xcode项目。
4.构建并运行应用程序。

预期的网页现在显示的应用程序。此外,在控制台中没有新的应用程序沙箱冲突的消息。















































0 0