Shashikant86.XcodeServer
Xcode Server: Easy Setup for iOS Continuous Integration
=========
This tool helps you set up an iOS Continuous Integration Service on macOS using Apple's Xcode Server. It also creates a local development environment for iOS Developers, providing all necessary tools such as Xcode, Swift, Fastlane, Carthage, Cocoapods, and many Homebrew packages. You can fully customize your environment using variables. Note that you need a pre-downloaded XIP file for Xcode installation.
Requirements
- macOS High Sierra
- Xcode 9 or later
Xcode versions earlier than 9 are not compatible with this tool.
Xcode Installation Guidelines
You can install Xcode using a couple of methods; choose the one that works best for you:
- Xcode XIP in
filesdirectory of your playbook
Put the appropriate xip file in the files/ directory of your playbook or in your home directory ~/Xcode_9.1.xip. Then, set the xcode_src variable to the version of Xcode you want to install.
xcode_src: Xcode_9.1.xip
What’s Included:
This tool installs the following components to set up your iOS Continuous Integration Server:
- Xcode 9+ Installation
- Xcode Server Service
- macOS defaults: Controls system settings and software updates
- Homebrew: A package manager for macOS (optional)
- RVM and custom Ruby versions with pre-installed Gems like bundler, Fastlane, Cocoapods, Xcpretty (optional)
You can modify your own playbook to change default settings and create a custom setup.
Role Variables:
This tool offers numerous variables to help you configure your own playbook. Check defaults/main.yml for all variables. You can override the defaults/main.yml variables for your setup. The main variables to change are:
xcode_src: Xcode_{your_version}.xip
xcode_server_user: {your_xcodeserver_user}
ansible_ssh_user: {your_ansible_ssh_user}
How to Use This Tool:
If you have a new Mac with fresh macOS installed, you can set up your Xcode Server for Continuous Integration by creating a playbook for this role and configuring variables as you need.
Assuming you have Ansible installed, download the tool using this command:
$ ansible-galaxy install Shashikant86.XcodeServer
Next, create your own playbook by setting the necessary variables. You can refer to the defaults/main.yml file here. An example playbook looks like this:
Example Playbook
Create a new directory called XcodeServer and another inside it named files. Place the Xcode XIP in the files directory.
$ mkdir XcodeServer
$ mkdir XcodeServer/files
$ touch XcodeServer/xcs_playbook.yml
Create xcs_playbook.yml inside the XcodeServer directory with the following content:
---
- hosts: localhost
connection: local
vars:
clean_xcode: yes
clean_rvm: yes
clean_homebrew: yes
configure_xcode: yes
configure_xcodeserver: yes
configure_macos_defaults: yes
configure_ruby_rvm: yes
configure_homebrew: yes
xcode_src: Xcode_9.1.xip
xcode_server_user: your_username
ansible_ssh_user: your_username
ruby_version: 2.4.0
rubygems_packages_to_install:
- bundler
- xcpretty
macos_sleep_options:
- systemsetup -setsleep Never
- systemsetup -setharddisksleep Never
- systemsetup -setcomputersleep Never
macos_animation_options:
- defaults write NSGlobalDomain NSAutomaticWindowAnimationsEnabled -bool false
- defaults write NSGlobalDomain NSWindowResizeTime -float 0.001
- defaults write com.apple.dock expose-animation-duration -int 0
- defaults write com.apple.dock launchanim -bool false
macos_software_autoupdates:
- softwareupdate --schedule off
homebrew_use_brewfile: true
homebrew_brewfile_dir: '~'
homebrew_repo: https://github.com/Homebrew/brew
homebrew_prefix: /usr/local
homebrew_install_path: "{{ homebrew_prefix }}/Homebrew"
homebrew_brew_bin_path: /usr/local/bin
homebrew_upgrade_all_packages: no
homebrew_installed_packages:
- autoconf
- bash-completion
- git
- carthage
- gpg
- boost
- cmake
- ssh-copy-id
- openssl
- wget
- curl
homebrew_taps:
- homebrew/core
- caskroom/cask
- homebrew/binary
- homebrew/dupes
- homebrew/versions
homebrew_cask_apps:
- postman
roles:
- Shashikant86.XcodeServer
Replace ansible_ssh_user and xcode_server_user with your username and set other variables as needed. Now run your playbook:
$ ansible-playbook xcs_playbook.yml
Watch as your Mac Mini servers are set up for iOS Continuous Integration.
Setting Up Continuous Integration with Travis
You can test this role on TravisCI by skipping the Xcode configuration, as TravisCI has its own Xcode images. Test everything else on TravisCI. You can view the TravisCI setup in the .travis.yml file and playbook/config in the tests directory. Check the TravisCI output here.
Dependencies
None
License
MIT
Author Information
Shashikant Jagtap
Xcode Server Setup macOS for Continuous Integration using Apple Xcode Server
ansible-galaxy install Shashikant86.XcodeServer