#build-script #ios #cargo-build #shell #xcode #compiling #logging

build cargo-xcode-build-rs

Build script for XCode when compiling rust for iOS

4 releases

0.2.3 Jun 27, 2024
0.2.2 Jun 26, 2024
0.2.1 Jun 24, 2024
0.2.0 Jun 24, 2024

#189 in Build Utils

MIT/Apache

58KB
436 lines

Cargo xcode-build-rs

A 100% Rust wrapper around the iOS XCode build script found in the bevy examples.

Benefits of using a Rust script over a shell script (or nushell):

  • Can be updated since the binary is distributed using crates.io
  • Allows for global collaboration, e.g. I find a case where I need to sudo xcode-select --install and that suggestion can be added to the error message for everyone to benefit from
  • Can handle more complex logic and using libraries easier, e.g. checks that the cc compiler is on $PATH
  • Logs everything using human-understandable logs (rather than set -exu)

Installation

cargo install cargo-xcode-build-rs

This is how I used it in my XCode project, which was copied from the bevy mobile example: https://github.com/ActuallyHappening/YMap/blob/master/crates/cargo_xcode_build_rs/docs/xcode-usage.png Example usage using XCode

Usage

Use cargo xcode-build-rs --manifest-dir . xcode in the actual xcode script. Use cargo xcode-build-rs --manifest-dir . --colour test to begin a test iOS simulator build, which shouldn't be necessary normally.

Configuration

To compiles projects for iOS with special Cargo features enabled, add a package.metadata.xcode-build-rs section to your Cargo.toml file. For example:

[package.metadata.xcode-build-rs.ios]
## As an example, when set to true enabled default features
## which is already the default.
## Set to false to disable default features
## See Cargo's docs: https://doc.rust-lang.org/cargo/reference/features.html#dependency-features
default-features = true
## What features to enable
features = ["ios"]
## Extra flags to pass to `cargo rustc`
extra_flags = ["--cfg", "winit_ignore_noise_logs_unstable"]

Help message cargo xcode-build-rs --help

Build script for XCode when compiling rust for iOS

Usage: cargo xcode-build-rs [OPTIONS] --manifest-dir <MANIFEST_DIR> <COMMAND>

Commands:
  xcode  Run in XCode
  test   Run a test build for an iOS simulator
  help   Print this message or the help of the given subcommand(s)

Options:
      --colour                       By default, doesn't display colour because this can be annoying in the XCode terminal
      --manifest-dir <MANIFEST_DIR>  The --manifest-path option to pass to `cargo rustc builds`. Often you can pass `.`
  -h, --help                         Print help
  -V, --version                      Print version

Acknowledgements

Based on the bevy mobile example script build_rust_deps.sh here. That script is also based on the mozilla script here

Developing

git clone https://github.com/ActuallyHappening/YMap.git cd crates/xcode_build_rs cargo is to install this locally on your system. cargo rt to run the CLI in test mode locally on your system.

Dependencies

~12–24MB
~345K SLoC