This is my first time that I'm running app on my device. I was wondering what to do when app crashes. When it crashes, I can not open the app again, the app data is corrupted I think. Do I need to write some code for this scenario? When app crashes I want to be able to open my app again. I was using simulator till now and this is my first time on my device. I was searching but could not found how to recover my app
You can recover from almost anything if you handle exceptions AND signals
BUT you should't:
crashes shouldn't happen and if you get a unix signal you shouldn't try to recover because after a near-crash the app may be in a quite undefined state
localize & fix & prevent the crash
Localize the source of the crash, add checks to prevent the crash. You can also set a global exception handler to help you debugging the issue.
I had same problem; and found a library that handles hardware exceptions that xcode can not. the library name called SignalRecovery;
you will find an error using the library in sizeof function that should take a struct.
Related
I have an iPhone app and working fine . But some of(2 or 3) my customers arises a complaint that they are having issue opening the app in the iPhone . They have installed the app and when open the app it just closes out right away. Also tried restarting phone but it still does this.Also tried to delete the app and then reinstall it but this still happens.
Is this any thing i can do in my app to prevent this ? Or how they can solve this problem ?
Is there any more information you could give regarding the nature of the crash? Have you recreated this scenario in Xcode and gotten an error message?
The best I can think to tell you is to look in the app delegate. That is where your app looks first, so there is some kind of uncaught error happening.
Maybe the app is trying to use some piece of data right at launch and it's not there. Maybe you are trying to use something before it is initialized.
Is your app using any 3rd party frameworks right at launch? If so, maybe something changed with the library.
If it is happening on some iPhones and not others, perhaps you are using some framework or function that is not compatible with an older version of iOS.
Perhaps there is something in common among the kind of devices the app crashes on.
Another thought, does your app ask for any permissions? Such as using the user's location. If it does, and there is a spot in your code where you assume you have permission and you don't perhaps that could cause a crash.
Hope this helps.
P.S. just read the comments to your question. They have some good advice. I would try what they are suggesting.
With a custom crash reporting system (like the ones specialized at Ask the user to send crash log after crash on iPhone) to send the log, the app needs to restart. Why? Isn't there a possibility to send it during the custom exception handling? Or is there a crash reporting system that doesn't need to restart the app?
When a crash occurs the app is in a highly unstable state. So a crash reporting library can not do anything since even allocating memory at crash time may cause way more damage. So crash reporting SDKs can only use so-call async-safe C methods to collect all crash data. Any Objective-C code can not be processed either and also the iOS networking stack can not be used.
Please also note that exceptions are just one example of app crashes in Objective-C, there are also crashes triggered by low-level BSD signals. Both types mean that the app is in a highly unsafe and unstable state and as little code as possible should be invoked at crash time.
So this would require a rewrite of most of the networking frameworks to be able to send data out at crash time, and this may even not be possible to do in a safe way. That is why all proper crash reporting SDKs don't do anything like that.
In addition, on iOS it is not possible to create another process which could send the data in the background, so the only safe and possible solution is to send data the next time the app starts.
Now this has another conclusion that crashes that happen early on app startup might never be sent since the app is crashing before or while it sends. Some SDKs provide mechanisms to handle that scenario which most likely requires changes in your app startup code.
Since you app crashed there is no process running any more that you app controls, thus you can not start a new process to send the report.
Any code in the crash handler only has limited time to save what ever made you app crash before iOS kill whole app and removes it from memory.
When you restart you app the crash reporter formats the crash report and sends it. This can only be down when the when you app is active.
I've searched all the Internet around, but found no mentions of this error.
I am using AVPlayer to play stream audio from remote or local URL.
However, while on my device it works fine, on simulator it is crashing.
I've found out that creation of player is going fine, but as soon as I call [playerInstance play] the app crashes.
The error is occurring somewhere in CommonURLAssetNotificationQueue.
And the exception breakpoint points me to 0x10e8a2519: pushq %rbp, which is not helpful at all.
However, on device it works fine.
So, is it my mistake and I have to fix the code? Or it's just simulator acting wonky?
It is likely that you have an exception breakpoint enabled. The play method in AVPlayer normally throws an exception, even though nothing is wrong. The exception doesn't crash the app, and the app then continues to run exactly as you wanted it to. If you have exception breakpoints enabled, however, Xcode notices the exception and crashes the app. If you go into the left sidebar and disable your exception breakpoint the app will run without crashing.
Change exception all as Objective C.
My resolving method is to add 'usage description' in App's Info page. Because the AVPlayer Demo App is trying to use local photo library without asking permission, this causes the demo app to crash. After adding the 'Privacy — Photo Library Usage Description', I can run this demo app successfully.
That probably sounds a lot worse than it is, but here's my question.
I am dealing with a crash on an actual device, that one of my tester's is using. At the moment, there is no way to discover what is causing the crash. I can not reproduce it on the simulator. However, on the simulator when something crashes I get log info about it in the output window. But I don't want to keep testing with the device connected.
Is it possible to log crash exceptions, etc into a file when things crash. I know certain apps can do it, but I am not sure how?
Any info would be appreciated.
There are generally two ways to do that:
Someone get the tester to send you the crash reports, that iOS created on the device. This is usually too tricky for end users, so the next suggestion works better. That's also why I am not describing how to do that :) But you'll find plenty of documentations on that process.
Integrate a crash reporting library, that catches the crashes and allows you to receive them in various ways. You should not implement your own global crash exception handler, things are just too complex to do it right (even though other people will tell you otherwise). Also crashes caused by exceptions are only one type of crashes.
There are multiple open source libraries out there, the safest one to use is anything based on PLCrashReporter. Most others use private or undocumented iOS APIs, or are not async-safe, which basically means those can destroy app data or make the crash even worse. See this blog post about the topic: http://landonf.bikemonkey.org/code/crashreporting/Reliable_Crash_Reporting_1.1.20130119.html
The following linked answer shows some of the available options on how to add logging to your app and also various options on how to receive crash reports for test version and also once the app is released: Including custom data into iOS crash dumps
If you're open to using a third party service, I use https://www.crashlytics.com. Makes debugging crashes from user devices painless.
I know it's a bit weird but I have no code at all to put here, unless I copy all of it.
My project is crashing with no apparent reason. I've read this solution: iPhone application is crashing and not leaving behind a .crash log file
and I'm using Instrument for searching for leaks and other possibilities for those crashes.
Another strange thing is: even when I run my app with debug on XCode, it just stop to work on my IPad but it looks it is still running.
And the last and more strange thing: there's no crash log at all on my device. Before somebody ask, it is enable to record crash logs.
Does anybody have any idea for helping me?
Regards
I've had this happen to me before on various platforms. If its crashing on you, whether its an iPhone app, openGL / DirectX program, try these steps:
Have you tried to undo your last change and get to the point where it last worked?
Have you tried placing a print outputs to the terminal to see how far your program is executing? Start at the beginning and work your way into your program. This is especially useful when there is no crash log.
Also in particular to iPhone apps: Have you checked your xib's? Did you recently re-factor and change the name of a class maybe? You might need to re-link your nib to your classes. This on more than one occasion has caused apps of mine to crash with no error. Hope this helps.
I doubt you are still wondering about this, but my answer is that you were experiencing your app getting killed by the OS due to using too much memory. This will silently fail in the log in my experience when running on the device.
You will have to go into the Organizer to the device console and crash reports that get stored on the device to see the clues.
The reason your crash stopped when you got an iPad 2 is because the iPad 2 has twice the memory of the iPad 1 (which is dramatically under-stocked with RAM)