我正在尝试编写一个脚本,在构建期间将设置添加到settings应用程序,而不覆盖现有的设置,如果存在的话。下面是我的脚本片段:
PLISTBUDDY="/usr/libexec/PlistBuddy"
SETTINGSBUNDLEPATH="$CODESIGNING_FOLDER_PATH/Settings.bundle/Root.plist"
{
$PLISTBUDDY -c "Add :PreferenceSpecifiers:0:Type string 'PSGroupSpecifier'" "$SETTINGSBUNDLEPATH"
$PLISTBUDDY -c "Add :PreferenceSpecifiers:0:Title string 'Version Information'" "$SETTINGSBUNDLEPATH"
} || {
$PLISTBUDDY -c "Set :PreferenceSpecifiers:0:Type 'PSGroupSpecifier'" "$SETTINGSBUNDLEPATH"
$PLISTBUDDY -c "Set :PreferenceSpecifiers:0:Title 'Version Information'" "$SETTINGSBUNDLEPATH"
}
{
$PLISTBUDDY -c "Add :PreferenceSpecifiers:1:Type string 'PSTitleValueSpecifier'" "$SETTINGSBUNDLEPATH"
$PLISTBUDDY -c "Add :PreferenceSpecifiers:1:Title string 'Version:'" "$SETTINGSBUNDLEPATH"
$PLISTBUDDY -c "Add :PreferenceSpecifiers:1:Key string 'appVersion'" "$SETTINGSBUNDLEPATH"
$PLISTBUDDY -c "Add :PreferenceSpecifiers:1:DefaultValue string '$APPVERSION'" "$SETTINGSBUNDLEPATH"
} || {
$PLISTBUDDY -c "Set :PreferenceSpecifiers:1:Type 'PSTitleValueSpecifier'" "$SETTINGSBUNDLEPATH"
$PLISTBUDDY -c "Set :PreferenceSpecifiers:1:Title 'Version:'" "$SETTINGSBUNDLEPATH"
$PLISTBUDDY -c "Set :PreferenceSpecifiers:1:Key 'appVersion'" "$SETTINGSBUNDLEPATH"
$PLISTBUDDY -c "Set :PreferenceSpecifiers:1:DefaultValue '$APPVERSION'" "$SETTINGSBUNDLEPATH"
}不过,我不想覆盖任何现有的设置。如何将这些设置添加到PreferenceSpecifiers的末尾?
我读过文档,我尝试过使用Merge,但没有成功。
$PLISTBUDDY -c "Merge ${PROJECT_DIR}/Settings1.bundle/Root.plist" "$SETTINGSBUNDLEPATH"编辑:在代码中添加了“尝试-捕获”,这解决了两次运行脚本时出现的问题。
发布于 2015-12-23 13:19:12
这首先计算所有字典PreferenceSpecifiers,就像在这些答案中一样。然后它将遍历字典并检查组是否已经存在,所以当您再次构建应用程序时,脚本将不会再次添加行。如果找不到组,它将在上一个索引之后添加行。有一件事我不确定,那就是为什么count不是一个数字,以及如何正确地修复它(当前的代码起作用)。
PLISTBUDDY="/usr/libexec/PlistBuddy"
SETTINGSBUNDLEPATH="$CODESIGNING_FOLDER_PATH/Settings.bundle/Root.plist"
count=`${PLISTBUDDY} -c "Print PreferenceSpecifiers:" ${SETTINGSBUNDLEPATH} | grep "Dict"|wc -l`
let count++
let count--
FOUND=false
for index in `seq 0 $count`
do
val=`${PLISTBUDDY} -c "Print PreferenceSpecifiers:${index}:Key" ${SETTINGSBUNDLEPATH}`
if [ "$val" == "versionInfo" ]; then
FOUND=true
break
fi
done
if [ "$FOUND" == false ]; then
$PLISTBUDDY -c "Add :PreferenceSpecifiers:$count:Type string 'PSGroupSpecifier'" "$SETTINGSBUNDLEPATH"
$PLISTBUDDY -c "Add :PreferenceSpecifiers:$count:Title string 'Version Information'" "$SETTINGSBUNDLEPATH"
$PLISTBUDDY -c "Add :PreferenceSpecifiers:$count:Key string 'versionInfo'" "$SETTINGSBUNDLEPATH"
let count++
$PLISTBUDDY -c "Add :PreferenceSpecifiers:$count:Type string 'PSTitleValueSpecifier'" "$SETTINGSBUNDLEPATH"
$PLISTBUDDY -c "Add :PreferenceSpecifiers:$count:Title string 'Version:'" "$SETTINGSBUNDLEPATH"
$PLISTBUDDY -c "Add :PreferenceSpecifiers:$count:Key string 'appVersion'" "$SETTINGSBUNDLEPATH"
$PLISTBUDDY -c "Add :PreferenceSpecifiers:$count:DefaultValue string '$APPVERSION'" "$SETTINGSBUNDLEPATH"
fihttps://stackoverflow.com/questions/34419486
复制相似问题