我已经使用pkgbuild创建了一个默认的Component Property List文件。该文件看起来像:
<?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>
我想使用shell脚本修改此文件。我尝试使用默认值写,但它没有做任何事情。
这样做的方法是什么?(例如:我想将BundleIsRelocatable设置为false)
答案 0 :(得分:28)
此外:
plutil -replace BundleIsRelocatable -bool false plistfilename.plist
答案 1 :(得分:3)
使用PlistBuddy, a simple tutorial HERE.
/usr/libexec/PlistBuddy -c "Set :BundleIsRelocatable bool false" plistfilename.plist
它可以作为ONE命令行运行以更新键/值。
我一般用它来更新CFBundleVersion
,可以找到in this post。
答案 2 :(得分:3)
有点晚了,但是对于记录,你只需要指定绝对路径并将 .plist 扩展名添加到文件名中。如果您在plist文件所在的目录中运行脚本,则您的案例将被翻译为:
defaults write $PWD/YourPlistFilename.plist BundleIsRelocatable -bool false
答案 3 :(得分:2)
使用PlistBuddy!
非常简单直接。 例如:
/usr/libexec/PlistBuddy ComponentPropertyList.plist
Command: Set :0:BundleIsRelocatable false
Command: save
Saving...
Command: exit
多数民众赞成!现在BundleIsRelocatable是假的:D
答案 4 :(得分:2)
使用字符串
plutil -replace NameOfProperty -string "yourNewValue" plistFileName.plist
答案 5 :(得分:1)
使用sed
:
sed -i '' '/<key>BundleIsRelocatable</{n;s/true/false/;}' file.plist
如果plist不是XML,请先运行plutil -convert xml1 file.plist
。
答案 6 :(得分:0)
Phil-CB here的最后一个回应应该是有用的。