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.