CocoaPods库中的强调度dispatch_queue_t

在可能使用iOS 5.x / OS X 10.7部署目标或较新版本构建的库中,我遇到了正确定义dispatch_queue_t属性的问题。

在大多数情况下,我可以按照此处的建议解决它:

 #if OS_OBJECT_HAVE_OBJC_SUPPORT // == 1 not really needed @property (nonatomic, strong) dispatch_queue_t loggerQueue; // An Objective-C object #else @property (nonatomic, assign) dispatch_queue_t loggerQueue; // AC pointer #endif 

这在手动创建静态库或直接在项目中包含文件时有效。

当此代码添加到CocoaPods库时,它会破坏iOS 6 + / OS X 10.8+部署目标。 CocoaPods正确设置部署目标,编译器确实设置OS_OBJECT_HAVE_OBJC_SUPPORT == 1并选择strong定义。 但是我得到了iOS 5.x / OS X 10.7错误:

具有“保留(或强)”属性的属性必须是对象类型

我尝试比较CocoaPods和静态库之间的结果环境变量,但没有什么看起来可疑。

现在我通过在使用CocoaPods构建时完全禁用strong定义来修补它:

 #if OS_OBJECT_HAVE_OBJC_SUPPORT && !defined(COCOAPODS) @property (nonatomic, strong) dispatch_queue_t loggerQueue; // Always disabled #else @property (nonatomic, assign) dispatch_queue_t loggerQueue; #endif 

似乎较旧的CocoaPods正在重新定义OS_OBJECT_USE_OBJC破坏OS_OBJECT_HAVE_OBJC_SUPPORT

我们通过检查OS_OBJECT_USE_OBJC并使用更新的CocoaPods来解决这个问题。