7 个版本 (4 个重大更改)

0.5.2 2023年12月22日
0.5.1 2023年11月9日
0.4.0 2022年12月21日
0.3.0 2022年12月18日
0.1.0 2022年5月26日

#138 in 文件系统

Download history 10646/week @ 2024-03-14 12988/week @ 2024-03-21 12677/week @ 2024-03-28 13541/week @ 2024-04-04 12789/week @ 2024-04-11 12220/week @ 2024-04-18 11883/week @ 2024-04-25 10615/week @ 2024-05-02 8344/week @ 2024-05-09 7368/week @ 2024-05-16 6573/week @ 2024-05-23 6603/week @ 2024-05-30 5349/week @ 2024-06-06 5834/week @ 2024-06-13 5634/week @ 2024-06-20 4935/week @ 2024-06-27

22,704 每月下载量
用于 12 个 Crates (6 个直接使用)

MIT/Apache

90KB
1.5K SLoC

apple-sdk

apple-sdk 提供了与 Apple SDK 交互的设施。

此项目的标准主页是 https://github.com/indygreg/apple-platform-rs


lib.rs:

与 Apple SDK 交互。

重要概念

开发者目录 是包含 SDK 和工具的文件系统树。如果您已安装 Xcode,则这可能是 /Applications/Xcode.app/Contents/Developer

平台 是您为构建应用程序的目标操作系统/环境。这些通常对应于 开发者目录 下的 Platforms 子目录中的 *.platform 目录。例如 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform

SDK 包含头文件、库存根和其他文件,使您能够为支持的版本范围针对 平台 编译应用程序。SDK 通常存在于 平台 目录下的 SDKs 目录中。例如 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/SDKs/MacOSX12.3.sdk/Library/Developer/CommandLineTools/SDKs/MacOSX12.3.sdk

开发者目录

开发者目录通过 [DeveloperDirectory] 结构体进行建模。此类型包含用于定位开发者目录和解析要使用的默认开发者目录的函数。

Apple 平台

我们通过 [Platform] 枚举对抽象 Apple 平台进行建模。

包含 Apple 平台的目录由 [PlatformDirectory] 结构体表示。

Apple SDK

我们使用 [SimpleSdk] 和 [ParsedSdk] 类型对 Apple SDK 进行建模。后者需要 parse crate 功能才能激活对解析 JSON 和 plist 文件的支持。

这两个类型本质上是对目录的引用。[SimpleSdk] 仅仅是文件系统路径的引用。然而,[ParsedSdk] 解析 SDK 中的 SDKSettings.jsonSDKSettings.plist 文件,并能够获取有关 SDK 的丰富元数据,例如它可以针对的机器架构名称、它支持针对的目标操作系统版本等。

这两种类型都实现了[AppleSdk]特性,您可能需要导入它以使用其API来搜索和构建SDK。

SDK搜索

此包支持根据搜索参数和需求搜索适当的SDK。此功能可以用于从当前系统上可用的众多SDK中找到最合适的SDK。

此功能通过[SdkSearch]结构体公开。请参阅其文档以获取更多信息。

常用功能

要定位要使用的默认SDK,可以这样做

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

// This search will honor the `SDKROOT` and `DEVELOPER_DIR` environment variables.
let sdks = SdkSearch::default()
    .platform(Platform::MacOsX)
    // 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.
    .sorting(SdkSorting::VersionDescending)
    .search::<SimpleSdk>()
    .expect("failed to search for SDKs");

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

依赖项

~0–0.8MB
~16K SLoC