0
点赞
收藏
分享

微信扫一扫

iOS小技能:使用PlistBuddy/plutil进行增删改查plist文件

鱼板番茄 2022-10-16 阅读 44


前言

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文件中添加如下配置。

NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

II 使用macOS自带的PlistBuddy进行CURD(增删改查)plist文件

read and write values

  • ➜ retail git:(develop) man PlistBuddy

SYNOPSIS PlistBuddy [-cxh] file.plist

-rwxr-xr-x  1 root  wheel  54256  4  7 04:45

  • 应用场景: 在修改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

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

2.3.2 根据下标查数组的元素

  Desktop PlistBuddy -c 'Print :Applications:1'

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


举报

相关推荐

0 条评论