IPATool Output Formats: Text and JSON Support Explained

IPATool supports two output formats: human-readable text (default) and machine-readable JSON, controlled via the global --format flag.

The open-source command-line utility majd/ipatool enables users to search, download, and inspect iOS app packages from the App Store. Understanding the available IPATool output formats allows developers to integrate the tool seamlessly into shell scripts, CI/CD pipelines, and automation workflows.

Supported Output Formats

IPATool defines its output behavior through the OutputFormat enum in cmd/output_format.go. The implementation recognizes two distinct presentation modes:

Text Format (Default)

The text format produces plain, human-readable output optimized for interactive terminal sessions. This is the default behavior when you run any command without specifying the --format flag. The text logger, instantiated in newLogger within cmd/common.go, formats log entries with colors and padding for readability.

JSON Format

The JSON format emits structured, machine-readable JSON objects suitable for programmatic consumption. This format is ideal for piping results into tools like jq or for processing by downstream applications. When enabled, the JSON logger in cmd/common.go serializes output as compact JSON without terminal formatting.

How to Specify the Output Format

The output format is controlled by the persistent --format (or -f) flag defined in cmd/root.go. This flag accepts either text or json as values.


# Use default text output

ipatool search --term "MyApp"

# Explicitly request JSON output

ipatool search --term "MyApp" --format json

# Short flag syntax

ipatool download --bundle-id com.example.app -f json

Source Code Implementation

According to the majd/ipatool source code, the output format switching logic spans three primary files:

  • cmd/output_format.go: Declares the OutputFormat enum with constants OutputFormatText and OutputFormatJSON, and implements the UnmarshalText method for parsing user input.
  • cmd/root.go: Registers the global --format flag and binds it to the configuration, making it available to all subcommands.
  • cmd/common.go: Contains the newLogger function that selects between a text logger (zerolog ConsoleWriter) and a JSON logger (zerolog JSON output) based on the OutputFormat setting.

Summary

  • IPATool supports text and JSON output formats.
  • The default format is text, optimized for human readability.
  • Use --format json or -f json to enable machine-readable JSON output.
  • The format configuration is handled by the OutputFormat enum in cmd/output_format.go and applied via newLogger in cmd/common.go.
  • Invalid format values trigger an error and fallback behavior as implemented in the enum's unmarshaling logic.

Frequently Asked Questions

What is the default output format in IPATool?

The default output format is text. When you execute commands without the --format flag, IPATool uses the text logger to produce human-readable output with terminal-friendly formatting. This behavior is hardcoded in the newLogger function in cmd/common.go when no format override is specified.

How do I enable JSON output in IPATool?

Pass the --format json or -f json flag to any command. This setting instructs the newLogger function in cmd/common.go to instantiate a JSON logger instead of the default text logger, serializing all output as compact JSON objects suitable for parsing.

Can IPATool output formats be used in automation scripts?

Yes. The JSON format is specifically designed for automation. You can pipe JSON output to utilities like jq to extract specific fields, or redirect it to files for processing in CI/CD pipelines. For example: ipatool search --term "App" --format json | jq '.[0].bundleID'.

What happens if I specify an invalid output format?

If you provide an unsupported format string (anything other than text or json), the UnmarshalText method in cmd/output_format.go returns an error and IPATool falls back to JSON output while indicating the invalid selection. This ensures the tool remains usable even with malformed input flags.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →