mirror of
https://github.com/utmapp/UTM.git
synced 2026-10-12 02:24:01 +00:00
236 lines
8.6 KiB
Objective-C
236 lines
8.6 KiB
Objective-C
//
|
|
// Copyright © 2019 osy. All rights reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
|
|
#import <Foundation/Foundation.h>
|
|
#import "UTMVirtualMachineDelegate.h"
|
|
|
|
@class UTMConfigurationWrapper;
|
|
@class UTMLogging;
|
|
@class UTMRegistryEntry;
|
|
@class CSScreenshot;
|
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
/// Abstract interface to a UTM virtual machine
|
|
@interface UTMVirtualMachine : NSObject
|
|
|
|
/// Path where the .utm is stored
|
|
@property (nonatomic, readonly) NSURL *path;
|
|
|
|
/// True if the .utm is loaded outside of the default storage
|
|
///
|
|
/// This property is observable and must only be accessed on the main thread.
|
|
@property (nonatomic) BOOL isShortcut;
|
|
|
|
/// Set by caller to handle VM events
|
|
@property (nonatomic, weak, nullable) id<UTMVirtualMachineDelegate> delegate;
|
|
|
|
/// Configuration for this VM
|
|
///
|
|
/// This property is observable and must only be accessed on the main thread.
|
|
@property (nonatomic, readonly) UTMConfigurationWrapper *config;
|
|
|
|
/// Additional configuration on a short lived, per-host basis
|
|
///
|
|
/// This includes display size, bookmarks to removable drives, etc.
|
|
/// This property is observable and must only be accessed on the main thread.
|
|
@property (nonatomic, readonly) UTMRegistryEntry *registryEntry;
|
|
|
|
/// Current VM state, can observe this property for state changes or use the delegate
|
|
///
|
|
/// This property is observable and must only be accessed on the main thread.
|
|
@property (nonatomic, assign, readonly) UTMVMState state;
|
|
|
|
/// If non-null, is the most recent screenshot image of the running VM
|
|
///
|
|
/// This property is observable and must only be accessed on the main thread.
|
|
@property (nonatomic, readonly, nullable) CSScreenshot *screenshot;
|
|
|
|
/// Display VM as "deleted" for UI elements
|
|
///
|
|
/// This is a workaround for SwiftUI bugs not hiding deleted elements.
|
|
/// This property is observable and must only be accessed on the main thread.
|
|
@property (nonatomic) BOOL isDeleted;
|
|
|
|
/// Display VM as "busy" for UI elements
|
|
///
|
|
/// This is shorthand for checking if the `state` is one of the busy ones.
|
|
/// This property is observable and must only be accessed on the main thread.
|
|
@property (nonatomic, readonly) BOOL isBusy;
|
|
|
|
/// Whether the next start of this VM should have the -snapshot flag set
|
|
///
|
|
/// This will be passed to UTMQemuSystem,
|
|
/// and will be cleared when the VM stops or has an error.
|
|
///
|
|
/// This property is observable and must only be accessed on the main thread.
|
|
@property (nonatomic) BOOL isRunningAsSnapshot;
|
|
|
|
/// Checks if a save state exists
|
|
///
|
|
/// This property is observable and must only be accessed on the main thread.
|
|
@property (nonatomic, readonly) BOOL hasSaveState;
|
|
|
|
/// Checks if a file URL is a .utm bundle
|
|
/// @param url File URL
|
|
+ (BOOL)URLisVirtualMachine:(NSURL *)url NS_SWIFT_NAME(isVirtualMachine(url:));
|
|
|
|
/// Get name of UTM virtual machine from a file
|
|
/// @param url File URL
|
|
+ (NSString *)virtualMachineName:(NSURL *)url;
|
|
|
|
/// Get the path of a UTM virtual machine from a name and parent directory
|
|
/// @param name VM name
|
|
/// @param parent Base directory file URL
|
|
+ (NSURL *)virtualMachinePath:(NSString *)name inParentURL:(NSURL *)parent;
|
|
|
|
/// Create an existing UTM virtual machine from a path
|
|
/// @param url File URL
|
|
+ (nullable UTMVirtualMachine *)virtualMachineWithURL:(NSURL *)url;
|
|
|
|
/// Create a new UTM virtual machine from a configuration
|
|
///
|
|
/// `-saveUTMWithCompletion:` should be called to save to disk.
|
|
/// @param configuration VM configuration
|
|
/// @param packageURL Location of the VM
|
|
+ (UTMVirtualMachine *)virtualMachineWithConfigurationWrapper:(UTMConfigurationWrapper *)configuration packageURL:(NSURL *)packageURL;
|
|
|
|
/// Discard any changes to configuration by reloading from disk
|
|
/// @param err Error thrown
|
|
/// @returns True if successful
|
|
- (BOOL)reloadConfigurationWithError:(NSError * _Nullable *)err;
|
|
|
|
/// Save .utm bundle to disk
|
|
///
|
|
/// This will create a configuration file and any auxiliary data files if needed.
|
|
/// @param completion Handler always will be called on completion
|
|
/// @returns Any error thrown will be non-null passed to the `completion` handler
|
|
- (void)saveUTMWithCompletion:(void (^)(NSError * _Nullable))completion;
|
|
|
|
/// Starts accessing security scoped bookmark for this .utm bundle
|
|
///
|
|
/// Must be called if this UTM VM is a shortcut. Otherwise, this will do nothing.
|
|
/// If called, on `-dealloc`, the security scoped resource will be released.
|
|
/// @param completion Handler always will be called on completion
|
|
/// @returns Any error thrown will be non-null passed to the `completion` handler
|
|
- (void)accessShortcutWithCompletion:(void (^ _Nullable)(NSError * _Nullable))completion;
|
|
|
|
/// Starts the VM
|
|
///
|
|
/// Any error will be passed to the `delegate`
|
|
- (void)requestVmStart;
|
|
|
|
/// Starts the VM
|
|
///
|
|
/// @param completion Handler always will be called on completion
|
|
/// @returns Any error thrown will be non-null passed to the `completion` handler
|
|
- (void)vmStartWithCompletion:(void (^)(NSError * _Nullable))completion;
|
|
|
|
/// Stops the VM
|
|
///
|
|
/// Waits for the VM to acknowledge the stop request before attempting to clean up.
|
|
/// Any error will be passed to the `delegate`
|
|
- (void)requestVmStop;
|
|
|
|
/// Stops the VM
|
|
///
|
|
/// @param completion Handler always will be called on completion
|
|
/// @returns Any error thrown will be non-null passed to the `completion` handler
|
|
- (void)vmStopWithCompletion:(void (^)(NSError * _Nullable))completion;
|
|
|
|
/// Stops the VM without waiting
|
|
///
|
|
/// Any error will be passed to the `delegate`
|
|
/// @param force If true, will not wait for VM to stop before cleanup
|
|
- (void)requestVmStopForce:(BOOL)force NS_SWIFT_NAME(requestVmStop(force:));
|
|
|
|
/// Stops the VM
|
|
///
|
|
/// @param force If true, will not wait for VM to stop before cleanup
|
|
/// @param completion Handler always will be called on completion
|
|
/// @returns Any error thrown will be non-null passed to the `completion` handler
|
|
- (void)vmStopForce:(BOOL)force completion:(void (^)(NSError * _Nullable))completion NS_SWIFT_NAME(vmStop(force:completion:));
|
|
|
|
/// Restarts the VM
|
|
///
|
|
/// Any error will be passed to the `delegate`
|
|
- (void)requestVmReset;
|
|
|
|
/// Restarts the VM
|
|
///
|
|
/// @param completion Handler always will be called on completion
|
|
/// @returns Any error thrown will be non-null passed to the `completion` handler
|
|
- (void)vmResetWithCompletion:(void (^)(NSError * _Nullable))completion;
|
|
|
|
/// Pauses the VM
|
|
///
|
|
/// Any error will be passed to the `delegate`
|
|
/// @param save Save VM state.
|
|
- (void)requestVmPauseSave:(BOOL)save NS_SWIFT_NAME(requestVmPause(save:));
|
|
|
|
/// Pauses the VM
|
|
///
|
|
/// @param save Save VM state.
|
|
/// @param completion Handler always will be called on completion
|
|
/// @returns Any error thrown will be non-null passed to the `completion` handler
|
|
- (void)vmPauseSave:(BOOL)save completion:(void (^)(NSError * _Nullable))completion NS_SWIFT_NAME(vmPause(save:completion:));
|
|
|
|
/// Saves the current VM state
|
|
///
|
|
/// Any error will be passed to the `delegate`
|
|
- (void)requestVmSaveState;
|
|
|
|
/// Saves the current VM state
|
|
///
|
|
/// @param completion Handler always will be called on completion
|
|
/// @returns Any error thrown will be non-null passed to the `completion` handler
|
|
- (void)vmSaveStateWithCompletion:(void (^)(NSError * _Nullable))completion;
|
|
|
|
/// Deletes the saved VM state
|
|
///
|
|
/// Any error will be passed to the `delegate`
|
|
- (void)requestVmDeleteState;
|
|
|
|
/// Deletes the saved VM state
|
|
///
|
|
/// @param completion Handler always will be called on completion
|
|
/// @returns Any error thrown will be non-null passed to the `completion` handler
|
|
- (void)vmDeleteStateWithCompletion:(void (^)(NSError * _Nullable))completion;
|
|
|
|
/// Resumes a paused VM
|
|
///
|
|
/// Any error will be passed to the `delegate`
|
|
- (void)requestVmResume;
|
|
|
|
/// Resumes a paused VM
|
|
///
|
|
/// @param completion Handler always will be called on completion
|
|
/// @returns Any error thrown will be non-null passed to the `completion` handler
|
|
- (void)vmResumeWithCompletion:(void (^)(NSError * _Nullable))completion;
|
|
|
|
/// Sends power off request to the guest
|
|
- (void)requestGuestPowerDown;
|
|
|
|
/// Request power down from the guest
|
|
///
|
|
/// @param completion Handler always will be called on completion
|
|
/// @returns Any error thrown will be non-null passed to the `completion` handler
|
|
- (void)vmGuestPowerDownWithCompletion:(void (^)(NSError * _Nullable))completion;
|
|
|
|
@end
|
|
|
|
NS_ASSUME_NONNULL_END
|