LNPropertyListEditor

macOS 平台下的属性列表编辑器,类似于 Xcode 中的实现,但添加了诸多便捷功能,例如可视化日期/时间选择器和数据对象的完整十六进制编辑器。

该框架完全支持 macOS 的亮色和暗色外观。

通过实现 LNPropertyListEditorDataTransformer 协议,您可以显著增强属性列表数据在编辑器中的呈现方式以及在磁盘上的表示方式。

Property list editor

Property list editor

添加到您的项目

Swift Package Manager

Swift Package Manager 是将 LNPropertyListEditor 集成到您项目中的推荐方法。

LNPropertyListEditor 支持 SPM 5.1.0 及以上版本。 要使用 SPM,您应该使用 Xcode 11 打开您的项目。 点击 File -> Swift Packages -> Add Package Dependency,输入 https://github.com/LeoNatan/LNPropertyListEditor。 选择您想要使用的版本。

您也可以手动将软件包添加到您的 Package.swift 文件

.package(url: "https://github.com/LeoNatan/LNPropertyListEditor.git", from: "1.0")

以及目标中的依赖项

.target(name: "BestExampleApp", dependencies: ["LNPropertyListEditor"]),

Carthage

将以下内容添加到您的 Cartfile

github "LeoNatan/LNPropertyListEditor"

请确保您按照 Carthage 集成说明 here

手动

LNPropertyListEditor.xcodeproj 项目拖到您的项目中,并将 LNPropertyListEditor.framework 添加到您的项目目标的 General 选项卡中的 Embedded Binaries 中。 Xcode 应该会自动处理其他事情。

CocoaPods

不支持 CocoaPods。 原因有很多。 请使用 Carthage 代替 CocoaPods。 您可以继续对其他依赖项使用 CocoaPods,对 LNPropertyListEditor 使用 Carthage。

使用框架

Swift

虽然该框架是用 Objective C 编写的,但它使用了现代 Objective C 语法,因此在 Swift 中使用该框架应该非常容易和直观。

项目集成

在您的项目中导入该模块

@import LNPropertyListEditor;

用法

无论是使用 Interface Builder 还是在代码中,都将 LNPropertyListEditor 视图添加到您的用户界面中。

要设置表示的对象,请设置 propertyList 属性。

guard let propertyListURL = Bundle.main.url(forResource: "Some", withExtension: "plist"),
   let propertyListData = try? Data(contentsOf: propertyListURL),
   let propertyListObject = try? PropertyListSerialization.propertyList(from: propertyListData, options: [], format: nil) as? [String: AnyObject] else {
	return
}

plistEditor.propertyListObject = propertyListObject

支持的对象类型:字典、数组、字符串、日期、数据、布尔值和数字(字典和数组可以包含上述类型的嵌套子项)。

委托

实现 LNPropertyListEditorDelegate 协议来监听各种事件,或控制可以编辑的属性列表的哪些方面。

plistEditor.delegate = self
//...
func propertyListEditor(_ editor: LNPropertyListEditor, didChange node: LNPropertyListNode, changeType: LNPropertyListNodeChangeType, previousKey: String?) {
	switch changeType {
	case .insert:
		print("🎉")
	case .move:
		print("➡️")
	case .update:
		print("🔄")
	case .delete:
		print("🗑")
  @unknown default:
		fatalError()
	}
}

有关完整的文档,请参见 LNPropertyListEditor.h 标头。

数据转换器

实现 LNPropertyListEditorDataTransformer 协议,为您的属性列表对象提供显示和数据转换。

plistEditor.dataTransformer = self
//...
func propertyListEditor(_ editor: LNPropertyListEditor, displayNameFor node: LNPropertyListNode) -> String? {
	// ...
	if let key = node.key,
	   key == "CFBundleShortVersionString" {
		return "Bundle version string (short)"
	}
	//...
}

有关完整的文档,请参见 LNPropertyListEditor.h 标头。

致谢

该框架使用了