如何通过编程生成plist内容?替代直接使用字符串的方式
用代码生成指定PLIST内容(而非硬编码字符串)
当然可以,完全不需要直接把整个PLIST内容写成字符串常量。下面以Swift为例,提供两种常用的实现方式:
方法一:基于字典+PropertyListSerialization
直接构建对应PLIST结构的字典,再通过系统API序列化为XML格式的PLIST字符串:
import Foundation // 构建PLIST对应的键值对字典 let plistDictionary: [String: Any] = [ "Label": "com.yourdomain.onstartup", "LimitLoadToSessionType": "Aqua", "Program": "/Applications/On Startup.app/Contents/MacOS/On Startup", "RunAtLoad": true ] // 序列化为XML格式数据并转成字符串 do { let plistData = try PropertyListSerialization.data( fromPropertyList: plistDictionary, format: .xml, options: 0 ) if let plistString = String(data: plistData, encoding: .utf8) { // plistString就是你需要的PLIST内容 print(plistString) } } catch { print("生成PLIST失败:\(error.localizedDescription)") }
方法二:基于Codable模型(类型更安全)
如果PLIST结构固定,推荐用Codable定义对应模型,通过PropertyListEncoder序列化,避免键名拼写错误:
import Foundation // 定义与PLIST结构匹配的Codable模型 struct LaunchAgentPlist: Codable { let Label: String let LimitLoadToSessionType: String let Program: String let RunAtLoad: Bool } // 创建模型实例 let launchPlist = LaunchAgentPlist( Label: "com.yourdomain.onstartup", LimitLoadToSessionType: "Aqua", Program: "/Applications/On Startup.app/Contents/MacOS/On Startup", RunAtLoad: true ) // 序列化为XML格式PLIST字符串 do { let encoder = PropertyListEncoder() encoder.outputFormat = .xml let plistData = try encoder.encode(launchPlist) if let plistString = String(data: plistData, encoding: .utf8) { print(plistString) } } catch { print("生成PLIST失败:\(error.localizedDescription)") }
说明
两种方法生成的PLIST内容与你提供的硬编码字符串功能完全一致,仅可能在缩进格式上略有差异,但不会影响PLIST的正常解析和使用。
内容的提问来源于stack exchange,提问作者swiftPunk
相关产品推荐
相关产品推荐

