From 053cc9fedae793f742f5b741ea55ed026535e7ec 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 | 11 +++++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/AltStore/Settings/SettingsViewController.swift b/AltStore/Settings/SettingsViewController.swift index 550e79dc..3df54d91 100644 --- a/AltStore/Settings/SettingsViewController.swift +++ b/AltStore/Settings/SettingsViewController.swift @@ -250,10 +250,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 0f3c512f..a5d98e55 100644 --- a/AltStoreCore/Extensions/UserDefaults+AltStore.swift +++ b/AltStoreCore/Extensions/UserDefaults+AltStore.swift @@ -60,6 +60,7 @@ public extension UserDefaults @NSManaged @objc(activeAppsLimit) private var _activeAppsLimit: NSNumber? @NSManaged var ignoreActiveAppsLimit: Bool + @NSManaged var isMacDirtyCowSupported: Bool class func registerDefaults() { @@ -70,6 +71,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.isBackgroundRefreshEnabled): true, #keyPath(UserDefaults.isLegacyDeactivationSupported): isLegacyDeactivationSupported, @@ -77,9 +81,16 @@ public extension UserDefaults #keyPath(UserDefaults.localServerSupportsRefreshing): localServerSupportsRefreshing, #keyPath(UserDefaults.requiresAppGroupMigration): true, #keyPath(UserDefaults.ignoreActiveAppsLimit): false, + #keyPath(UserDefaults.isMacDirtyCowSupported): isMacDirtyCowSupported, ] 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 + } } }