Skip to content

Instantly share code, notes, and snippets.

@qnblackcat
Last active November 19, 2025 09:38
Show Gist options
  • Select an option

  • Save qnblackcat/4f7b77f685ccda2ff4ef916a27d66107 to your computer and use it in GitHub Desktop.

Select an option

Save qnblackcat/4f7b77f685ccda2ff4ef916a27d66107 to your computer and use it in GitHub Desktop.
Downloading older versions of iOS apps using ipatool

Downloading older versions of iOS apps using ipatool

👉 ipatool is an open-source tool developed by Majd, a highly trustworthy and talented developer in the iOS community. Recently, ipatool got a significant update that allows users to easily download older versions of iOS apps on macOS/Windows/Linux!.

👉 Since ipatool doesn't have a graphical user interface (GUI), some of you might think it's tricky to use. But trust me, it's not! Here's a simple guide if you're still a bit scared of the terminal. (Tbh, everything in this *guide can be found on ipatool's repo)

👉 Note: You need to log into your Apple ID via ipatool for the tool to work. Unless you prioritize security above all, you can trust logging into your Apple account with ipatool. As explained earlier, it’s an open-source tool developed by a well-known and reliable developer, minimizing security risks to the lowest level.

Obtain the Build Number of the version you want to download

  • Method 1: You can get the Build Number of most apps on the App Store from ipafilezone or Appstore.bilin (backup).
  • Method 2: Ask a jailbroken user who has AppStore++ installed to get the Build version number for you.
  • If you still can't find the Build Number, see this.

Windows ⊞

1. Install ipatool

  • Grab the ipatool binary from ipatool realeases. Use ...windows-arm64.tar.gz for ARM Windows, ...windows-amd64.tar.gz for x86 Windows.
  • Unzip.

2. Usage

👉 Step 1: Sign in with your Apple account

  • Open Command Prompt (search "cmd" in Start menu) or PowerShell.

  • Drag & drop the extracted ipatool binary into the Command Prompt or PowerShell window. Then, run: /path/to/ipatool.exe auth login --email [email protected]

  • Enter your Apple Account password and 2FA code when prompted (your password won't be displayed, just type it normally).

  • Enter your PC password (passphrase) when prompted. If you do not set a password for your computer, press Enter to skip.

1

  • ipatool should respond with something like: INF [email protected] name="Your Name" success=true

👉 Step 2: Run ipatool

  • Get the app's bundle ID (com.abc.xyz): /path/to/ipatool.exe search Yourapp

4

  • Combine with the prepared Build Number, we can now download the exact version we want. Note that if you don't specify the --external-version-id flag, ipatool will simply download the latest version available.

💻 /path/to/ipatool.exe download -b [app's bundle ID] --external-version-id [Build Number]

  • That's it! The IPA is saved in your Home folder.

3

  • Example: Download YouTube (com.google.ios.youtube) version 20.16.7(874149063)

💻 ipatool download -b com.google.ios.youtube --external-version-id 874149063


macOS 

1. Install ipatool

👉 Method 1: Package Manager (Homebrew - recommended)

  • Install Homebrew (if not installed): /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

  • Use Homebrew to install ipatool: brew install ipatool

  • Now you can call ipatool directly in the Terminal window.

👉 Method 2: Manual install (not recommended)

  • Grab the ipatool binary from ipatool realeases. Use ...macos-arm64.tar.gz for Apple silicon Mac, ...macos-amd64.tar.gz for Intel Mac.
  • Unzip.
  • Drag & drop the binary into the Terminal.

2. Usage

👉 Step 1: Sign in with your Apple account

  • In Terminal, run: ipatool auth login --email [email protected]

  • Enter your password and 2FA code when prompted (your password won't be displayed, just type it normally).

CleanShot 16-06at 11 39

  • If ipatool responds with INF [email protected] name="Your Name" success=true, then you're good to go.

  • You also will be prompted to enter your device’s password to allow ipatool to access the keychain (Select Always Allow).

👉 Step 2: Run ipatool

  • Get the app's bundle ID (com.abc.xyz): ipatool search Yourapp CleanShot 16-06at 17 35

  • Combine with the prepared Build Number, we can now download the exact version we want. Note that if you don't specify the --external-version-id flag, ipatool will simply download the latest version available.

💻 ipatool download -b [app's bundle ID] --external-version-id [Build Number]

  • That's it! The IPA is saved in your Home folder. CleanShot 16-06at 17 43

  • Example: Download YouTube (com.google.ios.youtube) version 20.16.7(874149063)

💻 ipatool download -b com.google.ios.youtube --external-version-id 874149063

Linux 🐧

(Don't think a Linux user has to read this guide)


Install the IPA


@jschmudd14
Copy link

jschmudd14 commented Oct 16, 2025

Edit: After getting the values from iMazing, you can skip the other steps and use my new tool which is based off IPATool here: pyIPATool-WebUI

For anyone who wants to use this for tvOS apps, here are the steps:

  1. Make sure you have the current version of the app downloaded on your Apple TV.

  2. Install ProxyMan on your Mac (or an equivalent packet sniffer/proxy tool for Windows).

  3. Install iMazing on your Mac or PC

  4. Follow iMazing’s steps for connecting your Mac/PC to the Apple TV.

  5. In iMazing, go to Tools → Manage Apps.

  6. Right‑click (or use the options menu) and select Export List to CSV.

  7. Open the CSV file. For the app’s row:

    • Store ID = AppID for IPATool
    • Version ID = External Version ID for IPATool
  8. In Terminal, set your proxy to ProxyMan (adjust the port if using another tool):

    export http_proxy=http://127.0.0.1:9090
    export https_proxy=http://127.0.0.1:9090
  9. In ProxyMan, go to Tools → SSL Proxying List and add this rule:

    *itunes*
    
  10. Using the values from step 6, in Terminal run IPATool. For example:

ipatool get-version-metadata --app-id {Store ID} --external-version-id {Version ID}

Example with real values:

ipatool get-version-metadata --app-id 6695725513 --external-version-id 876722244
  1. Run the command.

  2. In ProxyMan, review the captured requests. Look for a URL like:

    https://p25-buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/volumeStoreDownloadProduct
    
  3. Open that request and check the response body. It will include an array of softwareVersionExternalIdentifiers — these represent the Apple TV versions of the app that are available.

  4. You can:

    • Use the IPATool get-version-metadata command to inspect each version until you find the one you want, or
    • Download each version directly with IPATool.

    The softwareVersionExternalIdentifiers values are the external-version-id you’ll need to download a specific version with IPATool.

@qnblackcat
Copy link
Author

qnblackcat commented Oct 17, 2025

@jschmudd14
Well, that was impressive.

However, I think there's a better way to do it that won't require another app.

Tbh, I haven't tested it because I don't own an AppleTV, but theoretically it should work.

  1. Download the latest version of the app.
  2. Extract the IPA file.
  3. Inside the extracted IPA, there will be a file named iTunesMetadata.plist. This file contains some metadata of the app, including the app ID (itemId) and the external version ID (softwareVersionExternalIdentifiers).
  4. Now, we can use ipatool to check out every version you want.

Example: Infuse app

Python 2025-10-17 10: 20: 13

@qnblackcat
Copy link
Author

Using windows 11 and having trouble with step 2, running the ipatool and getting the bundle id. I was able to enter my login, pass and give the 6 digit code, but just cant figure out how to type the code in for step 2. I'm trying to downgrade this app called Bolt Browser and Documents to the 1.0 addition. Thanks

@essig

Isn't the step 2 code is your PC password?

@jschmudd14
Copy link

@jschmudd14 Well, that was impressive.

However, I think there's a better way to do it that won't require another app.

Tbh, I haven't tested it because I don't own an AppleTV, but theoretically it should work.

  1. Download the latest version of the app.
  2. Extract the IPA file.
  3. Inside the extracted IPA, there will be a file named iTunesMetadata.plist. This file contains some metadata of the app, including the app ID (itemId) and the external version ID (softwareVersionExternalIdentifiers).
  4. Now, we can use ipatool to check out every version you want.

Example: Infuse app

Python 2025-10-17 10: 20: 13

So at least for the app I tested, iMPlayer, it has different versions between tvOS and iOS/iPadOS. Even though it's the same App ID. I am assuming it depends on how the developer publishes them to the app store or maybe like that for all apps? Either way, for ones like that the iOS version of the IPA that IPATool pulls as the latest won't include the tvOS versions in that array.

I know in IPATool I can edit the code to search for the tvOS version by adding it as an entity type in the search api call, but that doesn't return the version id, just the user friendly version, and I haven't found a way to use the list versions api to list it.

I did make my own version of IPATool in python with a web ui for interacting with to bypass the need for ProxyMan though since the only reason you needed that was IPATool doesn't display the versions array by default when fetching the metadata of a specific one, even though it is returned, and having my own interface fixes that. I didn't feel like trying to edit the GO to do that as I'm not as familiar. May publish it to my github later if I can polish some things up. It allows you to just grab the tvOS version from iMazing connected to your atv, then fetch the versions using that version as a search parameter, and then you have all of the atv versions.

@qnblackcat
Copy link
Author

@jschmudd14

That's very promising.

I wish I could help, but it's hard without an AppleTV. Please let me know when you finish it. As far as I know, there's no decent guide on how to get an AppleTV ipa, let alone getting any version of it.

@jschmudd14
Copy link

@jschmudd14

That's very promising.

I wish I could help, but it's hard without an AppleTV. Please let me know when you finish it. As far as I know, there's no decent guide on how to get an AppleTV ipa, let alone getting any version of it.

Here is the link to my rewrite of IPA Tool which has a whole UI, supports tvOS apps, and has instructions for downloading them. As well as makes downloading older versions of any app easier. https://github.com/jschmudd14/pyIPATool-WebUI

@ripzey
Copy link

ripzey commented Oct 23, 2025

Wont let me login to apple id? /path/to/ipatool.exe auth login -—email [email protected] just says The system cannot find the path specified.

@binnichtaktiv
Copy link

Wont let me login to apple id? /path/to/ipatool.exe auth login -—email [email protected] just says The system cannot find the path specified.

you have to replace /path/to/ipatool.exe with the path where you downloaded the exe

@sH1222J
Copy link

sH1222J commented Oct 30, 2025

I followed this step:

Drag & drop the extracted ipatool binary into the Command Prompt or PowerShell window. Then, run: /path/to/ipatool.exe auth login -—email [email protected]

However, when I tried it, I got this error:
2:01AM ERR error="unknown shorthand flag: 'â' in -—email" success=false

It seems that the long dash before --email is actually an incorrect character (probably copied from a formatted text).

Also, I couldn’t proceed to the next step until I included the --password flag as well.
For example:

ipatool auth login --email [email protected] --password abc123
Just sharing this in case others run into the same issue!

@scriptgenerator64
Copy link

Thank you! No longer need to sketchily sideload old versions when an update breaks old functionality!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment