Capabilities 开启Sandbox权限--转载--https://juejin.cn/post/6844904199688290318
应用开发完成提交到App Store时,必须进行沙盒化。切换到工程target设置Tab的Capabilities中。
- 第一项就是App Sandbox开关,点击ON,表示应用使用沙盒。
上图的选项的一些解释如下:
- Network:网络访问控制
Incoming Connections (Server)
: 应用做为Server对外提供HTTP,FTP等服务时需要打开。如果你的App担任服务器角色,需要连接通信需要开启此权限。Outgoing Connections (Client)
: 做为客户端,访问服务器时需要打开。如果你的App需要作为客户端进行socket连接通信需要开启此权限。
- Hardware:硬件资源控 它包含下面这些子项:
Camera
: 如果你需要开启摄像头功能,勾选此项。Audio Input
: 如果你需要获取音频 输入权限(如麦克风),勾选此项。USB
: 如果你需要使用USB传输文件,需要开启此功能 4:Printing
: 如果你需要打印文件里面的内容,需要开启此功能
- App Data:获取系统的联系人,位置,日历服务时需要打开
Contacts
: 如果要访问联系人,需要勾选此项Location
: 如果需要定位,需要勾选此项。Calendar
: 如果需要访问日历,需要勾选此项。
- File Access:文件和用户目录的访问控制,分为禁止
none
,只读,读写3类
User Selected File
:文档类应用或者需要用户选择打开某个文件时,需要选择合适的访问权限.Downloads Folder
: 如果需要访问当前用户 Downloads文件夹,需要勾选此项,可以设置为只读,或者可读可写Pictures Folder
: 如果需要访问当前用户 Pictures文件夹,需要勾选此项,可以设置为只读,或者可读可写Music Folder
: 如果需要访问当前用户 Music文件夹,需要勾选此项,可以设置为只读,或者可读可写Movies Folder
: 如果需要访问当前用户 Movies文件夹,需要勾选此项,可以设置为只读,或者可读可写
特别注意:如果应用中不需要的权限项,一律不要打开。否则App Review团队会拒绝你的应用上架.
3.1.2 Entitlements 直接变xml,开启Sandbox权限
实际上,在沙盒中每个需要访问权限的项都对应一个key,对应的value,YES 或 NO表示是否允许访问。当你选择了项后,都会记录在一个扩展名为.entitlements的plist 的文件中,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<
plist
version
=
"1.0"
>
<
dict
>
<
key
>com.apple.security.app-sandbox</
key
>
<
true
/>
<
key
>com.apple.security.assets.movies.read-write</
key
>
<
true
/>
<
key
>com.apple.security.assets.music.read-only</
key
>
<
true
/>
<
key
>com.apple.security.assets.pictures.read-only</
key
>
<
true
/>
<
key
>com.apple.security.cs.allow-dyld-environment-variables</
key
>
<
true
/>
<
key
>com.apple.security.cs.allow-jit</
key
>
<
true
/>
<
key
>com.apple.security.cs.allow-unsigned-executable-memory</
key
>
<
true
/>
<
key
>com.apple.security.cs.disable-executable-page-protection</
key
>
<
true
/>
<
key
>com.apple.security.cs.disable-library-validation</
key
>
<
true
/>
<
key
>com.apple.security.device.audio-input</
key
>
<
true
/>
<
key
>com.apple.security.device.camera</
key
>
<
true
/>
<
key
>com.apple.security.device.usb</
key
>
<
true
/>
<
key
>com.apple.security.files.bookmarks.app-scope</
key
>
<
true
/>
<
key
>com.apple.security.files.downloads.read-write</
key
>
<
true
/>
<
key
>com.apple.security.files.user-selected.read-write</
key
>
<
true
/>
<
key
>com.apple.security.network.client</
key
>
<
true
/>
<
key
>com.apple.security.network.server</
key
>
<
true
/>
<
key
>com.apple.security.personal-information.photos-library</
key
>
<
true
/>
<
key
>com.apple.security.print</
key
>
<
true
/>
<
key
>com.apple.security.temporary-exception.apple-events</
key
>
<
array
>
<
string
>com.apple.itunes</
string
>
</
array
>
<
key
>com.apple.security.temporary-exception.files.absolute-path.read-write</
key
>
<
true
/>
<
key
>com.apple.security.temporary-exception.shared-preference.read-only</
key
>
<
array
>
<
string
>com.apple.iphoto</
string
>
<
string
>com.apple.photobooth</
string
>
<
string
>com.apple.photos</
string
>
</
array
>
</
dict
>
</
plist
>
复制代码
|
用plist属性显示如下:
应用打包时会对这个文件进行签名。 当应用运行期间要获取某个权限时,系统都会通过.entitlements
去检查应用是否有授权,如果没有就拒绝访问。