PFQuery findObjectsInBackgroundWithBlock: WatchKit app runs in simulator, not watch, unless iOS app is in foreground
I am writing a WatchKit application that needs to make a request to our Parse server. Since this is a network call, I follow this procedure:
- I am making a call from WatchKit to an iOS app using
openParentApplication:reply:
- Internally,
handleWatchKitExtensionRequest:userInfo:reply:
I run a background job withUIBackgroundTaskIdentifier
to ensure the iOS app terminates immediately. - I installed
PFQuery
mine and callfindObjectsInBackgroundWithBlock:
- In the block I go to PFQuery, I will reply the relevant information to the watch
I wrote this app maybe a month ago before the Apple Watch came out and it did a great job with the Watch simulator. I got my Apple Watch yesterday and I managed to get the app to work on the watch, but it didn't quite work - I was able to figure out that when the iOS app is actively running in the foreground on the iPhone, then everything is Great; but if the app is inactive (for example, in the background or exited), then it findObjectsInBackgroundWithBlock:
never calls the block, and execution seems to just stop.
Does anyone have any idea what might be going on? My initial thought was that the iOS app pauses / kills before it can complete the request, but I was confident that the background task would prevent this.
PS. If anyone stumbles upon this question because they were looking for how to get the WatchKit app on a real watch, I found this post extremely helpful in getting it working.
It turned out that I had several problems with openParentApplication: reply: and they all seemed to have been fixed using the technique from this post:
http://www.fiveminutewatchkit.com/blog/2015/3/11/one-weird-trick-to-fix-openparentapplicationreply
I started a background job for my own application, but I didn't use the "dummy workaround" focus task described in this post because it wasn't necessary for me in the simulator. However, it appears to have been on the clock.