一、前言
蘋果在iOS5推出之後就不再提供能直接獲取Wi-Fi RSSI數值的API。本文的方法是在越獄環境下,基於MobileApple80211框架來進行開發,實現自動搜索周邊Wi-Fi熱點並獲取其信息(比如MAC,SSID,RSSI,CHANNEL)。目前該框架成爲了私有框架,其中API均爲私有API,導致應用不能上App Store,只能等待Apple哪天再次開放API。
二、調試設備
(1) iphone 3gs iOS4.0 無需越獄即可獲取;
(2) iOS5及以上則必須要越獄,並將程序部署到終端的/Applications目錄下取得超級用戶權限才能獲得Wi-Fi的訪問權限。
注:可參考應用Wi-Fi Analyzer(越獄後在Cydia上下載)。
三、代碼
Demo源代碼參考:http://easymorse-iphone.googlecode.com/svn/trunk/iphone.wifiii/
我的代碼:http://pan.baidu.com/s/1EJl3X
注:iOS5及以上,注意修改路徑,如下所示。
- libHandle = dlopen("System/Library/SystemConfiguration/IPConfiguration.bundle/IPConfiguration", RTLD_LAZY);
要獲得Wi-Fi的訪問權限必須獲得超級用戶權限,因此iOS5及以上設備必須越獄,並將程序部署到設備的/Application目錄下,下文將詳細介紹。
四、製作系統級應用
ios的程序分爲mobile和root權限模式,我們一般用xcode開發的app取得的是mobile權限,但是ios越獄後安裝的app如:Cydia、91助手、PP助手等均爲系統級應用程序。系統級app的好處是:用戶無法手動刪除、取得完全的root權限、可設置開機啓動項等等功能。
通過xcode打包的ipa是無法安裝成爲系統app的,所以我們需要另外一種打包方式:DEB。下面就主要介紹deb文件的製作方法。
4.1 deb文件製作方法
(1)通過xcode得到app文件
我們通過xcode編譯之後,可以右擊後“Show in Finder”找到WifiScan.app文件。
(2)準備文件目錄
創建一個目錄用來打包,如tmp,tmp下建DEBIAN和Applications兩個目錄, DEBIAN下建一個文本文件control(需要把.txt或.rtf的後綴去掉)
tmp目錄結構如下:-DEBIAN
---control
-Applications
---WifiScan.app
control文件就是打包時的配置文件,它也會作爲deb包的配置被打包到包中,文件例子如下:
- <span style="font-size:14px;">Package:com.yuhangkit.WifiScan
- Name:WifiScan
- Version:0.1-1
- Description:WifiScan,開發中...
- Section:商業
- Depends:firmware(>= 4.3)
- Priority:optional
- Architecture:iphoneos-arm
- Author:yuhangkit
- Homepage:http://blog.csdn.net/yuhangkit
- Icon:file:///Applications/WifiScan/Icon.png
- Maintainer:Zhengyuhang <http://weibo.com/supermianmian></span>
(3)打包deb文件(說明:如出現應用安裝後閃退的情況,可參考http://blog.csdn.net/hjs89/article/details/38403037此處的打包方式,比較詳細)
打開終端,文件路徑打開至tmp文件夾上層目錄,輸入
dpkg-deb -b tmp WifiScan.deb
(4)Mac下需要手動添加dpkg命令
Macports下載地址: http://www.macports.org/install.php
根據自己的Mac系統版本選擇相應的Macports版本,雙擊進行安裝。
注:安裝Macports有可能會卡在最後一分鐘,需要重啓後斷網安裝即可。
接着安裝dpkg,打開終端輸入: sudo port -f install dpkg
安裝時間較長,如失敗可重新安裝Macports後再輸入口令。
4.2 生成系統級應用
(1)通過Cydia,安裝DEB
安裝DEB的方法很多種,我採用的是iFunBox工具,很簡單。
下載iFunBox的Mac版本:http://pan.baidu.com/s/1mYQ4o。
連上越獄設備然後將deb文件拖入iFUnBox中,如下圖所示。
然後重啓設備就行了,默認是在開機後自動安裝。
(2)系統級應用的刪除與調試
可以看到系統級應用WifiScan已經安裝成功,且不能夠直接刪除,必須用設備上的Cydia-->已安裝-->WifiScan,進行刪除。需要注意的是,每次更新代碼調試,必須先把先前的刪除乾淨才能順利重新安裝。
鑑於這種調試方式過於繁瑣,目前正在考慮iOSOpenDev直接在Xcode裏配置越獄開發環境來提高調試效率,有興趣的朋友可以自己試試。
(3)成果