CocoaPods 库中的强 dispatch_queue_t

Posted

技术标签:

【中文标题】CocoaPods 库中的强 dispatch_queue_t【英文标题】:Strong dispatch_queue_t in CocoaPods library 【发布时间】:2014-12-03 09:24:45 【问题描述】:

在可能使用 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 错误:

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

我尝试比较 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

【问题讨论】:

【参考方案1】:

Seems 就像旧的 CocoaPods 一样正在重新定义 OS_OBJECT_USE_OBJC 打破 OS_OBJECT_HAVE_OBJC_SUPPORT

我们通过检查 OS_OBJECT_USE_OBJC 并使用更新的 CocoaPods 得到了这个 fixed。

【讨论】:

以上是关于CocoaPods 库中的强 dispatch_queue_t的主要内容,如果未能解决你的问题,请参考以下文章

在应用程序扩展中找不到库中的 cocoapods

Cocoapods:制作 Cocoapod - 导入 Alamofire 和其他库

iOS使用cocoapods 安装libwebp 0.6.1遇到Error installing libwebp

如何通过 CocoaPods 使用本地项目

完成按钮在 IQkeyboardManager 库中不可见

.NET Core 中的强类型配置忽略 JsonProperty 属性