Each year, Apple releases updates to its software platforms and development tools, which always comes with a bevy of changes. Xcode 11 came with an extra surprise with the removal of the long standing developer tool Application Loader.
Per the Xcode 11 release notes:
Xcode supports uploading apps from the Organizer window or from the command line with xcodebuild or xcrun altool. Application Loader is no longer included with Xcode. (29008875)
If you write traditional Mac or iOS software in Xcode, you normally submit your apps to the App Store via the Organizer window in Xcode. However, if you build or distribute your software via other methods, then the Xcode Organizer may not be the way you generally upload the software. This is where Application Loader was useful by being able to take an existing app and upload the software to Apple. With that route now absent in the latest release of Xcode, alternative methods are necessary.
If you are not familiar with Application Loader, it was one of the Developer Tools which came bundled with Xcode and could be accessed via the following menu in Xcode:
Xcode > Open Developer Tool > Application Loader .
Application Loader was a companion developer tool that, according to its copyright date, goes as far back as 2002, but the oldest version of Application Loader I could find came with Xcode 3.2, putting it around the same time period that the iOS and Mac App Stores starting up.
Even though Application Loader has been inexplicably retired, there is an alternative solution, the command line tool
altool, which has been available since at least Xcode 6.
altool is a versatile utility which can notarize, verify, or upload an app. Considering that
altool was part of Application Loader before being moved over to the ContentDeliveryServices framework, it can perform the same duties that Application Loader handled. This post will focus on validating and uploading an app. Notarization, a relatively new security measure, will likely be addressed in a future post.
xcrun altool --validate-app -f path/to/application.ipa -t ios -u <firstname.lastname@example.org> -p <appstore_password>
This is the same process as what Xcode uses to validate an app, and it will also return any success or error messages from the validation.
xcrun altool --upload-app -f path/to/application.ipa -t ios -u <email@example.com> -p <appstore_password>
In these examples,
appstore_password is a per-application password you need to create at Apple's website. If you have multiple products, you will need to create a separate password for each app.
xcrun is used to locate and run development tools on the system, which is a useful utility to have, especially in the case of using
altool, since its location has changed between Xcode 10 and Xcode 11. In Xcode 10,
altool was part of the Application Loader app (
/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool), but with Xcode 11, it has been moved to be part of the ContentDeliveryServices.framework (
altool is a command line utility, it can be easily utilized in an automated system, such as with a continuous integration and deployment build process. If you prefer to use Application Loader, make sure to keep a copy of Xcode 10 around, but it is unknown how long that will continue to work, so it is a good idea to eventually migrate your process to using
- Validate and upload your app binary files with altool
- Upload your app binary files with altool
- Xcode 11 Release Notes
- Dev Journal -- Automate notarizing macOS apps
- Customizing the Notarization Workflow
- Rosyna's Tweet About altool
- WWDC 2018 - Your Apps and the Future of macOS security
- How to codesign and notarise your app for macOS 10.14 and higher
- Upload an ipa to testflight using altool
- 5 Tools for Uploading iOS apps to iTunes Connect
- New Fastlane Plugin to Upload iOS binary with altool
- Upload IPA with Application Loader from terminal
- Upload to iTunes Connect using altool
- Xcode 11 and upload IPA file without Application Loader
- How to upload IPA now that Application Loader is no longer included in Xcode 11
- Notarizing Filmulator for macOS 10.15 Catalina (Illustrated)
- Never Ending Notary Nuisance or Infinite Loop at Infinite Loop
- Manage Your Apple Account