【问题标题】:How to Call a Private macOS CoreFoundation Function from Swift如何从 Swift 调用私有 macOS CoreFoundation 函数
【发布时间】:2020-07-13 03:34:01
【问题描述】:

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

请参阅this 答案以了解动机和 Objective-C 解决方案。我能够在 Objective-C 中使用以下代码做到这一点:

extern CFDictionaryRef _CFPreferencesCopyApplicationMap(CFStringRef userName, CFStringRef hostName);

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

【问题讨论】:

  • 你的做法是正确的。使用目标 C。

标签: swift macos nsuserdefaults core-foundation iphone-privateapi


【解决方案1】:

事实证明,这可以使用@_silgen_name

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 2015-07-04
    相关资源
    最近更新 更多