【发布时间】:2020-04-02 07:29:18
【问题描述】:
我使用 CocoaPods 来管理我的私有组件。现在我有一个组件Test。其中一个类的声明如下:
open class Test {
open dynamic func test() {
print("test")
}
}
我对这个组件没有任何问题,它已经在我的私人仓库中
现在我有另一个名为Test2 的组件。我想用Test2中的@_dynamicReplacement(for:)来交换Test中的test()方法如下:
public extension Test {
@_dynamicReplacement(for: test())
public func test2() {
print("test2")
}
}
现在我想把 Test2 打包成一个 pod 组件,比如 Test。
但是当我执行pod spec lint时,却报错:
<unknown>:0: error: fatal error encountered during compilation; please file a bug report with your project and the crash log
<unknown>:0: note: unsupported relocation with subtraction expression, symbol '_$s9MBCRouter6RouterC23MBCNavigationController0cdB010NavigationORszrlE15navigationTest2yyF' can not be undefined in a subtraction expression
我发现这个问题只出现在x86_64i386上。
我尝试创建一个同时集成Test 和Test2 的项目。
当我在真机上运行它时,它运行良好。但是当我在模拟器上运行时,却报错了!
当我将上面的第二段代码放在测试组件中时,它没有任何问题。
所以我认为重现这个bug需要以下两个条件:
- 在
pod B中,使用@_dynamicReplacement(for:)交换其他 pod 组件中的方法 - 在模拟器中运行项目
我发现了这个问题,但我无法解决,谁能帮忙解决这个问题?非常感谢!
最后我想说说我的开发环境
- 我使用 CocoaPods 1.9.1、Xcode 11.4 和 Swift 5.2。
- podfile 中仅使用
use_frameworks! -
Test和Test2.podspec文件集static_framework = true
【问题讨论】: