mirror of
https://github.com/SideStore/SideStore.git
synced 2026-02-09 06:43:25 +01:00
76 lines
2.1 KiB
Swift
76 lines
2.1 KiB
Swift
|
|
//
|
|||
|
|
// MountDisk.swift
|
|||
|
|
// AltPackage
|
|||
|
|
//
|
|||
|
|
// Created by Riley Testut on 8/31/23.
|
|||
|
|
// Copyright © 2023 Riley Testut. All rights reserved.
|
|||
|
|
//
|
|||
|
|
|
|||
|
|
import Foundation
|
|||
|
|
import OSLog
|
|||
|
|
|
|||
|
|
import ArgumentParser
|
|||
|
|
|
|||
|
|
typealias MountError = MountErrorCode.Error
|
|||
|
|
enum MountErrorCode: Int, ALTErrorEnum
|
|||
|
|
{
|
|||
|
|
case alreadyMounted
|
|||
|
|
|
|||
|
|
var errorFailureReason: String {
|
|||
|
|
switch self
|
|||
|
|
{
|
|||
|
|
case .alreadyMounted: return NSLocalizedString("A personalized Developer Disk is already mounted.", comment: "")
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
struct MountDisk: PythonCommand
|
|||
|
|
{
|
|||
|
|
static let configuration = CommandConfiguration(commandName: "mount", abstract: "Mount a personalized developer disk image onto an iOS device.")
|
|||
|
|
|
|||
|
|
@Option(help: "The iOS device's UDID.")
|
|||
|
|
var udid: String
|
|||
|
|
|
|||
|
|
// PythonCommand
|
|||
|
|
var pythonPath: String?
|
|||
|
|
|
|||
|
|
mutating func run() async throws
|
|||
|
|
{
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
print("Mounting personalized developer disk...")
|
|||
|
|
|
|||
|
|
try await self.prepare()
|
|||
|
|
|
|||
|
|
let output = try await Process.launchAndWait(.python3, arguments: ["-m", "pymobiledevice3", "mounter", "auto-mount", "--udid", self.udid])
|
|||
|
|
if !output.contains("DeveloperDiskImage")
|
|||
|
|
{
|
|||
|
|
throw ProcessError.unexpectedOutput(executableURL: .python3, output: output)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if output.contains("already mounted")
|
|||
|
|
{
|
|||
|
|
throw MountError(.alreadyMounted)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
print("✅ Successfully mounted personalized Developer Disk!")
|
|||
|
|
}
|
|||
|
|
catch let error as MountError where error.code == .alreadyMounted
|
|||
|
|
{
|
|||
|
|
// Prepend ⚠️ since this is not really an error.
|
|||
|
|
let localizedDescription = "⚠️ " + error.localizedDescription
|
|||
|
|
print(localizedDescription)
|
|||
|
|
|
|||
|
|
throw ExitCode.success
|
|||
|
|
}
|
|||
|
|
catch
|
|||
|
|
{
|
|||
|
|
// Output failure message first before error.
|
|||
|
|
print("❌ Unable to mount personalized Developer Disk.")
|
|||
|
|
print(error.localizedDescription)
|
|||
|
|
|
|||
|
|
throw ExitCode.failure
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|