Mac 开发(二) 苹果沙盒机制sandbox 苹果官方文档详解

Mac 开发(二) 苹果沙盒机制sandbox 苹果官方文档详解

1. app 沙盒 checklist

如果你已经按照本书的指导方针采用了应用沙箱,你应该准备好通过Mac应用商店或直接向用户分发你的应用。但在此之前,每次发布应用程序的新更新时,使用这个检查表来验证应用程序是否遵循了最佳实践。

  • 确保你的应用程序使用了它的权利文件中的每一个权利。如果你的应用程序不需要授权,把它从授权文件中删除。
  • 确保你的应用包中包含的所有Mach-O可执行文件都启用了沙箱。每个Mach-O可执行文件都必须有一个授权文件,并请求com.apple.security.app-sandbox entitlement.权限。这包括XPC服务和请求com.apple.security.inherit的权限。他们还必须申请 com.apple.security.app-sandbox 权限。

清单5-1在可执行的Mach-O二进制文件上运行file命令。

$ file /Applications/Safari.app/Contents/MacOS/Safari
/Applications/Safari.app/Contents/MacOS/Safari: Mach-O universal binary with 2 architectures
/Applications/Safari.app/Contents/MacOS/Safari (for architecture i386): Mach-O executable i386
/Applications/Safari.app/Contents/MacOS/Safari (for architecture x86_64): Mach-O 64-bit executable x86_64

清单5-2在不可执行的Mach-O二进制文件上运行file命令。

$ file /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation: Mach-O universal binary with 2 architectures
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (for architecture i386): Mach-O dynamically linked shared library i386

您可以使用以下命令查找已编译的应用程序包中的所有Mach-O可执行文件。

find -H YourAppBundle -print0 | xargs -0 file | grep "Mach-O .*executable"
  • 确保授权中指定的每个文件系统路径都以'/'开头。这包括绝对路径和相对于当前用户主目录的路径。另外,请确保“~”字符不会出现在与用户主目录相关的路径中。
  • 确保你的应用程序不是为了让它跳过打开或保存对话框来为用户读取或写入文件而请求文件访问异常。例如,对DesktopDocuments文件夹的访问必须始终由用户发起。不要为这些位置请求异常。
  • 确保你的应用程序不是为了允许它访问另一个应用程序的数据或系统的数据而请求文件访问异常。沙箱应用程序不能依赖于对它们没有创建或没有被显式访问的文件的读或写访问。
  • 确保你的应用程序没有为它已经可以访问的位置请求文件访问异常。每个沙箱应用程序都被隐式地授予访问其自身容器之外系统上的各种目录的权限。这些目录包含所有应用程序操作的通用文件,例如/bin/System/Library/Frameworks。请求这些位置的异常是多余的。在请求异常之前,您应该能够演示一个用例,如果不存在异常,该用例将会遇到沙盒冲突。
  • 如果你的应用程序请求com.apple.security.temporary-exception.apple-events权限或com.apple.security.temporary-exception.mach-lookup.global-name权限,确保您为权利的值提供了字符串数组,这在权限键引用中有详细说明。在为这些权利指定值时要具体。没有一个值可以允许你的应用访问用户系统上安装的每个应用。
  • 如果手动编辑权限文件,而不是使用Xcode中的属性列表编辑器,请确保没有引入任何语法错误。授权文件必须包含有效的属性列表结构。可以使用plutil命令检查授权文件中的语法错误。一个常见的错误是在指定布尔值时输入YES/NO,而不是语法正确的true/false。

清单5-3在有语法错误的权利文件上运行plutil命令。

$ plutil Invalid-Entitlements.plist
Invalid-Entitlements.plist: Encountered unknown tag YES on line 6

清单5-4在语法正确的授权文件上运行plutil命令。

$ plutil Valid-Entitlements.plist
Valid-Entitlements.plist: OK

2. App沙盒快速搭建

在这个快速启动的过程中,您将获得一个macOS应用程序并在沙箱中运行。您验证应用程序确实是沙箱的,然后学习如何排除故障并解决一个典型的应用沙箱错误。你使用的应用程序是Xcode,活动监视器,终端和控制台。

2.1 创建Xcode工程

2.2 确保APP沙盒化

2.3 解决App沙盒冲突

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值