7 releases (4 breaking)

0.5.2 Dec 22, 2023
0.5.1 Nov 9, 2023
0.4.0 Dec 21, 2022
0.3.0 Dec 18, 2022
0.1.0 May 26, 2022

#144 in Filesystem

Download history 7282/week @ 2024-02-27 8406/week @ 2024-03-05 10195/week @ 2024-03-12 12557/week @ 2024-03-19 12555/week @ 2024-03-26 12479/week @ 2024-04-02 13811/week @ 2024-04-09 12629/week @ 2024-04-16 12170/week @ 2024-04-23 11178/week @ 2024-04-30 8704/week @ 2024-05-07 7515/week @ 2024-05-14 6711/week @ 2024-05-21 6625/week @ 2024-05-28 5918/week @ 2024-06-04 4739/week @ 2024-06-11

24,976 downloads per month
Used in 12 crates (6 directly)


1.5K SLoC


apple-sdk provides facilities for interacting with Apple SDKs.

The canonical home of this project is https://github.com/indygreg/apple-platform-rs.


Interact with Apple SDKs.

Important Concepts

A developer directory is a filesystem tree holding SDKs and tools. If you have Xcode installed, this is likely /Applications/Xcode.app/Contents/Developer.

A platform is a target OS/environment that you build applications for. These typically correspond to *.platform directories under Platforms subdirectory in the developer directory. e.g. /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform.

An SDK holds header files, library stubs, and other files enabling you to compile applications targeting a platform for a supported version range. SDKs usually exist in an SDKs directory under a platform directory. e.g. /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/SDKs/MacOSX12.3.sdk or /Library/Developer/CommandLineTools/SDKs/MacOSX12.3.sdk.

Developer Directories

Developer Directories are modeled via the [DeveloperDirectory] struct. This type contains functions for locating developer directories and resolving the default developer directory to use.

Apple Platforms

We model an abstract Apple platform via the [Platform] enum.

A directory containing an Apple platform is represented by the [PlatformDirectory] struct.

Apple SDKs

We model Apple SDKs using the [SimpleSdk] and [ParsedSdk] types. The latter requires the parse crate feature in order to activate support for parsing JSON and plist files.

Both these types are essentially a reference to a directory. [SimpleSdk] is little more than a reference to a filesystem path. However, [ParsedSdk] parses the SDKSettings.json or SDKSettings.plist file within the SDK and is able to obtain rich metadata about the SDK, such as the names of machine architectures it can target, which OS versions it supports targeting, and more.

Both these types implement the [AppleSdk] trait, which you'll likely want to import in order to use its APIs for searching for and constructing SDKs.

SDK Searching

This crate supports searching for an appropriate SDK to use given search parameters and requirements. This functionality can be used to locate the most appropriate SDK from many available on the current system.

This functionality is exposed through the [SdkSearch] struct. See its documentation for more.

Common Functionality

To locate the default SDK to use, do something like this:

use apple_sdk::{SdkSearch, Platform, SimpleSdk, SdkSorting, AppleSdk};

// This search will honor the `SDKROOT` and `DEVELOPER_DIR` environment variables.
let sdks = SdkSearch::default()
    // Ideally we'd call e.g. `.deployment_target("macosx", "11.0")` to require
    // the SDK to support a specific deployment target. This requires the
    // `ParsedSdk` type, which requires the `parse` crate feature.
    .expect("failed to search for SDKs");

if let Some(sdk) = sdks.first() {
    println!("{}", sdk.sdk_path());


~16K SLoC