anz blog
Swiftを中心にFlutterやらUnityなどに手を出してます

Carthage v0.37.0でSDWebImageWebPCoderがビルドできない問題(根本的な解決はしてません)(2021/03/10)

Carthage v0.37.0でSDWebImageWebPCoderがビルドできない問題(根本的な解決はしてません)

つかっていますか、Carthage の --use-xcframeworks オプションを。そこらの話です。

Carthage v0.37.0 とは

Xcode 12 が登場した頃は Carthage のバージョンは確か v0.36.0 が最新バージョンだったと思いますが、それだとビルドができないという問題が発生して Carthage ユーザはざわついていました。
その回避策としてこちらが紹介されています。
なぜこういうことが必要なのかはとかっていう詳しいことは issue のほうをみてください(笑)

そこで、v0.37.0 では .framework ではなく .xcframework を使うようにすることでこの問題を解決できるようになります。
Carthage ユーザ待望のバージョンアップがきたと言えるものです。

意気揚々と...ビルドできない!

いままでは自分も先に紹介した回避策を導入していましたが、その解決がなされたバージョン v0.37.0 がでたこともあって早速 --use-xcframework オプションをつけてやってみました。 ...のですが、ビルドエラーになるのです。

SDWebImageWebPCoderが...

なぜなのか考察

ビルドがエラーになるのは、Carthage の問題...ではなく、SDWebImageの構成が相性悪い感じの結果です。
SDWebImage で WebP を利用するためには SDWebImageWebPCoder を利用することになります。
Carthage/Checkouts を見るとわかるのですが、SDWebImage プロジェクトと SDWebImageWebPCoder プロジェクトが作られています。SDWebImageWebPCoder は SDWebImage を参照する設定がされているのですが、それが SDWebImage.framework を参照するように設定されています。
ですが、--use-xcframeworks オプションをつけてビルドすると作成されるのは SDWebImage.xcframework が作られるので読み込めない...と。
それで結果ビルドエラーになるのだと...多分(笑)

どうするのか(解決策ではない)

SDWebImageWebPCoder のほうで対応されない限り無理そうかな...と思いしばらく様子みていたのですが... 最近、issue のこちらのコメントを発見しました。

issue の本題は、Carthage の回避策の方をつかえばよいでしょう...という内容なのですが、コメントの方はもう少し踏み込んだ返答をしています。

We have no plan to support XCFramework in short peiord.

Actually, SDWebImage may totally shutdown Carthage support, keeping new Bazel, CocoaPods, SwiftPM only 3 ways.

「xcframework を近いうちにサポートする..みたいな予定はない。」
なるほどーまだしばらくかかるのかなー...
「Carthage のサポートを切るかもしれない。」
...!!??ナ、ナンダッテー!!

ということで、SDWebImageWebPCoder は Cocoapods にもっていくことにしました。
これがあってずっと --use-xcframeworks をつかえずにいたので、対応される可能性がうすそうであればさっさと諦めてしまったほうが色々いいかなと。

ってきり、SDWebImage でとあるバージョン以上からは Carthage v0.37.0+ します!みたいな対応がくるのかなと...思っていたのですがね。

補足

Realm もまだ --use-xcframeworks オプションに対応できていないのだけれど、こちらは対応されそうです。
PRが立てられていました。(SDWebImageの突破してもまだこれがあるので待ちの状態 笑)

参考