如何使用 PlistBuddy 将多个条目添加到 plist 字典
Posted
技术标签:
【中文标题】如何使用 PlistBuddy 将多个条目添加到 plist 字典【英文标题】:How to add multiple entries to a plist dictionary with PlistBuddy 【发布时间】:2016-03-02 20:18:52 【问题描述】:在我的 Info.plist
文件中,我想在 shell 上修改一个 Plist 文件,如下所示:
<plist version="1.0">
<dict>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>urlname-1</string>
</dict>
</array>
</dict>
</plist>
现在我想使用 PlistBuddy 使它看起来像这样,将 CFBundleURLSchemes
键添加到字符串数组值(或所有其他值):
<plist version="1.0">
<dict>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>urlname-1</string>
<key>CFBundleURLSchemes</key>
<array>
<string>urlscheme-1</string>
</array>
</dict>
</array>
</dict>
</plist>
如何使用 PlistBuddy 实现这一目标?
假设CFBundleURLTypes
的数组值为空:
通过执行/usr/libexec/PlistBuddy -c "Add :CFBundleURLTypes:0:CFBundleURLName string 'urlname-1'" Info.plist
,我可以将字典添加到数组中,包括它的第一个键/值对:
<plist version="1.0">
<dict>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>urlname-1</string>
</dict>
</array>
</dict>
</plist>
但我不知道如何将第二个键,例如 CFBundleURLSchemes
与字符串数组值放入同一个字典中。
谁能给我指点? PlistBuddy 是否可以做到这一点?
【问题讨论】:
【参考方案1】:不确定这是否是您期望的命令...
/usr/libexec/PlistBuddy -c "clear dict" -c "add :CFBundleURLTypes array" -c "add :CFBundleURLTypes:0 dict" -c "add :CFBundleURLTypes:0:CFBundleURLName string 'urlname-1'" -c "add :CFBundleURLTypes:0:CFBundleURLSchemes array" -c "add :CFBundleURLTypes:0:CFBundleURLSchemes:0 string urlscheme-1" Info.plist
【讨论】:
【参考方案2】:可以添加,PlistBuddy
很棘手,但是一旦你得到,这将非常容易,你可以使用 plistbuddy 像下面这样添加......
下面添加一个字典并设置键值对,听说"$10"
是plist的路径
/usr/libexec/PlistBuddy -c "Add :CFBundleURLTypes:0:CFBundleURLName string urlname-1" "$10"
/usr/libexec/PlistBuddy -c "Add :CFBundleURLTypes:0:CFBundleURLSchemes array" "$10"
/usr/libexec/PlistBuddy -c "Add :CFBundleURLTypes:0:CFBundleURLSchemes:0 string aSchemeName" "$10"
如果您想再添加一本字典,请再做一次
/usr/libexec/PlistBuddy -c "Add :CFBundleURLTypes:1:CFBundleTypeRole string Viewer" "$10"
/usr/libexec/PlistBuddy -c "Add :CFBundleURLTypes:1:CFBundleURLName string url_type_1" "$10"
/usr/libexec/PlistBuddy -c "Add :CFBundleURLTypes:1:CFBundleURLSchemes array" "$10"
/usr/libexec/PlistBuddy -c "Add :CFBundleURLTypes:1:CFBundleURLSchemes: string scheme_2" "$10"
最后 plist 如下所示
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>urlname-1</string>
<key>CFBundleURLSchemes</key>
<array>
<string>aSchemeName</string>
</array>
</dict>
<dict>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>CFBundleURLName</key>
<string>url_type_1</string>
<key>CFBundleURLSchemes</key>
<array>
<string>scheme_2</string>
</array>
</dict>
你会得到more details here
【讨论】:
【参考方案3】:除非另有证明,否则我认为我无法通过 plistbuddy 实现我想要的。
我最终使用defaults write
来修改我的 plist,并且它有效:
defaults write ~/Path/To/Info.plist CFBundleURLTypes -array-add '<dict><key>CFBundleURLName</key><string>urlname-1</string><key>CFBundleURLSchemes</key><array><string>urlscheme-1</string></array></dict>'
【讨论】:
以上是关于如何使用 PlistBuddy 将多个条目添加到 plist 字典的主要内容,如果未能解决你的问题,请参考以下文章