Подтвердить что ты не робот

Редактирование файла plist с помощью оболочки script

Я использовал pkgbuild для создания файла списка свойств компонента по умолчанию. Файл выглядит так:

<?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">
<array>
    <dict>
        <key>BundleHasStrictIdentifier</key>
        <true/>
        <key>BundleIsRelocatable</key>
        <true/>
        <key>BundleIsVersionChecked</key>
        <true/>
        <key>BundleOverwriteAction</key>
        <string>upgrade</string>
        <key>RootRelativeBundlePath</key>
        <string>MyApp.app</string>
    </dict>
</array>
</plist>

Я хочу изменить этот файл с помощью оболочки script. Я попытался использовать defaults write, но ничего не сделал.

Каков способ сделать это? (Например: я хочу установить BundleIsRelocatable в false)

4b9b3361

Ответ 1

также:

plutil -replace BundleIsRelocatable -bool false plistfilename.plist

Ответ 2

Используйте PlistBuddy!

Очень просто и прямо. Пример:

/usr/libexec/PlistBuddy ComponentPropertyList.plist
Command: Set :0:BundleIsRelocatable false
Command: save
Saving...
Command: exit

Вот оно! Теперь BundleIsRelocatable является ложным: D

Ответ 3

Использование PlistBuddy, простой учебник ЗДЕСЬ.

 /usr/libexec/PlistBuddy -c "Set :BundleIsRelocatable bool false" plistfilename.plist

Он может работать в качестве ОДНОЙ командной строки для обновления ключа/значения. Я использую его для обновления CFBundleVersion в целом, который можно найти в этом сообщении.

Ответ 4

Немного поздно, но для записи вам просто нужно указать абсолютный путь и добавить расширение .plist к имени файла. Если вы используете script в том же каталоге, что и файл plist, ваш случай будет переведен в:

defaults write $PWD/YourPlistFilename.plist BundleIsRelocatable -bool false

Ответ 5

Последний ответ Phil-CB здесь должен быть полезен.

Ответ 6

Для использования строки используйте

plutil -replace NameOfProperty -string "yourNewValue" plistFileName.plist

Ответ 7

Используя sed:

sed -i '' '/<key>BundleIsRelocatable</{n;s/true/false/;}' file.plist

Если plist не является XML, сначала запустите plutil -convert xml1 file.plist.