Skip to content

Latest commit

 

History

History
39 lines (22 loc) · 2.4 KB

File metadata and controls

39 lines (22 loc) · 2.4 KB

Development Environment

Xcode

Using the Latest Version

We make a conscious effort to keep our projects on the latest version of Xcode. When new Xcode versions are released every fall, some of our largest projects might take a few months to upgrade, but most of our projects are using the latest version within a matter of days/weeks. During the summer, some projects also become early adopters of the latest beta versions of Xcode

Embracing the Defaults

We prefer to keep our development environment as close to "stock" as possible. This means using the Xcode defaults for most everything, which:

  • Negates the need to manage scripts that setup/configure the development environment.
  • Reduces maintenance resulting from custom settings being blown away by Xcode updates/reinstalls.
  • Ensures developers can contribute with as little friction as possible.

Gitignore

We make use of GitHub's Swift gitignore as the default gitignore for our projects. The only change that we typically make is uncommenting the Pods/ line so that the Pods folder isn't included in source control.

Cocoapods

Many developers naively use the built-in system Ruby to install Cocoapods using the sudo gem install cocoapods command. Unfortunately, this can lead to headaches due to the use of sudo.

The better way to install Cocoapods is to get off the system Ruby and use a Ruby version manager to negate the need for sudo access when installing or executing gems. Follow the instructions in Ruby Environment Setup to install and setup rbenv.

Once your Ruby is properly setup, installing Cocoapods is as simple as:

gem install cocoapods

Fastlane

Fastlane is our main build tool. Again, a Ruby version manager should be used so that a sudo-less installation of Fastlane can be achieved.

Build Servers

As a prerequisite for running our Fastlane scripts, we have custom build scripts that manage keychains, signing certificates, and provisioning profiles for our projects. We store certificates and provisioning profiles in a separate repository from the source code for the project in order to provide an additional layer of security.