MCPcopy Index your code
hub / github.com/majd/ipatool

github.com/majd/ipatool @v2.3.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v2.3.0 ↗ · + Follow
224 symbols 724 edges 77 files 40 documented · 18% updated 1d agov2.3.0 · 2026-02-16★ 9,54833 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

IPATool

Release License

ipatool is a command line tool that allows you to search for iOS apps on the App Store and download a copy of the app package, known as an ipa file.

Demo

Requirements

  • Supported operating system (Windows, Linux or macOS).
  • Apple ID set up to use the App Store.

Installation

Manual

You can grab the latest version of ipatool from GitHub releases.

Package Manager (macOS)

You can install ipatool using Homebrew.

$ brew install ipatool

Usage

To authenticate with the App Store, use the auth command.

Authenticate with the App Store

Usage:
  ipatool auth [command]

Available Commands:
  info        Show current account info
  login       Login to the App Store
  revoke      Revoke your App Store credentials

Flags:
  -h, --help   help for auth

Global Flags:
      --format format     sets output format for command; can be 'text', 'json' (default text)
      --non-interactive   run in non-interactive session
      --verbose           enables verbose logs

Use "ipatool auth [command] --help" for more information about a command.

To search for apps on the App Store, use the search command.

Search for iOS apps available on the App Store

Usage:
  ipatool search <term> [flags]

Flags:
  -h, --help        help for search
  -l, --limit int   maximum amount of search results to retrieve (default 5)

Global Flags:
      --format format     sets output format for command; can be 'text', 'json' (default text)
      --non-interactive   run in non-interactive session
      --verbose           enables verbose logs

To obtain a license for an app, use the purchase command.

Obtain a license for the app from the App Store

Usage:
  ipatool purchase [flags]

Flags:
  -b, --bundle-identifier string   Bundle identifier of the target iOS app (required)
  -h, --help                       help for purchase

Global Flags:
      --format format     sets output format for command; can be 'text', 'json' (default text)
      --non-interactive   run in non-interactive session
      --verbose           enables verbose logs

To obtain a list of availble app versions to download, use the list-versions command.

List the available versions of an iOS app

Usage:
  ipatool list-versions [flags]

Flags:
  -i, --app-id int                 ID of the target iOS app (required)
  -b, --bundle-identifier string   The bundle identifier of the target iOS app (overrides the app ID)
  -h, --help                       help for list-versions

Global Flags:
      --format format                sets output format for command; can be 'text', 'json' (default text)
      --keychain-passphrase string   passphrase for unlocking keychain
      --non-interactive              run in non-interactive session
      --verbose                      enables verbose logs

To download a copy of the ipa file, use the download command.

Download (encrypted) iOS app packages from the App Store

Usage:
  ipatool download [flags]

Flags:
  -i, --app-id int                   ID of the target iOS app (required)
  -b, --bundle-identifier string     The bundle identifier of the target iOS app (overrides the app ID)
      --external-version-id string   External version identifier of the target iOS app (defaults to latest version when not specified)
  -h, --help                         help for download
  -o, --output string                The destination path of the downloaded app package
      --purchase                     Obtain a license for the app if needed

Global Flags:
      --format format                sets output format for command; can be 'text', 'json' (default text)
      --keychain-passphrase string   passphrase for unlocking keychain
      --non-interactive              run in non-interactive session
      --verbose                      enables verbose logs

To resolve an external version identifier, returned by the list-versions command, use the get-version-metadata command.

Retrieves the metadata for a specific version of an app

Usage:
  ipatool get-version-metadata [flags]

Flags:
  -i, --app-id int                   ID of the target iOS app (required)
  -b, --bundle-identifier string     The bundle identifier of the target iOS app (overrides the app ID)
      --external-version-id string   External version identifier of the target iOS app (required)
  -h, --help                         help for get-version-metadata

Global Flags:
      --format format                sets output format for command; can be 'text', 'json' (default text)
      --keychain-passphrase string   passphrase for unlocking keychain
      --non-interactive              run in non-interactive session
      --verbose                      enables verbose logs

Note: the tool runs in interactive mode by default. Use the --non-interactive flag if running in an automated environment.

Compiling

The tool can be compiled using the Go toolchain.

$ go build -o ipatool

Unit tests can be executed with the following commands.

$ go generate github.com/majd/ipatool/...
$ go test -v github.com/majd/ipatool/...

License

IPATool is released under the MIT license.

Extension points exported contracts — how you extend this code

Logger (Interface)
go:generate go run go.uber.org/mock/mockgen -source=logger.go -destination=logger_mock.go -package log [1 implementers]
pkg/log/logger.go
Keychain (Interface)
go:generate go run go.uber.org/mock/mockgen -source=keychain.go -destination=keychain_mock.go -package keychain [1 implementers]
pkg/keychain/keychain.go
OperatingSystem (Interface)
go:generate go run go.uber.org/mock/mockgen -source=operatingsystem.go -destination=operatingsystem_mock.go -package ope [1 …
pkg/util/operatingsystem/operatingsystem.go
Payload (Interface)
(no doc) [2 implementers]
pkg/http/payload.go
AppStore (Interface)
(no doc) [1 implementers]
pkg/appstore/appstore.go
Writer (Interface)
go:generate go run go.uber.org/mock/mockgen -source=writer.go -destination=writer_mock.go -package log [1 implementers]
pkg/log/writer.go
Keyring (Interface)
go:generate go run go.uber.org/mock/mockgen -source=keyring.go -destination=keyring_mock.go -package keychain [1 implementers]
pkg/keychain/keyring.go
Machine (Interface)
go:generate go run go.uber.org/mock/mockgen -source=machine.go -destination=machine_mock.go -package machine [1 implementers]
pkg/util/machine/machine.go

Core symbols most depended-on inside this repo

Send
called by 87
pkg/http/client.go
MacAddress
called by 54
pkg/util/machine/machine.go
Do
called by 24
pkg/http/client.go
NewErrorWithMetadata
called by 23
pkg/appstore/error.go
Error
called by 21
pkg/log/logger.go
Write
called by 21
pkg/log/writer.go
Download
called by 17
pkg/appstore/appstore.go
Remove
called by 16
pkg/keychain/keyring.go

Shape

Method 112
Struct 57
Function 42
Interface 10
TypeAlias 3

Languages

Go100%

Modules by API surface

pkg/util/operatingsystem/operatingsystem.go19 symbols
pkg/http/client.go18 symbols
pkg/appstore/appstore.go15 symbols
pkg/appstore/appstore_download.go12 symbols
pkg/appstore/appstore_replicate_sinf.go11 symbols
pkg/util/machine/machine.go10 symbols
pkg/log/logger.go10 symbols
pkg/appstore/appstore_login.go9 symbols
pkg/log/writer.go7 symbols
pkg/keychain/keychain.go7 symbols
pkg/appstore/appstore_download_test.go7 symbols
pkg/http/payload.go6 symbols

Dependencies from manifests, versioned

github.com/99designs/go-keychainv0.0.0-2019100805025 · 1×
github.com/99designs/keyringv1.2.1 · 1×
github.com/avast/retry-gov3.0.0+incompatible · 1×
github.com/danieljoos/wincredv1.1.2 · 1×
github.com/dvsekhvalnov/jose2gov1.7.0 · 1×
github.com/go-logr/logrv1.2.3 · 1×
github.com/godbus/dbusv0.0.0-2019072614260 · 1×
github.com/gsterjov/go-libsecretv0.0.0-2016100109473 · 1×
github.com/inconshreveable/mousetrapv1.0.1 · 1×
github.com/juju/go4v0.0.0-2016022216325 · 1×
github.com/juju/persistent-cookiejarv1.0.0 · 1×

For agents

$ claude mcp add ipatool \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact