iOS App becomes unresponsive after a night (iOS 9.1) - ios

I got an app that is used throughout the day for collecting signatures. The current release is used by my customers without problems for months on a daily basis. But recently, some customers who updated their iPads (iPad 4 Retina in that case) to iOS 9.1 reported that the app is unresponsive when they start to use it after a night of charging the iPad on a Mac. It takes several seconds to respond to a touch in a list with just a few menu items and signing is not possible at all since the touch events are recognized only every few seconds. The app does not crash until the user gets annoyed enough and forces it to close.
The app is usually the only one used on the iPads. It is used heavily during the day and the iPads are not used at all during night (just charged).
I cannot duplicate the issue on my iPads or in the simulator. I don't see any leaks on Instruments or other problems in the debugger.
The app is build for iOS 5.1.1 and newer (so that it can be used on the original iPad). The App Store version is build with Xcode 6, a beta version, which shows the same behavior (at the customer), with Xcode 7.1. I use Core Data for local storage and CocoaAsyncSocket for communication with the server.
Sorry for being so vague, but does anybody have an idea where to look at?

This problem vanished after Apple updated iOS to 9.2.x, but I don't remember the exact version.

Related

iOS app restarts in background on iOS 13.2.2 but not on iOS 12.4

I am developing an iOS app in React Native. I have been testing my application on two iPhones - iPhone 6 running iOS 12.4 and iPhone 11 Pro Max running the latest - 13.2.2.
I am having the strange problem that my application restarts when it is minimized in background and not used on the latest iOS. However, my app would continue from where it has been left after long periods of time on iOS 12.4 - in short it will not restart when in background, which is exactly what I want.
I wish to keep my app on the last state the user left it when navigating away from it, so the user can go back and continue their process. How can I fix this? How come an older iPhone with older hardware and older software manages to keep my application running in the background while the newest flagship with its latest software cannot manage it?
P.S. I had the same issue on one of the previous versions of iOS 13. I was really happy when I read that 13.2.2 has addressed this issue and I was hoping it would fix my problem. Unfortunately, it did not.
I would appreciate any ways and guides of debugging this problem and fixing it.

iPhone app rejected for not running on iPad

My app has been rejected because apparently its design slightly breaks on an iPad (a label overlaps something else due to the weird resolution)...
After clarifying that the app has only 'iPhone' selected in XCode (rather than Universal) I still received the following message.
Thank you for your response and your effort to resolve this issue.
Even if your app was developed specifically for iPhone, users should
still be able to use your app on iPad.
I don't understand the rational here, since:
This is an app update, the currently live-published version has the same issue on iPad.. but
It can't be downloaded on iPad anyway (doesn't appear in the store - probably because its not specified as a 'Universal' app)
The smallest physical iPhone that the app will run on (by virtue of it's target iOS version) is the iPhone 5, which it runs perfectly on.
How can I resolve this issue without doing a heap of work to support devices which we don't support and which can't get the app anyway?

How to test for iOS devices I will never have access to

I recently released an app. It passed well through its testing phase with ten or so users running it day to day on a variety of devices. The app is not really intended for iPad but it works.
On release day a small number of users pitched up saying that the app crashed or that the layout on their iPad was weird. All the complainants were using iPhone 5 or better or recent iPads. I have a pretty new iPhone5, and I went out and bought a new iPad mini. Everything tests perfectly.
So here is my question(s):
What is the strategy for debugging a bug I can't see and I can't test, and when I have no error to work from?
Are there known bugs in these newer devices that I need to be looking at?
Ask users that are experiencing the issue and giving you feedback for sending you screenshots. This would help you to narrow issues with weird layout.
Add a crash reporting SDK to your project like HockeyApp or Crashlytics to get the crash logs. Then, when you symbolicate them, you will get the detailed information about which line of your code is crashing the app.

App crashes on iPhone 5S but not on iPhone 4S.

I have an iPhone app that I have developed and tested on my iPhone 4S. The app is released on the market and some users claim that the app is unusable as it crashes on start up.
I have done exactly the same things as the users have to their devices, running the same version of the app on my iPhone 4S and I cannot get it to crash.
I have been to the houses of users and plugged their phones into my computer to get the log read out and when I do, I get errors that I am not getting on my phone and my mac.
I am completely at a loss as to how I start to find the solution to a problem like this. Does anyone have even the faintest ideas?
A good start will be to integrate a crash log collecting, crash reporting SDK in your app like HockeyApp, TestFlight, Crittercism or QuincyKit.
This will send you the crash logs to you so you don't have to collect them manually. These tools can also automatically symbolicate the crash logs for you so you can find the source of the crash in your code.
You should test a release build before you ship it. Archive a release build and distribute it as an Ad-Hoc build. You can load a saved IPA file to your iDevice using iTunes or Organizer. The thing is that you can test a release build which is the same you would ship to the App Store (they are signed differently but the build configuration is the same unless you changed that).
iPhone 5S ships with 64-bit A7 processor. Your iPhone 4 is a 32-bit device. Most likely processor architecture is not the case but as Apple says: Before you distribute your app, you must test it on actual hardware. Some of the runtime changes can be detected only when the app is running on a device. I recommend you updating your set of test devices with different models. I still own an old iPhone 3GS which is great for spotting performance issues.
The general comments others have posted are correct. Add crash logging into your app with a pre-made SDK and test on an actual device. I can't add much more to those points, but I will tell a short story about a similar bug that I found in one of my apps in the hopes it helps you with your issue.
Our app was predominately iPad2 users. When the iPad4 was released, waves of our users upgraded and they started experiencing an issue that was not present on iPad2. Two network requests were fired off at the same time and the result from one of them was crashing. We eventually found out it was a concurrency bug. The result of the first request was being processed "too quickly" and the code was getting to a critical section of code that was not thread-safe with the other request handler.
While this bug was still possible on the iPad2 if the network latency fluctuated just right, it never happened that way. The iPad4 made it happen almost every time.
You can use https://github.com/CocoaLumberjack/CocoaLumberjack lib to collect crash data logs from users.
Have you considered installing a crash logger in your app? There are plenty out there (Flurry, TestFlight, Crittercism, Hockey App, etc).
Most are fairly straightforward to install - add a framework and a couple of lines of code. Once you've done this, you'll (hopefully) be able to see exactly where your app is crashing on the users' devices, without having physical access to them.

Using iOS Simulator to emulate iPad 1

One of my customers is experiencing terrible slow downs only on the iPad 1 device. Is there any way of getting the iOS Simulator to emulate the performance/hardware of the original iPad?
I would rather not have to go out and buy an iPad one as iOS 6 won't support it this autumn.
The app runs fine on the iPad 2 and 3. I have tested using the allocations and activity instruments.
Any ideas? Thanks again. The OS is 5.1.1 and the App was compiled with XCode 4.4.1.
As far as I know, the simulator is what it says, a simulator, and as such will run as fast as it can on whichever computer you're using. You'll probably need to put delaying code into your run loops to simulate the slowness of the iPad 1, but maybe your client needs to be aware that the iPad 1 is much slower than the newer models - there are certainly some (particularly graphic intensive) operations which will struggle - you may find you need to adapt the user experience according the the device being used (Apple don't encourage this - they prefer you to check the iOS version - but there are several questions on SO which could help you here).

Resources