From b8e1921b74f47117239390cc9c34699da115800e Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Wed, 1 Apr 2020 13:05:31 -0700 Subject: [PATCH] Leaves apps activated if there is no active app limit during migration --- AltStore/Model/InstalledApp.swift | 3 +++ .../xcmapping.xml | 2 +- .../Policies/InstalledAppPolicy.swift | 27 ++++++++++++++++--- .../Operations/AuthenticationOperation.swift | 3 +-- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/AltStore/Model/InstalledApp.swift b/AltStore/Model/InstalledApp.swift index de57ef88..dc4b2193 100644 --- a/AltStore/Model/InstalledApp.swift +++ b/AltStore/Model/InstalledApp.swift @@ -11,6 +11,9 @@ import CoreData import AltSign +// Free developer accounts are limited to only 3 active sideloaded apps at a time as of iOS 13.3.1. +let ALTActiveAppsLimit = 3 + protocol InstalledAppProtocol: Fetchable { var name: String { get } diff --git a/AltStore/Model/Migrations/Mapping Models/AltStore4ToAltStore5.xcmappingmodel/xcmapping.xml b/AltStore/Model/Migrations/Mapping Models/AltStore4ToAltStore5.xcmappingmodel/xcmapping.xml index 8726013d..009f057b 100644 --- a/AltStore/Model/Migrations/Mapping Models/AltStore4ToAltStore5.xcmappingmodel/xcmapping.xml +++ b/AltStore/Model/Migrations/Mapping Models/AltStore4ToAltStore5.xcmappingmodel/xcmapping.xml @@ -258,7 +258,7 @@ YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMSAAGGoF8Q -D05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGvEBMLDBcYHR4mKzAxNDU5Pj9CRkpMVSRudWxs1Q0ODxAREhMUFRZZTlNPcGVyYW5kXk5TU2VsZWN0b3JOYW1lXxAQTlNFeHByZXNzaW9uVHlwZVtOU0FyZ3VtZW50c1YkY2xhc3OAA4ACEASABoASXxAbZGVmYXVsdElzQWN0aXZlRm9yQnVuZGxlSUQ60xkPERobHFpOU1ZhcmlhYmxlgAQQAoAFXGVudGl0eVBvbGljedIfICEiWiRjbGFzc25hbWVYJGNsYXNzZXNfEBROU1ZhcmlhYmxlRXhwcmVzc2lvbqMjJCVfEBROU1ZhcmlhYmxlRXhwcmVzc2lvblxOU0V4cHJlc3Npb25YTlNPYmplY3TSJxEoKlpOUy5vYmplY3RzoSmAB4AR1Q0ODxARLC0ULi+ACYAIgAuAEF8QEHZhbHVlRm9yS2V5UGF0aDrTGQ8RMhscgAqABVZzb3VyY2XSJxE2OKE3gAyAD9MRDzo7PD1ZTlNLZXlQYXRogA4QCoANXxAQYnVuZGxlSWRlbnRpZmllctIfIEBBXxAcTlNLZXlQYXRoU3BlY2lmaWVyRXhwcmVzc2lvbqNAJCXSHyBDRF5OU011dGFibGVBcnJheaNDRSVXTlNBcnJhedIfIEdIXxATTlNLZXlQYXRoRXhwcmVzc2lvbqRHSSQlXxAUTlNGdW5jdGlvbkV4cHJlc3Npb27SHyBFS6JFJdIfIElNo0kkJQAIABEAGgAkACkAMgA3AEkATABRAFMAaQBvAHoAhACTAKYAsgC5ALsAvQC/AMEAwwDhAOgA8wD1APcA+QEGAQsBFgEfATYBOgFRAV4BZwFsAXcBeQF7AX0BiAGKAYwBjgGQAaMBqgGsAa4BtQG6AbwBvgHAAccB0QHTAdUB1wHqAe8CDgISAhcCJgIqAjICNwJNAlICaQJuAnECdgAAAAAAAAIBAAAAAAAAAE4AAAAAAAAAAAAAAAAAAAJ6 +D05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGvEBgLDBcYHR4mLDEyNTY6P0BDR0tQU1daW11VJG51bGzVDQ4PEBESExQVFllOU09wZXJhbmReTlNTZWxlY3Rvck5hbWVfEBBOU0V4cHJlc3Npb25UeXBlW05TQXJndW1lbnRzViRjbGFzc4ADgAIQBIAGgBdfECBkZWZhdWx0SXNBY3RpdmVGb3JCdW5kbGVJRDp0ZWFtOtMZDxEaGxxaTlNWYXJpYWJsZYAEEAKABVxlbnRpdHlQb2xpY3nSHyAhIlokY2xhc3NuYW1lWCRjbGFzc2VzXxAUTlNWYXJpYWJsZUV4cHJlc3Npb26jIyQlXxAUTlNWYXJpYWJsZUV4cHJlc3Npb25cTlNFeHByZXNzaW9uWE5TT2JqZWN00icRKCtaTlMub2JqZWN0c6IpKoAHgBGAFtUNDg8QES0uFC8wgAmACIALgBBfEBB2YWx1ZUZvcktleVBhdGg60xkPETMbHIAKgAVWc291cmNl0icRNzmhOIAMgA/TEQ87PD0+WU5TS2V5UGF0aIAOEAqADV8QEGJ1bmRsZUlkZW50aWZpZXLSHyBBQl8QHE5TS2V5UGF0aFNwZWNpZmllckV4cHJlc3Npb26jQSQl0h8gREVeTlNNdXRhYmxlQXJyYXmjREYlV05TQXJyYXnSHyBISV8QE05TS2V5UGF0aEV4cHJlc3Npb26kSEokJV8QFE5TRnVuY3Rpb25FeHByZXNzaW9u1Q0ODxARTC4UTjCAEoAIgBOAENMZDxEzGxyACoAF0icRVDmhVYAUgA/TEQ87PD1ZgA6AFVR0ZWFt0h8gRlyiRiXSHyBKXqNKJCUACAARABoAJAApADIANwBJAEwAUQBTAG4AdAB/AIkAmACrALcAvgDAAMIAxADGAMgA6wDyAP0A/wEBAQMBEAEVASABKQFAAUQBWwFoAXEBdgGBAYQBhgGIAYoBlQGXAZkBmwGdAbABtwG5AbsBwgHHAckBywHNAdQB3gHgAeIB5AH3AfwCGwIfAiQCMwI3Aj8CRAJaAl8CdgKBAoMChQKHAokCkAKSApQCmQKbAp0CnwKmAqgCqgKvArQCtwK8AAAAAAAAAgEAAAAAAAAAXwAAAAAAAAAAAAAAAAAAAsA= isActive diff --git a/AltStore/Model/Migrations/Policies/InstalledAppPolicy.swift b/AltStore/Model/Migrations/Policies/InstalledAppPolicy.swift index fe6cac2f..880ae8fe 100644 --- a/AltStore/Model/Migrations/Policies/InstalledAppPolicy.swift +++ b/AltStore/Model/Migrations/Policies/InstalledAppPolicy.swift @@ -7,6 +7,7 @@ // import CoreData +import AltSign @objc(InstalledAppToInstalledAppMigrationPolicy) class InstalledAppToInstalledAppMigrationPolicy: NSEntityMigrationPolicy @@ -28,10 +29,30 @@ class InstalledAppToInstalledAppMigrationPolicy: NSEntityMigrationPolicy dInstance.setValue(teams.first, forKey: #keyPath(InstalledApp.team)) } - @objc(defaultIsActiveForBundleID:) - func defaultIsActive(for bundleID: String) -> NSNumber + @objc(defaultIsActiveForBundleID:team:) + func defaultIsActive(for bundleID: String, team: NSManagedObject?) -> NSNumber { - let isActive = (bundleID == StoreApp.altstoreAppID) + let isActive: Bool + + let activeAppsMinimumVersion = OperatingSystemVersion(majorVersion: 13, minorVersion: 3, patchVersion: 1) + if !ProcessInfo.processInfo.isOperatingSystemAtLeast(activeAppsMinimumVersion) + { + isActive = true + } + else if let team = team, let type = team.value(forKey: #keyPath(Team.type)) as? Int16, type != ALTTeamType.free.rawValue + { + isActive = true + } + else + { + // AltStore should always be active, but deactivate all other apps. + isActive = (bundleID == StoreApp.altstoreAppID) + + // We can assume there is an active app limit, + // but will confirm next time user authenticates. + UserDefaults.standard.activeAppsLimit = ALTActiveAppsLimit + } + return NSNumber(value: isActive) } } diff --git a/AltStore/Operations/AuthenticationOperation.swift b/AltStore/Operations/AuthenticationOperation.swift index 054ba403..4104503e 100644 --- a/AltStore/Operations/AuthenticationOperation.swift +++ b/AltStore/Operations/AuthenticationOperation.swift @@ -231,8 +231,7 @@ class AuthenticationOperation: ResultOperation<(ALTTeam, ALTCertificate, ALTAppl let activeAppsMinimumVersion = OperatingSystemVersion(majorVersion: 13, minorVersion: 3, patchVersion: 1) if team.type == .free, ProcessInfo.processInfo.isOperatingSystemAtLeast(activeAppsMinimumVersion) { - // Free developer accounts are limited to only 3 active sideloaded apps at a time as of iOS 13.3.1. - UserDefaults.standard.activeAppsLimit = 3 + UserDefaults.standard.activeAppsLimit = ALTActiveAppsLimit } else {