2013-10-10 83 views
3

我試圖訪問我周圍的幾個AP的RSSI值,使用帶有iOS6.1和Xcode 4.6.3的iPod Touch 4G以及有效供應配置文件。我已閱讀關於此主題的一些討論,最好的方法是使用私人的Framework MobileWifi。由於這個項目僅供私人使用,因此我可以。iOS6.1:嘗試訪問WiFi時出現問題RSSI(MobileWiFi.framework)

根據this網站我需要一個特殊的權利才能訪問MobileWiFi功能。我從來沒有與授權之前的工作,但根據一些示例,我.entitlement文件看起來像這樣:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>keychain-access-groups</key> 
    <array> 
     <string>$(AppIdentifierPrefix)com.apple.wifi.manager-access</string> 
    </array> 
</dict> 
</plist> 

我還做了一個越獄,爲了安裝的AppSync即可根據無效的權利擺脫錯誤的。我可以在我的iPod上運行應用程序,但每次我想檢查網絡或設備時,應用程序崩潰。這是我到目前爲止的代碼:

WiFiManagerRef manager = WiFiManagerClientCreate(kCFAllocatorDefault, 0); 
if (!manager) 
    NSLog(@"ERROR: Couldn't create WiFiManagerClient!"); 

CFArrayRef devices = WiFiManagerClientCopyDevices(manager); 
if (!devices) 
    NSLog(@"ERROR: devices is NULL"); 

CFArrayRef networks = WiFiManagerClientCopyNetworks(manager); 
if (!networks) 
    NSLog(@"ERROR: networks is NULL"); 

NSLog(@"manager: %@", manager); 
NSLog(@"%d devices: %@", (int)CFArrayGetCount(devices), devices); 
NSLog(@"%d networks: %@",(int)CFArrayGetCount(networks), networks); 

看來,WiFiManagerClientCopyDevicesWiFiManagerClientCopyNetworks方法返回一些不好的價值觀,如果我設置一些關卡調用這些方法和應用程序崩潰是由於後檢查自己的地址,他們是00000000 EXC_BAD_ACCESS返回它們的數組數時。

我讀過如果我不使用正確的授權,MobileWifi功能將不起作用。其他人寫道,而不是一個.entitlement文件應該使用entitlement.xml文件,並使用ldid代碼簽署應用程序並將其傳輸到設備上,但我不喜歡手動這樣做,因爲我更喜歡使用Xcode的調試器和控制檯,而編碼。

我花了一整天的時間試圖擺脫這些問題,但我沒有找到任何解決方案,所以如果有人能幫助我解決這個問題,我會很高興!

+0

偉大的第一個問題。歡迎來到stackoverflow! –

+0

你明白了嗎?這是強制性的越獄設備? – doxsi

+0

@doxsi不幸的是,當時我不得不越獄我的設備。但我不知道今天是否有其他方式... –

回答

1

對我來說,它看起來像你的權利文件是不正確的。

您已將您的包ID替換爲wifi.manager-access權利。您需要將鑰匙串訪問組保持原樣並在文件末尾添加wifi.manager-access權利作爲新的密鑰/值對。

在Xcode中生成新的授權文件並添加以下鍵/值對。

<key>com.apple.wifi.manager-access</key> 
    <true/> 

您的自定義權利的文件應該最後看這樣的事情:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>keychain-access-groups</key> 
    <array> 
     <string>YOUR_APP_BUNDLE_ID</string> 
    </array> 
    <key>com.apple.wifi.manager-access</key> 
    <true/> 
</dict> 
</plist> 
+0

令人難以置信的是,它終於正常工作!非常感謝:) –

+1

注意:它只工作,因爲你有一個越獄設備。對你有好處,只是想讓其他的讀者知道這一點:http://stackoverflow.com/questions/16429521/does-anybody-know-a-way-to-add-entitlement-to-ios-application- for-non-jailbroken – Claude

+2

應該是,不是嗎? – doxsi

相關問題