From 0db5e3caabf29d79b51350b3a96bf481bd9734ab Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Mon, 29 May 2023 12:10:44 -0500 Subject: [PATCH] =?UTF-8?q?Adds=20=E2=80=9CDisable=20Response=20Caching?= =?UTF-8?q?=E2=80=9D=20debug=20setting?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When enabled, AltStore will ignore cached responses for certain requests and will always make a new request to the server. This is useful for development when repeatedly testing changes to remote files. Limited to UpdateKnownSourcesOperation for now, but will eventually affect fetching sources as well. --- .../UpdateKnownSourcesOperation.swift | 17 +++++++- AltStore/Settings/Settings.storyboard | 39 ++++++++++++++++++- .../Settings/SettingsViewController.swift | 10 ++++- .../Extensions/UserDefaults+AltStore.swift | 5 +++ 4 files changed, 68 insertions(+), 3 deletions(-) diff --git a/AltStore/Operations/UpdateKnownSourcesOperation.swift b/AltStore/Operations/UpdateKnownSourcesOperation.swift index 62f98e1e..e553b5f1 100644 --- a/AltStore/Operations/UpdateKnownSourcesOperation.swift +++ b/AltStore/Operations/UpdateKnownSourcesOperation.swift @@ -30,11 +30,26 @@ extension UpdateKnownSourcesOperation class UpdateKnownSourcesOperation: ResultOperation<([KnownSource], [KnownSource])> { + private let session: URLSession + + override init() + { + let configuration = URLSessionConfiguration.default + + if UserDefaults.standard.responseCachingDisabled + { + configuration.requestCachePolicy = .reloadIgnoringLocalCacheData + configuration.urlCache = nil + } + + self.session = URLSession(configuration: configuration) + } + override func main() { super.main() - let dataTask = URLSession.shared.dataTask(with: .sources) { (data, response, error) in + let dataTask = self.session.dataTask(with: .sources) { (data, response, error) in do { if let response = response as? HTTPURLResponse diff --git a/AltStore/Settings/Settings.storyboard b/AltStore/Settings/Settings.storyboard index 5fa23e6d..09dd7fa3 100644 --- a/AltStore/Settings/Settings.storyboard +++ b/AltStore/Settings/Settings.storyboard @@ -649,7 +649,7 @@ - + @@ -657,6 +657,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -671,6 +707,7 @@ + diff --git a/AltStore/Settings/SettingsViewController.swift b/AltStore/Settings/SettingsViewController.swift index a38103b5..88329e23 100644 --- a/AltStore/Settings/SettingsViewController.swift +++ b/AltStore/Settings/SettingsViewController.swift @@ -53,6 +53,7 @@ extension SettingsViewController { case sendFeedback case refreshAttempts + case responseCaching } } @@ -71,6 +72,7 @@ class SettingsViewController: UITableViewController @IBOutlet private var backgroundRefreshSwitch: UISwitch! @IBOutlet private var enforceThreeAppLimitSwitch: UISwitch! + @IBOutlet private var disableResponseCachingSwitch: UISwitch! @IBOutlet private var versionLabel: UILabel! @@ -159,6 +161,7 @@ private extension SettingsViewController self.backgroundRefreshSwitch.isOn = UserDefaults.standard.isBackgroundRefreshEnabled self.enforceThreeAppLimitSwitch.isOn = !UserDefaults.standard.ignoreActiveAppsLimit + self.disableResponseCachingSwitch.isOn = UserDefaults.standard.responseCachingDisabled if self.isViewLoaded { @@ -331,6 +334,11 @@ private extension SettingsViewController } } + @IBAction func toggleDisableResponseCaching(_ sender: UISwitch) + { + UserDefaults.standard.responseCachingDisabled = sender.isOn + } + @IBAction func addRefreshAppsShortcut() { guard let shortcut = INShortcut(intent: INInteraction.refreshAllApps().intent) else { return } @@ -591,7 +599,7 @@ extension SettingsViewController toastView.show(in: self) } - case .refreshAttempts: break + case .refreshAttempts, .responseCaching: break } case .account, .patreon, .instructions, .macDirtyCow: break diff --git a/AltStoreCore/Extensions/UserDefaults+AltStore.swift b/AltStoreCore/Extensions/UserDefaults+AltStore.swift index 7bda64f6..9b3551f4 100644 --- a/AltStoreCore/Extensions/UserDefaults+AltStore.swift +++ b/AltStoreCore/Extensions/UserDefaults+AltStore.swift @@ -63,6 +63,7 @@ public extension UserDefaults @NSManaged var isCowExploitSupported: Bool @NSManaged var permissionCheckingDisabled: Bool + @NSManaged var responseCachingDisabled: Bool class func registerDefaults() { @@ -107,5 +108,9 @@ public extension UserDefaults // Disable ignoreActiveAppsLimit if running iOS version that doesn't support MacDirtyCow. UserDefaults.standard.ignoreActiveAppsLimit = false } + + #if !BETA + UserDefaults.standard.responseCachingDisabled = false + #endif } }