nodejs 处理plist文件问题

xjhmen
  • 18

在实现iOS的APP在线安装时,需要plist文件。
我这里对plist的更新操作是:
读取plist文件,通过xml-js转成json字符串,对json字符串操作后,再转成xml字符串,写入plist文件,完成对plist的更新。

            fs.readFile(filepath, 'utf-8',
                function (err, data) {
                    if(err) console.log(err);
                    var result1 = convert.xml2json(data, {compact: true, spaces: 4});
                    let a = JSON.parse(result1);
                    const aa = a.plist.dict.array.dict;
                    aa.array.dict.string[1]._text = res[0].DownloadUrl;
                    aa.dict.string[1]._text = res[0].Version;
                    aa.dict.string[3]._text = res[0].Note;
                    const r = convert.json2xml(JSON.stringify(a), {compact: true, spaces: 4});
                    fs.writeFile(filepath, r, function(err, d) {
                        if(err) console.log(err);
                        console.log('ok')
                    })
                })

但发现更新后plist无法使用,节点顺序乱套了
更新前:

<?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">
    <dict>
        <key>items</key>
        <array>
            <dict>
                <key>assets</key>
                <array>
                    <dict>
                        <key>kind</key>
                        <string>software-package</string>
                        <key>url</key>
                        <string>http://192.168.1.1/app.ipa</string>
                    </dict>
                </array>
                <key>metadata</key>
                <dict>
                    <key>bundle-identifier</key>
                    <string>com.*.*.*</string>
                    <key>bundle-version</key>
                    <string>1.0.</string>
                    <key>kind</key>
                    <string>software</string>
                    <key>releaseNotes</key>
                    <string>更新内容</string>
                    <key>title</key>
                    <string>APP名称</string>
                </dict>
            </dict>
        </array>
    </dict>
</plist>

更新后:

<?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">
    <dict>
        <key>items</key>
        <array>
            <dict>
                <key>assets</key>
                <key>metadata</key>
                <array>
                    <dict>
                        <key>kind</key>
                        <key>url</key>
                        <string>software-package</string>
                        <string>http://192.168.1.1/app.ipa</string>
                    </dict>
                </array>
                <dict>
                    <key>bundle-identifier</key>
                    <key>bundle-version</key>
                    <key>kind</key>
                    <key>releaseNotes</key>
                    <key>title</key>
                    <string>com.*.*.*</string>
                    <string>1.0.</string>
                    <string>software</string>
                    <string>更新内容</string>
                    <string>APP名称</string>
                </dict>
            </dict>
        </array>
    </dict>
</plist>

请问该如何对plist进行操作,是应该使用哪个插件,还是怎样处理?
PS:难道最后要拼接字符串后直接写入而不是读取后更新

回复
阅读 3.3k
2 个回答

对plist的操作还是用python方便一些,我之前想用java处理实在找不到方便的方法,最后用的java调用python的bplist库来处理plist,你可以看看这种方式。

突然想起在npmjs里搜索了一下,plist这个插件可行
感谢woaiyoubao

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏