Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/facebookarchive/xcbuild

Xcode-compatible build tool.
https://github.com/facebookarchive/xcbuild

Last synced: about 2 months ago
JSON representation

Xcode-compatible build tool.

Lists

README

        



xcbuild

**xcbuild** is an Xcode-compatible build tool with the goal of providing faster builds, better documentation of the build process and running on multiple platforms (macOS, Linux, and Windows)

### Why xcbuild?


Features

Performance

:rocket:Blazing fast incremental buildsxcodebuildxcbuild + Ninja
:book:Documents the Xcode build process
:link:Builds Xcode projects and workspaces
:hatching_chick:Supports Swift apps and frameworksClean Build30.103s25.122s
:sparkles:Tools and libraries for Xcode projects
:gift_heart:Fully compatible with xcpretty
:tophat:Uses Ninja and llbuildIncremental Build2.190s0.046s :zap:
:octocat:Open source under the BSD license
:penguin:Builds on Linux and Windows

### xcbuild and other build tools

[xctool](https://github.com/facebook/xctool) | [Buck](https://github.com/facebook/buck) | [xcpretty](https://github.com/supermarin/xcpretty)
----|----|---
xcbuild and [xctool](https://github.com/facebook/xctool) are both Xcode-compatible build systems. We plan on slowly deprecating xctool's build support but keep it as a great way to run tests. | Facebook's main build system is [Buck](https://buckbuild.com). Buck has a stronger architecture and advanced features like artifact caching while having a much simpler build format. If you have a new project, it's highly recommended. | xcbuild works great with [xcpretty](https://github.com/supermarin/xcpretty). Pipe the output from xcbuild to xcpretty the same way as you would from `xcodebuild`.

## Building xcbuild

[![Build Status](https://travis-ci.org/facebook/xcbuild.svg?branch=master)](https://travis-ci.org/facebook/xcbuild)

### Requirements

#### All platforms

- [CMake](http://www.cmake.org) and [Ninja](https://ninja-build.org/) (or [llbuild](https://github.com/apple/swift-llbuild)) are required to build xcbuild.

On macOS you can install those tools with [Homebrew](https://brew.sh/): `brew install cmake ninja`.

On Windows you can install those tools with [Chocolatey](https://chocolatey.org): `choco install cmake ninja`.

#### Linux

###### Ubuntu 18.04
`sudo apt install libpng-dev libpng16-16 libxml2-dev pkg-config ninja-build`

###### All others
- GCC 4.8 or later. `libpng16-dev`, `zlib1g-dev`, `libxml2-dev`, and `pkg-config` are also required.

#### FreeBSD

###### FreeBSD 12.1
`pkg install png-1.6.37 libxml2-2.9.9 pkgconf-1.6.3,1 ninja-1.9.0,2 gmake-4.2.1_3`

#### OpenBSD

###### OpenBSD 6.6
`pkg_add png-1.6.37 libxml-2.9.9 pkgconf-1.6.3 ninja-1.9.0 gmake-4.2.1p4`

#### macOS
- Xcode 7 or later.

#### Windows
- Visual Studio 2015 or later, on Windows. A `zlib` DLL is also required.

### Instructions

#### All platforms

```sh
git clone --depth=1 https://github.com/facebook/xcbuild
cd xcbuild
git submodule update --init
```
#### Linux and macOS:

```sh
make
```

#### FreeBSD and OpenBSD:

```sh
gmake
```

Build output will be in the `build` directory. Run xcbuild with `./build/xcbuild`.

You can place xcbuild in your `bin` directory to run it from other locations: `mv build/xcbuild /usr/local/bin/`.

#### Windows (experimental):

```sh
cmake -Bbuild -H. -G "Visual Studio 14 2015" -DZLIB_ROOT=
```

Open `build\xcbuild.sln` and build.

## Usage

The command line options are compatible with [xcodebuild](https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/xcodebuild.1.html).

```
xcbuild -workspace Example.xcworkspace -scheme Example
```

### Using Ninja (or llbuild)

To switch to the significantly faster [Ninja](https://ninja-build.org/) executor:

```sh
xcbuild -executor ninja [-workspace Example.xcworkspace ...]
```

Besides the `-executor ninja` parameters, the options are otherwise identical. The Ninja executor is fastest if it can avoid re-generating the Ninja files if the build configuration and input project files do not change.

## Contributing

xcbuild actively welcomes contributions from the community. If you're interested in contributing, be sure to check out the [contributing guide](https://github.com/facebook/xcbuild/blob/master/CONTRIBUTING.md). It includes some tips for getting started in the codebase, as well as important information about the code of conduct, license, and CLA.

## Thanks

xcbuild is built on build system documentation from the community. In particular, thanks to these people for their writing:

- [Samantha Marshall](http://pewpewthespells.com)
- [Damien Bobillot](http://maxao.free.fr/xcode-plugin-interface/)
- [Michele Titolo](http://michele.io)
- [Laurent Etiemble](http://www.monobjc.net/xcode-project-file-format.html)
- [Apple Developer](https://developer.apple.com/legacy/library/documentation/DeveloperTools/Conceptual/XcodeBuildSystem/Xcode_Build_System.pdf)

Third-party licenses are listed in the `LICENSE` document.