Mobile, Cloud & DevOps Tools

IPA Property List Viewer

Open an IPA or plist in your browser and read Info.plist in XML or binary format: bundle ID, versions, minimum iOS, privacy usage descriptions, URL schemes, associated domains and entitlements where present.

  • Property tree
  • Key facts and privacy strings
  • JSON export
Runs in your browser

Everything you paste, type or drop is processed in this browser tab. It is not uploaded, logged, stored or sent to analytics.

IPA Info.plist workspace

1 Your IPA or plist

Example:

Drop an .ipa, Info.plist (XML or binary) or .mobileprovision, or (up to 500 MB).

The file is read in your browser; nothing is uploaded. Only Info.plist and the embedded provisioning profile are decompressed from an IPA.

2 What the app declares

Choose a file, paste a plist or load the example.

What the IPA Property List Viewer does

This viewer reads an iOS app's Info.plist - from an .ipa, a standalone plist file in XML or binary format, or pasted XML - and shows the bundle ID, version and build, minimum iOS version, supported devices, privacy purpose strings, URL schemes, App Transport Security settings and, when the IPA carries a provisioning profile, its team, expiry and entitlements.

Everything runs in your browser. An IPA is a ZIP archive, so only Payload/<App>.app/Info.plist and embedded.mobileprovision are decompressed; the app binary is never read, run or uploaded.

How to use it

  1. Drop an .ipa, an Info.plist (XML or binary), or a .mobileprovision file onto the page - or paste XML plist text and choose Read plist.
  2. Read the headline for the bundle ID and version, and the tiles for minimum OS, device families, privacy strings and URL schemes.
  3. Check the findings: empty purpose strings and globally disabled App Transport Security are the settings App Review most often questions.
  4. Browse every key in the property table, and copy or download the plist as JSON or CSV.

Reading the results

CFBundleShortVersionString is the marketing version users see (3.2); CFBundleVersion is the build number, which must increase for each upload of the same version to App Store Connect.

Keys ending in UsageDescription are the purpose strings iOS shows when the app asks for camera, microphone, location, photos and similar access. A missing string crashes the app when it asks; an empty or vague one is a common rejection reason.

Entitlements shown here come from the provisioning profile, which lists what the signing identity is allowed to use. The entitlements the app actually claims are embedded in its code signature, which this viewer does not decode, so treat the profile as the upper bound.

Worked example: the Notes app Info.plist

The example is an XML Info.plist for com.example.notes, version 3.2 build 417, minimum iOS 16.0, built with the iOS 18.0 SDK. UIDeviceFamily lists 1 and 2, which the viewer shows as iPhone and iPad.

It declares three purpose strings. NSMicrophoneUsageDescription is present but empty, which is reported as a problem: iOS would show a permission prompt with no explanation. The camera and photo-library strings are fine.

The app registers the URL scheme notes, queries mailto, and sets NSAllowsArbitraryLoads to true, which turns off App Transport Security for every connection and is reported as a warning.

XML and binary property lists

Xcode writes Info.plist into the built app in binary form (a file starting with bplist00), so opening it in a text editor shows mostly unreadable bytes. The viewer reads both formats: binary lists are decoded from their offset table and typed objects, XML lists from Apple's PropertyList DTD with entity declarations refused.

Dates are shown in UTC ISO 8601 form, data values as a byte count with the Base64 content in the JSON download, and integers too large for JavaScript are kept as exact text rather than rounded.

Limitations: what the result does not prove

  • It reads property lists only. It does not decode the Mach-O binary, its code-signature entitlements, frameworks or privacy manifests (PrivacyInfo.xcprivacy is a plist too, and can be opened here on its own).
  • Encrypted App Store downloads still have a readable Info.plist, but nothing in this view proves the app behaves as its plist says.
  • Old-style OpenStep (text with braces) property lists are not supported; convert them with plutil -convert xml1 first.
  • Localised display names in InfoPlist.strings files are not applied; the viewer shows the base values.

Privacy: where your data goes

Everything you paste, type or drop is processed in this browser tab. It is not uploaded, logged, stored or sent to analytics. Session recording and tag-manager scripts are switched off on this page.

Standards and sources

Frequently asked questions

How do I find the bundle ID and version of an IPA without a Mac?

Open the IPA here. It is a ZIP archive, and the viewer reads Payload/<App>.app/Info.plist inside it to show CFBundleIdentifier, CFBundleShortVersionString and CFBundleVersion without needing Xcode or plutil.

Why does Info.plist look like gibberish when I unzip an IPA?

Xcode converts it to Apple's binary property list format when it builds the app. The file starts with bplist00 followed by typed objects and an offset table, which this viewer decodes back into readable keys and values.

What are NS...UsageDescription keys?

They are the purpose strings iOS shows in permission prompts, such as NSCameraUsageDescription for the camera. An app that requests a protected resource without the matching key is terminated, and App Review rejects strings that are empty or do not explain the use.

Can this show an app's entitlements?

Partly. If the IPA contains embedded.mobileprovision, the viewer extracts the plist inside it and lists the entitlements the profile allows, plus team and expiry. The entitlements baked into the code signature itself are not decoded.

Is NSAllowsArbitraryLoads always a problem?

It disables App Transport Security for all connections, so plain HTTP is allowed everywhere. Apple asks for a justification at review. Per-domain NSExceptionDomains entries are the narrower way to allow a legacy server.

Does the viewer upload my IPA?

No. The file is read with the browser's file API and ZIP entries are inflated locally with limits on size and entry count. Only two small files are decompressed, so even a large IPA opens quickly.

Last reviewed by the A2Z.Tools team against the sources listed above.

Rate this tool

Was this tool useful? Your feedback helps us improve it.

No ratings yet — be the first to rate this tool.
Your rating (required)
0 / 2000

Please do not include passwords, payment details or other sensitive information.

Your feedback is sent privately to the A2Z.Tools team and will not be posted publicly.