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

ぽっかめろん

ゲームとかプログラミングとか

CocoaPodsでMKNetworkKitを入れようとしたら詰まった話

MKNetWorkKitという便利なライブラリがあるらしいけど、CocoaPodsでいざインストールしてCommand-Rすると

f:id:popkirby:20130204202025p:plain

どうやら、

#if NEEDS_DISPATCH_RETAIN_RELEASE
@property (nonatomic, assign) dispatch_queue_t reachabilitySerialQueue;
#else
@property (nonatomic, strong) dispatch_queue_t reachabilitySerialQueue;
#endif

の部分でエラーが起きているらしい。ただiOS 6.0以降だと dispatch_queue_t に対してもARCが有効なはずなのになんでだろうと思っていたら、

#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 60000 // iOS 6.0 or later
#define NEEDS_DISPATCH_RETAIN_RELEASE 0
#else                                         // iOS 5.X or earlier
#define NEEDS_DISPATCH_RETAIN_RELEASE 1
#endif

という感じでARCが有効かどうかしらべてるけど、dispatch_queue_t 自体は OS_OBJECT_USE_OBJC が1であるかどうかで ARC に対応させるか決めてるらしい(<os/object.h> あたり)。



ということは OS_OBJECT_USE_OBJC が 0 になってるということだけど、どうしてだろうと思ったら CocoaPods が気配りを効かせていたせいだった。

f:id:popkirby:20130204203454p:plain

GCDを利用しているライブラリで、GCDのオブジェクトに対してARCが適用されることに対する修正をまだしていないライブラリもそれなりに多い(と思う)から、-DOS_OBJECT_USE_OBJC を標準で付加してるんだと思う。

podspecの方で変えられるようなのでPull Requestを投げるならそっちのほうだろうなあ。

というわけで -DOS_OBJECT_USE_OBJC=1にしたら解決。