背景是写一个自动签名的脚本, 真的是从0到1的踩坑记, 其中需要对.provision文件进行签名信息截取, 并生成.plist文件

method_ONE

内容截取并保存临时文件中

先看看.provision文字长什么样子, 我截取了其中一部分展示的信息,其中我们要的内容是从dict到dict之间

1
2
3
4
5


1


1
2
3
4
5


security cms -D -i ./original.mobileprovision | grep --after-context=20 "Entitlements" > /tmp/tmp\_provision


读取匹配的信息,并保存到/tmp/tmp_provision这个文件中

python进行正则匹配,过滤dict之后的内容

1
2
3
4
5


1


1
2
3
4
5


provision=\`python -c "from re import findall,compile,S;data=open('/tmp/tmp\_provision','r').read();print findall(compile(r'.\*',S),data)\[0\];"\`


最后重定向到一个.plist文件中

1
2
3
4
5


1


1
2
3
4
5


echo ''$provision'' > Entitlements.plist


这个方法虽然可以, 但是其中第三部, 必须要格外注意字符的使用, 不然就格式不对,导致重定向出来的无法识别为.plist

method_TWO

重定向为一个.plist

1
2
3
4
5


1


1
2
3
4
5


security cms -D -i ./original.mobileprovision > ProvisionProfile.plist


查看到全部的信息, 重定向为一个ProvisionProfile.plist,还没有过滤

提取内容生成

1
2
3
4
5


1


1
2
3
4
5


/usr/libexec/PlistBuddy -x -c "Print Entitlements" ProvisionProfile.plist > Entitlements.plist


直接将里面的子项Entitlements拿出来,生成一个新的Entitlements.plist

这个方法比上面的稳妥不知道多少倍, 但是第一个的方法是自己钻研

.plist文件的增删改查

1
2
3
4
5
6
7
8
9


1

2

3


1
2
3
4
5
6
7
8
9


plutil -p ./ProvisionProfile.plist #查看

plutil -insert Insert -string "insert data here" ./ProvisionProfile.plist #增

plutil -replace Insert -string "change data here" ./ProvisionProfile.plist #替换


列举的就诸如此类,plutil是一个.plist官方推荐的好工具