Browse files

Update objc-build-scripts

  • Loading branch information...
1 parent c03669e commit 94ef093dbe6547d8e5e35fe7888e227bcee116dc @jspahrsummers jspahrsummers committed Nov 11, 2013
Showing with 85 additions and 9 deletions.
  1. +68 −6 script/
  2. +12 −3 script/cibuild
  3. +5 −0 script/xctool.awk
@@ -1,20 +1,82 @@
-These scripts are primarily meant to support the use of
-[Janky]( To use them, read the contents of this
-repository into a `script` folder:
+# objc-build-scripts
+This project is a collection of scripts created with two goals:
+ 1. To standardize how Objective-C projects are bootstrapped after cloning
+ 1. To easily build Objective-C projects on continuous integration servers
+## Scripts
+Right now, there are two important scripts: [`bootstrap`](#bootstrap) and
+[`cibuild`](#cibuild). Both are Bash scripts, to maximize compatibility and
+eliminate pesky system configuration issues (like setting up a working Ruby
+The structure of the scripts on disk is meant to follow that of a typical Ruby
+ bootstrap
+ cibuild
+### bootstrap
+This script is responsible for bootstrapping (initializing) your project after
+it's been checked out. Here, you should install or clone any dependencies that
+are required for a working build and development environment.
+By default, the script will verify that [xctool][] is installed, then initialize
+and update submodules recursively. If any submodules contain `script/bootstrap`,
+that will be run as well.
+To check that other tools are installed, you can set the `REQUIRED_TOOLS`
+environment variable before running `script/bootstrap`, or edit it within the
+script directly. Note that no installation is performed automatically, though
+this can always be added within your specific project.
+### cibuild
+This script is responsible for building the project, as you would want it built
+for continuous integration. This is preferable to putting the logic on the CI
+server itself, since it ensures that any changes are versioned along with the
+By default, the script will run [`bootstrap`](#bootstrap), look for any Xcode
+workspace or project in the working directory, then build all targets/schemes
+(as found by `xcodebuild -list`) using [xctool][].
+You can also specify the schemes to build by passing them into the script:
+script/cibuild ReactiveCocoa-Mac ReactiveCocoa-iOS
+As with the `bootstrap` script, there are several environment variables that can
+be used to customize behavior. They can be set on the command line before
+invoking the script, or the defaults changed within the script directly.
+## Getting Started
+To add the scripts to your project, read the contents of this repository into
+a `script` folder:
$ git remote add objc-build-scripts
$ git fetch objc-build-scripts
$ git read-tree --prefix=script/ -u objc-build-scripts/master
-Then commit the changes to incorporate the scripts into your own repository's
+Then commit the changes, to incorporate the scripts into your own repository's
history. You can also freely tweak the scripts for your specific project's
-To bring in upstream changes later:
+To merge in upstream changes later:
$ git fetch -p objc-build-scripts
-$ git merge -Xsubtree=script objc-build-scripts/master
+$ git merge --ff --squash -Xsubtree=script objc-build-scripts/master
@@ -113,17 +113,26 @@ build_scheme ()
echo "*** Building and testing $scheme..."
- # Determine whether this target needs to be built using the iOS simulator SDK.
local sdkflag=
local action=test
+ # Determine whether we can run unit tests for this target.
run_xctool -scheme "$scheme" run-tests | parse_build
- if [ "$?" -eq "1" ]
+ local awkstatus=$?
+ if [ "$awkstatus" -ne "0" ]
- sdkflag="-sdk iphonesimulator"
+ # Unit tests aren't supported.
+ if [ "$awkstatus" -eq "1" ]
+ then
+ # Build for iOS.
+ sdkflag="-sdk iphonesimulator"
+ fi
run_xctool $sdkflag -scheme "$scheme" $action
@@ -2,6 +2,7 @@
# 0 - No errors found.
# 1 - Wrong SDK. Retry with SDK `iphonesimulator`.
+# 2 - Missing target.
status = 0;
@@ -15,6 +16,10 @@ BEGIN {
status = 1;
+/does not contain a target named/ {
+ status = 2;
exit status;

0 comments on commit 94ef093

Please sign in to comment.