Native SwiftUI wrapper around ipatool that keeps every CLI feature one click away.
- Authenticate Apple IDs (login, info, revoke) with inline 2FA handling.
- Search for apps, inspect metadata, and initiate purchases directly from results.
- Manually purchase licenses, list all available versions, and inspect version metadata.
- Download IPA files with optional automatic purchasing and destination picker.
- Real-time command log with stdout/stderr capture for debugging.
- Preferences pane to point at a custom
ipatoolbinary, toggle verbose/non-interactive flags, and store the keychain passphrase.
ipatoolUI.xcodeproj– macOS SwiftUI app target (minimum macOS 13).ipatoolUI/– application sources, SwiftUI views, view models, services, and resources.Resources/Assets.xcassets– placeholder app icon and preview assets.
- Install
ipatool(e.g.brew install ipatool). - Open
ipatoolUI.xcodeprojin Xcode 15 or newer. - Select the ipatoolUI scheme and build/run on macOS 13+.
- On first launch, visit Settings → ipatool Binary to confirm the executable path if it is not auto-detected.
- Authentication: provide Apple‑ID credentials (password stays local) and sign in. Use Account Info to verify the active session or Revoke to clear credentials.
- Search: look up apps, inspect bundles, and trigger purchases for any result.
- Purchase: obtain licenses manually by bundle identifier.
- Versions: list every external version identifier for an app; copy IDs for later use.
- Download: choose app/bundle, optional version, destination, and whether to auto‑purchase. Progress and results surface in the status area and logs.
- Version Metadata: resolve release details for a specific external version.
- Logs: inspect every launched
ipatoolcommand, with sanitized arguments and captured stdout/stderr. - Settings: configure the executable location, passphrase, verbosity, and non-interactive behavior.
- The UI always invokes
ipatoolwith--format jsonso responses can be parsed automatically. - Sensitive flags (passwords, OTP codes, keychain passphrases) are masked inside the command log.
- The app delegates complex state (command history, user preferences) to
UserDefaults, so reruns preserve your setup.