#[repr(C)]pub struct VZMacAuxiliaryStorage { /* private fields */ }
VZMacAuxiliaryStorage
only.Expand description
Mac auxiliary storage.
The Mac auxiliary storage contains data used by the boot loader and the guest operating system. It is necessary to boot a macOS guest OS.
When creating a new virtual machine from scratch, VZMacOSInstaller can use a default initialized auxiliary storage. Use -[VZMacAuxiliaryStorage initCreatingStorageAtURL:hardwareModel:options:error:] to create an empty auxiliary storage.
The hardware model used when creating the new auxiliary storage depends on the restore image that will be used for installation. From the restore image, use VZMacOSRestoreImage.mostFeaturefulSupportedConfiguration to get a supported configuration. A configuration has a VZMacHardwareModel associated with it.
After initializing the new auxiliary storage, set it on VZMacPlatformConfiguration.auxiliaryStorage to use it. The hardware model in VZMacPlatformConfiguration.hardwareModel must be identical to the one used to create the empty auxiliary storage. The behavior is undefined otherwise.
When installing macOS, the VZMacOSInstaller lays out data on the auxiliary storage. After installation, the macOS guest uses the auxiliary storage for every subsequent boot.
When moving or doing a backup of a virtual machine, the file containing the auxiliary storage must also be moved or copied along with the main disk image.
To boot a virtual machine that has already been installed with VZMacOSInstaller, use -[VZMacAuxiliaryStorage initWithContentsOfURL:] to set up the auxiliary storage from the existing file used at installation. When using an existing file, the hardware model of the VZMacPlatformConfiguration must match the hardware model used when the file was created.
See also: VZMacPlatformConfiguration
See also: VZMacOSRestoreImage
See also: VZMacOSConfigurationRequirements
See also: VZMacOSInstaller
See also Apple’s documentation
Implementations§
Source§impl VZMacAuxiliaryStorage
impl VZMacAuxiliaryStorage
pub unsafe fn new() -> Retained<Self>
pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>
Sourcepub unsafe fn initWithURL(this: Allocated<Self>, url: &NSURL) -> Retained<Self>
pub unsafe fn initWithURL(this: Allocated<Self>, url: &NSURL) -> Retained<Self>
Initialize the auxiliary storage from the URL of an existing file.
Parameter URL
: The URL of the auxiliary storage on the local file system.
To create a new auxiliary storage, use -[VZMacAuxiliaryStorage initCreatingStorageAtURL:hardwareModel:options:error].
Sourcepub unsafe fn initCreatingStorageAtURL_hardwareModel_options_error(
this: Allocated<Self>,
url: &NSURL,
hardware_model: &VZMacHardwareModel,
options: VZMacAuxiliaryStorageInitializationOptions,
) -> Result<Retained<Self>, Retained<NSError>>
Available on crate feature VZMacHardwareModel
only.
pub unsafe fn initCreatingStorageAtURL_hardwareModel_options_error( this: Allocated<Self>, url: &NSURL, hardware_model: &VZMacHardwareModel, options: VZMacAuxiliaryStorageInitializationOptions, ) -> Result<Retained<Self>, Retained<NSError>>
VZMacHardwareModel
only.Write an initialized VZMacAuxiliaryStorage to a URL on a file system.
Parameter URL
: The URL to write the auxiliary storage to on the local file system.
Parameter hardwareModel
: The hardware model to use. The auxiliary storage can be laid out differently for different hardware models.
Parameter options
: Initialization options.
Parameter error
: If not nil, used to report errors if creation fails.
Returns: A newly initialized VZMacAuxiliaryStorage on success. If an error was encountered returns
nil,
and
error
contains the error.
Source§impl VZMacAuxiliaryStorage
VZDeprecated.
impl VZMacAuxiliaryStorage
VZDeprecated.
pub unsafe fn initWithContentsOfURL( this: Allocated<Self>, url: &NSURL, ) -> Retained<Self>
Methods from Deref<Target = NSObject>§
Sourcepub fn doesNotRecognizeSelector(&self, sel: Sel) -> !
pub fn doesNotRecognizeSelector(&self, sel: Sel) -> !
Handle messages the object doesn’t recognize.
See Apple’s documentation for details.
Methods from Deref<Target = AnyObject>§
Sourcepub fn class(&self) -> &'static AnyClass
pub fn class(&self) -> &'static AnyClass
Dynamically find the class of this object.
§Panics
May panic if the object is invalid (which may be the case for objects
returned from unavailable init
/new
methods).
§Example
Check that an instance of NSObject
has the precise class NSObject
.
use objc2::ClassType;
use objc2::runtime::NSObject;
let obj = NSObject::new();
assert_eq!(obj.class(), NSObject::class());
Sourcepub unsafe fn get_ivar<T>(&self, name: &str) -> &Twhere
T: Encode,
👎Deprecated: this is difficult to use correctly, use Ivar::load
instead.
pub unsafe fn get_ivar<T>(&self, name: &str) -> &Twhere
T: Encode,
Ivar::load
instead.Use Ivar::load
instead.
§Safety
The object must have an instance variable with the given name, and it
must be of type T
.
See Ivar::load_ptr
for details surrounding this.
Sourcepub fn downcast_ref<T>(&self) -> Option<&T>where
T: DowncastTarget,
pub fn downcast_ref<T>(&self) -> Option<&T>where
T: DowncastTarget,
Attempt to downcast the object to a class of type T
.
This is the reference-variant. Use Retained::downcast
if you want
to convert a retained object to another type.
§Mutable classes
Some classes have immutable and mutable variants, such as NSString
and NSMutableString
.
When some Objective-C API signature says it gives you an immutable class, it generally expects you to not mutate that, even though it may technically be mutable “under the hood”.
So using this method to convert a NSString
to a NSMutableString
,
while not unsound, is generally frowned upon unless you created the
string yourself, or the API explicitly documents the string to be
mutable.
See Apple’s documentation on mutability and on
isKindOfClass:
for more details.
§Generic classes
Objective-C generics are called “lightweight generics”, and that’s because they aren’t exposed in the runtime. This makes it impossible to safely downcast to generic collections, so this is disallowed by this method.
You can, however, safely downcast to generic collections where all the
type-parameters are AnyObject
.
§Panics
This works internally by calling isKindOfClass:
. That means that the
object must have the instance method of that name, and an exception
will be thrown (if CoreFoundation is linked) or the process will abort
if that is not the case. In the vast majority of cases, you don’t need
to worry about this, since both root objects NSObject
and
NSProxy
implement this method.
§Examples
Cast an NSString
back and forth from NSObject
.
use objc2::rc::Retained;
use objc2_foundation::{NSObject, NSString};
let obj: Retained<NSObject> = NSString::new().into_super();
let string = obj.downcast_ref::<NSString>().unwrap();
// Or with `downcast`, if we do not need the object afterwards
let string = obj.downcast::<NSString>().unwrap();
Try (and fail) to cast an NSObject
to an NSString
.
use objc2_foundation::{NSObject, NSString};
let obj = NSObject::new();
assert!(obj.downcast_ref::<NSString>().is_none());
Try to cast to an array of strings.
use objc2_foundation::{NSArray, NSObject, NSString};
let arr = NSArray::from_retained_slice(&[NSObject::new()]);
// This is invalid and doesn't type check.
let arr = arr.downcast_ref::<NSArray<NSString>>();
This fails to compile, since it would require enumerating over the array to ensure that each element is of the desired type, which is a performance pitfall.
Downcast when processing each element instead.
use objc2_foundation::{NSArray, NSObject, NSString};
let arr = NSArray::from_retained_slice(&[NSObject::new()]);
for elem in arr {
if let Some(data) = elem.downcast_ref::<NSString>() {
// handle `data`
}
}
Trait Implementations§
Source§impl AsRef<AnyObject> for VZMacAuxiliaryStorage
impl AsRef<AnyObject> for VZMacAuxiliaryStorage
Source§impl AsRef<NSObject> for VZMacAuxiliaryStorage
impl AsRef<NSObject> for VZMacAuxiliaryStorage
Source§impl Borrow<AnyObject> for VZMacAuxiliaryStorage
impl Borrow<AnyObject> for VZMacAuxiliaryStorage
Source§impl Borrow<NSObject> for VZMacAuxiliaryStorage
impl Borrow<NSObject> for VZMacAuxiliaryStorage
Source§impl ClassType for VZMacAuxiliaryStorage
impl ClassType for VZMacAuxiliaryStorage
Source§const NAME: &'static str = "VZMacAuxiliaryStorage"
const NAME: &'static str = "VZMacAuxiliaryStorage"
Source§type ThreadKind = <<VZMacAuxiliaryStorage as ClassType>::Super as ClassType>::ThreadKind
type ThreadKind = <<VZMacAuxiliaryStorage as ClassType>::Super as ClassType>::ThreadKind
Source§impl Debug for VZMacAuxiliaryStorage
impl Debug for VZMacAuxiliaryStorage
Source§impl Deref for VZMacAuxiliaryStorage
impl Deref for VZMacAuxiliaryStorage
Source§impl Hash for VZMacAuxiliaryStorage
impl Hash for VZMacAuxiliaryStorage
Source§impl Message for VZMacAuxiliaryStorage
impl Message for VZMacAuxiliaryStorage
Source§impl NSObjectProtocol for VZMacAuxiliaryStorage
impl NSObjectProtocol for VZMacAuxiliaryStorage
Source§fn isEqual(&self, other: Option<&AnyObject>) -> bool
fn isEqual(&self, other: Option<&AnyObject>) -> bool
Source§fn hash(&self) -> usize
fn hash(&self) -> usize
Source§fn isKindOfClass(&self, cls: &AnyClass) -> bool
fn isKindOfClass(&self, cls: &AnyClass) -> bool
Source§fn is_kind_of<T>(&self) -> bool
fn is_kind_of<T>(&self) -> bool
isKindOfClass
directly, or cast your objects with AnyObject::downcast_ref