[AltServer] Improves error handling when installing apps

This commit is contained in:
Riley Testut
2019-09-13 14:25:26 -07:00
parent e3cf7b203c
commit 07746174d4
4 changed files with 39 additions and 18 deletions

View File

@@ -13,19 +13,20 @@ extern NSErrorDomain const AltServerInstallationErrorDomain;
typedef NS_ERROR_ENUM(AltServerErrorDomain, ALTServerError) typedef NS_ERROR_ENUM(AltServerErrorDomain, ALTServerError)
{ {
ALTServerErrorUnknown, ALTServerErrorUnknown = 0,
ALTServerErrorConnectionFailed, ALTServerErrorConnectionFailed = 1,
ALTServerErrorLostConnection, ALTServerErrorLostConnection = 2,
ALTServerErrorDeviceNotFound, ALTServerErrorDeviceNotFound = 3,
ALTServerErrorDeviceWriteFailed, ALTServerErrorDeviceWriteFailed = 4,
ALTServerErrorInvalidRequest, ALTServerErrorInvalidRequest = 5,
ALTServerErrorInvalidResponse, ALTServerErrorInvalidResponse = 6,
ALTServerErrorInvalidApp, ALTServerErrorInvalidApp = 7,
ALTServerErrorInstallationFailed, ALTServerErrorInstallationFailed = 8,
ALTServerErrorMaximumFreeAppLimitReached, ALTServerErrorMaximumFreeAppLimitReached = 9,
ALTServerErrorUnsupportediOSVersion = 10,
}; };
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN

View File

@@ -58,6 +58,9 @@ NSErrorDomain const AltServerInstallationErrorDomain = @"com.rileytestut.AltServ
case ALTServerErrorMaximumFreeAppLimitReached: case ALTServerErrorMaximumFreeAppLimitReached:
return NSLocalizedString(@"You have reached the limit of 3 apps per device.", @""); return NSLocalizedString(@"You have reached the limit of 3 apps per device.", @"");
case ALTServerErrorUnsupportediOSVersion:
return NSLocalizedString(@"Your device must be running iOS 12.2 or later to install AltStore.", @"");
} }
} }

View File

@@ -137,13 +137,23 @@ private extension AppDelegate
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: nil) let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: nil)
UNUserNotificationCenter.current().add(request) UNUserNotificationCenter.current().add(request)
case .failure(let error): case .failure(let error as NSError):
let alert = NSAlert() let alert = NSAlert()
alert.alertStyle = .critical
alert.messageText = NSLocalizedString("Installation Failed", comment: "") alert.messageText = NSLocalizedString("Installation Failed", comment: "")
alert.informativeText = error.localizedDescription
if let underlyingError = error.userInfo[NSUnderlyingErrorKey] as? Error
{
alert.informativeText = underlyingError.localizedDescription
}
else
{
alert.informativeText = error.localizedDescription
}
NSRunningApplication.current.activate(options: .activateIgnoringOtherApps) NSRunningApplication.current.activate(options: .activateIgnoringOtherApps)
alert.runModal() alert.runModal()
} }
} }

View File

@@ -622,12 +622,12 @@ void ALTDeviceManagerUpdateStatus(plist_t command, plist_t status, void *uuid)
uint64_t code = 0; uint64_t code = 0;
instproxy_status_get_error(status, &name, &description, &code); instproxy_status_get_error(status, &name, &description, &code);
if ((percent == -1 && progress.completedUnitCount > 0) || code != 0) if ((percent == -1 && progress.completedUnitCount > 0) || code != 0 || name != NULL)
{ {
void (^completionHandler)(NSError *) = ALTDeviceManager.sharedManager.installationCompletionHandlers[UUID]; void (^completionHandler)(NSError *) = ALTDeviceManager.sharedManager.installationCompletionHandlers[UUID];
if (completionHandler != nil) if (completionHandler != nil)
{ {
if (code != 0) if (code != 0 || name != NULL)
{ {
NSLog(@"Error installing app. %@ (%@). %@", @(code), @(name), @(description)); NSLog(@"Error installing app. %@ (%@). %@", @(code), @(name), @(description));
@@ -639,9 +639,16 @@ void ALTDeviceManagerUpdateStatus(plist_t command, plist_t status, void *uuid)
} }
else else
{ {
NSError *underlyingError = [NSError errorWithDomain:AltServerInstallationErrorDomain code:code userInfo:@{NSLocalizedDescriptionKey: @(description)}]; NSString *errorName = [NSString stringWithCString:name encoding:NSUTF8StringEncoding];
if ([errorName isEqualToString:@"DeviceOSVersionTooLow"])
error = [NSError errorWithDomain:AltServerErrorDomain code:ALTServerErrorInstallationFailed userInfo:@{NSUnderlyingErrorKey: underlyingError}]; {
error = [NSError errorWithDomain:AltServerErrorDomain code:ALTServerErrorUnsupportediOSVersion userInfo:nil];
}
else
{
NSError *underlyingError = [NSError errorWithDomain:AltServerInstallationErrorDomain code:code userInfo:@{NSLocalizedDescriptionKey: @(description)}];
error = [NSError errorWithDomain:AltServerErrorDomain code:ALTServerErrorInstallationFailed userInfo:@{NSUnderlyingErrorKey: underlyingError}];
}
} }
completionHandler(error); completionHandler(error);