由于在服务器端swift的实现是不同的,所以NSArray
和NSDictionary
缺少一个基本的(对我的项目)的一部分。 即,dictionaryWithContentsOfFile:
方法只在Linux上加载非二进制plist文件,所以我的应用程序只能在macOS上运行。有关StackOverflow答案的一些旧问题涉及这个主题,但它们导致不再存在的网站。 所以我的问题是:是否有任何简单的方法来加载二进制plist到NSDictionary,而不必使用一些“反编译”外部脚本,如果没有解决方案,什么是最优雅的解决方案使用一个?NSDictionary在Linux上加载二进制plist(swift)
3
A
回答
1
如果最糟糕的情况变得更糟,您可以使用GNUstep将二进制plist转换为XML,将xml保存在临时位置,然后将其加载到Swift代码中。
你可以尝试使用CoreFoundation函数,如CFPropertyListCreateWithData
,但如果Foundation方法不起作用,我怀疑CoreFoundation也可以工作。
1
从在Swift
.plists的我的理解本机的处理是经由PropertyListSerialization
:
// PropertyListSerialization Method
var plistFormat = PropertyListSerialization.PropertyListFormat.binary
let plistPath: String? = Bundle.main.path(forResource: "binary", ofType: "plist")!
let plistBinary = FileManager.default.contents(atPath: plistPath!)!
guard let propertyList = try? PropertyListSerialization.propertyList(from: plistBinary, options: [], format: &plistFormat) else {
fatalError("failed to deserialize")
}
print(propertyList as! [String:Any])
结果:
"["MyDictionary": {\n MyArray = (\n Two,\n One\n);\n}]\n"
的
NSDictionary
的方式,你可能会知道:// NSDictionary Method if let url = Bundle.main.url(forResource:"binary", withExtension: "plist"), let myDict = NSDictionary(contentsOf: url) as? [String:Any] { print(myDict) }
结果:
"["MyDictionary": {\n MyArray = (\n Two,\n One\n);\n}]\n"
比较这两种方法的最终结果是使用
binary
的.plist相同;我会想象它应该工作(?),或者至少给你一些想法,以另一种方式读/写数据。
相关问题
- 1. 在linux下编辑二进制plist
- 2. 如何在iOS上从磁盘加载plist文件作为NSDictionary?
- 3. 二进制plist结构
- 4. 处理二进制Plist
- 5. 在Linux上旋转二进制文件
- 6. 从Plist加载网址图像在Swift
- 7. 在Java中创建二进制plist?
- 8. NSDictionary和plist
- 9. Linux中的二进制文件加载时间
- 10. 如何在NSDictionary下加载plist并传递字符串Array polygons?
- 11. 二进制plist的Python模块
- 12. 用Python读取二进制Plist文件
- 13. 下载plist作为NSDictionary返回(null)
- 14. 编译matlab linux二进制
- 15. 如何编译C++在Linux上进行,以使Windows二进制
- 16. 嵌套从plist NSDictionary
- 17. 加载plist在UITableView
- 18. 仅将二进制文件加载到iPhone上进行测试
- 19. 在导轨上加载WebAssembly二进制文件
- 20. 超载二进制+
- 21. iPhone PLIST文件上传出来二进制
- 22. .plist数据无法从NSArray加载到NSDictionary
- 23. 由plist文件加载的NSDictionary的内存泄露
- 24. 如何使用Swift在plist文件中添加新阵列数据到NSDictionary
- 25. NSDictionary在swift中进行提示
- 26. 使用jquery加载二进制图像
- 27. C#加载二进制文件
- 28. Java加载二进制文件
- 29. 如何在Linux上编译英特尔Mac二进制文件?
- 30. 在Linux桌面上运行Android NDK二进制文件
为什么plist必须是二进制的吗?你能不能[转换成XML plist](http://forensicswiki.org/wiki/Converting_Binary_Plists)?有一个名为[libplist]的库(https://github.com/libimobiledevice/libplist)可以完成这项工作。 – JeremyP
是的,二进制plist来自一个编译的.ipa,我想让最终产品的最终产品易于安装 – Ondrej