Files
SideStore/AltJIT/Commands/MountDisk.swift

76 lines
2.1 KiB
Swift
Raw Normal View History

//
// 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
}
}
}