README.md

Less cumbersome than clicking around in Xcode, and less hassle than rolling your own build script, Shenzhen radically improves the process of getting new builds out to testers and enterprises.

shenzhen is named for 深圳, the Chinese city famous for being the center of manufacturing for a majority of consumer electronics, including iPhones and iPads.
It's part of a series of world-class command-line utilities for iOS development, which includes Cupertino (Apple Dev Center management), Houston (Push Notifications), Venice (In-App Purchase Receipt Verification), Dubai (Passbook pass generation), and Nashville (iTunes Store API).

Installation

$ gem install shenzhen

JSON Build Error

Users running Mac OS X Mavericks with Xcode 5.1 may encounter an error when attempting to install the json gem dependency. As per the Xcode 5.1 Release Notes:

The Apple LLVM compiler in Xcode 5.1 treats unrecognized command-line options as errors. This issue has been seen when building both Python native extensions and Ruby Gems, where some invalid compiler options are currently specified.

To work around this, install the json gem first with the following command:

Crashlytics Beta Distribution

Shenzhen will load credentials from the environment variables CRASHLYTICS_API_TOKEN & CRASHLYTICS_BUILD_SECRET, and attempt to run the submit executable submit in the path to Crashlytics.framework specified by CRASHLYTICS_FRAMEWORK_PATH unless otherwise specified.

iTunes Connect Distribution

Shenzhen will load credentials from the environment variables ITUNES_CONNECT_ACCOUNT and ITUNES_CONNECT_PASSWORD unless otherwise specified. If only an account is provided, the keychain will be searched for a matching entry.

The -i (or --apple-id) flag is "An automatically generated ID assigned to your app". It can be found via iTunes Connect by navigating to:

My Apps -> [App Name] -> More -> About This App -> Apple ID

For a fully hands-free upload, in a CI environment for example, ensure your iTunes Connect credentials are stored in your keychain, and that the keychain item has the Validation app in its 'Always allow access' list. Running Shenzhen once with the --save-keychain flag, and clicking Always Allow on the prompt will set this up for you.

Apps built with Swift are not currently supported by this distribution method. Although initial upload checks may pass, it will eventually fail citing "Invalid Swift Support".