はじめに
Xcode 10 Beta を使って個人アプリの Swift のバージョンを
4.1
から 4.2
にバージョンアップして,出たエラーの対応を
している際に下記エラーが発生してビルドが通らない。
1. While deserializing SIL global "UIEdgeInsetsZero" error: Abort trap: 6
Stackoverflow の記事1を参考にして解決できました。
環境
- Swift 4.2
- Xcode 10 Beta 2
- macOS High Sierra (10.13.4)
解決策
どこかに下記のコードを書くと,ビルドが通るようになった。
#if swift(>=4.2)
import UIKit.UIGeometry
extension UIEdgeInsets {
public static let zero = UIEdgeInsets()
}
#endif
記事にあるように Xcode 10 Beta のリリースノート2(要ログイン)に
UIEdgeInsetsZero
について記載がある。
Use of the zero property on UIEdgeInsets causes a compiler crash in the “Merge swiftmodule” build step. The crash log will mention “UIEdgeInsetsZero” at the very end. (40735990)
Workaround: Use the initializer instead: UIEdgeInsets().
UIEdgeInsets
で zero
を使うとビルドの際にコンパイラクラッシュが起きる。
最後にクラッシュログとして UIEdgeInsetsZero
について言及される。
解決策としては, UIEdgeInsets()
をイニシャライザとして使いなさい。
おわりに
今回は,Xcode 10 Beta で起きる UIEdgeInsetsZero
周りのエラーについて書きました。
リリースノートはしっかりみるべきだなと反省しました。
これまでの書き方が悪いのか 4.1
から 4.2
は結構赤くなる。
bringSubviewToFront
とか sendSubviewToBack
とかはわかりやすいからいいかな。
業務のプロジェクトたちの方はまだやっていないけどすんなり移行できるといいなぁ・・・(棒)