macOS High SierraになりSwiftも4にバージョンアップ。
TouchdownもSwift 3からSwift 4に移行します。
基本的にはXcodeの移行ツールに従うだけで、途中で聞かれる
- Minimize Inference
- Match Swift 3 Behavior
もせっかくなのでSwift 4推奨のMinimize Inferenceを選択しました。
ワーニングやエラーを手動で修正して実行したところ、以下のエラーが発生。
[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (ConvertSetting) for key (NS.objects); the class may be defined in source code or a library that is not linked
Swift 3版でConvertSettingというクラスをarchiveして保存していたのですが、Swift 4版では互換性がなくなり復元できなくなってしまいました。
原因を調べてみたところ、Swift 3では自動で付与されていた@objcが、Swift 4では自動で付与されなくなり、今後は明示的に記述する必要があるようです。
つまり、もともとCocoa BindingのためConvertSettingには暗黙で@objcが付いていたのが、Swift 4以降のタイミングで付与されなくなったと予想。
クラス定義の部分に
@objc(ConvertSetting)
を追記することで解決しました。
Cocoa Bindingのため@objcMembersも記載してあります。
というわけで、Swift 4(macOS High Sierra)版Touchdownは既知の不具合などを修正してからリリース予定です。