iOS: No OTA on SDK 38

Hi,
I have already opened an issue on expo’s github repo but i’m not receiving further answers and as the issue is getting more and more urgent, I thought I’d open a topic here (sorry about the duplication but I couldn’t see another way).
Here’s the link to the original issue: https://github.com/expo/expo/issues/9812
Now I know ExpoKit is deprecated but I literally have no time to get out of it right now. Since OTA’s are working on android, there surely can be a way to bring them back on iOS too.

Please, help!

hi there, what does your EXShell.plist file look like? that should contain your values for release channel and things like that. Also, you mention the developer menu in your github issue, but that’s only available when developing, and to test OTA you need to run a release build in Xcode (so I’d double-check that you are)

Hi @charliecruzan, thank you for your answer.
Here’s the content of my EXShell.plist. It looks exactly the same as before the upgrade to SDK 38.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>isManifestVerificationBypassed</key>
	<true/>
	<key>isShell</key>
	<true/>
	<key>isSplashScreenDisabled</key>
	<true/>
	<key>manifestUrl</key>
	<string>exp://exp.host/@myApp/myAppScheme</string>
	<key>releaseChannel</key>
	<string>staging_german_signup</string>
</dict>
</plist>

You’ve mentioned that it is possible to test OTA using the release scheme of the app in Xcode, could you tell me more about that ? I didn’t know it was possible, so far I’ve only noticed that OTA’s are broken because the app doesn’t get the update after running

expo publish --release-channel staging_german_signup

About the developer menu, I am aware that it should only work using the dev configuration (I’m not expecting it to work using the release scheme).
But I’m guessing these issues are unrelated unless you think that they might be linked somehow (for instance the fact that both OTA’s and developer menu are broken on iOS but both work on Android).

Cheers!

when you say the app doesn’t get updated after running expo publish, you mean your live app? Or you built the app locally with Xcode after running expo publish, and it’s using an older version of the JS?

I mean the live app.
So a way to test an OTA without live app would be to simply run a release build via Xcode after running expo publish?

The live app needs to be on SDK 38 for an OTA update on SDK 38 to go through

You can test your app with the Xcode release build scheme, yes. You can read more about this here

I’ve already uploaded my app to the AppStore, it is live and running (currently on TestFlight) on SDK 38.

I’ve just tested the OTA locally (build app in release scheme with dev certificates, make code change, run expo publish, re-launch from Xcode) and the change was indeed taken into account, thank you for that tip!

But the live app still didn’t catch the update. What would be the difference between my local release scheme and the live app ? Except for the fact that I have to switch to development certificates when testing locally.

release is the scheme used when archiving by default (you do have the option to change that though), so I’m not really sure what could be different. I would double-check that the sdk version and release channel are correct, and if you still can’t find out more info you can share your app.json updates key

I’m 100% positive that the SDK version and release channel are correct as I have just deployed the app a few hours ago. I have even deployed again with a new release channel just to make sure.
Here is the content of my updates key:

“updates”: {
  “enabled”: true,
  “checkAutomatically”: “ON_LOAD”,
  “fallbackToCacheTimeout”: 0
},

Might be worth noting that the following files are correctly updated after doing the expo publish:
Screenshot 2020-09-03 at 17.23.45

And you’re fully killing the app and reopening to try and trigger the OTA update?

Affirmative

Hi @charliecruzan, do you know what might be the issue here?

No, it’s pretty hard to investigate without being able to reproduce the issue myself

One thing you could try is checking if there is an update available manually with the Updates module and if there is call Updates.reloadAsync() to trigger it. If that works then we know it’s probably a configuration issue

We already check for updates in the code using Updates from expo since expo-updates is incompatible with ExpoKit. But no luck, Updates.checkForUpdateAsync doesn’t return available updates (again, only on iOS).