mirror of
https://github.com/SideStore/SideStore.git
synced 2026-02-09 06:43:25 +01:00
Assuming the certificate used to originally sign an app is still valid, we can refresh an app simply by installing new provisioning profiles. However, if the signing certificate is no longer valid, we fall back to the old method of resigning + reinstalling.
80 lines
1.9 KiB
Swift
80 lines
1.9 KiB
Swift
//
|
|
// Contexts.swift
|
|
// AltStore
|
|
//
|
|
// Created by Riley Testut on 6/20/19.
|
|
// Copyright © 2019 Riley Testut. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import CoreData
|
|
import Network
|
|
|
|
import AltSign
|
|
|
|
class OperationContext
|
|
{
|
|
var server: Server?
|
|
var error: Error?
|
|
}
|
|
|
|
class AuthenticatedOperationContext: OperationContext
|
|
{
|
|
var session: ALTAppleAPISession?
|
|
|
|
var team: ALTTeam?
|
|
var certificate: ALTCertificate?
|
|
|
|
weak var authenticationOperation: AuthenticationOperation?
|
|
}
|
|
|
|
@dynamicMemberLookup
|
|
class AppOperationContext
|
|
{
|
|
let bundleIdentifier: String
|
|
private let authenticatedContext: AuthenticatedOperationContext
|
|
|
|
var app: ALTApplication?
|
|
var provisioningProfiles: [String: ALTProvisioningProfile]?
|
|
|
|
var isFinished = false
|
|
|
|
var error: Error? {
|
|
get {
|
|
return _error ?? self.authenticatedContext.error
|
|
}
|
|
set {
|
|
_error = newValue
|
|
}
|
|
}
|
|
private var _error: Error?
|
|
|
|
init(bundleIdentifier: String, authenticatedContext: AuthenticatedOperationContext)
|
|
{
|
|
self.bundleIdentifier = bundleIdentifier
|
|
self.authenticatedContext = authenticatedContext
|
|
}
|
|
|
|
subscript<T>(dynamicMember keyPath: WritableKeyPath<AuthenticatedOperationContext, T>) -> T
|
|
{
|
|
return self.authenticatedContext[keyPath: keyPath]
|
|
}
|
|
}
|
|
|
|
class InstallAppOperationContext: AppOperationContext
|
|
{
|
|
lazy var temporaryDirectory: URL = {
|
|
let temporaryDirectory = FileManager.default.uniqueTemporaryURL()
|
|
|
|
do { try FileManager.default.createDirectory(at: temporaryDirectory, withIntermediateDirectories: true, attributes: nil) }
|
|
catch { self.error = error }
|
|
|
|
return temporaryDirectory
|
|
}()
|
|
|
|
var resignedApp: ALTApplication?
|
|
var installationConnection: ServerConnection?
|
|
|
|
var beginInstallationHandler: ((InstalledApp) -> Void)?
|
|
}
|