持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第10天,点击查看活动详情
前言
defaults、plutil、PlistBuddy的区别:
- defaults命令使用domain的概念访问plist文件,而且对命令的文件书写方式要求严格(比如不能带.plist),有的时候还找不到或无法访问非标准目录的,而且对复杂格式数据的鞋操作比较麻烦,但是它的读取操作确比plutil简单。
#显示系统隐藏文件
defaults write ~/Library/Preferences/com.apple.finder AppleShowAllFiles - bool true
-
plutil对于复杂格式的写操作很直观,很类似于对类的操作,而且文件名也是直截了当,就是读数据功能太弱。
-
PlistBuddy可以说具有前面两者的优点,避免了它们各自的缺点,书写也方便。
但是对于系统参数的plist文件操作,还是使用Defaults命令号,因为它会通知系统服务该参数文件已经修改,而PlistBuddy则不会。
I Info.plist的常用配置
1.1 支持微信唤起支付
canOpenURL: failed for URL: weixin://app/wx的解决方案
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
</array>
1.2 支持访问相册进行图片保存
<key>NSPhotoLibraryAddUsageDescription</key>
<string></string>
1.3 支持访问照相机 NSCameraUsageDescription
<key>NSCameraUsageDescription</key>
<string></string>
1.4 ATS
从iOS 9开始,所有使用NSURLSession建立的HTTP连接默认使用ATS(App Transport Security),这个新的安全协议要求所有的网络连接必须使用HTTPS协议,否则会提示如下错误。
App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
如果有一些特殊的原因需要忽略ATS限制的话,可以在Info.plist文件中添加如下配置。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
II 使用macOS自带的PlistBuddy进行CURD(增删改查)plist文件
-
PlistBuddy -- read and write values to plists
- ➜ retail git:(develop) man PlistBuddy
SYNOPSIS PlistBuddy [-cxh] file.plist
-rwxr-xr-x 1 root wheel 54256 4 7 04:45 /usr/libexec/PlistBuddy
- 应用场景: 在修改tweak的plist的时候,如果要临时调试修改修改plist文件,或者使用脚本修改plist内容的时候,使用PlistBuddy就很方便
2.1 新建plist
➜ Desktop /usr/libexec/PlistBuddy test.plist
File Doesn't Exist, Will Create: test.plist
Command: save
Saving...
Command: exit
➜ Desktop ls -lrt | grep test.plist
-rw-r--r-- 1 mac staff 181 9 29 16:01 test.plist
➜ Desktop cat test.plist
<?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/>
</plist>
如果不想每次都使用全全路径使用PlistBuddy,可以在 .bash_profile配置alias
➜ ~ open -e .bash_profile
内容如下
alias PlistBuddy='/usr/libexec/PlistBuddy'
记得source ~/.bash_profile,才会在当前终端生效。
2.2 添加key
2.2.1 添加基本类型的key Add :字段名 类型 值
PlistBuddy -c 'Add :Version string 1.0' test.plist
➜ Desktop PlistBuddy -c 'Add :Version string 1.0' test.plist
➜ Desktop cat test.plist
<?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>Version</key>
<string>1.0</string>
</dict>
</plist>
2.2.2 array类型的key
先使用Add :数组名 array
设置数组名,在使用Add :数组名: 类型 值
添加数组元素
➜ Desktop PlistBuddy -c 'Add :Applications array' test.plist
➜ Desktop PlistBuddy -c 'Add :Applications: string app1' test.plist
➜ Desktop PlistBuddy -c 'Add :Applications: string app2' test.plist
➜ Desktop PlistBuddy -c "print" test.plist
Dict {
Users = Dict {
Name = Bob
sex = false
Age = 20
}
Version = 1.0
Applications = Array {
app1
app2
}
}
2.2.3 dict类型的key
- 先添加字典名
Add :字典名 dict
- 再添加字典的元素:key和value
Add :字典名:key 类型 值
➜ Desktop PlistBuddy -c 'Add :Users dict' test.plist
➜ Desktop PlistBuddy -c 'Add :Users:Name string Bob' test.plist
➜ Desktop PlistBuddy -c 'Add :Users:sex Bool ture' test.plist
➜ Desktop PlistBuddy -c 'Add :Users:Age integer 20' test.plist
➜ Desktop PlistBuddy -c "print" test.plist
Dict {
Users = Dict {
Name = Bob
sex = false
Age = 20
}
Version = 1.0
}
➜ Desktop cat test.plist
<?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>Users</key>
<dict>
<key>Age</key>
<integer>20</integer>
<key>Name</key>
<string>Bob</string>
<key>sex</key>
<false/>
</dict>
<key>Version</key>
<string>1.0</string>
</dict>
</plist>
2.3 查看plist
-
PlistBuddy -c "print" test.plist
-
plutil -p
至于查看plist,个人更新后plutil的json格式输出,因为可以明显看出字段的类型
➜ Desktop plutil -p test.plist
{
"Applications" => [
0 => "app1"
1 => "app2"
]
"Users" => {
"Age" => 20
"Name" => "Bob"
"sex" => 0
}
"Version" => "1.0"
}
cat test.plist
: 标准的XML文本格式
2.3.1 根据key查value
➜ Desktop PlistBuddy -c 'Print :Users' test.plist
Dict {
Name = Bob
sex = false
Age = 20
}
2.3.2 根据下标查数组的元素
➜ Desktop PlistBuddy -c 'Print :Applications:1' test.plist
app2
2.4 修改
➜ Desktop PlistBuddy -c 'Set :Applications:1 "reset application 1"' test.plist
➜ Desktop PlistBuddy -c 'Print :Applications:1' test.plist
reset application 1
2.5 删除
➜ Desktop PlistBuddy -c 'Delete :Applications' test.plist
➜ Desktop PlistBuddy -c "print" test.plist
Dict {
Users = Dict {
Name = Bob
sex = false
Age = 20
}
Version = 1.0
}
2.6 合并
合并test 2.plist 到 test.plist
➜ Desktop PlistBuddy -c 'print' test2.plist
Dict {
kunnanVersion = 9.0
}
➜ Desktop PlistBuddy -c 'print' test.plist
Dict {
Users = Dict {
Name = Bob
sex = false
Age = 20
}
Version = 1.0
}
➜ Desktop PlistBuddy -c 'Merge test2.plist' test.plist
➜ Desktop PlistBuddy -c 'print' test.plist
Dict {
Users = Dict {
Name = Bob
sex = false
Age = 20
}
Version = 1.0
kunnanVersion = 9.0
}
III plutil命令操作Plist文件
plutil -h