【问题标题】:Modify Headers of SCDynamicStore.h in swift快速修改 SCDynamicStore.h 的 headers
【发布时间】:2017-10-18 14:17:10
【问题描述】:

我正在尝试检测 iOS 中的热点状态。为此,我需要使用SystemConfiguration API,如下所示

let sc = SCDynamicStoreCreate(nil, "com.apple.wirelessmodemsettings.MISManager" as CFString, nil, nil)
let info = SCDynamicStoreCopyValue(sc, "com.apple.MobileInternetSharing" as CFString)

SCDynamicStoreCreateSCDynamicStoreCopyValue 不适用于 iOS。我需要修改SCDynamicStore.h 文件并使这些功能可用于iOS(它们目前标记为仅适用于Mac)。

此链接提到了一种通过创建重复标题来执行此操作的方法.. SCDynamicStoreCreate is unavailable: not available on iOS。但是这种方法对我很快不起作用。

如何快速实现这一点?

谢谢

【问题讨论】:

    标签: ios objective-c swift iphone-privateapi


    【解决方案1】:

    有几种方法可以做到这一点。

    这是一种完全 Swift 且不涉及更改头文件的方法。

        import SystemConfiguration
    
        // Define types for each of the calls of interest
        typealias TSCDynamicStoreCreate = @convention (c) (_ allocator: CFAllocator?, _ name: CFString, _ callout: SystemConfiguration.SCDynamicStoreCallBack?, _ context: UnsafeMutablePointer<SCDynamicStoreContext>?) -> SCDynamicStore?
        typealias TSCDynamicStoreCopyValue = @convention (c) (_ store: SCDynamicStore?, _ key: CFString) -> CoreFoundation.CFPropertyList?
    
        // Get a handle to the library, the flag `RT_NOLOAD` will limit this
        // to already loaded libraries
        let hLibrary = dlopen("/System/Library/Frameworks/SystemConfiguration.framework/SystemConfiguration", RTLD_NOLOAD);
    
        // Load addresses of the functions from the library
        let MySCDynamicStoreCreate = unsafeBitCast(dlsym(hLibrary, "SCDynamicStoreCreate"), to: TSCDynamicStoreCreate.self)
        let MySCDynamicStoreCopyValue = unsafeBitCast(dlsym(hLibrary, "SCDynamicStoreCopyValue"), to: TSCDynamicStoreCopyValue.self)
    
        // Setup constants
        let name = "com.apple.wirelessmodemsettings.MISManager" as CFString
        let key = "com.apple.MobileInternetSharing" as CFString
    
        // Call the functions through the looked up addresses
        let dynamicStore = MySCDynamicStoreCreate(nil, name, nil, nil)
        let plist = MySCDynamicStoreCopyValue(dynamicStore, key)
        dump(plist)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      相关资源
      最近更新 更多