Я использую CocoaPods для управления моими личными компонентами. Теперь у меня есть компонент Test
. Объявление одного из классов выглядит следующим образом:
open class Test {
open dynamic func test() {
print("test")
}
}
У меня нет проблем с этим компонентом, он уже находится в моем личном репо
Теперь у меня есть другой компонент с именем Test2
, Я хочу использовать @_dynamicReplacement(for:)
в Test2
для обмена методом 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_64
на i386
.
I попытался создать проект, который объединяет Test
и Test2
.
Когда я запускаю его на реальной машине, он работает нормально. Но когда я запускаю его на симуляторе , он сообщает об ошибке!
Когда я поместил второй фрагмент кода выше в компонент Test, он работал без проблем.
Так что я думаю, что для воспроизведения этой ошибки необходимы следующие два условия:
- В
pod B
используйте @_dynamicReplacement(for:)
для обмена методами в других компонентах модуля - Запустите проект в симуляторе
Я нашел эту проблему, но не могу ее решить, кто-нибудь может помочь решить эту проблему? Большое спасибо!
Наконец, я хочу поговорить о своей среде разработки
- Я использую CocoaPods 1.9.1, Xcode 11.4 и Swift 5.2.
- Только
use_frameworks!
используется в файлах подфайла Test
и Test2
.podspec
с набором static_framework = true