首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用PlistBuddy向plist字典添加多个条目

如何使用PlistBuddy向plist字典添加多个条目
EN

Stack Overflow用户
提问于 2016-03-03 04:18:52
回答 3查看 7.9K关注 0票数 4

在我的Info.plist文件中,我想修改shell上的一个Plist文件,如下所示:

代码语言:javascript
复制
<plist version="1.0">
<dict>
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>urlname-1</string>
        </dict>
    </array>
</dict>
</plist>

现在,我想使用PlistBuddy将CFBundleURLSchemes键与字符串数组值(或其他值)相加,使其看起来像这样:

代码语言:javascript
复制
<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,我可以将字典添加到数组中,包括它的第一个键/值对:

代码语言:javascript
复制
<plist version="1.0">
<dict>
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>urlname-1</string>
        </dict>
    </array>
</dict>
</plist>

但是我不知道如何获得第二个键,例如将带有字符串数组值的CFBundleURLSchemes放入同一个字典中。

有人能给我指点一下吗?对于PlistBuddy来说,这是可能的吗?

EN

回答 3

Stack Overflow用户

发布于 2016-05-10 14:56:45

不确定这是不是你想要的命令...

代码语言:javascript
复制
/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
票数 13
EN

Stack Overflow用户

发布于 2016-12-02 15:45:40

这是可能的添加,PlistBuddy是棘手的,但一旦你得到,它将是非常容易的,你可以添加如下使用plistbuddy…

下面为添加了一个字典并设置了键值对,hear "${10}"是plist的路径

代码语言:javascript
复制
/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}"

如果您想再添加一个字典,请使用angain

代码语言:javascript
复制
/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将如下所示

代码语言:javascript
复制
<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

票数 2
EN

Stack Overflow用户

发布于 2016-03-04 21:44:48

除非另有证明,否则我想我不能用plistbuddy实现我想要的东西。

我最终使用defaults write来修改我的plist,并且它可以工作:

代码语言:javascript
复制
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>'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35757267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档