diff --git a/.bundle/config b/.bundle/config new file mode 100644 index 0000000..2369228 --- /dev/null +++ b/.bundle/config @@ -0,0 +1,2 @@ +--- +BUNDLE_PATH: "vendor/bundle" diff --git a/.gitignore b/.gitignore index 50b8d7b..33209a1 100644 --- a/.gitignore +++ b/.gitignore @@ -3,8 +3,12 @@ # macOS specific .DS_Store -# Managed by Cocoapods -Pods/ +# Managed by bundler +vendor/bundle/ + +# AppCenter xcframework binaries +# TODO: There is no automated download method for those yet, consider using Git LFS +vendor/Frameworks/ # Xcode user xcuserdata diff --git a/Artwork/NXBoot.afphoto b/Artwork/NXBoot.afphoto new file mode 100644 index 0000000..f0f78b2 Binary files /dev/null and b/Artwork/NXBoot.afphoto differ diff --git a/Artwork/NXBoot.psd b/Artwork/NXBoot.psd deleted file mode 100644 index 4cb11f2..0000000 Binary files a/Artwork/NXBoot.psd and /dev/null differ diff --git a/Artwork/NXBoot2.afphoto b/Artwork/NXBoot2.afphoto new file mode 100644 index 0000000..c91b99f Binary files /dev/null and b/Artwork/NXBoot2.afphoto differ diff --git a/Artwork/NXBoot2.psd b/Artwork/NXBoot2.psd deleted file mode 100644 index 4ffd820..0000000 Binary files a/Artwork/NXBoot2.psd and /dev/null differ diff --git a/Artwork/NXBootMac.afphoto b/Artwork/NXBootMac.afphoto new file mode 100644 index 0000000..e26a396 Binary files /dev/null and b/Artwork/NXBootMac.afphoto differ diff --git a/Artwork/NXBootMac.png b/Artwork/NXBootMac.png deleted file mode 100644 index d1f7dcd..0000000 Binary files a/Artwork/NXBootMac.png and /dev/null differ diff --git a/Artwork/NXBootMac.psd b/Artwork/NXBootMac.psd deleted file mode 100644 index c0f2878..0000000 Binary files a/Artwork/NXBootMac.psd and /dev/null differ diff --git a/Brewfile b/Brewfile new file mode 100644 index 0000000..a62a4a0 --- /dev/null +++ b/Brewfile @@ -0,0 +1,3 @@ +brew "carthage" +brew "dpkg" +cask "jtool" diff --git a/Brewfile.lock.json b/Brewfile.lock.json new file mode 100644 index 0000000..c3d49cd --- /dev/null +++ b/Brewfile.lock.json @@ -0,0 +1,47 @@ +{ + "entries": { + "brew": { + "dpkg": { + "version": "1.20.5", + "bottle": { + "cellar": "/usr/local/Cellar", + "prefix": "/usr/local", + "files": { + "catalina": { + "url": "https://homebrew.bintray.com/bottles/dpkg-1.20.5.catalina.bottle.tar.gz", + "sha256": "32ae6083fd4207f4cecd58087b68afc43a22d6020bd7a89184a0af20ecc9a2fb" + }, + "mojave": { + "url": "https://homebrew.bintray.com/bottles/dpkg-1.20.5.mojave.bottle.tar.gz", + "sha256": "ec0d8e85f436bc6394de1f261c1c0e791ed72797d7ae20e6fb8f1cda016a7b43" + }, + "high_sierra": { + "url": "https://homebrew.bintray.com/bottles/dpkg-1.20.5.high_sierra.bottle.tar.gz", + "sha256": "483c5e48a18dd401638399670aff9fd1a2800a243a37f208235777e9fc140986" + } + } + } + } + }, + "cask": { + "jtool2": { + "version": "2020.02.10", + "options": { + "full_name": "jtool2" + } + } + } + }, + "system": { + "macos": { + "catalina": { + "HOMEBREW_VERSION": "2.5.8", + "HOMEBREW_PREFIX": "/usr/local", + "Homebrew/homebrew-core": "5f653cea908226297af7faab47e8a6f9490d5aca", + "CLT": "1103.0.32.29", + "Xcode": "12.1", + "macOS": "10.15.7" + } + } + } +} diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..ff5fd9f --- /dev/null +++ b/Gemfile @@ -0,0 +1,4 @@ +source "https://rubygems.org" + +gem "xcodeproj" +gem "xcpretty" diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..41c78ac --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,27 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (3.0.2) + atomos (0.1.3) + claide (1.0.3) + colored2 (3.1.2) + nanaimo (0.3.0) + rouge (2.0.7) + xcodeproj (1.19.0) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.3) + claide (>= 1.0.2, < 2.0) + colored2 (~> 3.1) + nanaimo (~> 0.3.0) + xcpretty (0.3.0) + rouge (~> 2.0.7) + +PLATFORMS + ruby + +DEPENDENCIES + xcodeproj + xcpretty + +BUNDLED WITH + 1.17.2 diff --git a/NXBoot.xcodeproj/project.pbxproj b/NXBoot.xcodeproj/project.pbxproj index 4778c0d..ac90afc 100644 --- a/NXBoot.xcodeproj/project.pbxproj +++ b/NXBoot.xcodeproj/project.pbxproj @@ -3,84 +3,66 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ - 5CEE49DD4783B11BC11CD807 /* Pods_NXBootMac.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9B714C988E8454265B34B0A4 /* Pods_NXBootMac.framework */; }; A701175F20EE320F00B3D45B /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A701175E20EE320F00B3D45B /* WebKit.framework */; }; A701176520EE677F00B3D45B /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A701176320EE677F00B3D45B /* Main.storyboard */; }; - A717F06B21160C25000B4705 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = A717F06A21160C25000B4705 /* Credits.rtf */; }; - A717F06F21162289000B4705 /* CheckboxCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = A717F06E21162289000B4705 /* CheckboxCellView.m */; }; - A717F07821163FBA000B4705 /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = A717F07621163FBA000B4705 /* Model.xcdatamodeld */; }; - A717F07B21164115000B4705 /* BootProfileEditViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A717F07A21164115000B4705 /* BootProfileEditViewController.m */; }; - A717F07D21164403000B4705 /* AppConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = A765643E20F4D265005EC7E6 /* AppConfig.m */; }; - A718F2202100CBD1009BD181 /* NXExec.m in Sources */ = {isa = PBXBuildFile; fileRef = A73FDCEC20FA9C71007EBF4F /* NXExec.m */; }; - A718F2212100CBD3009BD181 /* NXUSBDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = A73FDCF220FA9C72007EBF4F /* NXUSBDevice.m */; }; - A718F2222100CBD5009BD181 /* NXUSBDeviceEnumerator.m in Sources */ = {isa = PBXBuildFile; fileRef = A73FDCEE20FA9C71007EBF4F /* NXUSBDeviceEnumerator.m */; }; - A7190D2E21164BA700544CAD /* Payloads in Resources */ = {isa = PBXBuildFile; fileRef = A7458B4B20EF86C7008F4899 /* Payloads */; }; - A72B0F6B210BC84B00309F0A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A72B0F6A210BC84B00309F0A /* AppDelegate.m */; }; - A72B0F6E210BC84B00309F0A /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A72B0F6D210BC84B00309F0A /* MainViewController.m */; }; - A72B0F70210BC84D00309F0A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A72B0F6F210BC84D00309F0A /* Assets.xcassets */; }; - A72B0F73210BC84D00309F0A /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A72B0F71210BC84D00309F0A /* Main.storyboard */; }; - A72B0F76210BC84D00309F0A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = A72B0F75210BC84D00309F0A /* main.m */; }; - A72B0F7B210BC8EC00309F0A /* libNXBootKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A718F21C2100CBB7009BD181 /* libNXBootKit.a */; }; + A70934DA2556DEA0006AA85B /* NXBootKit.m in Sources */ = {isa = PBXBuildFile; fileRef = A7388F742100F54A00A60C1B /* NXBootKit.m */; }; + A70934DB2556DEA0006AA85B /* NXUSBDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = A73FDCF220FA9C72007EBF4F /* NXUSBDevice.m */; }; + A70934DC2556DEA0006AA85B /* NXExec.m in Sources */ = {isa = PBXBuildFile; fileRef = A73FDCEC20FA9C71007EBF4F /* NXExec.m */; }; + A70934DD2556DEA0006AA85B /* NXUSBDeviceEnumerator.m in Sources */ = {isa = PBXBuildFile; fileRef = A73FDCEE20FA9C71007EBF4F /* NXUSBDeviceEnumerator.m */; }; + A70934E92556DEC3006AA85B /* libNXBootKit_macOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A70934E42556DEA0006AA85B /* libNXBootKit_macOS.a */; }; A7388F752100F54A00A60C1B /* NXBootKit.m in Sources */ = {isa = PBXBuildFile; fileRef = A7388F742100F54A00A60C1B /* NXBootKit.m */; }; - A7388F762100F54A00A60C1B /* NXBootKit.m in Sources */ = {isa = PBXBuildFile; fileRef = A7388F742100F54A00A60C1B /* NXBootKit.m */; }; A73FDCF420FA9C72007EBF4F /* NXExec.m in Sources */ = {isa = PBXBuildFile; fileRef = A73FDCEC20FA9C71007EBF4F /* NXExec.m */; }; A73FDCF520FA9C72007EBF4F /* NXUSBDeviceEnumerator.m in Sources */ = {isa = PBXBuildFile; fileRef = A73FDCEE20FA9C71007EBF4F /* NXUSBDeviceEnumerator.m */; }; A73FDCF720FA9C72007EBF4F /* NXUSBDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = A73FDCF220FA9C72007EBF4F /* NXUSBDevice.m */; }; - A73FDCF820FA9D08007EBF4F /* libNXBootKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A73FDCE320FA9C5C007EBF4F /* libNXBootKit.a */; }; - A73FDCFC20FA9F5A007EBF4F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = A7FDBE2620EE27DE00E59587 /* main.m */; }; - A73FDCFD20FA9F5A007EBF4F /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A7C4EA1520EE2D1B0026FFC9 /* MainViewController.m */; }; - A73FDCFE20FA9F5A007EBF4F /* AppConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = A765643E20F4D265005EC7E6 /* AppConfig.m */; }; - A73FDD0020FA9F5A007EBF4F /* AboutScreenViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A78D523420F343EC0045FC4F /* AboutScreenViewController.m */; }; - A73FDD0120FA9F5A007EBF4F /* BootProfilesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A7B7E1FC20EE738300F39094 /* BootProfilesViewController.m */; }; - A73FDD0220FA9F5A007EBF4F /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A7FDBE1820EE27DD00E59587 /* AppDelegate.m */; }; - A73FDD0320FA9F5A007EBF4F /* BootProfileEditViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A7F0A88B20F4837F001C9D07 /* BootProfileEditViewController.m */; }; - A73FDD0420FA9F5A007EBF4F /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = A7F0A88D20F48492001C9D07 /* Model.xcdatamodeld */; }; - A73FDD0820FA9F5A007EBF4F /* libMobileGestalt.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = A7AD2A1020F63A3500D1A400 /* libMobileGestalt.tbd */; }; - A73FDD0920FA9F5A007EBF4F /* libNXBootKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A73FDCE320FA9C5C007EBF4F /* libNXBootKit.a */; }; - A73FDD0D20FA9F5A007EBF4F /* PackageIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = A7999EC920F5761B00F659EB /* PackageIcon.png */; }; - A73FDD0E20FA9F5A007EBF4F /* Payloads in Resources */ = {isa = PBXBuildFile; fileRef = A7458B4B20EF86C7008F4899 /* Payloads */; }; - A73FDD0F20FA9F5A007EBF4F /* Tutorial in Resources */ = {isa = PBXBuildFile; fileRef = A7458B4D20EF86D5008F4899 /* Tutorial */; }; - A73FDD1120FA9F5A007EBF4F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A7FDBE2020EE27DE00E59587 /* Assets.xcassets */; }; - A73FDD1D20FAA082007EBF4F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A73FDD1920FAA082007EBF4F /* Main.storyboard */; }; - A73FDD1E20FAA082007EBF4F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A73FDD1B20FAA082007EBF4F /* LaunchScreen.storyboard */; }; + A73FDCF820FA9D08007EBF4F /* libNXBootKit_iOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A73FDCE320FA9C5C007EBF4F /* libNXBootKit_iOS.a */; }; A7458B4A20EF8286008F4899 /* GettingStartedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A7458B4920EF8286008F4899 /* GettingStartedViewController.m */; }; A7458B4C20EF86C7008F4899 /* Payloads in Resources */ = {isa = PBXBuildFile; fileRef = A7458B4B20EF86C7008F4899 /* Payloads */; }; A7458B4E20EF86D5008F4899 /* Tutorial in Resources */ = {isa = PBXBuildFile; fileRef = A7458B4D20EF86D5008F4899 /* Tutorial */; }; A765643F20F4D265005EC7E6 /* AppConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = A765643E20F4D265005EC7E6 /* AppConfig.m */; }; - A76D3040231D94FB0073D9FD /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A76D303F231D94FB0073D9FD /* IOKit.framework */; }; - A76D3041231D94FB0073D9FD /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A76D303F231D94FB0073D9FD /* IOKit.framework */; }; - A76D3042231D94FB0073D9FD /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A76D303F231D94FB0073D9FD /* IOKit.framework */; }; - A78865DC20FAA6E200ECA2B2 /* UIAlertControllerShim.m in Sources */ = {isa = PBXBuildFile; fileRef = A78865DB20FAA6E200ECA2B2 /* UIAlertControllerShim.m */; }; - A78865DF20FAA74500ECA2B2 /* UIAlertActionShim.m in Sources */ = {isa = PBXBuildFile; fileRef = A78865DE20FAA74500ECA2B2 /* UIAlertActionShim.m */; }; - A78865E320FAACBD00ECA2B2 /* GettingStartedLegacyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A78865E220FAACBD00ECA2B2 /* GettingStartedLegacyViewController.m */; }; - A78865E520FAAF6A00ECA2B2 /* AssetsLegacy.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A78865E420FAAF6A00ECA2B2 /* AssetsLegacy.xcassets */; }; A78D523520F343EC0045FC4F /* AboutScreenViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A78D523420F343EC0045FC4F /* AboutScreenViewController.m */; }; A795B6BC21015F970008820F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = A718F2302100CD1C009BD181 /* main.m */; }; - A795B6BD21015FD30008820F /* libNXBootKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A718F21C2100CBB7009BD181 /* libNXBootKit.a */; }; A795B6BE21015FD80008820F /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A718F2332100CDC1009BD181 /* IOKit.framework */; }; A7999ECA20F5761B00F659EB /* PackageIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = A7999EC920F5761B00F659EB /* PackageIcon.png */; }; A7AD2A1120F63A3500D1A400 /* libMobileGestalt.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = A7AD2A1020F63A3500D1A400 /* libMobileGestalt.tbd */; }; A7B7E1FD20EE738300F39094 /* BootProfilesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A7B7E1FC20EE738300F39094 /* BootProfilesViewController.m */; }; A7C4EA1620EE2D1B0026FFC9 /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A7C4EA1520EE2D1B0026FFC9 /* MainViewController.m */; }; + A7CD57CB2556F591006AA85B /* AppCenter.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7CD57C22556F587006AA85B /* AppCenter.xcframework */; }; + A7CD57CC2556F591006AA85B /* AppCenter.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A7CD57C22556F587006AA85B /* AppCenter.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + A7CD57D12556F593006AA85B /* AppCenterAnalytics.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7CD57C32556F587006AA85B /* AppCenterAnalytics.xcframework */; }; + A7CD57D22556F593006AA85B /* AppCenterAnalytics.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A7CD57C32556F587006AA85B /* AppCenterAnalytics.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + A7CD57D62556F594006AA85B /* AppCenterCrashes.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7CD57C12556F587006AA85B /* AppCenterCrashes.xcframework */; }; + A7CD57D72556F594006AA85B /* AppCenterCrashes.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A7CD57C12556F587006AA85B /* AppCenterCrashes.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + A7CD57DF2556F5CB006AA85B /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7CD57DE2556F5CB006AA85B /* IOKit.framework */; }; + A7CD57E82556FB8B006AA85B /* NXHekateCustomizer.m in Sources */ = {isa = PBXBuildFile; fileRef = A7CD57E72556FB8B006AA85B /* NXHekateCustomizer.m */; }; + A7CD57E92556FB8B006AA85B /* NXHekateCustomizer.m in Sources */ = {isa = PBXBuildFile; fileRef = A7CD57E72556FB8B006AA85B /* NXHekateCustomizer.m */; }; A7F0A88C20F4837F001C9D07 /* BootProfileEditViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A7F0A88B20F4837F001C9D07 /* BootProfileEditViewController.m */; }; A7F0A88F20F48492001C9D07 /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = A7F0A88D20F48492001C9D07 /* Model.xcdatamodeld */; }; A7FDBE1920EE27DD00E59587 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A7FDBE1820EE27DD00E59587 /* AppDelegate.m */; }; A7FDBE2120EE27DE00E59587 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A7FDBE2020EE27DE00E59587 /* Assets.xcassets */; }; A7FDBE2420EE27DE00E59587 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A7FDBE2220EE27DE00E59587 /* LaunchScreen.storyboard */; }; A7FDBE2720EE27DE00E59587 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = A7FDBE2620EE27DE00E59587 /* main.m */; }; - DC1D6A26516D93CA82A07B67 /* libPods-NXBoot.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EC23C54F4535F403654E2FB8 /* libPods-NXBoot.a */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + A70934EA2556DEC3006AA85B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A7FDBE0C20EE27DD00E59587 /* Project object */; + proxyType = 1; + remoteGlobalIDString = A70934D82556DEA0006AA85B; + remoteInfo = NXBootKit_macOS; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ - A717F06C21160CF5000B4705 /* CopyFiles */ = { + A70934E02556DEA0006AA85B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 7; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; files = ( ); runOnlyForDeploymentPostprocessing = 0; @@ -103,47 +85,38 @@ ); runOnlyForDeploymentPostprocessing = 1; }; + A7CD57CD2556F591006AA85B /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + A7CD57D72556F594006AA85B /* AppCenterCrashes.xcframework in Embed Frameworks */, + A7CD57CC2556F591006AA85B /* AppCenter.xcframework in Embed Frameworks */, + A7CD57D22556F593006AA85B /* AppCenterAnalytics.xcframework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2B6AE413022444B03143DD80 /* Pods-NXBootMac.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NXBootMac.debug.xcconfig"; path = "Pods/Target Support Files/Pods-NXBootMac/Pods-NXBootMac.debug.xcconfig"; sourceTree = ""; }; - 3BE916D220F1BE25EA35A720 /* Pods-NXBootMac.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NXBootMac.release.xcconfig"; path = "Pods/Target Support Files/Pods-NXBootMac/Pods-NXBootMac.release.xcconfig"; sourceTree = ""; }; - 9B714C988E8454265B34B0A4 /* Pods_NXBootMac.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_NXBootMac.framework; sourceTree = BUILT_PRODUCTS_DIR; }; A701175E20EE320F00B3D45B /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; A701176420EE677F00B3D45B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - A717F06A21160C25000B4705 /* Credits.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; path = Credits.rtf; sourceTree = ""; }; - A717F06D21162289000B4705 /* CheckboxCellView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CheckboxCellView.h; sourceTree = ""; }; - A717F06E21162289000B4705 /* CheckboxCellView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CheckboxCellView.m; sourceTree = ""; }; - A717F07721163FBA000B4705 /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Model.xcdatamodel; sourceTree = ""; }; - A717F07921164115000B4705 /* BootProfileEditViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BootProfileEditViewController.h; sourceTree = ""; }; - A717F07A21164115000B4705 /* BootProfileEditViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BootProfileEditViewController.m; sourceTree = ""; }; - A718F21C2100CBB7009BD181 /* libNXBootKit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libNXBootKit.a; sourceTree = BUILT_PRODUCTS_DIR; }; + A70934E42556DEA0006AA85B /* libNXBootKit_macOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libNXBootKit_macOS.a; sourceTree = BUILT_PRODUCTS_DIR; }; A718F2302100CD1C009BD181 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; A718F2312100CD1C009BD181 /* NXBootCmd.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NXBootCmd.entitlements; sourceTree = ""; }; A718F2332100CDC1009BD181 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/IOKit.framework; sourceTree = DEVELOPER_DIR; }; A7190D2D21164A1000544CAD /* AppConfig+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "AppConfig+Private.h"; sourceTree = ""; }; - A72B0F67210BC84B00309F0A /* NXBoot.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = NXBoot.app; sourceTree = BUILT_PRODUCTS_DIR; }; - A72B0F69210BC84B00309F0A /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - A72B0F6A210BC84B00309F0A /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - A72B0F6C210BC84B00309F0A /* MainViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MainViewController.h; sourceTree = ""; }; - A72B0F6D210BC84B00309F0A /* MainViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MainViewController.m; sourceTree = ""; }; - A72B0F6F210BC84D00309F0A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - A72B0F72210BC84D00309F0A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - A72B0F74210BC84D00309F0A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A72B0F75210BC84D00309F0A /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - A72B0F77210BC84D00309F0A /* NXBootMac.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NXBootMac.entitlements; sourceTree = ""; }; A7388F732100F4FB00A60C1B /* NXBootKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NXBootKit.h; sourceTree = ""; }; A7388F742100F54A00A60C1B /* NXBootKit.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NXBootKit.m; sourceTree = ""; }; - A73FDCE320FA9C5C007EBF4F /* libNXBootKit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libNXBootKit.a; sourceTree = BUILT_PRODUCTS_DIR; }; + A73FDCE320FA9C5C007EBF4F /* libNXBootKit_iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libNXBootKit_iOS.a; sourceTree = BUILT_PRODUCTS_DIR; }; A73FDCEC20FA9C71007EBF4F /* NXExec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NXExec.m; sourceTree = ""; }; A73FDCED20FA9C71007EBF4F /* NXUSBDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NXUSBDevice.h; sourceTree = ""; }; A73FDCEE20FA9C71007EBF4F /* NXUSBDeviceEnumerator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NXUSBDeviceEnumerator.m; sourceTree = ""; }; A73FDCF120FA9C72007EBF4F /* NXExec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NXExec.h; sourceTree = ""; }; A73FDCF220FA9C72007EBF4F /* NXUSBDevice.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NXUSBDevice.m; sourceTree = ""; }; A73FDCF320FA9C72007EBF4F /* NXUSBDeviceEnumerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NXUSBDeviceEnumerator.h; sourceTree = ""; }; - A73FDD1520FA9F5A007EBF4F /* NXBootLegacy.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = NXBootLegacy.app; sourceTree = BUILT_PRODUCTS_DIR; }; - A73FDD1A20FAA082007EBF4F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - A73FDD1C20FAA082007EBF4F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; A7458B4820EF8286008F4899 /* GettingStartedViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GettingStartedViewController.h; sourceTree = ""; }; A7458B4920EF8286008F4899 /* GettingStartedViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GettingStartedViewController.m; sourceTree = ""; }; A7458B4B20EF86C7008F4899 /* Payloads */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Payloads; sourceTree = ""; }; @@ -151,25 +124,21 @@ A75A515A20F75C4F00FCEF84 /* NXBoot.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NXBoot.entitlements; sourceTree = ""; }; A765643D20F4D265005EC7E6 /* AppConfig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppConfig.h; sourceTree = ""; }; A765643E20F4D265005EC7E6 /* AppConfig.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppConfig.m; sourceTree = ""; }; - A76D303F231D94FB0073D9FD /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Frameworks/IOKit.framework; sourceTree = ""; }; - A78865DA20FAA6E200ECA2B2 /* UIAlertControllerShim.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIAlertControllerShim.h; sourceTree = ""; }; - A78865DB20FAA6E200ECA2B2 /* UIAlertControllerShim.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UIAlertControllerShim.m; sourceTree = ""; }; - A78865DD20FAA74500ECA2B2 /* UIAlertActionShim.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIAlertActionShim.h; sourceTree = ""; }; - A78865DE20FAA74500ECA2B2 /* UIAlertActionShim.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UIAlertActionShim.m; sourceTree = ""; }; - A78865E020FAA7C500ECA2B2 /* Prefix.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Prefix.h; sourceTree = ""; }; - A78865E120FAACBD00ECA2B2 /* GettingStartedLegacyViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GettingStartedLegacyViewController.h; sourceTree = ""; }; - A78865E220FAACBD00ECA2B2 /* GettingStartedLegacyViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GettingStartedLegacyViewController.m; sourceTree = ""; }; - A78865E420FAAF6A00ECA2B2 /* AssetsLegacy.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = AssetsLegacy.xcassets; sourceTree = ""; }; A78D523320F343EC0045FC4F /* AboutScreenViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AboutScreenViewController.h; sourceTree = ""; }; A78D523420F343EC0045FC4F /* AboutScreenViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AboutScreenViewController.m; sourceTree = ""; }; A795B6B521015F880008820F /* nxboot */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = nxboot; sourceTree = BUILT_PRODUCTS_DIR; }; A7999EC920F5761B00F659EB /* PackageIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = PackageIcon.png; sourceTree = ""; }; A7AD2A1020F63A3500D1A400 /* libMobileGestalt.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libMobileGestalt.tbd; path = usr/lib/libMobileGestalt.tbd; sourceTree = SDKROOT; }; - A7B494EB20FAA4000006E028 /* NXBootLegacy.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NXBootLegacy.entitlements; sourceTree = ""; }; A7B7E1FB20EE738300F39094 /* BootProfilesViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BootProfilesViewController.h; sourceTree = ""; }; A7B7E1FC20EE738300F39094 /* BootProfilesViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BootProfilesViewController.m; sourceTree = ""; }; A7C4EA1420EE2D1B0026FFC9 /* MainViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MainViewController.h; sourceTree = ""; }; A7C4EA1520EE2D1B0026FFC9 /* MainViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MainViewController.m; sourceTree = ""; }; + A7CD57C12556F587006AA85B /* AppCenterCrashes.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = AppCenterCrashes.xcframework; path = vendor/Frameworks/AppCenterCrashes.xcframework; sourceTree = ""; }; + A7CD57C22556F587006AA85B /* AppCenter.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = AppCenter.xcframework; path = vendor/Frameworks/AppCenter.xcframework; sourceTree = ""; }; + A7CD57C32556F587006AA85B /* AppCenterAnalytics.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = AppCenterAnalytics.xcframework; path = vendor/Frameworks/AppCenterAnalytics.xcframework; sourceTree = ""; }; + A7CD57DE2556F5CB006AA85B /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/IOKit.framework; sourceTree = DEVELOPER_DIR; }; + A7CD57E62556FB8B006AA85B /* NXHekateCustomizer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NXHekateCustomizer.h; sourceTree = ""; }; + A7CD57E72556FB8B006AA85B /* NXHekateCustomizer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NXHekateCustomizer.m; sourceTree = ""; }; A7F0A88A20F4837F001C9D07 /* BootProfileEditViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BootProfileEditViewController.h; sourceTree = ""; }; A7F0A88B20F4837F001C9D07 /* BootProfileEditViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BootProfileEditViewController.m; sourceTree = ""; }; A7F0A88E20F48492001C9D07 /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Model.xcdatamodel; sourceTree = ""; }; @@ -180,43 +149,20 @@ A7FDBE2320EE27DE00E59587 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; A7FDBE2520EE27DE00E59587 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; A7FDBE2620EE27DE00E59587 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - E3D56110D9C94294F18FD0FA /* Pods-NXBoot.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NXBoot.release.xcconfig"; path = "Pods/Target Support Files/Pods-NXBoot/Pods-NXBoot.release.xcconfig"; sourceTree = ""; }; - EC23C54F4535F403654E2FB8 /* libPods-NXBoot.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NXBoot.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - FFBE8FD3D1E4D094DAAD4809 /* Pods-NXBoot.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NXBoot.debug.xcconfig"; path = "Pods/Target Support Files/Pods-NXBoot/Pods-NXBoot.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - A718F2192100CBB7009BD181 /* Frameworks */ = { + A70934DE2556DEA0006AA85B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - A72B0F64210BC84B00309F0A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - A72B0F7B210BC8EC00309F0A /* libNXBootKit.a in Frameworks */, - 5CEE49DD4783B11BC11CD807 /* Pods_NXBootMac.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; A73FDCE020FA9C5C007EBF4F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A76D3042231D94FB0073D9FD /* IOKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A73FDD0520FA9F5A007EBF4F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - A73FDD0820FA9F5A007EBF4F /* libMobileGestalt.tbd in Frameworks */, - A73FDD0920FA9F5A007EBF4F /* libNXBootKit.a in Frameworks */, - A76D3041231D94FB0073D9FD /* IOKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -224,8 +170,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + A70934E92556DEC3006AA85B /* libNXBootKit_macOS.a in Frameworks */, A795B6BE21015FD80008820F /* IOKit.framework in Frameworks */, - A795B6BD21015FD30008820F /* libNXBootKit.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -233,35 +179,23 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + A7CD57D62556F594006AA85B /* AppCenterCrashes.xcframework in Frameworks */, A701175F20EE320F00B3D45B /* WebKit.framework in Frameworks */, A7AD2A1120F63A3500D1A400 /* libMobileGestalt.tbd in Frameworks */, - A73FDCF820FA9D08007EBF4F /* libNXBootKit.a in Frameworks */, - A76D3040231D94FB0073D9FD /* IOKit.framework in Frameworks */, - DC1D6A26516D93CA82A07B67 /* libPods-NXBoot.a in Frameworks */, + A73FDCF820FA9D08007EBF4F /* libNXBootKit_iOS.a in Frameworks */, + A7CD57CB2556F591006AA85B /* AppCenter.xcframework in Frameworks */, + A7CD57DF2556F5CB006AA85B /* IOKit.framework in Frameworks */, + A7CD57D12556F593006AA85B /* AppCenterAnalytics.xcframework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 422DE3698D5FA49548658B9F /* Pods */ = { - isa = PBXGroup; - children = ( - FFBE8FD3D1E4D094DAAD4809 /* Pods-NXBoot.debug.xcconfig */, - E3D56110D9C94294F18FD0FA /* Pods-NXBoot.release.xcconfig */, - 2B6AE413022444B03143DD80 /* Pods-NXBootMac.debug.xcconfig */, - 3BE916D220F1BE25EA35A720 /* Pods-NXBootMac.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; A717F07C211643ED000B4705 /* Shared */ = { isa = PBXGroup; children = ( A7458B4B20EF86C7008F4899 /* Payloads */, - A765643D20F4D265005EC7E6 /* AppConfig.h */, - A765643E20F4D265005EC7E6 /* AppConfig.m */, - A7190D2D21164A1000544CAD /* AppConfig+Private.h */, ); path = Shared; sourceTree = SOURCE_ROOT; @@ -275,52 +209,6 @@ path = NXBootCmd; sourceTree = ""; }; - A72B0F68210BC84B00309F0A /* NXBootMac */ = { - isa = PBXGroup; - children = ( - A72B0F7F210BCB6D00309F0A /* Misc */, - A72B0F7E210BCB5500309F0A /* Resources */, - A72B0F7C210BCB4800309F0A /* Sources */, - ); - path = NXBootMac; - sourceTree = ""; - }; - A72B0F7C210BCB4800309F0A /* Sources */ = { - isa = PBXGroup; - children = ( - A72B0F69210BC84B00309F0A /* AppDelegate.h */, - A72B0F6A210BC84B00309F0A /* AppDelegate.m */, - A717F07921164115000B4705 /* BootProfileEditViewController.h */, - A717F07A21164115000B4705 /* BootProfileEditViewController.m */, - A717F06D21162289000B4705 /* CheckboxCellView.h */, - A717F06E21162289000B4705 /* CheckboxCellView.m */, - A72B0F6C210BC84B00309F0A /* MainViewController.h */, - A72B0F6D210BC84B00309F0A /* MainViewController.m */, - A717F07621163FBA000B4705 /* Model.xcdatamodeld */, - ); - name = Sources; - sourceTree = ""; - }; - A72B0F7E210BCB5500309F0A /* Resources */ = { - isa = PBXGroup; - children = ( - A72B0F6F210BC84D00309F0A /* Assets.xcassets */, - A717F06A21160C25000B4705 /* Credits.rtf */, - A72B0F71210BC84D00309F0A /* Main.storyboard */, - ); - name = Resources; - sourceTree = ""; - }; - A72B0F7F210BCB6D00309F0A /* Misc */ = { - isa = PBXGroup; - children = ( - A72B0F74210BC84D00309F0A /* Info.plist */, - A72B0F75210BC84D00309F0A /* main.m */, - A72B0F77210BC84D00309F0A /* NXBootMac.entitlements */, - ); - name = Misc; - sourceTree = ""; - }; A73FDCE420FA9C5C007EBF4F /* NXBootKit */ = { isa = PBXGroup; children = ( @@ -328,6 +216,8 @@ A7388F742100F54A00A60C1B /* NXBootKit.m */, A73FDCF120FA9C72007EBF4F /* NXExec.h */, A73FDCEC20FA9C71007EBF4F /* NXExec.m */, + A7CD57E62556FB8B006AA85B /* NXHekateCustomizer.h */, + A7CD57E72556FB8B006AA85B /* NXHekateCustomizer.m */, A73FDCED20FA9C71007EBF4F /* NXUSBDevice.h */, A73FDCF220FA9C72007EBF4F /* NXUSBDevice.m */, A73FDCF320FA9C72007EBF4F /* NXUSBDeviceEnumerator.h */, @@ -336,48 +226,6 @@ path = NXBootKit; sourceTree = ""; }; - A73FDD1720FA9FBC007EBF4F /* NXBootLegacy */ = { - isa = PBXGroup; - children = ( - A7B494EC20FAA40D0006E028 /* Misc */, - A73FDD2020FAA08A007EBF4F /* Resources */, - A7B494ED20FAA57B0006E028 /* Sources */, - ); - path = NXBootLegacy; - sourceTree = ""; - }; - A73FDD2020FAA08A007EBF4F /* Resources */ = { - isa = PBXGroup; - children = ( - A78865E420FAAF6A00ECA2B2 /* AssetsLegacy.xcassets */, - A73FDD1B20FAA082007EBF4F /* LaunchScreen.storyboard */, - A73FDD1920FAA082007EBF4F /* Main.storyboard */, - ); - name = Resources; - sourceTree = ""; - }; - A7B494EC20FAA40D0006E028 /* Misc */ = { - isa = PBXGroup; - children = ( - A7B494EB20FAA4000006E028 /* NXBootLegacy.entitlements */, - ); - name = Misc; - sourceTree = ""; - }; - A7B494ED20FAA57B0006E028 /* Sources */ = { - isa = PBXGroup; - children = ( - A78865E120FAACBD00ECA2B2 /* GettingStartedLegacyViewController.h */, - A78865E220FAACBD00ECA2B2 /* GettingStartedLegacyViewController.m */, - A78865DD20FAA74500ECA2B2 /* UIAlertActionShim.h */, - A78865DE20FAA74500ECA2B2 /* UIAlertActionShim.m */, - A78865DA20FAA6E200ECA2B2 /* UIAlertControllerShim.h */, - A78865DB20FAA6E200ECA2B2 /* UIAlertControllerShim.m */, - A78865E020FAA7C500ECA2B2 /* Prefix.h */, - ); - name = Sources; - sourceTree = ""; - }; A7C4EA1220EE2AFA0026FFC9 /* Misc */ = { isa = PBXGroup; children = ( @@ -391,10 +239,13 @@ A7C4EA1320EE2B050026FFC9 /* Sources */ = { isa = PBXGroup; children = ( - A7FDBE1720EE27DD00E59587 /* AppDelegate.h */, - A7FDBE1820EE27DD00E59587 /* AppDelegate.m */, A78D523320F343EC0045FC4F /* AboutScreenViewController.h */, A78D523420F343EC0045FC4F /* AboutScreenViewController.m */, + A765643D20F4D265005EC7E6 /* AppConfig.h */, + A765643E20F4D265005EC7E6 /* AppConfig.m */, + A7190D2D21164A1000544CAD /* AppConfig+Private.h */, + A7FDBE1720EE27DD00E59587 /* AppDelegate.h */, + A7FDBE1820EE27DD00E59587 /* AppDelegate.m */, A7F0A88A20F4837F001C9D07 /* BootProfileEditViewController.h */, A7F0A88B20F4837F001C9D07 /* BootProfileEditViewController.m */, A7B7E1FB20EE738300F39094 /* BootProfilesViewController.h */, @@ -414,11 +265,8 @@ A7FDBE2D20EE2A1700E59587 /* Frameworks */, A717F07C211643ED000B4705 /* Shared */, A7FDBE1620EE27DD00E59587 /* NXBoot */, - A73FDD1720FA9FBC007EBF4F /* NXBootLegacy */, - A72B0F68210BC84B00309F0A /* NXBootMac */, A718F22F2100CD1C009BD181 /* NXBootCmd */, A73FDCE420FA9C5C007EBF4F /* NXBootKit */, - 422DE3698D5FA49548658B9F /* Pods */, A7FDBE1520EE27DD00E59587 /* Products */, ); sourceTree = ""; @@ -427,11 +275,9 @@ isa = PBXGroup; children = ( A7FDBE1420EE27DD00E59587 /* NXBoot.app */, - A73FDCE320FA9C5C007EBF4F /* libNXBootKit.a */, - A73FDD1520FA9F5A007EBF4F /* NXBootLegacy.app */, - A718F21C2100CBB7009BD181 /* libNXBootKit.a */, + A73FDCE320FA9C5C007EBF4F /* libNXBootKit_iOS.a */, A795B6B521015F880008820F /* nxboot */, - A72B0F67210BC84B00309F0A /* NXBoot.app */, + A70934E42556DEA0006AA85B /* libNXBootKit_macOS.a */, ); name = Products; sourceTree = ""; @@ -449,11 +295,12 @@ A7FDBE2D20EE2A1700E59587 /* Frameworks */ = { isa = PBXGroup; children = ( + A7CD57DE2556F5CB006AA85B /* IOKit.framework */, + A7CD57C22556F587006AA85B /* AppCenter.xcframework */, + A7CD57C32556F587006AA85B /* AppCenterAnalytics.xcframework */, + A7CD57C12556F587006AA85B /* AppCenterCrashes.xcframework */, A718F2332100CDC1009BD181 /* IOKit.framework */, - A76D303F231D94FB0073D9FD /* IOKit.framework */, A7AD2A1020F63A3500D1A400 /* libMobileGestalt.tbd */, - EC23C54F4535F403654E2FB8 /* libPods-NXBoot.a */, - 9B714C988E8454265B34B0A4 /* Pods_NXBootMac.framework */, A701175E20EE320F00B3D45B /* WebKit.framework */, ); name = Frameworks; @@ -473,57 +320,27 @@ }; /* End PBXGroup section */ -/* Begin PBXHeadersBuildPhase section */ - A718F21A2100CBB7009BD181 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - /* Begin PBXNativeTarget section */ - A718F21B2100CBB7009BD181 /* NXBootKitMac */ = { + A70934D82556DEA0006AA85B /* NXBootKit_macOS */ = { isa = PBXNativeTarget; - buildConfigurationList = A718F21D2100CBB7009BD181 /* Build configuration list for PBXNativeTarget "NXBootKitMac" */; + buildConfigurationList = A70934E12556DEA0006AA85B /* Build configuration list for PBXNativeTarget "NXBootKit_macOS" */; buildPhases = ( - A718F2182100CBB7009BD181 /* Sources */, - A718F2192100CBB7009BD181 /* Frameworks */, - A718F21A2100CBB7009BD181 /* Headers */, + A70934D92556DEA0006AA85B /* Sources */, + A70934DE2556DEA0006AA85B /* Frameworks */, + A70934E02556DEA0006AA85B /* CopyFiles */, ); buildRules = ( ); dependencies = ( ); - name = NXBootKitMac; - productName = NXBootKitMac; - productReference = A718F21C2100CBB7009BD181 /* libNXBootKit.a */; + name = NXBootKit_macOS; + productName = NXBootKit; + productReference = A70934E42556DEA0006AA85B /* libNXBootKit_macOS.a */; productType = "com.apple.product-type.library.static"; }; - A72B0F66210BC84B00309F0A /* NXBootMac */ = { + A73FDCE220FA9C5C007EBF4F /* NXBootKit_iOS */ = { isa = PBXNativeTarget; - buildConfigurationList = A72B0F7A210BC84D00309F0A /* Build configuration list for PBXNativeTarget "NXBootMac" */; - buildPhases = ( - AD256C831AF783E0AAE86ADA /* [CP] Check Pods Manifest.lock */, - A72B0F63210BC84B00309F0A /* Sources */, - A72B0F64210BC84B00309F0A /* Frameworks */, - A72B0F65210BC84B00309F0A /* Resources */, - 3DFE44204E12A05BA295B97D /* [CP] Embed Pods Frameworks */, - A717F06C21160CF5000B4705 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = NXBootMac; - productName = NXBootMac; - productReference = A72B0F67210BC84B00309F0A /* NXBoot.app */; - productType = "com.apple.product-type.application"; - }; - A73FDCE220FA9C5C007EBF4F /* NXBootKit */ = { - isa = PBXNativeTarget; - buildConfigurationList = A73FDCE920FA9C5C007EBF4F /* Build configuration list for PBXNativeTarget "NXBootKit" */; + buildConfigurationList = A73FDCE920FA9C5C007EBF4F /* Build configuration list for PBXNativeTarget "NXBootKit_iOS" */; buildPhases = ( A73FDCDF20FA9C5C007EBF4F /* Sources */, A73FDCE020FA9C5C007EBF4F /* Frameworks */, @@ -533,31 +350,14 @@ ); dependencies = ( ); - name = NXBootKit; + name = NXBootKit_iOS; productName = NXBootKit; - productReference = A73FDCE320FA9C5C007EBF4F /* libNXBootKit.a */; + productReference = A73FDCE320FA9C5C007EBF4F /* libNXBootKit_iOS.a */; productType = "com.apple.product-type.library.static"; }; - A73FDCF920FA9F5A007EBF4F /* NXBootLegacy */ = { - isa = PBXNativeTarget; - buildConfigurationList = A73FDD1220FA9F5A007EBF4F /* Build configuration list for PBXNativeTarget "NXBootLegacy" */; - buildPhases = ( - A73FDCFB20FA9F5A007EBF4F /* Sources */, - A73FDD0520FA9F5A007EBF4F /* Frameworks */, - A73FDD0B20FA9F5A007EBF4F /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = NXBootLegacy; - productName = NXBoot; - productReference = A73FDD1520FA9F5A007EBF4F /* NXBootLegacy.app */; - productType = "com.apple.product-type.application"; - }; - A795B6B421015F880008820F /* NXBootCmdMac */ = { + A795B6B421015F880008820F /* NXBootCmd_macOS */ = { isa = PBXNativeTarget; - buildConfigurationList = A795B6BB21015F880008820F /* Build configuration list for PBXNativeTarget "NXBootCmdMac" */; + buildConfigurationList = A795B6BB21015F880008820F /* Build configuration list for PBXNativeTarget "NXBootCmd_macOS" */; buildPhases = ( A795B6B121015F880008820F /* Sources */, A795B6B221015F880008820F /* Frameworks */, @@ -566,8 +366,9 @@ buildRules = ( ); dependencies = ( + A70934EB2556DEC3006AA85B /* PBXTargetDependency */, ); - name = NXBootCmdMac; + name = NXBootCmd_macOS; productName = NXBootCmd; productReference = A795B6B521015F880008820F /* nxboot */; productType = "com.apple.product-type.tool"; @@ -576,10 +377,10 @@ isa = PBXNativeTarget; buildConfigurationList = A7FDBE2A20EE27DE00E59587 /* Build configuration list for PBXNativeTarget "NXBoot" */; buildPhases = ( - 3C08ED910276C0BDC8112FF6 /* [CP] Check Pods Manifest.lock */, A7FDBE1020EE27DD00E59587 /* Sources */, A7FDBE1120EE27DD00E59587 /* Frameworks */, A7FDBE1220EE27DD00E59587 /* Resources */, + A7CD57CD2556F591006AA85B /* Embed Frameworks */, ); buildRules = ( ); @@ -596,30 +397,12 @@ A7FDBE0C20EE27DD00E59587 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1030; + LastUpgradeCheck = 1210; ORGANIZATIONNAME = "Oliver Kuckertz"; TargetAttributes = { - A718F21B2100CBB7009BD181 = { - CreatedOnToolsVersion = 9.4.1; - }; - A72B0F66210BC84B00309F0A = { - CreatedOnToolsVersion = 9.4.1; - SystemCapabilities = { - com.apple.Sandbox = { - enabled = 0; - }; - }; - }; A73FDCE220FA9C5C007EBF4F = { CreatedOnToolsVersion = 9.4.1; }; - A73FDCF920FA9F5A007EBF4F = { - SystemCapabilities = { - com.apple.iCloud = { - enabled = 0; - }; - }; - }; A795B6B421015F880008820F = { CreatedOnToolsVersion = 9.4.1; }; @@ -647,41 +430,14 @@ projectRoot = ""; targets = ( A7FDBE1320EE27DD00E59587 /* NXBoot */, - A73FDCF920FA9F5A007EBF4F /* NXBootLegacy */, - A72B0F66210BC84B00309F0A /* NXBootMac */, - A795B6B421015F880008820F /* NXBootCmdMac */, - A73FDCE220FA9C5C007EBF4F /* NXBootKit */, - A718F21B2100CBB7009BD181 /* NXBootKitMac */, + A795B6B421015F880008820F /* NXBootCmd_macOS */, + A73FDCE220FA9C5C007EBF4F /* NXBootKit_iOS */, + A70934D82556DEA0006AA85B /* NXBootKit_macOS */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - A72B0F65210BC84B00309F0A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - A72B0F70210BC84D00309F0A /* Assets.xcassets in Resources */, - A7190D2E21164BA700544CAD /* Payloads in Resources */, - A717F06B21160C25000B4705 /* Credits.rtf in Resources */, - A72B0F73210BC84D00309F0A /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A73FDD0B20FA9F5A007EBF4F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - A73FDD0D20FA9F5A007EBF4F /* PackageIcon.png in Resources */, - A78865E520FAAF6A00ECA2B2 /* AssetsLegacy.xcassets in Resources */, - A73FDD1D20FAA082007EBF4F /* Main.storyboard in Resources */, - A73FDD0E20FA9F5A007EBF4F /* Payloads in Resources */, - A73FDD1E20FAA082007EBF4F /* LaunchScreen.storyboard in Resources */, - A73FDD0F20FA9F5A007EBF4F /* Tutorial in Resources */, - A73FDD1120FA9F5A007EBF4F /* Assets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; A7FDBE1220EE27DD00E59587 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -697,85 +453,16 @@ }; /* End PBXResourcesBuildPhase section */ -/* Begin PBXShellScriptBuildPhase section */ - 3C08ED910276C0BDC8112FF6 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-NXBoot-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 3DFE44204E12A05BA295B97D /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-NXBootMac/Pods-NXBootMac-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-NXBootMac/Pods-NXBootMac-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NXBootMac/Pods-NXBootMac-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - AD256C831AF783E0AAE86ADA /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-NXBootMac-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - /* Begin PBXSourcesBuildPhase section */ - A718F2182100CBB7009BD181 /* Sources */ = { + A70934D92556DEA0006AA85B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A7388F762100F54A00A60C1B /* NXBootKit.m in Sources */, - A718F2212100CBD3009BD181 /* NXUSBDevice.m in Sources */, - A718F2202100CBD1009BD181 /* NXExec.m in Sources */, - A718F2222100CBD5009BD181 /* NXUSBDeviceEnumerator.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A72B0F63210BC84B00309F0A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - A717F07B21164115000B4705 /* BootProfileEditViewController.m in Sources */, - A717F07D21164403000B4705 /* AppConfig.m in Sources */, - A72B0F6E210BC84B00309F0A /* MainViewController.m in Sources */, - A72B0F76210BC84D00309F0A /* main.m in Sources */, - A72B0F6B210BC84B00309F0A /* AppDelegate.m in Sources */, - A717F06F21162289000B4705 /* CheckboxCellView.m in Sources */, - A717F07821163FBA000B4705 /* Model.xcdatamodeld in Sources */, + A7CD57E92556FB8B006AA85B /* NXHekateCustomizer.m in Sources */, + A70934DA2556DEA0006AA85B /* NXBootKit.m in Sources */, + A70934DB2556DEA0006AA85B /* NXUSBDevice.m in Sources */, + A70934DC2556DEA0006AA85B /* NXExec.m in Sources */, + A70934DD2556DEA0006AA85B /* NXUSBDeviceEnumerator.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -783,6 +470,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + A7CD57E82556FB8B006AA85B /* NXHekateCustomizer.m in Sources */, A7388F752100F54A00A60C1B /* NXBootKit.m in Sources */, A73FDCF720FA9C72007EBF4F /* NXUSBDevice.m in Sources */, A73FDCF420FA9C72007EBF4F /* NXExec.m in Sources */, @@ -790,24 +478,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - A73FDCFB20FA9F5A007EBF4F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - A78865E320FAACBD00ECA2B2 /* GettingStartedLegacyViewController.m in Sources */, - A78865DC20FAA6E200ECA2B2 /* UIAlertControllerShim.m in Sources */, - A73FDCFC20FA9F5A007EBF4F /* main.m in Sources */, - A73FDCFD20FA9F5A007EBF4F /* MainViewController.m in Sources */, - A78865DF20FAA74500ECA2B2 /* UIAlertActionShim.m in Sources */, - A73FDCFE20FA9F5A007EBF4F /* AppConfig.m in Sources */, - A73FDD0020FA9F5A007EBF4F /* AboutScreenViewController.m in Sources */, - A73FDD0120FA9F5A007EBF4F /* BootProfilesViewController.m in Sources */, - A73FDD0220FA9F5A007EBF4F /* AppDelegate.m in Sources */, - A73FDD0320FA9F5A007EBF4F /* BootProfileEditViewController.m in Sources */, - A73FDD0420FA9F5A007EBF4F /* Model.xcdatamodeld in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; A795B6B121015F880008820F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -834,6 +504,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + A70934EB2556DEC3006AA85B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = A70934D82556DEA0006AA85B /* NXBootKit_macOS */; + targetProxy = A70934EA2556DEC3006AA85B /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ A701176320EE677F00B3D45B /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -843,30 +521,6 @@ name = Main.storyboard; sourceTree = ""; }; - A72B0F71210BC84D00309F0A /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - A72B0F72210BC84D00309F0A /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - A73FDD1920FAA082007EBF4F /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - A73FDD1A20FAA082007EBF4F /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - A73FDD1B20FAA082007EBF4F /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - A73FDD1C20FAA082007EBF4F /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; A7FDBE2220EE27DE00E59587 /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( @@ -878,163 +532,73 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - A718F21E2100CBB7009BD181 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; - EXECUTABLE_PREFIX = lib; - MACOSX_DEPLOYMENT_TARGET = 10.10; - PRODUCT_NAME = NXBootKit; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VALID_ARCHS = x86_64; - }; - name = Debug; - }; - A718F21F2100CBB7009BD181 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; - EXECUTABLE_PREFIX = lib; - MACOSX_DEPLOYMENT_TARGET = 10.10; - PRODUCT_NAME = NXBootKit; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VALID_ARCHS = x86_64; - }; - name = Release; - }; - A72B0F78210BC84D00309F0A /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2B6AE413022444B03143DD80 /* Pods-NXBootMac.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "Mac Developer"; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = N3S4C3QL65; - INFOPLIST_FILE = NXBootMac/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.12; - PRODUCT_BUNDLE_IDENTIFIER = com.mologie.NXBootMac; - PRODUCT_NAME = NXBoot; - SDKROOT = macosx; - VALID_ARCHS = x86_64; - }; - name = Debug; - }; - A72B0F79210BC84D00309F0A /* Release */ = { + A70934E22556DEA0006AA85B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3BE916D220F1BE25EA35A720 /* Pods-NXBootMac.release.xcconfig */; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "Mac Developer"; CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = N3S4C3QL65; - INFOPLIST_FILE = NXBootMac/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( + GCC_PREPROCESSOR_DEFINITIONS = ( + "__OPEN_SOURCE__=1", "$(inherited)", - "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.12; - PRODUCT_BUNDLE_IDENTIFIER = com.mologie.NXBootMac; - PRODUCT_NAME = NXBoot; - SDKROOT = macosx; - VALID_ARCHS = x86_64; - }; - name = Release; - }; - A73FDCEA20FA9C5C007EBF4F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + MACOSX_DEPLOYMENT_TARGET = 10.10; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; SKIP_INSTALL = YES; - SYSTEM_FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/System/Frameworks"; - SYSTEM_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/System/Include"; TARGETED_DEVICE_FAMILY = "1,2"; - VALID_ARCHS = "arm64 armv7"; }; name = Debug; }; - A73FDCEB20FA9C5C007EBF4F /* Release */ = { + A70934E32556DEA0006AA85B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "__OPEN_SOURCE__=1", + "$(inherited)", + ); + MACOSX_DEPLOYMENT_TARGET = 10.10; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; SKIP_INSTALL = YES; - SYSTEM_FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/System/Frameworks"; - SYSTEM_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/System/Include"; TARGETED_DEVICE_FAMILY = "1,2"; - VALID_ARCHS = "arm64 armv7"; }; name = Release; }; - A73FDD1320FA9F5A007EBF4F /* Debug */ = { + A73FDCEA20FA9C5C007EBF4F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = N3S4C3QL65; - GCC_PREFIX_HEADER = NXBootLegacy/Prefix.h; GCC_PREPROCESSOR_DEFINITIONS = ( + "__OPEN_SOURCE__=1", "$(inherited)", - "NXBOOT_LEGACY=1", - ); - INFOPLIST_FILE = NXBoot/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.mologie.NXBootLegacy; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SYSTEM_FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/System/Frameworks"; + SKIP_INSTALL = YES; + SYSTEM_FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/System/Frameworks-$(PLATFORM_NAME)"; SYSTEM_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/System/Include"; TARGETED_DEVICE_FAMILY = "1,2"; - VALID_ARCHS = "arm64 armv7"; }; name = Debug; }; - A73FDD1420FA9F5A007EBF4F /* Release */ = { + A73FDCEB20FA9C5C007EBF4F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = N3S4C3QL65; - GCC_PREFIX_HEADER = NXBootLegacy/Prefix.h; GCC_PREPROCESSOR_DEFINITIONS = ( + "__OPEN_SOURCE__=1", "$(inherited)", - "NXBOOT_LEGACY=1", ); - INFOPLIST_FILE = NXBoot/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.mologie.NXBootLegacy; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SYSTEM_FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/System/Frameworks"; + SKIP_INSTALL = YES; + SYSTEM_FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/System/Frameworks-$(PLATFORM_NAME)"; SYSTEM_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/System/Include"; TARGETED_DEVICE_FAMILY = "1,2"; - VALID_ARCHS = "arm64 armv7"; }; name = Release; }; @@ -1054,7 +618,7 @@ PRODUCT_NAME = nxboot; PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = macosx; - VALID_ARCHS = x86_64; + SUPPORTED_PLATFORMS = macosx; }; name = Debug; }; @@ -1072,7 +636,7 @@ PRODUCT_NAME = nxboot; PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = macosx; - VALID_ARCHS = x86_64; + SUPPORTED_PLATFORMS = macosx; }; name = Release; }; @@ -1102,6 +666,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -1127,6 +692,8 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -1159,6 +726,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -1178,6 +746,8 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; @@ -1186,76 +756,79 @@ }; A7FDBE2B20EE27DE00E59587 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FFBE8FD3D1E4D094DAAD4809 /* Pods-NXBoot.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO; CODE_SIGN_ENTITLEMENTS = NXBoot/NXBoot.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 7; DEVELOPMENT_TEAM = N3S4C3QL65; + GCC_PREPROCESSOR_DEFINITIONS = ( + "__OPEN_SOURCE__=1", + "COCOAPODS=1", + "$(inherited)", + ); INFOPLIST_FILE = NXBoot/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); + MARKETING_VERSION = 0.2.0; PRODUCT_BUNDLE_IDENTIFIER = com.mologie.NXBoot; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; - SYSTEM_FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/System/Frameworks"; + SUPPORTS_MACCATALYST = YES; + SYSTEM_FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/System/Frameworks-$(PLATFORM_NAME)"; SYSTEM_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/System/Include"; TARGETED_DEVICE_FAMILY = "1,2"; - VALID_ARCHS = "arm64 armv7"; }; name = Debug; }; A7FDBE2C20EE27DE00E59587 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E3D56110D9C94294F18FD0FA /* Pods-NXBoot.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO; CODE_SIGN_ENTITLEMENTS = NXBoot/NXBoot.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 7; DEVELOPMENT_TEAM = N3S4C3QL65; + GCC_PREPROCESSOR_DEFINITIONS = ( + "__OPEN_SOURCE__=1", + "COCOAPODS=1", + "$(inherited)", + ); INFOPLIST_FILE = NXBoot/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); + MARKETING_VERSION = 0.2.0; PRODUCT_BUNDLE_IDENTIFIER = com.mologie.NXBoot; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; - SYSTEM_FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/System/Frameworks"; + SUPPORTS_MACCATALYST = YES; + SYSTEM_FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/System/Frameworks-$(PLATFORM_NAME)"; SYSTEM_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/System/Include"; TARGETED_DEVICE_FAMILY = "1,2"; - VALID_ARCHS = "arm64 armv7"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - A718F21D2100CBB7009BD181 /* Build configuration list for PBXNativeTarget "NXBootKitMac" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A718F21E2100CBB7009BD181 /* Debug */, - A718F21F2100CBB7009BD181 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - A72B0F7A210BC84D00309F0A /* Build configuration list for PBXNativeTarget "NXBootMac" */ = { + A70934E12556DEA0006AA85B /* Build configuration list for PBXNativeTarget "NXBootKit_macOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - A72B0F78210BC84D00309F0A /* Debug */, - A72B0F79210BC84D00309F0A /* Release */, + A70934E22556DEA0006AA85B /* Debug */, + A70934E32556DEA0006AA85B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - A73FDCE920FA9C5C007EBF4F /* Build configuration list for PBXNativeTarget "NXBootKit" */ = { + A73FDCE920FA9C5C007EBF4F /* Build configuration list for PBXNativeTarget "NXBootKit_iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( A73FDCEA20FA9C5C007EBF4F /* Debug */, @@ -1264,16 +837,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - A73FDD1220FA9F5A007EBF4F /* Build configuration list for PBXNativeTarget "NXBootLegacy" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A73FDD1320FA9F5A007EBF4F /* Debug */, - A73FDD1420FA9F5A007EBF4F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - A795B6BB21015F880008820F /* Build configuration list for PBXNativeTarget "NXBootCmdMac" */ = { + A795B6BB21015F880008820F /* Build configuration list for PBXNativeTarget "NXBootCmd_macOS" */ = { isa = XCConfigurationList; buildConfigurations = ( A795B6B921015F880008820F /* Debug */, @@ -1303,16 +867,6 @@ /* End XCConfigurationList section */ /* Begin XCVersionGroup section */ - A717F07621163FBA000B4705 /* Model.xcdatamodeld */ = { - isa = XCVersionGroup; - children = ( - A717F07721163FBA000B4705 /* Model.xcdatamodel */, - ); - currentVersion = A717F07721163FBA000B4705 /* Model.xcdatamodel */; - path = Model.xcdatamodeld; - sourceTree = ""; - versionGroupType = wrapper.xcdatamodel; - }; A7F0A88D20F48492001C9D07 /* Model.xcdatamodeld */ = { isa = XCVersionGroup; children = ( diff --git a/NXBoot.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/NXBoot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from NXBoot.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to NXBoot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/NXBoot.xcodeproj/xcshareddata/xcschemes/NXBoot.xcscheme b/NXBoot.xcodeproj/xcshareddata/xcschemes/NXBoot.xcscheme index 3296f04..e15ffea 100644 --- a/NXBoot.xcodeproj/xcshareddata/xcschemes/NXBoot.xcscheme +++ b/NXBoot.xcodeproj/xcshareddata/xcschemes/NXBoot.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - @@ -29,17 +29,6 @@ shouldUseLaunchSchemeArgsEnv = "YES"> - - - - - - - - diff --git a/NXBoot.xcodeproj/xcshareddata/xcschemes/NXBootKit.xcscheme b/NXBoot.xcodeproj/xcshareddata/xcschemes/NXBootKit.xcscheme index 5c1c2ef..631a0ab 100644 --- a/NXBoot.xcodeproj/xcshareddata/xcschemes/NXBootKit.xcscheme +++ b/NXBoot.xcodeproj/xcshareddata/xcschemes/NXBootKit.xcscheme @@ -1,6 +1,6 @@ + + + + @@ -29,8 +43,6 @@ shouldUseLaunchSchemeArgsEnv = "YES"> - - - - - - - - diff --git a/NXBoot.xcodeproj/xcshareddata/xcschemes/NXBootKitAll.xcscheme b/NXBoot.xcodeproj/xcshareddata/xcschemes/NXBootKitAll.xcscheme deleted file mode 100644 index 5bf9605..0000000 --- a/NXBoot.xcodeproj/xcshareddata/xcschemes/NXBootKitAll.xcscheme +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/NXBoot.xcodeproj/xcshareddata/xcschemes/NXBootKitMac.xcscheme b/NXBoot.xcodeproj/xcshareddata/xcschemes/NXBootKit_iOS.xcscheme similarity index 71% rename from NXBoot.xcodeproj/xcshareddata/xcschemes/NXBootKitMac.xcscheme rename to NXBoot.xcodeproj/xcshareddata/xcschemes/NXBootKit_iOS.xcscheme index 3bb5af4..b60cb16 100644 --- a/NXBoot.xcodeproj/xcshareddata/xcschemes/NXBootKitMac.xcscheme +++ b/NXBoot.xcodeproj/xcshareddata/xcschemes/NXBootKit_iOS.xcscheme @@ -1,6 +1,6 @@ @@ -29,8 +29,6 @@ shouldUseLaunchSchemeArgsEnv = "YES"> - - - - - - - - diff --git a/NXBoot.xcodeproj/xcshareddata/xcschemes/NXBootLegacy.xcscheme b/NXBoot.xcodeproj/xcshareddata/xcschemes/NXBootLegacy.xcscheme deleted file mode 100644 index b1c29f5..0000000 --- a/NXBoot.xcodeproj/xcshareddata/xcschemes/NXBootLegacy.xcscheme +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/NXBoot.xcodeproj/xcshareddata/xcschemes/NXBootMac.xcscheme b/NXBoot.xcodeproj/xcshareddata/xcschemes/NXBootMac.xcscheme deleted file mode 100644 index e12b7c3..0000000 --- a/NXBoot.xcodeproj/xcshareddata/xcschemes/NXBootMac.xcscheme +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/NXBoot.xcworkspace/contents.xcworkspacedata b/NXBoot.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 195d334..0000000 --- a/NXBoot.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/NXBoot.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/NXBoot.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index 08de0be..0000000 --- a/NXBoot.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded - - - diff --git a/NXBoot/AboutScreenViewController.m b/NXBoot/AboutScreenViewController.m index 8e8ca05..1193b3b 100644 --- a/NXBoot/AboutScreenViewController.m +++ b/NXBoot/AboutScreenViewController.m @@ -15,20 +15,12 @@ - (void)viewDidLoad { [super viewDidLoad]; NSDictionary *info = [NSBundle mainBundle].infoDictionary; -#ifndef NXBOOT_LEGACY self.versionLabel.text = [NSString stringWithFormat:@"Version %@", info[@"CFBundleShortVersionString"]]; -#else - self.versionLabel.text = [NSString stringWithFormat:@"Legacy Version %@", info[@"CFBundleShortVersionString"]]; -#endif } - (IBAction)homepageButtonTapped:(id)sender { NSURL *homepageURL = [NSURL URLWithString:@"https://mologie.github.io/nxboot/"]; -#ifndef NXBOOT_LEGACY [[UIApplication sharedApplication] openURL:homepageURL options:@{} completionHandler:nil]; -#else - [[UIApplication sharedApplication] openURL:homepageURL]; -#endif } @end diff --git a/Shared/AppConfig+Private.h b/NXBoot/AppConfig+Private.h similarity index 100% rename from Shared/AppConfig+Private.h rename to NXBoot/AppConfig+Private.h diff --git a/Shared/AppConfig.h b/NXBoot/AppConfig.h similarity index 100% rename from Shared/AppConfig.h rename to NXBoot/AppConfig.h diff --git a/Shared/AppConfig.m b/NXBoot/AppConfig.m similarity index 100% rename from Shared/AppConfig.m rename to NXBoot/AppConfig.m diff --git a/NXBoot/AppDelegate.m b/NXBoot/AppDelegate.m index 2b90a6b..ef4b5a8 100644 --- a/NXBoot/AppDelegate.m +++ b/NXBoot/AppDelegate.m @@ -5,11 +5,9 @@ #import "AppDelegate.h" -#ifndef NXBOOT_LEGACY @import AppCenter; @import AppCenterAnalytics; @import AppCenterCrashes; -#endif @interface AppDelegate () @end @@ -17,9 +15,7 @@ @interface AppDelegate () @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { -#ifndef NXBOOT_LEGACY [MSAppCenter start:@"0665136b-48d8-4d13-98f9-1d21a3dbcd59" withServices:@[[MSAnalytics class], [MSCrashes class]]]; -#endif return YES; } diff --git a/NXBoot/Assets.xcassets/Accent.colorset/Contents.json b/NXBoot/Assets.xcassets/Accent.colorset/Contents.json new file mode 100644 index 0000000..b930e02 --- /dev/null +++ b/NXBoot/Assets.xcassets/Accent.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.883", + "green" : "0.732", + "red" : "0.001" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.326", + "green" : "0.372", + "red" : "0.998" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/NXBoot/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x.png b/NXBoot/Assets.xcassets/AppIcon.appiconset/AppStore@2x.png similarity index 100% rename from NXBoot/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x.png rename to NXBoot/Assets.xcassets/AppIcon.appiconset/AppStore@2x.png diff --git a/NXBoot/Assets.xcassets/AppIcon.appiconset/Contents.json b/NXBoot/Assets.xcassets/AppIcon.appiconset/Contents.json index ca11bc7..5e02308 100644 --- a/NXBoot/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/NXBoot/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,116 +1,176 @@ { "images" : [ { - "size" : "20x20", - "idiom" : "iphone", "filename" : "Icon-20@2x.png", - "scale" : "2x" + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" }, { - "size" : "20x20", - "idiom" : "iphone", "filename" : "Icon-20@3x.png", - "scale" : "3x" + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" }, { - "size" : "29x29", - "idiom" : "iphone", "filename" : "Icon-29@2x.png", - "scale" : "2x" + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" }, { - "size" : "29x29", - "idiom" : "iphone", "filename" : "Icon-29@3x.png", - "scale" : "3x" + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" }, { - "size" : "40x40", - "idiom" : "iphone", "filename" : "Icon-40@2x.png", - "scale" : "2x" + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" }, { - "size" : "40x40", - "idiom" : "iphone", "filename" : "Icon-40@3x.png", - "scale" : "3x" + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" }, { - "size" : "60x60", - "idiom" : "iphone", "filename" : "Icon-60@2x.png", - "scale" : "2x" + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" }, { - "size" : "60x60", - "idiom" : "iphone", "filename" : "Icon-60@3x.png", - "scale" : "3x" + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" }, { - "size" : "20x20", - "idiom" : "ipad", "filename" : "Icon-20.png", - "scale" : "1x" + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" }, { - "size" : "20x20", - "idiom" : "ipad", "filename" : "Icon-20@2x.png", - "scale" : "2x" + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" }, { - "size" : "29x29", - "idiom" : "ipad", "filename" : "Icon-29.png", - "scale" : "1x" + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" }, { - "size" : "29x29", - "idiom" : "ipad", "filename" : "Icon-29@2x.png", - "scale" : "2x" + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" }, { - "size" : "40x40", - "idiom" : "ipad", "filename" : "Icon-40.png", - "scale" : "1x" + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" }, { - "size" : "40x40", - "idiom" : "ipad", "filename" : "Icon-40@2x.png", - "scale" : "2x" + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" }, { - "size" : "76x76", - "idiom" : "ipad", "filename" : "Icon-76.png", - "scale" : "1x" + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" }, { - "size" : "76x76", - "idiom" : "ipad", "filename" : "Icon-76@2x.png", - "scale" : "2x" + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" }, { - "size" : "83.5x83.5", - "idiom" : "ipad", "filename" : "Icon-83.5@2x.png", - "scale" : "2x" + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" }, { - "size" : "1024x1024", + "filename" : "AppStore@2x.png", "idiom" : "ios-marketing", - "filename" : "iTunesArtwork@2x.png", - "scale" : "1x" + "scale" : "1x", + "size" : "1024x1024" + }, + { + "filename" : "MacIcon-16.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "16x16" + }, + { + "filename" : "MacIcon-16@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "16x16" + }, + { + "filename" : "MacIcon-32.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "32x32" + }, + { + "filename" : "MacIcon-32@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "32x32" + }, + { + "filename" : "MacIcon-128.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "128x128" + }, + { + "filename" : "MacIcon-128@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "128x128" + }, + { + "filename" : "MacIcon-256.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "256x256" + }, + { + "filename" : "MacIcon-256@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "256x256" + }, + { + "filename" : "MacAppStore.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "512x512" + }, + { + "filename" : "MacAppStore@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "512x512" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } } diff --git a/NXBoot/Assets.xcassets/AppIcon.appiconset/MacAppStore.png b/NXBoot/Assets.xcassets/AppIcon.appiconset/MacAppStore.png new file mode 100644 index 0000000..25557ca Binary files /dev/null and b/NXBoot/Assets.xcassets/AppIcon.appiconset/MacAppStore.png differ diff --git a/NXBoot/Assets.xcassets/AppIcon.appiconset/MacAppStore@2x.png b/NXBoot/Assets.xcassets/AppIcon.appiconset/MacAppStore@2x.png new file mode 100644 index 0000000..d3a3ceb Binary files /dev/null and b/NXBoot/Assets.xcassets/AppIcon.appiconset/MacAppStore@2x.png differ diff --git a/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-128.png b/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-128.png new file mode 100644 index 0000000..5c55a4e Binary files /dev/null and b/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-128.png differ diff --git a/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-128@2x.png b/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-128@2x.png new file mode 100644 index 0000000..1720fd5 Binary files /dev/null and b/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-128@2x.png differ diff --git a/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-16.png b/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-16.png new file mode 100644 index 0000000..429817d Binary files /dev/null and b/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-16.png differ diff --git a/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-16@2x.png b/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-16@2x.png new file mode 100644 index 0000000..7c7ad69 Binary files /dev/null and b/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-16@2x.png differ diff --git a/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-256.png b/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-256.png new file mode 100644 index 0000000..1720fd5 Binary files /dev/null and b/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-256.png differ diff --git a/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-256@2x.png b/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-256@2x.png new file mode 100644 index 0000000..25557ca Binary files /dev/null and b/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-256@2x.png differ diff --git a/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-32.png b/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-32.png new file mode 100644 index 0000000..7c7ad69 Binary files /dev/null and b/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-32.png differ diff --git a/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-32@2x.png b/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-32@2x.png new file mode 100644 index 0000000..d3a76e0 Binary files /dev/null and b/NXBoot/Assets.xcassets/AppIcon.appiconset/MacIcon-32@2x.png differ diff --git a/NXBoot/Assets.xcassets/Background.colorset/Contents.json b/NXBoot/Assets.xcassets/Background.colorset/Contents.json new file mode 100644 index 0000000..7175aa0 --- /dev/null +++ b/NXBoot/Assets.xcassets/Background.colorset/Contents.json @@ -0,0 +1,28 @@ +{ + "colors" : [ + { + "color" : { + "platform" : "ios", + "reference" : "systemBackgroundColor" + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "platform" : "ios", + "reference" : "systemBackgroundColor" + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/NXBoot/Assets.xcassets/Contents.json b/NXBoot/Assets.xcassets/Contents.json index da4a164..73c0059 100644 --- a/NXBoot/Assets.xcassets/Contents.json +++ b/NXBoot/Assets.xcassets/Contents.json @@ -1,6 +1,6 @@ { "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/NXBoot/Base.lproj/LaunchScreen.storyboard b/NXBoot/Base.lproj/LaunchScreen.storyboard index 105065d..153da0a 100644 --- a/NXBoot/Base.lproj/LaunchScreen.storyboard +++ b/NXBoot/Base.lproj/LaunchScreen.storyboard @@ -1,11 +1,10 @@ - - - - + + - + + @@ -15,7 +14,7 @@ - + @@ -33,8 +32,9 @@ - + + @@ -43,4 +43,12 @@ + + + + + + + + diff --git a/NXBoot/Base.lproj/Main.storyboard b/NXBoot/Base.lproj/Main.storyboard index 2a2ee35..aeaa834 100644 --- a/NXBoot/Base.lproj/Main.storyboard +++ b/NXBoot/Base.lproj/Main.storyboard @@ -1,14 +1,12 @@ - - - - + + - - - + + + @@ -19,50 +17,50 @@ - - - + + + - + - + - + - + - + - + @@ -72,29 +70,29 @@ - + - + - + @@ -104,22 +102,24 @@ - + - + + + @@ -128,7 +128,7 @@ - + @@ -166,40 +166,38 @@ - + + @@ -214,7 +212,6 @@ CVE-2018-6242 has been discovered and implemented by Kate Temkin (ktemkin.com) a - @@ -238,52 +235,52 @@ CVE-2018-6242 has been discovered and implemented by Kate Temkin (ktemkin.com) a - - - + + + - + - + - + - + @@ -308,36 +305,37 @@ CVE-2018-6242 has been discovered and implemented by Kate Temkin (ktemkin.com) a - - - + + + - + - + + - + @@ -345,21 +343,21 @@ CVE-2018-6242 has been discovered and implemented by Kate Temkin (ktemkin.com) a The relocator is a small (0.1 - 3 KiB) file, which prepares the payload for execution. Most payloads want 'intermezzo,' Coreboot/Linux want 'cbfs.' - + - + - + @@ -375,17 +373,17 @@ CVE-2018-6242 has been discovered and implemented by Kate Temkin (ktemkin.com) a This file is usually at least 10 KiB large. Intermezzo's max. payload size is 179 KiB. Custom relocators such as 'cbfs' for Coreboot/Linux have different size limits. - + - + - + @@ -427,10 +425,10 @@ CVE-2018-6242 has been discovered and implemented by Kate Temkin (ktemkin.com) a - - + + - + @@ -449,12 +447,12 @@ CVE-2018-6242 has been discovered and implemented by Kate Temkin (ktemkin.com) a - + @@ -485,8 +483,9 @@ CVE-2018-6242 has been discovered and implemented by Kate Temkin (ktemkin.com) a - - + + + @@ -497,7 +496,6 @@ CVE-2018-6242 has been discovered and implemented by Kate Temkin (ktemkin.com) a - @@ -514,12 +512,30 @@ CVE-2018-6242 has been discovered and implemented by Kate Temkin (ktemkin.com) a + + + + + + + + + + + + + + + + + + + + + - - - diff --git a/NXBoot/BootProfileEditViewController.m b/NXBoot/BootProfileEditViewController.m index e539b5f..2d4493c 100644 --- a/NXBoot/BootProfileEditViewController.m +++ b/NXBoot/BootProfileEditViewController.m @@ -184,7 +184,6 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath } }]]; } -#ifndef NXBOOT_LEGACY [alert addAction:[UIAlertAction actionWithTitle:@"Import from Files" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { [self promptFileSelectionWithCompletion:^(NSURL *url) { if (url) { @@ -207,12 +206,9 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath } }]; }]]; -#endif [alert addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil]]; -#ifndef NXBOOT_LEGACY alert.popoverPresentationController.sourceView = self.tableView; alert.popoverPresentationController.sourceRect = [self.tableView rectForRowAtIndexPath:indexPath]; -#endif [self presentViewController:alert animated:YES completion:nil]; break; } @@ -258,7 +254,6 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath } }]]; } -#ifndef NXBOOT_LEGACY [alert addAction:[UIAlertAction actionWithTitle:@"Import from Files" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { [self promptFileSelectionWithCompletion:^(NSURL *url) { if (url) { @@ -278,12 +273,9 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath } }]; }]]; -#endif [alert addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil]]; -#ifndef NXBOOT_LEGACY alert.popoverPresentationController.sourceView = self.tableView; alert.popoverPresentationController.sourceRect = [self.tableView rectForRowAtIndexPath:indexPath]; -#endif [self presentViewController:alert animated:YES completion:nil]; break; } @@ -292,7 +284,6 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath #pragma mark - File Selection (iOS 10 and later) -#ifndef NXBOOT_LEGACY - (void)promptFileSelectionWithCompletion:(void(^)(NSURL *))completionBlock { NSArray *docTypes = @[@"public.item", @"public.data"]; UIDocumentPickerViewController *picker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:docTypes inMode:UIDocumentPickerModeImport]; @@ -301,7 +292,8 @@ - (void)promptFileSelectionWithCompletion:(void(^)(NSURL *))completionBlock { [self presentViewController:picker animated:YES completion:nil]; } -- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url { +- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentsAtURLs:(nonnull NSArray *)urls { + NSURL *url = urls.firstObject; if (self.nextFilePromptCompletionHandler) { self.nextFilePromptCompletionHandler(url); self.nextFilePromptCompletionHandler = nil; @@ -314,7 +306,6 @@ - (void)documentPickerWasCancelled:(UIDocumentPickerViewController *)controller self.nextFilePromptCompletionHandler = nil; } } -#endif #pragma mark - Imported Files diff --git a/NXBoot/GettingStartedViewController.m b/NXBoot/GettingStartedViewController.m index 6a0517a..7675edf 100644 --- a/NXBoot/GettingStartedViewController.m +++ b/NXBoot/GettingStartedViewController.m @@ -60,11 +60,11 @@ - (void)viewDidLayoutSubviews { self.webView.scrollView.contentInset = UIEdgeInsetsMake(topMargin, 0, bottomMargin, 0); // adjust scrollbar position - UIEdgeInsets scrollIndicatorInsets = self.webView.scrollView.scrollIndicatorInsets; + UIEdgeInsets scrollIndicatorInsets = self.webView.scrollView.verticalScrollIndicatorInsets; CGFloat scrollPadding = scrollIndicatorInsets.right; scrollIndicatorInsets.top = topMargin + scrollPadding; scrollIndicatorInsets.bottom = bottomMargin + scrollPadding; - self.webView.scrollView.scrollIndicatorInsets = scrollIndicatorInsets; + self.webView.scrollView.verticalScrollIndicatorInsets = scrollIndicatorInsets; [self.webView layoutIfNeeded]; } @@ -89,8 +89,7 @@ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(N } else { [self.activityIndicatorView stopAnimating]; - [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; - [UIView animateWithDuration:0.5 animations:^{ + [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ self.progressView.alpha = 0.0; } completion:^(BOOL finished) { if (finished) { diff --git a/NXBoot/Info.plist b/NXBoot/Info.plist index 381e916..661dcb0 100644 --- a/NXBoot/Info.plist +++ b/NXBoot/Info.plist @@ -35,13 +35,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.2.0 + $(MARKETING_VERSION) CFBundleVersion - 6 - LSRequiresIPhoneOS - - LSSupportsOpeningDocumentsInPlace - + $(CURRENT_PROJECT_VERSION) + LSApplicationCategoryType + public.app-category.utilities UIFileSharingEnabled UILaunchStoryboardName diff --git a/NXBoot/MainViewController.m b/NXBoot/MainViewController.m index 796685a..64773f6 100644 --- a/NXBoot/MainViewController.m +++ b/NXBoot/MainViewController.m @@ -10,9 +10,7 @@ #import "NXExec.h" #import "NXUSBDeviceEnumerator.h" -#ifndef NXBOOT_LEGACY @import AppCenterAnalytics; -#endif @interface MainViewController () @property (nonatomic, strong) AppConfig *config; @@ -138,57 +136,43 @@ - (void)bootExecSelected { assert(self.device != nil); self.bootStatus = @"Device connected! Booting..."; -#ifndef NXBOOT_LEGACY // analytics: log start event for timing // the end event and result will also be logged. [MSAnalytics trackEvent:@"SwitchBootStart"]; -#endif dispatch_async(dispatch_get_main_queue(), ^{ NSString *error = nil; if (!self.device) { -#ifndef NXBOOT_LEGACY [MSAnalytics trackEvent:@"SwitchBootEnd" withProperties:@{@"Status": @"Canceled", @"Reason": @"Device Disappeared"}]; -#endif return; } if (!self.active) { -#ifndef NXBOOT_LEGACY [MSAnalytics trackEvent:@"SwitchBootEnd" withProperties:@{@"Status": @"Canceled", @"Reason": @"User Canceled"}]; -#endif return; } FLBootProfile *profile = self.bootProfile; if (!profile) { self.bootStatus = @"Error: No boot profile is selected."; -#ifndef NXBOOT_LEGACY [MSAnalytics trackEvent:@"SwitchBootEnd" withProperties:@{@"Status": @"Canceled", @"Reason": @"No Boot Profile Selected"}]; -#endif return; } NSData *relocator = [self relocatorForProfile:profile]; NSData *bootImage = [self bootImageForProfile:profile]; if (!relocator || !bootImage) { -#ifndef NXBOOT_LEGACY [MSAnalytics trackEvent:@"SwitchBootEnd" withProperties:@{@"Status": @"Canceled", @"Reason": @"Boot Profile Invalid"}]; -#endif return; } if (NXExec(self.device->_intf, relocator, bootImage, &error)) { self.bootStatus = @"Success! 🎉"; -#ifndef NXBOOT_LEGACY // analytics: log success events [MSAnalytics trackEvent:@"SwitchBootEnd" withProperties:@{@"Status": @"Success"}]; [MSAnalytics trackEvent:@"SwitchBootSuccess"]; -#endif } else { self.bootStatus = [NSString stringWithFormat:@"Error: %@", error]; -#ifndef NXBOOT_LEGACY // analytics: log error events and error messages (these contain technical info only) [MSAnalytics trackEvent:@"SwitchBootEnd" withProperties:@{@"Status": @"Error", @"Messaage": error}]; [MSAnalytics trackEvent:@"SwitchBootFailure" withProperties:@{@"Messaage": error}]; -#endif } }); } @@ -287,10 +271,9 @@ - (NSData *)bootImageForProfile:(FLBootProfile *)profile { - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { [self bootStop]; -#ifndef NXBOOT_LEGACY + // analytics: log navigation events from the main screen [MSAnalytics trackEvent:@"Navigation" withProperties:@{@"ID": [NSString stringWithFormat:@"Main-%@", segue.identifier]}]; -#endif } #pragma mark - NXUSBDeviceEnumeratorDelegate diff --git a/NXBoot/NXBoot.entitlements b/NXBoot/NXBoot.entitlements index c280ba7..4275df1 100644 --- a/NXBoot/NXBoot.entitlements +++ b/NXBoot/NXBoot.entitlements @@ -2,9 +2,11 @@ - com.apple.developer.icloud-container-identifiers - - com.apple.developer.ubiquity-kvstore-identifier - $(TeamIdentifierPrefix)$(CFBundleIdentifier) + com.apple.security.app-sandbox + + com.apple.security.device.usb + + com.apple.security.network.client + diff --git a/NXBoot/NXBootJailbreak.entitlements b/NXBoot/NXBootJailbreak.entitlements index 78085a9..dfdfb56 100644 --- a/NXBoot/NXBootJailbreak.entitlements +++ b/NXBoot/NXBootJailbreak.entitlements @@ -10,10 +10,6 @@ N3S4C3QL65.com.mologie.NXBoot - com.apple.developer.icloud-container-identifiers - - com.apple.developer.ubiquity-kvstore-identifier - N3S4C3QL65.com.mologie.NXBoot platform-application diff --git a/NXBootCmd/main.m b/NXBootCmd/main.m index 056e420..263b59a 100644 --- a/NXBootCmd/main.m +++ b/NXBootCmd/main.m @@ -9,23 +9,29 @@ #import #import "NXBootKit.h" #import "NXExec.h" +#import "NXHekateCustomizer.h" #import "NXUSBDevice.h" #import "NXUSBDeviceEnumerator.h" -#define ESC_RED "\033[1;31m" -#define ESC_GREEN "\033[1;32m" -#define ESC "\033[0m" -#define ESC_LN ESC "\n" +#define ESC_RED "\033[1;31m" +#define ESC_GREEN "\033[1;32m" +#define ESC "\033[0m" +#define ESC_LN ESC "\n" + +#define COPYRIGHT_STR "Copyright 2018-2020 Oliver Kuckertz " +#define LICENSE_STR "Licensed under the GPLv3. https://github.com/mologie/nxboot#license" static volatile sig_atomic_t gTerm = 0; @interface NXBoot : NSObject + @property (strong, nonatomic) NSData *relocator; @property (strong, nonatomic) NSData *image; @property (strong, nonatomic) NXUSBDeviceEnumerator *usbEnum; @property (assign, nonatomic) BOOL daemon; // keep running after handling a device @property (assign, nonatomic) BOOL keepReading; @property (assign, nonatomic) BOOL lastBootFailed; + @end @implementation NXBoot @@ -105,18 +111,35 @@ - (void)usbDeviceEnumerator:(NXUSBDeviceEnumerator *)deviceEnum deviceError:(NSS @end -static void printHelp() { +static void printUsage() { fprintf(stderr, - "usage: nxboot [-v] [-d|-k] [-r ] \n" + "usage: nxboot [-v] [-d|-k] [-r ] [--hekate ] \n" " -v: enable verbose debug output\n" " -d: daemon mode, don't stop after handling the first device\n" " -k: read data from USB EP1 to stdout after payload execution (conflicts with -d)\n" " -r: use a custom relocator (default: embedded Fusée/intermezzo)\n" "\n" - "example for Coreboot/Linux: nxboot -r cbfs.bin coreboot.rom\n" + "advanced Hekate options:\n" + " --hekate menu: enter Hekate menu regardless of autoboot setting\n" + " --hekate id : boot entry with matching 'id' value\n" + " --hekate entry : boot hekate_ipl.ini entry with matching index\n" + " --hekate ums sd|[emu-]boot0|[emu-]boot1|[emu-]gpp: start USB storage host\n" + " --hekate-log: display launch log\n" + "\n" + "example for Hekate USB storage: nxboot --hekate ums sd hekate_ctcaer_5.3.4.bin\n" + "example for Coreboot/L4T: nxboot -r cbfs.bin coreboot.rom\n" "for updates visit: https://mologie.github.io/nxboot/\n"); } +static void printHelp() { + fprintf(stderr, + "\n" + "NXBoot is a Fusée/ShofEL2 implementation for macOS and iOS.\n" + "It supports any Fusée payload and Coreboot/CBFS.\n" + COPYRIGHT_STR "\n" LICENSE_STR "\n\n"); + printUsage(); +} + static void onSignal(int sig) { gTerm = 1; dispatch_async(dispatch_get_main_queue(), ^{ @@ -130,22 +153,24 @@ int main(int argc, char *argv[]) { NXBootKitDebugEnabled = NO; NXBoot *cmdTool = [[NXBoot alloc] init]; + NXHekateCustomizer *hekate = [[NXHekateCustomizer alloc] init]; + BOOL hekateExpected = NO; + BOOL hekateBootConfigured = NO; fprintf(stderr, "nxboot %s build %d\n", NXBOOT_VERSION, NXBOOT_BUILDNO); for (int i = 1, pos = 0; i < argc; i++) { if (argv[i][0] == '-') { - if (strlen(argv[i]) != 2) { - fprintf(stderr, ESC_RED "error: invalid argument %s" ESC_LN, argv[i]); - printHelp(); + if (strlen(argv[i]) < 2) { + fprintf(stderr, ESC_RED "error: incomplete argument %s" ESC_LN, argv[i]); + printUsage(); return 1; } - switch (argv[i][1]) { + char const* a = argv[i] + 1; + bool longarg = false; + char c; + while (*a && !longarg) switch (c = *a++) { case 'h': { - fprintf(stderr, "\n"); - fprintf(stderr, "NXBoot is a Fusée/ShofEL2 implementation for macOS and iOS.\n"); - fprintf(stderr, "It supports any Fusée payload and Coreboot/CBFS.\n"); - fprintf(stderr, "Copyright 2018 Oliver Kuckertz \n\n"); printHelp(); return 0; } @@ -156,7 +181,7 @@ int main(int argc, char *argv[]) { case 'd': { if (cmdTool.keepReading) { fprintf(stderr, ESC_RED "error: -d cannot be used with -k" ESC_LN); - printHelp(); + printUsage(); return 1; } cmdTool.daemon = YES; @@ -165,7 +190,7 @@ int main(int argc, char *argv[]) { case 'k': { if (cmdTool.daemon) { fprintf(stderr, ESC_RED "error: -d cannot be used with -k" ESC_LN); - printHelp(); + printUsage(); return 1; } cmdTool.keepReading = YES; @@ -184,13 +209,130 @@ int main(int argc, char *argv[]) { } else { fprintf(stderr, ESC_RED "error: -r requires an argument" ESC_LN); + printUsage(); + return 1; + } + break; + } + case '-': { + if (strcmp(a, "help") == 0) { printHelp(); + return 0; + } + else if (strcmp(a, "hekate") == 0) { + hekateExpected = YES; + i++; + if (hekateBootConfigured) { + fprintf(stderr, ESC_RED "error: only one --hekate boot command can be set" ESC_LN); + printUsage(); + return 1; + } + if (i < argc) { + char const* cmd = argv[i]; + if (strcmp(cmd, "menu") == 0) { + hekate.bootTarget = NXHekateBootTargetMenu; + } + else if (strcmp(cmd, "id") == 0) { + hekate.bootTarget = NXHekateBootTargetID; + i++; + if (i < argc) { + hekate.bootID = [NSString stringWithUTF8String:argv[i]]; + if (hekate.bootID.length == 0 || hekate.bootID.length > 7) { + fprintf(stderr, ESC_RED "error: --hekate id argument must be at least 1 and at most 7 characters long" ESC_LN); + printUsage(); + return 1; + } + } + else { + fprintf(stderr, ESC_RED "error: --hekate id requires an argument" ESC_LN); + printUsage(); + return 1; + } + } + else if (strcmp(cmd, "entry") == 0) { + hekate.bootTarget = NXHekateBootTargetIndex; + i++; + if (i < argc) { + NSString *entry = [NSString stringWithUTF8String:argv[i]]; + hekate.bootIndex = [entry integerValue]; + if (hekate.bootIndex <= 0 || hekate.bootIndex > 0xFF) { + fprintf(stderr, ESC_RED "error: --hekate entry requires an integer argument in 1-255" ESC_LN); + printUsage(); + return 1; + } + } + else { + fprintf(stderr, ESC_RED "error: --hekate entry requires an argument" ESC_LN); + printUsage(); + return 1; + } + } + else if (strcmp(cmd, "ums") == 0) { + hekate.bootTarget = NXHekateBootTargetUMS; + i++; + if (i < argc) { + char const* umsTarget = argv[i]; + if (strcmp(umsTarget, "sd") == 0) { + hekate.umsTarget = NXHekateStorageTargetSD; + } + else if (strcmp(umsTarget, "boot0") == 0) { + hekate.umsTarget = NXHekateStorageTargetInternalBOOT0; + } + else if (strcmp(umsTarget, "boot1") == 0) { + hekate.umsTarget = NXHekateStorageTargetInternalBOOT1; + } + else if (strcmp(umsTarget, "gpp") == 0) { + hekate.umsTarget = NXHekateStorageTargetInternalGPP; + } + else if (strcmp(umsTarget, "emu-boot0") == 0) { + hekate.umsTarget = NXHekateStorageTargetEmuBOOT0; + } + else if (strcmp(umsTarget, "emu-boot1") == 0) { + hekate.umsTarget = NXHekateStorageTargetEmuBOOT1; + } + else if (strcmp(umsTarget, "emu-gpp") == 0) { + hekate.umsTarget = NXHekateStorageTargetEmuGPP; + } + else { + fprintf(stderr, ESC_RED "error: unknown Hekate UMS target %s" ESC_LN, umsTarget); + printUsage(); + return 1; + } + } + else { + fprintf(stderr, ESC_RED "error: --hekate ums requires an argument" ESC_LN); + printUsage(); + return 1; + } + } + else { + fprintf(stderr, ESC_RED "error: invalid --hekate boot command %s" ESC_LN, cmd); + printUsage(); + return 1; + } + hekateBootConfigured = YES; + } + else { + fprintf(stderr, ESC_RED "error: --hekate requires a command" ESC_LN); + printUsage(); + return 1; + } + } + else if (strcmp(a, "hekate-log") == 0) { + hekateExpected = YES; + hekate.logFlag = YES; + } + else { + fprintf(stderr, ESC_RED "error: unknown long argument --%s" ESC_LN, a); + printUsage(); return 1; } + longarg = true; + break; } default: { - fprintf(stderr, ESC_RED "error: unknown argument %s" ESC_LN, argv[i]); - printHelp(); + fprintf(stderr, ESC_RED "error: unknown argument -%c" ESC_LN, c); + printUsage(); return 1; } } @@ -209,7 +351,7 @@ int main(int argc, char *argv[]) { } default: { fprintf(stderr, ESC_RED "error: too many positional arguments" ESC_LN); - printHelp(); + printUsage(); return 1; } } @@ -219,15 +361,26 @@ int main(int argc, char *argv[]) { if (!cmdTool.image) { fprintf(stderr, ESC_RED "error: a payload path must be set" ESC_LN); - printHelp(); + printUsage(); return 1; } + + if (hekateExpected) { + hekate.payload = cmdTool.image; + if (!hekate.payloadSupported) { + fprintf(stderr, ESC_RED "error: Hekate options used on non-Hekate or unsupported payload" ESC_LN); + return 1; + } + NXLog(@"CMD: Using Hekate %@", hekate.version); + cmdTool.image = [hekate commitToImage]; + } if (!cmdTool.relocator) { size_t n; void *p = getsectiondata(&_mh_execute_header, "__TEXT", "__intermezzo", &n); if (!p) { - fprintf(stderr, ESC_RED "error: getsectiondata failed, which means that your nxboot build is broken" ESC_LN); + fprintf(stderr, ESC_RED "error: getsectiondata failed; your nxboot build is broken" ESC_LN); + return 1; } cmdTool.relocator = [NSData dataWithBytesNoCopy:p length:n freeWhenDone:NO]; NXLog(@"CMD: Using default relocator with size %lu bytes", (unsigned long)n); diff --git a/NXBootKit/NXHekateCustomizer.h b/NXBootKit/NXHekateCustomizer.h new file mode 100644 index 0000000..2b76482 --- /dev/null +++ b/NXBootKit/NXHekateCustomizer.h @@ -0,0 +1,43 @@ +/** + * @file uses Hekate's payload storage for customizing boot behavior + * @author Oliver Kuckertz + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef NS_ENUM(NSInteger, NXHekateBootTarget) { + NXHekateBootTargetMenu, + NXHekateBootTargetID, + NXHekateBootTargetIndex, + NXHekateBootTargetUMS +}; + +typedef NS_ENUM(NSInteger, NXHekateStorageTarget) { + NXHekateStorageTargetSD, + NXHekateStorageTargetInternalBOOT0, + NXHekateStorageTargetInternalBOOT1, + NXHekateStorageTargetInternalGPP, + NXHekateStorageTargetEmuBOOT0, + NXHekateStorageTargetEmuBOOT1, + NXHekateStorageTargetEmuGPP +}; + +@interface NXHekateCustomizer : NSObject + +- (instancetype)initWithPayload:(NSData *)payload; +- (NSData *)commitToImage; + +@property (nonatomic, strong) NSData *payload; +@property (readonly, getter=isPayloadSupported) BOOL payloadSupported; +@property (readonly) NSString *version; +@property (nonatomic, assign) NXHekateBootTarget bootTarget; +@property (nonatomic, assign) NSInteger bootIndex; +@property (nonatomic, strong) NSString *bootID; +@property (nonatomic, assign) NXHekateStorageTarget umsTarget; +@property (nonatomic, assign) BOOL logFlag; + +@end + +NS_ASSUME_NONNULL_END diff --git a/NXBootKit/NXHekateCustomizer.m b/NXBootKit/NXHekateCustomizer.m new file mode 100644 index 0000000..5436304 --- /dev/null +++ b/NXBootKit/NXHekateCustomizer.m @@ -0,0 +1,126 @@ +/** + * @file uses Hekate's payload storage for customizing boot behavior + * @author Oliver Kuckertz + */ + +#import "NXHekateCustomizer.h" +#import "NXBootKit.h" + +// Hekate's payload config starts at 0x94 and is initialized to zero. It is +// immediately followed by the magic value 'ICTC' and three version digits. +#define BOOT_CFG_AUTOBOOT_EN (1 << 0) +#define BOOT_CFG_FROM_LAUNCH (1 << 1) +#define BOOT_CFG_FROM_ID (1 << 2) +#define EXTRA_CFG_NYX_UMS (1 << 5) +typedef struct { + UInt8 BootCfg; + UInt8 AutoBoot; + UInt8 AutoBootList; + UInt8 ExtraCfg; + union { + UInt8 UMS; + struct { + char ID[8]; + char EmuMMCPath[120]; + } Boot; + } XtStr; +} __attribute__((packed)) NXHekatePayloadConfig; +static UInt32 const kNXHekatePayloadConfigOffset = 0x94; +static_assert(sizeof(NXHekatePayloadConfig) == 132, "unexpected size of NXHekatePayloadConfig"); +static char const kNXHekateMagic[4] = {'I','C','T','C'}; + +@implementation NXHekateCustomizer + +- (instancetype)initWithPayload:(NSData *)payload { + if (self = [super init]) { + self.payload = payload; + } + return self; +} + +- (BOOL)isPayloadSupported { + if (self.payload.length < 0x1000) { + // The payload is too small to be Hekate. The remainder of this object + // assumes that we are dealing with a Hekate payload and have sufficient + // space to read/write without further bounds checking. + NXLog(@"Hekate: Rejecting payload smaller than 4KiB"); + return NO; + } + + // Ensure that storage area is zero + char const *b = (char const *)self.payload.bytes + kNXHekatePayloadConfigOffset; + for (unsigned i = 0; i < sizeof(NXHekatePayloadConfig); i++) { + if (b[i] != 0) { + NXLog(@"Hekate: Unexpected non-zero storage byte at %u", i); + return NO; + } + } + + // Compare magic value + b += sizeof(NXHekatePayloadConfig); + if (memcmp(b, kNXHekateMagic, sizeof(kNXHekateMagic)) != 0) { + NXLog(@"Hekate: Magic value mismatch"); + return NO; + } + + // Explicitly check for Hekate version 5. Major versions break compatiblity + // guarantees and I would not want to accidentally misconfigure Hekate. + if (b[4] != '5') { + NXLog(@"Hekate: Major version mismatch"); + return NO; + } + + return YES; +} + +- (NSString *)version { + assert(self.payloadSupported); + char const *v = (char const *)self.payload.bytes + + kNXHekatePayloadConfigOffset + + sizeof(NXHekatePayloadConfig) + + sizeof(kNXHekateMagic); + return [NSString stringWithFormat:@"%c.%c.%c", v[0], v[1], v[2]]; +} + +- (NSData *)commitToImage { + assert(self.payloadSupported); + + NSMutableData *payload = [self.payload mutableCopy]; + NXHekatePayloadConfig *cfg = (NXHekatePayloadConfig *) + ((char *)payload.mutableBytes + kNXHekatePayloadConfigOffset); + + switch (self.bootTarget) { + case NXHekateBootTargetMenu: + cfg->BootCfg |= BOOT_CFG_AUTOBOOT_EN; + cfg->AutoBoot = 0; + NXLog(@"Hekate: Auto-boot disabled"); + break; + case NXHekateBootTargetID: + cfg->BootCfg |= BOOT_CFG_AUTOBOOT_EN | BOOT_CFG_FROM_ID; + cfg->AutoBoot = 0; + strncpy(cfg->XtStr.Boot.ID, self.bootID.UTF8String, 8); + cfg->XtStr.Boot.ID[7] = 0; + NXLog(@"Hekate: Auto-boot enabled with ID `%s'", cfg->XtStr.Boot.ID); + break; + case NXHekateBootTargetIndex: + cfg->BootCfg |= BOOT_CFG_AUTOBOOT_EN; + cfg->AutoBoot = (UInt8)self.bootIndex; + NXLog(@"Hekate: Auto-boot enabled with index %ld", (long)self.bootIndex); + break; + case NXHekateBootTargetUMS: + cfg->BootCfg |= BOOT_CFG_AUTOBOOT_EN; + cfg->AutoBoot = 0; + cfg->ExtraCfg |= EXTRA_CFG_NYX_UMS; + cfg->XtStr.UMS = (UInt8)self.umsTarget; + NXLog(@"Hekate: UMS enabled with target %ld", (long)self.umsTarget); + break; + } + + if (self.logFlag) { + cfg->BootCfg |= BOOT_CFG_FROM_LAUNCH; + } + + return payload; +} + +@end diff --git a/NXBootKit/NXUSBDevice.h b/NXBootKit/NXUSBDevice.h index 8c816cc..18f6521 100644 --- a/NXBootKit/NXUSBDevice.h +++ b/NXBootKit/NXUSBDevice.h @@ -6,6 +6,8 @@ #import #import "NXExec.h" +NS_ASSUME_NONNULL_BEGIN + @class NXUSBDeviceEnumerator; @interface NXUSBDevice : NSObject { @@ -18,3 +20,5 @@ @property (strong, nonatomic) NSString *name; - (void)invalidate; @end + +NS_ASSUME_NONNULL_END diff --git a/NXBootKit/NXUSBDeviceEnumerator.h b/NXBootKit/NXUSBDeviceEnumerator.h index 5f57737..83651a8 100644 --- a/NXBootKit/NXUSBDeviceEnumerator.h +++ b/NXBootKit/NXUSBDeviceEnumerator.h @@ -6,6 +6,8 @@ #import #import "NXUSBDevice.h" +NS_ASSUME_NONNULL_BEGIN + @class NXUSBDeviceEnumerator; @protocol NXUSBDeviceEnumeratorDelegate @@ -20,3 +22,5 @@ - (void)start; - (void)stop; @end + +NS_ASSUME_NONNULL_END diff --git a/NXBootLegacy/AssetsLegacy.xcassets/Contents.json b/NXBootLegacy/AssetsLegacy.xcassets/Contents.json deleted file mode 100644 index da4a164..0000000 --- a/NXBootLegacy/AssetsLegacy.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/NXBootLegacy/AssetsLegacy.xcassets/LaunchImage.launchimage/Contents.json b/NXBootLegacy/AssetsLegacy.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index 6d2d429..0000000 --- a/NXBootLegacy/AssetsLegacy.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,158 +0,0 @@ -{ - "images" : [ - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "11.0", - "subtype" : "2436h", - "scale" : "3x" - }, - { - "orientation" : "landscape", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "11.0", - "subtype" : "2436h", - "scale" : "3x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "8.0", - "subtype" : "736h", - "scale" : "3x" - }, - { - "orientation" : "landscape", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "8.0", - "subtype" : "736h", - "scale" : "3x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "8.0", - "subtype" : "667h", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "subtype" : "retina4", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "subtype" : "retina4", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "to-status-bar", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "to-status-bar", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "to-status-bar", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "to-status-bar", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/NXBootLegacy/Base.lproj/LaunchScreen.storyboard b/NXBootLegacy/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index 54ffdbe..0000000 --- a/NXBootLegacy/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/NXBootLegacy/Base.lproj/Main.storyboard b/NXBootLegacy/Base.lproj/Main.storyboard deleted file mode 100644 index 46860b9..0000000 --- a/NXBootLegacy/Base.lproj/Main.storyboard +++ /dev/null @@ -1,526 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The relocator is a small (0.1 - 3 KiB) file, which prepares the payload for execution. Most payloads want 'intermezzo,' Coreboot/Linux want 'cbfs.' - - - - - - - - - - - - - - - - - - This file is usually at least 10 KiB large. Intermezzo's max. payload size is 179 KiB. Custom relocators such as 'cbfs' for Coreboot/Linux have different size limits. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/NXBootLegacy/GettingStartedLegacyViewController.h b/NXBootLegacy/GettingStartedLegacyViewController.h deleted file mode 100644 index 11eb4ad..0000000 --- a/NXBootLegacy/GettingStartedLegacyViewController.h +++ /dev/null @@ -1,9 +0,0 @@ -/** - * @file displays tutorials for the application - * @author Oliver Kuckertz - */ - -#import - -@interface GettingStartedLegacyViewController : UIViewController -@end diff --git a/NXBootLegacy/GettingStartedLegacyViewController.m b/NXBootLegacy/GettingStartedLegacyViewController.m deleted file mode 100644 index ff3e019..0000000 --- a/NXBootLegacy/GettingStartedLegacyViewController.m +++ /dev/null @@ -1,82 +0,0 @@ -/** - * @file displays tutorials for the application - * @author Oliver Kuckertz - */ - -#import "GettingStartedLegacyViewController.h" -#import - -@interface GettingStartedLegacyViewController () -@property (weak, nonatomic) IBOutlet UIBarButtonItem *browserBackButton; -@property (weak, nonatomic) IBOutlet UIBarButtonItem *browserForwardButton; -@property (weak, nonatomic) IBOutlet UIBarButtonItem *browserReloadButton; -@property (weak, nonatomic) IBOutlet UIActivityIndicatorView *activityIndicatorView; -@property (weak, nonatomic) IBOutlet UIToolbar *toolbar; -@property (strong, nonatomic) NSURL *startURL; -@property (weak, nonatomic) IBOutlet UIWebView *webView; -@end - -@implementation GettingStartedLegacyViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.startURL = [[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html" subdirectory:@"Tutorial"]; - - [self.webView addObserver:self forKeyPath:@"loading" options:NSKeyValueObservingOptionNew context:nil]; - [self.webView addObserver:self forKeyPath:@"canGoBack" options:NSKeyValueObservingOptionNew context:nil]; - [self.webView addObserver:self forKeyPath:@"canGoForward" options:NSKeyValueObservingOptionNew context:nil]; - self.browserBackButton.enabled = NO; - self.browserForwardButton.enabled = NO; - - [self.webView loadRequest:[NSURLRequest requestWithURL:self.startURL]]; -} - -- (void)dealloc { - [self.webView removeObserver:self forKeyPath:@"loading"]; - [self.webView removeObserver:self forKeyPath:@"canGoBack"]; - [self.webView removeObserver:self forKeyPath:@"canGoForward"]; -} - -#pragma mark - KVO - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - if (object == self.webView && [keyPath isEqualToString:@"loading"]) { - if (self.webView.loading) { - [self.activityIndicatorView startAnimating]; - } - else { - [self.activityIndicatorView stopAnimating]; - } - } - else if (object == self.webView && [keyPath isEqualToString:@"canGoBack"]) { - self.browserBackButton.enabled = self.webView.canGoBack; - } - else if (object == self.webView && [keyPath isEqualToString:@"canGoForward"]) { - self.browserForwardButton.enabled = self.webView.canGoForward; - } - else { - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - } -} - -#pragma mark - Actions - -- (IBAction)browserBackButtonTapped:(id)sender { - [self.webView goBack]; -} - -- (IBAction)browserForwardButtonTapped:(id)sender { - [self.webView goForward]; -} - -- (IBAction)browserReloadButtonTapped:(id)sender { - if (self.webView.request.URL.absoluteString) { - [self.webView reload]; - } - else { - [self.webView loadRequest:[NSURLRequest requestWithURL:self.startURL]]; - } -} - -@end diff --git a/NXBootLegacy/NXBootLegacy.entitlements b/NXBootLegacy/NXBootLegacy.entitlements deleted file mode 100644 index 0c67376..0000000 --- a/NXBootLegacy/NXBootLegacy.entitlements +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/NXBootLegacy/Prefix.h b/NXBootLegacy/Prefix.h deleted file mode 100644 index 9c5329d..0000000 --- a/NXBootLegacy/Prefix.h +++ /dev/null @@ -1,15 +0,0 @@ -/** - * @file prefix header loaded automatically, which loads shims for iOS 7-9 - * @author Oliver Kuckertz - */ - -#include "UIAlertControllerShim.h" -#define UIAlertActionStyle UIAlertActionStyleShim -#define UIAlertActionStyleDefault UIAlertActionStyleShimDefault -#define UIAlertActionStyleCancel UIAlertActionStyleShimCancel -#define UIAlertActionStyleDestructive UIAlertActionStyleShimDestructive -#define UIAlertControllerStyle UIAlertControllerStyleShim -#define UIAlertControllerStyleActionSheet UIAlertControllerStyleShimActionSheet -#define UIAlertControllerStyleAlert UIAlertControllerStyleShimAlert -#define UIAlertAction UIAlertActionShim -#define UIAlertController UIAlertControllerShim diff --git a/NXBootLegacy/UIAlertActionShim.h b/NXBootLegacy/UIAlertActionShim.h deleted file mode 100644 index d5d2e41..0000000 --- a/NXBootLegacy/UIAlertActionShim.h +++ /dev/null @@ -1,24 +0,0 @@ -/** - * @file UIAlertController for iOS 7 helper - * @author Oliver Kuckertz - */ - -#import - -typedef NS_ENUM(NSInteger, UIAlertActionStyleShim) { - UIAlertActionStyleShimDefault = 0, - UIAlertActionStyleShimCancel, - UIAlertActionStyleShimDestructive -}; - -@interface UIAlertActionShim : NSObject - -@property (nonatomic) NSString *title; -@property (nonatomic) UIAlertActionStyleShim style; -@property (nonatomic, copy) void(^handler)(UIAlertActionShim *); - -+ (instancetype)actionWithTitle:(NSString *)title - style:(UIAlertActionStyleShim)style - handler:(void(^)(UIAlertActionShim *action))handler; - -@end diff --git a/NXBootLegacy/UIAlertActionShim.m b/NXBootLegacy/UIAlertActionShim.m deleted file mode 100644 index 0e50980..0000000 --- a/NXBootLegacy/UIAlertActionShim.m +++ /dev/null @@ -1,21 +0,0 @@ -/** - * @file UIAlertController for iOS 7 helper - * @author Oliver Kuckertz - */ - -#import "UIAlertActionShim.h" - -@implementation UIAlertActionShim - -+ (instancetype)actionWithTitle:(NSString *)title - style:(UIAlertActionStyleShim)style - handler:(void(^)(UIAlertActionShim *action))handler -{ - UIAlertActionShim *action = [[self alloc] init]; - action.title = title; - action.style = style; - action.handler = handler; - return action; -} - -@end diff --git a/NXBootLegacy/UIAlertControllerShim.h b/NXBootLegacy/UIAlertControllerShim.h deleted file mode 100644 index 6dd873f..0000000 --- a/NXBootLegacy/UIAlertControllerShim.h +++ /dev/null @@ -1,28 +0,0 @@ -/** - * @file UIAlertController for iOS 7 - * @author Oliver Kuckertz - */ - -#import -#import "UIAlertActionShim.h" - -typedef NS_ENUM(NSInteger, UIAlertControllerStyleShim) { - UIAlertControllerStyleShimActionSheet = 0, - UIAlertControllerStyleShimAlert -}; - -@interface UIAlertControllerShim : UIViewController - -@property (nonatomic, strong) NSString *alertTitle; -@property (nonatomic, strong) NSString *alertMessage; -@property (nonatomic, strong) NSArray *actions; -@property (nonatomic, strong) NSArray *textFields; - -+ (instancetype)alertControllerWithTitle:(NSString *)title - message:(NSString *)message - preferredStyle:(UIAlertControllerStyleShim)preferredStyle; - -- (void)addAction:(UIAlertActionShim *)action; -- (void)addTextFieldWithConfigurationHandler:(void(^)(UITextField *textField))configurationHandler; - -@end diff --git a/NXBootLegacy/UIAlertControllerShim.m b/NXBootLegacy/UIAlertControllerShim.m deleted file mode 100644 index f808ae5..0000000 --- a/NXBootLegacy/UIAlertControllerShim.m +++ /dev/null @@ -1,26 +0,0 @@ -/** - * @file UIAlertController for iOS 7 - * @author Oliver Kuckertz - */ - -#import "UIAlertControllerShim.h" - -@implementation UIAlertControllerShim - -+ (instancetype)alertControllerWithTitle:(NSString *)title - message:(NSString *)message - preferredStyle:(UIAlertControllerStyleShim)preferredStyle -{ - // TODO - return nil; -} - -- (void)addAction:(UIAlertActionShim *)action { - // TODO -} - -- (void)addTextFieldWithConfigurationHandler:(void(^)(UITextField *textField))configurationHandler { - // TODO support a single text field -} - -@end diff --git a/NXBootMac/AppDelegate.h b/NXBootMac/AppDelegate.h deleted file mode 100644 index e129352..0000000 --- a/NXBootMac/AppDelegate.h +++ /dev/null @@ -1,11 +0,0 @@ -/** - * @file app delegate - * @author Oliver Kuckertz - */ - -#import -#import - -@interface AppDelegate : NSObject -@property (readonly, strong) NSPersistentContainer *persistentContainer; -@end diff --git a/NXBootMac/AppDelegate.m b/NXBootMac/AppDelegate.m deleted file mode 100644 index 7a0f1ea..0000000 --- a/NXBootMac/AppDelegate.m +++ /dev/null @@ -1,63 +0,0 @@ -/** - * @file app delegate - * @author Oliver Kuckertz - */ - -#import "AppDelegate.h" - -@import AppCenter; -@import AppCenterAnalytics; -@import AppCenterCrashes; - -@interface AppDelegate () -@end - -@implementation AppDelegate - -- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {} - -- (void)applicationWillTerminate:(NSNotification *)aNotification {} - -- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender { - return YES; -} - -#pragma mark - Core Data Stack - -@synthesize persistentContainer = _persistentContainer; - -- (NSPersistentContainer *)persistentContainer { - if (_persistentContainer == nil) { - @synchronized (self) { - if (_persistentContainer == nil) { - [self createPersistentContainer]; - } - } - } - return _persistentContainer; -} - -- (void)createPersistentContainer { - _persistentContainer = [[NSPersistentContainer alloc] initWithName:@"Model"]; - [_persistentContainer loadPersistentStoresWithCompletionHandler:^(NSPersistentStoreDescription *storeDescription, NSError *error) { - if (error) { - // Typical reasons for an error here include: - // * The parent directory does not exist, cannot be created, or disallows writing. - // * The persistent store is not accessible, due to permissions or data protection when the device is locked. - // * The device is out of space. - // * The store could not be migrated to the current model version. - /* - UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Couldn't Create Database" - message:error.localizedDescription - preferredStyle:UIAlertControllerStyleAlert]; - [alert addAction:[UIAlertAction actionWithTitle:@"Quit" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { - exit(1); - }]]; - [self.window.rootViewController presentViewController:alert animated:YES completion:nil]; - */ - exit(1); - } - }]; -} - -@end diff --git a/NXBootMac/Assets.xcassets/AppIcon.appiconset/Contents.json b/NXBootMac/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 184a750..0000000 --- a/NXBootMac/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "size" : "16x16", - "scale" : "1x" - }, - { - "idiom" : "mac", - "size" : "16x16", - "scale" : "2x" - }, - { - "idiom" : "mac", - "size" : "32x32", - "scale" : "1x" - }, - { - "idiom" : "mac", - "size" : "32x32", - "scale" : "2x" - }, - { - "idiom" : "mac", - "size" : "128x128", - "scale" : "1x" - }, - { - "idiom" : "mac", - "size" : "128x128", - "scale" : "2x" - }, - { - "idiom" : "mac", - "size" : "256x256", - "scale" : "1x" - }, - { - "idiom" : "mac", - "size" : "256x256", - "scale" : "2x" - }, - { - "idiom" : "mac", - "size" : "512x512", - "scale" : "1x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "NXBootMac.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/NXBootMac/Assets.xcassets/AppIcon.appiconset/NXBootMac.png b/NXBootMac/Assets.xcassets/AppIcon.appiconset/NXBootMac.png deleted file mode 100644 index d1f7dcd..0000000 Binary files a/NXBootMac/Assets.xcassets/AppIcon.appiconset/NXBootMac.png and /dev/null differ diff --git a/NXBootMac/Assets.xcassets/Contents.json b/NXBootMac/Assets.xcassets/Contents.json deleted file mode 100644 index da4a164..0000000 --- a/NXBootMac/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/NXBootMac/Assets.xcassets/Mologie.imageset/Contents.json b/NXBootMac/Assets.xcassets/Mologie.imageset/Contents.json deleted file mode 100644 index 88282a4..0000000 --- a/NXBootMac/Assets.xcassets/Mologie.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "avatar2018.pdf" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/NXBootMac/Assets.xcassets/Mologie.imageset/avatar2018.pdf b/NXBootMac/Assets.xcassets/Mologie.imageset/avatar2018.pdf deleted file mode 100644 index ea2f076..0000000 Binary files a/NXBootMac/Assets.xcassets/Mologie.imageset/avatar2018.pdf and /dev/null differ diff --git a/NXBootMac/Assets.xcassets/PackageIcon.imageset/Contents.json b/NXBootMac/Assets.xcassets/PackageIcon.imageset/Contents.json deleted file mode 100644 index aa849f8..0000000 --- a/NXBootMac/Assets.xcassets/PackageIcon.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "NXBootMac.png" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/NXBootMac/Assets.xcassets/PackageIcon.imageset/NXBootMac.png b/NXBootMac/Assets.xcassets/PackageIcon.imageset/NXBootMac.png deleted file mode 100644 index d1f7dcd..0000000 Binary files a/NXBootMac/Assets.xcassets/PackageIcon.imageset/NXBootMac.png and /dev/null differ diff --git a/NXBootMac/Base.lproj/Main.storyboard b/NXBootMac/Base.lproj/Main.storyboard deleted file mode 100644 index 749110b..0000000 --- a/NXBootMac/Base.lproj/Main.storyboard +++ /dev/null @@ -1,1264 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/NXBootMac/BootProfileEditViewController.h b/NXBootMac/BootProfileEditViewController.h deleted file mode 100644 index a89279d..0000000 --- a/NXBootMac/BootProfileEditViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @file create or edit a single boot profile - * @author Oliver Kuckertz - */ - -#import -#import "BootProfile+CoreDataClass.h" - -@interface BootProfileEditViewController : NSViewController -@property (nonatomic, strong) BootProfile *profile; -@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext; -@property (assign, nonatomic, readonly) BOOL isNewProfile; -- (void)save; -@end diff --git a/NXBootMac/BootProfileEditViewController.m b/NXBootMac/BootProfileEditViewController.m deleted file mode 100644 index 07b85c2..0000000 --- a/NXBootMac/BootProfileEditViewController.m +++ /dev/null @@ -1,18 +0,0 @@ -/** - * @file create or edit a single boot profile - * @author Oliver Kuckertz - */ - -#import "BootProfileEditViewController.h" - -enum { - kMaxRelocatorSize = 3648 -}; - -@implementation BootProfileEditViewController - -- (void)save { - -} - -@end diff --git a/NXBootMac/CheckboxCellView.h b/NXBootMac/CheckboxCellView.h deleted file mode 100644 index eb27ff5..0000000 --- a/NXBootMac/CheckboxCellView.h +++ /dev/null @@ -1,10 +0,0 @@ -/** - * @file checkbox cell view - * @author Oliver Kuckertz - */ - -#import - -@interface CheckboxCellView : NSTableCellView -@property (weak) IBOutlet NSButton *checkbox; -@end diff --git a/NXBootMac/CheckboxCellView.m b/NXBootMac/CheckboxCellView.m deleted file mode 100644 index 996df9b..0000000 --- a/NXBootMac/CheckboxCellView.m +++ /dev/null @@ -1,9 +0,0 @@ -/** - * @file checkbox cell view - * @author Oliver Kuckertz - */ - -#import "CheckboxCellView.h" - -@implementation CheckboxCellView -@end diff --git a/NXBootMac/Credits.rtf b/NXBootMac/Credits.rtf deleted file mode 100644 index 651f3c9..0000000 --- a/NXBootMac/Credits.rtf +++ /dev/null @@ -1,18 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1561\cocoasubrtf600 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -{\*\expandedcolortbl;;} -\paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0 -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\qc\partightenfactor0 - -\f0\b\fs24 \cf0 \ -NXBoot -\b0 \ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 -\cf0 \ -NXBoot enables running custom boot code on compatible Nintendo Switch devices. Both Fus\'e9e and ShofEL2/CBFS payloads are supported. \ -\ -CVE-2018-6242 has been discovered and implemented by Kate Temkin (ktemkin.com) and fail0verflow (fail0verflow.com.)\ -\ -\{re\}switched's Python Fus\'e9e Launcher served as reference for implementing this iOS application.\ -} \ No newline at end of file diff --git a/NXBootMac/Info.plist b/NXBootMac/Info.plist deleted file mode 100644 index 7b7fc5f..0000000 --- a/NXBootMac/Info.plist +++ /dev/null @@ -1,34 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIconFile - - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 0.2.0 - CFBundleVersion - 1 - LSApplicationCategoryType - public.app-category.utilities - LSMinimumSystemVersion - $(MACOSX_DEPLOYMENT_TARGET) - NSHumanReadableCopyright - Copyright © 2018 Oliver Kuckertz. All rights reserved. - NSMainStoryboardFile - Main - NSPrincipalClass - NSApplication - - diff --git a/NXBootMac/MainViewController.h b/NXBootMac/MainViewController.h deleted file mode 100644 index 5e50c5f..0000000 --- a/NXBootMac/MainViewController.h +++ /dev/null @@ -1,10 +0,0 @@ -/** - * @file main window view controller - * @author Oliver Kuckertz - */ - -#import - -@interface MainViewController : NSViewController - -@end diff --git a/NXBootMac/MainViewController.m b/NXBootMac/MainViewController.m deleted file mode 100644 index b52afc3..0000000 --- a/NXBootMac/MainViewController.m +++ /dev/null @@ -1,304 +0,0 @@ -/** - * @file main window view controller - * @author Oliver Kuckertz - */ - -#import "MainViewController.h" -#import "AppConfig.h" -#import "AppDelegate.h" -#import "BootProfile+CoreDataClass.h" -#import "CheckboxCellView.h" -#import "NXExec.h" -#import "NXUSBDevice.h" -#import "NXUSBDeviceEnumerator.h" - -@import AppCenterAnalytics; - -@interface MainViewController () < - NSTableViewDelegate, - NSTableViewDataSource, - NXUSBDeviceEnumeratorDelegate -> -@property (strong) AppConfig *config; -@property (strong) NXUSBDeviceEnumerator *usbEnum; -@property (strong) NXUSBDevice *device; -@property (weak) IBOutlet NSVisualEffectView *backgroundView; -@property (weak) IBOutlet NSTextField *versionLabel; -@property (weak) IBOutlet NSScrollView *tableView; -@property (weak) IBOutlet NSSegmentedControl *tableButtons; -@property (weak) IBOutlet NSButton *bootNowButton; -@property (weak) IBOutlet NSImageView *statusImage; -@property (weak) IBOutlet NSTextField *statusLabel; -@property (strong) NSString *bootNowText; -@property (strong) NSString *statusLabelWaitingText; -@property (assign) BOOL active; -@end - -@implementation MainViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(bootProfileDidChange) - name:AppConfigSelectedBootProfileIDChanged object:nil]; - - self.config = [AppConfig sharedConfig]; - [self createDemoProfile]; - [self bootProfileDidChange]; - - self.bootNowText = self.bootNowButton.stringValue; - self.statusLabelWaitingText = self.statusLabel.stringValue; - - self.usbEnum = [[NXUSBDeviceEnumerator alloc] init]; - self.usbEnum.delegate = self; - [self.usbEnum addFilterForVendorID:kTegraNintendoSwitchVendorID productID:kTegraNintendoSwitchProductID]; - [self.usbEnum start]; - - [self tableViewDidClearSelection]; -} - -- (void)viewWillAppear { - [super viewWillAppear]; - self.view.window.movableByWindowBackground = YES; - self.view.window.appearance = self.backgroundView.appearance; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [self.usbEnum stop]; -} - -#pragma mark - Start/Stop States - -- (void)bootStart { - self.bootNowButton.stringValue = @"Active - Click to Stop"; - self.active = YES; - if (self.device) { - [self bootExecSelected]; - } - else { - self.statusImage.image = [NSImage imageNamed:NSImageNameStatusUnavailable]; - self.statusLabel.stringValue = self.statusLabelWaitingText; - } -} - -- (void)bootExecSelected { - assert(self.device != nil); - - self.statusImage.image = [NSImage imageNamed:NSImageNameStatusAvailable]; - self.statusLabel.stringValue = @"Device connected! Booting..."; - - [MSAnalytics trackEvent:@"SwitchBootStart"]; - - dispatch_async(dispatch_get_main_queue(), ^{ - NSString *error = nil; - if (!self.device) { - [MSAnalytics trackEvent:@"SwitchBootEnd" withProperties:@{@"Status": @"Canceled", @"Reason": @"Device Disappeared"}]; - return; - } - if (!self.active) { - [MSAnalytics trackEvent:@"SwitchBootEnd" withProperties:@{@"Status": @"Canceled", @"Reason": @"User Canceled"}]; - return; - } - BootProfile *profile = self.bootProfile; - if (!profile) { - self.statusImage.image = [NSImage imageNamed:NSImageNameStatusUnavailable]; - self.statusLabel.stringValue = @"Error: No boot profile is selected."; - [MSAnalytics trackEvent:@"SwitchBootEnd" withProperties:@{@"Status": @"Canceled", @"Reason": @"No Boot Profile Selected"}]; - return; - } - NSData *relocator = [self relocatorForProfile:profile]; - NSData *bootImage = [self bootImageForProfile:profile]; - if (!relocator || !bootImage) { - [MSAnalytics trackEvent:@"SwitchBootEnd" withProperties:@{@"Status": @"Canceled", @"Reason": @"Boot Profile Invalid"}]; - return; - } - if (NXExec(self.device->_intf, relocator, bootImage, &error)) { - self.statusImage.image = [NSImage imageNamed:NSImageNameStatusAvailable]; - self.statusLabel.stringValue = @"Success! 🎉"; - [MSAnalytics trackEvent:@"SwitchBootEnd" withProperties:@{@"Status": @"Success"}]; - [MSAnalytics trackEvent:@"SwitchBootSuccess"]; - } - else { - self.statusImage.image = [NSImage imageNamed:NSImageNameStatusUnavailable]; - self.statusLabel.stringValue = [NSString stringWithFormat:@"Error: %@", error]; - } - }); -} - -- (void)bootStop { - if (self.device) { - self.statusImage.image = [NSImage imageNamed:NSImageNameStatusAvailable]; - self.statusLabel.stringValue = @"Device connected. Click the Boot Now button to start."; - } - else { - self.statusImage.image = [NSImage imageNamed:NSImageNameStatusUnavailable]; - self.statusLabel.stringValue = self.statusLabelWaitingText; - } - self.bootNowButton.stringValue = self.bootNowText; - self.active = NO; -} - -#pragma mark - Core Data - -- (NSManagedObjectContext *)managedObjectContext { - AppDelegate *delegate = (AppDelegate *)[NSApplication sharedApplication].delegate; - return delegate.persistentContainer.viewContext; -} - -- (void)createDemoProfile { - NSFetchRequest *fetchRequest = [BootProfile fetchRequest]; - fetchRequest.predicate = [NSPredicate predicateWithFormat:@"isDemoProfile = 1"]; - NSError *error = nil; - NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil]; - if (fetchedObjects.count == 0) { - // on first run, create a demo profile with the Fusée Demo payload and make it the active profile - BootProfile *demoProfile = [[BootProfile alloc] initWithContext:self.managedObjectContext]; - demoProfile.name = @"Fusée Demo"; - demoProfile.relocatorName = @"intermezzo.bin"; - demoProfile.payloadName = @"fusee.bin"; - demoProfile.isDemoProfile = YES; - if (![self.managedObjectContext save:&error]) { - /* - UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Couldn't Initialize Database" - message:error.localizedDescription - preferredStyle:UIAlertControllerStyleAlert]; - [alert addAction:[UIAlertAction actionWithTitle:@"Quit" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { - exit(1); - }]]; - [self presentViewController:alert animated:YES completion:nil]; - */ - return; - } - self.config.selectedBootProfileID = demoProfile.objectID.URIRepresentation.absoluteString; - } - else if (!self.config.selectedBootProfileID) { - // the configuration file may have been deleted by the user. store the demo profile ID again. - BootProfile *demoProfile = fetchedObjects.firstObject; - self.config.selectedBootProfileID = demoProfile.objectID.URIRepresentation.absoluteString; - } -} - -- (void)bootProfileDidChange { - // BootProfile *profile = self.bootProfile; - // TODO -} - -- (BootProfile *)bootProfile { - NSURL *url = [NSURL URLWithString:self.config.selectedBootProfileID]; - NSManagedObjectID *objID = [self.managedObjectContext.persistentStoreCoordinator managedObjectIDForURIRepresentation:url]; - return [self.managedObjectContext existingObjectWithID:objID error:nil]; -} - -- (NSData *)relocatorForProfile:(BootProfile *)profile { - if (profile.relocatorBin.length > 0) { - return profile.relocatorBin; - } - NSURL *url = [[NSBundle mainBundle] URLForResource:profile.relocatorName withExtension:nil subdirectory:@"Payloads"]; - if (!url) { - self.statusImage.image = [NSImage imageNamed:NSImageNameStatusUnavailable]; - self.statusLabel.stringValue = [NSString stringWithFormat:@"Error: Could not locate relocator with name %@", profile.relocatorName]; - return nil; - } - NSData *data = [NSData dataWithContentsOfURL:url options:0 error:nil]; - if (!data) { - self.statusImage.image = [NSImage imageNamed:NSImageNameStatusUnavailable]; - self.statusLabel.stringValue = [NSString stringWithFormat:@"Error: Could not load relocator with name %@", profile.relocatorName]; - return nil; - } - return data; -} - -- (NSData *)bootImageForProfile:(BootProfile *)profile { - if (profile.payloadBin.length > 0) { - return profile.payloadBin; - } - NSURL *url = [[NSBundle mainBundle] URLForResource:profile.payloadName withExtension:nil subdirectory:@"Payloads"]; - if (!url) { - self.statusImage.image = [NSImage imageNamed:NSImageNameStatusUnavailable]; - self.statusLabel.stringValue = [NSString stringWithFormat:@"Error: Could not locate payload with name %@", profile.payloadName]; - return nil; - } - NSData *data = [NSData dataWithContentsOfURL:url options:0 error:nil]; - if (!data) { - self.statusImage.image = [NSImage imageNamed:NSImageNameStatusUnavailable]; - self.statusLabel.stringValue = [NSString stringWithFormat:@"Error: Could not load payload with name %@", profile.payloadName]; - } - return data; -} - -#pragma mark - Actions - -- (IBAction)tableButtonClicked:(id)sender { -} - -- (IBAction)bootNowClicked:(id)sender { -} - -#pragma mark - Table View - -- (void)tableViewSelectionDidChange:(NSNotification *)notification { -} - -- (void)tableViewDidClearSelection { - [self.tableButtons setEnabled:NO forSegment:1]; // disable remove button - [self.tableButtons setEnabled:NO forSegment:2]; // disable edit button -} - -- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { - return 1; -} - -- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { - if (tableColumn == tableView.tableColumns[0]) { - CheckboxCellView *cell = [tableView makeViewWithIdentifier:tableColumn.identifier owner:nil]; - cell.checkbox.state = NSControlStateValueOff; - return cell; - } - else if (tableColumn == tableView.tableColumns[1]) { - NSTableCellView *cell = [tableView makeViewWithIdentifier:tableColumn.identifier owner:nil]; - cell.textField.stringValue = @"Fusée Demo"; - return cell; - } - else if (tableColumn == tableView.tableColumns[2]) { - NSTableCellView *cell = [tableView makeViewWithIdentifier:tableColumn.identifier owner:nil]; - cell.textField.stringValue = @"intermezzio"; - return cell; - } - else if (tableColumn == tableView.tableColumns[3]) { - NSTableCellView *cell = [tableView makeViewWithIdentifier:tableColumn.identifier owner:nil]; - cell.textField.stringValue = @"fusee.bin"; - return cell; - } - else { - return nil; - } -} - -#pragma mark - NXUSBDeviceEnumeratorDelegate - -- (void)usbDeviceEnumerator:(NXUSBDeviceEnumerator *)deviceEnum deviceConnected:(NXUSBDevice *)device { - assert(device != nil); - self.device = device; - if (self.active) { - [self bootExecSelected]; - } - else { - self.statusImage.image = [NSImage imageNamed:NSImageNameStatusAvailable]; - self.statusLabel.stringValue = @"Device connected. Click the Boot Now button to start."; - } -} - -- (void)usbDeviceEnumerator:(NXUSBDeviceEnumerator *)deviceEnum deviceDisconnected:(NXUSBDevice *)device { - self.device = nil; - self.statusImage.image = [NSImage imageNamed:NSImageNameStatusUnavailable]; - self.statusLabel.stringValue = self.active ? @"Device disconnected. Waiting for next connection..." : self.statusLabelWaitingText; -} - -- (void)usbDeviceEnumerator:(NXUSBDeviceEnumerator *)deviceEnum deviceError:(NSString *)err { - self.statusImage.image = [NSImage imageNamed:NSImageNameStatusUnavailable]; - self.statusLabel.stringValue = [NSString stringWithFormat:@"Connection error: %@", err]; -} - -@end diff --git a/NXBootMac/Model.xcdatamodeld/Model.xcdatamodel/contents b/NXBootMac/Model.xcdatamodeld/Model.xcdatamodel/contents deleted file mode 100644 index ee83f02..0000000 --- a/NXBootMac/Model.xcdatamodeld/Model.xcdatamodel/contents +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/NXBootMac/NXBootMac.entitlements b/NXBootMac/NXBootMac.entitlements deleted file mode 100644 index 0c67376..0000000 --- a/NXBootMac/NXBootMac.entitlements +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/NXBootMac/main.m b/NXBootMac/main.m deleted file mode 100644 index c115b32..0000000 --- a/NXBootMac/main.m +++ /dev/null @@ -1,9 +0,0 @@ -/** - * @file entry point - */ - -#import - -int main(int argc, const char * argv[]) { - return NSApplicationMain(argc, argv); -} diff --git a/Podfile b/Podfile index 926526e..bcc2031 100644 --- a/Podfile +++ b/Podfile @@ -6,10 +6,3 @@ target 'NXBoot' do platform :ios, '10.0' pod 'AppCenter' end - -target 'NXBootMac' do - platform :osx, '10.12' - use_frameworks! - pod 'AppCenter' - pod 'Sparkle' -end diff --git a/Podfile.lock b/Podfile.lock index 9af276f..a6fdae4 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,27 +1,23 @@ PODS: - - AppCenter (2.3.0): - - AppCenter/Analytics (= 2.3.0) - - AppCenter/Crashes (= 2.3.0) - - AppCenter/Analytics (2.3.0): + - AppCenter (3.3.4): + - AppCenter/Analytics (= 3.3.4) + - AppCenter/Crashes (= 3.3.4) + - AppCenter/Analytics (3.3.4): - AppCenter/Core - - AppCenter/Core (2.3.0) - - AppCenter/Crashes (2.3.0): + - AppCenter/Core (3.3.4) + - AppCenter/Crashes (3.3.4): - AppCenter/Core - - Sparkle (1.21.3) DEPENDENCIES: - AppCenter - - Sparkle SPEC REPOS: - https://github.com/cocoapods/specs.git: + trunk: - AppCenter - - Sparkle SPEC CHECKSUMS: - AppCenter: 9784d2fc998c9bd0b8fbaf4fb9ed69526d12ce1a - Sparkle: 3f75576db8b0265adef36c43249d747f22d0b708 + AppCenter: 0487be185c038ed2ecc5ed38219af1dcd280af23 -PODFILE CHECKSUM: 3e1fc2e186668e498e5927857e921e337874ab2e +PODFILE CHECKSUM: 236a0393b9287b417d2313362b990b0b139bcbda -COCOAPODS: 1.7.5 +COCOAPODS: 1.10.0 diff --git a/README.md b/README.md index 019dc6a..43f078c 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ This application enables provisioning a Tegra X1 powered device with early boot * Command line tool for iOS and macOS * Native app for iOS * Fusée and ShofEL2 (Coreboot/Linux) payloads are supported +* Hekate integration (command line tool only) * Store multiple payloads and easily switch between them * Install payloads via iTunes File Transfer or any iCloud/Files-Compatible file transfer app * Auto-boot, just connect your device while the app is opened @@ -19,27 +20,25 @@ There is no ETA on those, it's just a bunch of ideas that I think are nice to ha * Managed payload profiles with auto-updates (always have the latest Hekate etc. available without any effort) * Optional Substrate tweak that disables the unsupported device message when a Switch is connected -* macOS GUI (currently limited to command-line tool) -* iOS 7+ support (currently requires iOS 10+) +* Proper macOS GUI (currently limited working but unreleased Mac Catalyst port) +* Hekate integration for GUI ## Prerequisites -* A jailbroken iOS device with firmware 10.0-12.4 (later iOS versions are most likely fine too) +* A jailbroken iOS device with firmware 11.0-14.2 (later iOS versions are most likely fine too) * Proper sandbox patches installed by the jailbreak (unc0ver works as-is) * A USB 3 Type A to Type C cable -* An OTG (Lightning to USB 2.0 or 3.0) adapter. Apple's costs $35 and cheaper third-party adapters may work. +* An OTG (Lightning to USB 2.0 or 3.0) adapter. Apple's costs $35, and cheaper third-party adapters may work. ## Installation -For installation instructions please visit the [project homepage at mologie.github.io](https://mologie.github.io/nxboot/). +For installation instructions please visit the [project homepage at mologie.github.io](https://mologie.github.io/nxboot/). The app and command line tools can be built from source via `build_app.sh` and `build_cmd.sh` after running `quickstart.sh` once. ## Components -* NXBoot: The feature-complete iOS GUI for iOS 10+ -* NXBootLegacy: Experiments to make NXBoot work under iOS 7+, incomplete -* NXBootMac: Experiments for a macOS GUI for NXBoot -* NXBootCmd(Mac): iOS and macOS command line tool for injecting payloads -* NXBootKit(Mac): The framework that powers the above tools +* NXBoot: The feature-complete iOS 11.0+ and Mac Catalyst app +* NXBootCmd: iOS and macOS command line tool for injecting payloads +* NXBootKit: The framework that powers the above tools ## License diff --git a/System/Frameworks/IOKit.framework/Headers b/System/Frameworks-iphoneos/IOKit.framework/Headers similarity index 100% rename from System/Frameworks/IOKit.framework/Headers rename to System/Frameworks-iphoneos/IOKit.framework/Headers diff --git a/System/Frameworks/IOKit.framework/IOKit.tbd b/System/Frameworks-iphoneos/IOKit.framework/IOKit.tbd similarity index 100% rename from System/Frameworks/IOKit.framework/IOKit.tbd rename to System/Frameworks-iphoneos/IOKit.framework/IOKit.tbd diff --git a/System/Frameworks/IOKit.framework/Versions/A/Headers b/System/Frameworks-iphoneos/IOKit.framework/Versions/A/Headers similarity index 100% rename from System/Frameworks/IOKit.framework/Versions/A/Headers rename to System/Frameworks-iphoneos/IOKit.framework/Versions/A/Headers diff --git a/System/Frameworks/IOKit.framework/Versions/A/IOKit.tbd b/System/Frameworks-iphoneos/IOKit.framework/Versions/A/IOKit.tbd similarity index 100% rename from System/Frameworks/IOKit.framework/Versions/A/IOKit.tbd rename to System/Frameworks-iphoneos/IOKit.framework/Versions/A/IOKit.tbd diff --git a/System/Frameworks/IOKit.framework/Versions/Current b/System/Frameworks-iphoneos/IOKit.framework/Versions/Current similarity index 100% rename from System/Frameworks/IOKit.framework/Versions/Current rename to System/Frameworks-iphoneos/IOKit.framework/Versions/Current diff --git a/System/Frameworks-iphonesimulator/IOKit.framework/Headers b/System/Frameworks-iphonesimulator/IOKit.framework/Headers new file mode 120000 index 0000000..a177d2a --- /dev/null +++ b/System/Frameworks-iphonesimulator/IOKit.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/System/Frameworks-iphonesimulator/IOKit.framework/IOKit.tbd b/System/Frameworks-iphonesimulator/IOKit.framework/IOKit.tbd new file mode 120000 index 0000000..4d9c2df --- /dev/null +++ b/System/Frameworks-iphonesimulator/IOKit.framework/IOKit.tbd @@ -0,0 +1 @@ +Versions/Current/IOKit.tbd \ No newline at end of file diff --git a/System/Frameworks-iphonesimulator/IOKit.framework/Versions/A/Headers b/System/Frameworks-iphonesimulator/IOKit.framework/Versions/A/Headers new file mode 120000 index 0000000..a9adedf --- /dev/null +++ b/System/Frameworks-iphonesimulator/IOKit.framework/Versions/A/Headers @@ -0,0 +1 @@ +/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers \ No newline at end of file diff --git a/System/Frameworks-iphonesimulator/IOKit.framework/Versions/A/IOKit.tbd b/System/Frameworks-iphonesimulator/IOKit.framework/Versions/A/IOKit.tbd new file mode 120000 index 0000000..d5c51db --- /dev/null +++ b/System/Frameworks-iphonesimulator/IOKit.framework/Versions/A/IOKit.tbd @@ -0,0 +1 @@ +/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit.tbd \ No newline at end of file diff --git a/System/Frameworks-iphonesimulator/IOKit.framework/Versions/Current b/System/Frameworks-iphonesimulator/IOKit.framework/Versions/Current new file mode 120000 index 0000000..8c7e5a6 --- /dev/null +++ b/System/Frameworks-iphonesimulator/IOKit.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/System/Frameworks-macosx/.gitkeep b/System/Frameworks-macosx/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/build.sh b/build_app.sh similarity index 79% rename from build.sh rename to build_app.sh index 7634d3c..19ffeca 100755 --- a/build.sh +++ b/build_app.sh @@ -12,15 +12,14 @@ BINDIR=$PROJDIR/DerivedData/bin mkdir -p $PROJDIR/dist $BINDIR echo "Building iOS application..." -xcodebuild -workspace NXBoot.xcworkspace -scheme NXBoot -configuration Release clean build | xcpretty -xcodebuild -workspace NXBoot.xcworkspace -scheme NXBootLegacy -configuration Release build | xcpretty +xcodebuild -scheme NXBoot -configuration Release clean build | bundle exec xcpretty echo "Signing iOS application..." rm -f $RELEASEDIR_IOS/NXBoot.app/embedded.mobileprovision binpath=$RELEASEDIR_IOS/NXBoot.app/NXBoot -for arch in armv7 arm64; do +for arch in armv7 arm64 arm64e; do lipo $binpath -thin $arch -output $binpath.$arch - jtool --sign --inplace --ident com.mologie.NXBoot --ent NXBoot/NXBootJailbreak.entitlements $RELEASEDIR_IOS/NXBoot.app/NXBoot.$arch + jtool2 --sign --inplace --ident com.mologie.NXBoot --ent NXBoot/NXBootJailbreak.entitlements $RELEASEDIR_IOS/NXBoot.app/NXBoot.$arch done lipo -create -output $binpath $binpath.armv7 $binpath.arm64 rm $binpath.* diff --git a/build_cmd.sh b/build_cmd.sh new file mode 100755 index 0000000..287c09a --- /dev/null +++ b/build_cmd.sh @@ -0,0 +1,27 @@ +#!/bin/bash +set -euo pipefail +release_prop() { + bundle exec xcodeproj show --format=tree_hash | yq r - \ + "rootObject.targets(name==NXBoot).buildConfigurationList.buildConfigurations(name==Release).buildSettings.$1" +} +projdir=$PWD +version=$(release_prop MARKETING_VERSION) +buildno=$(release_prop CURRENT_PROJECT_VERSION) +bindir=$projdir/DerivedData/bin +mkdir -p "$bindir" +xcodebuild -scheme NXBootKit -configuration Release build | bundle exec xcpretty +target_ios=7.0 +target_macos=10.10 +cflags="-DNXBOOT_VERSION=\"$version\" -DNXBOOT_BUILDNO=$buildno -D__OPEN_SOURCE__=1 -I$projdir/NXBootKit -std=gnu11 -fobjc-arc -fobjc-weak -fmodules -fvisibility=hidden -Wall -O2" +fwkflags="-framework CoreFoundation -framework Foundation -framework IOKit" +fwkflags_ios="$fwkflags -isystem $projdir/System/Include -iframework $projdir/System/Frameworks-iphoneos" +ldflags="-sectcreate __TEXT __intermezzo $projdir/Shared/Payloads/intermezzo.bin" +ldflags_macos="$ldflags DerivedData/NXBoot/Build/Products/Release/libNXBootKit_macOS.a" +ldflags_ios="$ldflags DerivedData/NXBoot/Build/Products/Release-iphoneos/libNXBootKit_iOS.a" +xcrun -sdk iphoneos clang NXBootCmd/main.m $cflags $fwkflags_ios $ldflags_ios -arch armv7 -miphoneos-version-min=$target_ios -o $bindir/nxboot.armv7 +jtool --sign --inplace --ident com.mologie.NXBootCmd --ent NXBootCmd/NXBootCmd.entitlements $bindir/nxboot.armv7 +xcrun -sdk iphoneos clang NXBootCmd/main.m $cflags $fwkflags_ios $ldflags_ios -arch arm64 -miphoneos-version-min=$target_ios -o $bindir/nxboot.arm64 +jtool --sign --inplace --ident com.mologie.NXBootCmd --ent NXBootCmd/NXBootCmd.entitlements $bindir/nxboot.arm64 +clang NXBootCmd/main.m $cflags $fwkflags $ldflags_macos -arch x86_64 -mmacosx-version-min=$target_macos -o $bindir/nxboot.x86_64 +lipo -create -output $bindir/nxboot $bindir/nxboot.* +echo "Universal executable available at $bindir/nxboot" diff --git a/build_cmdtool.sh b/build_cmdtool.sh deleted file mode 100755 index 6073a8d..0000000 --- a/build_cmdtool.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash -set -e -set -o pipefail -PROJDIR=$PWD -version=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" NXBoot/Info.plist) -buildno=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" NXBoot/Info.plist) -RELEASEDIR_MACOS=$PROJDIR/DerivedData/NXBoot/Build/Products/Release -RELEASEDIR_IOS=$PROJDIR/DerivedData/NXBoot/Build/Products/Release-iphoneos -BINDIR=$PROJDIR/DerivedData/bin -mkdir -p $BINDIR -xcodebuild -workspace NXBoot.xcworkspace -scheme NXBootKitAll -configuration Release build | xcpretty -NXBOOT_VER_IOS=7.0 -NXBOOT_VER_MACOS=10.10 -NXBOOT_CMD_CFLAGS="-DNXBOOT_VERSION=\"$version\" -DNXBOOT_BUILDNO=$buildno -I$PROJDIR/NXBootKit -std=gnu11 -fobjc-arc -fobjc-weak -fmodules -fvisibility=hidden -Wall -O2" -NXBOOT_CMD_FRAMEWORKS_IOS="-isystem $PROJDIR/System/Include -iframework $PROJDIR/System/Frameworks" -NXBOOT_CMD_FRAMEWORKS="-framework CoreFoundation -framework Foundation -framework IOKit" -NXBOOT_CMD_LDFLAGS="-lNXBootKit -sectcreate __TEXT __intermezzo $PROJDIR/Shared/Payloads/intermezzo.bin" -xcrun -sdk iphoneos clang NXBootCmd/main.m $NXBOOT_CMD_CFLAGS $NXBOOT_CMD_FRAMEWORKS_IOS $NXBOOT_CMD_FRAMEWORKS -L"$RELEASEDIR_IOS" $NXBOOT_CMD_LDFLAGS -arch armv7 -miphoneos-version-min=$NXBOOT_VER_IOS -o $BINDIR/nxboot.armv7 -jtool --sign --inplace --ident com.mologie.NXBootCmd --ent NXBootCmd/NXBootCmd.entitlements $BINDIR/nxboot.armv7 -xcrun -sdk iphoneos clang NXBootCmd/main.m $NXBOOT_CMD_CFLAGS $NXBOOT_CMD_FRAMEWORKS_IOS $NXBOOT_CMD_FRAMEWORKS -L"$RELEASEDIR_IOS" $NXBOOT_CMD_LDFLAGS -arch arm64 -miphoneos-version-min=$NXBOOT_VER_IOS -o $BINDIR/nxboot.arm64 -jtool --sign --inplace --ident com.mologie.NXBootCmd --ent NXBootCmd/NXBootCmd.entitlements $BINDIR/nxboot.arm64 -clang NXBootCmd/main.m $NXBOOT_CMD_CFLAGS $NXBOOT_CMD_FRAMEWORKS "-L$RELEASEDIR_MACOS" $NXBOOT_CMD_LDFLAGS -arch x86_64 -mmacosx-version-min=$NXBOOT_VER_MACOS -o $BINDIR/nxboot.x86_64 -lipo -create -output $BINDIR/nxboot $BINDIR/nxboot.* -echo "Universal executable available at $BINDIR/nxboot" diff --git a/install.sh b/install.sh deleted file mode 100755 index 4123e3b..0000000 --- a/install.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh -set -e -set -o pipefail - -if [ -z "$1" ]; then - echo "Usage: $0 " - exit 1 -fi - -device=$1 -version=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" NXBoot/Info.plist) -buildno=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" NXBoot/Info.plist) -archivedest= - -echo Installing version $version via dpkg... -debname=com.mologie.NXBoot-$version-$buildno.deb -scp dist/$debname root@$device:/tmp/$debname -ssh root@$device dpkg -i /tmp/$debname - -echo Done! You may want to run uicache on $device. diff --git a/quickstart.sh b/quickstart.sh new file mode 100755 index 0000000..23b6019 --- /dev/null +++ b/quickstart.sh @@ -0,0 +1,3 @@ +#!/bin/sh +brew bundle +bundle install