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: StringThe 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: StringThe canonical name of the SDK. e.g. macosx12.3.
default_deployment_target: StringVersion 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: StringHuman friendly name of this SDK.
e.g. macOS 12.3.
maximum_deployment_target: StringMaximum 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: StringHuman 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§
source§impl ParsedSdk
impl ParsedSdk
sourcepub fn from_json(
path: PathBuf,
is_symlink: bool,
platform: Platform,
value: SdkSettingsJson
) -> Result<Self, Error>
pub fn from_json(
path: PathBuf,
is_symlink: bool,
platform: Platform,
value: SdkSettingsJson
) -> Result<Self, Error>
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?
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()))
}
}sourcepub fn from_plist(
path: PathBuf,
is_symlink: bool,
platform: Platform,
value: Value
) -> Result<Self, Error>
pub fn from_plist(
path: PathBuf,
is_symlink: bool,
platform: Platform,
value: Value
) -> Result<Self, Error>
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?
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§
source§impl AppleSdk for ParsedSdk
impl AppleSdk for ParsedSdk
source§fn supports_deployment_target(
&self,
target_name: &str,
target_version: &SdkVersion
) -> Result<bool, Error>
fn supports_deployment_target(
&self,
target_name: &str,
target_version: &SdkVersion
) -> Result<bool, Error>
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.
source§fn from_directory(path: &Path) -> Result<Self, Error>
fn from_directory(path: &Path) -> Result<Self, Error>
source§fn is_symlink(&self) -> bool
fn is_symlink(&self) -> bool
source§fn find_in_directory(root: &Path) -> Result<Vec<Self>, Error>
fn find_in_directory(root: &Path) -> Result<Vec<Self>, Error>
source§fn find_command_line_tools_sdks() -> Result<Option<Vec<Self>>, Error>
fn find_command_line_tools_sdks() -> Result<Option<Vec<Self>>, Error>
source§fn as_sdk_path(&self) -> SdkPath
fn as_sdk_path(&self) -> SdkPath
sdk_path instead