23

我使用 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>

我想通过使用 shell 脚本来修改这个文件。我尝试使用默认写入,但它没有做任何事情。

怎么做?(例如:我想设置BundleIsRelocatable为false)

4

7 回答 7

41

还:

plutil -replace BundleIsRelocatable -bool false plistfilename.plist
于 2014-10-05T11:32:40.553 回答
6

对于字符串使用

plutil -replace NameOfProperty -string "yourNewValue" plistFileName.plist
于 2017-05-22T10:17:56.233 回答
5

使用PlistBuddy,这里有一个简单的教程。

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

它可以作为一个命令行运行来更新键/值。我一般用它来更新CFBundleVersion,可以在这篇文章中找到。

于 2016-03-07T05:59:29.557 回答
5

有点晚了,但为了记录,您只需要指定绝对路径并将.plist扩展名添加到文件名。如果您在 plist 文件所在的同一目录中运行脚本,则您的案例将被翻译为:

defaults write $PWD/YourPlistFilename.plist BundleIsRelocatable -bool false
于 2017-06-13T10:23:14.553 回答
3

使用PlistBuddy

非常简单直接。例子:

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

而已!现在 BundleIsRelocatable 是错误的:D

于 2014-10-05T11:14:49.713 回答
2

使用sed

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

如果 plist 不是 XML,plutil -convert xml1 file.plist请先运行。

于 2014-10-10T14:13:48.103 回答
0

Phil-CB 的最后回复在这里应该是有用的。

于 2015-01-30T10:35:33.940 回答