如何更新 Plist 文件?

How To Update Plist File?

好的,我正在尝试将我的调整 bundles 更新为 NSMutableArrayvalididentifiers 的值,其中填充了如果用户为我的调整选择了首选项包内的 safari 应用程序,则用户选择了应用程序标识符,例如 com.apple.mobilesafari。但是,我现在正在尝试使用下面的代码更新计算受支持的捆绑包的 plist,但是当我希望更新到 Bundles[= 时,它只会检测到 Filter 键38=] 键。我知道它只是通过记录 bundlesplist allKeys 属性并将 Filter 检测为有效密钥,并在系统日志中进行观察。

所以我的问题是如何具体更新如下所示的 plist 中的 Bundles 部分?

test.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>Filter</key>
        <dict>
        <key>Bundles</key>
        <array>
            <string>com.apple.mobilesafari</string>
            <string>com.apple.springboard</string>
        </array>
        </dict>
</dict>
</plist>

我的代码:

NSMutableDictionary *bundlesplist = [NSMutableDictionary dictionaryWithContentsOfFile:@"/Library/MobileSubstrate/DynamicLibraries/test.plist"];
NSLog(@"%@", bundlesplist);
NSLog(@"%@", [bundlesplist allKeys]);

[bundlesplist setObject:valididentifiers forKey:@"Bundles"];
[bundlesplist writeToFile:@"/Library/MobileSubstrate/DynamicLibraries/test.plist" atomically:NO];

所有键的 Syslog 输出

2017-07-18 20:25:28.627: (
    Filter
)

我不确定我是否以错误的方式解决这个问题,或者只是愚蠢,但我们将不胜感激。 非常感谢汤姆

理想情况下,您应该能够使用以下方法设置值:

[bundlesplist setObject:valididentifiers forKeyPath:@"Filter.Bundles"];

但是,Filter 字典可能是不可变的。

因此,我建议只做:

NSMutableDictionary *filter = [bundlesplist[@"Filter"] mutableCopy];
filter[@"Bundles"] = valididentifiers;
bundlesplist[@"Filter"] = filter;