From de238c95a05d11886ac9c1b81b6b3b7e9cc7ef26 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Tue, 25 Jun 2019 17:06:27 -0700 Subject: [PATCH] [AltServer] Only reinstalls required provisioning profiles --- AltServer/Devices/ALTDeviceManager.mm | 23 ++++++++++++++++++++++- Dependencies/AltSign | 2 +- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/AltServer/Devices/ALTDeviceManager.mm b/AltServer/Devices/ALTDeviceManager.mm index c1aea676..7d5bf67c 100644 --- a/AltServer/Devices/ALTDeviceManager.mm +++ b/AltServer/Devices/ALTDeviceManager.mm @@ -73,6 +73,7 @@ NSErrorDomain const ALTDeviceErrorDomain = @"com.rileytestut.ALTDeviceError"; __block lockdownd_service_descriptor_t service = NULL; NSURL *removedProfilesDirectoryURL = [[[NSFileManager defaultManager] temporaryDirectory] URLByAppendingPathComponent:[[NSUUID UUID] UUIDString]]; + NSMutableDictionary *preferredProfiles = [NSMutableDictionary dictionary]; void (^finish)(NSError *error) = ^(NSError *error) { @@ -91,6 +92,12 @@ NSErrorDomain const ALTDeviceErrorDomain = @"com.rileytestut.ALTDeviceError"; continue; } + ALTProvisioningProfile *preferredProfile = preferredProfiles[provisioningProfile.bundleIdentifier]; + if (![preferredProfile isEqual:provisioningProfile]) + { + continue; + } + plist_t pdata = plist_new_data((const char *)provisioningProfile.data.bytes, provisioningProfile.data.length); if (misagent_install(mis, pdata) == MISAGENT_E_SUCCESS) @@ -287,7 +294,7 @@ NSErrorDomain const ALTDeviceErrorDomain = @"com.rileytestut.ALTDeviceError"; { continue; } - + char *bytes = NULL; uint64_t length = 0; @@ -302,8 +309,22 @@ NSErrorDomain const ALTDeviceErrorDomain = @"com.rileytestut.ALTDeviceError"; if (![provisioningProfile.teamIdentifier isEqualToString:installationProvisioningProfile.teamIdentifier]) { + NSLog(@"Ignoring: %@", installationProvisioningProfile.teamIdentifier); continue; } + + ALTProvisioningProfile *preferredProfile = preferredProfiles[provisioningProfile.bundleIdentifier]; + if (preferredProfile != nil) + { + if ([provisioningProfile.expirationDate compare:preferredProfile.expirationDate] == NSOrderedDescending) + { + preferredProfiles[provisioningProfile.bundleIdentifier] = provisioningProfile; + } + } + else + { + preferredProfiles[provisioningProfile.bundleIdentifier] = provisioningProfile; + } NSString *filename = [NSString stringWithFormat:@"%@.mobileprovision", [[NSUUID UUID] UUIDString]]; NSURL *fileURL = [removedProfilesDirectoryURL URLByAppendingPathComponent:filename]; diff --git a/Dependencies/AltSign b/Dependencies/AltSign index 8da82a59..cedded2e 160000 --- a/Dependencies/AltSign +++ b/Dependencies/AltSign @@ -1 +1 @@ -Subproject commit 8da82a59a2be1e83b6969a73c652b66110c350f5 +Subproject commit cedded2e49eaafc5a085993626862e405ba129ef