This guide will help you set up Continuous Deployment for your iOS project.
It will help you set up all needed build tools. I tested everything with a fresh Yosemite installation.
Installation • Setting up • Jenkins • Example Project • Help
If you don't want to use sudo
, you can follow the CocoaPods Guide of a sudo-less installation.
Requirements
- Mac OS 10.9 or newer
- Ruby 2.0 or newer (
ruby -v
) - Xcode
Additionally to an Xcode installation, you also need the Xcode command line tools set up
xcode-select --install
You don't have to use homebrew to install the dependencies. It's the easiest way to get started.
If you don't have homebrew already installed, follow the guide on the bottom of the official page.
Init Homebrew
brew doctor && brew update
brew install makedepend && brew install phantomjs
xctool (optional)
brew install xctool
sudo gem install nokogiri
This can be a pain sometimes, in case you're running into problems, take a look at the official installation guide.
Install the gem and all its dependencies (might take a few minutes)
sudo gem install fastlane
Before changing anything, I recommend commiting everything in git
, in case something goes wrong.
When running the setup commands, please read the instructions shown in the terminal. There is usually a reason they are there.
fastlane
will create all necessary files and folders for you
fastlane init
- Confirm until you get asked for your App Identifier
- Enter the App Identifier (Bundle Identifier) of your project
- Enter your Apple ID: The username, you enter when you login on iTunes Connect
- If you haven't already used
deliver
: - Confirm with
y
to start the setup fordeliver
- If your app is already in the App Store, confirm with
y
to automatically create a configuration for you. If it's not yet in the store, entern
- If you haven't already used
snapshot
: - Confirm with
y
if you want your screenshots to be created automatically - If you want to
sigh
to download, renew or create your provisioning profiles, confirm withy
That's it, you should have received a success message.
What did this setup do?
- Created a
fastlane
folder - Moved existing
deliver
andsnapshot
configuration into thefastlane
folder - Created
fastlane/Appfile
, which stores your Apple ID and Bundle Identifier - Created
fastlane/Fastfile
, which stores your deployment pipelines
The setup automatically detects, which tools you're using (e.g. deliver
, CocoaPods, xctool)
Before running fastlane
, make sure, all tools are correctly set up.
For example, try running the following (depending on what you plan on using):
All those tools have detailed instructions on how to set them up. It's easier to set them up now, than later.
If you want to use snapshot, please follow this step, to authorize snapshot running using fastlane
.
First, think about what different builds you'll need. Some ideas:
- New App Store releases
- Beta Builds for TestFlight or HockeyApp
- Only testing (unit and integration tests)
- In House distribution
Open the fastlane/Fastfile
in your preferred text editor and change the syntax highlighting to Ruby
.
Depending on your existing setup, it looks similar to this (I removed some lines):
before_all do
# increment_build_number
cocoapods
xctool "test"
end
lane :test do
snapshot
end
lane :beta do
snapshot
sigh
deliver :skip_deploy, :beta
# sh "your_script.sh"
end
lane :deploy do
snapshot
sigh
deliver :skip_deploy, :force
# frameit
end
lane :inhouse do
# insert your code here
end
after_all do |lane|
# This block is called, only if the executed lane was successful
end
error do |lane, exception|
# Something bad happened
end
You can already try running it, put a line (say "It works"
) to the :inhouse
lane and run
fastlane inhouse
You should hear your computer speaking to you, which is great!
A list of available actions can be found on the fastlane
project page.
Now it's the time to adapt the Fastfile
to implement your deployment pipeline. You should use increment_build_number
when you want to upload builds to iTunes Connect (Activate incrementing build numbers)
Add as many lanes as you want and test them by running fastlane [lane name] --trace
. I recommend putting the --trace
at the end to get the full stack trace in case something goes wrong.
sh "./script.sh"
This will execute your existing build script. Everything inside the "
will be executed in the shell.
If you want a fancy command (like snapshot
has), you can build your own extension very easily using this guide.
Jenkins Integration
(or any other Continuous Integration system)
Deploying from your own computer isn't cool. You know what's cool? Letting a remote server publish app updates for you.
Everything you did in this guide, was stored in the filesystem in configuration files, which means, you have everything you need in version control. Add
fastlane appstore
as a build step on your server, and you're good to go.
For a more detailed CI-setup, which also shows you test results and the latest screenshots, take a look at the Jenkins Guide.
Tips about when to deploy can be found in the fastlane Jenkins instructions.
Take a look at a project with fastlane
already set up: fastlane-example
- If something is unclear or you need help, submit an issue.
- I'm available for contract work - drop me an email: [email protected]