-
-
Notifications
You must be signed in to change notification settings - Fork 483
Description
What is the problem or limitation you are having?
Briefcase has a publish command; however, it is only a stub implementation for macOS and iOS targets.
Apple provides the App Store Connect API, as well as various commands in Xcode to manage the archival and submission process. It should be possible to use these commands to automate submitting an iOS and macOS app to their respective App Stores.
Describe the solution you'd like
briefcase publish macOS -c appstore should automate the process of uploading assets and release configurations to the macOS App Store.
briefcase publish iOS -c appstore should do the same, but for iOS apps.
Describe alternatives you've considered
Continue to require manual App Store submission, potentially removing the publish command.
Additional context
This would be a good follow on from #2687.
Ideally, the submission process would also include creating the full App Store submission, including descriptions, screenshots etc. It's not clear how much of this can be automated, and how much will always require a user to log in and fill in details, but if there's content being provided, the first goal should be to be able to provide that content locally, stored in CI.
It's also not clear if the process will be different for first submission and subsequent submissions.
Some pieces of the puzzle that I know about:
Archiving a project
xcodebuild archive \
-scheme "YourSchemeName" \
-configuration Release \
-archivePath ./build/YourApp.xcarchive \
CODE_SIGN_IDENTITY="Apple Distribution: Your Name (TEAMID)" \
DEVELOPMENT_TEAM="YOURTEAMID"
Exporting an IPA from the archive and upload to the App Store:
xcodebuild -exportArchive \
-archivePath ./build/YourApp.xcarchive \
-exportOptionsPlist ExportOptions.plist \
-exportPath ./build/export
where ExportOptions.plist contains:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>method</key>
<string>app-store</string>
<key>teamID</key>
<string>YOURTEAMID</string>
<key>uploadBitcode</key>
<false/>
<key>uploadSymbols</key>
<true/>
<key>signingStyle</key>
<string>automatic</string>
<key>destination</key>
<string>upload</string
</dict>
</plist>
Fastlane is a tool that provides a pre-wrapped user experience for these commands; it could be considered a competitor to briefcase publish. It could also be considered as an implementation mechanism - however, it is a Ruby-based tool, and only works on macOS.