[iOS/Xcode/CocoaPods] pod install で OTHER_LDFLAGS が設定されない時

2013.07.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

CocoapodでGHUnit/GHUnit/AFNetworkingのライブラリを使う際にハマったのでメモします。

何が起こったか

ひと通りGHUnitの設定をしてpod installした時に下のような警告(エラー?)が出ました。

[!] The target `Tests [Debug]` overrides the `OTHER_LDFLAGS` build setting defined in `Pods/Pods-Tests.xcconfig'.
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

そしてそのままビルドすると

  だいぶ省略
  "_SCNetworkReachabilityGetFlags", referenced from:
      -[AFHTTPClient startMonitoringNetworkReachability] in libPods-Tests.a(AFHTTPClient.o)
ld: symbol(s) not found for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)

参照が見つからない子達がいるようです。
どうやら pod install時に
OTHER_LDFLAGSに既に何かの値が定義されていて上書き設定できませんよ。
と言われていた為です。
OTHER_LDFLAGS は Build Settings > Linking > Other Linker Flags で設定された値との事。
GHUnitの設定でOther Linker Flagsに-ObjC -all_loadを設定した為、AFNetworking に依存関係のあるライブラリがOther Linker Flagsに設定できなかったのが原因でした。

解決方法

エラーメッセージを見ると

    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

とありますのでBuild Settings > Linking > Other Linker Flags$(inherited)を設定した事で依存関係のあるライブラリがリンクされました。
設定の様子
${inherited}を設定したことで、CoreGraphics等のフレームワークがリンクされています。

まとめ

そもそもpod installした後にOther Linker Flagsの設定をする手順のようでしたが、順番が逆の場合に上記エラー&解決が必要です。$(inherited)を設定することで、プロジェクトの途中でライブラリを追加して依存関係がある場合でも対処できるようです。

おまけ 今日の英単語

inherited:(性質などを)受け継ぐ