Build a great foundation for seamless team work.

I began developing small web projects in 2007 I had just turned twenty-one, looking back now seems like ages ago. Then in February 2008 Apple released the iPhone SDK (now iOS SDK) and my professional life changed. Over the past four years I’ve been part of amazing mobile app projects. I’ve helped built a few gorgeous mobile apps in both the iOS and Android ecosystems, I’ve also been part of amazing teams and I continue to expand my craft in each new projects.

The following six tips have worked for me over the years:

1. Setting Up a Solid Project Foundation

A development team has to always work efficiently, it’s always a good practice to setup the project folder structures in Xcode into four main categories: Cell, Model, ViewControllers, and Utilities. Also, if you decide to use Storyboards, which is a very powerful yet flexible tool that allows quick glance and visual editing in a matter of seconds.

However, large Storyboards can also be expensive to load for your mac. Have your designer help to separate them into multiple Storyboard files, this not only helps Interface Builder to be more responsive, but it also reduces the chances for merge conflicts.

Don’t like Storyboards? Read this great article about Flow Controllers.

2. Package Manager

I’ve previously used submodules, now I have a better solution; CocoaPods. CocoaPods is a package manager that is modeled after RubyGems to manage all sorts of dependancies and 3rd party libraries. Once setup, any team member can add various kinds of frameworks and libraries with a single line of configuration, and CocoaPods is intelligent enough to resolve cross dependancies.

Note: You can easily specify custom repositories with :git and :branch modifiers, and make sure you also include inhibit_all_warnings! to eliminate warning noise that isn’t related to the code base.

3. Feature Branches

When more than one developer is working on the repository, bad conflicts can occur. Encapsulating the implementation in separate feature branch can make everyone happy in their own sandbox. The more experienced team member can then merge back when things are completed. That being said, making sure that each developer understands their own project responsibility is a must to avoid and prevent merging chaos. Team communication is always a key.

4. Using Configurations

Switching between development, staging, and production environments can be boring and error-prone. Using Xcode’s Configurations and Preprocessor Marcos are an excellent way to separate environment specific info.

I have previously set this up for separating configurations on Social Network integration and Analytics Framework app keys.

5. Environment Variables

Additionally, you can also specify a user specific setting for using the Environment Variables by editing the Configurations Scheme. It’s a temporary runtime configuration until you detach your device from the debugger, not only you can specify YES/NO, but any string values that you like to customize, is super handy.

6. Test Cases

Last but not least, it’s also good to use test cases to verify if anyone in the team accidentally broke something. You should look into testing your app.

Here are a few more tips and tricks like using Objective-Clean to add warnings, alternative git branching model, as well as written articles on objc.io. Cheers!