Find file History
Latest commit 3f89b7e Jan 23, 2017 @mgrebenets mgrebenets committed on GitHub Add shellcheck to circle.yml (#7947)
* Add shellcheck to circle.yml

* Run shellcheck for .sh and .bash scripts in the repo

* Disable shellckeck SC2155 and add missing shebangs

* Remove unneeded backticks to avoid executing output

* Fix shellcheck warnings in completion.sh

* Ignore shellcheck SC1090 warning

* Exclude CocoaPods auto-generated shell scripts from shellcheck

* Disable SC2049 and fix array expansion in resign.sh

* Replace use of legacy backticks with $(..)

* Fix SC2086 shellcheck warning (double quote vars)

* Fix use of A && B || C shell code

* Disable shellcheck SC2181 warning

* Disable last 3 shellcheck warnings and add TODOs to fix them properly

* Disable SC2039 for use of source command

* Fix useless cat and use of legacy backticks

* Fix SC2181 in xcbuild-safe.sh

* Fix resigh.sh after rebasing on top of master

README.md


fastlane

deliver β€’ snapshot β€’ frameit β€’ pem β€’ sigh β€’ produce β€’ cert β€’ spaceship β€’ pilot β€’ boarding β€’ gym β€’ scan β€’ match


gym

Twitter: @KauseFx License Gem

Building your app has never been easier

Get in contact with the developer on Twitter: @FastlaneTools


Features β€’ Installation β€’ Usage β€’ Tips β€’ Need help?


gym is part of fastlane: The easiest way to automate beta deployments and releases for your iOS and Android apps.

What's gym?

gym builds and packages iOS and macOS apps for you. It takes care of all the heavy lifting and makes it super easy to generate a signed ipa or app file πŸ’ͺ

gym is a replacement for shenzhen.

Before gym

xcodebuild clean archive -archivePath build/MyApp \
                         -scheme MyApp
xcodebuild -exportArchive \
           -exportFormat ipa \
           -archivePath "build/MyApp.xcarchive" \
           -exportPath "build/MyApp.ipa" \
           -exportProvisioningProfile "ProvisioningProfileName"

With gym

fastlane gym

Why gym?

gym uses the latest APIs to build and sign your application which results in much faster build times.

Gym Features
πŸš€ gym builds 30% faster than other build tools like shenzhen
🏁 Beautiful inline build output
πŸ“– Helps you resolve common build errors like code signing issues
🚠 Sensible defaults: Automatically detect the project, its schemes and more
πŸ”— Works perfectly with fastlane and other tools
πŸ“¦ Automatically generates an ipa and a compressed dSYM file
πŸš„ Don't remember any complicated build commands, just gym
πŸ”§ Easy and dynamic configuration using parameters and environment variables
πŸ’Ύ Store common build settings in a Gymfile
πŸ“€ All archives are stored and accessible in the Xcode Organizer
πŸ’» Supports both iOS and Mac applications

assets/gymScreenshot.png


assets/gym.gif

Installation

sudo gem install fastlane

Make sure, you have the latest version of the Xcode command line tools installed:

xcode-select --install

Usage

fastlane gym

That's all you need to build your application. If you want more control, here are some available parameters:

fastlane gym --workspace "Example.xcworkspace" --scheme "AppName" --clean

If you need to use a different xcode install, use xcode-select or define DEVELOPER_DIR:

DEVELOPER_DIR="/Applications/Xcode6.2.app" gym

For a list of all available parameters use

fastlane gym --help

If you run into any issues, use the verbose mode to get more information

fastlane gym --verbose

Set the right export method if you're not uploading to App Store or TestFlight:

fastlane gym --export_method ad-hoc

To pass boolean parameters make sure to use gym like this:

fastlane gym --include_bitcode true --include_symbols false

To access the raw xcodebuild output open ~/Library/Logs/gym

Gymfile

Since you might want to manually trigger a new build but don't want to specify all the parameters every time, you can store your defaults in a so called Gymfile.

Run fastlane gym init to create a new configuration file. Example:

scheme "Example"

sdk "iphoneos9.0"

clean true

output_directory "./build"    # store the ipa in this folder
output_name "MyApp"           # the name of the ipa file

Export options

Since Xcode 7, gym is using new Xcode API which allows us to specify export options using plist file. By default gym creates this file for you and you are able to modify some parameters by using export_method, export_team_id, include_symbols or include_bitcode. If you want to have more options, like creating manifest file or app thinning, you can provide your own plist file:

export_options "./ExportOptions.plist"

or you can provide hash of values directly in the Gymfile:

export_options(
  method: "ad-hoc",
  manifest: {
    appURL: "https://example.com/My App.ipa",
  },
  thinning: "<thin-for-all-variants>"
)

For the list of available options run xcodebuild -help.

Setup code signing

Automating the whole process

gym works great together with fastlane, which connects all deployment tools into one streamlined workflow.

Using fastlane you can define a configuration like

lane :beta do
  scan
  gym(scheme: "MyApp")
  crashlytics
end

You can then easily switch between the beta provider (e.g. testflight, hockey, s3 and more).

For more information visit the fastlane GitHub page.

How does it work?

gym uses the latest APIs to build and sign your application. The 2 main components are

When you run gym without the --silent mode it will print out every command it executes.

To build the archive gym uses the following command:

set -o pipefail && \
xcodebuild -scheme 'Example' \
-project './Example.xcodeproj' \
-configuration 'Release' \
-destination 'generic/platform=iOS' \
-archivePath '/Users/felixkrause/Library/Developer/Xcode/Archives/2015-08-11/ExampleProductName 2015-08-11 18.15.30.xcarchive' \
archive | xcpretty

After building the archive it is being checked by gym. If it's valid, it gets packaged up and signed into an ipa file.

gym automatically chooses a different packaging method depending on the version of Xcode you're using.

Xcode 7 and above

/usr/bin/xcrun path/to/xcbuild-safe.sh -exportArchive \
-exportOptionsPlist '/tmp/gym_config_1442852529.plist' \
-archivePath '/Users/fkrause/Library/Developer/Xcode/Archives/2015-09-21/App 2015-09-21 09.21.56.xcarchive' \
-exportPath '/tmp/1442852529'

gym makes use of the new Xcode 7 API which allows us to specify the export options using a plist file. You can find more information about the available options by running xcodebuild --help.

Using this method there are no workarounds for WatchKit or Swift required, as it uses the same technique Xcode uses when exporting your binary.

Note: the xcbuild-safe.sh script wraps around xcodebuild to workaround some incompatibilities.

Xcode 6 and below

/usr/bin/xcrun /path/to/PackageApplication4Gym -v \
'/Users/felixkrause/Library/Developer/Xcode/Archives/2015-08-11/ExampleProductName 2015-08-11 18.15.30.xcarchive/Products/Applications/name.app' -o \
'/Users/felixkrause/Library/Developer/Xcode/Archives/2015-08-11/ExampleProductName.ipa' \
--sign "identity" --embed "provProfile"

Note: the official PackageApplication script is replaced by a custom PackageApplication4Gym script. This script is obtained by applying a set of patches on the fly to fix some known issues in the official Xcode PackageApplication script.

Afterwards the ipa file is moved to the output folder. The dSYM file is compressed and moved to the output folder as well.

Tips

fastlane Toolchain

  • fastlane: The easiest way to automate beta deployments and releases for your iOS and Android apps
  • deliver: Upload screenshots, metadata and your app to the App Store
  • snapshot: Automate taking localized screenshots of your iOS app on every device
  • frameit: Quickly put your screenshots into the right device frames
  • pem: Automatically generate and renew your push notification profiles
  • produce: Create new iOS apps on iTunes Connect and Dev Portal using the command line
  • cert: Automatically create and maintain iOS code signing certificates
  • spaceship: Ruby library to access the Apple Dev Center and iTunes Connect
  • pilot: The best way to manage your TestFlight testers and builds from your terminal
  • boarding: The easiest way to invite your TestFlight beta testers
  • scan: The easiest way to run tests of your iOS and Mac app
  • match: Easily sync your certificates and profiles across your team using git
Like this tool? Be the first to know about updates and new fastlane tools

Use the 'Provisioning Quicklook plugin'

Download and install the Provisioning Plugin.

Need help?

Please submit an issue on GitHub and provide information about your setup

Code of Conduct

Help us keep gym open and inclusive. Please read and follow our Code of Conduct.

License

This project is licensed under the terms of the MIT license. See the LICENSE file.

This project and all fastlane tools are in no way affiliated with Apple Inc. This project is open source under the MIT license, which means you have full access to the source code and can modify it to fit your own needs. All fastlane tools run on your own computer or server, so your credentials or other sensitive information will never leave your own computer. You are responsible for how you use fastlane tools.