在可能使用iOS 5.x / OS X 10.7部署目标或较新版本构建的库中,我遇到了正确定义dispatch_queue_t
属性的问题。
在大多数情况下,我可以按建议here解决它:
#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; // A C pointer
#endif
这在手动创建静态库或直接在项目中包含文件时有效。
当此代码添加到CocoaPods库时,它会破坏iOS 6 + / OS X 10.8+部署目标。
CocoaPods正确设置部署目标,编译器设置OS_OBJECT_HAVE_OBJC_SUPPORT == 1
并选择strong
定义。但是我得到了iOS 5.x / OS X 10.7错误:
具有'retain(或strong)'属性的属性必须是对象类型
我尝试比较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