一个工程,会存在很多的target 我们工程项目里有20-30个targets 每次修改/添加权限工作十分繁琐且无任何价值,所以萌生了批量修改plist的想法
逻辑:
- 逻辑:遍历info.plist所在的文件夹里的所有plist文件,首先判断是否有相同的key存在,如果有则把value替换为新的,不存在则添加key和value
- 1.0版本只能1次修改所有plist的一个key,下次再优化可配置多个key
用法
前期准备:
1. 需将readFile.sh和changePlist.sh放在同一个目录下
2. 修改changePlist.sh 文件里的配置
* A值是为了定位写入权限的位置,我选取的key为相机的key,这里可以换为plist里已存在权限key的名称
* B为要添加/替换的key名称
* C为要添加/替换的value
使用:
1. cd 到readFile.sh根目录
2. ./build readFile.sh plist文件目录(所有plist文件都在同一个目录下)
readFile.sh
B="-info.plist" #关键字
for file in `ls $1` #注意此处这是两个反引号,表示运行系统命令
do
if [[ $file == *$B* ]]
then
./changePlist.sh $1"/"$file
fi
done
changePlist.sh
A="<key>NSCameraUsageDescription</key>"
B="<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>" #要添加/替换的key名称
C="<string>用来获取您的位置完成更好的考勤签到服务</string>" #要添加/替换的key Value
count=1
addCount=0;
sameCount=0
while read line
do
if [ "$line" = "$B" ];then #判断是否存在相同的key
sameCount=$[count+1]
count=$[count+1]
elif [ "$line" = "$A" ];then #判断添加权限的位置
addCount=$[count+1]
count=$[count+1]
else
count=$[count+1]
fi
done < $1
if [ "$sameCount" -eq 0 ];then
if [ "$addCount" -eq 0 ];then
echo "没有相同"
echo "添加位置 $count"
gsed -i "$addCount a\ $B" $1
addCount=$[addCount+1]
gsed -i "$addCount a\ $C" $1
else
echo "没有找到相应位置添加 $1"
fi
else
echo "存在相同 替换value $sameCount"
gsed -i "$sameCount c $C" $1
fi
tips
gsed为Mac下安装gnu-sed后的用法,Mac与linux下的sed语法存在许多不同,相同的语法在mac环境下会报错,遂用gnu-sed