技術

【iOS開発】CocoaPodsのライブラリ追加で発生するビルドエラーの原因と対処法

どうも、フリーランスのITエンジニア兼ブロガー兼投資家のKerubitoです。

iOS開発のライブラリ管理ツールであるCocoaPods。

新しくライブラリを追加したくなることってたまにあると思います。

追加の方法自体は簡単で、Podfileに追加したいライブラリを追記するだけです。

例えば、RealmSwiftを追加したい場合は以下のようになります。

追加前

pod 'Alamofire'
pod 'Swinject'
pod 'AWSCognito'

pod 'AWSCognitoIdentityProvider'
pod 'AWSKinesis'
pod 'AWSIoT'
pod 'AWSS3'

追加後

pod 'Alamofire'
pod 'Swinject'
pod 'AWSCognito'

pod 'AWSCognitoIdentityProvider'
pod 'AWSKinesis'
pod 'AWSIoT'
pod 'AWSS3'
pod 'RealmSwift'

そして、「pod install」をたたくだけ。

これだけでライブラリが追加できるわけですが、たまにビルドエラーとなります。

こういうやつですね。

Xcodeのビルドエラー

こういったエラーが発生する原因はSwiftのバージョンが変わったためです。

上の例で見てみましょう。

'commonModes' has been renamed to 'RunLoop.Mode.common'

Replace 'commonModes' with 'RunLoop.Mode.common'

「'commonModes'は'RunLoop.Mode.common'に名称変更したからさっさと直せよ」と怒られています。

一方的ですね。

対処方法としては2つあるかと。

一つ目はSwiftのバージョンをライブラリの指定バージョンに戻すという方法。

Podsのプロジェクトを選択→TARGETS配下のビルドエラーが発生しているライブラリを選択
→Build Settings→Swift Compiler-Language→Swift Language Viersion

ここでSwiftのバージョンを変更できます。

Swiftのバージョンを変更

これが手っ取り早いですし、確実な方法。

そもそもライブラリを追加しただけで既存ライブラリのSwiftバージョンが勝手に更新されてしまうこと自体が気持ち悪いんですが。

これに関しては、特に複雑なことも行ってないですし、対処法は今のところ不明・・・。

2つ目はビルドエラーの該当箇所を修正していく方法。

上の例でいうと

        _displayLink.remove(from: .main, forMode: .commonModes)

        _displayLink.remove(from: .main, forMode: .common)

です。

ただ、これはあまりおすすめしません。

今後該当のライブラリを更新しないというなら別ですが、自ら修正したのちにライブラリが更新されるとコンフリクトしたりと面倒なことになりかねないからです。

あと、Swiftのバージョンを変えてもビルドエラーが消えない場合は一度クリーンビルドしてみましょう。

以上、楽しい開発ライフを!

-技術

© 2021 Kerubitoのブログ