Many developers first encounter the Info.plist file when uploading an IPA.

Especially when packaging iOS on Windows, uploading IPA on Linux CI, or using non-Xcode upload workflows, they often encounter:
Missing Info.plist or Could not find Info.plist

Some articles suggest: manually create the plist, export using Xcode, or use Transporter to auto-generate.

But if your current environment is Windows, these methods are not convenient.

What is Info.plist

It is essentially a metadata file attached when uploading to the App Store.

It contains Apple upload identification information, package structure description, and upload task parameters.

It is not a file required for the application to run.

What to do in a Windows environment

In Xcode, the Archive and Export IPA steps automatically generate the relevant metadata.

But if:

  • Flutter Windows packaging
  • Unity exporting IPA
  • HBuilder cloud packaging
  • React Native CI

The IPA has already been generated, but the upload metadata has not. In this case, the upload tool may report an error.

Common misconception: writing plist manually

Some online solutions suggest:

<?xml version="1.0" encoding="UTF-8"?>

Then manually construct the plist content. The problem is that Apple’s upload fields may change, Transporter versions differ, and metadata structures vary. This often leads to upload failure (metadata validation failed).

A more direct approach: let the upload tool auto-generate

If your goal is simply to upload an IPA to App Store Connect, there is no need to generate the plist yourself.

Using the AppUploader CLI approach, when uploading via command line on Windows, Linux, or Mac, the Info.plist is automatically generated. Therefore, no manual creation, no Xcode, no Transporter GUI needed.

Actual upload workflow on Windows

  1. Prepare the IPA, ensure it is signed, can be installed normally, and the Bundle ID is correct.

  2. Locate appuploader_cli under the runtime/ directory (included in the Windows download package).

  3. Execute the upload command, for example:

appuploader_cli --upload-app -f Payload.ipa -u user@example.com -p xxxx-xxxx-xxxx-xxxx --type ios

Or:

appuploader_cli upload -f Payload.ipa -u user@example.com -p xxxx-xxxx-xxxx-xxxx --type ios

During CLI upload, it automatically analyzes the IPA, including Bundle ID, Version, and Build Number.

It automatically generates upload metadata, including: Info.plist

It automatically calls the upload API.

It directly uploads to App Store Connect.

Command-line approach is more suitable for CI

In a continuous integration environment, it is not convenient to open a GUI or rely on Xcode.

The CLI can be scripted, integrated with Jenkins / GitLab CI, and placed in Docker. CI example:

appuploader_cli upload \
-f build/app.ipa \
-u ci@example.com \
-p xxxx-xxxx-xxxx-xxxx \
--type ios

Easy to overlook: App-Specific Password

When uploading, -p is not the Apple login password. You need to create an App-Specific Password in the Apple ID backend, otherwise upload authentication will fail.

Command parameter explanation

Parameter Description
--upload-app Upload application
-f IPA file path
-u Apple ID
-p App-Specific Password
--type ios iOS package

In a Windows environment, if the upload tool already supports auto-generation, there is no need to manually maintain the plist file.