From f9c22ff61730f24d58ec0fabfe9ffa7b41c8525d Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Tue, 7 Feb 2023 16:35:15 -0600 Subject: [PATCH] =?UTF-8?q?Force-enables=20=E2=80=9CEnforce=203-App=20Limi?= =?UTF-8?q?t=E2=80=9D=20if=20iOS=20version=20does=20not=20support=20MacDir?= =?UTF-8?q?tyCow=20exploit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Prevents “Enforce 3-App Limit” remaining enabled after updating iOS version without a way to disable it. --- AltStore/Settings/SettingsViewController.swift | 6 ++---- AltStoreCore/Extensions/UserDefaults+AltStore.swift | 13 ++++++++++++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/AltStore/Settings/SettingsViewController.swift b/AltStore/Settings/SettingsViewController.swift index 58c3d291..489a34d9 100644 --- a/AltStore/Settings/SettingsViewController.swift +++ b/AltStore/Settings/SettingsViewController.swift @@ -302,10 +302,8 @@ private extension SettingsViewController switch section { case .macDirtyCow: - let ios16_2 = OperatingSystemVersion(majorVersion: 16, minorVersion: 2, patchVersion: 0) - - let isMacDirtyCowExploitSupported = !ProcessInfo.processInfo.isOperatingSystemAtLeast(ios16_2) - return !(isMacDirtyCowExploitSupported && UserDefaults.standard.isDebugModeEnabled) + let isHidden = !(UserDefaults.standard.isMacDirtyCowSupported && UserDefaults.standard.isDebugModeEnabled) + return isHidden default: return false } diff --git a/AltStoreCore/Extensions/UserDefaults+AltStore.swift b/AltStoreCore/Extensions/UserDefaults+AltStore.swift index 4337319b..1e19ed56 100644 --- a/AltStoreCore/Extensions/UserDefaults+AltStore.swift +++ b/AltStoreCore/Extensions/UserDefaults+AltStore.swift @@ -71,6 +71,7 @@ public extension UserDefaults @NSManaged @objc(activeAppsLimit) private var _activeAppsLimit: NSNumber? @NSManaged var ignoreActiveAppsLimit: Bool + @NSManaged var isMacDirtyCowSupported: Bool class func registerDefaults() { @@ -81,6 +82,9 @@ public extension UserDefaults let ios14 = OperatingSystemVersion(majorVersion: 14, minorVersion: 0, patchVersion: 0) let localServerSupportsRefreshing = !ProcessInfo.processInfo.isOperatingSystemAtLeast(ios14) + let ios16_2 = OperatingSystemVersion(majorVersion: 16, minorVersion: 2, patchVersion: 0) + let isMacDirtyCowSupported = ProcessInfo.processInfo.isOperatingSystemAtLeast(ios14) && !ProcessInfo.processInfo.isOperatingSystemAtLeast(ios16_2) // MacDirtyCow supports iOS 14.0 - 16.1.2 + let defaults = [ #keyPath(UserDefaults.isAppLimitDisabled): false, #keyPath(UserDefaults.isBackgroundRefreshEnabled): true, @@ -92,10 +96,17 @@ public extension UserDefaults #keyPath(UserDefaults.requiresAppGroupMigration): true, #keyPath(UserDefaults.menuAnisetteList): "https://servers.sidestore.io/servers.json", #keyPath(UserDefaults.menuAnisetteURL): "https://ani.sidestore.io", - #keyPath(UserDefaults.ignoreActiveAppsLimit): false + #keyPath(UserDefaults.ignoreActiveAppsLimit): false, + #keyPath(UserDefaults.isMacDirtyCowSupported): isMacDirtyCowSupported ] as [String : Any] UserDefaults.standard.register(defaults: defaults) UserDefaults.shared.register(defaults: defaults) + + if !isMacDirtyCowSupported + { + // Disable ignoreActiveAppsLimit if running iOS version that doesn't support MacDirtyCow. + UserDefaults.standard.ignoreActiveAppsLimit = false + } } }