Add publish implementation for iOS/macOS App Store
- Dominant language
- Python
- Stars
- 3.3k
- Forks
- 549
- Avg merge
- 1d 4h
- Merged PRs (30d)
- 40
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](https://developer.apple.com/documentation/appstoreconnectap), 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:
```
method
app-store
teamID
YOURTEAMID
uploadBitcode
uploadSymbols
signingStyle
automatic
destination
upload
```
[Fastlane](https://docs.fastlane.tools) 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.
Contributor guide
Research direction
Start with the existing macOS and iOS publish stubs and the follow-on work in #2687. Review the Xcode archive/export commands and App Store Connect API described in the issue, then determine the scope for first and subsequent submissions. Done would automate uploading the relevant assets and release configuration for both App Store targets.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- ios, macos, python
- Domain
- mobile-dev, release
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100