Where do print statements in a published iOS app go? - ios

I obviously know where they go when I'm testing the app in Xcode.
But if I were to release an app to the App Store that contained print statements, would they be logged in the user's device somewhere or would they just be ignored?

They get logged to the user's device in a way that they're accessible from Xcode. Apple explains the behavior here.

There is an internal "console" for each app. They are not necessarily logged anywhere except in this internal console. When you test your app in Xcode, it connects to this internal console and copies any print statements from the the device to Xcode for developers to see.

Related

Logging to iOS device log / Xcode Console from React Native

I'm trying to debug a React Native app which is already published in to the AppStore and while the app has a bunch of console.info / console.warn calls — seems that no log messages reach the device log (which I access through Xcode > Device & Simulators > some device > Open Console).
Also, I've just created a test app and added a bunch of console calls there, and while I see them all in Chrome Inspector it seems that they never reach device logs.
So the question is — am I doing something wrong or the console calls are actually not logged into the device log? If so, is there any other solution to do it? Something as simple as NSLog preferred.
Thanks a lot

MobileGestalt no access to InverseDeviceID

This happens with every app when I try to use OpenGLES on my iPhone7+ with iOS10.3. But it works without any problems on my iPhone7 iOS10.1.
This is the message I get:
libMobileGestalt MobileGestaltSupport.m:153: pid 304 (OpenGLES_Ch4_1) does not have sandbox access for ... and IS NOT appropriately entitled
libMobileGestalt MobileGestalt.c:549: no access to InverseDeviceID
Does anyone have an idea about these messages?
I wonder if it is bugs or something else in iOS10.3? Because when I run the app on iPhone5s iOS10.2, those messages did not shown on the screen. While I upgraded the phone to iOS10.3.1, the massages shown again.
The reason why I ask this question is that some animation effects perform quite stuck on my iPhone7+, but it is completely smooth on iPhone5s. But now it seems it is no relationship between the message above and the stuck, and I have to check my iPhone7+...
I had the same issue. It turns out to be multiple thread accessing the same OpenGLES related resource, EAGLContext to be specific. I guess it is possible that OpenGLES related codes are not thread-safe, and it behaves differently in different OS versions / iPhone 7 / 7+, sometimes it messes up the memory.
After making sure data accesses are synchronised across threads, the problem is gone.
For those of you who are maybe using Ionic and getting this error, please just make sure that in case you've cloned a new fresh copy of the project from your repository that you did both npm install and bower install.
I was missing bower install and this was torturing me for like two days, so hope this helps someone. Sad thing is that I'm by all means not a beginner with Ionic (top #3 answerer on SO) but was still able to miss this fact so I hope that in case someone else runs into this problem it will help you.
Google Map display and functionality works fine with this warning
Check my answer here:
https://stackoverflow.com/a/44970665/3378076
I can see where the setting up of a sandbox account might do the trick, but if the device you are using is also connected to your normal icloud account, you can't create a sandbox with the same AppleID.
You then have to log out of your existing icloud account, and log in with the new icloud (sandbox) useid. Which screws up your existing icloud device settings.
So you are unable to use your Developer ID, only your Sandbox ID.
This worked for me:
Create a new sandbox user in iTunesConnect. YES, you have to create a new iCloud user with a new email.
Log OUT your current iCloud user on your mac AND on the device you are testing on.
Log IN with your new iCloud user on your mac AND on the device you are testing on.
Run your app on your device again. This time it should work.
Hopefully Apple will come around and simplify this issue since this is a real pain in the ...
I had the same issue, and this point me in the right direction:
I've managed to solve the same problem for MKMapView. Apparently, that happens when your app's current permissions state doesn't correspond to entitled (declared in Info.plist) one. That effecively means that you need to call APIs to gather user's permissions explicitly and preemptively. (E.g. LocationManager.requestWhenInUseAuthorization before displaying a map with user location on it)
Source: rdar://problem/11744455
I had same issue. My rendering program was written to support 3 version of openglES(1, 2 and 3). On my case I was accidentally supplying EAGLRenderingAPI.openGLES1 or kEAGLRenderingAPIOpenGLES1 to my renderer class based on openGLES2.
I just had this issue when trying to use in-app-purchases.
Not sure if yours is the same issue, but I realised that you HAVE to create a Sandbox User in iTunes Connect, then log into iCloud on an iOS device with that user to enable the app to work.
I got this console warning message because of issues with multiple Apple Developer accounts. Evidently you cannot have a sandbox account with an existing Apple Developer account. I didn't try to create a sandbox account but it seems to check my default account, which is also an old Apple Developer account that I don't use and hence is no longer entitled. This issue has been reported to Apple many times by other people and I have not yet seen a solution.
My workaround to suppress this warning was to set the OS_ACTIVITY_MODE environment variable to disable in my scheme settings. You can click on the app name and then click Edit Scheme... or from the top menu you can click Product->Scheme->Edit Scheme... :
Then you edit the "Run" settings and add the environment variable OS_ACTIVITY_MODE and set it to disable:
NOTE: Be sure to set this environment variable to enable before you submit your app so that you can see if there are other warnings. There may be other warnings you should fix before you submit your app to the App Store.

Access to iOS device's console output

Is there an iOS app which allows to look at console output created by another iOS app?
My app has several NSLog() calls which output precise timings. I would like to test the app, when it is not connected to my development Mac, and look at timings after that, possibly still on my iDevice using some other "console browser" app.
Is that possible?
So the way to do this is to use the Apple System Logger which allows you to access the logs and you can then display them on screen. NSLog will be logged to this. I wrote something a few years ago so that testers could test the app and open the log and view it on the device.
Its a bit tricky to use the interface and there is a limit, I think it was 200, on the number of logs in the cache, so log only the necessary stuff.
After a quick search, I found this - SOLogger which should help you.

Way to see crash logs for an iOS app outside of an Xcode debugging session?

I have an app where the user needs to login before using it .
to enhance the user experience , the user needs only to login at the first time and each other time the app will not show the login screen but it will show the app [ I am using user default to store his id ]
now I have achieved this but I ran into a bug and the app crashes when I open it after a succeeded login ..
The problem is :
to mimic the scenario where I open the app without the need to login , I had to stop the app [ which means there will be no debugging session ] and then reopen the app ..
What I am asking for :
is there a way to see what causes the bug knowing that I am not running the app in a debugging session ?
Thanks in advance
Can you run your app on a device? If so, you might be able to get the crash data you need from the Devices window, from Xcode.
Xcode -> Window -> Devices.
Select your device, then select View Device Logs.
Here's Apple's page on the subject.
For running in the simulator, you may be able to get the crash data you need from the Console (I've just tried this and seen at least one crash log from my current development).
Here is Apple's page on Testing with the Simulator. From the menu on the left, check out Viewing Crash Logs. Extract from that page...
To view a crash log
Open Console by going to Applications/Utilities/Console in the Finder.
Look for the line in Console that reads “Saved Crash Report for.”
Expand this item using the arrow at the left.
Click Open Report.
You can maybe check: https://try.crashlytics.com/
It's part of the twitter Fabric framework now quite easy to use, and provides good information
Use Hockey app for getting the info regarding the crash logs:
Here is the link to setup the Hockey app in iOS:
http://support.hockeyapp.net/kb/client-integration-ios-mac-os-x/hockeyapp-for-ios
check plcrashreporter : https://code.google.com/p/plcrashreporter/downloads/list
http://plcrashreporter.googlecode.com/svn/tags/plcrashreporter-1.1-beta1/Documentation/API/functions.html
it's very easy to use and
If your application crashes, a crash report will be written. When the application is next run, you may check for a pending crash report, and submit the report to your own HTTP server, send an e-mail, or even introspect the report locally

App Crashes When Downloaded From App Store But Not When Testing

I have a serious issue which I cannot seem to solve.
Recently I have made an update to an IOS app, and when testing in XCODE as both Ad-Hoc, Debug, and installing via the .IPA on a device the issue cannot be replicated. However when I download the app from the App Store, it crashes.
Does anyone know how this could happen, and any potential solutions? I am getting lots of complaints from users, and not sure what to do?
Could part of the binary upload have got corrupted?
Probably you always compiled your app in debug mode. But when sent to App Store you made a release compile. click the arrow in the run button select scheme and chose "release mode" and run your app it will probably crash.
check if you used NSParameterAssert as they are not called in release mode
I cannot say why your live App Store application is crashing and the debug version is not. Two possible solutions:
Crash reports:
To find out why your application crashed, you might want to check if there are any crash reports available on iTunes Connect. Log in on iTunes Connect and click on your application. Scroll down to Crash Reports. You will find out more about why your application is crashing here.
More information about crash reports here at Apple's own iOS Developer Library.
Prerelease your app with TestFlight: For in the future: test your application by uploading it on iTunes Connect and testing it with TestFlight first before submitting the application to the iTunes Store. This will save you a lot of (review) time if you find a error.
I realize this is an old thread but I had the same issue with my App that I released. Meaning it worked fine in testing, but when I released it it would crash. The culprit ended up being the fact that I am using In App Purchases. I have two items that can be "bought" but I had only enabled one of them. In testing it was able to read both of them, but with the release version, it was only pulling the one that was enabled down, creating the crash. The fix was simply enabling the disabled item. I didn't even have to redistribute the app, though I had to wait for it to "percolate" through... Anyway this may help someone in the future.
Check if your app is looking for too many IAPs.
I just had this problem and my problem was I had deleted an IAP from the App Store, but didn't remove it from the app code.
For some reason it only crashed when downloaded; I used a promo code to do this before launching my app.
Thanks to Tornado for the inspiration to try this variation.

Resources