Struct apple_sdk::ParsedSdk

source ·
pub struct ParsedSdk {
    pub platform_name: String,
    pub name: String,
    pub default_deployment_target: String,
    pub default_variant: Option<String>,
    pub display_name: String,
    pub maximum_deployment_target: String,
    pub minimal_display_name: String,
    pub supported_targets: HashMap<String, SupportedTarget>,
    /* private fields */
}
Expand description

An Apple SDK with parsed settings.

Unlike SimpleSdk, this type gives you access to rich metadata about the Apple SDK. This includes things like targeting capabilities.

Fields§

§platform_name: String

The name of the platform.

This is likely the part before the *.platform in the platform directory in which this SDK is located. e.g. macosx.

§name: String

The canonical name of the SDK. e.g. macosx12.3.

§default_deployment_target: String

Version of the default deployment target for this SDK.

This is likely the OS version the SDK came from. e.g. 12.3.

§default_variant: Option<String>

Name of default settings variant for this SDK.

Some SDKs have named variants defining targeting settings. This field holds the name of the default variant.

For example, macOS SDKs have a macos variant for targeting macOS and an iosmac variant for targeting iOS running on macOS.

§display_name: String

Human friendly name of this SDK.

e.g. macOS 12.3.

§maximum_deployment_target: String

Maximum deployment target version this SDK supports.

This is a very string denoting the maximum version this SDK can target. e.g. a 12.3 would list 12.3.99.

§minimal_display_name: String

Human friendly value for name (probably just version string).

A shortened display name. e.g. 12.3.

§supported_targets: HashMap<String, SupportedTarget>

Describes named target configurations this SDK supports.

SDKs can have multiple named targets defining pre-canned default targeting settings. This field holds these data structures.

Example keys are macosx and iosmac. Use the Self::default_variant field to access the default target.

Implementations§

Construct an instance by parsing an SDKSettings.json file in a directory.

These files are only available in more modern SDKs. For macOS, that’s 10.14+. For more reliably SDK construction, use Self::from_plist().

Examples found in repository?
src/parsed_sdk.rs (line 184)
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
    fn from_directory(path: &Path) -> Result<Self, Error> {
        let sdk = SdkPath::from_path(path)?;

        // Need to call symlink_metadata so symlinks aren't followed.
        let metadata = std::fs::symlink_metadata(path)?;

        let is_symlink = metadata.file_type().is_symlink();

        let json_path = path.join("SDKSettings.json");
        let plist_path = path.join("SDKSettings.plist");

        if json_path.exists() {
            let fh = std::fs::File::open(&json_path)?;
            let value: SdkSettingsJson = serde_json::from_reader(fh)?;

            Self::from_json(path.to_path_buf(), is_symlink, sdk.platform, value)
        } else if plist_path.exists() {
            let value = plist::Value::from_file(&plist_path)?;

            Self::from_plist(path.to_path_buf(), is_symlink, sdk.platform, value)
        } else {
            Err(Error::PathNotSdk(path.to_path_buf()))
        }
    }

Construct an instance by parsing an SDKSettings.plist file in a directory.

Plist files are the legacy mechanism for defining SDK settings. JSON files are preferred, as they are newer. However, older SDKs lack SDKSettings.json files.

Examples found in repository?
src/parsed_sdk.rs (line 188)
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
    fn from_directory(path: &Path) -> Result<Self, Error> {
        let sdk = SdkPath::from_path(path)?;

        // Need to call symlink_metadata so symlinks aren't followed.
        let metadata = std::fs::symlink_metadata(path)?;

        let is_symlink = metadata.file_type().is_symlink();

        let json_path = path.join("SDKSettings.json");
        let plist_path = path.join("SDKSettings.plist");

        if json_path.exists() {
            let fh = std::fs::File::open(&json_path)?;
            let value: SdkSettingsJson = serde_json::from_reader(fh)?;

            Self::from_json(path.to_path_buf(), is_symlink, sdk.platform, value)
        } else if plist_path.exists() {
            let value = plist::Value::from_file(&plist_path)?;

            Self::from_plist(path.to_path_buf(), is_symlink, sdk.platform, value)
        } else {
            Err(Error::PathNotSdk(path.to_path_buf()))
        }
    }

Trait Implementations§

Whether this SDK supports the given deployment target.

This API does not work reliably on SDKs loaded from plists because the plist metadata lacks the required version constraint annotations.

Attempt to construct an instance from a filesystem directory. Read more
Whether this SDK path is a symlink.
The platform this SDK is for.
Obtain the version string for this SDK. Read more
Find Apple SDKs in a specified directory. Read more
Locate SDKs installed as part of the Xcode Command Line Tools. Read more
Obtain an SdkPath represent this SDK.
👎Deprecated since 0.1.1: plase use sdk_path instead
Obtain the filesystem path to this SDK.
Converts this type into a shared reference of the (usually inferred) input type.
Returns a copy of the value. Read more
Performs copy-assignment from source. Read more
Formats the value using the given formatter. Read more
The type returned in the event of a conversion error.
Performs the conversion.

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The resulting type after obtaining ownership.
Creates owned data from borrowed data, usually by cloning. Read more
Uses borrowed data to replace owned data, usually by cloning. Read more
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.