CLI for the Apple Dev Center
Note: Cupertino stopped working due to a recent change on the Apple Developer Portal. A maintained alternative is to use spaceship to communicate with Apple's Developer back-end, or use any of the fastlane tools, like match or sigh.
Automate administrative tasks that you would normally have to do through the Apple Dev Center websites. Life's too short to manage device identifiers by hand!
Cupertino is named after Cupertino, CA: home to Apple, Inc.'s world headquarters. It's part of a series of world-class command-line utilities for iOS development, which includes Shenzhen (Building & Distribution), Houston (Push Notifications), Venice (In-App Purchase Receipt Verification), Dubai (Passbook pass generation), and Nashville (iTunes Store API).
Cupertino requires the Xcode Command Line Tools, which can be installed with the following command:
$ xcode-select --install$ gem install cupertino$ ios loginCredentials are saved in the Keychain. You will not be prompted for your username or password by commands while you are logged in. (Mac only)
Alternatively, username and password can also be provided by setting the
IOS_USERNAME and IOS_PASSWORD environment variables respectively.
…$ ios profiles:list
+----------------------------------+--------------+---------+
| Profile | App ID | Status |
+----------------------------------+--------------+---------+
| iOS Team Provisioning Profile: * | ABCDEFG123.* | Valid |
+----------------------------------+--------------+---------+$ ios profiles:manage:devicesOpens an editor with a list of devices, each of which can be commented / uncommented to turn them off / on for that provisioning profile.
# Comment / Uncomment Devices to Turn Off / On for Provisioning Profile
Johnny Appleseed iPad 0123456789012345678901234567890123abcdef
# Johnny Appleseed iPhone abcdef0123456789012345678901234567890123$ ios profiles:devices:add MyApp_Development_Profile "Johnny Appleseed iPad"=0123456789012345678901234567890123abcdef "Johnny Appleseed iPhone"=abcdef0123456789012345678901234567890123Adds (without an editor) a list of devices to a provisioning profile
$ ios profiles:devices:remove MyApp_Development_Profile "Johnny Old iPad"=0123456789012345678901234567890123abcdef "Johnny Old iPhone"=abcdef0123456789012345678901234567890123Removes (without an editor) a list of devices from a provisioning profile
……$ ios app_ids:add "App Bundle Description"=123ABCDEFG.com.mattt.bundle$ ios certificates:list
+------------------+----------------------------------+-----------------+--------+
| Name | Provisioning Profiles | Expiration Date | Status |
+------------------+----------------------------------+-----------------+--------+
| Johnny Appleseed | iOS Team Provisioning Profile: * | Dec 23, 2012 | Issued |
+------------------+----------------------------------+-----------------+--------+$ ios certificates:download
$ ios certificates:download --type distribution
$ ios certificates:download NAMEThe following commands will format their output as comma-separated values when the --format csv argument is passed:
app_ids:listdevices:listprofiles:listprofiles:manage:devices:listloginlogoutdevices:adddevices:listprofiles:listprofiles:manage:devicesprofiles:manage:devices:addprofiles:manage:devices:removeprofiles:downloadprofiles:download:allprofiles:devices:listcertificates:listcertificates:downloadapp_ids:listGlobal options:
-u : Username-p : Password--team : Team Identifier--info : Set log level to INFO--debug : Set log level to DEBUG--format : Output options are table or csvSpecific options for certain commands:
--type : Options are development or distributionCupertino will access the provisioning portal through a proxy if the HTTP_PROXY environment variable is set, with optional credentials HTTP_PROXY_USER and HTTP_PROXY_PASSWORD.
Cupertino is released under an MIT license. See LICENSE for more information.
No open issues yet, or sync has not completed.