【发布时间】:2015-12-22 15:43:52
【问题描述】:
我正在尝试编写一个脚本,在构建期间将设置添加到设置应用程序,而不覆盖现有的设置(如果存在)。这是我的脚本的 sn-p:
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 的末尾?
我已阅读documentation,并尝试使用 Merge 没有成功。
$PLISTBUDDY -c "Merge ${PROJECT_DIR}/Settings1.bundle/Root.plist" "$SETTINGSBUNDLEPATH"
编辑:在代码中添加了“try-catch”,这解决了运行脚本两次时的问题。
【问题讨论】:
-
等一下,
$CODESIGNING_FOLDER_PATH将包含一些与构建机器相关的文件夹,而您正在将该文件夹名称构建到应用程序中?警钟正在敲响…… -
这样不行吗?写到那里似乎要容易得多,因为我只想根据构建配置添加某些设置。
-
我想我搞错了。您正在该文件夹中设置
.plist以包含在应用程序中,这是完全合理的。抱歉弄错了。
标签: ios plist settings.bundle