CocoaPodsとApple Mach-O Linker Errorとlinker command failed with exit code 1の解決方法


# で、結局何したら直るの

ググってもググっても、何やっても消えない「**Apple Mach-O Linker Error**」と「**linker command failed with exit code 1**」のお話です。きっと、ここで書いている内容をやってみても、直らないかもしれない。けど、参考になるかもしれない。やったことと、参考にしたサイトをまとめておきます。

※私の体験で決定的だった解決策は、**[一番下](https://qiita.com/sutchan/items/0a78042261ca3f0a7d91#4-%E6%B1%BA%E5%AE%9A%E6%89%93%E3%83%93%E3%83%AB%E3%83%89%E3%81%99%E3%82%8B%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%82%92%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%A8pods%E3%81%A8%E3%82%82%E3%81%AB%E6%8F%83%E3%81%88%E3%82%8B)**に書いておきます。

### 前提条件

- CocoaPodsを使用したプロジェクト
- ライブラリへのパスは間違っていない（はず）
- CocoaPodsはとりあえずは最新版にした

## 1. そもそも……開くファイル間違えていないか

CocoaPodsを使用しているプロジェクトでは、「.xcodeproj」のファイルから開くとビルドできません。「**.xcworkspace**」を開きます。ここがまず第一のハマりどころ。

参考：[初めてのCocoaPodsでLinker command failed with exit code 1でハマる](http://blugrit.com/2015/02/03/%E5%88%9D%E3%82%81%E3%81%A6%E3%81%AEcocoapods%E3%81%A7linker-command-failed-with-exit-code-1%E3%81%A7%E3%83%8F%E3%83%9E%E3%82%8B/)

## 2. pod update、pod install したか

他人が作業を進めているブランチをcheckoutした場合に、よく遭遇します。まずは落ち着いて`pod install`または`pod update`しましょう。ビルドに必要なライブラリをローカルに導入します。

## 3. 不要な“\”が入っていたりしないか、$(inherited)になっているか

`pod install`をすると、下のようなメッセージが出てきます。

```
[!] The `[プロジェクト名]` target overrides the `OTHER_LDFLAGS` build setting defined in `[GHUnitのパス]'. This can lead to problems with the CocoaPods installation
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.
```

**OTHER_LDFLAGS**の設定がオーバーライドされてますよ、という話のようで、たまに問題を起こすから、「**$(inherited)**」にしておくと良いよ、という話です。
この設定を確認するには、Project Navigatorからプロジェクトを選択し、Build Settingの一覧で「OTHER_LDFLAG」で検索します。

参考：

- [U2Kの覚え書き, 【Xcode】【iOS】ライブラリ導入時のApple Mach-O Linker Error. library not found for -l curl【謎のエラー？】](http://qiita.com/kuuki_yomenaio/items/b1b826a45ee6ff00eb90#1-6)
- [clang: error: linker command failed with exit code 1 ](http://u2k772.blog95.fc2.com/blog-entry-273.html)

## 4. 【決定打】ビルドするアーキテクチャの設定を、プロジェクトとPodsともに揃える

このエラーを抜け出す決定打だったのが、この設定でした。下に参考したサイトを挙げておきます。

Podsとプロジェクトの、「**Build Active Architecture Only**」の項目を、**どちらもYesまたはNoに統一**してくださいということだそうです。CocoaPodsのTroubleShootingにも書いてありました……。

![Build Active Architecture Onlyのチェック箇所画像](https://qiita-image-store.s3.amazonaws.com/0/75329/3fc5bd37-0af3-eb8c-56b4-3902f1df7def.png)

Podsの方を選択した時も、確認する場所は2箇所！
どちらもNoになっていると思っても、Podsの方がYesになっていることがよくあるので、気をつけてください！
<img width="388" alt="スクリーンショット 2016-07-25 20.06.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/75329/882800f2-9cc8-d8db-9bce-a3696f8ec077.png">


「Build Active Architecture Only」の設定は、必要なアーキテクチャのみでビルドするかどうかを設定する項目です。例えば、プロジェクトが「no」、Podsが「yes」のように異なった設定になっていると、ビルド時に「ライブラリが足りません、ありません」とエラーが発生するようです。

そんなの気付かないよ……> <

参考：

- [stackoverflow, CocoaPods arm64 issue](http://stackoverflow.com/questions/19419781/cocoapods-arm64-issue)
- [CocoaPods Troubleshooting](http://guides.cocoapods.org/using/troubleshooting.html#running-into-build-failures-after-migrating-to-xcode--and-cocoapods-)
- [Qiita, cocoapodsを導入したプロジェクトでアーキテクチャ周りのビルドエラーになる時](http://qiita.com/yimajo/items/df7264d7dcc78a57a75d)

---

以上が、私の「Apple Mach-O Linker Error」と「linker command failed with exit code 1」と戦った、記録です。戦いの参考になればと思います。