Fixes updating apps to latest version instead of latest supported version from My Apps tab

This commit is contained in:
Riley Testut
2022-11-16 17:41:21 -06:00
committed by Magesh K
parent 83d39666d2
commit 3d70271306

View File

@@ -27,6 +27,12 @@ extension AppManager
static let expirationWarningNotificationID = "altstore-expiration-warning"
static let enableJITResultNotificationID = "altstore-enable-jit"
enum PreferredAppVersion
{
case latestSupportedVersion
case latestAvailableVersionWithFallback
}
}
@available(iOS 13, *)
@@ -499,10 +505,17 @@ extension AppManager
}
@discardableResult
func update(_ app: InstalledApp, presentingViewController: UIViewController?, context: AuthenticatedOperationContext = AuthenticatedOperationContext(), completionHandler: @escaping (Result<InstalledApp, Error>) -> Void) -> Progress
func update(_ installedApp: InstalledApp, to preferredAppVersion: PreferredAppVersion = .latestSupportedVersion, presentingViewController: UIViewController?, context: AuthenticatedOperationContext = AuthenticatedOperationContext(), completionHandler: @escaping (Result<InstalledApp, Error>) -> Void) -> Progress
{
guard let storeApp = app.storeApp else {
completionHandler(.failure(OperationError.appNotFound(name: app.name)))
let preferredApp: AppProtocol?
switch preferredAppVersion
{
case .latestSupportedVersion: preferredApp = installedApp.storeApp?.latestSupportedVersion
case .latestAvailableVersionWithFallback: preferredApp = installedApp.storeApp // Use StoreApp directly to correctly handle min/max OS versions in DownloadAppOperation.
}
guard let app = preferredApp else {
completionHandler(.failure(OperationError.appNotFound(name: installedApp.name)))
return Progress.discreteProgress(totalUnitCount: 1)
}
@@ -519,8 +532,8 @@ extension AppManager
}
}
let operation = AppOperation.update(storeApp)
assert(operation.app as AnyObject === storeApp) // Make sure we never accidentally "update" to already installed app.
let operation = AppOperation.update(app)
assert(operation.app as AnyObject !== installedApp) // Make sure we never accidentally "update" to already installed app.
self.perform([operation], presentingViewController: presentingViewController, group: group)