How do I submit an iOS app WITHOUT Xcode?

Build your App into an .app file with a "Release" schema:

 xcodebuild -target "${PROJECT_NAME}" -sdk "${TARGET_SDK}" -configuration Release

Package your App as an .ipa:

/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${RELEASE_BUILDDIR}/${APPLICATION_NAME}.app" -o "${BUILD_HISTORY_DIR}/${APPLICATION_NAME}.ipa" --sign "${DEVELOPER_NAME}" --embed "${PROVISONING_PROFILE}”

Then, run Application Loader (Download/Install Application Loader 2.9 if necessary):

open -a /Developer/Applications/Utilities/Application\ Loader.app
  • After it opens select "Next"

    enter image description here

  • Enter your iTunes Connect Apple ID and Password and select "Next"

    enter image description here

  • After your authenticated select "Next"

    enter image description here

  • Select your App and click "Next"

    enter image description here

  • Confirm App compatability

    enter image description here

  • "Choose" the binary file to upload

    enter image description here

  • Select and click "Next"

    enter image description here

  • Start the upload by clicking "Send"

    enter image description here

  • It will will take a few moments to authenticate through the iTunes Store

    enter image description here

  • Once complete, your app package has been uploaded to the iTunes Store. Click "Next"

    enter image description here

  • You are "Done"!

    enter image description here

  • Your App will show a Status of "Upload Received"

    enter image description here


Links:

Apple Doc - Using Application Loader

automating-over-the-air-deployment-for-iphone

How To Upload Your App To iTunes Connect Using Application Loader


Nowadays, Application Loader is deprecated in favor of Apple's Transporter.

  1. Package your App as an .ipa:

    xcodebuild -target "${PROJECT_NAME}" -sdk "${TARGET_SDK}" -configuration Release
    /usr/bin/xcrun -sdk iphoneos PackageApplication -v "${RELEASE_BUILDDIR}/${APPLICATION_NAME}.app" -o "${BUILD_HISTORY_DIR}/${APPLICATION_NAME}.ipa" --sign "${DEVELOPER_NAME}" --embed "${PROVISONING_PROFILE}”
    
  2. Send the .ipa to client.

  3. Use Apple's Transporter to upload the .ipa to App Store Connect without Xcode.

I have accepted chown's answer as the correct one since it is very detailed and led me to the eventual solution, but I wanted to add this bullet-list answer for any future viewers who might want to see things cheat-sheet style.

Building the binary

  • Edit schemes.
  • Set archive scheme to use RELEASE configuration.
  • Make sure code-sign for RELEASE uses client's App-Store profile.
    • Get this the same way you did in Xcode 3.2, you need his profile, certificate and private key.
  • Build ARCHIVE.
  • SHARE archive.
    • DO NOT RE-SIGN!

Send binary to client

(Email or whatever.)

Client uses ApplicationLoader to upload.

Watch out for this Xcode/Newsstand problem

(Go up-vote that Q&A if you ran into the problem and it saved your bacon! :)