How to pop-up the "Cellular data is Turned Off" warning message? - iphone

Apple's built-in applications show a pop-up message whenever the user doesn't have cellular or wifi connectivity. It looks something like:
"Cellular data is Turned Off
Turn on cellular data or use Wi-Fi to access data
[Settings] [OK]"
Clicking on the Settings button opens the settings panel.
Is this a system pop-up? How can I use it in my own application?
I'm already using UIRequiresPersistentWiFi but it uses a different type of message which appears when airplane mode is on.
Thanks!

You need to enable Application uses Wi-Fi in info.plist. Then this warning is displayed when cellular data is turned off and you're not connected to wi-fi.

Look at the Reachability example in Apple's Sample code. It will give you all the code you need to determine if you're connected or not to the internet.

Related

Connect CBPeripheral so that macOS MIDI Studio recognises the connection

This is probably in a book but I don't know which.
I'm trying to connect a BLE MIDI CBPeripheral so that it becomes connected on MIDI Studio, i.e. usable as a MIDI source/sink by all the apps in the system. Although I get the indication that it is connected, it doesn't appear so in MIDI Studio or other apps. I know it's possible because Korg's Bluetooth MIDI Connect is able to do it. But it does seem to open the system's 'Bluetooth Configuration' window, so maybe there's no programmatic way of doing it.
I'm creating a CBCentralManager and keeping a reference to it;
When state is poweredOn I do a scanForPeripherals;
When I get a didDiscover:CBPeripheral, I keep the reference to the CBPeripheral and call central.connect(peripheral...);
I get a didConnect:CBPeripheral and keep my app running, but it doesn't appear as connected to anyone else.
I know 'connected' means connected to my app. But I'd really like to have it available for others.
If this is a purposefully Apple-designed limitation, does anyone know what the purpose is?
If not, is there some CoreMIDI API I can use?
Maybe I am missing something, but the apple guide gives you a hint on how to connect a BLE MIDI device to your Mac:
In the Audio MIDI Setup app on your Mac, choose Window > Show MIDI
Studio.
In the MIDI Studio window, click the Configure Bluetooth button in
the toolbar.
Set your Bluetooth MIDI peripheral in pairing mode.
Select the peripheral in the list of devices, then click Connect.
There is no need for custom coding. It should be possible for multiple apps to use the same BLE device, but the apps need to connect to it. BLE devices usually don't show up in the system settings but this might be different for MIDI devices.
For items connected by USB, it does keep the connection information. Once you use the Bluetooth Configuration screen and select the devices, do they appear on the MIDI Studio screen. You may have to create a new External Device.
I think it's like using a new printer. You have to add the new printer using manual methods. However, you can print to it using code.
I have an Objective-C program in the BRossTools directory of the GitHub repository https://github.com/BradleyRoss/ObjectiveC-Examples . If you run the program, it might be interesting to see what happens when you use "Show Configuration" and "Show Sources/Destinations"

How to detect all available Wifi networks and connect to one of them in an iOS app

In my iOS app, I want to detect all available wifi networks and then choose one network form the list and connect to it. The goal is to not open the Settings built in app to connect to a wifi, but to do it all in my app.
First, is this possible? If possible, please point me to what framework(s) and methods to use.
I have looked at the Reachability example, but that doesn't work for me because, I think, all it does is monitor the network state of the device.
I also looked at the Captive Network Support framework, and used the CNCopySupportedInterfaces function:
CFArrayRef allWifiNetworks = CNCopySupportedInterfaces();
NSLog(#"%#", allWifiNetworks);
but all I am seeing is the current wifi network that the device is connected to.
Thanks
I'm pretty sure you can't do this, at least not if you want to be able to publish on the App Store.

iOS Open WI-FI Networks Controller

I show a pop-up when no connection is available. When pressing on OK button of this pop-up I would like to open WI-FI Networks native Controller (Settings). How can I do that?
Thx!
On a non-jailbroken device, I do not believe that this is possible because you cannot open another application or execute any code that is not part of your application. If your application requires that the user be connected to WiFi, you can set the UIRequiresPersistentWiFi key in your Info.plist. This will leave it up to iOS to present the user with anything required to connect to a WiFi network.

How to change connection from 3G to wi-fi programmatically using iPhone SDK?

Lets consider that I am connected to internet through 3G in my App. When a wi-fi hot spot seems to be appearing, can I programmatically switch to the wi-fi. Is this vice-versa condition possible?
iOS does this automatically by itself!
If no known WiFi network is found, it uses cellular data. If it finds a known WiFi-network, it connects to and uses that network instead.
If any WiFi-network is found, and your application requests access to the internet, iOS (usually) automatically presents an alertView and lets the user log in to a WiFi-network. If the user does not log into a WiFi-network, it stays on the 3G-network. When iOS 7 comes, iOS may connect to Hotspot 2.0 networks automatically as well.
Apple keeps individual apps on a tight leash, and so they do not let apps control things like this.

How to display a list of Wifi-Networks in an iPhone app?

I found some private (undocumented) APIs but Apple does not allow apps to use private frameworks. So does anyone know how to do this using Apple official packages?
like: when youtube app prompts you to the push notification: "Select a Wi-fi network"
Thanks in advance.
If you set the UIRequiresPersistentWiFi setting in your info.plist file, the iPhone OS will know that your app needs Wifi and pop up the message for you.
As far as I know, no app actually manually displays the wifi selection alert.
Thats wrong check this app out
http://itunes.apple.com/us/app/ihome-connect-setup-app-for/id450241802?mt=8
It shows available wifi networks
The best you can do in iOS, currently, is display the network the user is currently connected to. iOS doesn't allow you to access a wifi scan from within an app. I've been wrestling with this inability for some time now.
If designing an accessory that has WiFi, where you're trying to pass the user's WiFi network SSID and password, it will be up to the accessory to give the app that wifi scan list. The app can then display the list the accessory gave it to the user.
(I bet that's how the app #zaid pointed out in his answer, "iHome Connect", is doing it.)
Another approach is you could have a screen that prompts the user to enter the password to the wifi network they're connected to already, and then once the accessory is connected to the app, pass those details without the need for a wifi network list. I think that approach has a better user experience.
Plenty of stackoverflow questions that answer how to get the current wifi network, here's a couple:
Getting OSX Connected Wi-Fi Network Name
How do I get the current wifi network name after Yosemite in Swift?