由於在服務器端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