All about linking libraries | try! Swift Tokyo 2019 2-11 - niwatakoのはてなブログ
寄付窓口はこちら

All about linking libraries | try! Swift Tokyo 2019 2-11

iOSアプリを開発する際、ライブラリやフレームワークを使わないということはほとんどありません。 OSが提供するUIKitやSwift標準ライブラリを使いますし、サードバーティの便利なライブラリを使用することもあります。

そして、誰もが1度はリンクエラーや重複したシンボル、パッケージマネージャが出力するエラーメッセージに悩んだことがあることでしょう。 リンクエラーの解決が難しいのは、問題の原因がプロジェクト設定、ライブラリの種類・配布方法、実行先(デバイスやシミュレータ)の環境など多岐にわたるためです。

リンクとは何か、何が起こっているのかを学ぶことでその問題は解決できるようになります。

このセッションではLibraryとFramework、StaticとDynamicの違い、それぞれのメリットとデメリット、SwiftからImportするために必要なことを知り、外部のライブラリがどのようにして自分のアプリから利用できるようになるかという仕組みを解説します。

f:id:niwatako:20190322152724j:plain

Swiftが外部フレームワークやライブラリをどのようにインポートするか、様々な解決の仕方を話したいと思います

Embeded Libraryに指定するだけ?

f:id:niwatako:20190322152835j:plain

f:id:niwatako:20190322152840j:plain

f:id:niwatako:20190322152848j:plain

ビルドタイムなのかランタイムなのか

フレームワークにはバンドルがあるがライブラリにはない

f:id:niwatako:20190322152917j:plain

f:id:niwatako:20190322152930j:plain

静的か動的か、バンドルが歩かないかで説明しました

f:id:niwatako:20190322152958j:plain

f:id:niwatako:20190322153005j:plain

f:id:niwatako:20190322153009j:plain

ほとんどのフレームワークはモジュールを含みます

モジュールをもたないライブラリ

f:id:niwatako:20190322153027j:plain

f:id:niwatako:20190322153046j:plain

f:id:niwatako:20190322153053j:plain

f:id:niwatako:20190322153055j:plain

ブリッジングヘッダかモジュールマップを使う

ブリッジングヘッダは簡単

f:id:niwatako:20190322153117j:plain

f:id:niwatako:20190322153133j:plain

でもモジュールマップを常に使うのがおすすめです。

f:id:niwatako:20190322153158j:plain

f:id:niwatako:20190322153203j:plain

Swiftが見つけられるように親ディレクトリをインポートパスに指定

f:id:niwatako:20190322153230j:plain

f:id:niwatako:20190322153233j:plain

f:id:niwatako:20190322153249j:plain

f:id:niwatako:20190322153252j:plain

f:id:niwatako:20190322153257j:plain

これらはLinkerに必要になります

Dynamic

f:id:niwatako:20190322153311j:plain

f:id:niwatako:20190322153320j:plain

f:id:niwatako:20190322153327j:plain

f:id:niwatako:20190322153329j:plain

f:id:niwatako:20190322153342j:plain

エラーが出ています。なにかモジュールマップでおかしい。ヘッダファイルが見つからないことを意味します。

モジュールマップ、ヘッダーサーチパスが正しいか確認してください

f:id:niwatako:20190322153412j:plain

f:id:niwatako:20190322153417j:plain

ライブラリのリンクを貼る際になにか問題に直面したときにお役に立てれば