在Mac上使用Defaults命令行修改Plist文件

29

有谁知道如何使用 defaults 命令行修改Plist文件吗?目前在 URL类型数组下有两个字典; 我需要添加另一个。

enter image description here

我尝试的每个命令都要么替换整个字典,要么创建一个名为 URL类型的新数组,而不是编辑它。任何想法如何在defaults(控制台Mac应用程序)中完成,而不是PlistBuddy?


2
$ defaults write domain key 'value',其中 domain 是应用程序相关的。https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/defaults.1.html - trojanfoe
1
FYI(并不是你问题的答案):Mac OS X Prefs Editor - defaults命令的GUI界面 - Graham Perrin
4个回答

30

正如Lauri的回答所建议的那样,XML属性列表可以直接在文本编辑器中查看。

许多苹果自带的应用程序中发现的二进制属性列表需要首先转换为XML属性列表格式。

可以使用plutil在任一方向上执行此操作。要注意的是,属性列表会被就地修改,因此您可能希望首先复制属性列表。

plutil -convert xml1 binary-property-list-to-convert.plist

并将其转换回二进制:

plutil -convert binary1 XML-property-list-to-convert.plist

19

打开文本编辑器中的 Info.plist,以查看实际标识符。

defaults write Absolute/Path/to/Info.plist CFBundleURLTypes -array-add '<dict>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>CFBundleURLName</key>
<string>Mac App Store URL</string>
<key>CFBundleURLSchemes</key>
<array>
<string>macappstore</string>
</array>
</dict>'

pbpaste | pl 将 XML 转换为旧格式。

defaults write Info.plist CFBundleURLTypes -array-add '{CFBundleTypeRole=Viewer; FBundleURLName="Mac App Store URL";CFBundleURLSchemes=(macappstore);}'


哎呀!这让我非常困惑。XCode将键的名称更改为您在图像中看到的值(在我的问题中)。所以这就是为什么它会添加新条目的原因。谢谢老兄。 - Just a coder
1
您还可以通过在项目导航器中右键单击 plist 并选择“打开方式 > 源代码”来显示 XCode 中 plist 的文本表示形式(比外部打开文件快得多...)。 - Bouncing Bit
3
提供给plist文件的路径必须是绝对路径,这一点非常重要。如果像这个示例中一样使用相对路径,则会创建或修改~/Library/Preferences/Info.plist文件。请注意,绝对路径是指从文件系统根目录开始的完整路径。 - derFunk
正如derFunk所提到的,绝对路径非常关键。 - Senseful

9

1
我使用了这个命令:/usr/libexec/PlistBuddy -c "set CFBundleURLTypes:CFBundleURLSchemes fb$FacebookAppID",但它没有起作用。我该怎么办? - biolinh

6

使用-array-add值类型:

defaults write /path/to/plist/file "URL Types" -array-add '{"URL Identifier" = "com.myapp.2"; "URL Schemes" = { "two"; }; }'

2
我正在使用macOS Catalina(10.15),似乎defaults不再支持文件路径。在man中,它说:“警告:defaults命令将在即将发布的主要版本中更改,仅操作偏好设置域。通用plist操作实用程序将被合并到另一个命令行程序中。” - ThomasW

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接