سؤال

I released an update for my App and it was approved. It was approve despite the fact that it included a serious localization bug where most users are getting the wrong language. Is there any way to quickly revert back to the previous version, suspend current downloads of the current version, or anything else that might help aid this issue?

I did read the following thread from a couple years ago: Can I revert to my previous version app in iTunes Connect?

I was hoping maybe there is a more painless solution to this now.

Btw, I did thoroughly test the version before it was added as a new version. So, I'm still not entirely sure what's wrong or how to fix it.

هل كانت مفيدة؟

المحلول

It is not possible to revert the app version. You can upload the previous version as new version again to fix this. One thing you can do is : "Expediting an App Review" Please check the following link. https://developer.apple.com/appstore/contact/?topic=expedite

Thanks

نصائح أخرى

Here's a snippet from iTunes Connect Help page :

Question: The new version of my app on the App Store has a bug. Can I use a previous version to replace it?

No. You cannot revert to a previous version on the App Store. You must submit a new version.

Source : iTunes Connect FAQ


Obviously the alternative would be to submit a new build but ask for expedited app review.

But that means that either your app is event-related or you have a critical bug that you need fixed as soon as possible.

I believe that you can prepare for problems by creating a fallback version with a higher version number and submitting it for approval with manual publishing. That should cause it to be quiescent in your store until you choose to fall back, and you publish it.

I am not certain whether you can then submit improved versions with a lower version number than your fallback version.

I had to do this recently. I was able to adjust a previous version archive. I started by copying the archive and opening the copy, then editing the info.plist files, adjusting/incrementing both the version and build numbers at both the archive and app package levels. Then uploaded to iTunes, which recognized it as a new version.

Preface: I agree with the other posts here that you can't perform a rollback through the iTunes Connect itself. Even if you could, you'd suffer the lag time it takes for users to update to the rolled-back-version. But that doesn't mean we can't still rollback apps.


Retroactively, you cannot rollback an app. Proactively, however, you can instrument your app to enable future rollbacks after a build has been released and installed.

High-level steps:

  • Build each version of your application as a framework
  • For each release build, include both the current and old framework versions
  • On app boot, decided which framework to load and execute (include sane defaults)
  • When you want to rollback, update the cached values across all user devices and wait for the next app open.

This strategy uses similar mechanics to feature flags which are commonly used to enable/disable features without re-releasing. However, in this case, you're "feature-flagging" your entire app version.

Is feature flagging between embedded libraries against App Store Guidelines?

No. Embedding two versions of your app into one release is not against App Store review guidelines:

4.7 HTML5 Games, Bots, etc.

Apps may contain or run code that is not embedded in the binary (e.g. HTML5-based games, bots, etc.), as long as code distribution isn’t the main purpose of the app, the code is not offered in a store or store-like interface, and provided that the software (1) is free or purchased using in-app purchase; (2) only uses capabilities available in a standard WebKit view (e.g. it must open and run natively in Safari without modifications or additional software); your app must use WebKit and JavaScript Core to run third-party software and should not attempt to extend or expose native platform APIs to third-party software;

Similar to feature flags, all code that you plan to run is included in the binary that you submit for review. What's more, as long as you are rolling back to releases that Apple already reviewed and approved, you're not breaking the spirit of the guidelines.

Does this hurt performance?

I've profiled this approach against many of the popular and heavy open-source iOS apps including Wikipedia, Signal, Firefox, etc. You can be smart about deduping assets and shared libraries, resulting in a sandwiched-app-bundle size of about 1.2x the original size (really just depending on how much code you changed). You also incur about a 50ms startup cost when choosing which version of the app to boot.

IMO, both time and size increases are worthwhile in return for the ability to selectively rollback users experiencing issues while you take time implementing a fix.

Do real apps do this?

Major apps feature-flag between dylibs all the time when launching new features and optimizing performance. I have also heard of major tech companies using this app-level pattern for their largest releases. I have a personal app in the App Store using this pattern, and I have helped other developers do the same.

How can someone do this for their app

If you are comfortable going deep on the Xcode build system, you can follow the steps outlined above and with some fiddling, start feature flagging your app version on boot. Note that you'll also need some form of caching and a server endpoint to update the on-device flag.

The implementation described above is also exactly how screenplay.dev implements iOS rollbacks. The tool:

  • Adds two build targets to your Xcode project, one for building the framework version, and one for bundling the final release build.
  • Serves as a repository for your old app build versions.
  • Provides a web UI for toggling live versions.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top