How do I programmatically remove an application from an iOS device? [duplicate] - ios

This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
Programmatically delete my own app
Currently I am working on a iphone application and one of the critical requirement of the application is if a user cannot successfully authenticate after 5 attempts, the application is removed from the user’s iPhone.
How can I achieve this goal?

Being able to alter things outside of the application's own sandbox is a huge security risk that Apple (understandably) has not allowed. Therefore you will not be able to do this. The best you can do is store the result in a persistent value and not allow to app to continue after launching. For bonus points, you can store this value in the iOS keychain so that it will persist between installs if you like, then the user will be forced to reset their ios device to factory defaults to be able to use it again.

Can't be done. The best you can do is to make your app stop functioning after five failed authentication attempts.

you cant. the only one who can have this privilige is the user. You could just make the app to not open anymore, making the user angry and then deleting it afterwards.

Its not possible. You should handle it programmatically like locking the application. Once user is failed for 5 attempts, change your startup viewcontroller and do not allow the user to navigate any where else. Here you can display some message to delete the app.

An application, installed in a non-jailbroken device, is a sandboxed eco-system.
If your app is for App Store, this thing cannot be done. If this app is for a JB device (for In-House apps would be possible, but I think you need root permissions to delete apps), try to remove the app file from disk after the app has gone on background (but I'm quite sure files are locked, so you'll not be able to do it). If this approach, as I guess, doesn't work due to locked files, you can try to search for private APIs.

It's not possible. You only solution is lock the app if authentication not success.

Related

Programmatically erase iPhone's data swift

I am developing an iPhone Application to wipe all data from iPhone including photos, videos, contacts, messages, apps, etc. programmatically. I wish to achieve this with an iPhone Application only.
The approach I am thinking of somehow I manage to Clear data from iPhone and rewrite the memory with some junk files or binary data 1010 say. (Its just an idea!)
All I have managed to do is delete photos from Photos which are further not deleted from Recently deleted folder in Photos App.
Also, I found this Programmatically How to wipe out iPhone or iPad data in i phone apps in i phone apps which declines it's feasibilty.
But, Is there a way to programatically restore my iphone to factory settings? says using the C files mentioned here https://github.com/lite/osxrce/blob/master/resetapp/main.m can may be make it possible. They say they tried it on a jailbroken device though.
What you are hoping to do isn't possible on an non-jailbroken iPhone. You will be violating the iOS sandboxing among other things.
A similar outcome may be possible by creating your own MDM server, and building your app to interface with it. On first installation of your app, you can have it install the MDM profile. The app can then feature your 'Wipe' button which can signal to the MDM to send a wipe push notification to the device.
It would take a lot more work that what you're asking about, but it should be possible.
Reference: https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf
Apple do not allow to delete files which aren't created or part of your application, so you will not be able to delete data of other apps.
I don't think you're allowed to do that anyway. Even if you were able to do it, it would not be accepted on the app store.
You can backup the iPhone via AppleMobileBackup.exe -b, then modify the according
database file(such as addresscontacts, messages), and restore the modified ituensbackup files to the iPhone via AppleMobileBackup.exe -r.

Delete iOS app settings [duplicate]

This question already has an answer here:
Is it possible to reset the privacy settings in iOS?
(1 answer)
Closed 7 years ago.
I'm working on an app that requires requesting mail access. Since the simulator doesn't have a Mail app I've been using my physical device to test the app.
My problem is that I want to test the request to access Mail in relation to the welcome/intro screen that I've made but even if I delete the Xcode build version of the app from my device the settings for allowing the Mail access still persist.
I want to force those settings to delete when I delete my app from the device so that it requests Mail access after every fresh install for the sake of testing. So far the only solution that I've seen for doing this is to complete a fresh install of iOS each time, but that's much to much trouble when I'd be wanting to do it several times.
Does anybody have a solution for this?
The simulator does actually have a Calendar and I do plenty of testing on it. If you want to add more calendars via the simulator, open the calendar app, tap edit at the top and you can enter new calendars.
Here's the solution I found thanks to #Martin R's comment.
Go to General > Reset > Reset Location & Privacy
This reset accomplished what I needed for the problem.
I've myself run into the same problem when allowing photo access.
It's not a proper answer, but the workaround I found was effective: just change the bundle id when you want to test this behaviour. iOS will assume it's a different app and ask you again for all the authorisations granted before.
I'm still interested by the proper answer though — if there ever is one.

iOS Application - intercept when a user deletes the app from device

I'm developing an apple iOS application using Xcode.
How to know if a user removed an application from his iPhone/iPad Device?
thank you
If you have several your apps on device - you can use SHARED KEYCHAIN to detect marker you've written in deleted app. Shared keychain can be accsessed by apps sharing same keychain access group. Or you can get approximate statistics using some statistics framework by checking whether some application stopped logging any events for a long period of time.
No you cannot. The only thing you can catch is first run of your app. There is no obvious reason for knowing when your app is uninstalled (except of spamming users). You can just keep stats to see your app usage if that's the case.
No, an app cannot detect when it is being deleted from the device.
An app runs in a sandbox / secure container. (Almost) everything outside that sandbox is just a 'mystery' for the app. Your app shouldn't need to know, so IF this is an issue at all, it is basically just a design issue for you to deal with.

Is it possible to have a running background app on iOS

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.

Is there any way to programmatically delete my own iOS app?

Is there any way within the iOS SDK for an app to delete itself?
I'm seeking the following behavior:
If a user fails to enter the correct password to log in (5 times)
The app deletes all user data AND deletes itself from the iPhone.
I understand how to delete all user data. I'm just asking if it's possible to delete the app as well.
No, only the user (or iTunes, or Xcode's Organizer) can remove applications from the device.
Not at all. All your app can do is delete its user data and refuse to do anything else. Removing it from the system is entirely up to the user.
No, it's not possible. I don't know about jailbroken devices though.

Resources