Validating iOS screen for user errors - ios

I have developed an iOS enterprise app for iPad. When it is launched it connects to a webservice, gets some data, and stores it in Core Data. Then the next screens use this data and do what is needed, like fill UITextFields, drop downs, show the user a UIAlertView, etc. Basically i use the data, manipulate it, and save it.
Consider this: I install the app now in morning, I use it immediately, and then I click the home button on iPad and leave it there for couple of hours. I then launch the app, and it shows a black screen before crashing and going back to iPad main menu.
Why is it crashing like that? Any ideas?
If you need more information please let me know.

You need to check your logs for errors.
Plug your device to your computer and open Xcode/Organizer/Devices/Device Logs

Related

Show several Local Notifications without creating new one

My scenario that I need to show the first Local Notification using Swift and then using the same identifier add another Local Notification, but without showing it as a popup in iOS device. So basically the flow would be like this:
Starting upload... <-- Show on the screen and adds to the Tray bar
Uploading photos... <-- Does not shows on the screen, but clears all the notifications and add another one in Tray bar silently (or changes previous one)
Uploading data... <-- Same as Uploading photos...
Finished uploading... <-- Same as Uploading photos...
Tried different ways, on Android it is not hard to do that, but iOS makes everything hard to do, is it even possible? :)
Thanks!
The reason it works on Android is because the "state showing" notifications are very Android thing. iOS is not designed for this kind of stuff because you almost never do something in the background of an app that also needs to be reflected to the user while user is outside of an app. So the real answer to your question is no. In iOS environment it is not possible to simulate Android way of showing status changes in a notification.

Killing an iOS app programmatically

I have an app when a specific action fires I close the app and ask the user to reopen it again.
The problem is when the app executes exit(0) the app stays in the apps stack (when I click the home button twice). I want it to be killed completely so that viewDidLoad() will be executed again when the app opens.
You cannot terminate an app on it's own.
From Apple's Human User Guidelines...
Don’t Quit Programmatically
Never quit an iOS application programmatically because people tend to
interpret this as a crash. However, if external circumstances prevent
your application from functioning as intended, you need to tell your
users about the situation and explain what they can do about it.
Depending on how severe the application malfunction is, you have two
choices.
Display an attractive screen that describes the problem and suggests a
correction. A screen provides feedback that reassures users that
there’s nothing wrong with your application. It puts users in control,
letting them decide whether they want to take corrective action and
continue using your application or press the Home button and open a
different application
If only some of your application's features are not working, display
either a screen or an alert when people activate the feature. Display
the alert only when people try to access the feature that isn’t
functioning.
Have a look at this answer: https://stackoverflow.com/a/8491688/742298

Do apps like Twitter implement custom relaunching when opened from background?

I've noticed that when I go off an app like Snapchat, Twitter etc for a few seconds then go back on it, it opens from background as expected, on to the view controller I was last on. However, if I go off the app for more than a few minutes, when I tap on the app it loads the splash screen again and opens the home page.
I initially thought this was standard iOS behaviour, but when I installed my app onto my device I have noticed that even if I go off it for hours, when I come back onto it, the last view controller I was on is shown.
I have thought about checking how long the app was in background by saving times in NSUserDefaults, but don't actually know if this is the right way of going about achieving that kind of behaviour?
Thanks!

Create home screen quick actions that do not open app?

I have home screen quick actions for my iOS 9 app, but I don't need it to open the app. It actually schedule reminders and that's it. Is there a way to make the home screen quick action not to open the app?
Quick actions are designed to be used to quickly navigate to a section of your app, eg on the camera app there is selfie mode, box mode, panorama mode, timelapse mode etc. These are all sections of the app. To the best of my knowledge you cant have a quick action that just runs code without opening the app. Otherwise how will the user know that the code has worked and it has been executed?
This functionality would be cool but i believe it is impossible as of current. The closest you can get is make it so it opens the app to a ViewController that just says "Reminder Scheduled".

iOS caches the application screen when clicking the home button for the device

we are developing hybrid application on Worklight.
After the user launches the application on iOS, he will see the login screen, providing his credentials, he is inside our application.
Now, if the user clicked the home button for iOS before "logging out" from the app, the iOS will take a snapshot and store it inside the device cache.
By using IExplorer, I can see this screen cached, which in our situation a high critical issue.
How can I a override this screen with a white screen, in case the user clicked the home button of the iOS device it will be populated immediately, and the device will not snapshot the user main screen.?
Is there any thumbnail I can add to my nativeResource folder for iOS to solve this issue?
thank you.
I encourage you to look at the Worklight Knowledge Center. In most cases, you will find your answer.
To control the snapshot taken by the OS when moving to the background, you need to use the following API methods, depending on your needs:
WL.App.BackgroundHandler.setOnAppEnteringBackground and WL.App.BackgroundHandler.setOnAppEnteringForeground

Resources