It may seem a bad and useless idea to an iPad user, but suppose the iPad belongs to a restaurant and it wants to show it's menu to the customer on iPad for god knows what marketing reasons.
The restaurant's goal is that the user can only use the app which shows the menu and nothing else. He shouldn't be able to close the app without shutting down the device because the restaurant is afraid that the user may change some settings, e.g. uninstall the app. Also, if he or the personel do shut down the iPad, the app should autostart right after the device boots.
From what I found, it is not possible on a non-jailbroken device, see e.g.:
Make iPad Single App Device (or startup lock?)
shutdown iOS programmatically
Am I right here? Is it really NOT possible on a non-jailbroken device?
The restaurant of course doesn't plan to publish the app anywhere, so Apple's approval is not the factor here. The restaurant just doesn't wish to do the additional effort for jailbreaking many devices (it's unreliable, voids warranty etc). The restaurant also doesn't want to let the user install the app on his own device, the app should be only on the restaurant's device.
Even if this would work, a question arises how the tech support would uninstall or update such an app, since it's locking the device completely. From the app itself?
Thanks!
If that iPad is belonging to some restaurant they should encase the device in some sort of casing wich should cover the home and power buton. Problem solved! :P
A way to do it manually:
Make the following selection Settings->General->Accessiblity->Guided
access and enable it and set the password
Open the app to be locked
Triple click the home button continuously that's it its the app gets
locked
To unlock triple click the home button continuously give the
password While it asks that's it app is unlocked
Note:
This solution works from iOS 6 only.
Related
Here things getting more passionate and difficult for me as a developer. I want to set up an app that would be capable to remind user for certain tasks at some specific time. The app would use LocalNotifications to remind the user.
Now, user may have this same app installed on his multiple devices, like iPhone, iPad, iWatch and MacOS. User would also change the time of those tasks and other parameters from any of the device he/she want to, I mean iPhone, iPad, iWatch or MacOS.
The operation on data amendments would then sync with all devices.
For instance, if user is having app installed on iPhone and he is set up with a tsk; i-e:
Task
{
taskId
taskName
taskTimeData
}
A task is initialised with name 'exampleTask' in iPhone and notification and every other option is also set in iPhone. After installing same app on iPad and setting the iWatch entitlement of the app.
Now the user must also receive similar functionality on both iPad and iWatch. Similarly, changing the name/timeDate of certain specific task must also update the task in other devices also.
Also must update the time for functionality execution in all the devices.
Please list all the available options in this regard, may become useful for other readers in future.
NOTE: I've gathered some of the related xCode entitlements but can't make myself understand.
1. App Groups
2. Keychain Sharing
3. Cloud Kit
Please explain options from xCode entitlements, I'm neither interested in any third party frameworks nor in web services and third party servers.
I made an app deployed internally at my company. It is placed outside conference rooms and allows the user to see if it's open, schedule room time, view other rooms, etc. Given its nature and use, the app is always the active one on the device and is placed into guided access mode to prevent passers-by from playing around with it. However, the update process is rather tedious since despite our MDM solution, we have to go around and take each device individually out of guided access mode in order for the app to be updated. I've been looking into supervised mode for each device (using the Apple Configurator tool), but I wanted to ask if there was anyone here with experience trying this who could point me in the right direction in case that idea doesn't bare fruit. Is there perhaps a way to trigger the app (and guided access) to close remotely and open, also remotely, once updated? Naturally, this would go against Apple's guidelines, but this app will never touch the app store, so any solution at all is feasible. I saw a few answers on this site from over two years ago saying it isn't possible, but perhaps something has changed to allow this possibility between then and now seeing as so much has changed around deployment in the past few years.
I would do something like that:
Have a device in supervised mode
Set Guided mode through configuration profile (rather than manually doing it). App Lock payload does that.
And when you need to upgrade the app:
Try to upgrade it without disabling guided mode. As I remember, you can install applications silently on a supervised device. So, there is a chance that it will upgrade it and restart it (because of Guided mode) after that.
If it won't restart the app on upgrade try following:
Remove App Lock profile
Upgrade app
Install App Lock profile again
This should work.
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.
This is a strange one, I have a need to create an iOS app that runs in the background on an iOS device, but can not be visible on the Home screen of the device. The app may need to show up in Settings to configure a few options, but it mostly needs to run behind the scenes.
I do not need to publish this app on the app store, it is strictly an enterprise app for my company.
Does anyone know how this kind of behavior might be achieved? Configuration profiles? API's? etc?
Edit: Jailbreaking the device is not really an option for us. We have to keep the devices as they are.
Backgrounding
There are several methods to get permanent background execution:
a) Silent audio which is mentioned by JRG-Developer
b) Usage of beginBackgroundTaskWithExpirationHandler + turning location manager on/off (it will reset remaining time to 600 seconds)
Making app invisible
You can use SBAppTags in Info.plist (take a look at this: How to remove app icon programatically from jail broken iPhone app?)
It will make your icon not visible on Home screen.
I've no idea how you can tackle the not be visible on the home screen criteria, but there are certain services that are allowed to be run in the background continuously, notably:
Background Audio (even silent audio)
While this is indeed very hacky, short of jailbreaking the devices, this may be your best bet.
While it's unlikely / very difficult to get past the review process, in the event for some reason you do need to (attempt) to publish this app to the App Store, some apps are even available on the App Store which take advantage of this hack, such as PasteBot.
You should definitely read their write-up here about getting their app's Cut-and-Paste functionality to work while in the background:
http://tapbots.com/blog/pastebot/pastebot-music-in-background
Another out-of-the-box idea, why not use Android devices instead, which do support multitasking?
Two methods:
Jailbreak. A jailbroken iPhone is essentially a Mac and you can use all Mac UNIX programming tricks - spawn a daemon (you can even ask launchd to do that), or something. You can set up enteprise-wise Cydia source. Refer to saurik's website for a walkthrough and set up an experimental server using Ubuntu (which used apt too)
A non-jailbreak way may be possible, but it will depend on what your app is doing. You can try use enterprise-wise push notifications.
Given that this is impossible to do on non jailbroken phones, I'd suggest the following:
develop a directory app, or a phone list app, something that is specific to your company.
have it connect to a web service once a day to register the device ID (so you know the user has not deleted the app)
tell users they need to keep the app open at all times (and if a user's device does not register one day, send them an email asking them to launch the app).
Now you can send back whatever you want with the app. If they kill it, you'll know the next day when you have a script look at the logs.
If you think this is a terrible idea, it is, but its the best you are going to get on iOS right now.
EDIT: you could send a notification every day - say in the AM - to make sure the user opened the app if it wasn't running.
From my experince, this kind of behaviour cannot be achieved on iOS. When an app enters into background, it is active only for a small particular amount of time. After that, it goes into hybernate state. It stops working. So the behaviour you said can not be achieved without abusing iOS workflow. Thats why some call iOS's multitasking as not true multitasking. Only jailbreaking might help your case. That was for one case. The second one where the app cannot be seen on home screen is again, impossible. It has to be on springboard to run.
I'm developing a business app for iOS which will be used by customers in a cafeteria for ordering various products available.
Whenever iPad is screen unlocked by the customer, the custom business app should open up even if the previous customer open a different app.
So basically open this business app after every screen unlock, is it possible to get this done and how?
no it's no. it's the default iOS behavior. Only in a jailbroken iPad you'll manage to do this.
Definitely not.Its not possible and the other thing if you do so user gets irritated by seeing it again and again..As per my knowledge its not possible as well as not a better idea to do it..Think from user perspective..
I think it's not possible to do, not possible to do that scenario