iOS prevent app switching - ios

I want to prevent app switching on an iPad. I need to load a custom app for my employees who can use the app and do nothing else on the iPad. I've heard that Apple allows custom apps to be loaded for commercial uses without going through the app store.
The basic settings under General > Restrictions let me turn off a few apps, but this is inadequate. Ideally, I need two provide two modes: Guest and Admin. The Admin would have ability to other apps and settings. Would be great if the passcode functionality could be leveraged for this.
Is this possible?

The ability to disable the home button on the device is coming in iOS 6, as seen on iOS 6 Preview: Accessibility.
You may be able to configure an iPad to disable the home button as well using Apple's Configuration Tool by setting SBStoreDemoAppLock. See another question on Stack Overflow, Lock-down iPhone/iPod/iPad so it can only run one app.
Finally, as for deploying your apps, you probably want the iOS Developer Enterprise Program.

Related

Prevent a user from exiting an app or accessing other apps in iOS programming

I am working on one enterprise iPad app where client ask for preventing user from exiting app and accessing other apps. After all try I found that this is possible through settings app of device with guidelines mentioned here .
I would like to know if somebody knows the alternative way for this or by programming if possible.
Note : We are not going to put this app on app store.
If App has to go to app store
Prevent app from exiting - not possible
Access other app - MDM approach can hide the App
Your app can't do such actions. However, since you are discussing an Enterprise App, have you considered Apple Configurator or other MDM solutions to block access to other apps?
As your link states, you can also use Guided Access and Parental Controls to disable notifications.
You can also require Airplane Mode be turned on and WiFi be disabled before whatever functionality you need is set, and if the user violates any such terms, then you disable your app until, for instance, a proctor gives a code to reactivate it.

Simulate device buttons inside my app?

I have a view containing 4 buttons:
Home
Lock
Volume up
Volume down
all I'm trying to make is that when you press one of these buttons, my app should do some communication with the device to simulate one of these buttons.
Example: If I click the home button exists within my app, is the same as I press home button in device.
This kind of thing is possible? jailbreak is necessary for this?
None of these functions are available to you if you want to get your app accepted into the App Store. For a while some apps accessed private API's in AVSystemController however it seems recently apps using this method are being rejected. (Although some apps still using the method seem to be left in the app store)
If you want to go down the jailbreak route you'll have to dig into private API's and the headers of the various frameworks.
Also just a note, Apple provides some sort of interface like this through their accessibility options.
To do what you are after would go against Apple Review Guidelines so it will get your app rejected under
2.5 - Apps that use non-public APIs will be rejected
You are not allowed to take the functionality of the Home and Lock away from these buttons and put it within your application.
Though I will not say it is impossible to do if your app is for jailbroken devices. Such as to exit your app you can do exit(0); though I still wouldn't recommend it as it makes it look as though your app has crashed when it hasn't.
For the volume control you can do this with the use of MPVolumeView I would recommend having a read of the Apple Documentation and this question iOS: Accessing device hardware audio volume control

How to set an image in my own app as wallpaper of lock screen in ios7?

I am building an album app. I want to set a photo in my own app as wallpaper. Is there some method available for doing so?
update:
I know there are already some similar questions posted. But they are out of time. So I am wondering if there is some method in iOS7 to implement so.
For apps going into the app store this isn't possible. Apps can't change anything outside of their environment this is because apps on iOS run in a sandboxed mode so they don't know anything about other apps that are on the device and can't affect the OS directly.
To actually do it you would probably need to use some private API so your app would get rejected under:
2.5 Apps that use non-public APIs will be rejected
but I suspect that they would actually reject it under:
10.4 Apps that create alternate desktop/home screen environments or simulate multi-App widget experiences will be rejected
As you are directly altering the home screen.

Lock iOS app in single app mode programmatically

Note : I don't want to submit this app to app store.
What i want to achieve :
I want simple app with one view having two button Lock and Unlock.
Lock - This button will lock device. Only this app's screen will show nothing else will be accessible even after restart same screen will show up. Home button, gestures will get disabled similar to single app mode.
Unlock - This will unlock device and switch to normal behaviour of device.
iOS :
I want this for iOS 4.3 and above.
I have checked following solutions, but these don't match my requirements
Configuration profile
Lock-down iPhone/iPod/iPad so it can only run one app
But it is manual (reboot device, open app which you want to run in single app mode). I want to do it programmatically the way i mentioned above through my app.
Guided access (iOS 6 and above)
How to lock down user to Single App mode in iOS 6, Programmatically?
I want it do for all os and programatically.
Is there any way to do this ? As i don't wan't to submit it to app store is there any private api, some hack for springboard to achieve this ?
Thanks in advance !!
As I know in iOS 7 there is a new feature which allow to do exactly what you want.
However, it's only applicable for iOS 7 (and I believe it's only applicable to a supervised devices).
1) You will need to install restriction configuration profile with autonomousSingleAppModePermittedAppIDs key (take a look here)
This is one time step and a user will need to manually accept this configuration profile.
There is another option to use MDM to install it silently, but it could be an overkill for you.
2) You should use API:
UIAccessibilityRequestGuidedAccessSession (to lock/unlock)
It is defined here
3) And most beautility part. All of it is officially document. So, you can even submit it to AppStore.
P.S. Why do you care about 4.3 or 5? They have tiny market share by now. Most likely even iOS 6 has below 20% market share already.
Update 1
Potentially, you can try to use API which sends clicks and keys (search for GSEvent in iPhone-privateapi tag). May be using these API's you can do triple home to toggle accessibility on and off.
If this work, I think you should be able to cover iOS 6. I am not sure whether both this API and triple home click were available prior that.
It looks like this private API is unaccessible anymore in iOS 7. So, probably you can ignore this idea.
Just wanted to write on this even though this is old as i needed to implement a similar solution and i got it working. The steps for me as follows and a note here is that this involves MDM and other specific steps.
My requirement was as follows. Each of the iPad at different locations has a set of apps installed.For ease of it lets assume each Dept. has their own apps. Participants open a app related to their dept. to take a test, the APP automatically Locks the iPad to single-app Mode and at the end of the test, it will unlock it self.
Supervise the iPad/iphone using the Apple Configurator.
Install the MDM related files ( Each MDM has its own set of instructions, usually involves downloading a profile).
Every MDM has a option of Single APP Mode or MultipleAppMode. Select the second option and add the app IDs to the list. (A single APP mode works pretty well with MDM's but i did not want the app to be locked to a single APP all the time).
I used the UIAccessibilityRequestGuidedAccessSession api to lock unlock the device from single app mode.
http://bobxcode.blogspot.com/2015/12/programmatically-implement-single-app.html
Thanks,
Bob
In MDM configuration, There is an option
autonomousSingleAppModePermittedAppIDs
Optional. Supervised only. If present, allows apps
identified by the bundle IDs listed in the array to
autonomously enter Single App Mode.
Availability: Available only in iOS 7.0 and later.
But this needs Supervised Device mode.

Let iPad only use one app and disable settings

At the office where I work we are trying to deploy iPads. We now have 16 iPads all around the company and we use Sophos Mobile Control to monitor and manage those iPads.
However, we found out this is not enough. Everytime I come across an iPad given to an employee, he changed things to the device or the software. Although we do have policies for that, the iPads are NOT covered by a BYOD-policy that would allow such things within the company.
After a lot of desperate tries to disable all sorts of things in the iPad (from trying to disable the Settings App to using a "sort-of" kiosk mode using one app) all solutions I came to didn't fit the whole need for clean devices.
When trying to disable settings, you just can't disable everything, and things like backgrounds etc. are still changeable by the employee. We don't want this since this iPad is kind of like a trademark for our company - we try to maintain a steady pace in developing and implementing new devices and ways to get the job done - and clients must in no way be confronted by the unprofessional backgrounds set on the iPads by those employees.
Whenever things are possible, people will try to (ab)use it. I want to have the control over what apps, settings and web pages can be viewed/used by the iPad users. Is there any way for us to change the way iPads secure themselves?
I think you are after the "apple enterprise configurator"
http://www.apple.com/support/ipad/enterprise/
I've not used it but it sounds like the (only) option.
http://help.apple.com/configurator/mac/1.2/
Have you tried the guided access? I'm not that familiar with it, so it could be that this is just meant for temporary sessions. I understand the employees have longer access to the device?
iOS: About Guided Access
Another option would be to lock the iPad into a single app. I wrote a blog post on this earlier. It worked for iOS 5, not sure about iOS 6. Though the enterprise configuratior might have options to enable this too:
Kiosk mode for iOS

Resources