読者です 読者をやめる 読者になる 読者になる

libz.dylibが参照できなくなってる。。。どうする?

以前にリリースしたアプリの改修案件で遭遇したのでメモ。

現象

target > Build Phases > Link Binary With Librariesに追加されていた、 libz.dyliblibsqlite3.0.dylibが赤文字になり、参照できなくなっていた(´・ω・`)
その代わり、libz.tbdや、libsqlite3.0.tbdのような.tbd拡張子のファイルが引っかかるように。

対応

結論としては、.tbd.dylibの代替であるらしく、.dylibへの参照を消し、.tbdへの参照を追加すれば良いです。

以下は、.dylib.tbdについて気になったので調べてみた結果です。

.dylibとは

.dylibは、動的ライブラリですが、そもそも動的ライブラリと静的ライブラリは何が違うのでしょうか。

静的ライブラリ

静的ライブラリは、以下の図で示されているように、アプリのコンパイル時にコードが実行ファイル内にコピーされます。 そのため、アプリの容量が増え、使用メモリも増加します。 また、ライブラリがアップデートされても、開発者が手元のライブラリをアップデートし、 アプリを再コンパイルするまで、ユーザーはその恩恵にあずかることができません。
static library

出典 : Mac Developer Libraries - Overview of Dynamic Libraries

動的ライブラリ

動的ライブラリは、以下の図で示されているように、アプリのコンパイル時にはライブラリへの参照のみが記録されます。 そして、ランタイム上で必要となった際に初めて読み込まれます。 そうすることにより、アプリの容量が小さくなり、また使用メモリも少なくなります。 また、ライブラリ自体とは参照でつながっているため、ライブラリが更新されると、 開発者が何もせずともユーザーは即座にその恩恵にあずかることができます。 dynamic library

出典 : Mac Developer Libraries - Overview of Dynamic Libraries

.tbdとは

.tbdについては、公式には一切の情報がありません。
qiitaの記事stackoverflowにあるように、 dylibをロードするための設定を記載したテキストファイルのようです。
qiitaの記事に書いてあるように、SDKを軽量化するというのは、納得いきますが、stackoverflowにあるようにダウンロードサイズに変化はあるんでしょうか。。。?

まとめ

参考