My team and I are students and we are currently embarking on a final year project to develop an Indoor positioning system (IPS) mobile application on IOS (IPhones only). Would like to clarify our doubts on certain areas.
1)Is it true that IPhones Apps that calculates the wifi signal strength from access points is still not allowed in app stores?
2) I have seen quite a number of SDKs using Wi-fi triangulation to create IPS for android. Other than redpin which provides open source SDK for IOS, is there other SDKs available to develop IPS on IOS?
Thank you so much.
1) True 2) AFAIK No.
See this SO answer on outdoor positioning and another SO answer on the Apple80211 private framework to access the WiFi (app rejection if you use it ofc). There are also hardware solutions like Cisco Mobility Services Engine.
WiFiSlam used signal strength + SSID + inertia. They claim to use signal integration with a better algorithm than Kalman. See http://youtu.be/OGdvjvla1Tc#t=1033s They were bought by Apple and now are gone from the Internet, but it seems possible, although complicated, to develop a software only solution for indoor positioning.
Another thing, even when you set kCLLocationAccuracyBestForNavigation but the position is still all over the place when compared to a GPS unit. See http://web.archive.org/web/20110912081330/http://rnr.davidlokshin.com/post/825290568
You can only access Wi-Fi-signals from your app if you jailbreak your device. This is not a good solution of course. We at indoo.rs eventually decided to go for Bluetooth instead of Wi-Fi.
We provide an SDK for that, by the way. ;)
1) True. There are no public APIs that supply signal strength. (The only info that can be gathered with public APIs is the SSID of the currently connected Wi-Fi network.)
2) I don't know.
Related
I want to develop an indoor positioning-based iOS app intended to help users to find the different rooms in an offices building. I've seen here that Apple now offers a way to get indoor positions for iOS 8 devices. It takes me to Maps Connect, and asks me to sign up there and provide some information about the venue where I want to enable indoor positioning.
I don't find more Apple's documentation dealing with this feature far from an example code (Indoor Positioning with Core Location). I don't understand the procedure to create an iOS 8 app that provides indoor positioning:
1) What does Apple exactly mean with "venue"? Is the indoor positioning feature only allowed to be used in public buildings such as museums or stadiums? It is not possible to use it in a private building?
2) If I can't make an indoor positioning-based app this way, what the alternatives could be? ASFAIK, the iOS SDK does not provide an API to get WiFi signals strength as Android does... The same problem if I want it to work in iOS 7.
This is the first time, that I've wanted to develop an app for indoor positioning and I'm a bit lost. I've read some related posts (a bit old ones) such as these:
Indoor navigation hardware/software requirements for iOS
iPhone indoor location based app
But I haven`t a clear idea of which the starting point to start developing this should be or the options I actually have. I'll appreciate some guidence and/or some opinions from someone who has already developed something like this.
EDIT: At least I'd like to know some more details about the Apple's indoor feature for iOS 8: if it could be used for any building, private or public, if it is more or less accurate, and some kind of tutorial or guidelines providing some steps to follow to develop this kind of system, since Apple itself does not seem to provide further prior explanations...
Thanks in advance.
The WWDC session "Taking Core Location Indoors" will get you up to speed.
https://developer.apple.com/videos/wwdc/2014/?id=708
I am trying to build an iOS app which would communicate with another non-apple device via bluetooth. It would be a Bluetooth Stereo Transmitter which uses the bluetooth A2DP-profile which is supported by apple :
http://support.apple.com/kb/HT3647?viewlocale=en_US&locale=en_US
I have read tons of articles and pages. I have many unanswered questions and hope to recieve some answers and write something that will help me and others in future work with iOS and bluetooth.
Evaluating the available bluetooth connection options
Here's a list with possible approaches and informations I found. Please feel free to answer/edit anything that is not correct.
Edited from http://www.pocketmagic.net/2012/07/bluetooth-and-ios-use-bluetooth-in-your-iphone-apps/ :
A) Enroll in the made for iPhone/iPod/iPad (MFi) program. Details on costs are not available, but this is not for the small development companies, barely selling a few licenses.indicate costs depending on project, and starting numbers somewhere at 10K USD. Not really an option IMO, as the costs involved and trouble getting certified are ridiculously high, for something so basic and simple such as building a Bluetooth application. I have found a Bluetooth stereo transmitter with bluetooth version 2.1 (Class II). I can not find if the device is MFi compliant.
Based on this article :
Existing bluetooth device and Apple MFI
Q1: How can I be sure or find out if the device is Mfi compliant?
Q2: If the device is Mfi compliant will I be able to pair it with the device in the settings option?
B) CoreBluetooth framework, currently usable only with Low Energy Bluetooth 4 devices. Since these are not largely spread this is not really an option. You won't be able to connect to standard headsets, keyboards, or other non-Bluetooth 4 devices.
Q3: Will I need to pair the non-apple bluetooth device with my iPad (in settings) to use the CoreBluetooth framework?
I am asking beacuse I have no experience with iOS and bluetooth and beacuse my budget is low, so I dont want to waste money buying stuff I will not be able to use for development.
C) GameKit framework, this allows some basic Bluetooth functionality, such as finding nearby devices and establishing a serial communication link, but it only intended for use between iOS devices. So Android plus iPhone via GameKit is a no go.
D) Private APIs. There is a BluetoothManager framework, in the private APIs, inside the SDK. This can be used to achieve the proposed task, but you won't get your App approved on Appstore, as private API's is not allowed by Apple. Since this is so convenient, and working so nice, almost like the real thing Apple didn't want to include.
Q4: Can I use private APIs within the iOS Eneteprise program and distribute my apps since there is no App store approval process?
Q5: Does anyone know some more private APIs I could use beside bluetoothManager framework?
E)Jailbreaking and using Ringwald's BTStack. Jailbreaking = rooting = freedom, probably the best way to go . But this places you so far away from Apple's guidelines, and the Appstore itself. So better decide what your project is all about, and who your users will be.
Q6: For bluetooth I need CoreBluetooth Framework. What framework do I need to import if I want to use wifi communication?
Thanks for any help :).
I understand that the iOS App "PKPKT" is using BLE (Bluetooth Low Enery). But what I am curious about it is, is it purely using BLE only? Or does it switching between BLE and Classic Bluetooth?
I tested with a iPhone 5 and a iPhone 5s with both installed the app. I turned on bluetooth on both devices. And then i checked the "DEVICES" list to see if the other iPhone is paired with one another, I found that they are not. Until i launched the PKPKT on one of the device, and the i check the "DEVICE" list again, now they are paired and connected. So, i'm thinking is this pairing done by the BLE pairing? Meaning one of "Just works", "Out of Band", or "Passkey entry" methods.
There is also a "Chat" functionality in that app. This make me curious if the chatting function using BLE or Classic Bluetooth?
So my question is actually "Is switching between BLE and Classic bluetooth possible?". This is part of the study on this BLE technology. Hopefully someone could help me and other newbie on this new technology.
Thanks in advance!
I wrote PKPKT. I only use BLE. No classic. iBeacon is cool but doesn't have the background scanning needed to discover other players. I use game center, but only for scores, no sessions. It's optional in the app to enable game center (those banners can be distracting!)
The chat is also over BLE.
Because the connections are not encrypted, you don't need to manually pair the devices, and "just works"
I think you might find this link helpful. It implements something that looks to be a simpler version of PKPKT. I believe the app uses a combination of GameKit/iBeacon. The app requires iOS7.0+ and states, "PKPKT does the hard work of finding other players by detecting them using Bluetooth Low Energy (BLE) in the background." iBeacon would be the most battery-efficient way of accomplishing this and is a new feature in iOS 7. There is a wealth of information online(particularly on SO) about peer to peer bluetooth gaming using GameKit, if you are interested.
We can't say for sure unless the developer lets us know. If one were to attempt to recreate the application, GameKit and iBeacon would be the technologies that I believe most would recommend.
You might find this project helpful as an overview of how to use Bluetooth LE to communicate between two devices. You don't need to pair the devices, and unlike iBeacons, it works when the app is in the background.
SimpleShare - Easy Proximity-based Sharing for iOS
You can use the delegate methods of the SimpleShare project to easily share arrays of strings between nearby users running your app, such as user IDs, which you could then use to get more info, photos, etc, about that user from a web service.
As far as I know it's not possible to scan for hotspots in range and read their bssid and signal strengths. This was possible on iOS 4 by using private APIs and not longer possible on iOS 5 without jailbreak. Even if it were possible, the app would be rejected on the App Store. Is that right?
One company that has an indoor positioning system is claiming they can develop this system in iOS. I know for a fact they are scanning for hotspots and signal strengths and then triangulating the signal on their current Android app.
Are there any alternatives I am missing? Their claiming sounds impossible to me but I would love to hear from the people here. I would like to be ready when they demo (although I am expecting a jailbreak or some kind of mock up)
As far as i know this can still be done (using private APIs, of course) by MobileApple80211 framework.
Stumbler code is a good source of information on how to use this framework.
For iOS 5 you'll need a jailbroken iPhone. Guvener Gokce has a very educational blog post on this: iPhone Wireless Scanner iOS5
Just to update the answer: The MobileApple80211 framework has been replaced by MobileWifi.framework. You will need a jailbroken device (supposedly it can't be done using just private API's, hence on a development/enterprise non-jailbroken device).
As far as I know it's not possible to scan for hotspots in range and read their bssid and signal strengths. This was possible on iOS 4 by using private APIs and not longer possible on iOS 5 without jailbreak. Even if it were possible, the app would be rejected on the App Store. Is that right?
One company that has an indoor positioning system is claiming they can develop this system in iOS. I know for a fact they are scanning for hotspots and signal strengths and then triangulating the signal on their current Android app.
Are there any alternatives I am missing? Their claiming sounds impossible to me but I would love to hear from the people here. I would like to be ready when they demo (although I am expecting a jailbreak or some kind of mock up)
As far as i know this can still be done (using private APIs, of course) by MobileApple80211 framework.
Stumbler code is a good source of information on how to use this framework.
For iOS 5 you'll need a jailbroken iPhone. Guvener Gokce has a very educational blog post on this: iPhone Wireless Scanner iOS5
Just to update the answer: The MobileApple80211 framework has been replaced by MobileWifi.framework. You will need a jailbroken device (supposedly it can't be done using just private API's, hence on a development/enterprise non-jailbroken device).