時代に翻弄されるエンジニアのブログ

ゲームプログラマをやっています。仕事やゲームや趣味に関してつらつら書きたいと思います。

'ld: library not found for -' エラーがでたけど超初歩的なミスだった。[swift] [CocoaPods]

こんにちは

最近Swiftアプリを作っている筆者です。

その中でも今日はタブとビューを同期的に遷移できるライブラリについて紹介します。

と思ったのですが使い方はすでに先人が多くいるので今日は僕が詰まったところについて解説しようと思います。

そのライブラリはXLPagerTabStripといいます。

github.com

このライブラリの使い方については以下のサイトを参考にしてください。

qiita.com


導入にあたって、すぐできると思っていたのですが

ライブラリの導入から実行するまでかなりの紆余曲折がありました。

始めに行っておきますが、本当に初心者の超初歩的ミスなのでそのつもりで見てください。

何をしたのか

  • ライブラリはCocoaPodsからダウンロードする
  • インストールがおわったら、Xcodeからライブラリを入れたプロジェクトを起動

Xcodeを起動した段階で以下のエラーが発生しました。

- ld: library not found for -XLPagerTabStrip
- clang: error: linker command failed with exit code 1 (use -v to see invocation)

意味はXLPagerTabStripがないということです。おかしいですよね、さっきライブラリを入れたばかりだったのにおかしいですよね?

結論

もう結論を言うと、インストール後に起動するファイルを間違っていました。

CocoaPodsからライブラリを入れた場合の正しい手順は以下のようになります。

  • ライブラリはCocoaPodsからダウンロードする
  • インストールがおわったら、<プロジェクト名>.xcworkspaceが作成される。
  • <プロジェクト名>.xcworkspaceを実行する。

僕の手順との違いはXcodeからプロジェクトを実行するのか、ライブラリから生成されたファイルを実行するのかの違いです。

解説

swiftのプログラムは実行単位である"project"とそれらを包括して管理する"workspace"からなります。

はじめswiftのアプリを作るとprojectの単位で生成されます。しかし、CocoaPodsでライブラリを導入するとworkspaceの単位でアプリのライブラリに対する依存を管理することになるのでprojectのみでは実行ができないということになります。

つまり、CocoaPodsで生成される<プロジェクト名>.xcworkspaceはworkspaceであり、ライブラリを入れたプロジェクトを包括してるので、これを実行するべきだったというお話です。

僕はこれに苦しめられたので、もうそんな人が出ないようにしてほしいです。

参考サイト

  • CocoaPodsでライブラリインストー

qiita.com

  • projectとworkspace 決め手となったサイト

qiita.com