Xcode＋CocoaPodsで起こった問題と対処

CocoaPodsで発生したエラーに諸々対処。

# pod updateでエラー
> /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:245:in `mkdir': Permission denied - /Library/Ruby/Gems/2.0.0/extensions/universal-darwin-14 (Errno::EACCES)
...

他にも諸々エラーが発生しました。
とりあえずこれに関してはまずgemのアップデートからしろってことで普通に

```$sudo gem update```

アップデートが完了したあとで、

```$pod update```

# アップデート後にエラー
> [!] Unable to load a specification for the plugin `/Library/Ruby/Gems/2.0.0/gems/cocoapods-try-release-fix-0.1.2`

以下のURLを参考に、削除
https://github.com/CocoaPods/CocoaPods/issues/2641

```$ [sudo] gem uninstall cocoapods-try-release-fix```



# Podfile.lock No such file or directory
>diff: /../Podfile.lock: No such file or directory
diff: Manifest.lock: No such file or directory error:
The sandbox is not in sync with the Podfile.lock. Run ‘pod install’ or update your CocoaPods installation.`

pod installしたのに、なぜかこんなことを言われてビルドエラーに。
以下のURLを参考に、User-Definedを追加しました。

◆ Podインストールしたのに「diff: /../Podfile.lock: No such file or directory」のエラーが出現した際の対処法
http://www.ateliee.com/archives/2364

1. プロジェクトのBuild-SettingsにUser-Definedがなければ、追加
![スクリーンショット 2015-05-07 11.58.11.png](https://qiita-image-store.s3.amazonaws.com/0/34166/dfef8a51-764f-efd0-ef07-977a271f4fd8.png)
　

2. 名前をPODS_ROOT、値を${SRCROOT}/Podsに設定
![スクリーンショット 2015-05-07 13.09.35.png](https://qiita-image-store.s3.amazonaws.com/0/34166/66863cb4-729f-5513-8191-aa95e39122d6.png)
　

3. pod installのやり直し(.xcworkspace、Podfile.lock、Podsの削除）


# header file が file not foundになる
> 'SDWebImage/UIImageView+WebCache.h' file not found
>  'AFNetworking/AFHTTPRequestOperation.h' file not found

今度はヘッダファイルがfile not foundに…。
なんかこんな感じで、これまで通っていた下記のようなimportでエラーが発生してきました。
```#import <UIImageView+WebCache.h>```

header search pathに定義を追加したり色々しましたが全てダメでしたが、
結果として以下のURLを参考にTargetを編集したら直りました。

◆ Cocoapods can't find header xcode 6
http://stackoverflow.com/questions/26095775/cocoapods-cant-find-header-xcode-6

ProjectのInfoタブから、ConfigurationsでNoneになっている箇所を修正します。
![ss.png](https://qiita-image-store.s3.amazonaws.com/0/34166/12d48079-8c17-cef8-2f84-646a7bb4107b.png)



とりあえず私の環境では、ここまでを行った時点で正常にビルドが通るようになりました。


と思ったら、また実機インストールで動かなくなった…ので、対処方法追加

# Linkerエラー
> clang: error: linker command failed with exit code 1 (use -v to see invocation)

-lPodsやら、-lAFNetworkingやらがLinkerエラーを起こしました…。
とりあえず、PodsのProjectも含めて「Build Settings->Architectures/Build Active Architecture Only」がYESになっていたら、NOに変更しましょう。


5/29追記
それでもlinker errorになることがあったので。
「Build Settings->Other Linker Flags」を確認して、「$(inherited)」が設定されていなかったら追加しましょう。

**※ちなみに、これはPROJECTに対して追加しても意味がありません。
各TARGETのOther Linker Flagsに対して追加してください。**

2017/08/23追記
古いプロジェクトで、何をやってもLinker Errorが取れなかったので調べたところ、以下が参考になった。
https://github.com/CocoaPods/CocoaPods/issues/5779

記事内の解決方法とは少し違うが、Podsの`0.*.*`からメジャーバージョンにアップデートした場合に`Linked Frameworks and Libraries`に古い`Pods.a`ファイルが残っていることがある。
これが残ったままだとLinker Errorが取れない。

# Shell Script invocation error
Run custom shell script 'Copy Pods Resources' で変なエラーが。

> line 2: /xxx/Pods/Pods-resources.sh: No such file or directory

とかよく分からないことを言っています。
諸々調べたがよく分からないので、とりあえずPods-resources.shを探してみたら
最新のcocoapodsでインストールした環境には存在しない……？

![スクリーンショット 2015-05-07 15.58.35.png](https://qiita-image-store.s3.amazonaws.com/0/34166/a8e8e2d2-fd16-d610-40ac-48a6b2e56546.png)

と思ったら、これはどうも記述が古くて最新のPodsではScriptの内容が
更新されているようでした。
そこで、記述を以下のように更新すれば通るようになります。

```"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh"```