如何更新 Plist 文件?
How To Update Plist File?
好的,我正在尝试将我的调整 bundles 更新为 NSMutableArray
、valididentifiers 的值,其中填充了如果用户为我的调整选择了首选项包内的 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;
好的,我正在尝试将我的调整 bundles 更新为 NSMutableArray
、valididentifiers 的值,其中填充了如果用户为我的调整选择了首选项包内的 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;