Repository: palera1n/loader Branch: main Commit: 416b3864dc36 Files: 93 Total size: 305.8 KB Directory structure: gitextract_7tyas5ig/ ├── .editorconfig ├── .github/ │ └── workflows/ │ └── build.yml ├── .gitignore ├── Configuration/ │ └── Loader.xcconfig ├── LICENSE ├── Loader/ │ ├── AppDelegate.swift │ ├── Extensions/ │ │ ├── String+prefix.swift │ │ ├── UIAlertController+Alerts.swift │ │ ├── UIApplication/ │ │ │ └── UIApplication+open.swift │ │ ├── UIDevice/ │ │ │ ├── UIDevice+Info.swift │ │ │ └── UIDevice+Jailbreak.swift │ │ └── UITableView+image.swift │ ├── Resources/ │ │ ├── Assets.xcassets/ │ │ │ ├── AppIcon - tvOS.brandassets/ │ │ │ │ ├── App Icon - App Store.imagestack/ │ │ │ │ │ ├── Back.imagestacklayer/ │ │ │ │ │ │ ├── Content.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── Front.imagestacklayer/ │ │ │ │ │ │ ├── Content.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Middle.imagestacklayer/ │ │ │ │ │ ├── Content.imageset/ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Contents.json │ │ │ │ ├── App Icon.imagestack/ │ │ │ │ │ ├── Back.imagestacklayer/ │ │ │ │ │ │ ├── Content.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── Front.imagestacklayer/ │ │ │ │ │ │ ├── Content.imageset/ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Middle.imagestacklayer/ │ │ │ │ │ ├── Content.imageset/ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Contents.json │ │ │ │ ├── Contents.json │ │ │ │ ├── Top Shelf Image Wide.imageset/ │ │ │ │ │ └── Contents.json │ │ │ │ └── Top Shelf Image.imageset/ │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset/ │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ ├── Loading.imageset/ │ │ │ │ └── Contents.json │ │ │ └── unknown.imageset/ │ │ │ └── Contents.json │ │ ├── Info.plist │ │ └── Localizable.xcstrings │ ├── SceneDelegate.swift │ ├── Supporting Files/ │ │ ├── Headers/ │ │ │ ├── LSApplicationWorkspace.h │ │ │ ├── Macros.h │ │ │ ├── MobileGestalt.h │ │ │ └── posixspawn.h │ │ ├── IOKit.tbd │ │ ├── Loader-Bridging-Header.h │ │ └── loader.entitlements │ ├── Utilities/ │ │ ├── Bootstrap/ │ │ │ ├── LRBootstrapper+download.swift │ │ │ ├── LRBootstrapper+status.swift │ │ │ └── LRBootstrapper.swift │ │ ├── Config/ │ │ │ └── Models/ │ │ │ └── LRConfig.swift │ │ ├── Environment/ │ │ │ ├── LREnvironment+prefixes.swift │ │ │ ├── LREnvironment+reset.swift │ │ │ ├── LREnvironment+spawn.swift │ │ │ └── LREnvironment.swift │ │ ├── Nvram/ │ │ │ ├── nvram.c │ │ │ └── nvram.h │ │ └── XPC/ │ │ ├── JailbreakD.swift │ │ ├── jailbreakd.c │ │ └── jailbreakd.h │ └── Views/ │ ├── Bootstrap/ │ │ ├── LRStagedViewController+UpdateItem.swift │ │ └── LRStagedViewController.swift │ ├── LRTabbarController.swift │ ├── Selection/ │ │ ├── LRBootstrapViewController+transition.swift │ │ └── LRBootstrapViewController.swift │ └── Settings/ │ ├── About/ │ │ ├── Flags/ │ │ │ └── LRSettingsFlagsViewController.swift │ │ └── LRSettingsAboutViewController.swift │ ├── Credits/ │ │ └── LRSettingsCreditsViewController.swift │ └── LRSettingsViewController.swift ├── Loader.xcodeproj/ │ ├── project.pbxproj │ ├── project.xcworkspace/ │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata/ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata/ │ └── xcschemes/ │ └── Loader.xcscheme ├── Loader.xcworkspace/ │ ├── contents.xcworkspacedata │ └── xcshareddata/ │ └── IDEWorkspaceChecks.plist ├── Makefile ├── NimbleKit/ │ ├── .gitignore │ ├── Package.swift │ └── Sources/ │ ├── NimbleAnimations/ │ │ └── SlideWithPresentationAnimator.swift │ ├── NimbleExtensions/ │ │ ├── Bundle/ │ │ │ └── Bundle+keys.swift │ │ ├── NSThread/ │ │ │ └── Thread+mainBlock.swift │ │ ├── String/ │ │ │ └── String+localized.swift │ │ ├── UIApplication/ │ │ │ ├── UIApplication+suspend.swift │ │ │ └── UIApplication+topController.swift │ │ ├── UICollectionViewDiffableDataSource/ │ │ │ └── UICollectionViewDiffableDataSource+refresh.swift │ │ ├── UIScreen/ │ │ │ └── UIScreen+displayCornerRadius.swift │ │ └── UITableView/ │ │ └── UITableView+transition.swift │ ├── NimbleJSON/ │ │ └── FetchService.swift │ └── NimbleViewControllers/ │ ├── LRBaseStructuredTableViewController.swift │ ├── LRBaseTableViewController.swift │ └── StagedViewController/ │ ├── LRBaseStagedViewController.swift │ ├── LRStageGroupCell.swift │ ├── LRStageGroupItemView.swift │ ├── LRStagedLoadingIndicator.swift │ ├── Models/ │ │ └── StepGroup.swift │ └── Timer/ │ └── TimerManager.swift └── README.md ================================================ FILE CONTENTS ================================================ ================================================ FILE: .editorconfig ================================================ root = true [*] indent_style = tab indent_size = 4 end_of_line = lf charset = utf-8 trim_trailing_whitespace = false insert_final_newline = true [*.{yml,yaml}] indent_style = space indent_size = 2 ================================================ FILE: .github/workflows/build.yml ================================================ name: Run Makefile on: workflow_dispatch: jobs: build: runs-on: macos-14 steps: - name: Checkout uses: actions/checkout@v3 - name: Install dependencies (packages) run: | curl -LO https://github.com/ProcursusTeam/ldid/releases/download/v2.1.5-procursus7/ldid_macosx_x86_64 sudo install -m755 ldid_macosx_x86_64 /usr/local/bin/ldid brew install 7zip gnu-sed - name: Use Xcode 15.4 run: | sudo xcode-select -s /Applications/Xcode_15.4.app/Contents/Developer agvtool new-version -all $(git rev-parse HEAD) - name: Compile palera1nLoader run: | make package PLATFORM=iphoneos PACKAGE_NAME=palera1nLoader make package PLATFORM=appletvos PACKAGE_NAME=palera1nLoaderTV - name: Compress Headers run: zip -r packages/patched_headers.zip apple-include-iphoneos apple-include-appletvos - name: Upload artifact uses: wangyucode/sftp-upload-action@v1.4.8 with: host: ${{ secrets.NICKCHAN_FTP_HOST }} port: ${{ secrets.NICKCHAN_FTP_PORT }} username: palera1n password: ${{ secrets.NICKCHAN_FTP_PASS }} forceUpload: true dryRun: false localDir: 'packages/' remoteDir: '/www/static.palera.in/artifacts/loader/universal_lite' ================================================ FILE: .gitignore ================================================ *.DS_Store Payload packages apple-include-* *UserInterfaceState.xcuserstate xcuserdata/ ================================================ FILE: Configuration/Loader.xcconfig ================================================ // // Loader.xcconfig // Loader // // Created by samara on 9.03.2025. // DOTFILE_PATH = "/.installed_palera1n" CONFIG_URL = "palera.in/loaderv2.json" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) CONFIG_URL='$(CONFIG_URL)' DOTFILE_PATH='$(DOTFILE_PATH)' SYSTEM_HEADER_SEARCH_PATHS = $(PROJECT_DIR)/apple-include$(EFFECTIVE_PLATFORM_NAME) ================================================ FILE: LICENSE ================================================ Copyright 2025 palera1n team Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: Loader/AppDelegate.swift ================================================ // // AppDelegate.swift // Loader // // Created by samara on 9.03.2025. // import UIKit @main class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { UIApplication.shared.isIdleTimerDisabled = true self._createTmpDir() return true } // MARK: UISceneSession Lifecycle func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) } func applicationWillTerminate(_ application: UIApplication) { self._cleanTmpDir() } private func _createTmpDir() { do { try FileManager.default.createDirectory( atPath: .tmp(), withIntermediateDirectories: true, attributes: nil ) } catch { print("Failed to create directory: \(error.localizedDescription)") } } private func _cleanTmpDir() -> Void { let fileManager = FileManager.default do { if fileManager.fileExists(atPath: .tmp()) { try fileManager.removeItem(atPath: .tmp()) } } catch { print("Failed to remove directory: \(error.localizedDescription)") } } } ================================================ FILE: Loader/Extensions/String+prefix.swift ================================================ // // String+prefix.swift // Loader // // Created by samara on 15.03.2025. // extension String { /// Returns a string with a jailbreak path prefix /// - Parameter path: Path /// - Returns: Path with prefix static func jb_prefix(_ path: String) -> String { LREnvironment.shared.jb_prefix(path) } /// Returns a string with a binpack path prefix /// - Parameter path: Path /// - Returns: Path with prefix static func binpack(_ path: String) -> String { LREnvironment.binpack(path) } /// Returns a string with a tmp path prefix /// - Parameter path: Path /// - Returns: Path with prefix static func tmp(_ path: String = "") -> String { LREnvironment.tmp(path) } } ================================================ FILE: Loader/Extensions/UIAlertController+Alerts.swift ================================================ // // UIAlertController+Alerts.swift // Loader // // Created by samara on 15.03.2025. // import UIKit.UIAlertController #if os(iOS) import LocalAuthentication #endif import NimbleExtensions extension UIAlertController { /// Presents an alert /// - Parameters: /// - presenter: View where its presenting /// - title: Alert title /// - message: Alert message /// - actions: Alert actions static func showAlertWithCancel( _ presenter: UIViewController, _ popoverFromView: UIView? = nil, title: String? = "", message: String?, style: UIAlertController.Style = .alert, actions: [UIAlertAction] ) { var actions = actions actions.append( UIAlertAction(title: .localized("Cancel"), style: .cancel, handler: nil) ) showAlert( presenter, popoverFromView, title: title, message: message, style: style, actions: actions ) } /// Presents an alert /// - Parameters: /// - presenter: View where its presenting /// - title: Alert title /// - message: Alert message /// - actions: Alert actions static func showAlert( _ presenter: UIViewController, _ popoverFromView: UIView? = nil, title: String?, message: String?, style: UIAlertController.Style = .alert, actions: [UIAlertAction] ) { let alert = UIAlertController(title: title, message: message, preferredStyle: style) actions.forEach { alert.addAction($0) } if style == .actionSheet, let popover = alert.popoverPresentationController, let view = popoverFromView { popover.sourceView = view popover.sourceRect = view.bounds popover.permittedArrowDirections = .any } presenter.present(alert, animated: true) } /// Presents an alert to change sudo password /// - Parameters: /// - presenter: View where its presenting /// - title: Title for sudo password alert /// - message: Description for sudo password alert /// - completion: Completes with a password static func showAlertForPassword( _ presenter: UIViewController, title: String, message: String, completion: @escaping (String) -> Void ) { let alert = UIAlertController(title: title, message: message, preferredStyle: .alert) alert.addTextField() { (password) in password.placeholder = .localized("Password") password.isSecureTextEntry = true password.keyboardType = UIKeyboardType.asciiCapable } alert.addTextField() { (password) in password.placeholder = .localized("Repeat Password") password.isSecureTextEntry = true password.keyboardType = UIKeyboardType.asciiCapable } let confirm = UIAlertAction(title: .localized("Set Password"), style: .default) { _ in let password = alert.textFields?[0].text completion(password!) }; confirm.isEnabled = false alert.addAction(confirm) NotificationCenter.default.addObserver( forName: UITextField.textDidChangeNotification, object: nil, queue: .main ) { _ in let pass = alert.textFields?[0].text let passRepeated = alert.textFields?[1].text if !(pass!.count > 253 || passRepeated!.count > 253) { confirm.setValue(String.localized("Set Password"), forKeyPath: "title") confirm.isEnabled = !pass!.isEmpty && !passRepeated!.isEmpty && pass == passRepeated } } Thread.mainBlock { presenter.present(alert, animated: true) } } /// Presents an alert to change sudo password with authentication /// - Parameters: /// - presenter: View where its presenting /// - authMessage: The authentication method on why it needs it /// - alertTitle: Title for sudo password alert /// - alertMessage: Description for sudo password alert /// - completion: Completes with a password static func showAlertForPasswordWithAuthentication( _ presenter: UIViewController, _ authMessage: String, alertTitle: String, alertMessage: String, completion: @escaping (String) -> Void ) { #if os(iOS) let context = LAContext() var error: NSError? #endif func change() { Thread.mainBlock { UIAlertController.showAlertForPassword( presenter, title: alertTitle, message: alertMessage ) { password in completion(password) } } } #if os(iOS) // if anyones changing the password ITS ME AND NO ONE ELSE (sorry nick) if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error) { context.evaluatePolicy( .deviceOwnerAuthentication, localizedReason: authMessage ) { success, _ in if success { change() } } } else { // If you have absolutely nothing (NO SECURITY, NO PASSCODE, NOTHING) // fuck it I'll let you change it anyway change() } #else change() #endif } /// Presents an alert to change a string /// - Parameters: /// - presenter: View where its presenting /// - title: Alert title /// - currentValue: Current value you want to change /// - keyboardType: Keyboard type /// - completion: Completes with a string static func showAlertForStringChange( _ presenter: UIViewController, title: String, currentValue: String, keyboardType: UIKeyboardType = .default, completion: @escaping (String) -> Void ) { let alert = UIAlertController(title: title, message: nil, preferredStyle: .alert) alert.addTextField { textField in textField.text = currentValue textField.keyboardType = keyboardType textField.autocapitalizationType = .none textField.autocorrectionType = .no } let saveAction = UIAlertAction(title: .localized("Set"), style: .default) { [weak alert] _ in guard let textField = alert?.textFields?.first, let newValue = textField.text, !newValue.isEmpty else { return } completion(newValue) } alert.addAction(UIAlertAction(title: .localized("Cancel"), style: .cancel, handler: nil)) alert.addAction(saveAction) Thread.mainBlock { presenter.present(alert, animated: true) } } } ================================================ FILE: Loader/Extensions/UIApplication/UIApplication+open.swift ================================================ // // UIApplication+open.swift // Loader // // Created by samara on 15.03.2025. // import UIKit.UIApplication extension UIApplication { /// Opens an application using `LSApplicationWorkspace` with a relative path func openApplication(using relativePath: String) { openApplication(at: URL(fileURLWithPath: relativePath)) } /// Opens an application using `LSApplicationWorkspace` with a url file path func openApplication(at path: URL) { let bundle = Bundle(url: path) LSApplicationWorkspace.default().openApplication(withBundleID: bundle?.bundleIdentifier) } } ================================================ FILE: Loader/Extensions/UIDevice/UIDevice+Info.swift ================================================ // // UIDevice+Info.swift // Loader // // Created by samara on 9.03.2025. // import MachO import UIKit.UIDevice extension UIDevice { struct CFVersionInfo { private let _cfVersionNumber = kCFCoreFoundationVersionNumber var standard: String { "\(Int(floor(_cfVersionNumber)))" } var rounded: String { "\(Int(floor(_cfVersionNumber / 100) * 100))" } } var cfVersion: CFVersionInfo { CFVersionInfo() } /// The devices architecture (e.g. arm64). var architecture: String { String(cString: NXGetLocalArchInfo().pointee.name) } /// The devices marketing model (e.g. iPhone 7) var marketingModel: String { MGCopyAnswer(kMGPhysicalHardwareNameString)?.takeUnretainedValue() as? String ?? "Unknown" } var kernelVersion: String { var utsnameInfo = utsname() uname(&utsnameInfo) let releaseCopy = withUnsafeBytes(of: &utsnameInfo.release) { bytes in Array(bytes) } let version = String(cString: releaseCopy) return version } var bootArgs: String { var size: size_t = 0 sysctlbyname("kern.bootargs", nil, &size, nil, 0) var machine = [CChar](repeating: 0, count: size) sysctlbyname("kern.bootargs", &machine, &size, nil, 0) let bootArgs = String(cString: machine) return bootArgs } var bootmanifestHash: String? { #if !targetEnvironment(simulator) let registryEntry = IORegistryEntryFromPath(kIOMasterPortDefault, "IODeviceTree:/chosen") guard let bootManifestHashUnmanaged = IORegistryEntryCreateCFProperty(registryEntry, "boot-manifest-hash" as CFString, kCFAllocatorDefault, 0), let bootManifestHash = bootManifestHashUnmanaged.takeRetainedValue() as? Data else { return nil } return bootManifestHash.map { String(format: "%02X", $0) }.joined() #else return nil #endif } } ================================================ FILE: Loader/Extensions/UIDevice/UIDevice+Jailbreak.swift ================================================ // // UIDevice+Jailbreak.swift // Packages // // Created by samara on 23.02.2025. // import UIKit.UIDevice extension UIDevice { struct Flags { /// User specified `rootful` var palerain_option_rootful: Bool /// User specified `rootless` var palerain_option_rootless: Bool /// System has signed system volum var palerain_option_ssv: Bool /// User specified `remove jailbreak` var palerain_option_force_revert: Bool /// User specified `safemode` var palerain_option_safemode: Bool /// If user has happened to have an rsod var palerain_option_failure: Bool /// See flags in string format var flags: String { String(format: "0x%llx", LREnvironment.jbd.getFlags()) } /// See flags in a string-list format var flagsList: String { let mirror = Mirror(reflecting: self) let properties = mirror.children.filter { $0.value is Bool } return "Flags: \(flags)\n\n" + properties.map { label, value in "\(label ?? "unknown"): \(value as? Bool ?? false)" }.joined(separator: "\n") } /// In some scenerios where the user would want to revert the jailbreak in-app /// there are cases where we cannot remove the entire jailbreak through this. /// Mainly, `rootful + ssv ((partial) fakefs)`, so we offer to /// revert the snapshot (and some files in the user partition) only on these installs. var shouldCleanFakefs: Bool { palerain_option_ssv && palerain_option_rootful } init() { let flags = LREnvironment.jbd.getFlags(); self.palerain_option_rootful = (flags & (1 << 0)) != 0 self.palerain_option_rootless = (flags & (1 << 1)) != 0 self.palerain_option_ssv = (flags & (1 << 7)) != 0 self.palerain_option_force_revert = (flags & (1 << 24)) != 0 self.palerain_option_safemode = (flags & (1 << 25)) != 0 self.palerain_option_failure = (flags & (1 << 60)) != 0 } } var palera1n: Flags { Flags() } } ================================================ FILE: Loader/Extensions/UITableView+image.swift ================================================ // // UITableView+image.swift // Loader // // Created by samara on 10.04.2025. // import UIKit.UITableViewCell extension UITableViewCell { /// Applies a properly sized and styled image to the cell's imageView /// - Parameter originalImage: The original image to resize and apply func setSectionImage(with originalImage: UIImage) { let imageSize = CGSize(width: 30, height: 30) let resizedImage = UIGraphicsImageRenderer(size: imageSize).image { context in originalImage.draw(in: CGRect(origin: .zero, size: imageSize)) } self.imageView?.image = resizedImage self.imageView?.layer.cornerRadius = 7 self.imageView?.clipsToBounds = true self.imageView?.layer.borderWidth = 0.7 self.imageView?.layer.cornerCurve = .continuous self.imageView?.layer.borderColor = UIColor.lightGray.withAlphaComponent(0.3).cgColor } } extension UIListContentConfiguration { /// Returns a modified configuration with a styled and resized section image. /// - Parameters: /// - originalImage: The image to resize and apply. /// - imageSize: The size to resize the image to. Defaults to 30×30. func applyingSectionImage(_ originalImage: UIImage, imageSize: CGSize = CGSize(width: 30, height: 30)) -> UIListContentConfiguration { let resizedImage = UIGraphicsImageRenderer(size: imageSize).image { _ in originalImage.draw(in: CGRect(origin: .zero, size: imageSize)) }.withRenderingMode(.alwaysOriginal) var config = self config.image = resizedImage config.imageToTextPadding = 12 config.imageProperties.cornerRadius = 7 config.imageProperties.reservedLayoutSize = imageSize config.imageProperties.maximumSize = imageSize config.imageProperties.tintColor = nil return config } } ================================================ FILE: Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "tv" } ], "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Contents.json ================================================ { "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon - App Store.imagestack/Contents.json ================================================ { "info" : { "author" : "xcode", "version" : 1 }, "layers" : [ { "filename" : "Front.imagestacklayer" }, { "filename" : "Middle.imagestacklayer" }, { "filename" : "Back.imagestacklayer" } ] } ================================================ FILE: Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "tv" } ], "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Contents.json ================================================ { "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "tv" } ], "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Contents.json ================================================ { "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json ================================================ { "images" : [ { "filename" : "1-min.png", "idiom" : "tv", "scale" : "1x" }, { "idiom" : "tv", "scale" : "2x" } ], "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon.imagestack/Back.imagestacklayer/Contents.json ================================================ { "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon.imagestack/Contents.json ================================================ { "info" : { "author" : "xcode", "version" : 1 }, "layers" : [ { "filename" : "Front.imagestacklayer" }, { "filename" : "Middle.imagestacklayer" }, { "filename" : "Back.imagestacklayer" } ] } ================================================ FILE: Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "tv", "scale" : "1x" }, { "idiom" : "tv", "scale" : "2x" } ], "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon.imagestack/Front.imagestacklayer/Contents.json ================================================ { "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json ================================================ { "images" : [ { "filename" : "title.png", "idiom" : "tv", "scale" : "1x" }, { "idiom" : "tv", "scale" : "2x" } ], "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/App Icon.imagestack/Middle.imagestacklayer/Contents.json ================================================ { "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/Contents.json ================================================ { "assets" : [ { "filename" : "App Icon - App Store.imagestack", "idiom" : "tv", "role" : "primary-app-icon", "size" : "1280x768" }, { "filename" : "App Icon.imagestack", "idiom" : "tv", "role" : "primary-app-icon", "size" : "400x240" }, { "filename" : "Top Shelf Image Wide.imageset", "idiom" : "tv", "role" : "top-shelf-image-wide", "size" : "2320x720" }, { "filename" : "Top Shelf Image.imageset", "idiom" : "tv", "role" : "top-shelf-image", "size" : "1920x720" } ], "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/Top Shelf Image Wide.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "tv", "scale" : "1x" }, { "idiom" : "tv", "scale" : "2x" } ], "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Loader/Resources/Assets.xcassets/AppIcon - tvOS.brandassets/Top Shelf Image.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "tv", "scale" : "1x" }, { "idiom" : "tv", "scale" : "2x" } ], "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Loader/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json ================================================ { "images" : [ { "filename" : "palera1nnightly.png", "idiom" : "universal", "platform" : "ios", "size" : "176x176" } ], "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Loader/Resources/Assets.xcassets/Contents.json ================================================ { "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Loader/Resources/Assets.xcassets/Loading.imageset/Contents.json ================================================ { "images" : [ { "filename" : "Oval.png", "idiom" : "universal" } ], "info" : { "author" : "xcode", "version" : 1 }, "properties" : { "template-rendering-intent" : "template" } } ================================================ FILE: Loader/Resources/Assets.xcassets/unknown.imageset/Contents.json ================================================ { "images" : [ { "filename" : "unknown2.png", "idiom" : "universal" } ], "info" : { "author" : "xcode", "version" : 1 } } ================================================ FILE: Loader/Resources/Info.plist ================================================ UIApplicationSceneManifest UIApplicationSupportsMultipleScenes UISceneConfigurations UIWindowSceneSessionRoleApplication UISceneConfigurationName Default Configuration UISceneDelegateClassName $(PRODUCT_MODULE_NAME).SceneDelegate ================================================ FILE: Loader/Resources/Localizable.xcstrings ================================================ { "sourceLanguage" : "en", "strings" : { "%@ is already installed." : { "comment" : "Prompt will have a message for you to reinstall the tapped package manager. (i.e \"Cydia is already installed\")", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "%@ is already installed." } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "%@ è già installato" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "%@はすでにインストールされています。" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "%@ eshte e instaluar." } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "%@已安裝。" } } } }, "Authentication is required to change your sudo password." : { "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Authentication is required to change your sudo password." } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "L’autenticazione è richiesta per cambiare la tua password di sudo" } } } }, "Bootstrap" : { "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Bootstrap" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Bootstrap" } } } }, "Bootstrap, managers, and configuration is not available for current jailbreak type" : { "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Bootstrap, managers, and configuration is not available for current jailbreak type \"%@\"" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Bootstrap, manager e configurazione non sono disponibili per il tipo di jailbreak “%@”" } } } }, "Cancel" : { "comment" : "The cancel action for alerts", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Cancel" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Annulla" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "キャンセル" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Anullo" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "取消" } } } }, "Change Download URL" : { "comment" : "A tableview button and title that prompts you to change where the loader downloads from", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Change Download URL" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Cambia URL Download" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "ダウンロードURLを変更" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Ndrysho URL-ne e shkarkimit" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "更改下載網址" } } } }, "Change Download URL Explanation" : { "comment" : "The section footer explanation for changing download URL", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "This will allow you to change where the loader application will download from with a custom URL to a json file, this can change the package manager, bootstrap, and repos included." } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Questo ti permetterà di cambiare dove l’app del loader scaricherà da un URL personalizzato ad un file json, questo può cambiare il gestore dei pacchetti, il bootstrap e le repo incluse." } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "カスタムURLを使用することでloaderアプリケーションが jsonファイルをダウンロードするアドレスを変更できるようになります。これにより、パッケージマネージャー、bootstrap、およびリポジトリが変更される可能性があります。" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Kjo do te lejoje ty qe te ndryshosh ku aplikacioni loader do shkarkoje me nje url ndryshe ne nje json, kjo do te ndryshoje manaxhuesin e paketave, bootstrap-in, dhe repot te vendosura." } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "這允許你改變JSON 配置文件的網址,這能夠改變包含的包管理器,基本越獄檔案和軟體庫。" } } } }, "Change Sudo Password" : { "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Change Sudo Password" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Cambia Password Sudo" } } } }, "Clean FakeFS" : { "comment" : "On rootful with fakefs, remove jailbreak files without removing fakefs", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Clean FakeFS" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Pulisci FakeFS" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "FakeFSを削除" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "清理偽檔案系統" } } } }, "Clean FakeFS Explanation" : { "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Uninstall jailbreak files, but does not remove FakeFS. This will allow setting up a new jailbreak environment without creating FakeFS again. This will reboot your %@." } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Disinstalla i file del jailbreak, ma non rimuove il FakeFS. Questo ti permetterà di impostare un nuovo ambiente di jailbreak senza creare il FakeFS ancora. Questo riavvierà il tuo %@" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "Jailbreak環境を削除(※FakeFSは削除されません) FakeFSを再度作成することなく新しいJailbreak環境を作成できます。" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "移除越獄文件,但不移除偽檔案系統。 這允許在不重新創建偽檔案系統的情況下設置新的越獄環境。你的%@將會重新啟動。" } } } }, "Credits" : { "comment" : "Tableview cell and section title for the credits page in the loader", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Credits" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Crediti" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "クレジット" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Kredite" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "鳴謝" } } } }, "Detected partial rootless installation. Please re-jailbreak and try again." : { "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Detected partial rootless installation. Please re-jailbreak and try again." } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Rilevata installazione rootless parziale. Rifai il jailbreak e riprova" } } } }, "Device Info" : { "comment" : "Tableview cell and section title for the about page in the loader", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Device Info" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Info Dispositivo" } }, "ja" : { "stringUnit" : { "state" : "needs_review", "value" : "情報" } }, "sq-AL" : { "stringUnit" : { "state" : "needs_review", "value" : "Rreth" } }, "zh-HK" : { "stringUnit" : { "state" : "needs_review", "value" : "關於" } } } }, "Done" : { "comment" : "If the action is completed", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Done" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Fatto" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "完了" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Mbaroi" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "完成" } } } }, "Download" : { "comment" : "Section title for changing download URL", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Download" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Download" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "ダウンロード" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Shkarko" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "下載" } } } }, "Download Item" : { "comment" : "This is text that is displayed when in the download process of installing the bootstrap. (i.e \"Downloading Cydia\")", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Downloading %@" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Scarico %@" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "%@をダウンロード" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Po shkarkon %@" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "正在下載%@" } } } }, "Downloading Base System" : { "comment" : "This is text that is displayed when downloading the bootstrap file", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Downloading Base System" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Scarico Sistema Base" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "Base Systemをダウンロード" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Po shkarkon sistemin baze" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "正在下載基本越獄檔案" } } } }, "Downloading Package Managers" : { "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Downloading Package Managers" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Scarico Gestori Pacchetti" } } } }, "Downloading Required Packages" : { "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Downloading Required Packages" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Scarico i pacchetti richiesti" } } } }, "Exit" : { "comment" : "The exit action for alerts, which would close the application and put you to the home screen", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Exit" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Esci" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "終了" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Dil" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "退出" } } } }, "Exit Safemode" : { "comment" : "Alert action that exits safemode for the user incase a failure happened", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Exit Safemode" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Esci dalla Safemode" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : " Safemodeを終了" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Dil nga mënyra e sigurt" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "退出安全模式" } } } }, "General" : { "comment" : "Tableview section title for general options", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "General" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Generali" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "一般" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Gjeneral" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "一般" } } } }, "Install" : { "comment" : "Title for first section in the main screen", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Install" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Installa" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "インストール" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Instalo" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "安裝" } } } }, "Install %@" : { "comment" : "Prompt action will have a message for you to install the tapped package manager. (i.e \"Install Cydia\")", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Install %@" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Installa %@" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "%@をインストール" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Instalo %@" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "安裝 %@" } } } }, "Installing Base Bootstrap" : { "comment" : "Notice in download view when bootstrap is being extracted by palera1n daemon", "extractionState" : "manual", "localizations" : { "it" : { "stringUnit" : { "state" : "translated", "value" : "Installo Bootstrap di Base" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "正在解包越獄檔案" } } } }, "Installing Explanation" : { "comment" : "Text to the the user not to exit the app while bootstrapping", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Do not exit the app during this process, it may lead to unforeseen issues." } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Non uscire dall’app durante questo processo, potrebbe causare problemi." } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "アプリを閉じないでください。予期せぬ問題が発生することがあります。" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "請不要退出應用程式,否則可能會發生問題。" } } } }, "Installing Item" : { "comment" : "This is text that is displayed when in the install process of installing the bootstrap. (i.e \"Installing Cydia\")", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Installing %@" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Installo %@" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "%@をインストール" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Duke instaluar %@" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "正在安裝%@" } } } }, "Installing Packages" : { "comment" : "Notice in download view when installing packages", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Installing Packages" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Installo Pacchetti" } }, "zh-HK" : { "stringUnit" : { "state" : "needs_review", "value" : "正在安裝套件" } } } }, "Is Force Reverted" : { "comment" : "Prompt message that tells you to reboot the device", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "You have used the force-revert option when using palera1n, please finish the process by fully rebooting the %@." } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Hai usato l’opzione force-revert quando usi Palera1n, finisci il processo riavviando completamente il %@" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "palera1nを使用する際に強制復元オプションを使用した場合、デバイスを再起動してください。" } }, "sq-AL" : { "stringUnit" : { "state" : "needs_review", "value" : "Ti ke perdorur opsionin \"force-revert\", ju lutemi qe te restartoni pajisjen." } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "你使用了palera1n中的--force-revert(強制還原)選項,請重新啟動裝置以完成這個程序。" } } } }, "Jailbreak environment not supported by current configuration" : { "comment" : "Alert body when the custom configuration file does not support the current jailbreak environment", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "The current jailbreak environment is not supported by the current loader configuration file.\n\nSwitch to a supported jailbreak environment, or change configuration in options -> Change Download URL.\n\nPlatform: %@\nJailbreak type: %@\nCF: %d" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "L’ambiente di jailbreak attuale non è supportato dal file di configurazione del loader attuale. Migra ad un ambiente di jailbreak supportato, o cambia la configurazione nelle opzioni -> Cambia URL Download. Piattaforma: %@ Tipo di Jailbreak: %@ CF: %d " } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "當前的越獄環境不被當前的配置文件支援。\n\n請切換到一個支援的越獄環境或在選項 -> 更改下載網址中更改配置。\n\n平台:%@\n越獄類型:%@\nCF: %d" } } } }, "Loading" : { "comment" : "A tableview cell would appear with this label when its trying to retrieve the configuration through palera1ns website", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Loading" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Carico" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "読み込み中" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Duke u hapur" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "載入中" } } } }, "Open %@" : { "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Open %@" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Apri %@" } } } }, "Other" : { "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Other" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Altro" } } } }, "Password" : { "comment" : "Placeholder text for the first text field in the password prompt", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Password" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Password" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "パスワード" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Fjalëkalimi" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "密碼" } } } }, "Password Explanation" : { "comment" : "The description in the password prompt telling you what the password is exactly for", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "In order to use command line tools like \"sudo\" after jailbreaking, you will need to set a terminal passcode. (This cannot be empty)" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "In ordine per usare strumenti di linea di comando come “sudo” dopo il jailbreak, dovrai impostare un codice per il terminale (Non puoi lasciarlo vuoto)" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "Jailbreak後に \"sudo \"のようなコマンドラインツールを使うには、terminalのパスコードを設定する必要があります。(空にすることはできません)" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Per te perdorur mjetet ne terminal si \"sudo\" pasi te kini bere jailbreak, ju duhet te vendosni nje password terminali. (Ky password nuk mund te jete bosh.)" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "要使用例如「sudo」 等命令行工具,你需要設定一個命令行密碼。(這不能為空)" } } } }, "Preparing Environment" : { "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Preparing Environment" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Preparo Ambiente" } } } }, "Preparing Repositories" : { "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Preparing Repositories" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Preparo Repository" } } } }, "Reboot" : { "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Reboot" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Riavvia" } } } }, "Refresh" : { "comment" : "Refresh button in top bar on iOS", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Refresj" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Aggiorna" } }, "ja" : { "stringUnit" : { "state" : "needs_review", "value" : "更新" } }, "zh-HK" : { "stringUnit" : { "state" : "needs_review", "value" : "重新載入" } } } }, "Reinstall %@" : { "comment" : "Prompt action will have a message for you to reinstall the tapped package manager. (i.e \"ReInstall Cydia\")", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Reinstall %@" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Reinstalla %@" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "%@を再インストール" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Ri-Instalo %@" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "重新安裝%@" } } } }, "Repeat Password" : { "comment" : "Placeholder text for the second text field in the password prompt", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Repeat Password" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Ripeti Password" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "パスワードを再度入力" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Rivendos fjalëkalimin" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "再次輸入密碼" } } } }, "Reset" : { "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Reset" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Reimposta" } } } }, "Reset Configuration" : { "comment" : "Tableview cell which gives the user an option to go back to the original URL to where the loader downloads from", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Reset Configuration" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Reimposta Configurazione" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "URLの変更をリセット" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Rikthe ne gjendje fillestare konfigurimin" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "重設配置文件" } } } }, "Restore System" : { "comment" : "A tableview cell which would prompt you to uninstall your jailbreak", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Restore System" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Ripristina Sistema" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "システムを復元" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Kthe ne gjendje fillestare sistemin e jailbreak" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "還原系統" } } } }, "Restore System Explanation" : { "comment" : "Prompt will have a message for you to uninstall the jailbreak, \"This will reboot your %@\", here will either show if you have an iPhone or iPad, i.e \"This will reboot your iPad\"", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Uninstall jailbreak files and other changes made to the operating system, without erasing your data. This will reboot your %@." } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Disinstalla i file di jailbreak ed altri cambiamenti fatti al sistema operativo, senza cancellare i tuoi dati. Questo riavvierà il tuo %@." } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "データを消去せずに、jailbreakファイルとOSに加えられたその他の変更をアンインストールします。その後、%@は再起動します。" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Çinstalo dosjet e jailbreak dhe ndryshime te tjera te bere ne sistem, kjo do heqe gjerat e jailbreakut, pa prekur sistemin e operimit tend. Kjo do te restartoje %@" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "移除越獄文件和其他操作系統修改,但不移除你的數據。你的%@將會重新啟動。" } } } }, "Retry" : { "comment" : "A tableview cell would appear with this button label if it ever fails to retrieve the loader configuration through palera1ns website", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Retry" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Riprova" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "再試行" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Riprovo" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "重試" } } } }, "Set" : { "comment" : "The set action for alerts, this is mainly used for when changing the URL where the loader downloads from", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Set" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Imposta" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "設定" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Vendos" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "設定" } } } }, "Set Password" : { "comment" : "Title of the password prompt", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Set Password" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Imposta Password" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "パスワードを設定" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Vendos Fjalëkalimin" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "設定密碼" } } } }, "Settings" : { "comment" : "A tabor item to bring up the settings page", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Settings" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Impostazioni" } }, "ja" : { "stringUnit" : { "state" : "needs_review", "value" : "オプション" } }, "sq-AL" : { "stringUnit" : { "state" : "needs_review", "value" : "Opsionet" } }, "zh-HK" : { "stringUnit" : { "state" : "needs_review", "value" : "選項" } } } }, "Show Password Prompt" : { "comment" : "A tableview cell which toggles if the password alert should prompt you", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Show Password Prompt" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Mostra Prompt Password" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "パスワードプロンプトを表示" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Trego menune e vendosjes se fjalëkalimit" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "要求設定密碼" } } } }, "This Loader version is too old. It is recommended that you update to latest." : { "comment" : "You're using a very old version of the loader application", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "This Loader version is too old. It is recommended that you update to latest." } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Questa versione del loader è troppo vecchia. Ti consigliamo di aggiornare all’ultima versione" } }, "ja" : { "stringUnit" : { "state" : "needs_review", "value" : "このloaderのバージョンは古すぎるため、予期せぬ問題が発生する可能性があります。最新版のpalera1nにアップデートすることをお勧めします。" } }, "sq-AL" : { "stringUnit" : { "state" : "needs_review", "value" : "Versioni i Aplikacionit Loader eshte shume i vjeter dhe mund te kete probleme te papara. Ju rekomandojme qe ju te shkarkoni versionin me te ri te palera1n." } }, "zh-HK" : { "stringUnit" : { "state" : "needs_review", "value" : "此安裝程式版本太舊,可能發生問題。建議更新到最新版的palera1n。" } } } }, "Too Long" : { "comment" : "If your set password is over the 254 char limit in the password prompt", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Too Long" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Troppo Lungo" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "パスワードが長すぎます" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Shume vone" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "太長" } } } }, "Troubleshoot" : { "comment" : "Title for second section in the main screen", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Troubleshoot" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Problemi" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "トラブルシューティング" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Zgjidh Problemet" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "除錯" } } } }, "Type" : { "comment" : "Tableview cell label which shows if you're currently rootless or rootful with palera1n", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Type" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Tipo" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "種類" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Tipi" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "類型" } } } }, "Update Required" : { "comment" : "Alert title when current loader version is lower than the minimum loader version in JSON.", "extractionState" : "manual", "localizations" : { "it" : { "stringUnit" : { "state" : "translated", "value" : "Aggiornamento Richiesto" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "需要更新" } } } }, "Version" : { "comment" : "Tableview cell label which shows your iOS version", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "Version" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Versione" } }, "ja" : { "stringUnit" : { "state" : "translated", "value" : "バージョン" } }, "sq-AL" : { "stringUnit" : { "state" : "translated", "value" : "Versioni" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", "value" : "版本" } } } }, "You've entered safemode by either manually or palera1n saved you from it." : { "comment" : "Alert action that cancels if the user chooses to cancel in the exit safemode alert", "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "You've entered safemode by either manually or palera1n saved you from it." } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Sei entrato nella safemode entrando manualmente o palera1n ti ha salvato da quello." } }, "ja" : { "stringUnit" : { "state" : "needs_review", "value" : "セーフモードを終了するには、\"Safemodeを終了\"を選択してください" } }, "sq-AL" : { "stringUnit" : { "state" : "needs_review", "value" : "Per te dalë nga menyra e sigurt, kliko, \"Dil nga menyra e sigurt\"" } }, "zh-HK" : { "stringUnit" : { "state" : "needs_review", "value" : "你手動進入了安全模式或palera1n偵測到異常而進入安全模式。如要退出安全模式,請按「退出安全模式」 。" } } } }, "You've removed the jailbreak!" : { "extractionState" : "manual", "localizations" : { "en" : { "stringUnit" : { "state" : "translated", "value" : "You've removed the jailbreak!" } }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Hai rimosso il jailbreak!" } } } } }, "version" : "1.0" } ================================================ FILE: Loader/SceneDelegate.swift ================================================ // // SceneDelegate.swift // Loader // // Created by samara on 9.03.2025. // import UIKit class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = scene as? UIWindowScene else { return } let window = UIWindow(windowScene: windowScene) let controller = LRTabbarController() #if os(iOS) if #available(iOS 15.0, *) { window.tintColor = .label } #endif window.rootViewController = controller window.makeKeyAndVisible() self.window = window } } ================================================ FILE: Loader/Supporting Files/Headers/LSApplicationWorkspace.h ================================================ // // LSApplicationWorkspace.h // Loader // // Created by samara on 13.03.2025. // #include #include #include @interface LSBundleProxy : NSObject @property(nonatomic, assign, readonly) NSURL *bundleURL; @property(nonatomic, assign, readonly) NSString *canonicalExecutablePath; @end @interface LSApplicationWorkspace + (instancetype)defaultWorkspace; - (BOOL)openSensitiveURL:(NSURL *)url withOptions:(NSDictionary *)options; - (BOOL)openURL:(NSURL *)url withOptions:(NSDictionary *)options; - (BOOL)openApplicationWithBundleID:(NSString *)arg1; @end ================================================ FILE: Loader/Supporting Files/Headers/Macros.h ================================================ // // Macros.h // Loader // // Created by samara on 25.03.2025. // #ifndef Macros_h #define Macros_h #import NS_INLINE NSString* _Nonnull loaderConfigURL(void) CF_SWIFT_NAME(loaderConfigURL()) { return @CONFIG_URL; } NS_INLINE NSString* _Nonnull dotfilePath(void) CF_SWIFT_NAME(dotfilePath()) { return @DOTFILE_PATH; } #endif /* Macros_h */ ================================================ FILE: Loader/Supporting Files/Headers/MobileGestalt.h ================================================ /* * libMobileGestalt header. * Mobile gestalt functions as a QA system. You ask it a question, and it gives you the answer! :) * * Copyright (c) 2013-2014 Cykey (David Murray) * Improved by @PoomSmart (2020) * All rights reserved. */ #ifndef LIBMOBILEGESTALT_H_ #define LIBMOBILEGESTALT_H_ #include #if __cplusplus extern "C" { #endif #pragma mark - API CFPropertyListRef MGCopyAnswer(CFStringRef property); #pragma mark - Device Information static const CFStringRef kMGPhysicalHardwareNameString = CFSTR("PhysicalHardwareNameString"); #if __cplusplus } #endif #endif /* LIBMOBILEGESTALT_H_ */ ================================================ FILE: Loader/Supporting Files/Headers/posixspawn.h ================================================ // // posixspawn.h // loader-rewrite // // Created by samara on 1/30/24. // #include #define POSIX_SPAWN_PERSONA_FLAGS_OVERRIDE 1 int posix_spawnattr_set_persona_np(const posix_spawnattr_t* __restrict, uid_t, uint32_t); int posix_spawnattr_set_persona_uid_np(const posix_spawnattr_t* __restrict, uid_t); int posix_spawnattr_set_persona_gid_np(const posix_spawnattr_t* __restrict, uid_t); ================================================ FILE: Loader/Supporting Files/IOKit.tbd ================================================ --- !tapi-tbd tbd-version: 4 targets: [ arm64-tvos, arm64e-tvos, arm64-ios, arm64e-ios, arm64-macos, arm64e-macos, x86_64-macos, arm64-ios-simulator, arm64-tvos-simulator, x86_64-ios-simulator, x86_64-tvos-simulator ] uuids: - target: arm64-tvos value: B076C6CA-A277-3870-94E5-5C5C984C445E - target: arm64e-tvos value: B076C7CA-A277-3870-94E5-5C5C984C4451 - target: arm64e-ios value: B076C7CA-A277-3870-94E5-5C5C984C4452 - target: arm64e-ios value: B076C7CA-A277-3870-94E5-5C5C984C4453 - target: arm64e-macos value: B076C7CA-A277-3870-94E5-5C5C984C4454 - target: arm64-macos value: B076C7CA-A277-3870-94E5-5C5C984C4455 - target: x86_64-macos value: B076C7CA-A277-3870-94E5-5C5C984C4456 install-name: '/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit' current-version: 275 exports: - targets: [ arm64-tvos, arm64e-tvos, arm64-ios, arm64e-ios, arm64-macos, arm64e-macos, x86_64-macos ] symbols: [ _IOAVAudioFormatString, _IOAVAudioGetChannelAllocation, _IOAVAudioGetChannelAllocationDefault, _IOAVAudioGetChannelLayoutData, _IOAVAudioGetSpeakerAllocationMask, _IOAVAudioInterfaceCopyChannelLayoutElements, _IOAVAudioInterfaceCopyDiagnosticsString, _IOAVAudioInterfaceCopyElements, _IOAVAudioInterfaceCopyProperties, _IOAVAudioInterfaceCopyProperty, _IOAVAudioInterfaceCreate, _IOAVAudioInterfaceCreateWithService, _IOAVAudioInterfaceGetLinkData, _IOAVAudioInterfaceGetLinkDataWithSource, _IOAVAudioInterfaceGetLocation, _IOAVAudioInterfaceGetService, _IOAVAudioInterfaceGetTypeID, _IOAVAudioInterfaceSetLogLevel, _IOAVAudioInterfaceSetLogLevelMask, _IOAVAudioInterfaceSetProperty, _IOAVAudioInterfaceStartLink, _IOAVAudioInterfaceStartLinkWithSource, _IOAVAudioInterfaceStopLink, _IOAVAudioInterfaceStopLinkWithSource, _IOAVAudioLinkGetBitRate, _IOAVAudioLinkGetHDMIAudioPacketType, _IOAVAudioLinkGetMaxStreamChannelCount, _IOAVAudioLinkGetMaxStreamSampleRate, _IOAVAudioLinkIsIEC61937, _IOAVAudioLinkSampleRateForFormat, _IOAVAudioSampleRateEnum, _IOAVAudioSampleRateScalar, _IOAVAudioSampleSizeEnum, _IOAVAudioSampleSizeScalar, _IOAVAudioSpeakerString, _IOAVCommandString, _IOAVConnectCallCopyMethod, _IOAVConnectCallSetMethod, _IOAVContentProtectionProtocolString, _IOAVContentProtectionTypeString, _IOAVControlInterfaceCopyDiagnosticsString, _IOAVControlInterfaceCopyProperties, _IOAVControlInterfaceCopyProperty, _IOAVControlInterfaceCreate, _IOAVControlInterfaceCreateWithService, _IOAVControlInterfaceGetLocation, _IOAVControlInterfaceGetService, _IOAVControlInterfaceGetTypeID, _IOAVControlInterfaceSetLogLevel, _IOAVControlInterfaceSetLogLevelMask, _IOAVControlInterfaceSetProperty, _IOAVControllerClearEventLog, _IOAVControllerCopyDiagnosticsString, _IOAVControllerCopyProperties, _IOAVControllerCopyProperty, _IOAVControllerCreate, _IOAVControllerCreateWithLocation, _IOAVControllerCreateWithService, _IOAVControllerForceHotPlugDetect, _IOAVControllerGetLocation, _IOAVControllerGetPower, _IOAVControllerGetTypeID, _IOAVControllerSetEventLogCommandMask, _IOAVControllerSetEventLogEventMask, _IOAVControllerSetEventLogSize, _IOAVControllerSetLogLevel, _IOAVControllerSetLogLevelMask, _IOAVControllerSetPower, _IOAVControllerSetProperty, _IOAVControllerSetProtectionType, _IOAVControllerSetVirtualDeviceMode, _IOAVControllerSleepDisplay, _IOAVControllerWakeDisplay, _IOAVCreateDiagnosticsReference, _IOAVCreateDiagnosticsReferenceWithLocation, _IOAVCreateDiagnosticsString, _IOAVCreateDiagnosticsStringWithLocation, _IOAVCreateStringWithAudioChannelLayoutData, _IOAVCreateStringWithAudioLinkData, _IOAVCreateStringWithData, _IOAVCreateStringWithElement, _IOAVCreateStringWithElements, _IOAVCreateStringWithVideoColorData, _IOAVCreateStringWithVideoLinkData, _IOAVCreateStringWithVideoTimingData, _IOAVDSCCapabilitiesGetMaxSlicesPerLine, _IOAVDSCCapabilitiesGetPeakPixelRateForMode, _IOAVDSCModeForPixelEncoding, _IOAVDSCSlicesPerLineScalar, _IOAVDeviceClearEventLog, _IOAVDeviceCopyDiagnosticsString, _IOAVDeviceCopyProperties, _IOAVDeviceCopyProperty, _IOAVDeviceCreate, _IOAVDeviceCreateWithLocation, _IOAVDeviceCreateWithService, _IOAVDeviceGetController, _IOAVDeviceGetLinkData, _IOAVDeviceGetLocation, _IOAVDeviceGetProtectionStatus, _IOAVDeviceGetTypeID, _IOAVDeviceReadI2C, _IOAVDeviceSetEventLogCommandMask, _IOAVDeviceSetEventLogEventMask, _IOAVDeviceSetEventLogSize, _IOAVDeviceSetLogLevel, _IOAVDeviceSetLogLevelMask, _IOAVDeviceSetProperty, _IOAVDeviceWriteI2C, _IOAVDisplayMemoryCreateWithName, _IOAVDisplayMemoryCreateWithService, _IOAVDisplayMemoryGetTypeID, _IOAVDisplayMemoryRead, _IOAVDisplayMemoryWrite, _IOAVEDIDIsStandard, _IOAVElementTypeString, _IOAVEncryptionStatusString, _IOAVEventLogEventTypeString, _IOAVGetCEAVideoShortID, _IOAVGetCEAVideoShortIDWithData, _IOAVGetCEAVideoShortIDWithDataActive, _IOAVGetCEAVideoTimingData, _IOAVGetCEAVideoTimingDataWithShortID, _IOAVGetCVTVideoTimingData, _IOAVGetDMTVideoTimingData, _IOAVGetGTFVideoTimingData, _IOAVGetSPDInfoFrame, _IOAVGetVideoTimingData, _IOAVGetVideoTimingDataByID, _IOAVGetVideoTimingTable, _IOAVHDMIAudioClockRegenerationDataForLink, _IOAVHDMICharacterRate, _IOAVHDMIClockRate, _IOAVHDMIFRLBandwidth, _IOAVHDMIFRLBitRateScalar, _IOAVHDMIFRLCharacterRate, _IOAVHDMIFRLRateString, _IOAVInfoFrameGetChecksum, _IOAVInfoFrameTypeString, _IOAVLinkSourceString, _IOAVLinkTypeString, _IOAVLocationString, _IOAVObjectConformsTo, _IOAVPropertyListCreateWithCFProperties, _IOAVProtectionStatusString, _IOAVRecoverableError, _IOAVServiceClearEventLog, _IOAVServiceCopyDiagnosticsString, _IOAVServiceCopyEDID, _IOAVServiceCopyPhysicalAddress, _IOAVServiceCopyProperties, _IOAVServiceCopyProperty, _IOAVServiceCreate, _IOAVServiceCreateWithLocation, _IOAVServiceCreateWithService, _IOAVServiceGetChosenContentProtection, _IOAVServiceGetContentProtectionCapabilities, _IOAVServiceGetDevice, _IOAVServiceGetEncryptionStatus, _IOAVServiceGetHDCPAuthenticatedContentType, _IOAVServiceGetLinkData, _IOAVServiceGetLinkDataWithSource, _IOAVServiceGetLocation, _IOAVServiceGetPower, _IOAVServiceGetProtectionStatus, _IOAVServiceGetTypeID, _IOAVServiceReadI2C, _IOAVServiceSetContentProtectionCapabilities, _IOAVServiceSetContentProtectionPolicyOptions, _IOAVServiceSetContentProtectionSupportEnabled, _IOAVServiceSetEventLogCommandMask, _IOAVServiceSetEventLogEventMask, _IOAVServiceSetEventLogSize, _IOAVServiceSetHDRStaticMetadata, _IOAVServiceSetLogLevel, _IOAVServiceSetLogLevelMask, _IOAVServiceSetProperty, _IOAVServiceSetVirtualEDIDMode, _IOAVServiceStartInfoFrame, _IOAVServiceStartInfoFrameWithSource, _IOAVServiceStartLink, _IOAVServiceStartLinkWithSource, _IOAVServiceStopInfoFrame, _IOAVServiceStopInfoFrameWithSource, _IOAVServiceStopLink, _IOAVServiceStopLinkWithSource, _IOAVServiceWriteI2C, _IOAVStandardTypeString, _IOAVTransportString, _IOAVTransportSupportsCEA, _IOAVTransportSupportsRGBOnly, _IOAVVideoActiveFormatAspectRatio, _IOAVVideoAspectRatioString, _IOAVVideoAxisString, _IOAVVideoColorBitDepth, _IOAVVideoColorBitDepthIsSupported, _IOAVVideoColorBitDepthMinimumForEOTF, _IOAVVideoColorBitDepthScalar, _IOAVVideoColorBitsPerPixel, _IOAVVideoColorCoefficientString, _IOAVVideoColorDynamicRangeString, _IOAVVideoColorEOTFString, _IOAVVideoColorMinimumBitsPerPixelDSC, _IOAVVideoColorSpaceString, _IOAVVideoColorimetryIsValid, _IOAVVideoColorimetryString, _IOAVVideoGetPixelClockTolerance, _IOAVVideoInterfaceCopyColorElements, _IOAVVideoInterfaceCopyDiagnosticsString, _IOAVVideoInterfaceCopyDisplayAttributes, _IOAVVideoInterfaceCopyProperties, _IOAVVideoInterfaceCopyProperty, _IOAVVideoInterfaceCopyTimingElements, _IOAVVideoInterfaceCreate, _IOAVVideoInterfaceCreateWithLocation, _IOAVVideoInterfaceCreateWithService, _IOAVVideoInterfaceGetLinkData, _IOAVVideoInterfaceGetLinkDataWithSource, _IOAVVideoInterfaceGetLocation, _IOAVVideoInterfaceGetService, _IOAVVideoInterfaceGetTypeID, _IOAVVideoInterfaceSetBounds, _IOAVVideoInterfaceSetColorDitherRemoval, _IOAVVideoInterfaceSetLogLevel, _IOAVVideoInterfaceSetLogLevelMask, _IOAVVideoInterfaceSetProperty, _IOAVVideoInterfaceSetRotation, _IOAVVideoInterfaceSetScreenVirtualTemperature, _IOAVVideoInterfaceStartLink, _IOAVVideoInterfaceStartLinkWithModes, _IOAVVideoInterfaceStartLinkWithSource, _IOAVVideoInterfaceStopLink, _IOAVVideoInterfaceStopLinkWithSource, _IOAVVideoInterfaceUpdateLinkWithSource, _IOAVVideoLinkBandwidth, _IOAVVideoLinkIsDolbyVision, _IOAVVideoLinkModeString, _IOAVVideoLinkRequiresHDMIScrambling, _IOAVVideoPixelEncodingIsDolbyVision, _IOAVVideoPixelEncodingIsLLDolbyVision, _IOAVVideoPixelEncodingString, _IOAVVideoScanInformationString, _IOAVVideoTimingGetActivePixelClock, _IOAVVideoTimingGetBlankingStyle, _IOAVVideoTimingGetITSource, _IOAVVideoTimingGetPixelClock, _IOAVVideoTimingGetSyncRateRounded, _IOAVVideoTimingIsVideoOptimized, _IOAVVideoTimingStandardString, _IOAVVideoTimingTypeString, _IOAVVideoTimingVideoOptimizedDelta, _IOAllowPowerChange, _IOBSDNameMatching, _IOCFSerialize, _IOCFURLWriteDataAndPropertiesToResource, _IOCFUnserialize, _IOCFUnserializeBinary, _IOCFUnserializeWithSize, _IOCFUnserializeparse, _IOCancelPowerChange, _IOCatalogueGetData, _IOCatalogueModuleLoaded, _IOCatalogueReset, _IOCatalogueSendData, _IOCatalogueTerminate, _IOCatlogueGetGenCount, _IOCloseConnection, _IOCompatibiltyNumber, _IOConnectAddClient, _IOConnectAddRef, _IOConnectCallAsyncMethod, _IOConnectCallAsyncScalarMethod, _IOConnectCallAsyncStructMethod, _IOConnectCallMethod, _IOConnectCallScalarMethod, _IOConnectCallStructMethod, _IOConnectGetService, _IOConnectMapMemory, _IOConnectMapMemory64, _IOConnectRelease, _IOConnectSetCFProperties, _IOConnectSetCFProperty, _IOConnectSetNotificationPort, _IOConnectTrap0, _IOConnectTrap1, _IOConnectTrap2, _IOConnectTrap3, _IOConnectTrap4, _IOConnectTrap5, _IOConnectTrap6, _IOConnectUnmapMemory, _IOConnectUnmapMemory64, _IOCopySystemLoadAdvisoryDetailed, _IOCreatePlugInInterfaceForService, _IOCreateReceivePort, _IODPAudioCodingType, _IODPCalculateM, _IODPCommandString, _IODPCompareLinkTrainingData, _IODPConstrainDriveSettings, _IODPConstrainedDriveSettings, _IODPControllerCreate, _IODPControllerCreateWithLocation, _IODPControllerCreateWithService, _IODPControllerGetAVController, _IODPControllerGetMaxLaneCount, _IODPControllerGetMaxLinkRate, _IODPControllerGetMinLaneCount, _IODPControllerGetMinLinkRate, _IODPControllerGetTypeID, _IODPControllerSetDriveSettings, _IODPControllerSetLaneCount, _IODPControllerSetLinkRate, _IODPControllerSetMaxLaneCount, _IODPControllerSetMaxLinkRate, _IODPControllerSetMinLaneCount, _IODPControllerSetMinLinkRate, _IODPControllerSetQualityPattern, _IODPControllerSetScramblingInhibited, _IODPControllerSetSupportsDownspread, _IODPControllerSetSupportsEnhancedMode, _IODPCreateStringWithLinkTrainingData, _IODPDeviceCreate, _IODPDeviceCreateWithLocation, _IODPDeviceCreateWithService, _IODPDeviceGetAVDevice, _IODPDeviceGetController, _IODPDeviceGetLinkTrainingData, _IODPDeviceGetMaxLaneCount, _IODPDeviceGetMaxLinkRate, _IODPDeviceGetRevisionMajor, _IODPDeviceGetRevisionMinor, _IODPDeviceGetSupportsDownspread, _IODPDeviceGetSupportsEnhancedMode, _IODPDeviceGetSymbolErrorCount, _IODPDeviceGetTypeID, _IODPDeviceReadDPCD, _IODPDeviceSetUpdateMode, _IODPDeviceSetUpdated, _IODPDeviceTypeString, _IODPDeviceWriteDPCD, _IODPDriveSettingsAreValid, _IODPDriveSettingsEqual, _IODPEventLogEventTypeString, _IODPInfoFrameSDP, _IODPLinkBandwidth, _IODPLinkBitRateForLinkSymbolClock, _IODPLinkRateEnum, _IODPLinkRateIsStandard, _IODPLinkRateRequiredForVideoBandwidth, _IODPLinkRateScalar, _IODPLinkSymbolClockForLinkBitRate, _IODPLinkSymbolRate, _IODPQualityPatternName, _IODPServiceCreate, _IODPServiceCreateWithLocation, _IODPServiceCreateWithService, _IODPServiceGetAVService, _IODPServiceGetDevice, _IODPServiceGetSinkCount, _IODPServiceGetSymbolErrorCount, _IODPServiceGetTypeID, _IODPServiceRetrainLink, _IODPStreamClockHz, _IODPTrainingPatternLength, _IODPTrainingPatternName, _IODPUnifiedDriveSettings, _IODPVideoBandwidth, _IODPVideoLinkMainStreamAttributeData, _IODPVideoLinkVideoStreamConfigurationSDP, _IODataQueueAllocateNotificationPort, _IODataQueueDataAvailable, _IODataQueueDequeue, _IODataQueueEnqueue, _IODataQueuePeek, _IODataQueueSetNotificationPort, _IODataQueueWaitForAvailableData, _IODeregisterApp, _IODeregisterForRemoteSystemPower, _IODeregisterForSystemPower, _IODestroyPlugInInterface, _IODispatchCalloutFromCFMessage, _IODispatchCalloutFromMessage, _IOEthernetControllerCreate, _IOEthernetControllerGetBSDSocket, _IOEthernetControllerGetIONetworkInterfaceObject, _IOEthernetControllerGetTypeID, _IOEthernetControllerReadPacket, _IOEthernetControllerRegisterBSDAttachCallback, _IOEthernetControllerRegisterDisableCallback, _IOEthernetControllerRegisterEnableCallback, _IOEthernetControllerRegisterPacketAvailableCallback, _IOEthernetControllerScheduleWithRunLoop, _IOEthernetControllerSetDispatchQueue, _IOEthernetControllerSetLinkStatus, _IOEthernetControllerSetPowerSavings, _IOEthernetControllerUnscheduleFromRunLoop, _IOEthernetControllerWritePacket, _IOGetSystemLoadAdvisory, _IOHIDAnalyticsEventActivate, _IOHIDAnalyticsEventAddField, _IOHIDAnalyticsEventAddHistogramField, _IOHIDAnalyticsEventCancel, _IOHIDAnalyticsEventCreate, _IOHIDAnalyticsEventSetIntegerValueForField, _IOHIDAnalyticsEventSetStringValueForField, _IOHIDAnalyticsHistogramEventCreate, _IOHIDAnalyticsHistogramEventSetIntegerValue, _IOHIDCheckAccess, _IOHIDConnectionFilterActivate, _IOHIDConnectionFilterCancel, _IOHIDConnectionFilterCopyProperty, _IOHIDConnectionFilterCreate, _IOHIDConnectionFilterFilterEvent, _IOHIDConnectionFilterGetTypeID, _IOHIDConnectionFilterSetCancelHandler, _IOHIDConnectionFilterSetDispatchQueue, _IOHIDConnectionFilterSetProperty, _IOHIDCopyCFTypeParameter, _IOHIDCopyHIDParameterFromEventSystem, _IOHIDCreateSharedMemory, _IOHIDDeviceActivate, _IOHIDDeviceCancel, _IOHIDDeviceClose, _IOHIDDeviceConformsTo, _IOHIDDeviceCopyDescription, _IOHIDDeviceCopyMatchingElements, _IOHIDDeviceCopyValueMultiple, _IOHIDDeviceCopyValueMultipleWithCallback, _IOHIDDeviceCreate, _IOHIDDeviceGetProperty, _IOHIDDeviceGetRegistryEntryID, _IOHIDDeviceGetReport, _IOHIDDeviceGetReportWithCallback, _IOHIDDeviceGetService, _IOHIDDeviceGetTypeID, _IOHIDDeviceGetValue, _IOHIDDeviceGetValueWithCallback, _IOHIDDeviceGetValueWithOptions, _IOHIDDeviceOpen, _IOHIDDeviceRegisterInputReportCallback, _IOHIDDeviceRegisterInputReportWithTimeStampCallback, _IOHIDDeviceRegisterInputValueCallback, _IOHIDDeviceRegisterRemovalCallback, _IOHIDDeviceScheduleWithRunLoop, _IOHIDDeviceSetCancelHandler, _IOHIDDeviceSetDispatchQueue, _IOHIDDeviceSetInputValueMatching, _IOHIDDeviceSetInputValueMatchingMultiple, _IOHIDDeviceSetProperty, _IOHIDDeviceSetReport, _IOHIDDeviceSetReportWithCallback, _IOHIDDeviceSetValue, _IOHIDDeviceSetValueMultiple, _IOHIDDeviceSetValueMultipleWithCallback, _IOHIDDeviceSetValueWithCallback, _IOHIDDeviceUnscheduleFromRunLoop, _IOHIDElementAttach, _IOHIDElementCopyAttached, _IOHIDElementCreateWithDictionary, _IOHIDElementDetach, _IOHIDElementGetChildren, _IOHIDElementGetCollectionType, _IOHIDElementGetCookie, _IOHIDElementGetDevice, _IOHIDElementGetDuplicateIndex, _IOHIDElementGetLogicalMax, _IOHIDElementGetLogicalMin, _IOHIDElementGetName, _IOHIDElementGetParent, _IOHIDElementGetPhysicalMax, _IOHIDElementGetPhysicalMin, _IOHIDElementGetProperty, _IOHIDElementGetReportCount, _IOHIDElementGetReportID, _IOHIDElementGetReportSize, _IOHIDElementGetType, _IOHIDElementGetTypeID, _IOHIDElementGetUnit, _IOHIDElementGetUnitExponent, _IOHIDElementGetUsage, _IOHIDElementGetUsagePage, _IOHIDElementHasNullState, _IOHIDElementHasPreferredState, _IOHIDElementIsArray, _IOHIDElementIsNonLinear, _IOHIDElementIsRelative, _IOHIDElementIsVirtual, _IOHIDElementIsWrapping, _IOHIDElementSetProperty, _IOHIDEventAppendEvent, _IOHIDEventConformsTo, _IOHIDEventConformsToWithOptions, _IOHIDEventCopyDescription, _IOHIDEventCreate, _IOHIDEventCreateAccelerometerEvent, _IOHIDEventCreateAccelerometerEventWithType, _IOHIDEventCreateAmbientLightSensorEvent, _IOHIDEventCreateAtmosphericPressureEvent, _IOHIDEventCreateBiometricEvent, _IOHIDEventCreateBoundaryScrollEvent, _IOHIDEventCreateBrightnessEvent, _IOHIDEventCreateButtonEvent, _IOHIDEventCreateButtonEventWithPressure, _IOHIDEventCreateCollectionEvent, _IOHIDEventCreateCompassEvent, _IOHIDEventCreateCompassEventWithType, _IOHIDEventCreateCopy, _IOHIDEventCreateData, _IOHIDEventCreateDeviceOrientationEventWithUsage, _IOHIDEventCreateDigitizerEvent, _IOHIDEventCreateDigitizerFingerEvent, _IOHIDEventCreateDigitizerFingerEventWithQuality, _IOHIDEventCreateDigitizerStylusEvent, _IOHIDEventCreateDigitizerStylusEventWithPolarOrientation, _IOHIDEventCreateDockSwipeEvent, _IOHIDEventCreateFluidTouchGestureEvent, _IOHIDEventCreateForceEvent, _IOHIDEventCreateGameControllerEvent, _IOHIDEventCreateGenericGestureEvent, _IOHIDEventCreateGyroEvent, _IOHIDEventCreateGyroEventWithType, _IOHIDEventCreateKeyboardEvent, _IOHIDEventCreateLEDEvent, _IOHIDEventCreateMotionActivtyEvent, _IOHIDEventCreateMotionGestureEvent, _IOHIDEventCreateMouseEvent, _IOHIDEventCreateNavigationSwipeEvent, _IOHIDEventCreateOrientationEvent, _IOHIDEventCreatePolarOrientationEvent, _IOHIDEventCreateProgressEvent, _IOHIDEventCreateProximtyEvent, _IOHIDEventCreateProximtyLevelEvent, _IOHIDEventCreateProximtyProbabilityEvent, _IOHIDEventCreateQuaternionOrientationEvent, _IOHIDEventCreateRelativePointerEvent, _IOHIDEventCreateRotationEvent, _IOHIDEventCreateScaleEvent, _IOHIDEventCreateScrollEvent, _IOHIDEventCreateSwipeEvent, _IOHIDEventCreateSymbolicHotKeyEvent, _IOHIDEventCreateTranslationEvent, _IOHIDEventCreateUnicodeEvent, _IOHIDEventCreateUnicodeEventWithQuality, _IOHIDEventCreateVelocityEvent, _IOHIDEventCreateVendorDefinedEvent, _IOHIDEventCreateWithBytes, _IOHIDEventCreateWithData, _IOHIDEventCreateZoomToggleEvent, _IOHIDEventGetAttributeData, _IOHIDEventGetAttributeDataLength, _IOHIDEventGetAttributeDataPtr, _IOHIDEventGetChildren, _IOHIDEventGetDataLength, _IOHIDEventGetDataValue, _IOHIDEventGetDataValueWithOptions, _IOHIDEventGetDoubleValue, _IOHIDEventGetDoubleValueWithOptions, _IOHIDEventGetEvent, _IOHIDEventGetEventFlags, _IOHIDEventGetEventWithOptions, _IOHIDEventGetFloatMultiple, _IOHIDEventGetFloatMultipleWithOptions, _IOHIDEventGetFloatValue, _IOHIDEventGetFloatValueWithOptions, _IOHIDEventGetIntegerMultiple, _IOHIDEventGetIntegerMultipleWithOptions, _IOHIDEventGetIntegerValue, _IOHIDEventGetIntegerValueWithOptions, _IOHIDEventGetLatency, _IOHIDEventGetParent, _IOHIDEventGetPhase, _IOHIDEventGetPolicy, _IOHIDEventGetPosition, _IOHIDEventGetPositionWithOptions, _IOHIDEventGetScrollMomentum, _IOHIDEventGetSenderID, _IOHIDEventGetTimeStamp, _IOHIDEventGetTimeStampOfType, _IOHIDEventGetTimeStampType, _IOHIDEventGetType, _IOHIDEventGetTypeID, _IOHIDEventGetTypeString, _IOHIDEventGetUInt64Multiple, _IOHIDEventGetUInt64MultipleWithOptions, _IOHIDEventGetUInt64Value, _IOHIDEventGetUInt64ValueWithOptions, _IOHIDEventGetVendorDefinedData, _IOHIDEventIsAbsolute, _IOHIDEventIsRepeat, _IOHIDEventQueueCreate, _IOHIDEventQueueCreateWithVM, _IOHIDEventQueueDequeueCopy, _IOHIDEventQueueEnqueue, _IOHIDEventQueueGetMemoryHandle, _IOHIDEventQueueGetNotificationPort, _IOHIDEventQueueGetTypeID, _IOHIDEventQueueIsActive, _IOHIDEventQueueNotify, _IOHIDEventQueueResume, _IOHIDEventQueueSetNotificationPort, _IOHIDEventQueueStart, _IOHIDEventQueueStop, _IOHIDEventQueueSuspend, _IOHIDEventReadBytes, _IOHIDEventRemoveEvent, _IOHIDEventServerCreate, _IOHIDEventServerGetTypeID, _IOHIDEventServerScheduleWithDispatchQueue, _IOHIDEventServerUnscheduleFromDispatchQueue, _IOHIDEventSetAttributeData, _IOHIDEventSetDoubleMultiple, _IOHIDEventSetDoubleMultipleWithOptions, _IOHIDEventSetDoubleValue, _IOHIDEventSetDoubleValueWithOptions, _IOHIDEventSetEventFlags, _IOHIDEventSetFloatMultiple, _IOHIDEventSetFloatMultipleWithOptions, _IOHIDEventSetFloatValue, _IOHIDEventSetFloatValueWithOptions, _IOHIDEventSetInt64Value, _IOHIDEventSetIntegerMultiple, _IOHIDEventSetIntegerMultipleWithOptions, _IOHIDEventSetIntegerValue, _IOHIDEventSetIntegerValueWithOptions, _IOHIDEventSetPhase, _IOHIDEventSetPosition, _IOHIDEventSetPositionWithOptions, _IOHIDEventSetRepeat, _IOHIDEventSetScrollMomentum, _IOHIDEventSetSenderID, _IOHIDEventSetTimeStamp, _IOHIDEventSetTimeStampOfType, _IOHIDEventSetUInt64Multiple, _IOHIDEventSetUInt64MultipleWithOptions, _IOHIDEventSetUInt64ValueWithOptions, _IOHIDEventSystemClient, _IOHIDEventSystemClientActivate, _IOHIDEventSystemClientCancel, _IOHIDEventSystemClientCopyProperty, _IOHIDEventSystemClientCopyServiceForRegistryID, _IOHIDEventSystemClientCopyServices, _IOHIDEventSystemClientCreate, _IOHIDEventSystemClientCreateSimpleClient, _IOHIDEventSystemClientCreateWithType, _IOHIDEventSystemClientDispatchEvent, _IOHIDEventSystemClientGetTypeID, _IOHIDEventSystemClientGetTypeString, _IOHIDEventSystemClientRegisterDeviceMatchingBlock, _IOHIDEventSystemClientRegisterDeviceMatchingCallback, _IOHIDEventSystemClientRegisterEventBlock, _IOHIDEventSystemClientRegisterEventCallback, _IOHIDEventSystemClientRegisterEventFilterBlock, _IOHIDEventSystemClientRegisterEventFilterBlockWithPriority, _IOHIDEventSystemClientRegisterEventFilterCallback, _IOHIDEventSystemClientRegisterEventFilterCallbackWithPriority, _IOHIDEventSystemClientRegisterPropertyChangedCallback, _IOHIDEventSystemClientRegisterResetCallback, _IOHIDEventSystemClientRegistryIDConformsTo, _IOHIDEventSystemClientScheduleWithDispatchQueue, _IOHIDEventSystemClientScheduleWithRunLoop, _IOHIDEventSystemClientSetCancelHandler, _IOHIDEventSystemClientSetDispatchQueue, _IOHIDEventSystemClientSetMatching, _IOHIDEventSystemClientSetMatchingMultiple, _IOHIDEventSystemClientSetProperty, _IOHIDEventSystemClientUnregisterDeviceMatchingBlock, _IOHIDEventSystemClientUnregisterDeviceMatchingCallback, _IOHIDEventSystemClientUnregisterEventBlock, _IOHIDEventSystemClientUnregisterEventCallback, _IOHIDEventSystemClientUnregisterEventFilterBlock, _IOHIDEventSystemClientUnregisterEventFilterCallback, _IOHIDEventSystemClientUnregisterPropertyChangedCallback, _IOHIDEventSystemClientUnregisterResetCallback, _IOHIDEventSystemClientUnscheduleFromDispatchQueue, _IOHIDEventSystemClientUnscheduleWithRunLoop, _IOHIDEventSystemClose, _IOHIDEventSystemConnectionCopyDescription, _IOHIDEventSystemConnectionDispatchEvent, _IOHIDEventSystemConnectionGetAttribute, _IOHIDEventSystemConnectionGetAuditToken, _IOHIDEventSystemConnectionGetEntitlements, _IOHIDEventSystemConnectionGetProcName, _IOHIDEventSystemConnectionGetTaskNamePort, _IOHIDEventSystemConnectionGetType, _IOHIDEventSystemConnectionGetTypeID, _IOHIDEventSystemConnectionGetTypeString, _IOHIDEventSystemConnectionGetUUID, _IOHIDEventSystemConnectionHasEntitlement, _IOHIDEventSystemCopyConnections, _IOHIDEventSystemCopyEvent, _IOHIDEventSystemCopyMatchingServices, _IOHIDEventSystemCopyService, _IOHIDEventSystemCopyServices, _IOHIDEventSystemCreate, _IOHIDEventSystemGetProperty, _IOHIDEventSystemGetTypeID, _IOHIDEventSystemOpen, _IOHIDEventSystemRegisterConnectionAdditionCallback, _IOHIDEventSystemRegisterConnectionRemovalCallback, _IOHIDEventSystemRegisterPropertyChangedNotification, _IOHIDEventSystemRegisterServicesCallback, _IOHIDEventSystemSetCallback, _IOHIDEventSystemSetProperty, _IOHIDEventSystemUnregisterConnectionAdditionCallback, _IOHIDEventSystemUnregisterConnectionRemovalCallback, _IOHIDEventSystemUnregisterPropertyChangedNotification, _IOHIDEventSystemUnregisterServicesCallback, _IOHIDEventTypeGetName, _IOHIDGetAccelerationWithKey, _IOHIDGetActivityState, _IOHIDGetButtonEventNum, _IOHIDGetModifierLockState, _IOHIDGetMouseAcceleration, _IOHIDGetMouseButtonMode, _IOHIDGetParameter, _IOHIDGetScrollAcceleration, _IOHIDGetStateForSelector, _IOHIDManagerActivate, _IOHIDManagerCancel, _IOHIDManagerClose, _IOHIDManagerCopyDevices, _IOHIDManagerCreate, _IOHIDManagerGetProperty, _IOHIDManagerGetTypeID, _IOHIDManagerOpen, _IOHIDManagerRegisterDeviceMatchingCallback, _IOHIDManagerRegisterDeviceRemovalCallback, _IOHIDManagerRegisterInputReportCallback, _IOHIDManagerRegisterInputReportWithTimeStampCallback, _IOHIDManagerRegisterInputValueCallback, _IOHIDManagerSaveToPropertyDomain, _IOHIDManagerScheduleWithRunLoop, _IOHIDManagerSetCancelHandler, _IOHIDManagerSetDeviceMatching, _IOHIDManagerSetDeviceMatchingMultiple, _IOHIDManagerSetDispatchQueue, _IOHIDManagerSetInputValueMatching, _IOHIDManagerSetInputValueMatchingMultiple, _IOHIDManagerSetProperty, _IOHIDManagerUnscheduleFromRunLoop, _IOHIDNotificationCreate, _IOHIDNotificationGetClientCallback, _IOHIDNotificationGetClientRefcon, _IOHIDNotificationGetClientTarget, _IOHIDNotificationGetOwnerCallback, _IOHIDNotificationGetOwnerRefcon, _IOHIDNotificationGetOwnerTarget, _IOHIDNotificationGetTypeID, _IOHIDNotificationInvalidate, _IOHIDNotificationSignalWithBlock, _IOHIDPostEvent, _IOHIDPreferencesCopy, _IOHIDPreferencesCopyDomain, _IOHIDPreferencesCopyDomainForInstance, _IOHIDPreferencesCopyForInstance, _IOHIDPreferencesCopyMultiple, _IOHIDPreferencesCopyMultipleForInstance, _IOHIDPreferencesCreateInstance, _IOHIDPreferencesSet, _IOHIDPreferencesSetDomain, _IOHIDPreferencesSetDomainForInstance, _IOHIDPreferencesSetForInstance, _IOHIDPreferencesSetMultiple, _IOHIDPreferencesSetMultipleForInstance, _IOHIDPreferencesSynchronize, _IOHIDPreferencesSynchronizeForInstance, _IOHIDQueueActivate, _IOHIDQueueAddElement, _IOHIDQueueCancel, _IOHIDQueueContainsElement, _IOHIDQueueCopyNextValue, _IOHIDQueueCopyNextValueWithTimeout, _IOHIDQueueCreate, _IOHIDQueueGetDepth, _IOHIDQueueGetDevice, _IOHIDQueueGetTypeID, _IOHIDQueueRegisterValueAvailableCallback, _IOHIDQueueRemoveElement, _IOHIDQueueScheduleWithRunLoop, _IOHIDQueueSetCancelHandler, _IOHIDQueueSetDepth, _IOHIDQueueSetDispatchQueue, _IOHIDQueueStart, _IOHIDQueueStop, _IOHIDQueueUnscheduleFromRunLoop, _IOHIDRegisterVirtualDisplay, _IOHIDRequestAccess, _IOHIDServiceCheckEntitlements, _IOHIDServiceClientConformsTo, _IOHIDServiceClientCopyDescription, _IOHIDServiceClientCopyEvent, _IOHIDServiceClientCopyMatchingEvent, _IOHIDServiceClientCopyProperties, _IOHIDServiceClientCopyProperty, _IOHIDServiceClientFastPathCopyEvent, _IOHIDServiceClientFastPathCopyEventWithStatus, _IOHIDServiceClientFastPathCopyProperty, _IOHIDServiceClientFastPathInit, _IOHIDServiceClientFastPathInvalidate, _IOHIDServiceClientFastPathSetProperty, _IOHIDServiceClientGetRegistryID, _IOHIDServiceClientGetTypeID, _IOHIDServiceClientRegisterRemovalBlock, _IOHIDServiceClientRegisterRemovalCallback, _IOHIDServiceClientSetElementValue, _IOHIDServiceClientSetProperty, _IOHIDServiceConformsTo, _IOHIDServiceConnectionCacheContainsKey, _IOHIDServiceConnectionCacheCopyDebugInfo, _IOHIDServiceConnectionCacheCopyValueForKey, _IOHIDServiceConnectionCacheCreate, _IOHIDServiceConnectionCacheGetReportDeadline, _IOHIDServiceConnectionCacheGetTypeID, _IOHIDServiceConnectionCacheSetReportDeadline, _IOHIDServiceConnectionCacheSetValueForKey, _IOHIDServiceCopyDescription, _IOHIDServiceCopyEvent, _IOHIDServiceCopyEventForClient, _IOHIDServiceCopyMatchingEvent, _IOHIDServiceCopyProperty, _IOHIDServiceCreatePropertyChangedNotification, _IOHIDServiceCreateRemovalNotification, _IOHIDServiceFilterClientNotification, _IOHIDServiceFilterClose, _IOHIDServiceFilterCompare, _IOHIDServiceFilterCopyPropertyForClient, _IOHIDServiceFilterCreate, _IOHIDServiceFilterCreateWithClass, _IOHIDServiceFilterFilterCopyEvent, _IOHIDServiceFilterFilterCopyMatchingEvent, _IOHIDServiceFilterFilterEvent, _IOHIDServiceFilterGetMatchScore, _IOHIDServiceFilterGetStateMask, _IOHIDServiceFilterGetType, _IOHIDServiceFilterGetTypeID, _IOHIDServiceFilterMatch, _IOHIDServiceFilterOpen, _IOHIDServiceFilterSchedule, _IOHIDServiceFilterSetCancelHandler, _IOHIDServiceFilterSetEventCallback, _IOHIDServiceFilterSetOutputEvent, _IOHIDServiceFilterSetPropertyForClient, _IOHIDServiceFilterUnschedule, _IOHIDServiceGetProperty, _IOHIDServiceGetRegistryID, _IOHIDServiceGetService, _IOHIDServiceGetTypeID, _IOHIDServiceMatchPropertyTable, _IOHIDServiceSetElementValue, _IOHIDServiceSetOutputEvent, _IOHIDServiceSetProperty, _IOHIDSessionAddService, _IOHIDSessionClose, _IOHIDSessionCopyEvent, _IOHIDSessionCreate, _IOHIDSessionFilterClose, _IOHIDSessionFilterCopyEvent, _IOHIDSessionFilterCreate, _IOHIDSessionFilterCreateWithClass, _IOHIDSessionFilterFilterCopyEvent, _IOHIDSessionFilterFilterEvent, _IOHIDSessionFilterFilterEventToConnection, _IOHIDSessionFilterGetPropertyForClient, _IOHIDSessionFilterGetType, _IOHIDSessionFilterGetTypeID, _IOHIDSessionFilterOpen, _IOHIDSessionFilterRegisterService, _IOHIDSessionFilterScheduleWithDispatchQueue, _IOHIDSessionFilterSetPropertyForClient, _IOHIDSessionFilterUnregisterService, _IOHIDSessionFilterUnscheduleFromDispatchQueue, _IOHIDSessionGetFilters, _IOHIDSessionGetProperty, _IOHIDSessionGetTypeID, _IOHIDSessionOpen, _IOHIDSessionRemoveService, _IOHIDSessionSetProperty, _IOHIDSetAccelerationWithKey, _IOHIDSetCFTypeParameter, _IOHIDSetCursorBounds, _IOHIDSetCursorEnable, _IOHIDSetEventsEnable, _IOHIDSetFixedMouseLocation, _IOHIDSetFixedMouseLocationWithTimeStamp, _IOHIDSetHIDParameterToEventSystem, _IOHIDSetModifierLockState, _IOHIDSetMouseAcceleration, _IOHIDSetMouseButtonMode, _IOHIDSetMouseLocation, _IOHIDSetOnScreenCursorBounds, _IOHIDSetParameter, _IOHIDSetScrollAcceleration, _IOHIDSetStateForSelector, _IOHIDSetVirtualDisplayBounds, _IOHIDTransactionAddElement, _IOHIDTransactionClear, _IOHIDTransactionCommit, _IOHIDTransactionCommitWithCallback, _IOHIDTransactionContainsElement, _IOHIDTransactionCreate, _IOHIDTransactionGetDevice, _IOHIDTransactionGetDirection, _IOHIDTransactionGetTypeID, _IOHIDTransactionGetValue, _IOHIDTransactionRemoveElement, _IOHIDTransactionScheduleWithRunLoop, _IOHIDTransactionSetDirection, _IOHIDTransactionSetValue, _IOHIDTransactionUnscheduleFromRunLoop, _IOHIDUnregisterVirtualDisplay, _IOHIDUserDeviceActivate, _IOHIDUserDeviceCancel, _IOHIDUserDeviceCopyProperty, _IOHIDUserDeviceCopyService, _IOHIDUserDeviceCreate, _IOHIDUserDeviceCreateWithOptions, _IOHIDUserDeviceCreateWithProperties, _IOHIDUserDeviceGetTypeID, _IOHIDUserDeviceHandleReport, _IOHIDUserDeviceHandleReportAsync, _IOHIDUserDeviceHandleReportAsyncWithTimeStamp, _IOHIDUserDeviceHandleReportWithTimeStamp, _IOHIDUserDeviceRegisterGetReportBlock, _IOHIDUserDeviceRegisterGetReportCallback, _IOHIDUserDeviceRegisterGetReportWithReturnLengthCallback, _IOHIDUserDeviceRegisterSetReportBlock, _IOHIDUserDeviceRegisterSetReportCallback, _IOHIDUserDeviceScheduleWithDispatchQueue, _IOHIDUserDeviceScheduleWithRunLoop, _IOHIDUserDeviceSetCancelHandler, _IOHIDUserDeviceSetDispatchQueue, _IOHIDUserDeviceSetProperty, _IOHIDUserDeviceUnscheduleFromDispatchQueue, _IOHIDUserDeviceUnscheduleFromRunLoop, _IOHIDValueCreateWithBytes, _IOHIDValueCreateWithBytesNoCopy, _IOHIDValueCreateWithIntegerValue, _IOHIDValueGetBytePtr, _IOHIDValueGetElement, _IOHIDValueGetIntegerValue, _IOHIDValueGetLength, _IOHIDValueGetScaledValue, _IOHIDValueGetTimeStamp, _IOHIDValueGetTypeID, _IOHIDVirtualServiceClientCreate, _IOHIDVirtualServiceClientCreateWithCallbacks, _IOHIDVirtualServiceClientDispatchEvent, _IOHIDVirtualServiceClientRemove, _IOInitContainerClasses, _IOIteratorIsValid, _IOIteratorNext, _IOIteratorReset, _IOKitGetBusyState, _IOKitWaitQuiet, _IOKitWaitQuietWithOptions, _IOMIGMachPortCacheAdd, _IOMIGMachPortCacheCopy, _IOMIGMachPortCacheRemove, _IOMIGMachPortCreate, _IOMIGMachPortGetPort, _IOMIGMachPortGetTypeID, _IOMIGMachPortRegisterDemuxCallback, _IOMIGMachPortRegisterTerminationCallback, _IOMIGMachPortScheduleWithDispatchQueue, _IOMIGMachPortScheduleWithRunLoop, _IOMIGMachPortUnscheduleFromDispatchQueue, _IOMIGMachPortUnscheduleFromRunLoop, _IOMainPort, _IOMasterPort, _IONetworkClose, _IONetworkGetDataCapacity, _IONetworkGetDataHandle, _IONetworkGetPacketFiltersMask, _IONetworkOpen, _IONetworkReadData, _IONetworkResetData, _IONetworkSetPacketFiltersMask, _IONetworkWriteData, _IONotificationPortCreate, _IONotificationPortDestroy, _IONotificationPortGetMachPort, _IONotificationPortGetRunLoopSource, _IONotificationPortSetDispatchQueue, _IONotificationPortSetImportanceReceiver, _IOObjectConformsTo, _IOObjectCopyBundleIdentifierForClass, _IOObjectCopyClass, _IOObjectCopySuperclassForClass, _IOObjectGetClass, _IOObjectGetKernelRetainCount, _IOObjectGetRetainCount, _IOObjectGetUserRetainCount, _IOObjectIsEqualTo, _IOObjectRelease, _IOObjectRetain, _IOOpenConnection, _IOOpenFirmwarePathMatching, _IOPMActivateSystemPowerSettings, _IOPMAllowRemotePowerChange, _IOPMAllowsBackgroundTask, _IOPMAllowsPushServiceTask, _IOPMAssertionCopyProperties, _IOPMAssertionCreate, _IOPMAssertionCreateWithAutoTimeout, _IOPMAssertionCreateWithDescription, _IOPMAssertionCreateWithName, _IOPMAssertionCreateWithProperties, _IOPMAssertionCreateWithResourceList, _IOPMAssertionDeclareNotificationEvent, _IOPMAssertionDeclareSystemActivity, _IOPMAssertionDeclareSystemActivityWithProperties, _IOPMAssertionDeclareUserActivity, _IOPMAssertionNotify, _IOPMAssertionRelease, _IOPMAssertionRetain, _IOPMAssertionSetBTCollection, _IOPMAssertionSetProcessState, _IOPMAssertionSetProperty, _IOPMAssertionSetTimeout, _IOPMCancelAllRepeatingPowerEvents, _IOPMCancelAllScheduledPowerEvents, _IOPMCancelScheduledPowerEvent, _IOPMChangeSystemActivityAssertionBehavior, _IOPMClaimSystemWakeEvent, _IOPMConnectionAcknowledgeEvent, _IOPMConnectionAcknowledgeEventWithOptions, _IOPMConnectionCreate, _IOPMConnectionGetSystemCapabilities, _IOPMConnectionRelease, _IOPMConnectionScheduleWithRunLoop, _IOPMConnectionSetDispatchQueue, _IOPMConnectionSetNotification, _IOPMConnectionUnscheduleFromRunLoop, _IOPMCopyActiveAsyncAssertionsByProcess, _IOPMCopyActivePMPreferences, _IOPMCopyAssertionActivityAggregate, _IOPMCopyAssertionActivityAggregateWithAllocator, _IOPMCopyAssertionActivityLog, _IOPMCopyAssertionActivityLogWithAllocator, _IOPMCopyAssertionActivityUpdate, _IOPMCopyAssertionActivityUpdateWithAllocator, _IOPMCopyAssertionActivityUpdateWithCallback, _IOPMCopyAssertionsByProcess, _IOPMCopyAssertionsByProcessWithAllocator, _IOPMCopyAssertionsByType, _IOPMCopyAssertionsStatus, _IOPMCopyBatteryHeatMap, _IOPMCopyBatteryInfo, _IOPMCopyCPUPowerStatus, _IOPMCopyConnectionStatus, _IOPMCopyCurrentScheduledWake, _IOPMCopyCycleCountData, _IOPMCopyDefaultPreferences, _IOPMCopyDeviceRestartPreventers, _IOPMCopyFromPrefs, _IOPMCopyHIDPostEventHistory, _IOPMCopyInactiveAssertionsByProcess, _IOPMCopyKioskModeData, _IOPMCopyPMPreferences, _IOPMCopyPowerHistory, _IOPMCopyPowerHistoryDetailed, _IOPMCopyPowerStateInfo, _IOPMCopyPreferencesOnFile, _IOPMCopyRepeatingPowerEvents, _IOPMCopyScheduledPowerEvents, _IOPMCopySleepPreventersList, _IOPMCopySleepPreventersListWithID, _IOPMCopySleepWakeFailure, _IOPMCopySystemPowerSettings, _IOPMCopyUPSShutdownLevels, _IOPMCopyUserActivityLevelDescription, _IOPMCtlAssertionType, _IOPMDeclareNetworkClientActivity, _IOPMDisableAsyncAssertions, _IOPMEnableAsyncAssertions, _IOPMFeatureIsAvailable, _IOPMFeatureIsAvailableWithSupportedTable, _IOPMFindPowerManagement, _IOPMGetActivePushConnectionState, _IOPMGetAggressiveness, _IOPMGetCapabilitiesDescription, _IOPMGetCurrentAsycnRemoteAssertion, _IOPMGetCurrentAsyncActiveAssertions, _IOPMGetCurrentAsyncInactiveAssertions, _IOPMGetCurrentAsyncReleasedAssertions, _IOPMGetCurrentAsyncTimedAssertions, _IOPMGetDarkWakeThermalEmergencyCount, _IOPMGetLastWakeTime, _IOPMGetPerformanceWarningLevel, _IOPMGetSleepServicesActive, _IOPMGetThermalWarningLevel, _IOPMGetUUID, _IOPMGetUserActivityLevel, _IOPMGetValueInt, _IOPMIsADarkWake, _IOPMIsASilentWake, _IOPMIsASleep, _IOPMIsAUserWake, _IOPMLogWakeProgress, _IOPMPerformBlockWithAssertion, _IOPMRegisterForRemoteSystemPower, _IOPMRegisterPrefsChangeNotification, _IOPMRemoveIrrelevantProperties, _IOPMRequestSysWake, _IOPMRevertPMPreferences, _IOPMScheduleAssertionExceptionNotification, _IOPMSchedulePowerEvent, _IOPMScheduleRepeatingPowerEvent, _IOPMScheduleUserActiveChangedNotification, _IOPMScheduleUserActivityLevelNotification, _IOPMScheduleUserActivityLevelNotificationWithTimeout, _IOPMSetActivePushConnectionState, _IOPMSetAggressiveness, _IOPMSetAssertionActivityAggregate, _IOPMSetAssertionActivityLog, _IOPMSetAssertionExceptionLimits, _IOPMSetBTWakeInterval, _IOPMSetDWLingerInterval, _IOPMSetDebugFlags, _IOPMSetDesktopMode, _IOPMSetDesktopModeWithOptions, _IOPMSetPMPreference, _IOPMSetPMPreferences, _IOPMSetReservePowerMode, _IOPMSetSleepServicesWakeTimeCap, _IOPMSetSystemAssertionTimeout, _IOPMSetSystemPowerSetting, _IOPMSetUPSShutdownLevels, _IOPMSetUserActivityIdleTimeout, _IOPMSetValueInt, _IOPMSkylightCheckIn, _IOPMSkylightCheckInWithCapability, _IOPMSleepEnabled, _IOPMSleepSystem, _IOPMSleepSystemWithOptions, _IOPMSleepWakeCopyUUID, _IOPMSleepWakeSetUUID, _IOPMUnregisterExceptionNotification, _IOPMUnregisterNotification, _IOPMUnregisterPrefsChangeNotification, _IOPMUpdateDominoState, _IOPMUserIsActive, _IOPMUsingDefaultPreferences, _IOPMWriteToPrefs, _IOPSAccCreateAttachNotification, _IOPSAccCreateLimitedPowerNotification, _IOPSAccNotificationCreateRunLoopSource, _IOPSCopyBatteryLevelLimits, _IOPSCopyExternalPowerAdapterDetails, _IOPSCopyInternalBatteriesArray, _IOPSCopyPowerSourcesByType, _IOPSCopyPowerSourcesByTypePrecise, _IOPSCopyPowerSourcesInfo, _IOPSCopyPowerSourcesInfoPrecise, _IOPSCopyPowerSourcesList, _IOPSCopyUPSArray, _IOPSCreateLimitedPowerNotification, _IOPSCreatePowerSource, _IOPSDrawingUnlimitedPower, _IOPSGetActiveBattery, _IOPSGetActiveUPS, _IOPSGetBatteryHealthState, _IOPSGetBatteryWarningLevel, _IOPSGetPercentRemaining, _IOPSGetPowerSourceDescription, _IOPSGetProvidingPowerSourceType, _IOPSGetSupportedPowerSources, _IOPSGetTimeRemainingEstimate, _IOPSLimitBatteryLevel, _IOPSLimitBatteryLevelCancel, _IOPSLimitBatteryLevelRegister, _IOPSNotificationCreateRunLoopSource, _IOPSPowerSourceSupported, _IOPSReleasePowerSource, _IOPSRequestBatteryUpdate, _IOPSSetBatteryDateOfFirstUse, _IOPSSetPowerSourceDetails, _IORegisterApp, _IORegisterClient, _IORegisterForSystemPower, _IORegistryCreateEnumerator, _IORegistryCreateIterator, _IORegistryDisposeEnumerator, _IORegistryEntryCopyFromPath, _IORegistryEntryCopyPath, _IORegistryEntryCreateCFProperties, _IORegistryEntryCreateCFProperty, _IORegistryEntryCreateIterator, _IORegistryEntryFromPath, _IORegistryEntryGetChildEntry, _IORegistryEntryGetChildIterator, _IORegistryEntryGetLocationInPlane, _IORegistryEntryGetName, _IORegistryEntryGetNameInPlane, _IORegistryEntryGetParentEntry, _IORegistryEntryGetParentIterator, _IORegistryEntryGetPath, _IORegistryEntryGetProperty, _IORegistryEntryGetRegistryEntryID, _IORegistryEntryIDMatching, _IORegistryEntryInPlane, _IORegistryEntrySearchCFProperty, _IORegistryEntrySetCFProperties, _IORegistryEntrySetCFProperty, _IORegistryEnumeratorNextConforming, _IORegistryEnumeratorReset, _IORegistryGetRootEntry, _IORegistryIteratorEnterEntry, _IORegistryIteratorExitEntry, _IOServiceAddInterestNotification, _IOServiceAddMatchingNotification, _IOServiceAddNotification, _IOServiceAuthorize, _IOServiceClose, _IOServiceCopySystemStateNotificationService, _IOServiceGetBusyState, _IOServiceGetBusyStateAndTime, _IOServiceGetMatchingService, _IOServiceGetMatchingServices, _IOServiceGetState, _IOServiceMatchPropertyTable, _IOServiceMatching, _IOServiceNameMatching, _IOServiceOFPathToBSDName, _IOServiceOpen, _IOServiceOpenAsFileDescriptor, _IOServiceRequestProbe, _IOServiceStateNotificationItemCopy, _IOServiceStateNotificationItemCreate, _IOServiceStateNotificationItemSet, _IOServiceWaitQuiet, _IOSetNotificationPort, _IOURLCreateDataAndPropertiesFromResource, _IOURLCreatePropertyFromResource, _IOUSBDevicDeviceDescriptionGetTypeID, _IOUSBDeviceControllerCreate, _IOUSBDeviceControllerCreateDefaultDescription, _IOUSBDeviceControllerCreateWithService, _IOUSBDeviceControllerForceOffBus, _IOUSBDeviceControllerGetService, _IOUSBDeviceControllerGetTypeID, _IOUSBDeviceControllerGoOffAndOnBus, _IOUSBDeviceControllerRegisterArrivalCallback, _IOUSBDeviceControllerRemoveArrivalCallback, _IOUSBDeviceControllerSendCommand, _IOUSBDeviceControllerSetDescription, _IOUSBDeviceControllerSetPreferredConfiguration, _IOUSBDeviceDataCreate, _IOUSBDeviceDataGetBytePtr, _IOUSBDeviceDataGetCapacity, _IOUSBDeviceDataGetMapToken, _IOUSBDeviceDataGetTypeID, _IOUSBDeviceDescriptionAppendConfiguration, _IOUSBDeviceDescriptionAppendConfigurationWithInterface, _IOUSBDeviceDescriptionAppendConfigurationWithInterfaces, _IOUSBDeviceDescriptionAppendConfigurationWithoutAttributes, _IOUSBDeviceDescriptionAppendInterfaceToConfiguration, _IOUSBDeviceDescriptionAppendInterfacesToConfiguration, _IOUSBDeviceDescriptionCopyInterfaces, _IOUSBDeviceDescriptionCreate, _IOUSBDeviceDescriptionCreateFromController, _IOUSBDeviceDescriptionCreateFromControllerWithType, _IOUSBDeviceDescriptionCreateFromDefaults, _IOUSBDeviceDescriptionCreateFromDefaultsAndController, _IOUSBDeviceDescriptionCreateWithConfigurationInterfaces, _IOUSBDeviceDescriptionCreateWithType, _IOUSBDeviceDescriptionGetAllowOverride, _IOUSBDeviceDescriptionGetClass, _IOUSBDeviceDescriptionGetManufacturerString, _IOUSBDeviceDescriptionGetMatchingConfiguration, _IOUSBDeviceDescriptionGetProductID, _IOUSBDeviceDescriptionGetProductString, _IOUSBDeviceDescriptionGetProtocol, _IOUSBDeviceDescriptionGetSerialString, _IOUSBDeviceDescriptionGetSubClass, _IOUSBDeviceDescriptionGetVendorID, _IOUSBDeviceDescriptionGetVersion, _IOUSBDeviceDescriptionRemoveAllConfigurations, _IOUSBDeviceDescriptionSetAllowOverride, _IOUSBDeviceDescriptionSetClass, _IOUSBDeviceDescriptionSetProductID, _IOUSBDeviceDescriptionSetProtocol, _IOUSBDeviceDescriptionSetSerialString, _IOUSBDeviceDescriptionSetSubClass, _IOUSBDeviceDescriptionSetUDIDString, _IOUSBDeviceDescriptionSetVendorID, _IsNotificationEvent, _NXClickTime, _NXCloseEventStatus, _NXEventSystemInfo, _NXGetClickSpace, _NXGetKeyMapping, _NXKeyMappingLength, _NXKeyRepeatInterval, _NXKeyRepeatThreshold, _NXOpenEventStatus, _NXResetKeyboard, _NXResetMouse, _NXSetClickSpace, _NXSetClickTime, _NXSetKeyMapping, _NXSetKeyRepeatInterval, _NXSetKeyRepeatThreshold, _OSGetNotificationFromMessage, _OSKEXT_BUILD_DATE, _OSKextAuthenticate, _OSKextAuthenticateDependencies, _OSKextCopyAllDependencies, _OSKextCopyAllRequestedIdentifiers, _OSKextCopyArchitectures, _OSKextCopyContainerForPluginKext, _OSKextCopyDeclaredDependencies, _OSKextCopyDependents, _OSKextCopyDiagnostics, _OSKextCopyExecutableForArchitecture, _OSKextCopyExecutableName, _OSKextCopyIndirectDependencies, _OSKextCopyInfoDictionary, _OSKextCopyKextsWithIdentifier, _OSKextCopyKextsWithIdentifiers, _OSKextCopyLinkDependencies, _OSKextCopyLoadList, _OSKextCopyLoadListForKexts, _OSKextCopyLoadedKextInfo, _OSKextCopyLoadedKextInfoByUUID, _OSKextCopyPersonalitiesArray, _OSKextCopyPersonalitiesOfKexts, _OSKextCopyPlugins, _OSKextCopyResource, _OSKextCopySymbolReferences, _OSKextCopyUUIDForAddress, _OSKextCopyUUIDForArchitecture, _OSKextCreate, _OSKextCreateKextsFromMkextData, _OSKextCreateKextsFromMkextFile, _OSKextCreateKextsFromURL, _OSKextCreateKextsFromURLs, _OSKextCreateLoadedKextInfo, _OSKextCreateMkext, _OSKextCreateWithIdentifier, _OSKextDeclaresExecutable, _OSKextDeclaresUserExecutable, _OSKextDependenciesAreLoadableInSafeBoot, _OSKextDependsOnKext, _OSKextExecutableVariant, _OSKextFilterRequiredKexts, _OSKextFindLinkDependencies, _OSKextFlushDependencies, _OSKextFlushDiagnostics, _OSKextFlushInfoDictionary, _OSKextFlushLoadInfo, _OSKextGetActualSafeBoot, _OSKextGetAllKexts, _OSKextGetArchitecture, _OSKextGetCompatibleKextWithIdentifier, _OSKextGetCompatibleVersion, _OSKextGetExecutableURL, _OSKextGetIdentifier, _OSKextGetKernelExecutableURL, _OSKextGetKextWithIdentifier, _OSKextGetKextWithIdentifierAndVersion, _OSKextGetKextWithURL, _OSKextGetLoadAddress, _OSKextGetLoadTag, _OSKextGetLoadedKextWithIdentifier, _OSKextGetLogFilter, _OSKextGetRecordsDiagnostics, _OSKextGetRunningKernelArchitecture, _OSKextGetSimulatedSafeBoot, _OSKextGetSystemExtensionsFolderURLs, _OSKextGetTargetString, _OSKextGetTypeID, _OSKextGetURL, _OSKextGetUserExecutableURL, _OSKextGetUsesCaches, _OSKextGetValueForInfoDictionaryKey, _OSKextGetVersion, _OSKextHasLogOrDebugFlags, _OSKextIsAuthentic, _OSKextIsCompatibleWithVersion, _OSKextIsFromMkext, _OSKextIsInterface, _OSKextIsKernelComponent, _OSKextIsLibrary, _OSKextIsLoadable, _OSKextIsLoadableInSafeBoot, _OSKextIsLoaded, _OSKextIsLoggingEnabled, _OSKextIsPlugin, _OSKextIsStarted, _OSKextIsValid, _OSKextLoad, _OSKextLoadWithOptions, _OSKextLog, _OSKextLogCFString, _OSKextLogDependencyGraph, _OSKextLogDiagnostics, _OSKextMatchesRequiredFlags, _OSKextOtherVersionIsLoaded, _OSKextParseVersionCFString, _OSKextParseVersionString, _OSKextReadLoadedKextInfo, _OSKextRemoveKextPersonalitiesFromKernel, _OSKextRemovePersonalitiesForIdentifierFromKernel, _OSKextResolveDependencies, _OSKextSendKextPersonalitiesToKernel, _OSKextSendPersonalitiesOfKextsToKernel, _OSKextSendPersonalitiesToKernel, _OSKextSetArchitecture, _OSKextSetExecutableSuffix, _OSKextSetLoadAddress, _OSKextSetLogFilter, _OSKextSetLogOutputFunction, _OSKextSetLoggingEnabled, _OSKextSetRecordsDiagnostics, _OSKextSetSimulatedSafeBoot, _OSKextSetTargetString, _OSKextSetUsesCaches, _OSKextStart, _OSKextStop, _OSKextSupportsArchitecture, _OSKextUnload, _OSKextUnloadKextWithIdentifier, _OSKextVLog, _OSKextVLogCFString, _OSKextValidate, _OSKextValidateDependencies, _OSKextVersionGetString, __CFURLCopyAbsolutePath, __IOAVCreateStringOfColorIDs, __IOAVElementListGetElementIDAtIndex, __IOAVStringAppendIndendationAndFormat, __IODataQueueDequeue, __IODataQueueEnqueueWithReadCallback, __IODataQueueEnqueueWithReadCallbackOptions, __IODataQueuePeek, __IODataQueueSendDataAvailableNotification, __IODispatchCalloutWithDispatch, __IOHIDArrayAppendSInt64, __IOHIDCFArrayApplyBlock, __IOHIDCFDictionaryApplyBlock, __IOHIDCFSetApplyBlock, __IOHIDCallbackApplier, __IOHIDCopyServiceClientInfo, __IOHIDCreateBinaryData, __IOHIDCreateTimeString, __IOHIDDebugEventAddPerfData, __IOHIDDebugTrace, __IOHIDDeviceCreatePrivate, __IOHIDDeviceGetIOCFPlugInInterface, __IOHIDDeviceReleasePrivate, __IOHIDDictionaryAddCStr, __IOHIDDictionaryAddSInt32, __IOHIDDictionaryAddSInt64, __IOHIDElementCreatePrivate, __IOHIDElementCreateWithElement, __IOHIDElementCreateWithParentAndData, __IOHIDElementGetCalibrationInfo, __IOHIDElementGetFlags, __IOHIDElementGetLength, __IOHIDElementGetValue, __IOHIDElementReleasePrivate, __IOHIDElementSetDevice, __IOHIDElementSetDeviceInterface, __IOHIDElementSetValue, __IOHIDEventCopyAttachment, __IOHIDEventCreate, __IOHIDEventEqual, __IOHIDEventGetContext, __IOHIDEventQueueSerializeState, __IOHIDEventRemoveAttachment, __IOHIDEventSetAttachment, __IOHIDEventSetContext, __IOHIDEventSystemAddConnection, __IOHIDEventSystemAddService, __IOHIDEventSystemAddServiceForConnection, __IOHIDEventSystemClientCopyEventForService, __IOHIDEventSystemClientCopyMatchingEventForService, __IOHIDEventSystemClientCopyPropertiesForService, __IOHIDEventSystemClientCopyPropertyForService, __IOHIDEventSystemClientDispatchEventFilter, __IOHIDEventSystemClientDispatchPropertiesChanged, __IOHIDEventSystemClientRegisterClientRecordsChangedBlock, __IOHIDEventSystemClientRegisterClientRecordsChangedCallback, __IOHIDEventSystemClientRegisterServiceRecordsChangedBlock, __IOHIDEventSystemClientRegisterServiceRecordsChangedCallback, __IOHIDEventSystemClientServiceConformsTo, __IOHIDEventSystemClientSetElementValueForService, __IOHIDEventSystemClientSetPropertyForService, __IOHIDEventSystemClientUnregisterClientRecordsChangedBlock, __IOHIDEventSystemClientUnregisterClientRecordsChangedCallback, __IOHIDEventSystemClientUnregisterServiceRecordsChangedBlock, __IOHIDEventSystemClientUnregisterServiceRecordsChangedCallback, __IOHIDEventSystemConnectionAddNotification, __IOHIDEventSystemConnectionAddServices, __IOHIDEventSystemConnectionContainsService, __IOHIDEventSystemConnectionCopyEventCounts, __IOHIDEventSystemConnectionCopyEventLog, __IOHIDEventSystemConnectionCopyNotification, __IOHIDEventSystemConnectionCopyProperty, __IOHIDEventSystemConnectionCopyQueue, __IOHIDEventSystemConnectionCopyRecord, __IOHIDEventSystemConnectionCopyServices, __IOHIDEventSystemConnectionCreate, __IOHIDEventSystemConnectionCreatePrivate, __IOHIDEventSystemConnectionCreateVirtualService, __IOHIDEventSystemConnectionDispatchEvent, __IOHIDEventSystemConnectionDispatchEventForVirtualService, __IOHIDEventSystemConnectionEventFilterCompare, __IOHIDEventSystemConnectionFilterEvent, __IOHIDEventSystemConnectionGetDispatchQueue, __IOHIDEventSystemConnectionGetEventFilterPriority, __IOHIDEventSystemConnectionGetPID, __IOHIDEventSystemConnectionGetPort, __IOHIDEventSystemConnectionGetReplyPort, __IOHIDEventSystemConnectionGetSystem, __IOHIDEventSystemConnectionInvalidate, __IOHIDEventSystemConnectionIsResponsive, __IOHIDEventSystemConnectionIsValid, __IOHIDEventSystemConnectionLogEvent, __IOHIDEventSystemConnectionPropertyChanged, __IOHIDEventSystemConnectionQueueStart, __IOHIDEventSystemConnectionQueueStop, __IOHIDEventSystemConnectionRecordClientChanged, __IOHIDEventSystemConnectionRecordServiceChanged, __IOHIDEventSystemConnectionRegisterDemuxCallback, __IOHIDEventSystemConnectionRegisterEventFilter, __IOHIDEventSystemConnectionRegisterPropertyChangedNotification, __IOHIDEventSystemConnectionRegisterRecordClientChanged, __IOHIDEventSystemConnectionRegisterRecordServiceChanged, __IOHIDEventSystemConnectionRegisterTerminationCallback, __IOHIDEventSystemConnectionReleasePrivate, __IOHIDEventSystemConnectionRemoveAllServices, __IOHIDEventSystemConnectionRemoveNotification, __IOHIDEventSystemConnectionRemoveService, __IOHIDEventSystemConnectionRemoveVirtualService, __IOHIDEventSystemConnectionScheduleAsync, __IOHIDEventSystemConnectionSetProperty, __IOHIDEventSystemConnectionSetQueue, __IOHIDEventSystemConnectionUnregisterEventFilter, __IOHIDEventSystemConnectionUnregisterPropertyChangedNotification, __IOHIDEventSystemConnectionUnregisterRecordClientChanged, __IOHIDEventSystemConnectionUnregisterRecordServiceChanged, __IOHIDEventSystemConnectionUnscheduleAsync, __IOHIDEventSystemConnectionVirtualServiceNotify, __IOHIDEventSystemCopyPropertyForConnection, __IOHIDEventSystemCopyRecord, __IOHIDEventSystemDispatchEvent, __IOHIDEventSystemGetEnumerationQueue, __IOHIDEventSystemGetSession, __IOHIDEventSystemPropertyChanged, __IOHIDEventSystemRegisterEventFilter, __IOHIDEventSystemRegisterRecordClientChanged, __IOHIDEventSystemRegisterRecordServiceChanged, __IOHIDEventSystemRemoveConnection, __IOHIDEventSystemRemoveNotificationForConnection, __IOHIDEventSystemRemoveService, __IOHIDEventSystemRemoveServicesForConnection, __IOHIDEventSystemSetPropertyForConnection, __IOHIDEventSystemUnregisterEventFilter, __IOHIDEventSystemUnregisterRecordClientChanged, __IOHIDEventSystemUnregisterRecordServiceChanged, __IOHIDGetMonotonicTime, __IOHIDGetTimestampDelta, __IOHIDIsSerializable, __IOHIDLoadBundles, __IOHIDLoadConnectionPluginBundles, __IOHIDLoadServiceFilterBundles, __IOHIDLoadServicePluginBundles, __IOHIDLoadSessionFilterBundles, __IOHIDLog, __IOHIDLogCategory, __IOHIDObjectCreateInstance, __IOHIDObjectExtRetainCount, __IOHIDObjectIntRetainCount, __IOHIDObjectInternalRelease, __IOHIDObjectInternalReleaseCallback, __IOHIDObjectInternalRetain, __IOHIDObjectInternalRetainCallback, __IOHIDObjectRetainCount, __IOHIDPlugInInstanceCacheAdd, __IOHIDPlugInInstanceCacheClear, __IOHIDPlugInInstanceCacheIsEmpty, __IOHIDQueueCopyElements, __IOHIDSerialize, __IOHIDServiceAddConnection, __IOHIDServiceClientCacheProperties, __IOHIDServiceClientCopyUsageProp, __IOHIDServiceClientCreate, __IOHIDServiceClientCreatePrivate, __IOHIDServiceClientCreateVirtual, __IOHIDServiceClientDispatchServiceRemoval, __IOHIDServiceClientRefresh, __IOHIDServiceClientReleasePrivate, __IOHIDServiceClose, __IOHIDServiceContainsReportInterval, __IOHIDServiceContainsReportIntervalForClient, __IOHIDServiceCopyConnectionCache, __IOHIDServiceCopyConnectionIntervals, __IOHIDServiceCopyConnections, __IOHIDServiceCopyDispatchQueue, __IOHIDServiceCopyEventCounts, __IOHIDServiceCopyEventLog, __IOHIDServiceCopyFilterDebugInfoForClient, __IOHIDServiceCopyPropertiesForClient, __IOHIDServiceCopyPropertyForClient, __IOHIDServiceCopyProperyFromPlugin, __IOHIDServiceCopyServiceInfoForClient, __IOHIDServiceCopyServiceRecordForClient, __IOHIDServiceCreate, __IOHIDServiceCreatePrivate, __IOHIDServiceCreateVirtual, __IOHIDServiceCreateVirtualForConnection, __IOHIDServiceCurrentBatchInterval, __IOHIDServiceDispatchEvent, __IOHIDServiceGetEventDeadlineForClient, __IOHIDServiceGetOwner, __IOHIDServiceGetReportInterval, __IOHIDServiceGetReportIntervalForClient, __IOHIDServiceGetSenderID, __IOHIDServiceHidden, __IOHIDServiceInitVirtual, __IOHIDServiceIsInactive, __IOHIDServiceIsProtected, __IOHIDServiceOpen, __IOHIDServiceReleasePrivate, __IOHIDServiceRemoveConnection, __IOHIDServiceRemovePropertiesForClient, __IOHIDServiceScheduleAsync, __IOHIDServiceSetBatchIntervalForClient, __IOHIDServiceSetEventCallback, __IOHIDServiceSetEventDeadlineForClient, __IOHIDServiceSetMiscDebugDebugInfo, __IOHIDServiceSetPropertyForClient, __IOHIDServiceSetReportIntervalForClient, __IOHIDServiceSupportReportLatency, __IOHIDServiceTerminate, __IOHIDServiceUnscheduleAsync, __IOHIDSessionCopyPropertyForClient, __IOHIDSessionCreateActivityNotification, __IOHIDSessionCreatePrivate, __IOHIDSessionDispatchEvent, __IOHIDSessionReleasePrivate, __IOHIDSessionSetPropertyForClient, __IOHIDSetFixedMouseLocation, __IOHIDSimpleQueueApplyBlock, __IOHIDSimpleQueueCreate, __IOHIDSimpleQueueDequeue, __IOHIDSimpleQueueEnqueue, __IOHIDSimpleQueuePeek, __IOHIDStringAppendIndendationAndFormat, __IOHIDUnserializeAndVMDealloc, __IOHIDUnserializeAndVMDeallocWithTypeID, __IOHIDValueCopyToElementValueHeader, __IOHIDValueCopyToElementValuePtr, __IOHIDValueCreateWithElementValuePtr, __IOHIDValueCreateWithStruct, __IOHIDValueCreateWithValue, __IOHIDValueGetFlags, __IOHIDVirtuaServiceClientGetEventSystemClient, __IOHIDVirtualServiceClientCopyEvent, __IOHIDVirtualServiceClientCopyMatchingEvent, __IOHIDVirtualServiceClientCopyProperty, __IOHIDVirtualServiceClientNotification, __IOHIDVirtualServiceClientSetOputputEvent, __IOHIDVirtualServiceClientSetProperty, __IOObjectCFRelease, __IOObjectCFRetain, __IOObjectConformsTo, __IOObjectCopyClass, __IOObjectGetClass, __IOReadBytesFromFile, __IOServiceGetAuthorizationID, __IOServiceSetAuthorizationID, __IOUSBDeviceDescriptionGetInfo, __IOWriteBytesToFile, __OSKextBasicFilesystemAuthentication, __OSKextCopyKernelRequests, __OSKextCreateFolderForCacheURL, __OSKextIdentifierHasApplePrefix, __OSKextReadCache, __OSKextReadFromIdentifierCacheForFolder, __OSKextSendResource, __OSKextSetAuthenticationFunction, __OSKextSetLoadAuditFunction, __OSKextSetPersonalityPatcherFunction, __OSKextSetStrictAuthentication, __OSKextSetStrictRecordingByLastOpened, __OSKextWriteCache, __OSKextWriteIdentifierCacheForKextsInDirectory, __ZN9DisplayID8checksumEPKvm, ___ConnectionFunctionPickBatchInterval, ___CopyRecordForCientFunction, ___FunctionApplierForParameters, ___GDBIOHIDEventSystemDump, ___IOAVClassMatching, ___IOAVCopyFirstMatchingIOAVObjectOfType, ___IOAVLogHandleDefault, ___IOAVLogHandleEvent, ___IODataQueueDequeue, ___IODataQueuePeek, ___IOHIDApplyPropertiesToDeviceFromDictionary, ___IOHIDApplyPropertyToDeviceSet, ___IOHIDDeviceGetRootKey, ___IOHIDDeviceGetUUIDKey, ___IOHIDDeviceGetUUIDString, ___IOHIDDeviceLoadProperties, ___IOHIDDeviceSaveProperties, ___IOHIDElementGetRootKey, ___IOHIDElementLoadProperties, ___IOHIDElementSaveProperties, ___IOHIDEventRegister, ___IOHIDEventSystemClientFinalizeStateHandler, ___IOHIDEventSystemClientInitReplyPort, ___IOHIDEventSystemClientRefreshServiceCallback, ___IOHIDEventSystemClientServiceRefreshRemovedServiceCallback, ___IOHIDEventSystemClientServiceReplaceCallback, ___IOHIDEventSystemConnectionActivityNotification, ___IOHIDEventSystemConnectionCheckServerStatus, ___IOHIDEventSystemConnectionUpdateActivityState, ___IOHIDEventSystem_debug, ___IOHIDLoadElementSet, ___IOHIDManagerGetRootKey, ___IOHIDManagerLoadProperties, ___IOHIDManagerRegister, ___IOHIDManagerSaveProperties, ___IOHIDNotificationIntFinalize, ___IOHIDNotificationInvalidateCompletion, ___IOHIDNotificationRegister, ___IOHIDPlugInInstanceCacheApplier, ___IOHIDPropertyLoadDictionaryFromKey, ___IOHIDPropertyLoadFromKeyWithSpecialKeys, ___IOHIDPropertySaveToKeyWithSpecialKeys, ___IOHIDPropertySaveWithContext, ___IOHIDQueueRegister, ___IOHIDSaveDeviceSet, ___IOHIDSaveElementSet, ___IOHIDServiceClientCopyDebugDescription, ___IOHIDServiceCompleteInProgressEvents, ___IOHIDServiceCreateAndCopyConnectionCache, ___IOHIDServiceCreateVirtualNoInit, ___IOHIDServiceHandleCancelTimerTimeout, ___IOHIDServiceOpenedByEventSystem, ___IOHIDServicePassiveMatchToFilterPlugin, ___IOHIDServicePickBatchInterval, ___IOHIDSessionActivityNotificationRelease, ___IOHIDSystemEnumerationQueueDidExecute, ___IOHIDSystemEnumerationQueueWillExecute, ___IOHIDTransactionRegister, ___IOHIDUserDeviceFinalizeStateHandler, ___IOHIDUserDeviceSerializeState, ___IOHIDUserDeviceStateHandler, ___IOHIDValueRegister, ___IOUSBDeviceDescriptionRegister, ___NotificationApplier, ___OSKextBundleIDCompare, ___OSKextCacheNeedsUpdate, ___OSKextCheckURL, ___OSKextClearHasAllDependenciesOnKext, ___OSKextCompareIdentifiers, ___OSKextCopyExecutableRelativePath, ___OSKextCreateCacheFileURL, ___OSKextCreateCompositeKey, ___OSKextCreateFromIdentifierCacheDict, ___OSKextCreateIdentifierCacheDict, ___OSKextCreateKextRequest, ___OSKextDeallocateMmapBuffer, ___OSKextGetBleedthroughFlag, ___OSKextLogDependencyGraphApplierFunction, ___OSKextLogKernelMessages, ___OSKextMapExecutable, ___OSKextProcessKextRequestResults, ___OSKextReadRegistryNumberProperty, ___OSKextRealize, ___OSKextRealizeKextsWithIdentifier, ___OSKextRemoveIdentifierCacheForKext, ___OSKextRemovePersonalities, ___OSKextSendKextRequest, ___OSKextSetLoadAddress, ___OSKextStatURL, ___OSKextStatURLsOrURL, ___OSKextURLIsSystemFolder, ___OSKextUUIDCallback, ___OSKextUnload, ___RegisterServiceWithSessionFunction, ___SetNumPropertyForService, ___VirtualServiceNotifier, ___VirtualServicesApplier, ___absPathOnVolume, ___hid_dispatch_queue_context_destructor, ___kOSKextDiagnosticsFlagAllImplemented, ___sOSKextDefaultLogFunction, ___sOSKextLogOutputFunction, ___uuid_callback, __copySleepPreventersList, __getPSDispatchQueue, __io_hideventsystem_clear_service_cache, __io_hideventsystem_copy_event_for_service, __io_hideventsystem_copy_matching_event_for_service, __io_hideventsystem_copy_matching_services, __io_hideventsystem_copy_properties_for_service, __io_hideventsystem_copy_property, __io_hideventsystem_copy_property_for_service, __io_hideventsystem_create_virtual_service, __io_hideventsystem_dispatch_event, __io_hideventsystem_dispatch_event_for_virtual_service, __io_hideventsystem_do_client_refresh, __io_hideventsystem_open, __io_hideventsystem_queue_create, __io_hideventsystem_queue_start, __io_hideventsystem_queue_stop, __io_hideventsystem_register_event_filter, __io_hideventsystem_register_property_changed_notification, __io_hideventsystem_register_record_client_changed_notification, __io_hideventsystem_register_record_service_changed_notification, __io_hideventsystem_release_notification, __io_hideventsystem_remove_virtual_service, __io_hideventsystem_service_conforms_to, __io_hideventsystem_set_element_value_for_service, __io_hideventsystem_set_properties, __io_hideventsystem_set_properties_for_service, __io_hideventsystem_unregister_event_filter, __io_hideventsystem_unregister_property_changed_notification, __io_hideventsystem_unregister_record_client_changed_notification, __io_hideventsystem_unregister_record_service_changed_notification, __io_kSCCompAnyRegex, __io_kSCDynamicStoreDomainState, __iohideventsystem_client_dispatch_client_records_changed, __iohideventsystem_client_dispatch_event_filter, __iohideventsystem_client_dispatch_notification_results, __iohideventsystem_client_dispatch_properties_changed, __iohideventsystem_client_dispatch_service_records_changed, __iohideventsystem_client_dispatch_service_removal, __iohideventsystem_client_dispatch_virtual_service_copy_property, __iohideventsystem_client_dispatch_virtual_service_notification, __iohideventsystem_client_dispatch_virtual_service_set_property, __iohideventsystem_client_refresh, __iohideventsystem_client_subsystem, __iohideventsystem_copy_event_from_virtual_service, __iohideventsystem_copy_matching_event_from_virtual_service, __iohideventsystem_output_event_to_virtual_service, __iohideventsystem_subsystem, __isArray, __isDictionary, __isString, __pm_connect, __pm_disconnect, __releaseAsycnAssertion, __servicePropertyCacheKeys, __servicePropertyCacheKeysCount, __systemPowerCallback, _activateAsyncAssertion, _activeAssertions, _assertion_timer_suspended, _checkFeatureEnabled, _clearAssertionLogBuffer, _comparePrefsToDefaults, _copyPreferencesForSrc, _createAsyncAssertion, _createCFStringForData, _createCFStringForPlist_new, _createUTF8CStringForCFString, _decodeIOPMUserIsActive, _defaultPropertyKeyValue, _defaultSettings, _ev_try_lock, _ev_unlock, _fat_iterator_close, _fat_iterator_file_end, _fat_iterator_file_start, _fat_iterator_find_arch, _fat_iterator_find_fat_arch, _fat_iterator_find_host_arch, _fat_iterator_for_data, _fat_iterator_is_iterable, _fat_iterator_next_arch, _fat_iterator_num_arches, _fat_iterator_open, _fat_iterator_reset, _gAsyncMode, _gAsyncModeDisableOverride, _gAsyncModeSetupDone, _gCurrentRemoteAssertionIsCoalesced, _gIOCFPlugInInterfaceID, _gIOHIDDebugConfig, _gIOKitLibSerializeOptions, _gIOKitLibServerVersion, _gIOPMUserIsActive, _getEffectivePageSize, _getGenericPrefsPath, _getHostPrefsPath, _getMonotonicTime, _getPMQueue, _getUserActiveValidDict, _handleAssertionLevel, _handleAssertionTimeout, _handleAsyncAssertionDisableOverride, _hid_dispatch_pthread_root_queue_create, _hid_dispatch_queue_create, _hid_dispatch_queue_create_with_context_destructor, _hid_dispatch_queue_release, _hid_pthread_attr_init, _hid_workloop_create, _initialSetup, _insertIntoTimedList, _io_hideventsystem_clear_service_cache, _io_hideventsystem_copy_event_for_service, _io_hideventsystem_copy_matching_event_for_service, _io_hideventsystem_copy_matching_services, _io_hideventsystem_copy_properties_for_service, _io_hideventsystem_copy_property, _io_hideventsystem_copy_property_for_service, _io_hideventsystem_create_virtual_service, _io_hideventsystem_dispatch_event, _io_hideventsystem_dispatch_event_for_virtual_service, _io_hideventsystem_do_client_refresh, _io_hideventsystem_open, _io_hideventsystem_queue_create, _io_hideventsystem_queue_start, _io_hideventsystem_queue_stop, _io_hideventsystem_register_event_filter, _io_hideventsystem_register_property_changed_notification, _io_hideventsystem_register_record_client_changed_notification, _io_hideventsystem_register_record_service_changed_notification, _io_hideventsystem_release_notification, _io_hideventsystem_remove_virtual_service, _io_hideventsystem_service_conforms_to, _io_hideventsystem_set_element_value_for_service, _io_hideventsystem_set_properties, _io_hideventsystem_set_properties_for_service, _io_hideventsystem_unregister_event_filter, _io_hideventsystem_unregister_property_changed_notification, _io_hideventsystem_unregister_record_client_changed_notification, _io_hideventsystem_unregister_record_service_changed_notification, _io_pm_assertion_activity_aggregate, _io_pm_assertion_activity_log, _io_pm_assertion_copy_details, _io_pm_assertion_create, _io_pm_assertion_notify, _io_pm_assertion_retain_release, _io_pm_assertion_set_properties, _io_pm_cancel_repeat_events, _io_pm_change_sa_assertion_behavior, _io_pm_connection_acknowledge_event, _io_pm_connection_create, _io_pm_connection_release, _io_pm_connection_schedule_notification, _io_pm_ctl_assertion_type, _io_pm_declare_network_client_active, _io_pm_declare_system_active, _io_pm_declare_user_active, _io_pm_force_active_settings, _io_pm_get_capability_bits, _io_pm_get_uuid, _io_pm_get_value_int, _io_pm_hid_event_copy_history, _io_pm_hid_event_report_activity, _io_pm_last_wake_time, _io_pm_schedule_power_event, _io_pm_schedule_repeat_event, _io_pm_set_bt_wake_interval, _io_pm_set_debug_flags, _io_pm_set_dw_linger_interval, _io_pm_set_exception_limits, _io_pm_set_sleepservice_wake_time_cap, _io_pm_set_value_int, _io_ps_copy_powersources_info, _io_ps_new_pspowersource, _io_ps_release_pspowersource, _io_ps_update_pspowersource, _iohideventsystem_client_dispatch_client_records_changed, _iohideventsystem_client_dispatch_event_filter, _iohideventsystem_client_dispatch_notification_results, _iohideventsystem_client_dispatch_properties_changed, _iohideventsystem_client_dispatch_service_records_changed, _iohideventsystem_client_dispatch_service_removal, _iohideventsystem_client_dispatch_virtual_service_copy_property, _iohideventsystem_client_dispatch_virtual_service_notification, _iohideventsystem_client_dispatch_virtual_service_set_property, _iohideventsystem_client_refresh, _iohideventsystem_client_server, _iohideventsystem_client_server_routine, _iohideventsystem_copy_event_from_virtual_service, _iohideventsystem_copy_matching_event_from_virtual_service, _iohideventsystem_output_event_to_virtual_service, _iohideventsystem_server, _iohideventsystem_server_routine, _iokit_user_client_trap, _isA_GenericPref, _isCrossLinking, _kIOAVCPCapabilitiesAll, _kIOAVCPCapabilitiesNone, _kIOAVCPConfigDefault, _kIOAVContentProtectionHDCP1, _kIOAVContentProtectionHDCP2, _kIOAVContentProtectionNone, _kIOAVDSCCapabilitiesNone, _kIOAVDSCHintsNone, _kIOAVDSCParametersNone, _kIOEthernetHardwareAddress, _kIOHIDEventAttachmentSender, _kIOHIDEventSystemConnectionDispatchFilterWaitTimeoutMS, _kIOHIDFilterPluginArrayCallBacks, _kIOHIDServerConnectionRootQueue, _kIOHIDServiceCapsLockLEDKey, _kIOHIDServiceCapsLockLEDKey_Auto, _kIOHIDServiceCapsLockLEDKey_Inhibit, _kIOHIDServiceCapsLockLEDKey_Off, _kIOHIDServiceCapsLockLEDKey_On, _kIOHIDServiceCapsLockLEDOnKey, _kIOHIDServiceHiddenKey, _kIOHIDServiceInterruptWorkloop, _kIOMainPortDefault, _kIOMasterPortDefault, _kIOUserEthernetInterfaceMergeProperties, _kIOUserEthernetInterfaceRole, _kOSKextDependencyCircularReference, _kOSKextDependencyCompatibleVersionUndeclared, _kOSKextDependencyInauthentic, _kOSKextDependencyIndirectDependencyUnresolvable, _kOSKextDependencyIneligibleInSafeBoot, _kOSKextDependencyInvalid, _kOSKextDependencyLoadedCompatibleVersionUndeclared, _kOSKextDependencyLoadedIsIncompatible, _kOSKextDependencyMultipleVersionsDetected, _kOSKextDependencyNoCompatibleVersion, _kOSKextDependencyRawAndComponentKernel, _kOSKextDependencyUnavailable, _kOSKextDiagnosticBadPropertyListXMLKey, _kOSKextDiagnosticBadSystemPropertyKey, _kOSKextDiagnosticBundleIdentifierMismatchKey, _kOSKextDiagnosticBundleVersionMismatchKey, _kOSKextDiagnosticCodelessWithLibrariesKey, _kOSKextDiagnosticCompatibleVersionLaterThanVersionKey, _kOSKextDiagnosticDeclaresBothKernelAndKPIDependenciesKey, _kOSKextDiagnosticDeclaresNoKPIsWarningKey, _kOSKextDiagnosticDeclaresNonKPIDependenciesKey, _kOSKextDiagnosticDeprecatedPropertyKey, _kOSKextDiagnosticExecutableArchNotFoundKey, _kOSKextDiagnosticExecutableBadKey, _kOSKextDiagnosticExecutableMissingKey, _kOSKextDiagnosticFileAccessKey, _kOSKextDiagnosticFileNotFoundKey, _kOSKextDiagnosticIdentifierOrVersionTooLongKey, _kOSKextDiagnosticIneligibleInSafeBoot, _kOSKextDiagnosticInfoKeyIneligibleForDriverKit, _kOSKextDiagnosticInvalidSymlinkKey, _kOSKextDiagnosticKernelComponentNotInterfaceKey, _kOSKextDiagnosticKextIneligibleForDriverKit, _kOSKextDiagnosticMissingDesignatedKernelClass, _kOSKextDiagnosticMissingPropertyKey, _kOSKextDiagnosticNoExplicitKernelDependencyKey, _kOSKextDiagnosticNoFileKey, _kOSKextDiagnosticNonAppleKextDeclaresPrivateKPIDependencyKey, _kOSKextDiagnosticNonuniqueIOResourcesMatchKey, _kOSKextDiagnosticNotABundleKey, _kOSKextDiagnosticNotSignedKey, _kOSKextDiagnosticOSBundleRequiredValueIneligibleForDriverKit, _kOSKextDiagnosticOwnerPermissionKey, _kOSKextDiagnosticPersonalityHasDifferentBundleIdentifierKey, _kOSKextDiagnosticPersonalityHasNoBundleIdentifierKey, _kOSKextDiagnosticPersonalityNamesKextWithNoExecutableKey, _kOSKextDiagnosticPersonalityNamesNonloadableKextKey, _kOSKextDiagnosticPersonalityNamesUnknownKextKey, _kOSKextDiagnosticPropertyIsIllegalTypeKey, _kOSKextDiagnosticPropertyIsIllegalValueKey, _kOSKextDiagnosticRawKernelDependency, _kOSKextDiagnosticSharedExecutableAndExecutableKey, _kOSKextDiagnosticSharedExecutableKextMissingKey, _kOSKextDiagnosticStatFailureKey, _kOSKextDiagnosticSymlinkKey, _kOSKextDiagnosticThirdPartiesIneligibleForDriverKitOSBundleRequired, _kOSKextDiagnosticTypeWarningKey, _kOSKextDiagnosticURLConversionKey, _kOSKextDiagnosticUserExecutableAndExecutableKey, _kOSKextDiagnosticsAuthenticationKey, _kOSKextDiagnosticsBootLevelKey, _kOSKextDiagnosticsDependenciesKey, _kOSKextDiagnosticsDependencyNotOSBundleRequired, _kOSKextDiagnosticsInterfaceDependencyCount, _kOSKextDiagnosticsValidationKey, _kOSKextDiagnosticsWarningsKey, _kOSKextLoadNotification, _kOSKextUnloadNotification, _logAsyncAssertionActivity, _macho_find_dysymtab, _macho_find_section_numbered, _macho_find_source_version, _macho_find_symbol, _macho_find_symtab, _macho_find_uuid, _macho_get_section_by_name, _macho_get_section_by_name_64, _macho_get_segment_by_name, _macho_get_segment_by_name_64, _macho_remove_linkedit, _macho_scan_load_commands, _macho_swap, _macho_trim_linkedit, _macho_unswap, _multipleActiveAssertionsExist, _offloadAssertions, _previouslySerialized, _printPList_new, _processAssertionTimeout, _processAssertionUpdateActivity, _processCheckAssertionsMsg, _processCurrentActiveAssertions, _processRemoteMsg, _processUserActivityMsg, _recordObjectInIDRefDictionary, _releaseAsyncAssertion, _removeFromTimedList, _roundPageCrossSafe, _roundPageCrossSafeFixedWidth, _sendAsyncAssertionMsg, _sendAsyncReleaseMsg, _sendUserActivityMsg, _setAsyncAssertionProperties, _setCrossLinkPageSize, _setDispatchQueue, _setPreferencesForSrc, _setupLogging, _showPList_new ] objc-classes: [ HIDConnection, HIDDevice, HIDElement, HIDEvent, HIDEventService, HIDServiceClient, HIDSession ] objc-ivars: [ HIDConnection._connection, HIDDevice._device, HIDElement._element, HIDEvent._event, HIDEventService._service, HIDServiceClient._client, HIDSession._session ] ... ================================================ FILE: Loader/Supporting Files/Loader-Bridging-Header.h ================================================ // // Use this file to import your target's public headers that you would like to expose to Swift. // #import "Macros.h" #include "LSApplicationWorkspace.h" #include "MobileGestalt.h" #include "posixspawn.h" #include "jailbreakd.h" #include "nvram.h" uint32_t dyld_get_active_platform(void); ================================================ FILE: Loader/Supporting Files/loader.entitlements ================================================ com.apple.CommCenter.fine-grained spi com.apple.private.persona-mgmt platform-application com.apple.private.security.no-container com.apple.private.security.system-application com.apple.security.iokit-user-client-class IOUserClient com.apple.private.iokit.system-nvram-allow com.apple.private.iokit.system-nvram-internal-allow in.palera.pinfo.kernel-info in.palera.loader.bootstrapper in.palera.loader.allow-obliterate-jailbreak in.palera.private.launchd-commands.client com.apple.security.exception.files.absolute-path.read-write / get-task-allow com.apple.AutoWake-write-access ================================================ FILE: Loader/Utilities/Bootstrap/LRBootstrapper+download.swift ================================================ // // LRBootstrapper+download.swift // Loader // // Created by samara on 18.03.2025. // import Foundation // MARK: - Class extension: download extension LRBootstrapper: URLSessionDownloadDelegate { func download(_ urls: [URL], completion: @escaping ([String: Error?]) -> Void) { let sessionConfig = URLSessionConfiguration.default let session = URLSession(configuration: sessionConfig, delegate: self, delegateQueue: nil) var results: [String: Error?] = [:] let group = DispatchGroup() for url in urls { group.enter() let tmp = URL(fileURLWithPath: .tmp()) let destination = tmp.appendingPathComponent(url.lastPathComponent) if url.lastPathComponent.contains("tar") || url.lastPathComponent.contains("zst") { bootstrapFilePath = destination.relativePath } else { packageFilePaths.append(destination.relativePath) } let downloadTask = session.downloadTask(with: url) downloadCompletionHandlers[downloadTask] = { (path, error) in results[url.absoluteString] = error group.leave() } downloadTaskToDestinationMap[downloadTask] = destination downloadTask.resume() } group.notify(queue: .main) { completion(results) } } func urlSession( _ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL ) { guard let destinationURL = downloadTaskToDestinationMap[downloadTask] else { downloadCompletionHandlers[downloadTask]?(nil, NSError(domain: "Download", code: -1, userInfo: [NSLocalizedDescriptionKey: "Could not find destination for task"])) return } let tmp = URL(fileURLWithPath: .tmp()) let destination = tmp.appendingPathComponent(destinationURL.lastPathComponent) let fileManager = FileManager.default do { if fileManager.fileExists(atPath: destination.path) { try fileManager.removeItem(at: destination) } print("downloaded to \(location)") try fileManager.moveItem(at: location, to: destination) print("moved to \(destination)") downloadCompletionHandlers[downloadTask]?(destinationURL.path, nil) } catch { downloadCompletionHandlers[downloadTask]?(nil, error) } } func urlSession( _ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64 ) { // } } ================================================ FILE: Loader/Utilities/Bootstrap/LRBootstrapper+status.swift ================================================ // // LRBootstrapper+status.swift // Loader // // Created by samara on 18.03.2025. // import NimbleViewControllers // MARK: - Class extension: status extension LRBootstrapper { func setItemStatus(_ section: String, item: String, with status: StepStatus) { DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) { self.callback?.updateStepItemStatus(section, item: item, with: status) } } func setLastItemStatusAndNew(_ section: String, item: String) { if let last = lastStatusItem { setItemStatus(last.section, item: last.item, with: .completed) } self.lastStatusItem = (section, item) self.setItemStatus(section, item: item, with: .inProgress) } func setGroupFocus(for section: Int) { DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) { self.callback?.updateStepGroupFocus(for: section) } } } ================================================ FILE: Loader/Utilities/Bootstrap/LRBootstrapper.swift ================================================ // // LRBootstrapper.swift // Loader // // Created by samara on 13.03.2025. // import UIKit import NimbleViewControllers // MARK: - Protocal protocol LRBootstrapperDelegate { func updateStepItemStatus(_ section: String, item: String, with status: StepStatus) func updateStepItemStatusForName(named item: String, with status: StepStatus) func updateStepGroupFocus(for section: Int) func bootstrapFinish() } // MARK: - Class class LRBootstrapper: NSObject { let callback: LRBootstrapperDelegate? private var _shouldBootstrap: Bool private let _config: LRConfig? private let _password: String private let _manager: LRManager? enum LRBootstrapperError: Error, LocalizedError { case downloadFailed(Error) case bootstrapFailed(String) case dpkgFailed } var downloadCompletionHandlers: [URLSessionDownloadTask: (String?, Error?) -> Void] = [:] var downloadTaskToDestinationMap: [URLSessionDownloadTask: URL] = [:] var lastStatusItem: (section: String, item: String)? = nil var bootstrapFilePath: String? = nil var packageFilePaths: [String] = [] init( callback: LRBootstrapperDelegate? = nil, config: LRConfig? = nil, manager: LRManager? = nil, sudo_password: String, shouldBootstrap: Bool = true ) { self.callback = callback self._config = config self._manager = manager self._password = sudo_password self._shouldBootstrap = shouldBootstrap super.init() } // MARK: Download func prepareFiles() async throws { return try await withCheckedThrowingContinuation { continuation in let dispatchGroup = DispatchGroup() let errorLock = NSLock() var firstError: Error? func downloadResource(urls: [URL], itemLabel: String) { dispatchGroup.enter() self.setItemStatus( .localized("Download"), item: itemLabel, with: .inProgress ) download(urls) { results in if let (_, error) = results.first(where: { _, error in error != nil }) { errorLock.lock() if firstError == nil, let downloadError = error { firstError = LRBootstrapperError.downloadFailed(downloadError) self.setItemStatus( .localized("Download"), item: itemLabel, with: .failed ) } errorLock.unlock() } else { self.setItemStatus( .localized("Download"), item: itemLabel, with: .completed ) } dispatchGroup.leave() } } if _shouldBootstrap, let url = _config?.content()?.bootstrap()?.uri { downloadResource(urls: [url], itemLabel: .localized("Downloading Base Bootstrap")) } if _shouldBootstrap, let urls = _config?.content()?.bootstrap()?.bootstrap_deb_uris { downloadResource(urls: urls, itemLabel: .localized("Downloading Required Packages")) } if let url = _manager?.uri { downloadResource(urls: [url], itemLabel: .localized("Downloading Package Managers")) } // wait for all downloads to complete dispatchGroup.notify(queue: .global()) { [weak self] in guard let self = self else { continuation.resume(throwing: LRBootstrapperError.bootstrapFailed("Self was deallocated")) return } if let error = firstError { continuation.resume(throwing: error) } else { self.setGroupFocus(for: 1) continuation.resume(returning: ()) } } } } // MARK: Bootstrap func bootstrap() async throws { self.setLastItemStatusAndNew( .localized("Bootstrap"), item: .localized("Preparing Environment") ) #if !targetEnvironment(simulator) && !DEBUG // jailbreak utilities like Filza will create /var/jb if opened before bootstrapping // so we will forcefully remove it if we are rootless if await UIDevice.current.palera1n.palerain_option_rootless { _ = LREnvironment.execute(.binpack("/bin/rm"), ["-rf", "/var/jb"]) } #endif self.setLastItemStatusAndNew( .localized("Bootstrap"), item: .localized("Installing Base Bootstrap") ) let (ret, resultDescription) = LREnvironment.jbd.deployBootstrap( with: bootstrapFilePath!, password: _password ) if ret != 0 { self.setItemStatus( .localized("Bootstrap"), item: .localized("Installing Base Bootstrap"), with: .failed ) throw LRBootstrapperError.bootstrapFailed(resultDescription) } self.setLastItemStatusAndNew( .localized("Bootstrap"), item: .localized("Preparing Repositories") ) if let repos = _config?.content()?.repositories { let data = repos.map { $0.data }.joined(separator: "\n") // highly unlikely chance that writing into a file will fail // if someone with a custom config fucks it up, thats not on us let (ret, resultDescription) = LREnvironment.jbd.overwriteFile( with: data, to: .jb_prefix("/etc/apt/sources.list.d/palera1n.sources") ) if ret != 0 { self.setItemStatus( .localized("Bootstrap"), item: .localized("Preparing Repositories"), with: .failed ) throw LRBootstrapperError.bootstrapFailed(resultDescription) } } LREnvironment.jbd.reloadLaunchdJailbreakEnvironment() self.setGroupFocus(for: 2) } // MARK: Post bootstrap - packages func installPackages() async throws { self.setLastItemStatusAndNew( .localized("Install"), item: .localized("Installing Packages") ) if !packageFilePaths.isEmpty { let ret = LREnvironment.execute(.jb_prefix("/usr/bin/dpkg"), ["-i"] + packageFilePaths, environmentPath: ["/usr/bin"] ) if ret != 0 { self.setItemStatus( .localized("Install"), item: .localized("Installing Packages"), with: .failed ) throw LRBootstrapperError.dpkgFailed } LREnvironment.execute(.binpack("/usr/bin/uicache"), ["-a"]) } try? await Task.sleep(nanoseconds: 1_000_000) self.callback?.bootstrapFinish() } } ================================================ FILE: Loader/Utilities/Config/Models/LRConfig.swift ================================================ // // Fetch.swift // loader-rewrite // // Created by samara on 1/29/24. // import UIKit.UIDevice // MARK: - Fetch config struct LRConfig: Codable { /// Minimum loader version that the configuration supports /// /// If the app version is lower than minimum required then /// it will tell you to update to the latest palera1n version /// with an alert let min_loader_version: String /// The minimum loader version the latest version of /// palera1n supports /// /// As of the versions after beta 9, only 2.0+ is supported let palera1n_version_with_min_loader: String let min_bridge_bootstrapper_version: String /// Message displayed in a section footer /// /// Usually used as a means of telling users emergency or /// important messages related to palera1n/jailbreaking in /// general let footer_notice: String? private let contents: [LRConfigContent] private func findCompatibleContents() -> LRConfigContent? { contents.filter { content in content.platform == Int(dyld_get_active_platform()) }.first } /// Strap contents func content() -> LRConfigContentDetails? { findCompatibleContents()?.type() } } private struct LRConfigContent: Codable { fileprivate let platform: Int private let rootful: LRConfigContentDetails? private let rootless: LRConfigContentDetails? fileprivate func type() -> LRConfigContentDetails? { UIDevice.current.palera1n.palerain_option_rootless ? rootless : rootful } } // MARK: - Strap data struct LRConfigContentDetails: Codable { private let dotfile: String private let bootstraps: [LRBootstrap] /// Available package managers let managers: [LRManager] /// Repositories that will be added let repositories: [LRRepository]? private func _findCompatibleBootstraps() -> LRBootstrap? { let currentCFVersion = UIDevice.current.cfVersion.rounded let availableVersions = bootstraps.map { $0.cfver } // If current version is lower than all available bootstraps if let minAvailableVersion = availableVersions.min(), Int(currentCFVersion)! < minAvailableVersion { return nil } // If exact match exists if let exactMatch = bootstraps.filter({ $0.cfver == Int(currentCFVersion) }).first { return exactMatch } // If current version is higher than available bootstraps if let highestVersion = availableVersions.max(), Int(currentCFVersion)! > highestVersion { return bootstraps.filter { $0.cfver == highestVersion }.first } // Get the closest version for the first character in a string 2600 -> 2 if #available(iOS 17, *) { if let digit = currentCFVersion.first { let matching = availableVersions.filter { String($0).first == digit } if let closestVersion = matching.min(by: { abs($0 - Int(currentCFVersion)!) < abs($1 - Int(currentCFVersion)!) }) { return bootstraps.filter { $0.cfver == closestVersion }.first } } } return nil } /// Returns the first compatible bootstrap or nil if none matches /// If nil, its expected to immediately backout of the bootstrapping process func bootstrap() -> LRBootstrap? { _findCompatibleBootstraps() } } struct LRBootstrap: Codable { fileprivate let cfver: Int /// Bootstrap tar.zst uri let uri: URL /// Bootstrap post strap debs let bootstrap_deb_uris: [URL] enum CodingKeys: String, CodingKey { case cfver, uri case bootstrap_deb_uris = "bootstrap-debs" } } struct LRManager: Codable { /// Package manager name let name: String /// Package manager deb uri let uri: URL /// Package manager image representation uri let icon: URL /// Package manager install path let filePath: URL /// Asynchronously load the icon image func loadIconImage(completion: @escaping (UIImage) -> Void) { URLSession.shared.dataTask(with: icon) { data, response, error in if let data = data, let image = UIImage(data: data) { DispatchQueue.main.async { completion(image) } } else { DispatchQueue.main.async { completion(UIImage(named: "unknown")!) } } }.resume() } } struct LRRepository: Codable { private let Types: String private let URIs: String private let Suites: String private let Components: String /// APT repository data in string format var data: String { "Types: \(Types)\nURIs: \(URIs)\nSuites: \(Suites)\nComponents: \(Components)\n" } } ================================================ FILE: Loader/Utilities/Environment/LREnvironment+prefixes.swift ================================================ // // LREnvironment+prefixes.swift // Loader // // Created by samara on 18.03.2025. // import UIKit.UIDevice // MARK: - Class extension: prefixes extension LREnvironment { func jb_prefix(_ path: String) -> String { #if !targetEnvironment(simulator) if UIDevice.current.palera1n.palerain_option_rootless { return "/var/jb" + path } #endif return path } static func binpack(_ path: String) -> String { "/cores/binpack" + path } static func tmp(_ path: String = "") -> String { "/tmp/palera1n" + path } } ================================================ FILE: Loader/Utilities/Environment/LREnvironment+reset.swift ================================================ // // LREnvironment+reset.swift // Loader // // Created by samara on 18.03.2025. // import UIKit.UIDevice // MARK: - Class extension: reset extension LREnvironment { /// Change sudo password /// - Parameter password: The sudo password you want to use func resetSudoPassword(with password: String) { let dashCommand = "printf \"%s\\n\" \"\(password)\" | \(self.jb_prefix("/usr/sbin/pw")) usermod 501 -h 0" Self.execute(.jb_prefix("/usr/bin/dash"), ["-c", dashCommand]) } /// Removes bootstrap func removeBootstrap() { if #available(iOS 18, *), UIDevice.current.palera1n.palerain_option_rootless { let apps = try? FileManager.default.contentsOfDirectory(atPath: .jb_prefix("/Applications")) if let apps { for app in apps { Self.execute(.binpack("/usr/bin/uicache"), ["-u", app]) }} } guard jbd.obliterateJailbreak(cleanFakeFS: UIDevice.current.palera1n.shouldCleanFakefs) == 0 else { return } jbd.reloadLaunchdJailbreakEnvironment() #if !DEBUG reboot() #else exit(0) #endif } /// Reboots device func reboot() { Self.execute(.binpack("/bin/launchctl"), ["reboot"]) } /// Reboots userspace func rebootUserspace() { Self.execute(.binpack("/bin/launchctl"), ["reboot", "userspace"]) } /// UICache func uicacheAll() { Self.execute(.binpack("/usr/bin/uicache"), ["-a"]) } /// Restart springboard func respring() { Self.execute(.binpack("/bin/launchctl"), ["kickstart", "-k", "system/com.apple.backboardd"]) } /// Enter device into recovery, then reboot func enterRecovery() { _ = Self.nvram("auto-boot", "false") reboot() } } ================================================ FILE: Loader/Utilities/Environment/LREnvironment+spawn.swift ================================================ // // LREnvironment+spawn.swift // Loader // // Created by samara on 13.03.2025. // import Foundation import Darwin.POSIX // MARK: - Class extension: spawn extension LREnvironment { /// Executes a posix spawn command with a given environment path /// - Parameters: /// - command: Program path /// - args: Program arguments /// - environmentPath: Enviroment paths, such as `/usr/bin` /// - Returns: An exit status of the given command @discardableResult static func execute( _ command: String, _ args: [String] = [], environmentPath: [String] ) -> Int { var path: String = "PATH=" // Using the jailbreaks root prefix, we will prepend your paths with it // when specifying, you will need to only include the paths that will // be present on a standard filesystem such as /usr/bin, and NOT /var/jb/usr/bin let env = environmentPath.map { .jb_prefix($0) }.joined(separator: ":") path.append(env) return execute(command, args, environment: [path]) } /// Executes a posix spawn command /// - Parameters: /// - command: Program path /// - args: Program arguments /// - environment: Environment variables, i.e. `VEE=1` /// - Returns: An exit status of the given command @discardableResult static func execute( _ command: String, _ args: [String] = [], environment: [String] = [] ) -> Int { #if targetEnvironment(simulator) return 0 #else let cArgs = ([command] + args).map { strdup($0) } + [nil] defer { for arg in cArgs where arg != nil { free(arg) } } // we don't need a preset environment var env: [String] = [] if !environment.isEmpty { for variable in environment { env.append(variable) } } let cEnv = env.map { strdup($0) } + [nil] defer { for e in cEnv where e != nil { free(e) } } var attr: posix_spawnattr_t? posix_spawnattr_init(&attr) posix_spawnattr_set_persona_np(&attr, 99, UInt32(POSIX_SPAWN_PERSONA_FLAGS_OVERRIDE)) posix_spawnattr_set_persona_uid_np(&attr, 0) posix_spawnattr_set_persona_gid_np(&attr, 0) var pid: pid_t = 0 let status = posix_spawnp(&pid, command, nil, &attr, cArgs, cEnv) posix_spawnattr_destroy(&attr) if status != 0 { return Int(status) } var exitStatus: Int32 = 0 waitpid(pid, &exitStatus, 0) // where the FUCK is WEXITSTATUS let exitCode = (exitStatus & 0xff00) >> 8 // fucking xcode always makes this return 0??, I won't do anything about it, but be aware return Int(exitCode) #endif } } // MARK: - Class extension: nvram extension LREnvironment { static func nvram( _ key: String, _ value: String ) -> UInt32 { guard let keyPtr = strdup(key), let valuePtr = strdup(value) else { return 0 } defer { free(keyPtr) free(valuePtr) } return nvram_set(keyPtr, valuePtr) } } ================================================ FILE: Loader/Utilities/Environment/LREnvironment.swift ================================================ // // LREnvironment.swift // Loader // // Created by samara on 13.03.2025. // import UIKit.UIDevice // MARK: - Class class LREnvironment { typealias jbd = JailbreakD static let shared = LREnvironment() // MARK: Boostrap status enum LRBootstrapStatus { case bootstrapped case partial_bootstrapped_rootless case not_bootstrapped var stringValue: String { switch self { case .bootstrapped: "✓" case .partial_bootstrapped_rootless: "!" case .not_bootstrapped: "✗" } } } /// Devices bootstrap status var isBootstrapped: LRBootstrapStatus { #if !targetEnvironment(simulator) let fileManager = FileManager.default let dotfile = dotfilePath() if fileManager.fileExists(atPath: .jb_prefix(dotfile)) { return .bootstrapped } if UIDevice.current.palera1n.palerain_option_rootless { if let preboot_path = jbd.getPrebootPath() { if fileManager.fileExists(atPath: preboot_path + dotfile) { return .partial_bootstrapped_rootless } } } #endif return .not_bootstrapped } static func default_config_url() -> String { "https://\(loaderConfigURL())" } static func config_url() -> String { let userDefaults = UserDefaults.standard let defaultValue = self.default_config_url() let installPath = userDefaults.string(forKey: "defaultInstallPath") ?? defaultValue return installPath } } ================================================ FILE: Loader/Utilities/Nvram/nvram.c ================================================ // // nvram.c // Loader // // Created by samsam on 9/25/25. // #include "nvram.h" #include uint32_t nvram_set(char* key, char* value) { CFStringRef cfKey = CFStringCreateWithCString(kCFAllocatorDefault, key, kCFStringEncodingUTF8); CFStringRef cfValue = CFStringCreateWithCString(kCFAllocatorDefault, value, kCFStringEncodingUTF8); io_registry_entry_t nvram = IORegistryEntryFromPath(kIOMasterPortDefault, kIODeviceTreePlane ":/options"); kern_return_t ret = IORegistryEntrySetCFProperty(nvram, cfKey, cfValue); printf("Set nvram %s=%s ret: %d\n", key, value, ret); ret = IORegistryEntrySetCFProperty(nvram, CFSTR("IONVRAM-FORCESYNCNOW-PROPERTY"), cfKey); printf("sync nvram ret: %d\n", ret); IOObjectRelease(nvram); if (cfValue) CFRelease(cfValue); CFRelease(cfKey); return ret; } ================================================ FILE: Loader/Utilities/Nvram/nvram.h ================================================ // // nvram.h // Loader // // Created by samsam on 9/25/25. // #ifndef nvram_h #define nvram_h #include uint32_t nvram_set(char* key, char* value); #endif ================================================ FILE: Loader/Utilities/XPC/JailbreakD.swift ================================================ // // Wrapper.swift // palera1nLoader // // Created by Nick Chan on 28/1/2024. // import Foundation enum JailbreakD { static func getFlags() -> UInt64 { #if targetEnvironment(simulator) // 0xc0002 // rootless 0xc0081 // rootful //return 0x1000000002c00082 //return 0x2000000 #else GetPinfoFlags_impl() #endif } static func getPrebootPath() -> String? { #if targetEnvironment(simulator) nil #else let cStr = GetPrebootPath_impl() if (cStr != nil) { let str = String(cString: cStr!) cStr?.deallocate() return str } else { return nil } #endif } static func deployBootstrap(with path: String, password: String) -> (Int, String) { #if targetEnvironment(simulator) return (0, "") #else var resultDescription: UnsafeMutablePointer!; let retval = DeployBootstrap_impl( path, false, password, Bundle.appExecutable, "\(Bundle.appVersionShort) (\(Bundle.bundleVersion)", &resultDescription ) let result: String; if (resultDescription != nil) { result = String(cString: resultDescription); resultDescription.deallocate(); } else { result = "" } return (Int(retval), result); #endif } static func overwriteFile(with data: String, to destination: String) -> (Int, String) { #if targetEnvironment(simulator) return (0, "") #else var resultDescription: UnsafeMutablePointer! let retval = OverwriteFile_impl( destination, data, &resultDescription ) let result: String if resultDescription != nil { result = String(cString: resultDescription) } else { result = "" } resultDescription?.deallocate() return (Int(retval), result) #endif } @discardableResult static func obliterateJailbreak(cleanFakeFS: Bool) -> Int { #if targetEnvironment(simulator) 0 #else Int(ObliterateJailbreak_impl(cleanFakeFS)); #endif } @discardableResult static func reloadLaunchdJailbreakEnvironment() -> Int { #if targetEnvironment(simulator) 0 #else Int(ReloadLaunchdJailbreakEnvironment_impl()); #endif } @discardableResult static func exitFailureSafeMode() -> Int { #if targetEnvironment(simulator) 0 #else Int(ExitFailureSafeMode_impl()); #endif } } ================================================ FILE: Loader/Utilities/XPC/jailbreakd.c ================================================ // // jailbreakd.c // palera1nLoader // // Created by Nick Chan on 28/1/2024. // #include "jailbreakd.h" #if !TARGET_OS_SIMULATOR enum { JBD_CMD_GET_PINFO_FLAGS = 1, JBD_CMD_GET_PREBOOTPATH, JBD_CMD_GET_PINFO_KERNEL_INFO, JBD_CMD_GET_PINFO_ROOTDEV, JBD_CMD_DEPLOY_BOOTSTRAP, JBD_CMD_OBLITERATE_JAILBREAK, JBD_CMD_PERFORM_REBOOT3, JBD_CMD_OVERWRITE_FILE_WITH_CONTENT, JBD_CMD_INTERCEPT_USERSPACE_PANIC, JBD_CMD_EXIT_SAFE_MODE }; enum { LAUNCHD_CMD_RELOAD_JB_ENV = 1, LAUNCHD_CMD_SET_TWEAKLOADER_PATH, }; const char* xpc_strerror(int error); static xpc_object_t jailbreak_send_jailbreakd_message_with_reply_sync(xpc_object_t xdict) { xpc_connection_t connection = xpc_connection_create_mach_service("in.palera.palera1nd.systemwide", NULL, 0); if (xpc_get_type(connection) == XPC_TYPE_ERROR) { return connection; } xpc_connection_set_event_handler(connection, ^(xpc_object_t _) {}); xpc_connection_activate(connection); xpc_object_t xreply = xpc_connection_send_message_with_reply_sync(connection, xdict); xpc_connection_cancel(connection); xpc_release(connection); return xreply; } static xpc_object_t jailbreak_send_jailbreakd_command_with_reply_sync(uint64_t cmd) { xpc_object_t xdict = xpc_dictionary_create(NULL, NULL, 0); xpc_dictionary_set_uint64(xdict, "cmd", cmd); xpc_object_t xreply = jailbreak_send_jailbreakd_message_with_reply_sync(xdict); xpc_release(xdict); return xreply; } static char* jailbreak_copy_jailbreakd_reply_description(xpc_object_t xreply) { const char* _Nullable errorDescription = xpc_dictionary_get_string(xreply, "errorDescription"); const char* _Nullable message = xpc_dictionary_get_string(xreply, "message"); int error = (int)xpc_dictionary_get_int64(xreply, "error"); char* description = NULL; if (error || errorDescription) { if (error && !errorDescription) { asprintf(&description, "Error: %d (%s)", error, xpc_strerror(error)); } else if (!error && errorDescription) { asprintf(&description, "Error: %s", errorDescription); } else if (error && errorDescription) { asprintf(&description, "Error: %s: %d (%s)", errorDescription, error, xpc_strerror(error)); } } else if (message) { asprintf(&description, "%s", message); } else { asprintf(&description, ""); } return description; } static int jailbreak_send_launchd_message(xpc_object_t xdict, xpc_object_t *xreply) { int ret = 0; xpc_dictionary_set_bool(xdict, "jailbreak", true); xpc_object_t bootstrap_pipe = ((struct xpc_global_data *)_os_alloc_once_table[OS_ALLOC_ONCE_KEY_LIBXPC].ptr)->xpc_bootstrap_pipe; if (__builtin_available(macOS 12.0, iOS 15.0, tvOS 15.0, watchOS 8.0, *)) { ret = _xpc_pipe_interface_routine(bootstrap_pipe, 0, xdict, xreply, 0); } else { ret = xpc_pipe_routine(bootstrap_pipe, xdict, xreply); } //ret = xpc_pipe_routine(bootstrap_pipe, xdict, xreply); if (ret == 0 && (ret = (int)xpc_dictionary_get_int64(*xreply, "error")) == 0) return 0; return ret; } uint64_t GetPinfoFlags_impl(void) { xpc_object_t xreply = jailbreak_send_jailbreakd_command_with_reply_sync(JBD_CMD_GET_PINFO_FLAGS); if (xpc_get_type(xreply) == XPC_TYPE_ERROR) return 0; uint64_t pinfo = xpc_dictionary_get_uint64(xreply, "flags"); xpc_release(xreply); return pinfo; } char * _Nullable GetPrebootPath_impl(void) { xpc_object_t xreply = jailbreak_send_jailbreakd_command_with_reply_sync(JBD_CMD_GET_PREBOOTPATH); if (xpc_get_type(xreply) == XPC_TYPE_ERROR) return 0; const char* path = xpc_dictionary_get_string(xreply, "path"); char* retval; asprintf(&retval, "%s", path); xpc_release(xreply); return retval; } int DeployBootstrap_impl( const char bootstrap[], bool no_password, const char password[], const char bootstrapper_name[], const char bootstrapper_version[], char** result_description ) { xpc_object_t xdict = xpc_dictionary_create(NULL, NULL, 0); xpc_dictionary_set_string(xdict, "path", bootstrap); xpc_dictionary_set_uint64(xdict, "cmd", JBD_CMD_DEPLOY_BOOTSTRAP); xpc_dictionary_set_string(xdict, "bootstrapper-name", bootstrapper_name); xpc_dictionary_set_string(xdict, "bootstrapper-version", bootstrapper_version); xpc_dictionary_set_bool(xdict, "no-password", no_password); if (!no_password) xpc_dictionary_set_string(xdict, "password", password); xpc_object_t xreply = jailbreak_send_jailbreakd_message_with_reply_sync(xdict); xpc_release(xdict); int retval = 0; if (xpc_get_type(xreply) == XPC_TYPE_ERROR) { retval = -1; } else { const char* errorDescription = xpc_dictionary_get_string(xreply, "errorDescription"); int error = (int)xpc_dictionary_get_int64(xreply, "error"); if (error) retval = error; else if (errorDescription) retval = -1; if (result_description) { char* description = jailbreak_copy_jailbreakd_reply_description(xreply); *result_description = description; } xpc_release(xreply); } return retval; } int OverwriteFile_impl( const char* distinationPath, const char* repositoriesContent, char** result_description ) { xpc_object_t xdict = xpc_dictionary_create(NULL, NULL, 0); xpc_dictionary_set_uint64(xdict, "cmd", JBD_CMD_OVERWRITE_FILE_WITH_CONTENT); xpc_dictionary_set_string(xdict, "path", distinationPath); size_t data_size = strlen(repositoriesContent); xpc_object_t data_object = xpc_data_create(repositoriesContent, data_size); xpc_dictionary_set_data(xdict, "data", xpc_data_get_bytes_ptr(data_object), xpc_data_get_length(data_object)); xpc_object_t xreply = jailbreak_send_jailbreakd_message_with_reply_sync(xdict); xpc_release(xdict); xpc_release(data_object); int retval = 0; if (xpc_get_type(xreply) == XPC_TYPE_ERROR) { retval = -1; } else { const char* errorDescription = xpc_dictionary_get_string(xreply, "errorDescription"); int error = (int)xpc_dictionary_get_int64(xreply, "error"); if (error) retval = error; else if (errorDescription) retval = -1; if (result_description) { char* description = jailbreak_copy_jailbreakd_reply_description(xreply); *result_description = description; } xpc_release(xreply); } return retval; } int ObliterateJailbreak_impl(bool isCleanFakeFS) { xpc_object_t xdict = xpc_dictionary_create(NULL, NULL, 0); xpc_dictionary_set_uint64(xdict, "cmd", JBD_CMD_OBLITERATE_JAILBREAK); xpc_dictionary_set_bool(xdict, "keep-fakefs", isCleanFakeFS); xpc_object_t xreply = jailbreak_send_jailbreakd_message_with_reply_sync(xdict); xpc_release(xdict); if (xpc_get_type(xreply) == XPC_TYPE_ERROR) return -1; int error = (int)xpc_dictionary_get_int64(xreply, "error"); xpc_release(xreply); if (error) return error; else return 0; } int ReloadLaunchdJailbreakEnvironment_impl(void) { xpc_object_t launchd_dict = xpc_dictionary_create(NULL, NULL, 0); xpc_object_t launchd_reply; xpc_dictionary_set_uint64(launchd_dict, "cmd", LAUNCHD_CMD_RELOAD_JB_ENV); int ret = jailbreak_send_launchd_message(launchd_dict, &launchd_reply); xpc_release(launchd_dict); xpc_release(launchd_reply); return ret; } int ExitFailureSafeMode_impl(void) { xpc_object_t xreply = jailbreak_send_jailbreakd_command_with_reply_sync(JBD_CMD_EXIT_SAFE_MODE); if (xpc_get_type(xreply) == XPC_TYPE_ERROR) return -1; int error = (int)xpc_dictionary_get_int64(xreply, "error"); xpc_release(xreply); if (error) return error; else return 0; } #endif ================================================ FILE: Loader/Utilities/XPC/jailbreakd.h ================================================ // // jailbreakd.h // palera1nLoader // // Created by Nick Chan on 28/1/2024. // #ifndef jailbreakd_h #define jailbreakd_h #include #if !TARGET_OS_SIMULATOR #include #include #include #include #include #include #include #ifndef __OBJC__ void NSLog(CFStringRef _Nonnull, ...); void NSLogv(CFStringRef _Nonnull, va_list va); #define LOG(x, ...) NSLog(CFSTR(x), ##__VA_ARGS__) #endif typedef xpc_object_t xpc_pipe_t; __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_7_0) XPC_EXPORT XPC_NONNULL1 XPC_NONNULL2 kern_return_t xpc_pipe_routine(xpc_pipe_t pipe, xpc_object_t request, xpc_object_t XPC_GIVES_REFERENCE *reply); API_AVAILABLE(macos(12.0), ios(15.0), tvos(15.0), watchos(8.0)) XPC_EXPORT XPC_WARN_RESULT XPC_NONNULL1 XPC_NONNULL3 XPC_NONNULL4 int _xpc_pipe_interface_routine(xpc_pipe_t pipe, uint64_t routine, xpc_object_t message, xpc_object_t XPC_GIVES_REFERENCE *reply, uint64_t flags); struct _os_alloc_once_s { long once; void *ptr; }; struct xpc_global_data { uint64_t a; uint64_t xpc_flags; mach_port_t task_bootstrap_port; /* 0x10 */ #ifndef _64 uint32_t padding; #endif xpc_object_t xpc_bootstrap_pipe; /* 0x18 */ // and there's more, but you'll have to wait for MOXiI 2 for those... // ... }; extern struct _os_alloc_once_s _os_alloc_once_table[]; #define OS_ALLOC_ONCE_KEY_LIBXPC 1 uint64_t GetPinfoFlags_impl(void); char * _Nullable GetPrebootPath_impl(void); int DeployBootstrap_impl( const char* _Nonnull bootstrap, bool no_password, const char* _Nullable password, const char* _Nonnull bootstrapper_name, const char* _Nonnull bootstrapper_version, char* _Null_unspecified * _Nonnull result_description ); int OverwriteFile_impl( const char* _Nonnull distinationPath, const char* _Nonnull repositoriesContent, char* _Null_unspecified * _Nonnull result_description ); int ObliterateJailbreak_impl(bool isCleanFakeFS); int GetPinfoKernelInfo_impl(uint64_t* kbase, uint64_t* kslide); int ReloadLaunchdJailbreakEnvironment_impl(void); int ExitFailureSafeMode_impl(void); #endif #endif /* jailbreakd_h */ ================================================ FILE: Loader/Views/Bootstrap/LRStagedViewController+UpdateItem.swift ================================================ // // LRStagedViewController+UpdateItem.swift // Loader // // Created by samara on 18.03.2025. // import Foundation import UIKit // MARK: - Class extension: bootstrapperdelegate extension LRStagedViewController: LRBootstrapperDelegate { func updateStepGroupFocus(for section: Int) { selectCollectionViewCell(for: section) } func bootstrapFinish() { Thread.mainBlock { UIApplication.shared.suspend() } } } ================================================ FILE: Loader/Views/Bootstrap/LRStagedViewController.swift ================================================ // // LRStagedViewController.swift // Loader // // Created by samara on 9.03.2025. // import UIKit import NimbleViewControllers // MARK: - Class class LRStagedViewController: LRBaseStagedViewController { private var _shouldBootstrap: Bool private let _config: LRConfig private let _manager: LRManager? init(title: String, config: LRConfig, manager: LRManager? = nil, shouldBootstrap: Bool = true) { self._config = config self._manager = manager self._shouldBootstrap = shouldBootstrap super.init() self.title = title } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func setupView() { footerString = "Do not exit the app during this process, it may lead to unforeseen issues." steps = [ StepGroup( name: .localized("Download"), items: [ StepGroupItem(name: .localized("Downloading Package Managers")), ] ), StepGroup( name: .localized("Install"), items: [ StepGroupItem(name: .localized("Installing Packages")), ] ), ] if _shouldBootstrap { steps[0].items.insert(StepGroupItem(name: .localized("Downloading Base Bootstrap")), at: 0) steps[0].items.insert(StepGroupItem(name: .localized("Downloading Required Packages")), at: 1) steps.insert( StepGroup( name: .localized("Bootstrap"), items: [ StepGroupItem(name: .localized("Preparing Environment")), StepGroupItem(name: .localized("Installing Base Bootstrap")), StepGroupItem(name: .localized("Preparing Repositories")), ] ), at: 1) } } override func start() { if _shouldBootstrap { UIAlertController.showAlertForPassword( self, title: .localized("Set Password"), message: .localized("Password Explanation") ) { password in self._proceedInstallation(password: password) } } else { self._proceedInstallation() } } private func _proceedInstallation(password: String = "alpine") { Task.detached { try? await Task.sleep(nanoseconds: 1_000_000) await MainActor.run { self.selectCollectionViewCell(for: 0) } let bootstrapper = await LRBootstrapper( callback: self, config: self._config, manager: self._manager, sudo_password: password, shouldBootstrap: self._shouldBootstrap ) do { try await bootstrapper.prepareFiles() if await self._shouldBootstrap { try await bootstrapper.bootstrap() } try await bootstrapper.installPackages() } catch { await MainActor.run { #if !targetEnvironment(simulator) UIAlertController.showAlert( self, title: "", message: "\(error)", actions: [] ) #else print("\(error)") #endif } } } } } ================================================ FILE: Loader/Views/LRTabbarController.swift ================================================ // // TabbarController.swift // Loader // // Created by samara on 9.03.2025. // import UIKit import SwiftUI class LRTabbarController: UITabBarController { override func viewDidLoad() { super.viewDidLoad() self._setupTabs() } private func _setupTabs() { let sources = self._createNavigation( with: "palera1n", using: UIImage(systemName: "wand.and.stars"), controller: LRBootstrapViewController() ) let apps = self._createNavigation( with: .localized("Settings"), using: UIImage(systemName: "gear"), controller: LRSettingsViewController() ) self.setViewControllers([ sources, apps, ], animated: false) } private func _createNavigation( with title: String, using image: UIImage?, controller: UIViewController ) -> UINavigationController { let nav = UINavigationController(rootViewController: controller) nav.tabBarItem.title = title nav.tabBarItem.image = image nav.viewControllers.first?.navigationItem.title = title return nav } } ================================================ FILE: Loader/Views/Selection/LRBootstrapViewController+transition.swift ================================================ // // LRBootstrapViewController+Transition.swift // Loader // // Created by samara on 22.03.2025. // import UIKit import NimbleAnimations // MARK: - Class extension: animations extension LRBootstrapViewController: UIViewControllerTransitioningDelegate { func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? { SlideWithPresentationAnimator(presenting: true) } func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { SlideWithPresentationAnimator(presenting: false) } } ================================================ FILE: Loader/Views/Selection/LRBootstrapViewController.swift ================================================ // // LRBootstrapViewController.swift // Loader // // Created by samara on 9.03.2025. // import UIKit import NimbleJSON import NimbleViewControllers // MARK: - Class class LRBootstrapViewController: LRBaseTableViewController { typealias LRConfigHandler = Result private let _activityIndicator = UIActivityIndicatorView(style: .medium) private var _data: LRConfig? = nil private let _dataService = FetchService() private let _dataURL = URL(string: LREnvironment.config_url())! private var _refreshButton: UIBarButtonItem! override func viewDidLoad() { super.viewDidLoad() _notifyUserIfCertainFlags() _load() _setupNavigation() } private func _setupNavigation() { _refreshButton = UIBarButtonItem( barButtonSystemItem: .refresh, target: self, action: #selector(self._load) ) _activityIndicator.hidesWhenStopped = true navigationItem.rightBarButtonItem = _refreshButton } private func _beginRefreshing() { _activityIndicator.startAnimating() navigationItem.rightBarButtonItem = UIBarButtonItem(customView: _activityIndicator) } private func _endRefreshing() { _activityIndicator.stopAnimating() navigationItem.rightBarButtonItem = _refreshButton } @objc private func _load() { _beginRefreshing() _dataService.fetch(from: _dataURL) { [weak self] (result: LRConfigHandler) in guard let self = self else { return } DispatchQueue.main.async { self._endRefreshing() switch result { case .success(let data): self._data = data self.tableView.reloadDataWithTransition(with: .transitionCrossDissolve, duration: 0.4) if data.content() == nil { UIAlertController.showAlert( self, title: "", message: .localized( "Bootstrap, managers, and configuration is not available for current jailbreak type", arguments: UIDevice.current.palera1n.palerain_option_rootless ? "rootless" : "rootful" ), actions: [UIAlertAction(title: "OK", style: .cancel)] ) } case .failure(let error): self._showError(error.localizedDescription) } } } } private func _notifyUserIfCertainFlags() { var alertConfig: (title: String, message: String, buttonTitle: String, action: (() -> Void)?)? switch true { case UIDevice.current.palera1n.palerain_option_force_revert: alertConfig = ( title: .localized("You've removed the jailbreak!"), message: .localized("Is Force Reverted", arguments: UIDevice.current.marketingModel), buttonTitle: .localized("Reboot"), action: { self.blackOutController { LREnvironment.shared.reboot() } } ) case UIDevice.current.palera1n.palerain_option_failure || UIDevice.current.palera1n.palerain_option_safemode: alertConfig = ( title: "", message: .localized("You've entered safemode by either manually or palera1n saved you from it."), buttonTitle: .localized("Exit"), action: { self.blackOutController { LREnvironment.jbd.exitFailureSafeMode() } } ) case LREnvironment.shared.isBootstrapped == .partial_bootstrapped_rootless: alertConfig = ( title: "", message: .localized("Detected partial rootless installation. Please re-jailbreak and try again."), buttonTitle: .localized("Reboot"), action: { self.blackOutController { LREnvironment.shared.reboot() } } ) default: return } if let config = alertConfig { let action = UIAlertAction(title: config.buttonTitle, style: .default) { _ in config.action?() } UIAlertController.showAlertWithCancel( self, title: config.title, message: config.message, actions: [action] ) } } private func _showError(_ message: String) { let retry = UIAlertAction(title: .localized("Retry"), style: .default) { [weak self] _ in self?._load() } UIAlertController.showAlertWithCancel( self, message: message, actions: [retry] ) } } // MARK: - Class extension: tableview extension LRBootstrapViewController { override func numberOfSections(in tableView: UITableView) -> Int { 1 } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { _data?.content()?.managers.count ?? 0 } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")! let manager = _data?.content()?.managers[indexPath.row] cell.accessoryType = .disclosureIndicator var content = cell.defaultContentConfiguration() content.text = manager?.name content = content.applyingSectionImage(UIImage(named: "unknown")!) cell.contentConfiguration = content manager?.loadIconImage { image in DispatchQueue.main.async { var updatedContent = cell.defaultContentConfiguration() updatedContent.text = manager?.name updatedContent = updatedContent.applyingSectionImage(image) cell.contentConfiguration = updatedContent } } return cell } override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let manager = _data?.content()?.managers[indexPath.row] guard let data = _data, let manager = manager else { return } _showManagerPopup( with: data, using: manager, popoverUIView: tableView.cellForRow(at: indexPath)! ) tableView.deselectRow(at: indexPath, animated: true) } override func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? { _data?.footer_notice ?? nil } } // MARK: - Class extension: actions extension LRBootstrapViewController { private func _showManagerPopup( with config: LRConfig, using manager: LRManager, popoverUIView: UIView? = nil ) { let managerInstalled = FileManager.default.fileExists(atPath: manager.filePath.relativePath) let alertTitle: String? = managerInstalled ? .localized("%@ is already installed.", arguments: manager.name) : nil let installActionTitle: String = managerInstalled ? .localized("Reinstall %@", arguments: manager.name) : .localized("Install %@", arguments: manager.name) var actions: [UIAlertAction] = [] if managerInstalled { actions.append(UIAlertAction(title: .localized("Open %@", arguments: manager.name), style: .default) { _ in UIApplication.shared.openApplication(using: manager.filePath.relativePath) }) } actions.append(UIAlertAction(title: installActionTitle, style: .default) { _ in self._showStagedViewController(with: config, using: manager) }) UIAlertController.showAlertWithCancel( self, popoverUIView, title: alertTitle, message: nil, style: .actionSheet, actions: actions ) } private func _showStagedViewController(with config: LRConfig, using manager: LRManager) { let controller = LRStagedViewController( title: "Installing", config: config, manager: manager, shouldBootstrap: LREnvironment.shared.isBootstrapped == .not_bootstrapped ) let nav = UINavigationController(rootViewController: controller) nav.modalPresentationStyle = .custom nav.transitioningDelegate = self present(nav, animated: true) } } ================================================ FILE: Loader/Views/Settings/About/Flags/LRSettingsFlagsViewController.swift ================================================ // // LRSettingsFlagsViewController.swift // Loader // // Created by samara on 13.03.2025. // import UIKit import NimbleViewControllers // MARK: - Class class LRSettingsFlagsViewController: LRBaseStructuredTableViewController { override func viewDidLoad() { super.viewDidLoad() title = "Flags" } override func setupSections() { sections = [ ( title: "", items: [ SectionItem( title: UIDevice.current.palera1n.flagsList ), ] ), ] } } ================================================ FILE: Loader/Views/Settings/About/LRSettingsAboutViewController.swift ================================================ // // LRSettingsAboutViewController.swift // Loader // // Created by samara on 9.03.2025. // import UIKit import NimbleViewControllers // MARK: - Class class LRSettingsAboutViewController: LRBaseStructuredTableViewController { let device = UIDevice.current override func viewDidLoad() { super.viewDidLoad() title = .localized("Device Info") } override func setupSections() { sections = [ ( title: "palera1n", items: [ // SectionItem( // title: "Version", // subtitle: Bundle.appVersionShort // ), SectionItem( title: .localized("Type"), subtitle: device.palera1n.palerain_option_rootless ? "Rootless" : "Rootful" ), SectionItem( title: "Flags", subtitle: device.palera1n.flags, navigationDestination: LRSettingsFlagsViewController() ), SectionItem( title: "Bootstrapped", subtitle: "\(LREnvironment.shared.isBootstrapped.stringValue)" ) ] ), ( title: device.marketingModel, items: [ SectionItem( title: .localized("Version"), subtitle: device.systemVersion ), SectionItem( title: "Model", subtitle: device.marketingModel ), SectionItem( title: "Architecture", subtitle: device.architecture ) ] ), ( title: "System", items: [ SectionItem( title: "CF", subtitle: device.cfVersion.standard ), SectionItem( title: "Kernel", subtitle: device.kernelVersion ) ] ), ( title: "", items: [ SectionItem( title: "boot-manifest-hash", subtitle: device.bootmanifestHash ?? "" ), SectionItem( title: "boot-args", subtitle: device.bootArgs ) ] ) ] } } ================================================ FILE: Loader/Views/Settings/Credits/LRSettingsCreditsViewController.swift ================================================ // // LRSettingsCreditsViewController.swift // Loader // // Created by samara on 9.03.2025. // import UIKit import NimbleExtensions import NimbleJSON import NimbleViewControllers // MARK: - Class extension: model extension LRSettingsCreditsViewController { struct CreditSection: Decodable { let name: String let data: [CreditPerson] struct CreditPerson: Decodable { let name: String let github: String let intent: String? let desc: String? } } struct CreditsData: Decodable { let sections: [CreditSection] } } // MARK: - Class class LRSettingsCreditsViewController: LRBaseTableViewController { typealias CreditsDataHandler = Result private let _activityIndicator = UIActivityIndicatorView(style: .medium) private var _data: [CreditSection] = [] private let _dataService = FetchService() private let _dataURL = URL(string: "https://palera.in/credits.json")! override func viewDidLoad() { super.viewDidLoad() _setupNavigation() _load() } private func _setupNavigation() { title = .localized("Credits") _activityIndicator.hidesWhenStopped = true let activityBarButtonItem = UIBarButtonItem(customView: _activityIndicator) navigationItem.rightBarButtonItem = activityBarButtonItem } private func _load() { _activityIndicator.startAnimating() _dataService.fetch(from: _dataURL) { [weak self] (result: CreditsDataHandler) in guard let self = self else { return } DispatchQueue.main.async { self._activityIndicator.stopAnimating() switch result { case .success(let data): self._data = data.sections self.tableView.reloadDataWithTransition(with: .transitionCrossDissolve) case .failure(let error): self._showError(error.localizedDescription) } } } } private func _showError(_ message: String) { let ok = UIAlertAction(title: "OK", style: .cancel) { [weak self] _ in self?.navigationController?.popViewController(animated: true) } let retry = UIAlertAction(title: .localized("Retry"), style: .default) { [weak self] _ in self?._load() } UIAlertController.showAlert( self, title: "", message: message, actions: [ok, retry] ) } } // MARK: - Class extension: tableview extension LRSettingsCreditsViewController { override func numberOfSections(in tableView: UITableView) -> Int { _data.count } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { _data[section].data.count } override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { _data[section].name } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")! let person = _data[indexPath.section].data[indexPath.row] cell.accessoryType = .disclosureIndicator var content = cell.defaultContentConfiguration() content.text = person.name content.secondaryText = "@\(person.github)" content.secondaryTextProperties.color = .secondaryLabel if let description = person.desc { content.secondaryText = cell.detailTextLabel?.text.map { "\($0) • \(description)" } ?? description } cell.contentConfiguration = content return cell } override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let person = _data[indexPath.section].data[indexPath.row] self._openProfileURL(for: person) tableView.deselectRow(at: indexPath, animated: true) } } // MARK: - Class extension: Open extension LRSettingsCreditsViewController { private func _openProfileURL(for person: CreditSection.CreditPerson) { if let intent = person.intent, let intentUrl = URL(string: "https://twitter.com/intent/follow?screen_name=\(intent)"), UIApplication.shared.canOpenURL(intentUrl) { UIApplication.shared.open(intentUrl) } else if let githubUrl = URL(string: "https://github.com/\(person.github)") { UIApplication.shared.open(githubUrl) } } } ================================================ FILE: Loader/Views/Settings/LRSettingsViewController.swift ================================================ // // SettingsViewController.swift // Loader // // Created by samara on 9.03.2025. // import UIKit import NimbleViewControllers // MARK: - Class class LRSettingsViewController: LRBaseStructuredTableViewController { override func setupSections() { sections = [ ( title: "", items: [ SectionItem( title: "UICache", action: { LREnvironment.shared.uicacheAll() } ), SectionItem( title: "Restart Springboard", action: { self.blackOutController { LREnvironment.shared.respring() } } ), SectionItem( title: "Restart Userspace", action: { self.blackOutController { LREnvironment.shared.rebootUserspace() } } ), SectionItem( title: "Enter Recovery", action: { self.blackOutController { LREnvironment.shared.enterRecovery() } } ), SectionItem( title: "Reload Environment", action: { LREnvironment.jbd.reloadLaunchdJailbreakEnvironment() } ) ] ), ( title: .localized("Other"), items: [ SectionItem( title: .localized("Device Info"), navigationDestination: LRSettingsAboutViewController() ), SectionItem( title: .localized("Credits"), navigationDestination: LRSettingsCreditsViewController() ) ] ) ] addUserDefaultsStringSection( key: "defaultInstallPath", defaultValue: LREnvironment.default_config_url(), sectionTitle: .localized("Download"), changeTitle: .localized("Change Download URL"), keyboardType: .URL ) if LREnvironment.shared.isBootstrapped == .bootstrapped { sections.append(( title: .localized("Reset"), items: [ SectionItem( title: .localized("Change Sudo Password"), action: { UIAlertController.showAlertForPasswordWithAuthentication( self, .localized("Authentication is required to change your sudo password."), alertTitle: .localized("Set Password"), alertMessage: .localized("Password Explanation") ) { password in LREnvironment.shared.resetSudoPassword(with: password) } } ), SectionItem( title: UIDevice.current.palera1n.shouldCleanFakefs ? .localized("Clean FakeFS") : .localized("Restore System"), tint: .systemRed, action: { let action = UIAlertAction( title: UIDevice.current.palera1n.shouldCleanFakefs ? .localized("Clean FakeFS") : .localized("Restore System"), style: .destructive ) { _ in self.blackOutController { LREnvironment.shared.removeBootstrap() } } let style: UIAlertController.Style = UIDevice.current.userInterfaceIdiom == .pad ? .alert : .actionSheet UIAlertController.showAlertWithCancel( self, title: UIDevice.current.palera1n.shouldCleanFakefs ? .localized("Clean FakeFS Explanation", arguments: UIDevice.current.marketingModel) : .localized("Restore System Explanation", arguments: UIDevice.current.marketingModel), message: nil, style: style, actions: [action] ) } ) ] )) } } } extension LRBaseStructuredTableViewController { @discardableResult func addUserDefaultsStringSection( key: String, defaultValue: String, sectionTitle: String, changeTitle: String = "", sectionIndex: Int? = nil, keyboardType: UIKeyboardType = .default ) -> String { let userDefaults = UserDefaults.standard let currentValue = userDefaults.string(forKey: key) ?? defaultValue let isModified = currentValue != defaultValue var sectionItems: [SectionItem] = [] if isModified { sectionItems = [ SectionItem( title: currentValue, tint: .secondaryLabel, action: { [weak self] in UIAlertController.showAlertForStringChange( self!, title: changeTitle, currentValue: currentValue, keyboardType: keyboardType, completion: { newValue in userDefaults.set(newValue, forKey: key) self?.setupSections() self?.tableView.reloadData() } ) } ), SectionItem( title: .localized("Reset Configuration"), tint: .systemRed, action: { [weak self] in userDefaults.removeObject(forKey: key) self?.setupSections() self?.tableView.reloadData() } ) ] } else { sectionItems = [ SectionItem( title: changeTitle, tint: .tintColor, action: { [weak self] in UIAlertController.showAlertForStringChange( self!, title: changeTitle, currentValue: currentValue, keyboardType: keyboardType, completion: { newValue in userDefaults.set(newValue, forKey: key) self?.setupSections() self?.tableView.reloadData() } ) } ) ] } let newSection = (title: sectionTitle, items: sectionItems) if let index = sectionIndex, sections.count > index { sections.insert(newSection, at: index) } else { sections.append(newSection) } return currentValue } } ================================================ FILE: Loader.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 60; objects = { /* Begin PBXBuildFile section */ 331D48B92DA858B1006A37B2 /* UITableView+image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331D48B82DA858B1006A37B2 /* UITableView+image.swift */; }; 3331318D2D8EAB50001B35CE /* LRBootstrapViewController+transition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3331318C2D8EAB50001B35CE /* LRBootstrapViewController+transition.swift */; }; 336FA5982D8C381500E28B8F /* NimbleAnimations in Frameworks */ = {isa = PBXBuildFile; productRef = 336FA5972D8C381500E28B8F /* NimbleAnimations */; }; 336FA59A2D8C381500E28B8F /* NimbleExtensions in Frameworks */ = {isa = PBXBuildFile; productRef = 336FA5992D8C381500E28B8F /* NimbleExtensions */; }; 336FA59C2D8C381500E28B8F /* NimbleJSON in Frameworks */ = {isa = PBXBuildFile; productRef = 336FA59B2D8C381500E28B8F /* NimbleJSON */; }; 339714652D94E1EB0060E08F /* NimbleViewControllers in Frameworks */ = {isa = PBXBuildFile; productRef = 339714642D94E1EB0060E08F /* NimbleViewControllers */; }; 33DB517E2D7D9E800060EAC4 /* libMobileGestalt.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 33DB517D2D7D9E750060EAC4 /* libMobileGestalt.tbd */; }; 33DB51892D7DA06B0060EAC4 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33DB51882D7DA06B0060EAC4 /* IOKit.framework */; platformFilter = ios; }; 33DB518B2D7DA0740060EAC4 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33DB518A2D7DA0740060EAC4 /* CoreServices.framework */; }; 57A520D52E8574870090644E /* nvram.c in Sources */ = {isa = PBXBuildFile; fileRef = 57A520D42E8574830090644E /* nvram.c */; }; AF966AAA2D8C6840001BA405 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AF966A6F2D8C6840001BA405 /* Assets.xcassets */; }; AF966AAB2D8C6840001BA405 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = AF966A702D8C6840001BA405 /* Localizable.xcstrings */; }; AF966AAD2D8C6840001BA405 /* IOKit.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = AF966A762D8C6840001BA405 /* IOKit.tbd */; platformFilters = (tvos, ); }; AF966AAE2D8C6840001BA405 /* UIApplication+open.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A672D8C6840001BA405 /* UIApplication+open.swift */; }; AF966AAF2D8C6840001BA405 /* UIDevice+Info.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A692D8C6840001BA405 /* UIDevice+Info.swift */; }; AF966AB02D8C6840001BA405 /* UIDevice+Jailbreak.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A6A2D8C6840001BA405 /* UIDevice+Jailbreak.swift */; }; AF966AB12D8C6840001BA405 /* String+prefix.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A6C2D8C6840001BA405 /* String+prefix.swift */; }; AF966AB22D8C6840001BA405 /* UIAlertController+Alerts.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A6D2D8C6840001BA405 /* UIAlertController+Alerts.swift */; }; AF966AB32D8C6840001BA405 /* LRBootstrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A7A2D8C6840001BA405 /* LRBootstrapper.swift */; }; AF966AB42D8C6840001BA405 /* LRBootstrapper+download.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A7B2D8C6840001BA405 /* LRBootstrapper+download.swift */; }; AF966AB52D8C6840001BA405 /* LRBootstrapper+status.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A7C2D8C6840001BA405 /* LRBootstrapper+status.swift */; }; AF966AB62D8C6840001BA405 /* LRConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A7E2D8C6840001BA405 /* LRConfig.swift */; }; AF966AB72D8C6840001BA405 /* LREnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A812D8C6840001BA405 /* LREnvironment.swift */; }; AF966AB82D8C6840001BA405 /* LREnvironment+prefixes.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A822D8C6840001BA405 /* LREnvironment+prefixes.swift */; }; AF966AB92D8C6840001BA405 /* LREnvironment+reset.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A832D8C6840001BA405 /* LREnvironment+reset.swift */; }; AF966ABA2D8C6840001BA405 /* LREnvironment+spawn.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A842D8C6840001BA405 /* LREnvironment+spawn.swift */; }; AF966ABB2D8C6840001BA405 /* jailbreakd.c in Sources */ = {isa = PBXBuildFile; fileRef = AF966A872D8C6840001BA405 /* jailbreakd.c */; }; AF966ABC2D8C6840001BA405 /* JailbreakD.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A882D8C6840001BA405 /* JailbreakD.swift */; }; AF966ABF2D8C6840001BA405 /* LRStagedViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A8F2D8C6840001BA405 /* LRStagedViewController.swift */; }; AF966AC02D8C6840001BA405 /* LRStagedViewController+UpdateItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A902D8C6840001BA405 /* LRStagedViewController+UpdateItem.swift */; }; AF966AC62D8C6840001BA405 /* LRBootstrapViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A982D8C6840001BA405 /* LRBootstrapViewController.swift */; }; AF966AC72D8C6840001BA405 /* LRSettingsFlagsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A9A2D8C6840001BA405 /* LRSettingsFlagsViewController.swift */; }; AF966AC82D8C6840001BA405 /* LRSettingsAboutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966A9C2D8C6840001BA405 /* LRSettingsAboutViewController.swift */; }; AF966ACA2D8C6840001BA405 /* LRSettingsCreditsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966AA02D8C6840001BA405 /* LRSettingsCreditsViewController.swift */; }; AF966ACB2D8C6840001BA405 /* LRSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966AA22D8C6840001BA405 /* LRSettingsViewController.swift */; }; AF966ACC2D8C6840001BA405 /* LRTabbarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966AA42D8C6840001BA405 /* LRTabbarController.swift */; }; AF966ACD2D8C6840001BA405 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966AA62D8C6840001BA405 /* AppDelegate.swift */; }; AF966ACE2D8C6840001BA405 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF966AA82D8C6840001BA405 /* SceneDelegate.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 331D48B82DA858B1006A37B2 /* UITableView+image.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITableView+image.swift"; sourceTree = ""; }; 3331318C2D8EAB50001B35CE /* LRBootstrapViewController+transition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "LRBootstrapViewController+transition.swift"; sourceTree = ""; }; 336FA59D2D8C385900E28B8F /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS18.2.sdk/System/Library/Frameworks/CoreFoundation.framework; sourceTree = DEVELOPER_DIR; }; 3388438F2D7D8A26002D07FD /* Loader.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Loader.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33DB517D2D7D9E750060EAC4 /* libMobileGestalt.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libMobileGestalt.tbd; path = usr/lib/libMobileGestalt.tbd; sourceTree = SDKROOT; }; 33DB51882D7DA06B0060EAC4 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; }; 33DB518A2D7DA0740060EAC4 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; }; 33DB518E2D7DA1720060EAC4 /* Loader.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Loader.xcconfig; sourceTree = ""; }; 33E658082D93C58400BEDFA5 /* Macros.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Macros.h; sourceTree = ""; }; 57A520D42E8574830090644E /* nvram.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = nvram.c; sourceTree = ""; }; 57A520D62E85748A0090644E /* nvram.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = nvram.h; sourceTree = ""; }; AF966A672D8C6840001BA405 /* UIApplication+open.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIApplication+open.swift"; sourceTree = ""; }; AF966A692D8C6840001BA405 /* UIDevice+Info.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIDevice+Info.swift"; sourceTree = ""; }; AF966A6A2D8C6840001BA405 /* UIDevice+Jailbreak.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIDevice+Jailbreak.swift"; sourceTree = ""; }; AF966A6C2D8C6840001BA405 /* String+prefix.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+prefix.swift"; sourceTree = ""; }; AF966A6D2D8C6840001BA405 /* UIAlertController+Alerts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIAlertController+Alerts.swift"; sourceTree = ""; }; AF966A6F2D8C6840001BA405 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; AF966A702D8C6840001BA405 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = ""; }; AF966A722D8C6840001BA405 /* LSApplicationWorkspace.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LSApplicationWorkspace.h; sourceTree = ""; }; AF966A732D8C6840001BA405 /* MobileGestalt.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MobileGestalt.h; sourceTree = ""; }; AF966A742D8C6840001BA405 /* posixspawn.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = posixspawn.h; sourceTree = ""; }; AF966A762D8C6840001BA405 /* IOKit.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; path = IOKit.tbd; sourceTree = ""; }; AF966A772D8C6840001BA405 /* loader.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = loader.entitlements; sourceTree = ""; }; AF966A782D8C6840001BA405 /* Loader-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Loader-Bridging-Header.h"; sourceTree = ""; }; AF966A7A2D8C6840001BA405 /* LRBootstrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LRBootstrapper.swift; sourceTree = ""; }; AF966A7B2D8C6840001BA405 /* LRBootstrapper+download.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "LRBootstrapper+download.swift"; sourceTree = ""; }; AF966A7C2D8C6840001BA405 /* LRBootstrapper+status.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "LRBootstrapper+status.swift"; sourceTree = ""; }; AF966A7E2D8C6840001BA405 /* LRConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LRConfig.swift; sourceTree = ""; }; AF966A812D8C6840001BA405 /* LREnvironment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LREnvironment.swift; sourceTree = ""; }; AF966A822D8C6840001BA405 /* LREnvironment+prefixes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "LREnvironment+prefixes.swift"; sourceTree = ""; }; AF966A832D8C6840001BA405 /* LREnvironment+reset.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "LREnvironment+reset.swift"; sourceTree = ""; }; AF966A842D8C6840001BA405 /* LREnvironment+spawn.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "LREnvironment+spawn.swift"; sourceTree = ""; }; AF966A862D8C6840001BA405 /* jailbreakd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = jailbreakd.h; sourceTree = ""; }; AF966A872D8C6840001BA405 /* jailbreakd.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jailbreakd.c; sourceTree = ""; }; AF966A882D8C6840001BA405 /* JailbreakD.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JailbreakD.swift; sourceTree = ""; }; AF966A8F2D8C6840001BA405 /* LRStagedViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LRStagedViewController.swift; sourceTree = ""; }; AF966A902D8C6840001BA405 /* LRStagedViewController+UpdateItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "LRStagedViewController+UpdateItem.swift"; sourceTree = ""; }; AF966A982D8C6840001BA405 /* LRBootstrapViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LRBootstrapViewController.swift; sourceTree = ""; }; AF966A9A2D8C6840001BA405 /* LRSettingsFlagsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LRSettingsFlagsViewController.swift; sourceTree = ""; }; AF966A9C2D8C6840001BA405 /* LRSettingsAboutViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LRSettingsAboutViewController.swift; sourceTree = ""; }; AF966AA02D8C6840001BA405 /* LRSettingsCreditsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LRSettingsCreditsViewController.swift; sourceTree = ""; }; AF966AA22D8C6840001BA405 /* LRSettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LRSettingsViewController.swift; sourceTree = ""; }; AF966AA42D8C6840001BA405 /* LRTabbarController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LRTabbarController.swift; sourceTree = ""; }; AF966AA62D8C6840001BA405 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; AF966AA72D8C6840001BA405 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; AF966AA82D8C6840001BA405 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 3388438C2D7D8A26002D07FD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 33DB517E2D7D9E800060EAC4 /* libMobileGestalt.tbd in Frameworks */, 33DB518B2D7DA0740060EAC4 /* CoreServices.framework in Frameworks */, 336FA5982D8C381500E28B8F /* NimbleAnimations in Frameworks */, 336FA59C2D8C381500E28B8F /* NimbleJSON in Frameworks */, 33DB51892D7DA06B0060EAC4 /* IOKit.framework in Frameworks */, 336FA59A2D8C381500E28B8F /* NimbleExtensions in Frameworks */, 339714652D94E1EB0060E08F /* NimbleViewControllers in Frameworks */, AF966AAD2D8C6840001BA405 /* IOKit.tbd in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 338843862D7D8A26002D07FD = { isa = PBXGroup; children = ( AF966AA92D8C6840001BA405 /* Loader */, 33DB518C2D7DA15D0060EAC4 /* Configuration */, 33DB517C2D7D9E740060EAC4 /* Frameworks */, 338843902D7D8A26002D07FD /* Products */, ); sourceTree = ""; }; 338843902D7D8A26002D07FD /* Products */ = { isa = PBXGroup; children = ( 3388438F2D7D8A26002D07FD /* Loader.app */, ); name = Products; sourceTree = ""; }; 33DB517C2D7D9E740060EAC4 /* Frameworks */ = { isa = PBXGroup; children = ( 336FA59D2D8C385900E28B8F /* CoreFoundation.framework */, 33DB518A2D7DA0740060EAC4 /* CoreServices.framework */, 33DB51882D7DA06B0060EAC4 /* IOKit.framework */, 33DB517D2D7D9E750060EAC4 /* libMobileGestalt.tbd */, ); name = Frameworks; sourceTree = ""; }; 33DB518C2D7DA15D0060EAC4 /* Configuration */ = { isa = PBXGroup; children = ( 33DB518E2D7DA1720060EAC4 /* Loader.xcconfig */, ); path = Configuration; sourceTree = ""; }; 57A520D32E8574730090644E /* Nvram */ = { isa = PBXGroup; children = ( 57A520D62E85748A0090644E /* nvram.h */, 57A520D42E8574830090644E /* nvram.c */, ); path = Nvram; sourceTree = ""; }; AF966A682D8C6840001BA405 /* UIApplication */ = { isa = PBXGroup; children = ( AF966A672D8C6840001BA405 /* UIApplication+open.swift */, ); path = UIApplication; sourceTree = ""; }; AF966A6B2D8C6840001BA405 /* UIDevice */ = { isa = PBXGroup; children = ( AF966A692D8C6840001BA405 /* UIDevice+Info.swift */, AF966A6A2D8C6840001BA405 /* UIDevice+Jailbreak.swift */, ); path = UIDevice; sourceTree = ""; }; AF966A6E2D8C6840001BA405 /* Extensions */ = { isa = PBXGroup; children = ( 331D48B82DA858B1006A37B2 /* UITableView+image.swift */, AF966A682D8C6840001BA405 /* UIApplication */, AF966A6B2D8C6840001BA405 /* UIDevice */, AF966A6C2D8C6840001BA405 /* String+prefix.swift */, AF966A6D2D8C6840001BA405 /* UIAlertController+Alerts.swift */, ); path = Extensions; sourceTree = ""; }; AF966A712D8C6840001BA405 /* Resources */ = { isa = PBXGroup; children = ( AF966A6F2D8C6840001BA405 /* Assets.xcassets */, AF966A702D8C6840001BA405 /* Localizable.xcstrings */, AF966AA72D8C6840001BA405 /* Info.plist */, ); path = Resources; sourceTree = ""; }; AF966A752D8C6840001BA405 /* Headers */ = { isa = PBXGroup; children = ( 33E658082D93C58400BEDFA5 /* Macros.h */, AF966A722D8C6840001BA405 /* LSApplicationWorkspace.h */, AF966A732D8C6840001BA405 /* MobileGestalt.h */, AF966A742D8C6840001BA405 /* posixspawn.h */, ); path = Headers; sourceTree = ""; }; AF966A792D8C6840001BA405 /* Supporting Files */ = { isa = PBXGroup; children = ( AF966A752D8C6840001BA405 /* Headers */, AF966A762D8C6840001BA405 /* IOKit.tbd */, AF966A772D8C6840001BA405 /* loader.entitlements */, AF966A782D8C6840001BA405 /* Loader-Bridging-Header.h */, ); path = "Supporting Files"; sourceTree = ""; }; AF966A7D2D8C6840001BA405 /* Bootstrap */ = { isa = PBXGroup; children = ( AF966A7A2D8C6840001BA405 /* LRBootstrapper.swift */, AF966A7B2D8C6840001BA405 /* LRBootstrapper+download.swift */, AF966A7C2D8C6840001BA405 /* LRBootstrapper+status.swift */, ); path = Bootstrap; sourceTree = ""; }; AF966A7F2D8C6840001BA405 /* Models */ = { isa = PBXGroup; children = ( AF966A7E2D8C6840001BA405 /* LRConfig.swift */, ); path = Models; sourceTree = ""; }; AF966A802D8C6840001BA405 /* Config */ = { isa = PBXGroup; children = ( AF966A7F2D8C6840001BA405 /* Models */, ); path = Config; sourceTree = ""; }; AF966A852D8C6840001BA405 /* Environment */ = { isa = PBXGroup; children = ( AF966A812D8C6840001BA405 /* LREnvironment.swift */, AF966A822D8C6840001BA405 /* LREnvironment+prefixes.swift */, AF966A832D8C6840001BA405 /* LREnvironment+reset.swift */, AF966A842D8C6840001BA405 /* LREnvironment+spawn.swift */, ); path = Environment; sourceTree = ""; }; AF966A892D8C6840001BA405 /* XPC */ = { isa = PBXGroup; children = ( AF966A862D8C6840001BA405 /* jailbreakd.h */, AF966A872D8C6840001BA405 /* jailbreakd.c */, AF966A882D8C6840001BA405 /* JailbreakD.swift */, ); path = XPC; sourceTree = ""; }; AF966A8A2D8C6840001BA405 /* Utilities */ = { isa = PBXGroup; children = ( AF966A7D2D8C6840001BA405 /* Bootstrap */, AF966A802D8C6840001BA405 /* Config */, AF966A852D8C6840001BA405 /* Environment */, AF966A892D8C6840001BA405 /* XPC */, 57A520D32E8574730090644E /* Nvram */, ); path = Utilities; sourceTree = ""; }; AF966A932D8C6840001BA405 /* Bootstrap */ = { isa = PBXGroup; children = ( AF966A8F2D8C6840001BA405 /* LRStagedViewController.swift */, AF966A902D8C6840001BA405 /* LRStagedViewController+UpdateItem.swift */, ); path = Bootstrap; sourceTree = ""; }; AF966A992D8C6840001BA405 /* Selection */ = { isa = PBXGroup; children = ( AF966A982D8C6840001BA405 /* LRBootstrapViewController.swift */, 3331318C2D8EAB50001B35CE /* LRBootstrapViewController+transition.swift */, ); path = Selection; sourceTree = ""; }; AF966A9B2D8C6840001BA405 /* Flags */ = { isa = PBXGroup; children = ( AF966A9A2D8C6840001BA405 /* LRSettingsFlagsViewController.swift */, ); path = Flags; sourceTree = ""; }; AF966A9D2D8C6840001BA405 /* About */ = { isa = PBXGroup; children = ( AF966A9B2D8C6840001BA405 /* Flags */, AF966A9C2D8C6840001BA405 /* LRSettingsAboutViewController.swift */, ); path = About; sourceTree = ""; }; AF966AA12D8C6840001BA405 /* Credits */ = { isa = PBXGroup; children = ( AF966AA02D8C6840001BA405 /* LRSettingsCreditsViewController.swift */, ); path = Credits; sourceTree = ""; }; AF966AA32D8C6840001BA405 /* Settings */ = { isa = PBXGroup; children = ( AF966A9D2D8C6840001BA405 /* About */, AF966AA12D8C6840001BA405 /* Credits */, AF966AA22D8C6840001BA405 /* LRSettingsViewController.swift */, ); path = Settings; sourceTree = ""; }; AF966AA52D8C6840001BA405 /* Views */ = { isa = PBXGroup; children = ( AF966A932D8C6840001BA405 /* Bootstrap */, AF966A992D8C6840001BA405 /* Selection */, AF966AA32D8C6840001BA405 /* Settings */, AF966AA42D8C6840001BA405 /* LRTabbarController.swift */, ); path = Views; sourceTree = ""; }; AF966AA92D8C6840001BA405 /* Loader */ = { isa = PBXGroup; children = ( AF966A6E2D8C6840001BA405 /* Extensions */, AF966A712D8C6840001BA405 /* Resources */, AF966A792D8C6840001BA405 /* Supporting Files */, AF966A8A2D8C6840001BA405 /* Utilities */, AF966AA52D8C6840001BA405 /* Views */, AF966AA62D8C6840001BA405 /* AppDelegate.swift */, AF966AA82D8C6840001BA405 /* SceneDelegate.swift */, ); path = Loader; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 3388438E2D7D8A26002D07FD /* Loader */ = { isa = PBXNativeTarget; buildConfigurationList = 338843A22D7D8A28002D07FD /* Build configuration list for PBXNativeTarget "Loader" */; buildPhases = ( 3388438B2D7D8A26002D07FD /* Sources */, 3388438C2D7D8A26002D07FD /* Frameworks */, 3388438D2D7D8A26002D07FD /* Resources */, ); buildRules = ( ); dependencies = ( ); name = Loader; packageProductDependencies = ( 336FA5972D8C381500E28B8F /* NimbleAnimations */, 336FA5992D8C381500E28B8F /* NimbleExtensions */, 336FA59B2D8C381500E28B8F /* NimbleJSON */, 339714642D94E1EB0060E08F /* NimbleViewControllers */, ); productName = Loader; productReference = 3388438F2D7D8A26002D07FD /* Loader.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 338843872D7D8A26002D07FD /* Project object */ = { isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = 1; LastSwiftUpdateCheck = 1620; LastUpgradeCheck = 1620; TargetAttributes = { 3388438E2D7D8A26002D07FD = { CreatedOnToolsVersion = 16.2; LastSwiftMigration = 1620; }; }; }; buildConfigurationList = 3388438A2D7D8A26002D07FD /* Build configuration list for PBXProject "Loader" */; compatibilityVersion = "Xcode 15.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = 338843862D7D8A26002D07FD; packageReferences = ( 336FA5962D8C381400E28B8F /* XCLocalSwiftPackageReference "NimbleKit" */, ); productRefGroup = 338843902D7D8A26002D07FD /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 3388438E2D7D8A26002D07FD /* Loader */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 3388438D2D7D8A26002D07FD /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF966AAA2D8C6840001BA405 /* Assets.xcassets in Resources */, AF966AAB2D8C6840001BA405 /* Localizable.xcstrings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 3388438B2D7D8A26002D07FD /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF966AAE2D8C6840001BA405 /* UIApplication+open.swift in Sources */, AF966AAF2D8C6840001BA405 /* UIDevice+Info.swift in Sources */, AF966AB02D8C6840001BA405 /* UIDevice+Jailbreak.swift in Sources */, AF966AB12D8C6840001BA405 /* String+prefix.swift in Sources */, AF966AB22D8C6840001BA405 /* UIAlertController+Alerts.swift in Sources */, AF966AB32D8C6840001BA405 /* LRBootstrapper.swift in Sources */, AF966AB42D8C6840001BA405 /* LRBootstrapper+download.swift in Sources */, AF966AB52D8C6840001BA405 /* LRBootstrapper+status.swift in Sources */, AF966AB62D8C6840001BA405 /* LRConfig.swift in Sources */, 331D48B92DA858B1006A37B2 /* UITableView+image.swift in Sources */, AF966AB72D8C6840001BA405 /* LREnvironment.swift in Sources */, 3331318D2D8EAB50001B35CE /* LRBootstrapViewController+transition.swift in Sources */, AF966AB82D8C6840001BA405 /* LREnvironment+prefixes.swift in Sources */, AF966AB92D8C6840001BA405 /* LREnvironment+reset.swift in Sources */, AF966ABA2D8C6840001BA405 /* LREnvironment+spawn.swift in Sources */, AF966ABB2D8C6840001BA405 /* jailbreakd.c in Sources */, AF966ABC2D8C6840001BA405 /* JailbreakD.swift in Sources */, AF966ABF2D8C6840001BA405 /* LRStagedViewController.swift in Sources */, AF966AC02D8C6840001BA405 /* LRStagedViewController+UpdateItem.swift in Sources */, AF966AC62D8C6840001BA405 /* LRBootstrapViewController.swift in Sources */, 57A520D52E8574870090644E /* nvram.c in Sources */, AF966AC72D8C6840001BA405 /* LRSettingsFlagsViewController.swift in Sources */, AF966AC82D8C6840001BA405 /* LRSettingsAboutViewController.swift in Sources */, AF966ACA2D8C6840001BA405 /* LRSettingsCreditsViewController.swift in Sources */, AF966ACB2D8C6840001BA405 /* LRSettingsViewController.swift in Sources */, AF966ACC2D8C6840001BA405 /* LRTabbarController.swift in Sources */, AF966ACD2D8C6840001BA405 /* AppDelegate.swift in Sources */, AF966ACE2D8C6840001BA405 /* SceneDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ 338843A32D7D8A28002D07FD /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 33DB518E2D7DA1720060EAC4 /* Loader.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; "ASSETCATALOG_COMPILER_APPICON_NAME[sdk=appletv*]" = "AppIcon - tvOS"; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "Loader/Supporting Files/loader.entitlements"; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = NO; DEPLOYMENT_POSTPROCESSING = NO; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Loader/Resources/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = palera1n; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Loader/Supporting\\\\\\ Files", "$(PROJECT_DIR)/Loader/Supporting\\\\\\ Files", "$(PROJECT_DIR)/Loader/Supporting\\\\\\ Files", "$(PROJECT_DIR)/Loader/Supporting\\\\\\ Files", "$(PROJECT_DIR)/Loader/Supporting\\\\\\ Files", ); MARKETING_VERSION = 3.1; PRODUCT_BUNDLE_IDENTIFIER = in.palera.loader; PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OBJC_BRIDGING_HEADER = "Loader/Supporting Files/Loader-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3"; TVOS_DEPLOYMENT_TARGET = 15.0; }; name = Debug; }; 338843A42D7D8A28002D07FD /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 33DB518E2D7DA1720060EAC4 /* Loader.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; "ASSETCATALOG_COMPILER_APPICON_NAME[sdk=appletv*]" = "AppIcon - tvOS"; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "Loader/Supporting Files/loader.entitlements"; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEPLOYMENT_POSTPROCESSING = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Loader/Resources/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = palera1n; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Loader/Supporting\\\\\\ Files", "$(PROJECT_DIR)/Loader/Supporting\\\\\\ Files", "$(PROJECT_DIR)/Loader/Supporting\\\\\\ Files", "$(PROJECT_DIR)/Loader/Supporting\\\\\\ Files", "$(PROJECT_DIR)/Loader/Supporting\\\\\\ Files", ); MARKETING_VERSION = 3.1; PRODUCT_BUNDLE_IDENTIFIER = in.palera.loader; PRODUCT_NAME = "$(TARGET_NAME)"; STRIPFLAGS = "-rSTx"; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OBJC_BRIDGING_HEADER = "Loader/Supporting Files/Loader-Bridging-Header.h"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3"; TVOS_DEPLOYMENT_TARGET = 15.0; }; name = Release; }; 338843A52D7D8A28002D07FD /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 33DB518E2D7DA1720060EAC4 /* Loader.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 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; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 18.2; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; 338843A62D7D8A28002D07FD /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 33DB518E2D7DA1720060EAC4 /* Loader.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 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; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 18.2; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; VALIDATE_PRODUCT = YES; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 3388438A2D7D8A26002D07FD /* Build configuration list for PBXProject "Loader" */ = { isa = XCConfigurationList; buildConfigurations = ( 338843A52D7D8A28002D07FD /* Debug */, 338843A62D7D8A28002D07FD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 338843A22D7D8A28002D07FD /* Build configuration list for PBXNativeTarget "Loader" */ = { isa = XCConfigurationList; buildConfigurations = ( 338843A32D7D8A28002D07FD /* Debug */, 338843A42D7D8A28002D07FD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ 336FA5962D8C381400E28B8F /* XCLocalSwiftPackageReference "NimbleKit" */ = { isa = XCLocalSwiftPackageReference; relativePath = NimbleKit; }; /* End XCLocalSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ 336FA5972D8C381500E28B8F /* NimbleAnimations */ = { isa = XCSwiftPackageProductDependency; productName = NimbleAnimations; }; 336FA5992D8C381500E28B8F /* NimbleExtensions */ = { isa = XCSwiftPackageProductDependency; productName = NimbleExtensions; }; 336FA59B2D8C381500E28B8F /* NimbleJSON */ = { isa = XCSwiftPackageProductDependency; productName = NimbleJSON; }; 339714642D94E1EB0060E08F /* NimbleViewControllers */ = { isa = XCSwiftPackageProductDependency; productName = NimbleViewControllers; }; /* End XCSwiftPackageProductDependency section */ }; rootObject = 338843872D7D8A26002D07FD /* Project object */; } ================================================ FILE: Loader.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Loader.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist ================================================ IDEDidComputeMac32BitWarning ================================================ FILE: Loader.xcodeproj/xcshareddata/xcschemes/Loader.xcscheme ================================================ ================================================ FILE: Loader.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Loader.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist ================================================ IDEDidComputeMac32BitWarning ================================================ FILE: Makefile ================================================ TARGET_CODESIGN = $(shell which ldid) # gmake PLATFORM=appletvos PACKAGE_NAME=palera1nLoaderTV PLATFORM ?= iphoneos SCHEME ?= Loader NAME = Loader PACKAGE_NAME ?= palera1nLoader RELEASE = Release-$(PLATFORM) CONFIGURATION = Release CUSTOM_INCLUDE_PATH = apple-include-$(PLATFORM) MACOSX_SYSROOT = $(shell xcrun -sdk macosx --show-sdk-path) TARGET_SYSROOT = $(shell xcrun -sdk $(PLATFORM) --show-sdk-path) P1_TMP = $(TMPDIR)/$(SCHEME) P1_STAGE_DIR = $(P1_TMP)/stage P1_APP_DIR = $(P1_TMP)/Build/Products/$(RELEASE)/$(SCHEME).app all: package apple-include: mkdir -p $(CUSTOM_INCLUDE_PATH)/{bsm,objc,os/internal,sys,firehose,CoreFoundation,FSEvents,IOSurface,IOKit/kext,libkern,kern,arm,{mach/,}machine,CommonCrypto,Security,CoreSymbolication,Kernel/{kern,IOKit,libkern},rpc,rpcsvc,xpc/private,ktrace,mach-o,dispatch} cp -af $(MACOSX_SYSROOT)/usr/include/{arpa,bsm,hfs,net,xpc,netinet,servers,timeconv.h,launch.h} $(CUSTOM_INCLUDE_PATH) cp -af $(MACOSX_SYSROOT)/usr/include/objc/objc-runtime.h $(CUSTOM_INCLUDE_PATH)/objc cp -af $(MACOSX_SYSROOT)/usr/include/libkern/{OSDebug.h,OSKextLib.h,OSReturn.h,OSThermalNotification.h,OSTypes.h,machine} $(CUSTOM_INCLUDE_PATH)/libkern cp -af $(MACOSX_SYSROOT)/usr/include/kern $(CUSTOM_INCLUDE_PATH) cp -af $(MACOSX_SYSROOT)/usr/include/sys/{tty*,ptrace,kern*,random,reboot,user,vnode,disk,vmmeter,conf}.h $(CUSTOM_INCLUDE_PATH)/sys cp -af $(MACOSX_SYSROOT)/System/Library/Frameworks/Kernel.framework/Versions/Current/Headers/sys/disklabel.h $(CUSTOM_INCLUDE_PATH)/sys cp -af $(MACOSX_SYSROOT)/System/Library/Frameworks/IOKit.framework/Headers/{AppleConvergedIPCKeys.h,IOBSD.h,IOCFBundle.h,IOCFPlugIn.h,IOCFURLAccess.h,IOKitServer.h,IORPC.h,IOSharedLock.h,IOUserServer.h,audio,avc,firewire,graphics,hid,hidsystem,i2c,iokitmig.h,kext,ndrvsupport,network,ps,pwr_mgt,sbp2,scsi,serial,storage,stream,usb,video} $(CUSTOM_INCLUDE_PATH)/IOKit cp -af $(MACOSX_SYSROOT)/System/Library/Frameworks/Security.framework/Headers/{mds_schema,oidsalg,SecKeychainSearch,certextensions,Authorization,eisl,SecDigestTransform,SecKeychainItem,oidscrl,cssmcspi,CSCommon,cssmaci,SecCode,CMSDecoder,oidscert,SecRequirement,AuthSession,SecReadTransform,oids,cssmconfig,cssmkrapi,SecPolicySearch,SecAccess,cssmtpi,SecACL,SecEncryptTransform,cssmapi,cssmcli,mds,x509defs,oidsbase,SecSignVerifyTransform,cssmspi,cssmkrspi,SecTask,cssmdli,SecAsn1Coder,cssm,SecTrustedApplication,SecCodeHost,SecCustomTransform,oidsattr,SecIdentitySearch,cssmtype,SecAsn1Types,emmtype,SecTransform,SecTrustSettings,SecStaticCode,emmspi,SecTransformReadTransform,SecKeychain,SecDecodeTransform,CodeSigning,AuthorizationPlugin,cssmerr,AuthorizationTags,CMSEncoder,SecEncodeTransform,SecureDownload,SecAsn1Templates,AuthorizationDB,SecCertificateOIDs,cssmapple}.h $(CUSTOM_INCLUDE_PATH)/Security cp -af $(MACOSX_SYSROOT)/usr/include/{ar,bootstrap,launch,libc,libcharset,localcharset,nlist,NSSystemDirectories,tzfile,vproc}.h $(CUSTOM_INCLUDE_PATH) cp -af $(MACOSX_SYSROOT)/usr/include/mach/{*.defs,{mach_vm,shared_region}.h} $(CUSTOM_INCLUDE_PATH)/mach cp -af $(MACOSX_SYSROOT)/usr/include/mach/machine/*.defs $(CUSTOM_INCLUDE_PATH)/mach/machine cp -af $(MACOSX_SYSROOT)/usr/include/rpc/pmap_clnt.h $(CUSTOM_INCLUDE_PATH)/rpc cp -af $(MACOSX_SYSROOT)/usr/include/rpcsvc/yp{_prot,clnt}.h $(CUSTOM_INCLUDE_PATH)/rpcsvc cp -af $(TARGET_SYSROOT)/usr/include/mach/machine/thread_state.h $(CUSTOM_INCLUDE_PATH)/mach/machine cp -af $(TARGET_SYSROOT)/usr/include/mach/arm $(CUSTOM_INCLUDE_PATH)/mach cp -af $(MACOSX_SYSROOT)/System/Library/Frameworks/IOKit.framework/Headers/* $(CUSTOM_INCLUDE_PATH)/IOKit gsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < $(TARGET_SYSROOT)/usr/include/stdlib.h > $(CUSTOM_INCLUDE_PATH)/stdlib.h gsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < $(TARGET_SYSROOT)/usr/include/time.h > $(CUSTOM_INCLUDE_PATH)/time.h gsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < $(TARGET_SYSROOT)/usr/include/unistd.h > $(CUSTOM_INCLUDE_PATH)/unistd.h gsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < $(TARGET_SYSROOT)/usr/include/mach/task.h > $(CUSTOM_INCLUDE_PATH)/mach/task.h gsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < $(TARGET_SYSROOT)/usr/include/mach/mach_host.h > $(CUSTOM_INCLUDE_PATH)/mach/mach_host.h gsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < $(TARGET_SYSROOT)/usr/include/ucontext.h > $(CUSTOM_INCLUDE_PATH)/ucontext.h # gsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < $(TARGET_SYSROOT)/usr/include/signal.h > $(CUSTOM_INCLUDE_PATH)/signal.h gsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < $(TARGET_SYSROOT)/usr/include/spawn.h > $(CUSTOM_INCLUDE_PATH)/spawn.h gsed -E /'__API_UNAVAILABLE'/d < $(TARGET_SYSROOT)/usr/include/pthread.h > $(CUSTOM_INCLUDE_PATH)/pthread.h gsed -i -E s/'__API_UNAVAILABLE\(.*\)'// $(CUSTOM_INCLUDE_PATH)/IOKit/IOKitLib.h gsed -i -E s/'__API_UNAVAILABLE\(.*\)'// $(CUSTOM_INCLUDE_PATH)/spawn.h gsed -i -E s/'API_UNAVAILABLE\(.*\)'// $(CUSTOM_INCLUDE_PATH)/xpc/*.h gsed -i 's|// __XPC_INDIRECT__|\n#include "$(TARGET_SYSROOT)/usr/include/bsm/audit.h"\n|' $(CUSTOM_INCLUDE_PATH)/xpc/connection.h package: apple-include @rm -rf $(P1_TMP) @set -o pipefail; \ xcodebuild -jobs $(shell sysctl -n hw.ncpu) -project '$(NAME).xcodeproj' -scheme $(SCHEME) -configuration $(CONFIGURATION) -arch arm64 -sdk $(PLATFORM) -derivedDataPath $(P1_TMP) \ CODE_SIGNING_ALLOWED=NO DSTROOT=$(P1_TMP)/install ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES=NO @rm -rf Payload @rm -rf $(P1_STAGE_DIR)/ @mkdir -p $(P1_STAGE_DIR)/Payload ifeq ($(PLATFORM),appletvos) plutil -insert itemId -integer 995367539 $(P1_APP_DIR)/Info.plist endif @mv $(P1_APP_DIR) $(P1_STAGE_DIR)/Payload/$(PACKAGE_NAME).app @echo $(P1_TMP) @echo $(P1_STAGE_DIR) @$(TARGET_CODESIGN) -S$(SCHEME)/Supporting\ Files/loader.entitlements $(P1_STAGE_DIR)/Payload/$(PACKAGE_NAME).app/ @rm -rf $(P1_STAGE_DIR)/Payload/$(PACKAGE_NAME).app/_CodeSignature @ln -sf $(P1_STAGE_DIR)/Payload Payload @rm -rf packages/$(PACKAGE_NAME) @mkdir -p packages @zip -r9 packages/$(PACKAGE_NAME).ipa Payload clean: @rm -rf $(P1_STAGE_DIR) @rm -rf packages @rm -rf out.dmg @rm -rf Payload @rm -rf $(CUSTOM_INCLUDE_PATH) @rm -rf $(P1_TMP) .PHONY: $(CUSTOM_INCLUDE_PATH) ================================================ FILE: NimbleKit/.gitignore ================================================ .DS_Store /.build /Packages xcuserdata/ DerivedData/ .swiftpm/configuration/registries.json .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata .netrc ================================================ FILE: NimbleKit/Package.swift ================================================ // swift-tools-version: 5.6 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "NimbleKit", platforms: [ .iOS(.v15), .tvOS(.v15) ], products: [ .library(name: "NimbleAnimations", targets: ["NimbleAnimations"]), .library(name: "NimbleExtensions", targets: ["NimbleExtensions"]), .library(name: "NimbleJSON", targets: ["NimbleJSON"]), .library(name: "NimbleViewControllers", targets: ["NimbleViewControllers"]), ], targets: [ .target(name: "NimbleAnimations", dependencies: ["NimbleExtensions"] ), .target(name: "NimbleViewControllers", dependencies: ["NimbleExtensions"] ), .target(name: "NimbleExtensions", dependencies: [] ), .target(name: "NimbleJSON", dependencies: [] ) ] ) ================================================ FILE: NimbleKit/Sources/NimbleAnimations/SlideWithPresentationAnimator.swift ================================================ // // SlideWithPresentationAnimator.swift // Loader // // Created by samara on 9.03.2025. // import UIKit import NimbleExtensions public class SlideWithPresentationAnimator: NSObject, UIViewControllerAnimatedTransitioning { private let _presenting: Bool public init(presenting: Bool) { self._presenting = presenting super.init() } public func transitionDuration(using transitionContext: (any UIViewControllerContextTransitioning)?) -> TimeInterval { 0.7 } public func animateTransition(using transitionContext: any UIViewControllerContextTransitioning) { let containerView = transitionContext.containerView guard let toVC = transitionContext.viewController(forKey: .to), let fromVC = transitionContext.viewController(forKey: .from), let toView = transitionContext.view(forKey: .to) ?? toVC.view, let fromView = transitionContext.view(forKey: .from) ?? fromVC.view else { transitionContext.completeTransition(false) return } let finalFrame = transitionContext.finalFrame(for: toVC) let displayCornerRadius = UIScreen.main.screenCornerRadius let startingCornerRadius: CGFloat = 20.0 #if os(iOS) let generator = UIImpactFeedbackGenerator(style: .soft) generator.prepare() #endif let fromViewLayer = fromView.layer let toViewLayer = toView.layer fromViewLayer.masksToBounds = true toViewLayer.masksToBounds = true if _presenting { containerView.addSubview(toView) toView.frame = finalFrame toView.transform = CGAffineTransform(scaleX: 0.85, y: 0.85) toView.center = CGPoint( x: containerView.center.x, y: containerView.bounds.height + finalFrame.height/2 ) fromViewLayer.cornerRadius = displayCornerRadius toViewLayer.cornerRadius = startingCornerRadius fromViewLayer.cornerCurve = .continuous toViewLayer.cornerCurve = .continuous let fromCornerAnimation = CABasicAnimation(keyPath: "cornerRadius") fromCornerAnimation.fromValue = displayCornerRadius fromCornerAnimation.toValue = startingCornerRadius fromCornerAnimation.duration = transitionDuration(using: transitionContext) * 0.5 fromCornerAnimation.timingFunction = CAMediaTimingFunction(name: .easeOut) fromViewLayer.add(fromCornerAnimation, forKey: "cornerRadius") fromViewLayer.cornerRadius = startingCornerRadius let animator = UIViewPropertyAnimator( duration: transitionDuration(using: transitionContext), dampingRatio: 0.85 ) { fromView.transform = CGAffineTransform(scaleX: 0.85, y: 0.85) fromView.alpha = 0.5 fromView.center = CGPoint( x: containerView.center.x, y: -finalFrame.height/2 ) toView.center = containerView.center toView.transform = .identity toView.alpha = 1.0 toViewLayer.cornerRadius = displayCornerRadius #if os(iOS) generator.impactOccurred() #endif } animator.addCompletion { position in if position == .end { transitionContext.completeTransition(!transitionContext.transitionWasCancelled) } } animator.startAnimation() } else { if toView.superview == nil { containerView.insertSubview(toView, belowSubview: fromView) toView.frame = finalFrame toView.transform = CGAffineTransform(scaleX: 0.85, y: 0.85) toView.alpha = 0.5 toView.center = CGPoint( x: containerView.center.x, y: -finalFrame.height/2 ) } fromViewLayer.cornerRadius = displayCornerRadius toViewLayer.cornerRadius = startingCornerRadius fromViewLayer.cornerCurve = .continuous toViewLayer.cornerCurve = .continuous let fromCornerAnimation = CABasicAnimation(keyPath: "cornerRadius") fromCornerAnimation.fromValue = displayCornerRadius fromCornerAnimation.toValue = startingCornerRadius fromCornerAnimation.duration = transitionDuration(using: transitionContext) * 0.5 fromCornerAnimation.timingFunction = CAMediaTimingFunction(name: .easeOut) fromViewLayer.add(fromCornerAnimation, forKey: "cornerRadius") fromViewLayer.cornerRadius = startingCornerRadius let animator = UIViewPropertyAnimator( duration: transitionDuration(using: transitionContext), dampingRatio: 0.85 ) { fromView.transform = CGAffineTransform(scaleX: 0.85, y: 0.85) fromView.alpha = 0.5 fromView.center = CGPoint( x: containerView.center.x, y: containerView.bounds.height + finalFrame.height/2 ) toView.center = containerView.center toView.transform = .identity toView.alpha = 1.0 toViewLayer.cornerRadius = displayCornerRadius #if os(iOS) generator.impactOccurred() #endif } animator.addCompletion { position in if position == .end { transitionContext.completeTransition(!transitionContext.transitionWasCancelled) } } animator.startAnimation() } } } ================================================ FILE: NimbleKit/Sources/NimbleExtensions/Bundle/Bundle+keys.swift ================================================ // // Bundle+versions.swift // Loader // // Created by samara on 18.03.2025. // import Foundation.NSBundle extension Bundle { static public var appExecutable: String { guard let str = main.object(forInfoDictionaryKey: "CFBundleExecutable") as? String else { return "" } return str } static public var appVersionShort: String { guard let str = main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String else { return "" } return str } static public var bundleVersion: String { guard let str = main.object(forInfoDictionaryKey: "CFBundleVersion") as? String else { return "" } return str } } ================================================ FILE: NimbleKit/Sources/NimbleExtensions/NSThread/Thread+mainBlock.swift ================================================ // // Thread.swift // Loader // // Created by samara on 15.03.2025. // import Foundation.NSThread extension Thread { /// Block to always execute code on the main thread /// from: https://github.com/elihwyma/Evander/blob/main/Sources/Evander/Extensions/Thread%2BExtensions.swift#L20-L27 /// thank you!~ /// - Parameter block: Code public class func mainBlock(_ block: @escaping () -> Void) { if Thread.isMainThread { block() } else { DispatchQueue.main.async { block() } } } } ================================================ FILE: NimbleKit/Sources/NimbleExtensions/String/String+localized.swift ================================================ // // String+localized.swift // NimbleKit // // Created by samara on 20.03.2025. // import Foundation extension String { // from: https://github.com/NSAntoine/Antoine/blob/main/Antoine/Backend/Extensions/Foundation.swift#L43-L55 // was given permission to use any code from antoine as I like - thank you Serena!~ static public func localized(_ name: String) -> String { NSLocalizedString(name, comment: "") } static public func localized(_ name: String, arguments: CVarArg...) -> String { String(format: NSLocalizedString(name, comment: ""), arguments: arguments) } /// Localizes the current string using the main bundle. /// /// - Returns: The localized string. public func localized() -> String { String.localized(self) } } ================================================ FILE: NimbleKit/Sources/NimbleExtensions/UIApplication/UIApplication+suspend.swift ================================================ // // UIApplication+exitAndSuspend.swift // Loader // // Created by samara on 13.03.2025. // import UIKit.UIApplication extension UIApplication { /// Exit the application after an operation is complete public func suspend() { CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication) self.perform(#selector(NSXPCConnection.suspend)) DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { exit(0) } } } ================================================ FILE: NimbleKit/Sources/NimbleExtensions/UIApplication/UIApplication+topController.swift ================================================ // // UIApplication+topController.swift // Loader // // Created by samara on 18.03.2025. // import UIKit.UIApplication extension UIApplication { /// This belongs to https://stackoverflow.com/a/30858591 public class func topViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? { if let navigationController = controller as? UINavigationController { return topViewController(controller: navigationController.visibleViewController) } if let tabController = controller as? UITabBarController { if let selected = tabController.selectedViewController { return topViewController(controller: selected) } } if let presented = controller?.presentedViewController { return topViewController(controller: presented) } return controller } } ================================================ FILE: NimbleKit/Sources/NimbleExtensions/UICollectionViewDiffableDataSource/UICollectionViewDiffableDataSource+refresh.swift ================================================ // // UICollectionViewDiffableDataSource+refresh.swift // // // Created by samara on 22.03.2025. // import UIKit extension UICollectionViewDiffableDataSource { public func refresh(completion: (() -> Void)? = nil) { self.apply(self.snapshot(), animatingDifferences: true, completion: completion) } } ================================================ FILE: NimbleKit/Sources/NimbleExtensions/UIScreen/UIScreen+displayCornerRadius.swift ================================================ // // UIScreen+displayCornerRadius.swift // Loader // // Created by samara on 9.03.2025. // import UIKit.UIScreen extension UIScreen { /// Physical screen corner radius public var screenCornerRadius: CGFloat { guard let data = Data(base64Encoded: "X2Rpc3BsYXlDb3JuZXJSYWRpdXM="), let propertyString = String(data: data, encoding: .utf8) else { return 0 } return UIScreen.main.value(forKey: propertyString) as? CGFloat ?? 0 } } ================================================ FILE: NimbleKit/Sources/NimbleExtensions/UITableView/UITableView+transition.swift ================================================ // // UITableView+transition.swift // Loader // // Created by samara on 9.03.2025. // import UIKit.UITableView import UIKit.UIView extension UITableView { public func reloadDataWithTransition( with animation: UIView.AnimationOptions = [], duration: TimeInterval = 0.3 ) { UIView.transition( with: self, duration: duration, options: animation, animations: { [weak self] in self?.reloadData() }, completion: nil) } } ================================================ FILE: NimbleKit/Sources/NimbleJSON/FetchService.swift ================================================ // // FetchService.swift // Loader // // Created by samara on 14.03.2025. // import Foundation // MARK: - Class public class FetchService { public enum FetchServiceError: Error, LocalizedError { case invalidURL case networkError(Error) case noData case parsingError(Error) public var errorDescription: String? { switch self { case .invalidURL: "The URL is invalid." case .networkError(let error): "Network error: \(error.localizedDescription)" case .noData: "No data received." case .parsingError(let error): "Failed to parse data: \(error.localizedDescription)" } } } public init() {} } // MARK: - Class extension: fetch extension FetchService { public func fetch(from urlString: String, completion: @escaping (Result) -> Void) { guard let url = URL(string: urlString) else { completion(.failure(FetchServiceError.invalidURL)) return } fetch(from: url, completion: completion) } public func fetch(from url: URL, completion: @escaping (Result) -> Void) { DispatchQueue.global(qos: .userInitiated).async { let task = URLSession.shared.dataTask(with: url) { data, response, error in if let error = error { completion(.failure(FetchServiceError.networkError(error))) return } guard let data = data else { completion(.failure(FetchServiceError.noData)) return } do { let decoder = JSONDecoder() let decodedData = try decoder.decode(T.self, from: data) completion(.success(decodedData)) } catch { completion(.failure(FetchServiceError.parsingError(error))) } } task.resume() } } } ================================================ FILE: NimbleKit/Sources/NimbleViewControllers/LRBaseStructuredTableViewController.swift ================================================ // // LRBaseStructuredTableViewController.swift // Loader // // Created by samara on 13.03.2025. // import UIKit // MARK: - Class open class LRBaseStructuredTableViewController: LRBaseTableViewController { /// An item to a section public struct SectionItem { /// Cell title public let title: String /// Cell subtitle public var subtitle: String = "" /// Cell tint public var tint: UIColor? /// Navigation link, may conflict with `action` public var navigationDestination: UIViewController? = nil /// Present new navigation controller public var presentNavigationDestination: (() -> UINavigationController)? = nil /// Cell action without a navigation destination, may conflict with `navigationDestination` public var action: (() -> Void)? = nil /// Public initializer public init( title: String, subtitle: String = "", tint: UIColor? = nil, navigationDestination: UIViewController? = nil, presentNavigationDestination: (() -> UINavigationController)? = nil, action: (() -> Void)? = nil ) { self.title = title self.subtitle = subtitle self.tint = tint self.navigationDestination = navigationDestination self.presentNavigationDestination = presentNavigationDestination self.action = action } } /// The tableview will use data from here public var sections: [(title: String, items: [SectionItem])] = [] open override func viewDidLoad() { super.viewDidLoad() setupSections() } open func setupSections() {} } // MARK: - Class extension: tableview extension LRBaseStructuredTableViewController { open override func numberOfSections(in tableView: UITableView) -> Int { sections.count } open override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { sections[section].items.count } open override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { sections[section].title } open override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")! let section = sections[indexPath.section] let item = section.items[indexPath.row] var content = UIListContentConfiguration.valueCell() content.text = item.title content.textProperties.color = .label content.secondaryText = item.subtitle content.secondaryTextProperties.color = .secondaryLabel if (item.navigationDestination != nil) || (item.presentNavigationDestination != nil) { cell.accessoryType = .disclosureIndicator cell.selectionStyle = .default } else if (item.action != nil) { #if os(iOS) content.textProperties.color = item.tint ?? .tintColor #else content.textProperties.color = item.tint ?? .systemBlue #endif cell.accessoryType = .none cell.selectionStyle = .default } else { cell.accessoryType = .none cell.selectionStyle = .none } cell.contentConfiguration = content return cell } open override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let section = sections[indexPath.section] let item = section.items[indexPath.row] if let destinationVC = item.navigationDestination { navigationController?.pushViewController(destinationVC, animated: true) } else if let destinationVC = item.presentNavigationDestination { present(destinationVC(), animated: true) } else if let action = item.action { action() } tableView.deselectRow(at: indexPath, animated: true) } } ================================================ FILE: NimbleKit/Sources/NimbleViewControllers/LRBaseTableViewController.swift ================================================ // // BaseTableViewController.swift // Loader // // Created by samara on 9.03.2025. // import UIKit import NimbleExtensions // MARK: - Class open class LRBaseTableViewController: UITableViewController { private var _didControllerFade = false #if os(iOS) private var _hideStatusBar = false #endif public init() { #if os(iOS) super.init(style: .insetGrouped) #else super.init(style: .grouped) #endif } required public init?(coder: NSCoder) { #if os(iOS) super.init(style: .insetGrouped) #else super.init(style: .grouped) #endif } #if os(iOS) open override var prefersStatusBarHidden: Bool { self._hideStatusBar } #endif open override func viewDidLoad() { super.viewDidLoad() #if os(iOS) self._configureTitleDisplayMode() #endif tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell") } #if os(iOS) private func _configureTitleDisplayMode() { if isRootViewController() { navigationItem.largeTitleDisplayMode = .always navigationController?.navigationBar.prefersLargeTitles = true } else { navigationItem.largeTitleDisplayMode = .never } } private func isRootViewController() -> Bool { navigationController?.viewControllers.first === self } #endif @objc public func dismissController() { dismiss(animated: true) } @objc public func popController() { navigationController?.popViewController(animated: true) } @objc public func blackOutController(completion: @escaping () -> (Void)) { if _didControllerFade { completion() return } self._didControllerFade = true guard let window = UIApplication.shared.windows.first(where: { $0.isKeyWindow }) else { completion() return } guard let snapshotView = window.snapshotView(afterScreenUpdates: true) else { completion() return } window.addSubview(snapshotView) snapshotView.frame = window.bounds snapshotView.layer.cornerRadius = UIScreen.main.screenCornerRadius snapshotView.layer.cornerCurve = .continuous snapshotView.layer.masksToBounds = true for subview in window.subviews where subview != snapshotView { subview.alpha = 0 } #if os(iOS) self._setHideStatusBar(true) #endif let animator = UIViewPropertyAnimator( duration: 0.45, dampingRatio: 0.9 ) { snapshotView.transform = CGAffineTransform(scaleX: 0.85, y: 0.85) snapshotView.alpha = 0.0 } animator.addCompletion { position in if position == .end { snapshotView.removeFromSuperview() completion() } } animator.startAnimation() } #if os(iOS) private func _setHideStatusBar(_ bool: Bool) { self._hideStatusBar = bool self.setNeedsStatusBarAppearanceUpdate() } #endif } ================================================ FILE: NimbleKit/Sources/NimbleViewControllers/StagedViewController/LRBaseStagedViewController.swift ================================================ // // LRBaseStagedViewController.swift // Loader // // Created by samara on 19.03.2025. // import UIKit // MARK: - Class open class LRBaseStagedViewController: UIViewController { typealias StepDataSourceSection = Int typealias StepDataSource = UICollectionViewDiffableDataSource typealias StepDataSourceSnapshot = NSDiffableDataSourceSnapshot private var _dataSource: StepDataSource? lazy var collectionView = UICollectionView( frame: .zero, collectionViewLayout: _createLayout() ) private let _footerLabel: UILabel = { let label = UILabel() label.font = .preferredFont(forTextStyle: .subheadline) label.textColor = .secondaryLabel label.adjustsFontForContentSizeCategory = true label.numberOfLines = 0 label.textAlignment = .center return label }() public var steps: [StepGroup] = [] public var footerString: String = "" public init() { super.init(nibName: nil, bundle: nil) } required public init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } open override func viewDidLoad() { super.viewDidLoad() self.setupView() _setupCollectionView() _setupDataSource() collectionView.delegate = self self.start() } open func setupView() {} open func start() {} private func _createLayout() -> UICollectionViewLayout { let itemSize = NSCollectionLayoutSize( widthDimension: .fractionalWidth(1.0), heightDimension: .estimated(50) ) let item = NSCollectionLayoutItem(layoutSize: itemSize) let group = NSCollectionLayoutGroup.horizontal( layoutSize: itemSize, subitems: [item] ) let padding: CGFloat = 12 let section = NSCollectionLayoutSection(group: group) section.interGroupSpacing = padding section.contentInsets = .init(top: padding, leading: padding, bottom: padding, trailing: padding) return UICollectionViewCompositionalLayout(section: section) } private func _setupCollectionView() { #if os(iOS) collectionView.backgroundColor = .systemBackground #endif collectionView.register( LRStageGroupCell.self, forCellWithReuseIdentifier: String(describing: LRStageGroupCell.self) ) view.addSubview(collectionView) collectionView.translatesAutoresizingMaskIntoConstraints = false collectionView.addSubview(_footerLabel) _footerLabel.translatesAutoresizingMaskIntoConstraints = false _footerLabel.text = footerString NSLayoutConstraint.activate([ collectionView.topAnchor.constraint(equalTo: view.topAnchor), collectionView.leadingAnchor.constraint(equalTo: view.leadingAnchor), collectionView.trailingAnchor.constraint(equalTo: view.trailingAnchor), collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor), _footerLabel.centerXAnchor.constraint(equalTo: collectionView.centerXAnchor), _footerLabel.bottomAnchor.constraint(equalTo: collectionView.safeAreaLayoutGuide.bottomAnchor, constant: -32), _footerLabel.widthAnchor.constraint(equalTo: collectionView.widthAnchor, multiplier: 0.7) ]) } private func _setupDataSource() { _dataSource = StepDataSource( collectionView: collectionView ) { (collectionView, indexPath, step) -> UICollectionViewCell? in guard let cell = collectionView.dequeueReusableCell( withReuseIdentifier: String(describing: LRStageGroupCell.self), for: indexPath ) as? LRStageGroupCell else { fatalError("Could not cast cell as \(LRStageGroupCell.self)") } cell.step = step return cell } collectionView.dataSource = _dataSource var snapshot = StepDataSourceSnapshot() snapshot.appendSections([0]) snapshot.appendItems(steps) _dataSource?.apply(snapshot) } public func updateStepItemStatus(_ section: String, item: String, with status: StepStatus) { guard let stepIndex = steps.firstIndex(where: { $0.name == section }), let itemIndex = steps[stepIndex].items.firstIndex(where: { $0.name == item }) else { print("Couldn't find step with name '\(section)' or item with name '\(item)'") return } let itemId = steps[stepIndex].items[itemIndex].id steps[stepIndex].items[itemIndex].status = status let indexPath = IndexPath(item: stepIndex, section: 0) guard let cell = collectionView.cellForItem(at: indexPath) as? LRStageGroupCell else { print("Cell not visible for step '\(section)'") return } cell.updateItemStatus(withId: itemId, to: status) } public func updateStepItemStatusForName(named item: String, with status: StepStatus) { for (stepIndex, step) in steps.enumerated() { if let itemIndex = step.items.firstIndex(where: { $0.name == item }) { steps[stepIndex].items[itemIndex].status = status let indexPath = IndexPath(item: stepIndex, section: 0) guard let cell = collectionView.cellForItem(at: indexPath) as? LRStageGroupCell else { continue } cell.updateItemStatus(withName: item, to: status) return } } print("Couldn't find any step item with name '\(item)'") } } // MARK: - Class extension: collectionview extension LRBaseStagedViewController: UICollectionViewDelegate { public func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool { selectCollectionViewCell(for: indexPath.row) return false } public func selectCollectionViewCell(for row: Int) { guard let dataSource = _dataSource else { return } let section = IndexPath(row: row, section: 0) if collectionView.indexPathsForSelectedItems?.contains(section) ?? false { collectionView.deselectItem(at: section, animated: true) } else { collectionView.selectItem(at: section, animated: true, scrollPosition: []) } UIView.animate(withDuration: 0.6, delay: 0, usingSpringWithDamping: 0.65, initialSpringVelocity: 0.5, options: [.curveEaseOut], animations: { dataSource.refresh() }) } } ================================================ FILE: NimbleKit/Sources/NimbleViewControllers/StagedViewController/LRStageGroupCell.swift ================================================ // // LRStageGroupCell.swift // Loader // // Created by samara on 18.03.2025. // import UIKit class LRStageGroupCell: UICollectionViewCell { var step: StepGroup? { didSet { _updateContent() } } private var _items: [LRStageGroupItemView] = [] private var _closedConstraint: NSLayoutConstraint? private var _openConstraint: NSLayoutConstraint? private var _bottomMostLabel: UIView? #if os(iOS) private let _padding: CGFloat = 14 #else private let _padding: CGFloat = 30 #endif private let _cornerRadius: CGFloat = 14 private let _nameLabel: UILabel = { let nameLabel = UILabel() nameLabel.font = .systemFont( ofSize: UIFont.preferredFont(forTextStyle: .title3).pointSize, weight: .semibold ) return nameLabel }() private let _disclosureIndicator: UIImageView = { let disclosureIndicator = UIImageView() disclosureIndicator.image = UIImage(systemName: "chevron.down") disclosureIndicator.contentMode = .scaleAspectFit #if os(tvOS) disclosureIndicator.tintColor = .clear #endif disclosureIndicator.preferredSymbolConfiguration = .init(textStyle: .headline, scale: .medium) return disclosureIndicator }() private lazy var _labelStack: UIStackView = { let labelStack = UIStackView(arrangedSubviews: [_nameLabel]) labelStack.axis = .vertical labelStack.spacing = _padding return labelStack }() override init(frame: CGRect) { super.init(frame: frame) setup() } override var isSelected: Bool { didSet { _updateAppearance() } } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } private func setup() { #if os(iOS) backgroundColor = .systemGray5 #else backgroundColor = .systemGray.withAlphaComponent(0.1) #endif clipsToBounds = true layer.cornerRadius = _cornerRadius layer.cornerCurve = .continuous contentView.translatesAutoresizingMaskIntoConstraints = false contentView.addSubview(_labelStack) _labelStack.translatesAutoresizingMaskIntoConstraints = false contentView.addSubview(_disclosureIndicator) _disclosureIndicator.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ contentView.topAnchor.constraint(equalTo: topAnchor), contentView.leadingAnchor.constraint(equalTo: leadingAnchor), contentView.trailingAnchor.constraint(equalTo: trailingAnchor), contentView.bottomAnchor.constraint(equalTo: bottomAnchor), _labelStack.topAnchor.constraint(equalTo: contentView.topAnchor, constant: _padding), _labelStack.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: _padding), _labelStack.trailingAnchor.constraint(equalTo: contentView.trailingAnchor), _disclosureIndicator.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -_padding), _disclosureIndicator.topAnchor.constraint(equalTo: contentView.topAnchor, constant: _padding), ]) _closedConstraint = _nameLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -_padding) _closedConstraint?.priority = .defaultLow _openConstraint = _nameLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -_padding) _openConstraint?.priority = .defaultLow _updateAppearance() } private func _updateContent() { guard let step = step else { return } for view in _labelStack.arrangedSubviews where view != _nameLabel { _labelStack.removeArrangedSubview(view) view.removeFromSuperview() } _items.removeAll() _nameLabel.text = step.name for item in step.items { let view = LRStageGroupItemView(item.name, padding: _padding, status: item.status) _items.append(view) _labelStack.addArrangedSubview(view) } let lastLabel = _items.last ?? _nameLabel _bottomMostLabel = lastLabel _openConstraint = lastLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -_padding) _openConstraint?.priority = .defaultLow _updateAppearance() } /// Updates the views to reflect changes in selection private func _updateAppearance() { _closedConstraint?.isActive = !isSelected _openConstraint?.isActive = isSelected UIView.animate(withDuration: 0.3) { let upsideDown = CGAffineTransform(rotationAngle: .pi * 0.999) self._disclosureIndicator.transform = self.isSelected ? upsideDown : .identity } } } // MARK: - Item Updates extension LRStageGroupCell { /// Updates a specific item view's status without rebuilding the entire cell /// - Parameters: /// - id: The UUID of the item to update /// - newStatus: The new status to apply func updateItemStatus(withId id: UUID, to newStatus: StepStatus) { // 1. Update the data model guard var step = step else { return } #if os(iOS) let generator = UIImpactFeedbackGenerator(style: .soft) generator.prepare() #endif // Find the item and update it for i in 0.. StepGroupItem? { return items.first { $0.name == name } } } public struct StepGroupItem: Hashable, Identifiable { public let id: UUID public let name: String public var status: StepStatus public init(id: UUID = UUID(), name: String, status: StepStatus = .pending) { self.id = id self.name = name self.status = status } } public enum StepStatus: String, CaseIterable { case pending case inProgress case completed case failed var systemImageName: String { switch self { case .pending: "circle.dotted" case .inProgress: "circle.dashed" case .completed: "checkmark.circle.fill" case .failed: "xmark.circle.fill" } } var tintColor: UIColor { switch self { case .pending: .systemGray.withAlphaComponent(0.4) case .inProgress: .systemBlue case .completed: .systemGreen case .failed: .systemRed } } } ================================================ FILE: NimbleKit/Sources/NimbleViewControllers/StagedViewController/Timer/TimerManager.swift ================================================ // // TimerManager.swift // Loader // // Created by samara on 22.03.2025. // import Foundation class TimerManager { private var timer: Timer? private var startTime: Date? func startTimer(timeInterval: TimeInterval, repeats: Bool = true) { DispatchQueue.global(qos: .utility).async { self.startTime = Date() self.timer = Timer.scheduledTimer( withTimeInterval: timeInterval, repeats: repeats, block: { _ in } ) if let timer = self.timer { RunLoop.current.add(timer, forMode: .common) } } } func invalidateTimerWithReturningSeconds() -> String? { guard let timer = timer, startTime != nil else { return nil } timer.invalidate() self.timer = nil let elapsed = Date().timeIntervalSince(startTime!) startTime = nil return String(format: "%.1fs", elapsed) } } ================================================ FILE: README.md ================================================ # Loader Loader application used in palera1n, this has a purpose of bootstrapping your phone after jailbreaking. ## Building #### Minimum Requirements - Xcode 15 - iOS 15 - palera1n 2.1 Its recommended to use [AppSync Unified](https://github.com/akemin-dayo/AppSync/releases/tag/116.0) along with [palera1n](https://github.com/palera1n/palera1n) for testing and debugging.