My app has registered a document handler to open certain files from other apps using the "Open in" feature (for instance from Safari or Dropbox).
This works without problems until files are getting larger than ~300 MB. For files greater than this size the file is copied to my apps "Inbox" folder but the app is not brought to foreground but instead I just see the iPhone desktop and the calling app is sent to background. My app is not killed, it is just not brought to foreground. This happens in all situations, e.g. it does not matter if my app is already running or has to be started.
What could be the reason for this behavior?
Regards,
Is it possible you are getting a low memory notification and not handling it correctly?
I would look into your
-applicationDidReceiveMemoryWarning:
functions to see if perhaps you are running out of memory.
Related
As title.
Is it possible that files that I store in the NSCachesDirectory can be deleted by the system (i.e. in low storage situations), while my is running in the foreground?
File System programming guide
On iOS 5.0 and later, the system may delete the Caches directory on rare occasions when the system is very low on disk space. This will never occur while an app is running. However, you should be aware that iTunes restore is not necessarily the only condition under which the Caches directory can be erased.
So the answer is - No, it is not possible for the NSCachesDirectory to be deleted while the app is running in the foreground.
However their wording is slightly ambiguous with regard to the app running in the background.
For iOS, I am aware that apps can upload in the background, as according to this thread:
Uploading in background thread in iOS
When I refer to "background", I mean the user has clicked the home button, using another app, or the phone's screen is off.
Follow-up Questions:
1.
Is there a timeout limit to the background uploading? This may be an issue if the file being uploaded is huge.
2.
Is it possible to upload a list of files in the background, or does it only support the finishing of one upload that was in progress before the user switched to another app?
3.
I suppose if the user quits the app completely, the upload will be stopped? Quitting completely as in, user double clicks home button, touches and holds down on the app until it starts shaking, then clicks the "X" to shut it down.
Answers:
1) The timeout limit is probably server - imposed, but you can certainly add some timeout detection code on the client (iOS) side.
2) Uploading a "list of files" is effectively the same as uploading a file. A list of files is just another file, effectively.
3) If the app is killed, yes, everything (and all the background threads) get killed along with it.
When my app crashes, I would like to save the latest console for debug purposes (especially to read system messages such as unrecognized selector)
Is it possible to access the console programatically?
UPDATE:
I've found the answer in the documentations: using STDERR_FILENO.
"Logs an error message to the Apple System Log facility (see man 3 asl). If the STDERR_FILENO file descriptor has been redirected away from the default or is going to a tty, it will also be written there."
It sounds like you want to change the destination for the standard output stream. I've never tried that in iOS, but I'd expect to be able to do that using freopen(). Here's a SO question that may help.
You'll also want to build some debug feature into your app that makes it easy to recover the output. You could post it to a web server, for example, or have the app e-mail it to you.
When your app crashes in a device, a crash log is saved. When you plug your device in, launch XCode, open the "Organizer" window and click on devices. Then look for your device on the left, and click on "crash logs." Together with the information from the .dSYM file that's generated when you build, you can often recover how and where your app crashed. If you really just want to save the information in the console window of XCode when you crash, just click inside the console window, hit Cmd-A (select all), and Cmd-C (copy), then paste into a text editor window.
In the home page of my iphone app, there is a button added. When that button is clicked some other iphone app needs to be opened in a new viewcontroller (with out closing the parent app).There will be a back button on this view controller. When the back button is clicked, the new viewcontroller which is showing the another app needs to be closed and our parent app's home page needs to be shown.
Please give me some ideas on how to do this. I googled for this i didnt get any solutions.
Thanks,
Raja.
-- the following applies to iOS versions previous than 4.0 :)
Actually, there can be only one iPhone application running at once (with exceptions of Safari, Phone and some other system applications). The iPhone Human Interface Guidelines say so:
Only one iPhone application can run at a time, and third-party applications never run in the background. This means that when users switch to another application, answer the phone, or check their email, the application they were using quits.
However, if you only need to e.g. show a webpage, you can do it using UIWebView
Also, if you need to open another application, you should use URLs as pointed by Steve Harrison. This will, however, close your application. The recommended behavior in this case is to remember your application state and restore it when the application is run again, as Nithin writes.
According to apples documentation, they are not allowing any applications to be run in the background, except system generated ones. So you will be unable to do the thing you are going to implement. However, there is one thing that can make the same result.
You told that you are calling other application to run on a button click. Before initiating that application, save the current state of your application, may be using sqlite3 or core-data, and then open the other one. While returning back, load the pre-saved data from the database or wherever you have stored it. Every time you start the application, you check for the persisted data, if exists, load it or otherwise load your basic view
I don't think that you can run other iPhone apps within your own one. It doesn't make sense. You can open another iPhone app via a URL (see here and here), but this will close your app.
Like it has been stated: running two apps is not allowed by apple. You can however implement this apps features into you're app and have both get and save data to the same server...
Or like Nithin said: this functionality is available on JB iphones. Look into "backgrounder" for implementing one solution for normal users and one for thouse that has jailbroken.
I have some users testing my app on Windows and Mac platforms. The app crashes at some points but the Windows users cannot get any crash logs. Here's what they do
Run the app and play around till it crashes
Sync their device with iTunes
Look for logs here (on a Vista) C:\Users\\AppData\Roaming\Apple computer\Logs\CrashReporter\MobileDevice\
But there is nothing inside the Apple Computer folder.
Any ideas? Thanks.
Aside from you omitting parts of the path in that it should correctly be containing the login username - ow, now noticed you possibly did try to embed it, hence the double backspace after Users....
Ask your user if he possibly is using multiple computers for syncing his device. In case he does, he should check the machine he used first as those Logs are only synced with the "main"-machine, I believe. Bit of a shot in the dark but worth the attempt, I think.
Ow, and there may be another possible reason I just saw within another thread - credits to Kendall:
If there is not crash log, it could mean the app was shut down for using too much memory - in that case you should see a message come up in the device console indicating your application is being shut down.