【问题标题】:Can't compile RxCocoa for Apple Watch无法为 Apple Watch 编译 RxCocoa
【发布时间】:2021-02-06 16:41:48
【问题描述】:

我一直在尝试编译一个包含 Apple Watch 扩展目标的现有 iOS 项目。

该项目使用 RxSwift/RxCocoa,在官方文档中阅读,与 watchOS 兼容。

项目在Apple Watch模拟器上编译运行成功,但在真正的Apple Watch上运行失败,报错如下:

Cannot find 'CGRectType' in scope
Cannot find 'CGPointType' in scope
Cannot find 'CGSizeType' in scope

这是因为这三个常量,在 RxCocoa 内部的类扩展中声明,是这样声明的:

#if arch(x86_64) || arch(arm64)
    let CGRectType = "{CGRect={CGPoint=dd}{CGSize=dd}}"
    let CGSizeType = "{CGSize=dd}"
    let CGPointType = "{CGPoint=dd}"
#elseif arch(i386) || arch(arm)
    let CGRectType = "{CGRect={CGPoint=ff}{CGSize=ff}}"
    let CGSizeType = "{CGSize=ff}"
    let CGPointType = "{CGPoint=ff}"
#endif

您知道是否有任何方法可以使它工作,因为这个库应该与 watchOS 兼容?

【问题讨论】:

  • 您使用的是哪个版本的 rx 库?您的目标是哪个版本的 watchOS?
  • 我已经尝试使用 RxSwift 6.0.0 RC1 和 watchOS 7。当我降级到 RxSwift 5 时,它似乎正在工作,即使现在我还有其他编译问题并且不确定如果解决了。

标签: swift apple-watch rx-swift watchos rx-cocoa


【解决方案1】:

我猜你还在使用旧版本的库(与最新版本的 watchOS 不兼容)

图书馆的正确定义应该是这样的

#if arch(x86_64) || arch(arm64)
    let CGRectType = "{CGRect={CGPoint=dd}{CGSize=dd}}"
    let CGSizeType = "{CGSize=dd}"
    let CGPointType = "{CGPoint=dd}"
#elseif arch(i386) || arch(arm) || arch(arm64_32)
    let CGRectType = "{CGRect={CGPoint=ff}{CGSize=ff}}"
    let CGSizeType = "{CGSize=ff}"
    let CGPointType = "{CGPoint=ff}"
#endif

根据图书馆网站上的这两个讨论帖

Fix build for new arm64_32 architecture

Xcode 10 GM: Use of unresolved identifier 'CGRectType'

它应该在最新版本的库中修复

【讨论】:

  • 实际上,我在使用最新版本的库 6.0.0 RC1 时遇到了问题,当降级到 5.0.0 时它可以正常工作......现在我还有其他问题,但不是那个跨度>
  • @LuigiTrevisi 很高兴听到您是否发现任何其他问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-06
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多