From e6cbd21d1290cef34c36ab30318f702c1f317dee Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Mon, 28 Nov 2022 12:32:12 -0600 Subject: [PATCH] [AltServer] Uses correct app name and iOS version in ALTServerErrorUnsupportediOSVersion alert --- AltServer/Devices/ALTDeviceManager.mm | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/AltServer/Devices/ALTDeviceManager.mm b/AltServer/Devices/ALTDeviceManager.mm index eca5d55f..bbea7e0c 100644 --- a/AltServer/Devices/ALTDeviceManager.mm +++ b/AltServer/Devices/ALTDeviceManager.mm @@ -109,9 +109,30 @@ NSNotificationName const ALTDeviceManagerDeviceDidDisconnectNotification = @"ALT NSMutableDictionary *cachedProfiles = [NSMutableDictionary dictionary]; NSMutableSet *installedProfiles = [NSMutableSet set]; + __block ALTApplication *application = nil; + void (^finish)(NSError *error) = ^(NSError *e) { __block NSError *error = e; + if (application != nil && [error.domain isEqualToString:AltServerErrorDomain] && error.code == ALTServerErrorUnsupportediOSVersion) + { + // Add relevant userInfo values for ALTServerErrorUnsupportediOSVersion. + + ALTDeviceType deviceType = ALTDeviceTypeiPhone; + if (application.supportedDeviceTypes & ALTDeviceTypeAppleTV) + { + // App supports tvOS, so assume we're installing to Apple TV (because there are no "universal" tvOS binaries). + deviceType = ALTDeviceTypeAppleTV; + } + + NSMutableDictionary *userInfo = [error.userInfo mutableCopy]; + userInfo[ALTAppNameErrorKey] = application.name; + userInfo[ALTOperatingSystemNameErrorKey] = ALTOperatingSystemNameForDeviceType(deviceType) ?: @"iOS"; + userInfo[ALTOperatingSystemVersionErrorKey] = NSStringFromOperatingSystemVersion(application.minimumiOSVersion); + + error = [NSError errorWithDomain:error.domain code:error.code userInfo:userInfo]; + } + if (activeProvisioningProfiles != nil) { // Remove installed provisioning profiles if they're not active. @@ -203,7 +224,7 @@ NSNotificationName const ALTDeviceManagerDeviceDidDisconnectNotification = @"ALT return finish([NSError errorWithDomain:NSCocoaErrorDomain code:NSFileReadCorruptFileError userInfo:@{NSURLErrorKey: fileURL}]); } - ALTApplication *application = [[ALTApplication alloc] initWithFileURL:appBundleURL]; + application = [[ALTApplication alloc] initWithFileURL:appBundleURL]; if (application.provisioningProfile) { [installedProfiles addObject:application.provisioningProfile]; @@ -1672,7 +1693,8 @@ void ALTDeviceManagerUpdateStatus(plist_t command, plist_t status, void *uuid) NSString *errorName = [NSString stringWithCString:name ?: "" encoding:NSUTF8StringEncoding]; if ([errorName isEqualToString:@"DeviceOSVersionTooLow"]) { - error = [NSError errorWithDomain:AltServerErrorDomain code:ALTServerErrorUnsupportediOSVersion userInfo:nil]; + NSError *underlyingError = [NSError errorWithDomain:AltServerInstallationErrorDomain code:code userInfo:@{NSLocalizedDescriptionKey: localizedDescription}]; + error = [NSError errorWithDomain:AltServerErrorDomain code:ALTServerErrorUnsupportediOSVersion userInfo:@{NSUnderlyingErrorKey: underlyingError}]; } else {