Recently in one of our projects we got a request to make a supporting mobile app on iOS and Android which would scan networks and list out specific access points broadcasted by the customer’s raspberry pi devices. Then the user could connect to the pi and proceed with more functionality.
Although this statement looks pretty easy to implement it soon became a blocked request! After a few hours of re-search we sent the following email to our customer. Putting it down here to help other devs save some time!
Apple does not have any public APIs to scan for Wifi networks. Since we couldn’t believe it we checked the forums..
- One Option is as mentioned in the https://forums.developer.apple.com/thread/39204 i.e to use the NEHotspotHelperClassRef class but to use that we need to ask for special “entitlement” from Apple explaining the cause.
com.apple.developer.networking.HotspotHelper entitlement is required in order to use
NEHotspotHelper. To request this entitlement, send an email to
In one of the forum threads about who will get entitlement the Apple rep mentioned this “NEHotspotHelper mechanism is designed for folks doing captive network management apps. If you’re not creating a captive network management app, it’s not appropriate to use NEHotspotHelper.”
Do we fit the bill for captive network management?? Also the approval takes about 3 weeks before which i am not sure we will be able to test/run the API.
- Use Private Frameworks to scan wifi networks:- There have been a few Private frameworks to achieve this functionality. Apple80211 was a popular one now replaced by http://iphonedevwiki.net/index.php/MobileWiFi.framework. The problem is that if we use Private Frameworks we cannot submit to the app store. It is 100% sure to get rejected. Read this SO thread to know more about this option http://stackoverflow.com/questions/2678047/what-are-private-frameworks-and-how-will-we-use-them
Do we really need to submit to Apple AppStore Immediately? If the users for these apps are limited employees then we can distribute it privately using Crashlytics or TestFlight Beta ( 25 only) till we get the entitlement. The Android app will be on the Playstore anyway.
Hope this RnD helps you save some time! If you found another approach to solving this issue do drop a comment!