we're having a bit of a headache with some apps, Perhaps anyone of you may be able to alleviate the pain, here goes:
We have an OpenGLES(1) application, and it works fine on any device yet tested, from ipod touch on 3.2 to iphone 4, ipad 1, with iOS 4.2.
however, when the user clicks 'home' twice while the app is running, the application view moves up to accommodate the phone's 'taskbar', but then the view turns white.
I suspect after reading various posts this is because I have not yet implemented the 'applicationWillResignActive' delegate method, but I'm unsure if this is indeed the case, and if so, how I would go about avoiding the white screen. Incidentally, there is also the problem that the background EAGLView goes white (or away ?) when an UIAlertView is added to the mainWindow.view, which seems to me a related problem.
I would much appreciate any suggestions.
Jonathan
Your framebuffer is being destroyed, probably in EAGLView or somewhere similar.
Rebuild the framebuffer after you get control back.
Related
I've having an issue with UIWebView and running HTML 5 games (that another developer is working on). We've tried two different options, and neither is optimal.
Option 1: He renders the HTML 5 game with "canvas drawing". When he does it this way, nothing crashes, however in iOS 9 when we go back into the app from the background, the Web View loads back up, but the game is moving much slower than normal (issue not on iOS 7.1 and above). By much slower I'm talking about the animations are not moving the same velocity that they were when we first load the game. The weird thing about this issue is that even if the user opens up a different HTML 5 game (we're adding multiple games) the animations are slower for that game as well. I've tried dismissing the Web View Controller when the UIApplicationWillResignActiveNotification gets posted. When I set the game up this way, the slowness only happens if the app is in the for 4 seconds (it's very strange).
Option 2: He renders the game with "WebGL". When he renders it this way, the app crashes when the app gets backgrounded on iOS 8.0 and above. My research into the crash is that iOS can't draw OpenGL ES in the background. I'm assuming that the WebGL commands are running similar commands as OpenGL ES would do, hence the crash. Dismissing the Web View Controller on UIApplicationWillResignActiveNotification still causes the crash to happen.
Has anyone else ever dealt with a situation like this?
I've not found a good solution to the problem, but I did find a work around.
When I get the App Will Resign Active message, I remove the UIWebView from the UIWebViewController's subview. When I get the Did Become Active message, I add the UIWebView to the UIWebViewController's subview.
This solution works for both cases.
I converted one of my apps over to LibGDX.
In the earlier version, when I launch an in-app purchase and iOS shows the dialog to ask the user for their password, my app would stay visible and running (animations would update) in the background behind the dialog.
After the switch to LibGDX (and no other changes regarding purchasing), the app now disappears and the background behind the password dialog is just black. Right before this happens, LibGDX reports [debug] IOSApplication: paused and right when my app comes back to life, I get the message [debug] IOSApplication: resumed.
Is there any way to have LibGDX keep updating my app's screen while it's paused (preferably only if it is still partially visible, though), or at least keep displaying the last drawn frame rather than switching to black?
PS: I have continuous rendering turned off.
I found a way to fix the problem: Get rid of LibGDX.
Here's how: https://stackoverflow.com/a/35094695/1217178
Disclaimer:Clearly this isn't a true answer to the original question, but unfortunately I don't have the time to go hunting for bugs in libGDX, especially since my app is almost 1MB (15%) smaller and starts faster without it, too. But if someone else comes across this issue and figures it out, please do post your answer and I will accept it instead of this one.
In our app we show the Camera modally on top of another UIViewController. On iOS 8.x only, about 1/10 of the time if you zoom you wind up with a crash:
PLImagePickerCameraView didHideZoomSlider:]: message sent to deallocated instance
There is an existing SO post which has a supposed workaround - How-to find out what causes a didHideZoomSlider error on IOS 8? - but every variation I have tried fails to solve the crash. The suggestion involves putting a delay before dismissViewControllerAnimated:completion: . No matter what delay I try I can still reproduce the crash.
It only occurs (1) if you zoom the camera view (2) either choose Cancel or take a photo and exit the camera, all shortly before the zoom indication animation fades away. It appears to be a problem in iOS 8.x which Apple hasn't fixed. It crashes in Apple's code with no involvement in anything we have.
I do see "Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates." but this seems to be unrelated and is also referring to code inside the UIImagePickerController not anything we are doing.
I am about to deal with Apple DTS to see if we can find some way to avoid this or what in the environment might be causing this to happen. I thought to ask here in case anyone has another idea.
This crash did not occur under iOS 7.X. Happens on any model iPhone or iPad.
The answer from Apple is "it's a bug, file it in Radar" which of course says nothing about when it will be fixed. There is no workaround other than to tell users to wait a little until the slider fades (which our support people tell the users). There is nothing you can do other than implement your own camera and zoom support and do it yourself correctly.
Perhaps Apple will fix it in 8.2.
I'm developing an app on iOS 7 with a desired feature is that
When I home button, app enter background, I will add an image to current UIWindow. So when app enter background, if user double home button on iOS 7, os will show a small screenshot of current view of my app, so user can see my added image. :) (I did it)
When user return my app by clicking app icon, I want to remove this image immediately. In this situation, "immediately" means that user can NOT see this image anymore, user just see his/her current view when app enter foreground. I try to place the code remove image on the beginning of applicationWillEnterForeground delegate, but I'm still able to see this image for a short time after it disappears.
I also try to set hidden, alpha property for this imageview first, then removeFromSuperview, but it not works.
Can anyone help me to remove it "immediately" as my desire.
That is done automatically for all applications, you don't need to do anything in you code.
I don't think that you can do it faster, it depends of device performance. Sorry man.
Like other says it is really tricky how iOS handles these events. I've been researching and depends on the memory state of the device to do it faster or not. Indeed, in iPhone 4 and 4S may not show the image that you added on applicationWillEnterForeground method.
If I were you I would solve it by adding a smooth fade out animation of that image when the app becomes active again. With [UIView animateWithDuration: animations:] it could be nicely done! :)
If I find out something else I'll answer here!
As the title suggests, I have an app which uses Facebook connect to log users in.
On the iPhone this works fine; it switches to the Facebook app, logs in and then goes back to my app at the same place it left off.
However on an iPad (I only have an iPad 1 to hand but I'm presuming the problem is across all 3), when it returns to my app it seems to have restarted it entirely. It goes back to the splash screen, and then to the login screen. The user is stuck in an endless loop of "unsuccessfully" logging in, despite the fact that the Facebook app is logging in correctly.
Does anyone have any idea why this could be happening on the iPad but not an iPhone?
This app is actually inherited from a much older app which was iPhone only, and to simplify things it has essentially been left that way. The images etc are just scaled based on screen size, there is no differentiation in the code between iPhones and iPads other than their screen size. The facebook connect code has a "FBIsDeviceIPad" bool, but afaik that is just for setting the position and size of the popup login dialog when not using SSO.
Edit:
Further investigation suggests it could be an issue with OpenGL ES. The app crashes when sent to the background, as the OpenGl ES code carries on trying to animate etc. The facebook app momentarily puts my app into the background, ergo the app crashes and restarts.
I'll update this once I find out how to fix this, in the meantime if anyone has already dealt with this situation I would welcome any suggestions.
In your AppDelegate Class implement this code
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
return [facebook handleOpenURL:url];
}
For me, it was the permissions that made a difference. I had the same problem om the iPhone. and i reduced the permissions and the app stopped doing that.
Turns out it's a memory issue as noted in the question edit. Still not resolved how to get it working, but this is at least the cause of the problem.