如何从 Swift 调用私有 macOS CoreFoundation 函数

How to Call a Private macOS CoreFoundation Function from Swift

我正在寻找一种在 Swift 代码(即 _CFPreferencesCopyApplicationMap 中使用私有 Apple API 的方法,它允许您查找用于用户的路径任何给定应用程序的默认值)。

请参阅 this 答案以了解动机和 Objective-C 解决方案。我能够在 Objective-C 中使用以下行执行此操作:

extern CFDictionaryRef _CFPreferencesCopyApplicationMap(CFStringRef userName, CFStringRef hostName);

我一直无法弄清楚如何在 Swift 中做同样的事情。我知道可以使用 NSClassFromStringNSSelectorFromString 在运行时动态访问 ObjC 对象,但据我所知这些不能与全局 C 函数一起使用。 NSInvocation 好像也出来了。

事实证明,这可以使用 :

@_silgen_name("_CFPreferencesCopyApplicationMap")
func _CFPreferencesCopyApplicationMap(_: CFString!, _: CFString!) -> CFDictionary!

// Then, call as:
let applicationMap = _CFPreferencesCopyApplicationMap(kCFPreferencesCurrentUser, kCFPreferencesAnyHost) as? [String: [URL]]