<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Get Info: #appstore</title>
    <description>Posts tagged “appstore” — Blog of independent game and app developer Matt Sephton. Featuring vintage Macintosh, game development, digital artwork, Japanese esoterica, video game reviews, hacks and tips, and much more.</description>
    <link>https://blog.gingerbeardman.com/tag/appstore/</link>
    <atom:link href="https://blog.gingerbeardman.com/tag/appstore/index.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Mon, 06 Jul 2026 14:37:40 +0000</pubDate>
    <lastBuildDate>Mon, 06 Jul 2026 14:37:40 +0000</lastBuildDate>
    <generator>Jekyll v4.4.1</generator>

    
      
        <item>
          <title>How to push an update to the App Store without building a new binary</title>
          <description>&lt;p&gt;This post details how to easily deal with a request from Apple to update an old app that is still working perfectly—without having to setup a development environment to build it from source.&lt;/p&gt;

&lt;h2 id=&quot;tldr&quot;&gt;TL;DR&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Bump the version in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Info.plist&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Create a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.icns&lt;/code&gt; icon&lt;/li&gt;
  &lt;li&gt;Do a fresh &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;codesign&lt;/code&gt; on the app bundle&lt;/li&gt;
  &lt;li&gt;Use Application Loader to get it into iTunes Connect&lt;/li&gt;
  &lt;li&gt;Submit for approval&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;background&quot;&gt;Background&lt;/h2&gt;

&lt;p&gt;There’s an App Store cleanup going on under the banner of “Improving the App Store”. I approve of this, in principle: removing apps that no longer launch, crash or otherwise operate incorrectly is a Good Thing™.&lt;/p&gt;

&lt;p&gt;However, I’ve had a request to update an app that still functions perfectly despite not having been updated since 2011. That’s Snow Leopard vintage for all the old timers that are reading!&lt;/p&gt;

&lt;h2 id=&quot;next-steps&quot;&gt;Next Steps&lt;/h2&gt;

&lt;p&gt;First thing to know is that you can appeal such a request. You probably won’t have much luck—I didn’t. “Computer says no.”&lt;/p&gt;

&lt;p&gt;A much easier way is to take the old, bug-free binary—easily downloaded from the App Store—and repackage it so that it appears to be new. Sounds like a plan!&lt;/p&gt;

&lt;h2 id=&quot;a-new-icon&quot;&gt;A new icon&lt;/h2&gt;

&lt;p&gt;The old icon was made before Retina displays existed, and even before multiple images in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.icns&lt;/code&gt; files was enforced. So I had to make a new one. However, Apple has removed &lt;em&gt;Icon Composer&lt;/em&gt; from their Developer Tools because it doesn’t support the 1024px icons required for the latest Retina displays. This makes things a little trickier.&lt;/p&gt;

&lt;p&gt;As of today there are two options to create a valid Retina compatible &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.icns&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;On the command line from a folder full of correctly named PNG files: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;iconutil -c icns &amp;lt;foldername&amp;gt;&lt;/code&gt; (see &lt;a href=&quot;https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/iconutil.1.html&quot;&gt;man page&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Using the the third-party, open-source app &lt;a href=&quot;https://github.com/lemonmojo/IconComposer2x&quot;&gt;Icon Composer 2x&lt;/a&gt; which is almost a drop-in replacement for the old Apple app. Nice work Lemon Mojo!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Final packaging shell script:&lt;/p&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/eb080bb29bfcf71f829e5ff9107f1d4a&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/eb080bb29bfcf71f829e5ff9107f1d4a.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;So, what exactly are we doing here?&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Bash &lt;em&gt;shebang&lt;/em&gt; (see &lt;a href=&quot;https://en.wikipedia.org/wiki/Shebang_%28Unix%29&quot;&gt;wiki&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Set &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DATE&lt;/code&gt; to a formatted date string, eg. 20170119164510&lt;/li&gt;
  &lt;li&gt;Set &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CFBundleVersion&lt;/code&gt; string in .plist to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$DATE&lt;/code&gt; string&lt;/li&gt;
  &lt;li&gt;Copy &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.plist&lt;/code&gt; into app&lt;/li&gt;
  &lt;li&gt;Copy &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.icns&lt;/code&gt; into app&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Touch&lt;/em&gt; app to set modified date&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Prune&lt;/em&gt; the resource fork, Finder information, and similar detritus&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Codesign&lt;/em&gt; app bundle with my current certificates&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Package&lt;/em&gt; app as installer .pkg&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Assess/test&lt;/em&gt; installer .pkg (see &lt;a href=&quot;https://developer.apple.com/library/content/qa/qa1940/_index.html&quot;&gt;docs&lt;/a&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;application-loader&quot;&gt;Application Loader&lt;/h2&gt;

&lt;p&gt;Uploading to iTunes Connect outside of Xcode requires Application Loader. I tried using the version that comes with the latest Xcode, but it was giving me some nonsensical, badly written error messages:&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/update-app-no-new-binary-app-loader-1.png&quot; alt=&quot;PNG&quot; title=&quot;Error: The Info.plist indicates a iOS app, but submitting a pkg or mpkg.&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/update-app-no-new-binary-app-loader-2.png&quot; alt=&quot;PNG&quot; title=&quot;Error: No version found for ‘adamId—platform’ (485354734—iOS App). If this problem persists for more than 24 hours, please contact your Apple representative.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Some Googling found a &lt;a href=&quot;http://stackoverflow.com/questions/32659970/upload-to-app-store-failed-no-version-found-for-adamid-platform&quot;&gt;StackOverflow post&lt;/a&gt; that recommended using &lt;a href=&quot;https://itunesconnect.apple.com/apploader/ApplicationLoader_3.0.dmg&quot;&gt;Application Loader 3.0&lt;/a&gt;. After downloading this older version (interestingly it’s the one Apple link to from iTunes Connect) everything went smoothly!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/update-app-no-new-binary-app-loader-3.png&quot; alt=&quot;PNG&quot; title=&quot;SUCCESS!&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;re-submission&quot;&gt;Re-submission&lt;/h2&gt;

&lt;p&gt;After these simple changes you can resubmit. But what to write in the version change log? I tried the following:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;A new build with no changes because Apple asked for it, despite the game still working perfectly after all these years!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I was bitter.
Metadata Rejected.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;New build required due to the App Store Improvements process.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I was perfectly honest.
Metadata Rejected.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Improvements for Retina displays.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Got to love that new icon.
Application Approved!&lt;/p&gt;

&lt;h2 id=&quot;thats-all-folks&quot;&gt;That’s all folks&lt;/h2&gt;

&lt;p&gt;Hopefully you can get your app back on the App Store without too much effort. Of course, you should only do this for apps that you know are functioning correctly. Good luck!&lt;/p&gt;

&lt;p&gt;Final thanks to Mark Sibly of &lt;a href=&quot;https://en.wikipedia.org/wiki/Blitz_BASIC#BlitzMax&quot;&gt;Blitz Research&lt;/a&gt; for making a tool that produces game binaries that stand the test of time! I can’t believe those binaries still run without error all these years later.&lt;/p&gt;

&lt;h2 id=&quot;a-note-to-apple-developer-relations&quot;&gt;A note to Apple Developer Relations&lt;/h2&gt;

&lt;p&gt;Rather than drawing an arbitrary line by date, how about investing in automated testing of apps? Developers would appreciate Apple taking on that burden, rather than asking developers to do new builds of apps that don’t really need it. Thanks for reading.&lt;/p&gt;

&lt;h2 id=&quot;2022-update&quot;&gt;2022 update&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Wire Hang Redux&lt;/em&gt;, the game I did this for, is no longer listed on the Mac App Store. The reason being that I didn’t have a 64-bit version ready-to-go for the 2017 deadline Apple set for removal of 32-bit-only apps.&lt;/p&gt;

&lt;p&gt;Since then I’ve been selling it elsewhere with better results. &lt;a href=&quot;https://gingerbeardman.itch.io/wire-hang-redux&quot;&gt;You can grab it from itch.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I’m republishing this article to help developers dealing with similar requests from Apple over 5 years later.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 19 Jan 2017 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2017/01/19/how-to-push-an-update-to-the-app-store-without-building-a-new-binary/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2017/01/19/how-to-push-an-update-to-the-app-store-without-building-a-new-binary/</guid>
        </item>
      
    
      
        <item>
          <title>How to prevent an individual iOS app from updating, forever</title>
          <description>&lt;blockquote&gt;
  &lt;p&gt;Note, August 2023: this method is outdated, for the latest &lt;a href=&quot;/2023/08/17/going-back-to-the-old-pre-x-twitter-ios-app/&quot;&gt;please see this newer blog post&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Change is the only constant. Nowhere is this more visible than on the App Store. &lt;a href=&quot;http://www.statista.com/statistics/258160/number-of-new-apps-submitted-to-the-itunes-store-per-month/&quot;&gt;Thousands of new apps and games appear every day&lt;/a&gt; and existing apps receive regular updates to add features and fix bugs. This will only accelerate further now that the App Store is firing on all cylinders and review times are &lt;a href=&quot;http://appreviewtimes.com&quot;&gt;measured in hours rather than days&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But what if you want to continue to use an old version of an app for your own reasons? Perhaps the old version has a better user interface, or the new version has some bugs? I can remember both of these issues affecting me numerous times over the years. The eBay app is the example that springs to mind.&lt;/p&gt;

&lt;p&gt;General consensus of opinion is that the only thing you can do is switch off automatic updates in iOS and avoid updating that particular app manually, which is easier said than done.&lt;/p&gt;

&lt;h2 id=&quot;there-has-to-be-a-better-way&quot;&gt;There has to be a better way&lt;/h2&gt;

&lt;p&gt;It’s a little known fact that there is actually a way to install an old version of an app on your iOS device which will prevent it from being checked for updates. Read on to find out how this can be done. This tutorial uses eBay as the example app, but I’ve also carried out this process on Gmail, Instagram, VSCO and more.&lt;/p&gt;

&lt;p&gt;You will need:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;good old iTunes,&lt;/li&gt;
  &lt;li&gt;the iOS device you want to install it on,&lt;/li&gt;
  &lt;li&gt;the USB cable for your iOS device.&lt;/li&gt;
  &lt;li&gt;a backup of the old version of the app as an .ipa file on your Mac. You’ll only have this if you use iTunes to sync your iOS device or download app updates. Have a look in your Time Machine or other backups in the following location:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;~/Music/iTunes/iTunes Music/Mobile Applications&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Warning: as part of this process you will be required to delete the current version of the app that you have installed on your iOS device. So be sure to backup any data from the app that is not stored in the cloud!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;enay&quot;&gt;eNay&lt;/h2&gt;

&lt;p&gt;eBay introduced a disastrous fourth version of &lt;a href=&quot;https://itunes.apple.com/gb/app/ebay-shop-search-buy-sell./id282614216?mt=8&quot;&gt;their app&lt;/a&gt; back in September 2015. It was a complete rewrite of the app that made it much more cumbersome to use, and was also missing key functionality and information that were present in the previous app. It was, understandably, &lt;a href=&quot;https://community.ebay.com/t5/eBay-Mobile-App-iOS/gp-p/Mobile-iOS&quot;&gt;met with a user revolt&lt;/a&gt;. eBay are now up to version 5.0 and it is arguably still not as good as the old version I like to use.&lt;/p&gt;

&lt;h2 id=&quot;vsc-no&quot;&gt;VSC-NO!&lt;/h2&gt;

&lt;p&gt;The photo editing app &lt;a href=&quot;https://itunes.apple.com/gb/app/vsco/id588013838?mt=8&quot;&gt;VSCO&lt;/a&gt; is another app that has enraged users with an update that destroys the usability of the app. Strangely enough that is also version 5.x and users are also outraged over the change.&lt;/p&gt;

&lt;h2 id=&quot;gfail&quot;&gt;Gfail&lt;/h2&gt;

&lt;p&gt;Yes again another disaserous version 5.x! This tim it is Gmail, the new version being very similar to the “Inbox by Gmail” app that has been bad and stayed bad for some time now. Gmail v5 is at one-star on the App Store.&lt;/p&gt;

&lt;h2 id=&quot;to-the-time-machine&quot;&gt;To the Time Machine!&lt;/h2&gt;

&lt;p&gt;Due to the fact I frequently do a manual update of all my apps through iTunes on my Mac, I had a backup of eBay 3.6.1 for iPhone and VCO 4.6.1 sitting in my Time Machine backup on my external drive.&lt;/p&gt;

&lt;h2 id=&quot;how-to-install-an-old-app-and-prevent-it-from-updating&quot;&gt;How to install an old app and prevent it from updating&lt;/h2&gt;

&lt;p&gt;Before we begin, remove the app you want to downgrade from your device by tapping and holding on it. Make sure to backup any data you need from it!&lt;/p&gt;

&lt;p&gt;This example uses the eBay app, but applies equally well to VSCO.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Copy your &lt;em&gt;backup&lt;/em&gt; of .ipa somewhere where you can work on it.&lt;/li&gt;
  &lt;li&gt;Open the .ipa with &lt;em&gt;Archive Utility&lt;/em&gt; to decompress it.&lt;/li&gt;
  &lt;li&gt;Expand the folder until you get to the &lt;em&gt;Payload&lt;/em&gt;.&lt;/li&gt;
  &lt;li&gt;Drop the &lt;em&gt;eBay.app from the Payload folder&lt;/em&gt; onto iTunes “My Apps”. It’s the one whose icon has a “no entry” on it.&lt;/li&gt;
  &lt;li&gt;If prompted, &lt;em&gt;replace the newer version&lt;/em&gt; of the app in iTunes (you can always download the latest version again from the App Store).&lt;/li&gt;
  &lt;li&gt;Check that iTunes recognises the app payload (for this to work apps must have been downloaded with an Apple ID that is authorised on this Mac). Don’t worry about the missing app icon, that’s OK.&lt;/li&gt;
  &lt;li&gt;Go into your iOS device screen, Apps section, find the app through search and press &lt;em&gt;Install&lt;/em&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Apply&lt;/em&gt; changes to Sync, and you’re done!&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;just-let-me-look-at-some-screenshots-to-figure-this-out-ok&quot;&gt;“Just let me look at some screenshots to figure this out”. OK!&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/max/1520/1*gUV9EY1MRIoiXxbCDlTm7Q.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/max/1520/1*3Kwyf5B9csphNzx-3GH2IA.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/max/1520/1*Jf9vqIDutU0YZiuUMpXQ9g.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps 1, 2 &amp;amp; 3:&lt;/strong&gt; Work on a copy of your .ipa backup, extract it, find the payload app.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/max/1520/1*vLWOprl3ADFZ1YqrbWpL5w.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/max/1204/1*P1K_MTvZbHjCNdRpI21BeA.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/max/1520/1*6kOllWf4Bsvve3cBE1SRgw.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps 4, 5 &amp;amp; 6:&lt;/strong&gt; Drop the payload app onto iTunes, replace the newer version if prompted, check that the app is listed without an icon.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/max/1400/1*XjEi0Yc59GdO6uhiEJpMzQ.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7:&lt;/strong&gt; Browse to the apps on your phone, find the app you just added, mark it for install. &lt;strong&gt;Step 8:&lt;/strong&gt; Sync, you’re done!&lt;/p&gt;

&lt;h2 id=&quot;so-how-does-this-work&quot;&gt;So how does this work?&lt;/h2&gt;

&lt;p&gt;What we are doing here is installing the app on the iOS device &lt;em&gt;without the associated app receipt&lt;/em&gt;, so the App Store app is not aware the old version is on the device and so will never prompt you to update it.&lt;/p&gt;

&lt;h2 id=&quot;how-do-i-undo-this-kind-of-install&quot;&gt;How do I undo this kind of install?&lt;/h2&gt;

&lt;p&gt;If you want to get things back to normal, simply delete the app from your iOS device and reinstall a newer version of the app without doing this trick.&lt;/p&gt;

&lt;h2 id=&quot;limitations&quot;&gt;Limitations&lt;/h2&gt;

&lt;p&gt;The one limitation of this is how long the developer will support the infrastructure that powers the old version of the app. For eBay this hasn’t been a problem to date, but there are no guarantees. Enjoy it whilst it lasts.&lt;/p&gt;

&lt;p&gt;Have fun keeping it old school! If you have any questions you as me on twitter @&lt;a href=&quot;https://twitter.com/gingerbeardman&quot;&gt;gingerbeardman&lt;/a&gt;.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 19 Jul 2016 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2016/07/19/how-to-prevent-an-individual-ios-app-from-updating-forever/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2016/07/19/how-to-prevent-an-individual-ios-app-from-updating-forever/</guid>
        </item>
      
    

  </channel>
</rss>
