├── macOS Virtual Machine
├── Assets.xcassets
│ ├── Contents.json
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ └── AppIcon.appiconset
│ │ └── Contents.json
├── VirtualMac2,1.ipsw
├── AppDelegate.swift
├── macOS Virtual Machine.entitlements
├── ViewController.swift
└── Base.lproj
│ └── Main.storyboard
├── .gitignore
├── README.md
└── macOS Virtual Machine.xcodeproj
└── project.pbxproj
/macOS Virtual Machine/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/macOS Virtual Machine/VirtualMac2,1.ipsw:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ming900518/macOS-Virtual-Machine/HEAD/macOS Virtual Machine/VirtualMac2,1.ipsw
--------------------------------------------------------------------------------
/macOS Virtual Machine/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/macOS Virtual Machine/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // macOS Virtual Machine
4 | //
5 | // Created by Ming Chang on 6/29/21.
6 | //
7 |
8 | import Cocoa
9 |
10 | @main
11 | class AppDelegate: NSObject, NSApplicationDelegate {
12 |
13 |
14 |
15 |
16 | func applicationDidFinishLaunching(_ aNotification: Notification) {
17 | // Insert code here to initialize your application
18 | }
19 |
20 | func applicationWillTerminate(_ aNotification: Notification) {
21 | // Insert code here to tear down your application
22 | }
23 |
24 | func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool {
25 | return true
26 | }
27 |
28 |
29 | }
30 |
31 |
--------------------------------------------------------------------------------
/macOS Virtual Machine/macOS Virtual Machine.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 | com.apple.security.device.audio-input
8 |
9 | com.apple.security.device.bluetooth
10 |
11 | com.apple.security.device.camera
12 |
13 | com.apple.security.device.usb
14 |
15 | com.apple.security.files.downloads.read-write
16 |
17 | com.apple.security.files.user-selected.read-write
18 |
19 | com.apple.security.network.client
20 |
21 | com.apple.security.network.server
22 |
23 | com.apple.security.print
24 |
25 | com.apple.security.virtualization
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/macOS Virtual Machine/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "mac",
5 | "scale" : "1x",
6 | "size" : "16x16"
7 | },
8 | {
9 | "idiom" : "mac",
10 | "scale" : "2x",
11 | "size" : "16x16"
12 | },
13 | {
14 | "idiom" : "mac",
15 | "scale" : "1x",
16 | "size" : "32x32"
17 | },
18 | {
19 | "idiom" : "mac",
20 | "scale" : "2x",
21 | "size" : "32x32"
22 | },
23 | {
24 | "idiom" : "mac",
25 | "scale" : "1x",
26 | "size" : "128x128"
27 | },
28 | {
29 | "idiom" : "mac",
30 | "scale" : "2x",
31 | "size" : "128x128"
32 | },
33 | {
34 | "idiom" : "mac",
35 | "scale" : "1x",
36 | "size" : "256x256"
37 | },
38 | {
39 | "idiom" : "mac",
40 | "scale" : "2x",
41 | "size" : "256x256"
42 | },
43 | {
44 | "idiom" : "mac",
45 | "scale" : "1x",
46 | "size" : "512x512"
47 | },
48 | {
49 | "idiom" : "mac",
50 | "scale" : "2x",
51 | "size" : "512x512"
52 | }
53 | ],
54 | "info" : {
55 | "author" : "xcode",
56 | "version" : 1
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Created by https://www.toptal.com/developers/gitignore/api/macos,xcode
3 | # Edit at https://www.toptal.com/developers/gitignore?templates=macos,xcode
4 |
5 | ### macOS ###
6 | # General
7 | .DS_Store
8 | .AppleDouble
9 | .LSOverride
10 |
11 | # Icon must end with two \r
12 | Icon
13 |
14 |
15 | # Thumbnails
16 | ._*
17 |
18 | # Files that might appear in the root of a volume
19 | .DocumentRevisions-V100
20 | .fseventsd
21 | .Spotlight-V100
22 | .TemporaryItems
23 | .Trashes
24 | .VolumeIcon.icns
25 | .com.apple.timemachine.donotpresent
26 |
27 | # Directories potentially created on remote AFP share
28 | .AppleDB
29 | .AppleDesktop
30 | Network Trash Folder
31 | Temporary Items
32 | .apdisk
33 |
34 | ### Xcode ###
35 | # Xcode
36 | #
37 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
38 |
39 | ## User settings
40 | xcuserdata/
41 |
42 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
43 | *.xcscmblueprint
44 | *.xccheckout
45 |
46 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
47 | build/
48 | DerivedData/
49 | *.moved-aside
50 | *.pbxuser
51 | !default.pbxuser
52 | *.mode1v3
53 | !default.mode1v3
54 | *.mode2v3
55 | !default.mode2v3
56 | *.perspectivev3
57 | !default.perspectivev3
58 |
59 | ## Gcc Patch
60 | /*.gcno
61 |
62 | ### Xcode Patch ###
63 | *.xcodeproj/*
64 | !*.xcodeproj/project.pbxproj
65 | !*.xcodeproj/xcshareddata/
66 | !*.xcworkspace/contents.xcworkspacedata
67 | **/xcshareddata/WorkspaceSettings.xcsettings
68 |
69 | # End of https://www.toptal.com/developers/gitignore/api/macos,xcode
70 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # macOS Virtual Machine
2 |
3 |
4 |
5 | Use [VirtualApple edited by me](https://github.com/ming900518/VirtualApple), [VirtualApple](https://github.com/saagarjha/VirtualApple) or [MacVM](https://github.com/KhaosT/MacVM) instead if you want a much stable experience.
6 |
7 |
8 |
9 | A ARM macOS Virtual Machine, using macOS 12's new Virtualization framework.
10 | I copied KhaosT's code from [here](https://gist.github.com/KhaosT/fb0499130bbfcb5754d2174e78cb68b9), all I did is change some path, add some entitlements and add a simple GUI.
11 |
12 |
13 |
14 |
15 |
16 | ### Requirements
17 | - Apple Silicon Mac (running macOS 12)
18 | - Xcode 13
19 | - Apple Configurator 2
20 | - macOS 12 IPSW
21 | - a empty dmg image (This will be your system storage, name it disk.dmg, you can create it from Disk Utility)
22 |
23 | ### First Time Setup
24 |
25 | 1. Clone this project
26 | 2. Run (This project works on my Mac but might not run on yours)
27 | 3. Quit the app when "Virtual Machine" window showed up, move disk.dmg into the app's container
28 | 4. Run it again
29 | 5. Open Apple Configurator 2, if everything works, There should have a VirtualMac in DFU mode
30 | 6. Temporary disable macOS Firewall and iCloud Private Relay (Apple Configurator 2 can't restore VM with those features enabled)
31 | 7. Drag macOS 12 IPSW file into Apple Configurator 2, click Restore to install macOS
32 | 8. When it's done, you should see a purple window greeting to you. Bon Appétit!
33 |
34 | ### It's not working / Apple Configurator 2 keeps failing!
35 |
36 | Try removing aux.img in the app's container, restart the app and using "Start Virtual Machine Manually" function in the menu bar before restoring.
37 |
38 | Special thanks to [KhaosT](https://github.com/KhaosT), his code make this possible, here is the [project](https://github.com/KhaosT/MacVM) made by him, provides better GUI.
39 |
--------------------------------------------------------------------------------
/macOS Virtual Machine/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // macOS Virtual Machine
4 | //
5 | // Created by Khaos Tian on 6/8/21.
6 | // Modified by Ming Chang on 6/29/21.
7 | //
8 |
9 | import Cocoa
10 | import Virtualization
11 |
12 | class ViewController: NSViewController, VZVirtualMachineDelegate {
13 |
14 | private var virtualMachine: VZVirtualMachine?
15 |
16 | override func loadView() {
17 | let view = VZVirtualMachineView()
18 | view.capturesSystemKeys = true
19 | self.view = view
20 | }
21 |
22 | override func viewDidLoad() {
23 | startVM()
24 | }
25 |
26 | @IBAction func didTapStartVM(_ sender: Any) {
27 | startVM()
28 | }
29 |
30 | private func startVM() {
31 | let restoreImageURL = URL(fileURLWithPath: Bundle.main.path(forResource: "VirtualMac2,1", ofType: "ipsw")!)
32 | VZMacOSRestoreImage.load(from: restoreImageURL) { result in
33 | switch result {
34 | case .success(let image):
35 | DispatchQueue.main.async {
36 | self.setupVM(with: image)
37 | }
38 | case .failure(let error):
39 | NSLog("Error: \(error)")
40 | }
41 | }
42 | }
43 |
44 | private func setupVM(with image: VZMacOSRestoreImage) {
45 | guard let supportedConfig = image.mostFeaturefulSupportedConfiguration else {
46 | NSLog("No supported config")
47 | return
48 | }
49 |
50 |
51 | let bootloader = VZMacOSBootLoader()
52 | let entropy = VZVirtioEntropyDeviceConfiguration()
53 | let networkDevice = VZVirtioNetworkDeviceConfiguration()
54 | networkDevice.attachment = VZNATNetworkDeviceAttachment()
55 |
56 | guard let mainScreen = NSScreen.main else {
57 | assertionFailure()
58 | return
59 | }
60 | let mainScreenWidth = Int(mainScreen.frame.size.width) * 2
61 | let mainScreenHeight = Int(mainScreen.frame.size.height) * 2
62 |
63 | let graphics = VZMacGraphicsDeviceConfiguration()
64 | graphics.displays = [
65 | VZMacGraphicsDisplayConfiguration(
66 | widthInPixels: mainScreenWidth,
67 | heightInPixels: mainScreenHeight,
68 | pixelsPerInch: 220
69 | )
70 | ]
71 |
72 | let keyboard = VZUSBKeyboardConfiguration()
73 | let pointingDevice = VZUSBScreenCoordinatePointingDeviceConfiguration()
74 |
75 | var storages: [VZStorageDeviceConfiguration] = []
76 | do {
77 | let attachment = try VZDiskImageStorageDeviceAttachment(
78 | url: URL(fileURLWithPath: "\(NSHomeDirectory())/disk.dmg"),
79 | readOnly: false
80 | )
81 |
82 | let storage = VZVirtioBlockDeviceConfiguration(attachment: attachment)
83 | storages.append(storage)
84 | } catch {
85 | NSLog("Storage Error: \(error)")
86 | }
87 |
88 |
89 | let configuration = VZVirtualMachineConfiguration()
90 | configuration.bootLoader = bootloader
91 |
92 | let platform = VZMacPlatformConfiguration()
93 | platform.hardwareModel = supportedConfig.hardwareModel
94 |
95 | if let machineID = UserDefaults.standard.object(forKey: "machine_id") as? Data {
96 | if let identifier = VZMacMachineIdentifier(dataRepresentation: machineID) {
97 | platform.machineIdentifier = identifier
98 | } else {
99 | NSLog("Failed to recreate machine id")
100 | }
101 | } else {
102 | UserDefaults.standard.set(
103 | platform.machineIdentifier.dataRepresentation,
104 | forKey: "machine_id"
105 | )
106 | }
107 |
108 | if FileManager.default.fileExists(atPath: "\(NSHomeDirectory())/aux.img") {
109 | platform.auxiliaryStorage = VZMacAuxiliaryStorage(
110 | contentsOf: URL(fileURLWithPath: "\(NSHomeDirectory())/aux.img")
111 | )
112 | } else {
113 | platform.auxiliaryStorage = try? VZMacAuxiliaryStorage(
114 | creatingStorageAt: URL(fileURLWithPath: "\(NSHomeDirectory())/aux.img"),
115 | hardwareModel: platform.hardwareModel,
116 | options: []
117 | )
118 | }
119 | configuration.platform = platform
120 |
121 | configuration.cpuCount = 8
122 | configuration.memorySize = 8 * 1024 * 1024 * 1024
123 | configuration.entropyDevices = [entropy]
124 | configuration.networkDevices = [networkDevice]
125 | configuration.graphicsDevices = [graphics]
126 | configuration.keyboards = [keyboard]
127 | configuration.pointingDevices = [pointingDevice]
128 | configuration.storageDevices = storages
129 |
130 | do {
131 | try configuration.validate()
132 |
133 | let vm = VZVirtualMachine(configuration: configuration, queue: .main)
134 | vm.delegate = self
135 |
136 | if let view = view as? VZVirtualMachineView {
137 | view.virtualMachine = vm
138 | }
139 |
140 | vm.start { result in
141 | switch result {
142 | case .success:
143 | NSLog("Virtual Machine Started.")
144 | case .failure(let error):
145 | NSLog("Error: \(error)")
146 | }
147 | }
148 | self.virtualMachine = vm
149 | } catch {
150 | NSLog("Error: \(error)")
151 | }
152 | }
153 |
154 | func guestDidStop(_ virtualMachine: VZVirtualMachine) {
155 | exit(0)
156 | }
157 |
158 | func virtualMachine(_ virtualMachine: VZVirtualMachine, didStopWithError error: Error) {
159 | NSLog("Stop with Error: \(error)")
160 | }
161 | }
162 |
163 |
--------------------------------------------------------------------------------
/macOS Virtual Machine/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
--------------------------------------------------------------------------------
/macOS Virtual Machine.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 55;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 7A12DA58268C0A4400A75D28 /* VirtualMac2,1.ipsw in Resources */ = {isa = PBXBuildFile; fileRef = 7A12DA57268C0A4400A75D28 /* VirtualMac2,1.ipsw */; };
11 | 7AF9F9F3268B03C0008F58AE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AF9F9F2268B03C0008F58AE /* AppDelegate.swift */; };
12 | 7AF9F9F5268B03C0008F58AE /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AF9F9F4268B03C0008F58AE /* ViewController.swift */; };
13 | 7AF9F9F7268B03C1008F58AE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7AF9F9F6268B03C1008F58AE /* Assets.xcassets */; };
14 | 7AF9F9FA268B03C1008F58AE /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7AF9F9F8268B03C1008F58AE /* Main.storyboard */; };
15 | /* End PBXBuildFile section */
16 |
17 | /* Begin PBXFileReference section */
18 | 7A0D14F1268B205B00ADB8CE /* macOS Virtual Machine.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "macOS Virtual Machine.entitlements"; sourceTree = ""; };
19 | 7A12DA57268C0A4400A75D28 /* VirtualMac2,1.ipsw */ = {isa = PBXFileReference; lastKnownFileType = file; path = "VirtualMac2,1.ipsw"; sourceTree = ""; };
20 | 7AF9F9EF268B03C0008F58AE /* macOS Virtual Machine.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "macOS Virtual Machine.app"; sourceTree = BUILT_PRODUCTS_DIR; };
21 | 7AF9F9F2268B03C0008F58AE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
22 | 7AF9F9F4268B03C0008F58AE /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
23 | 7AF9F9F6268B03C1008F58AE /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
24 | 7AF9F9F9268B03C1008F58AE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
25 | /* End PBXFileReference section */
26 |
27 | /* Begin PBXFrameworksBuildPhase section */
28 | 7AF9F9EC268B03C0008F58AE /* Frameworks */ = {
29 | isa = PBXFrameworksBuildPhase;
30 | buildActionMask = 2147483647;
31 | files = (
32 | );
33 | runOnlyForDeploymentPostprocessing = 0;
34 | };
35 | /* End PBXFrameworksBuildPhase section */
36 |
37 | /* Begin PBXGroup section */
38 | 7AF9F9E6268B03C0008F58AE = {
39 | isa = PBXGroup;
40 | children = (
41 | 7AF9F9F1268B03C0008F58AE /* macOS Virtual Machine */,
42 | 7AF9F9F0268B03C0008F58AE /* Products */,
43 | );
44 | sourceTree = "";
45 | };
46 | 7AF9F9F0268B03C0008F58AE /* Products */ = {
47 | isa = PBXGroup;
48 | children = (
49 | 7AF9F9EF268B03C0008F58AE /* macOS Virtual Machine.app */,
50 | );
51 | name = Products;
52 | sourceTree = "";
53 | };
54 | 7AF9F9F1268B03C0008F58AE /* macOS Virtual Machine */ = {
55 | isa = PBXGroup;
56 | children = (
57 | 7A12DA57268C0A4400A75D28 /* VirtualMac2,1.ipsw */,
58 | 7A0D14F1268B205B00ADB8CE /* macOS Virtual Machine.entitlements */,
59 | 7AF9F9F2268B03C0008F58AE /* AppDelegate.swift */,
60 | 7AF9F9F4268B03C0008F58AE /* ViewController.swift */,
61 | 7AF9F9F6268B03C1008F58AE /* Assets.xcassets */,
62 | 7AF9F9F8268B03C1008F58AE /* Main.storyboard */,
63 | );
64 | path = "macOS Virtual Machine";
65 | sourceTree = "";
66 | };
67 | /* End PBXGroup section */
68 |
69 | /* Begin PBXNativeTarget section */
70 | 7AF9F9EE268B03C0008F58AE /* macOS Virtual Machine */ = {
71 | isa = PBXNativeTarget;
72 | buildConfigurationList = 7AF9F9FD268B03C1008F58AE /* Build configuration list for PBXNativeTarget "macOS Virtual Machine" */;
73 | buildPhases = (
74 | 7AF9F9EB268B03C0008F58AE /* Sources */,
75 | 7AF9F9EC268B03C0008F58AE /* Frameworks */,
76 | 7AF9F9ED268B03C0008F58AE /* Resources */,
77 | );
78 | buildRules = (
79 | );
80 | dependencies = (
81 | );
82 | name = "macOS Virtual Machine";
83 | productName = "macOS Virtual Machine";
84 | productReference = 7AF9F9EF268B03C0008F58AE /* macOS Virtual Machine.app */;
85 | productType = "com.apple.product-type.application";
86 | };
87 | /* End PBXNativeTarget section */
88 |
89 | /* Begin PBXProject section */
90 | 7AF9F9E7268B03C0008F58AE /* Project object */ = {
91 | isa = PBXProject;
92 | attributes = {
93 | BuildIndependentTargetsInParallel = 1;
94 | LastSwiftUpdateCheck = 1300;
95 | LastUpgradeCheck = 1300;
96 | TargetAttributes = {
97 | 7AF9F9EE268B03C0008F58AE = {
98 | CreatedOnToolsVersion = 13.0;
99 | };
100 | };
101 | };
102 | buildConfigurationList = 7AF9F9EA268B03C0008F58AE /* Build configuration list for PBXProject "macOS Virtual Machine" */;
103 | compatibilityVersion = "Xcode 13.0";
104 | developmentRegion = en;
105 | hasScannedForEncodings = 0;
106 | knownRegions = (
107 | en,
108 | Base,
109 | );
110 | mainGroup = 7AF9F9E6268B03C0008F58AE;
111 | productRefGroup = 7AF9F9F0268B03C0008F58AE /* Products */;
112 | projectDirPath = "";
113 | projectRoot = "";
114 | targets = (
115 | 7AF9F9EE268B03C0008F58AE /* macOS Virtual Machine */,
116 | );
117 | };
118 | /* End PBXProject section */
119 |
120 | /* Begin PBXResourcesBuildPhase section */
121 | 7AF9F9ED268B03C0008F58AE /* Resources */ = {
122 | isa = PBXResourcesBuildPhase;
123 | buildActionMask = 2147483647;
124 | files = (
125 | 7AF9F9F7268B03C1008F58AE /* Assets.xcassets in Resources */,
126 | 7A12DA58268C0A4400A75D28 /* VirtualMac2,1.ipsw in Resources */,
127 | 7AF9F9FA268B03C1008F58AE /* Main.storyboard in Resources */,
128 | );
129 | runOnlyForDeploymentPostprocessing = 0;
130 | };
131 | /* End PBXResourcesBuildPhase section */
132 |
133 | /* Begin PBXSourcesBuildPhase section */
134 | 7AF9F9EB268B03C0008F58AE /* Sources */ = {
135 | isa = PBXSourcesBuildPhase;
136 | buildActionMask = 2147483647;
137 | files = (
138 | 7AF9F9F5268B03C0008F58AE /* ViewController.swift in Sources */,
139 | 7AF9F9F3268B03C0008F58AE /* AppDelegate.swift in Sources */,
140 | );
141 | runOnlyForDeploymentPostprocessing = 0;
142 | };
143 | /* End PBXSourcesBuildPhase section */
144 |
145 | /* Begin PBXVariantGroup section */
146 | 7AF9F9F8268B03C1008F58AE /* Main.storyboard */ = {
147 | isa = PBXVariantGroup;
148 | children = (
149 | 7AF9F9F9268B03C1008F58AE /* Base */,
150 | );
151 | name = Main.storyboard;
152 | sourceTree = "";
153 | };
154 | /* End PBXVariantGroup section */
155 |
156 | /* Begin XCBuildConfiguration section */
157 | 7AF9F9FB268B03C1008F58AE /* Debug */ = {
158 | isa = XCBuildConfiguration;
159 | buildSettings = {
160 | ALWAYS_SEARCH_USER_PATHS = NO;
161 | CLANG_ANALYZER_NONNULL = YES;
162 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
163 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
164 | CLANG_CXX_LIBRARY = "libc++";
165 | CLANG_ENABLE_MODULES = YES;
166 | CLANG_ENABLE_OBJC_ARC = YES;
167 | CLANG_ENABLE_OBJC_WEAK = YES;
168 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
169 | CLANG_WARN_BOOL_CONVERSION = YES;
170 | CLANG_WARN_COMMA = YES;
171 | CLANG_WARN_CONSTANT_CONVERSION = YES;
172 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
173 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
174 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
175 | CLANG_WARN_EMPTY_BODY = YES;
176 | CLANG_WARN_ENUM_CONVERSION = YES;
177 | CLANG_WARN_INFINITE_RECURSION = YES;
178 | CLANG_WARN_INT_CONVERSION = YES;
179 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
180 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
181 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
182 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
183 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
184 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
185 | CLANG_WARN_STRICT_PROTOTYPES = YES;
186 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
187 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
188 | CLANG_WARN_UNREACHABLE_CODE = YES;
189 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
190 | COPY_PHASE_STRIP = NO;
191 | DEBUG_INFORMATION_FORMAT = dwarf;
192 | ENABLE_STRICT_OBJC_MSGSEND = YES;
193 | ENABLE_TESTABILITY = YES;
194 | GCC_C_LANGUAGE_STANDARD = gnu11;
195 | GCC_DYNAMIC_NO_PIC = NO;
196 | GCC_NO_COMMON_BLOCKS = YES;
197 | GCC_OPTIMIZATION_LEVEL = 0;
198 | GCC_PREPROCESSOR_DEFINITIONS = (
199 | "DEBUG=1",
200 | "$(inherited)",
201 | );
202 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
203 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
204 | GCC_WARN_UNDECLARED_SELECTOR = YES;
205 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
206 | GCC_WARN_UNUSED_FUNCTION = YES;
207 | GCC_WARN_UNUSED_VARIABLE = YES;
208 | MACOSX_DEPLOYMENT_TARGET = 12.0;
209 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
210 | MTL_FAST_MATH = YES;
211 | ONLY_ACTIVE_ARCH = YES;
212 | SDKROOT = macosx;
213 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
214 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
215 | };
216 | name = Debug;
217 | };
218 | 7AF9F9FC268B03C1008F58AE /* Release */ = {
219 | isa = XCBuildConfiguration;
220 | buildSettings = {
221 | ALWAYS_SEARCH_USER_PATHS = NO;
222 | CLANG_ANALYZER_NONNULL = YES;
223 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
224 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
225 | CLANG_CXX_LIBRARY = "libc++";
226 | CLANG_ENABLE_MODULES = YES;
227 | CLANG_ENABLE_OBJC_ARC = YES;
228 | CLANG_ENABLE_OBJC_WEAK = YES;
229 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
230 | CLANG_WARN_BOOL_CONVERSION = YES;
231 | CLANG_WARN_COMMA = YES;
232 | CLANG_WARN_CONSTANT_CONVERSION = YES;
233 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
234 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
235 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
236 | CLANG_WARN_EMPTY_BODY = YES;
237 | CLANG_WARN_ENUM_CONVERSION = YES;
238 | CLANG_WARN_INFINITE_RECURSION = YES;
239 | CLANG_WARN_INT_CONVERSION = YES;
240 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
241 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
242 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
243 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
244 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
245 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
246 | CLANG_WARN_STRICT_PROTOTYPES = YES;
247 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
248 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
249 | CLANG_WARN_UNREACHABLE_CODE = YES;
250 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
251 | COPY_PHASE_STRIP = NO;
252 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
253 | ENABLE_NS_ASSERTIONS = NO;
254 | ENABLE_STRICT_OBJC_MSGSEND = YES;
255 | GCC_C_LANGUAGE_STANDARD = gnu11;
256 | GCC_NO_COMMON_BLOCKS = YES;
257 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
258 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
259 | GCC_WARN_UNDECLARED_SELECTOR = YES;
260 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
261 | GCC_WARN_UNUSED_FUNCTION = YES;
262 | GCC_WARN_UNUSED_VARIABLE = YES;
263 | MACOSX_DEPLOYMENT_TARGET = 12.0;
264 | MTL_ENABLE_DEBUG_INFO = NO;
265 | MTL_FAST_MATH = YES;
266 | SDKROOT = macosx;
267 | SWIFT_COMPILATION_MODE = wholemodule;
268 | SWIFT_OPTIMIZATION_LEVEL = "-O";
269 | };
270 | name = Release;
271 | };
272 | 7AF9F9FE268B03C1008F58AE /* Debug */ = {
273 | isa = XCBuildConfiguration;
274 | buildSettings = {
275 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
276 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
277 | CODE_SIGN_ENTITLEMENTS = "macOS Virtual Machine/macOS Virtual Machine.entitlements";
278 | CODE_SIGN_STYLE = Manual;
279 | COMBINE_HIDPI_IMAGES = YES;
280 | CURRENT_PROJECT_VERSION = 1;
281 | DEVELOPMENT_TEAM = "";
282 | ENABLE_APP_SANDBOX = YES;
283 | ENABLE_HARDENED_RUNTIME = YES;
284 | ENABLE_USER_SELECTED_FILES = readonly;
285 | GENERATE_INFOPLIST_FILE = YES;
286 | INFOPLIST_KEY_CFBundleExecutable = "macOS Virtual Machine";
287 | INFOPLIST_KEY_CFBundleName = "macOS Virtual Machine";
288 | INFOPLIST_KEY_CFBundleVersion = 1;
289 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
290 | INFOPLIST_KEY_NSMainStoryboardFile = Main;
291 | INFOPLIST_KEY_NSPrincipalClass = NSApplication;
292 | LD_RUNPATH_SEARCH_PATHS = (
293 | "$(inherited)",
294 | "@executable_path/../Frameworks",
295 | );
296 | MARKETING_VERSION = 0.1;
297 | PRODUCT_BUNDLE_IDENTIFIER = "com.mingchang.macosvm.macOS-Virtual-Machine";
298 | PRODUCT_NAME = "$(TARGET_NAME)";
299 | PROVISIONING_PROFILE_SPECIFIER = "";
300 | SWIFT_EMIT_LOC_STRINGS = YES;
301 | SWIFT_VERSION = 5.0;
302 | };
303 | name = Debug;
304 | };
305 | 7AF9F9FF268B03C1008F58AE /* Release */ = {
306 | isa = XCBuildConfiguration;
307 | buildSettings = {
308 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
309 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
310 | CODE_SIGN_ENTITLEMENTS = "macOS Virtual Machine/macOS Virtual Machine.entitlements";
311 | CODE_SIGN_STYLE = Manual;
312 | COMBINE_HIDPI_IMAGES = YES;
313 | CURRENT_PROJECT_VERSION = 1;
314 | DEVELOPMENT_TEAM = "";
315 | ENABLE_APP_SANDBOX = YES;
316 | ENABLE_HARDENED_RUNTIME = YES;
317 | ENABLE_USER_SELECTED_FILES = readonly;
318 | GENERATE_INFOPLIST_FILE = YES;
319 | INFOPLIST_KEY_CFBundleExecutable = "macOS Virtual Machine";
320 | INFOPLIST_KEY_CFBundleName = "macOS Virtual Machine";
321 | INFOPLIST_KEY_CFBundleVersion = 1;
322 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
323 | INFOPLIST_KEY_NSMainStoryboardFile = Main;
324 | INFOPLIST_KEY_NSPrincipalClass = NSApplication;
325 | LD_RUNPATH_SEARCH_PATHS = (
326 | "$(inherited)",
327 | "@executable_path/../Frameworks",
328 | );
329 | MARKETING_VERSION = 0.1;
330 | PRODUCT_BUNDLE_IDENTIFIER = "com.mingchang.macosvm.macOS-Virtual-Machine";
331 | PRODUCT_NAME = "$(TARGET_NAME)";
332 | PROVISIONING_PROFILE_SPECIFIER = "";
333 | SWIFT_EMIT_LOC_STRINGS = YES;
334 | SWIFT_VERSION = 5.0;
335 | };
336 | name = Release;
337 | };
338 | /* End XCBuildConfiguration section */
339 |
340 | /* Begin XCConfigurationList section */
341 | 7AF9F9EA268B03C0008F58AE /* Build configuration list for PBXProject "macOS Virtual Machine" */ = {
342 | isa = XCConfigurationList;
343 | buildConfigurations = (
344 | 7AF9F9FB268B03C1008F58AE /* Debug */,
345 | 7AF9F9FC268B03C1008F58AE /* Release */,
346 | );
347 | defaultConfigurationIsVisible = 0;
348 | defaultConfigurationName = Release;
349 | };
350 | 7AF9F9FD268B03C1008F58AE /* Build configuration list for PBXNativeTarget "macOS Virtual Machine" */ = {
351 | isa = XCConfigurationList;
352 | buildConfigurations = (
353 | 7AF9F9FE268B03C1008F58AE /* Debug */,
354 | 7AF9F9FF268B03C1008F58AE /* Release */,
355 | );
356 | defaultConfigurationIsVisible = 0;
357 | defaultConfigurationName = Release;
358 | };
359 | /* End XCConfigurationList section */
360 | };
361 | rootObject = 7AF9F9E7268B03C0008F58AE /* Project object */;
362 | }
363 |
--------------------------------------------------------------------------------