Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

コンパイル時の警告を減らす #224

Merged
merged 6 commits into from
Oct 13, 2024
Merged

コンパイル時の警告を減らす #224

merged 6 commits into from
Oct 13, 2024

Conversation

mtgto
Copy link
Owner

@mtgto mtgto commented Oct 13, 2024

Swift 6に向けて、Swift Concurrency回りのコンパイル時警告が出ているためいくつかを修正します。
#210 で書いてくれた一部の修正を採用しており、そのコミットには Co-authorとして @uhooi さんを記載しています。
https://docs.github.com/ja/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-with-multiple-authors

IMKInputControllerの派生クラスの各メソッドに @MainActor を設定

パッケージ IMKMethodKitのIMKInputControllerの各メソッドはおそらく @MainActor 扱いだと思うのですが、macOS 15 SDKの現状ではそうなっていないため各overrideしたメソッドに @MainActor をつけています。これはこれで基底クラスと合ってないよと言われるんですが↓、 @preconcurrency import InputMethodKit しても効果なかったので、いったんこれでいきます。

Main actor-isolated instance method 'deactivateServer' has different actor isolation from nonisolated overridden declaration; this is an error in the Swift 6 language mode

class内で NotificationCenter.default.notifications を使っているところはCombineで受信するようにする

次のようなコードはNotificationがSendableでないため警告が出ます。

for await notification in NotificationCenter.default.notifications(named: notificationNameOpenSettings) {
    settingsWindowController.showWindow(notification.object)
    NSApp.activate(ignoringOtherApps: true)
}

Non-sendable type 'Notification?' returned by implicitly asynchronous call to nonisolated function cannot cross actor boundary; this is an error in the Swift 6 language mode

class内で受信したNotificationを処理しているところはCombineで処理するようにします。

https://developer.apple.com/documentation/foundation/notificationcenter/3813137-notifications#discussion
にNotificationからSendableな別の値にcompactMapで変換すればいい例があったのですが、macSKKAppではSendableな型に変換できなかったのでそのままになっています。
CombineでやるにもAnyCancellableなmutable要素を持たせたくなかったので妥協してそのままです。

FileDict, UserDictは別PRで対応する

FileDictでたくさんの警告が残っています。

Main actor-isolated property 'dict' can not be mutated from a nonisolated context; this is an error in the Swift 6 language mode

現在はclass FileDict内でpropertyへの書き込みを行っているためさくっと直すのは難しいためこのPRで修正するのは見送ります。NSDocumentのサブクラスにして読み込みは並列可、書き込みだけ直列になるようにできるといいなと思っています。

@mtgto mtgto merged commit a169c26 into main Oct 13, 2024
1 check passed
@mtgto mtgto deleted the fix-warning branch October 13, 2024 12:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant