#cargo #iOS

app cargo-lipo

cargo lipo subcommand to automatically create universal libraries for iOS

12 releases (stable)

✓ Uses Rust 2018 edition

3.1.0 Aug 5, 2019
3.0.1 Jan 2, 2019
2.0.0 Nov 19, 2018
2.0.0-beta-3 Jun 18, 2018
0.1.0 Sep 21, 2015

#31 in #cargo

Download history 179/week @ 2019-11-01 130/week @ 2019-11-08 129/week @ 2019-11-15 162/week @ 2019-11-22 133/week @ 2019-11-29 233/week @ 2019-12-06 187/week @ 2019-12-13 100/week @ 2019-12-20 88/week @ 2019-12-27 248/week @ 2020-01-03 223/week @ 2020-01-10 266/week @ 2020-01-17 148/week @ 2020-01-24 282/week @ 2020-01-31 302/week @ 2020-02-07

600 downloads per month


547 lines

cargo lipo Build Status Crates.io

Provides a cargo lipo subcommand which automatically creates a universal library for use with your iOS application.


From anywhere you would usually run cargo you can now run cargo lipo or cargo lipo --release to create a universal library for ios, which can be found in $target/universal/{release|debug}/$lib_name.a.

Make sure you have a library target in your Cargo.toml with a crate type of staticlib:

name = "..."
crate-type = ["staticlib"]

XCode Integration

cargo-lipo easily integrates with XCode. Although note that his functionality has only been added recently and may not yet be perfect (the XCode build process is somewhat of a blackbox to me).

  1. In your "Build Settings" change "Enable Bitcode" to No.

  2. Add a new "Run Script" phase to your "Build Phases". Place it before "Compile Sources". Add something like the following to the script:

    # The $PATH used by XCode likely won't contain Cargo, fix that.
    # This assumes a default `rustup` setup.
    export PATH="$HOME/.cargo/bin:$PATH"
    # --xcode-integ determines --release and --targets from XCode's env vars.
    # Depending your setup, specify the rustup toolchain explicitly.
    cargo-lipo --xcode-integ --manifest-path ../something/Cargo.toml
  3. Build the project once, then update the "Link Binary with Libraries" phase: Click the +, then choose "Add Other...". Navigate to your-cargo-project/target/universal/{debug-or-release} and select your library(s).

  4. Go back to your "Build Settings" and add "Library Search Paths" for "Debug" and "Release", pointing to your-cargo-project/target/universal/{debug-or-release}.


Install cargo lipo with cargo install cargo-lipo. cargo lipo should always be buildable with the latest stable Rust version. For the minimum supported version check .travis.yml.

You also need a rust compiler which can compile for the iOS targets. If you use rustup all you should have to do is

# 64 bit targets (real device & simulator):
rustup target add aarch64-apple-ios x86_64-apple-ios
# 32 bit targets (you probably don't need these):
rustup target add armv7-apple-ios i386-apple-ios


Cargo fails with error: can't find crate for `std` : Your rust compiler most likely does not support cross-compiling to iOS.


Licensed under either of

at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.


~118K SLoC