We created the iOS Xcode Starter Project to make it quick and easy to start a new iPhone or iPad app. Our goal was to create a template to save the hours of effort it takes on a new project configuring essential open source libraries, the unit and functional testing environments, analytics, multiple targets, multiple app IDs (for development and production), and so on.
Starting a new project with the iOS Xcode Starter Project couldn’t be easier:
> bash -e <(curl -Lo- http://bit.ly/ios-starter-project)
Application Name? ...
Here are some of the features of the iOS Xcode Starter Project:
- ARC enabled with Storyboards
- Universal app to support both iPhone and iPad (but easy to disable one or the other)
- A sensible Xcode .gitignore file that works well for multi-person teams
- Libraries are included as git submodules so you can pull in the latest versions
- AnalyticsKit to support optional integration of analytics providers like TestFlight, Flurry, Apsalar, Localytics, etc… Only the TestFlight SDK is included by default.
- Specta, Expecta, and OCMock to support TDD and BDD style iOS Development with mock objects
- Example test/spec files to show you how to get started testing
- Seperate unit test and functional test targets. For example, you may have unit tests which mock web services to verify the client behavior, and functional tests that verify the web services are up and working correctly.
- MagicalRecord which makes working with Core Data enjoyable
- Development, Debug, and Release configurations (with support for multiple app IDs) so you can install both the development and release versions of the app on your devices side by side
- An NSURLCache configured with sensible memory defaults
- Code that triggers periodic memory warnings in the simulator to help identify potential memory management issues in development
- A customized user agent string for UIWebViews
- An app delegate method to enable and disable the network activity indicator that counts the number of callers so it doesn’t become disabled until the last caller disables it
We’d love to hear if this template is useful, so please post a comment if you use it for your project. And of course, please feel free to fork it, improve it, and send us pull requests with your enhancements!