[AltServer] Removes duplicate profiles even if they’re excluded

This commit is contained in:
Riley Testut
2020-04-01 12:19:25 -07:00
parent 40d4899bd1
commit 664c31aba8

View File

@@ -656,7 +656,8 @@ NSNotificationName const ALTDeviceManagerDeviceDidDisconnectNotification = @"ALT
misagent:(misagent_client_t)mis misagent:(misagent_client_t)mis
error:(NSError **)error error:(NSError **)error
{ {
NSMutableDictionary<NSString *, ALTProvisioningProfile *> *cachedProfiles = [NSMutableDictionary dictionary]; NSMutableDictionary<NSString *, ALTProvisioningProfile *> *ignoredProfiles = [NSMutableDictionary dictionary];
NSMutableDictionary<NSString *, ALTProvisioningProfile *> *removedProfiles = [NSMutableDictionary dictionary];
NSArray<ALTProvisioningProfile *> *provisioningProfiles = [self copyProvisioningProfilesWithClient:mis error:error]; NSArray<ALTProvisioningProfile *> *provisioningProfiles = [self copyProvisioningProfilesWithClient:mis error:error];
if (provisioningProfiles == nil) if (provisioningProfiles == nil)
@@ -678,20 +679,46 @@ NSNotificationName const ALTDeviceManagerDeviceDidDisconnectNotification = @"ALT
if (excludedBundleIdentifiers != nil && [excludedBundleIdentifiers containsObject:provisioningProfile.bundleIdentifier]) if (excludedBundleIdentifiers != nil && [excludedBundleIdentifiers containsObject:provisioningProfile.bundleIdentifier])
{ {
// This provisioning profile has an excluded bundle identifier.
// Ignore it, unless we've already ignored one with the same bundle identifier,
// in which case remove whichever profile is the oldest.
ALTProvisioningProfile *previousProfile = ignoredProfiles[provisioningProfile.bundleIdentifier];
if (previousProfile != nil)
{
// We've already ignored a profile with this bundle identifier,
// so make sure we only ignore the newest one and remove the oldest one.
BOOL isNewerThanPreviousProfile = ([provisioningProfile.expirationDate compare:previousProfile.expirationDate] == NSOrderedDescending);
ALTProvisioningProfile *oldestProfile = isNewerThanPreviousProfile ? previousProfile : provisioningProfile;
ALTProvisioningProfile *newestProfile = isNewerThanPreviousProfile ? provisioningProfile : previousProfile;
ignoredProfiles[provisioningProfile.bundleIdentifier] = newestProfile;
// Don't cache this profile or else it will be reinstalled, so just remove it without caching.
if (![self removeProvisioningProfile:oldestProfile misagent:mis error:error])
{
return nil;
}
}
else
{
ignoredProfiles[provisioningProfile.bundleIdentifier] = provisioningProfile;
}
continue; continue;
} }
ALTProvisioningProfile *preferredProfile = cachedProfiles[provisioningProfile.bundleIdentifier]; ALTProvisioningProfile *preferredProfile = removedProfiles[provisioningProfile.bundleIdentifier];
if (preferredProfile != nil) if (preferredProfile != nil)
{ {
if ([provisioningProfile.expirationDate compare:preferredProfile.expirationDate] == NSOrderedDescending) if ([provisioningProfile.expirationDate compare:preferredProfile.expirationDate] == NSOrderedDescending)
{ {
cachedProfiles[provisioningProfile.bundleIdentifier] = provisioningProfile; removedProfiles[provisioningProfile.bundleIdentifier] = provisioningProfile;
} }
} }
else else
{ {
cachedProfiles[provisioningProfile.bundleIdentifier] = provisioningProfile; removedProfiles[provisioningProfile.bundleIdentifier] = provisioningProfile;
} }
if (![self removeProvisioningProfile:provisioningProfile misagent:mis error:error]) if (![self removeProvisioningProfile:provisioningProfile misagent:mis error:error])
@@ -700,7 +727,7 @@ NSNotificationName const ALTDeviceManagerDeviceDidDisconnectNotification = @"ALT
} }
} }
return cachedProfiles; return removedProfiles;
} }
- (BOOL)installProvisioningProfile:(ALTProvisioningProfile *)provisioningProfile misagent:(misagent_client_t)mis error:(NSError **)error - (BOOL)installProvisioningProfile:(ALTProvisioningProfile *)provisioningProfile misagent:(misagent_client_t)mis error:(NSError **)error