2017-10-18 9 views
1

iOS에서 핫스팟 상태를 감지하려고합니다.신속하게 SCDynamicStore.h의 헤더 수정

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

그러나 SCDynamicStoreCreateSCDynamicStoreCopyValue iOS 용 사용할 수없는 다음과 같이이를 위해 나는 SystemConfiguration API를 사용합니다. SCDynamicStore.h 파일을 수정하고 iOS에서 사용할 수 있도록 설정해야합니다 (현재 Mac에서만 사용 가능으로 표시되어 있습니다).

이 링크는 중복 헤더를 생성하여이를 수행하는 방법을 언급합니다. SCDynamicStoreCreate is unavailable: not available on iOS. 그러나이 방법은 신속하게 작동하지 않습니다.

어떻게 신속하게 달성 할 수 있습니까?

감사합니다.

답변

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) 
+1

감사합니다. @ idz ... 완벽하게 정상적으로 작동합니다. – Suraj