From 186deebf9b4283997e1fc66585c54265002237c4 Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Tue, 19 Mar 2024 19:55:55 -0700 Subject: [PATCH] Turn on strict concurrency. Fix some issues. --- .../ExtensionFeedAddRequestFile.swift | 4 +-- iOS/Article/ArticleIconSchemeHandler.swift | 31 ++++++++++--------- iOS/ErrorHandler.swift | 2 +- .../FeedTableViewSectionHeaderLayout.swift | 2 +- iOS/KeyboardManager.swift | 2 +- iOS/Settings/ArticleThemeImporter.swift | 2 +- xcconfig/NetNewsWire_project.xcconfig | 2 +- 7 files changed, 24 insertions(+), 21 deletions(-) diff --git a/Shared/ShareExtension/ExtensionFeedAddRequestFile.swift b/Shared/ShareExtension/ExtensionFeedAddRequestFile.swift index f23038645..6c70d5961 100644 --- a/Shared/ShareExtension/ExtensionFeedAddRequestFile.swift +++ b/Shared/ShareExtension/ExtensionFeedAddRequestFile.swift @@ -12,9 +12,9 @@ import Account final class ExtensionFeedAddRequestFile: NSObject, NSFilePresenter { - private static var log = OSLog(subsystem: Bundle.main.bundleIdentifier!, category: "extensionFeedAddRequestFile") + private static let log = OSLog(subsystem: Bundle.main.bundleIdentifier!, category: "extensionFeedAddRequestFile") - private static var filePath: String = { + private static let filePath: String = { let appGroup = Bundle.main.object(forInfoDictionaryKey: "AppGroup") as! String let containerURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: appGroup) return containerURL!.appendingPathComponent("extension_feed_add_request.plist").path diff --git a/iOS/Article/ArticleIconSchemeHandler.swift b/iOS/Article/ArticleIconSchemeHandler.swift index c1bc6df7c..64b81b300 100644 --- a/iOS/Article/ArticleIconSchemeHandler.swift +++ b/iOS/Article/ArticleIconSchemeHandler.swift @@ -38,20 +38,23 @@ final class ArticleIconSchemeHandler: NSObject, WKURLSchemeHandler { return } - let iconView = IconView(frame: CGRect(x: 0, y: 0, width: 48, height: 48)) - iconView.iconImage = iconImage - let renderedImage = iconView.asImage() - - guard let data = renderedImage.dataRepresentation() else { - urlSchemeTask.didFailWithError(URLError(.fileDoesNotExist)) - return - } - - let headerFields = ["Cache-Control": "no-cache"] - if let response = HTTPURLResponse(url: url, statusCode: 200, httpVersion: nil, headerFields: headerFields) { - urlSchemeTask.didReceive(response) - urlSchemeTask.didReceive(data) - urlSchemeTask.didFinish() + Task { @MainActor in + + let iconView = IconView(frame: CGRect(x: 0, y: 0, width: 48, height: 48)) + iconView.iconImage = iconImage + let renderedImage = iconView.asImage() + + guard let data = renderedImage.dataRepresentation() else { + urlSchemeTask.didFailWithError(URLError(.fileDoesNotExist)) + return + } + + let headerFields = ["Cache-Control": "no-cache"] + if let response = HTTPURLResponse(url: url, statusCode: 200, httpVersion: nil, headerFields: headerFields) { + urlSchemeTask.didReceive(response) + urlSchemeTask.didReceive(data) + urlSchemeTask.didFinish() + } } } diff --git a/iOS/ErrorHandler.swift b/iOS/ErrorHandler.swift index 64957ad3b..f726cd0ce 100644 --- a/iOS/ErrorHandler.swift +++ b/iOS/ErrorHandler.swift @@ -15,7 +15,7 @@ struct ErrorHandler { private static var log = OSLog(subsystem: Bundle.main.bundleIdentifier!, category: "Application") public static func present(_ viewController: UIViewController) -> (Error) -> () { - return { [weak viewController] error in + return { @MainActor [weak viewController] error in if UIApplication.shared.applicationState == .active { viewController?.presentError(error) } else { diff --git a/iOS/Feeds/Cell/FeedTableViewSectionHeaderLayout.swift b/iOS/Feeds/Cell/FeedTableViewSectionHeaderLayout.swift index 6cdefefb4..1c0dd8f55 100644 --- a/iOS/Feeds/Cell/FeedTableViewSectionHeaderLayout.swift +++ b/iOS/Feeds/Cell/FeedTableViewSectionHeaderLayout.swift @@ -9,7 +9,7 @@ import UIKit import RSCore -struct FeedTableViewSectionHeaderLayout { +@MainActor struct FeedTableViewSectionHeaderLayout { private static let labelMarginRight = CGFloat(integerLiteral: 8) private static let unreadCountMarginRight = CGFloat(integerLiteral: 16) diff --git a/iOS/KeyboardManager.swift b/iOS/KeyboardManager.swift index 1de01f5ab..c78a94e03 100644 --- a/iOS/KeyboardManager.swift +++ b/iOS/KeyboardManager.swift @@ -15,7 +15,7 @@ enum KeyboardType: String { case detail = "DetailKeyboardShortcuts" } -class KeyboardManager { +@MainActor final class KeyboardManager { private(set) var _keyCommands: [UIKeyCommand] var keyCommands: [UIKeyCommand] { diff --git a/iOS/Settings/ArticleThemeImporter.swift b/iOS/Settings/ArticleThemeImporter.swift index 4a6996831..e32d0476d 100644 --- a/iOS/Settings/ArticleThemeImporter.swift +++ b/iOS/Settings/ArticleThemeImporter.swift @@ -8,7 +8,7 @@ import UIKit -struct ArticleThemeImporter { +@MainActor struct ArticleThemeImporter { static func importTheme(controller: UIViewController, filename: String) throws { let theme = try ArticleTheme(path: filename, isAppTheme: false) diff --git a/xcconfig/NetNewsWire_project.xcconfig b/xcconfig/NetNewsWire_project.xcconfig index 56d11f1b5..134e1da54 100644 --- a/xcconfig/NetNewsWire_project.xcconfig +++ b/xcconfig/NetNewsWire_project.xcconfig @@ -44,7 +44,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 17.0 //SDKROOT = macosx SWIFT_SWIFT3_OBJC_INFERENCE = Off SWIFT_VERSION = 5.10 -SWIFT_STRICT_CONCURRENCY = targeted +SWIFT_STRICT_CONCURRENCY = complete // https://forums.swift.org/t/swift-packages-in-multiple-targets-results-in-this-will-result-in-duplication-of-library-code-errors/34892/33 DISABLE_DIAMOND_PROBLEM_DIAGNOSTIC = YES