Meteor Cordova iOS app splash screen hangs on hot code load

These are apple devices, not android :smile:

hot-push-update on iOS is not working for me too

Oh, sorry. Too many threads, I confuse them.

For iOS use Safari.

This thing with the Splash Screen is driving me crazy… I’ve just opened an issue on github https://github.com/meteor/meteor/issues/4496

My App doesn’t work, even if I rollback the code to an older working version.

what’s the status on this? We just started having these issues for the past month.

We didn’t found out what was the problem… So we still have some random “frozen homescrens” in the iOS App.

Is this specifically related to hot code push, or is it possible this is caused by something else?

I think this has something to do with Hot Code Reload, this literally only started happening about a month ago, till then everything was working fine…no idea whats happening.

It’s hard to tell whether the problems people are experiencing (in this and similar topics) have a common cause, but I’m aware the Hot Code Push implementation could use some work. One issue is that a single update with faulty code (meaning it generates JavaScript errors) will render the app unable to update to newer versions or even fallback to the bundled code. This is something I plan on addressing as part of the Cordova improvements I’m working on. Another issue is that downloading is currently not very efficient and can be unreliable. Not sure yet whether these fixes will make it into Meteor 1.2, but if not, there should be a point release soon after.

2 Likes

Awesome! Do you have a timeline on when this is going to be released?

Hopefully either with Meteor 1.2 or soon (i.e. < 1 month) after.

1 Like

Any news? Having this issue again with Meteor 1.2 release.
Clear app start 100% successful, second one 99% hangs on splashscreen.
P.S. Don’t know how it could be related, adding to mobile-config.js App.setPreference(‘AutoHideSplashScreen’ ,‘true’); allow to pass behind splashscreen, but seems to still stuck

Is Reload._onMigrate still matters on Meteor 1.2 for disabling autoupdate?
Reload._onMigrate(function (retry) {
return [false];
});

Last log message I could see in XCode console:
METEOR CORDOVA DEBUG loading filepath: /…/Library/Developer/CoreSimulator/Devices/4015E655-1E87-4360-92C8-5C2D867120B4/data/Containers/Data/Application/2EFE3DC3-4AD6-4B0C-AC3C-13F31AB09B2D/Library/NoCloud/meteor/d455f35cfe917acdf45eb18b1fa9d38206ab62e7/ for path: %2F

Recreate project from scratch. Cleanup /public folder. It seems to work like a charm for now.

I am very interested on the state of this aswell. We are having issues with iOS hot code push, including the splash screen jam, and another which seems to give a broken patch from the server, even after re-build and re-deploy.

I’m not sure but I think this might be related since I believe that Cordova simply wraps an iOS UIWebView. So…

NOTE: This is NOT a Cordova app. It is simply a Meteor web app that users can save to the home screen (basically a home screen bookmark) from (mobile) Safari. The app is running in iOS’s UIWebView when launched from the home screen. Slightly different code base but, from what I understand, about 99% the same as Safari/WebKit.

I’ve been struggling for a while to figure this one out. Here’s the scenario:

Scenario A:

  1. From Safari, user adds app to home screen while logged IN.
  2. User tries to launch app from home screen icon. App fails to launch. Only error I’m able to observe (from Safari desktop developer tools) is that an error occurred trying to load the main JS file. No exceptions. No console messages. Just Safari dev tools telling me it couldn’t load the JS file.

Scenario B:

  1. From Safari, user adds app to home screen while logged OUT.
  2. User tries to launch app from home screen icon. App works just fine.

Is this likely the same hot code push problem?

Could you expand upon this solution please? We’re having the same issue with a similar log.

@tdesc I’m having the exact same symptoms with both my Android and iOS app. App always loads OK the first time and then updates immediately if the server code is newer than the app bundle. But then, if I push a code update to the server, the mobile app crashes 100% of the time when the Hot Code Push kicks in.

Could you please share what you did exactly to solve the problem? “Recreate project from scratch. Cleanup /public folder.”

Digging into it and using ADB, it seems the problem comes from here:
Unable to find http://meteor.local/4617fb83e2e062d572a51341059146e4cc776f0c.js?meteor_js_resource=true, will try http://meteor.local/index.html?meteor_js_resource=true

Also, I’m using NGINX in production with SSL, could this be an issue?

Hey guys,

We’ve had this problem before with a app in beta test. Especially iOS
seemed to do this.

Some possible solutions, this combination of things helped us clear the
issue:

  1. Restart the nginx server

  2. Wipe the currently deployed Meteor app from the server

  3. Mup setup and deploy again

  4. When building the mobile app versions, DELETE
    .meteor/local/cordova-build -directory before new builds. Sometimes,
    especially with iOS, we noticed that if we first ran the app using a
    localhost / dev server address, then did a new run using the live server,
    sometimes the app build would still (at least partly) use the localhost /
    dev server. I’m not sure if this is a bug or a feature, but after this
    problem we have been deleting the cordova-build directory before each
    re-build, and have had no issues afterwards.

Make sure nginx isn’t serving index.html with caching enabled. That could cause issues if the cached version references assets that no longer exist.

@martijnwalraven You just saved my day. I had been stuck for a day on this issue which is quite critical for me since my customer’s iOS app has just been approved in the App Store. It was coming from some caching parameters in my Nginx configuration file. More specifically, in the “location /” block:

if ($uri != '/') {
    expires 30d;
} 

On a side note: I took that Nginx config file from somewhere on the web and the comments above this parameter read as follow:
# this setting allows the browser to cache the application in a way compatible with Meteor
# on every applicaiton update the name of CSS and JS file is different, so they can be cache infinitely (here: 30 days)
# the root path (/) MUST NOT be cached

Since this was my first Nginx install, I didn’t think of questioning its validity.

Again, many thanks and looking forward to Meteor 1.3 and your work on improving HCP for Cordova apps!