@_dynamicReplacement(for:) 模拟器错误
@_dynamicReplacement(for: ) error in simulator
我使用 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
我发现这个问题只出现在i386
的x86_64
。
我试图创建一个集成了 Test
和 Test2
的项目。
当我在真机上运行它时,它工作正常。但是在模拟器上我运行的时候,报错!
当我将上面的第二段代码放在测试组件中时,它运行没有任何问题。
所以我认为重现这个bug需要满足以下两个条件:
- 在
pod B
中,使用@_dynamicReplacement(for:)
交换其他pod组件中的方法
- 运行模拟器中的项目
我发现了这个问题,但是我无法解决,谁能帮忙解决这个问题?非常感谢!
最后说一下我的开发环境
- 我使用 CocoaPods 1.9.1、Xcode 11.4 和 Swift 5.2。
- 只有
use_frameworks!
在 podfile 中使用
Test
和 Test2
.podspec
文件集 static_framework = true
要为模拟器构建,您需要将 @objc
属性添加到函数声明中,例如:
open class Test {
open @objc dynamic func test() {
print("test")
}
}
更新:更常见的解决方案(包括泛型)——在构建设置中将编译模式设置为增量,在这种情况下你不需要模拟器根本不需要使用 @objc
。
我使用 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
我发现这个问题只出现在i386
的x86_64
。
我试图创建一个集成了 Test
和 Test2
的项目。
当我在真机上运行它时,它工作正常。但是在模拟器上我运行的时候,报错!
当我将上面的第二段代码放在测试组件中时,它运行没有任何问题。
所以我认为重现这个bug需要满足以下两个条件:
- 在
pod B
中,使用@_dynamicReplacement(for:)
交换其他pod组件中的方法 - 运行模拟器中的项目
我发现了这个问题,但是我无法解决,谁能帮忙解决这个问题?非常感谢!
最后说一下我的开发环境
- 我使用 CocoaPods 1.9.1、Xcode 11.4 和 Swift 5.2。
- 只有
use_frameworks!
在 podfile 中使用
Test
和Test2
.podspec
文件集static_framework = true
要为模拟器构建,您需要将 @objc
属性添加到函数声明中,例如:
open class Test {
open @objc dynamic func test() {
print("test")
}
}
更新:更常见的解决方案(包括泛型)——在构建设置中将编译模式设置为增量,在这种情况下你不需要模拟器根本不需要使用 @objc
。