warningの内容
Swift3プロジェクトをSwift4へマイグレーションさせた際に、以下のようなwarningが出る場合があります。
The use of Swift 3 @objc inference in Swift 4 mode is deprecated. Please address deprecated @objc inference warnings, test your code with “Use of deprecated Swift 3 @objc inference” logging enabled, and then disable inference by changing the "Swift 3 @objc Inference" build setting to "Default" for the "ターゲット名" target.
warningの説明
まず、Swift4の@objc
についてはこちらの記事で説明しています。
Qiita | attributeまとめ[Swift4対応]
Swift3では@objc
が明示的に付与されてない定義にも@objc
が暗黙的に推論され、付与されていました。Swift4ではSwift3での@objc
推論が非推奨となったため、設定を見直したほうが良いという警告です。この警告がでている際は、Swift3の@objc
互換モードでビルドされるため、非推奨の@objc
推論は有効になっています。
対応方法
TargetのBuild Settings設定の中に、Swift3 @objc Infence
という項目があるので、これをDefaultに変更します。
Swift3 @objc Infence の設定値 |
説明 |
---|---|
Default | Swift4でのデフォルト値(@objc 推論が無効) |
On | Swift3での@objc 推論を有効にする(非推奨) |
Off | Swift3での@objc 推論を無効にする |
(DefaultとOffは何が違うのだろう...🤔) |
なお、@objc
推論が利用されているエントリポイントをログ出力により調べる場合には、以下の記事が参考となります。
The use of Swift 3 @objc inference in Swift 4 mode is deprecated?
SWIFT_DEBUG_IMPLICIT_OBJC_ENTRYPOINT environmental variable to values from 1 to 3 to see the usages of the Objective-C entry points in the logs.