如何从Swift调用专用macOS CoreFoundation函数
我正在寻找一种在Swift代码中使用私有Apple API的方法(即,如何从Swift调用专用macOS CoreFoundation函数,swift,macos,nsuserdefaults,core-foundation,iphone-privateapi,Swift,Macos,Nsuserdefaults,Core Foundation,Iphone Privateapi,我正在寻找一种在Swift代码中使用私有Apple API的方法(即,\u CFPreferencesCopyApplicationMap,它允许您查找用于任何给定应用程序的用户默认值的路径) 有关动机和目标C解决方案,请参见答案。我能够在Objective-C中使用以下行完成此操作: extern CFDictionaryRef _CFPreferencesCopyApplicationMap(CFStringRef userName, CFStringRef hostName); 我还不知
\u CFPreferencesCopyApplicationMap
,它允许您查找用于任何给定应用程序的用户默认值的路径)
有关动机和目标C解决方案,请参见答案。我能够在Objective-C中使用以下行完成此操作:
extern CFDictionaryRef _CFPreferencesCopyApplicationMap(CFStringRef userName, CFStringRef hostName);
我还不知道如何在Swift中实现同样的功能。我知道可以在运行时使用
NSClassFromString
或NSSelectorFromString
动态访问ObjC对象,但据我所知,这些对象不能与全局C函数一起使用NSInvocation
看起来也一样。事实证明,这可以通过以下方式实现:
你这样做是对的。使用目标C。
@_silgen_name("_CFPreferencesCopyApplicationMap")
func _CFPreferencesCopyApplicationMap(_: CFString!, _: CFString!) -> CFDictionary!
// Then, call as:
let applicationMap = _CFPreferencesCopyApplicationMap(kCFPreferencesCurrentUser, kCFPreferencesAnyHost) as? [String: [URL]]