Problem
If you downgrade to a lower version of the Expo SDK and publish, the updated code will not be accessible on the mobile client. You will be stuck with the last published version on the latest SDK version that was published.
Expected Result
The version of the project loaded on the Expo mobile client should be the latest published version regardless of SDK version used.
If the above is the expected behavior, then this bug becomes:
it should be documented that downgrading SDK versions and publishing is not allowed
the website for your published project should reflect the information for whatever version will be loaded on the mobile client
Reproduction Steps
Create a new project using Expo on any SDK version other than the latest. For example: v17.0.0
Publish your project (public or unlisted - doesn't matter).
Open in Expo client on iOS or Android.
Upgrade your project to the latest version of the Expo SDK. For example: v19.0.0
Make some changes to your project.
Publish.
Open in Expo client again. You will see your code changes. Everything is working as expected up until this point.
Downgrade your Expo SDK version. For example, back to v17.0.0 or v18.0.0.
Why? In my case, I was running into #404 and v19.0.1 was not released yet.
Make changes to your project.
You can also make changes to your app.json like changing the description at this point.
Publish.
Open in Expo client again.
BUG You will not see any updates to your code.
BUG You will see the new project description had you changed it on the website for your project. This makes it appear as though the project was updated, which is technically was - explained later, when in fact it doesn't on the mobile client.
Upgrade SDK versions to the latest. For example, v19.0.0 or v19.0.1
Make changes to your project.
Publish.
Open in Expo client again.
You'll see your latest code now, thus showing how this bug behaves.
Debugging / Tracking Down the Issue
After trying to get help and much debugging, I found this comment about how to view your published project's manifest which is to append index.exp?Exponent-Platform=ios&sdkVersion=17.0.0 to your project's url (change parameters as needed).
In my case, I originally created and published my project on v17.0.0. I later upgraded to v19.0.0 to access the new Geocoding feature. I began testing code and published my changes. However, due to the aforementioned bug #404, I was forced to downgrade back to v18.0.0 (or v17.0.0 as both were fine). Subsequent publishes resulted in the behavior described in Reproduction Steps. I then used the manifest url to look at detailed publish information for each of the SDK versions I published on:
index.exp?Exponent-Platform=ios&sdkVersion=17.0.0
index.exp?Exponent-Platform=ios&sdkVersion=18.0.0
index.exp?Exponent-Platform=ios&sdkVersion=19.0.0
It was then that I noticed that the publishedTime value for each version was correct. Subsequent upgrades and downgrades to each of the versions (17, 18, and 19) and publishing on them showed that parameter and things like the description updating correctly. However, the issues remained:
mobile client would only load the last published code on the latest SDK version you published for (in my case v19.0.0)
website would reflect the latest published manifest regardless of SDK version (so if the last one you published was for v18.0.0, it would show information for that).
When Expo v19.0.1 was released, I was able to finally push out a working version of my code to confirm the behavior that I was seeing.