読者です 読者をやめる 読者になる 読者になる

Xcode上でImplicit declaration of function 'notify_cancel' is invalid in C99 でハマった

Pureeをcocoapodsで導入しようとしてたら

Pureeが依存してるYapDatabaseというやつがCocoaLumberjackに依存してて、CocoaLumberjackのところでタイトルのエラーが出た。

Implicit declaration of function ‘notify_cancel’ is invalid in C99

f:id:masato47744:20170422004819p:plain

notify_cancelメソッドをクリックすると、osのコードっぽいところ/usr/include/notify.hにいきつく。

f:id:masato47744:20170422004848p:plain

Implicit declaration of function '' is invalid in C99というやつでググるコンパイラのフラグでどうのこうのとか、osのコードっぽいところまできたので、xcode7.3.1とかxcode8とかswiftのバージョンとかを疑ってしまって、CocoaLumberjackをビルド対象から外せないかとか、other_c_flagsとかで無視できるってissueとかにつられて、盛大にはまってしまった。

敵はここにいた・・

そもそもCocoaLumberjack単体でビルドできるのかとか試してたけどなんの問題もなくてどうしようかなーと考えてて、ふと、エラーが出る冒頭で、#include <notify.h>としてるんだけど、そこをクリックすると、なんとFoxのSDKのNotify.hに飛んだ:joy:

f:id:masato47744:20170422004913p:plain

解決策

Podfileに追記

+  # HEADER_SEARCH_PATHSからfoxSdkを削除する
+  def remove_fox_sdk_from_header_search_path(pod)
+    workDir = Dir.pwd
+    xcconfigFilename = "#{workDir}/Pods/Target\ Support\ Files/#{pod}/#{pod}.xcconfig"
+    xcconfig = File.read(xcconfigFilename)
+    newXcconfig = xcconfig.gsub('"${PODS_ROOT}/Headers/Public/foxSdk"', '')
+    File.open(xcconfigFilename, "w") { |file| file << newXcconfig }
+  end
+
+  ['CocoaLumberjack', 'YapDatabase'].each do |proj|
+    remove_fox_sdk_from_header_search_path proj
+  end

cf: http://dev.classmethod.jp/smartphone/iphone/cocoapods-inherited/