如何使用 Xcode 11 从命令行上传到 App Store?

How to upload to App Store from command line with Xcode 11?

之前,Xcode 10,我们使用 altool 上传到 App Store:

ALTOOL="/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool"
"$ALTOOL" --upload-app --file "$IPA_PATH" --username "$APP_STORE_USERNAME" --password @keychain:"Application Loader: $APP_STORE_USERNAME"

但是对于 Xcode 11,"Application Loader.app" 不再存在,作为 the Xcode 11 changes 的一部分:

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)

那么我们现在如何从命令行上传到 TestFlight 或 App Store?

使用 Xcode 11 作为命令行工具,验证或上传 ipa,将 altool 替换为 xcrun altool:

xcrun altool --validate-app --file "$IPA_PATH" --username "$APP_STORE_USERNAME" --password @keychain:"Application Loader: $APP_STORE_USERNAME"

xcrun altool --upload-app --file "$IPA_PATH" --username "$APP_STORE_USERNAME" --password @keychain:"Application Loader: $APP_STORE_USERNAME"

获取有关 xcrun altool --help 的更多帮助。

使用命令行工具,

xcrun altool --upload-app -f path -u username -p password

如果你的apple账号使用了TWO-FACTOR Authentication,你的密码可能是错误的,你需要去https://appleid.apple.com/account/manage"Security - Generate Password"获取密码

如果你弄错了,你可以添加--verbose来打印详细的错误日志,就像

xcrun altool --upload-app -f path -u username -p password --verbose

并且,通过 xcrun altool --help

获得更多帮助

您现在还可以使用 Apple 的一款名为“Transporter”的新应用 这是 Xcode 应用程序加载器的替代品。

至少从 Xcode 11 开始,这可以作为导出工作流程的一部分,使用 xcodebuild 非常轻松直接地完成。只需创建一个 exportOptions.plist 文件,为 "destination" 键指定 "upload" 并为 "method" 键指定 "app-store"。这是一个示例,但当然可以根据您的需要进行调整:

<?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>compileBitcode</key>
        <true/>
        <key>destination</key>
        <string>upload</string>
        <key>method</key>
        <string>app-store</string>
        <key>provisioningProfiles</key>
        <dict>
                <key>YOUR_BUNDLE_ID</key>
                <string>YOUR_PROFILE_NAME</string>
        </dict>
        <key>signingCertificate</key>
        <string>YOUR_CERT_NAME</string>
        <key>signingStyle</key>
        <string>manual</string>
        <key>stripSwiftSymbols</key>
        <true/>
        <key>teamID</key>
        <string>YOUR_TEAM_ID</string>
        <key>thinning</key>
        <string>&lt;none&gt;</string>
</dict>
</plist>

一旦你有了它,将存档上传到应用程序商店连接的命令就非常简单,使用 xcodebuild exportArchive 命令:

    xcodebuild -exportArchive \
               -archivePath PATH_TO_APP_ARCHIVE \
               -exportPath OUTPUT_PATH \
               -exportOptionsPlist exportOptions.plist

如果您想知道您的 PATH_TO_ARCHIVE 在哪里,首先只需使用 xcodebuild archive 命令,例如:

    xcodebuild -sdk iphoneos \
               -workspace myWorkspace.xcworkspace \
               -scheme myScheme \
               -configuration Release \
               -archivePath PATH_TO_ARCHIVE archive