To automate distributing a Unreal Engine 5.3.2 build to test flight, you can do the following. There may be other ways but this is the only way I got it working now.
-
Build the xarchive with something like:
RunUAT.command BuildCookRun -platform=IOS -project=ProjectName.uproject -clientConfiguration=Shipping -build -cook -stage -pak -package -distribution -archive
-
At this point, you have a
ProjectName.xcarchive
archive. Now is your chance to go into the archive and poke the plist file with your custom versions etc. I did it with a script something like this. Call the script with:./UpdateProjectVersion.command "0.0.1"
#!/bin/bash
if [ -z "$1" ]; then
echo "Usage: $0 <version_number>"
exit 1
fi
VERSION="$1"
pushd /ProjectName/Root/Folder
#Note, we assume we only have one xcarchive in this folder. Make sure to clean up
for file in *.xcarchive; do
mv "$file" "ProjectName.xcarchive"
break # Only rename the first one found
done
PLIST="ProjectName.xcarchive/Products/Applications/ProjectName.app/Info.plist"
if [ -f "$PLIST" ]; then
# Using awk to insert lines after the first occurrence of <dict>
awk -v ver="$VERSION" '/<dict>/{print;print "<key>CFBundleVersion</key>\n<string>"ver"</string>";next}1' "$PLIST" > temp.plist && mv temp.plist "$PLIST"
else
echo "Info.plist not found."
exit 1
fi
popd
-
Now you need to get a good
ExportOptions.plist
file. I suggest you make an ad-hoc distribution with xcode and grab the file that is output in the same directory as the ipa. -
Create an ipa.
xcodebuild -exportArchive -archivePath ProjectName.xcarchive -exportOptionsPlist ExportOptions.plist -exportPath .
This will create the ipa in the current directory. -
Validate the ipa
xcrun altool --validate-app -f ProjectName.ipa -t ios --apiKey APPSTORE_API_KEY_ID --apiIssuer APPSTORE_ISSUER_ID
-
Upload the ipa
xcrun altool --upload-app -f ProjectName.ipa -t ios --apiKey APPSTORE_API_KEY_ID --apiIssuer APPSTORE_ISSUER_ID
Note: Last two steps assume you have your app store key file in ~/.private_keys
or one of the other valid search paths.