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
-
Prepare the IPA, ensure it is signed, can be installed normally, and the Bundle ID is correct.
-
Locate appuploader_cli under the
runtime/directory (included in the Windows download package). -
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.