Каркас ObjectiveC не экспортирует некоторые классы

Я разработал инструмент под названием EzoRed (ezored.com). Это генерирует структуру для IOS или AAR для Android с нативным кодом (C ++).

Когда я получаю сгенерированный проект xcode и перетаскиваю его в свой пример проекта, я использую фреймворк без проблем. Когда я перетаскиваю только сгенерированный фреймворк (с отладочной версией фреймворка все работает нормально, но с релизом не работает.), Мое приложение компилируется, устанавливается на устройство или симулятор, но при запуске выдается ошибка:

введите описание изображения здесь

Я использую нм инструмент для проверки экспортированных символов и видеть, что только * Impl классы были экспортированы. Увидеть:

nm -gU build / ios / Универсальный релиз / EzoRed.framework / EzoRed

0000000000010a88 S _OBJC_CLASS_$_EZRAudioStreamerPlatformServiceImpl
0000000000010b28 S _OBJC_CLASS_$_EZRGreetingMessagePlatformServiceImpl
00000000000109e8 S _OBJC_CLASS_$_EZRHttpClientPlatformServiceImpl
0000000000010ab0 S _OBJC_METACLASS_$_EZRAudioStreamerPlatformServiceImpl
0000000000010b50 S _OBJC_METACLASS_$_EZRGreetingMessagePlatformServiceImpl
0000000000010a10 S _OBJC_METACLASS_$_EZRHttpClientPlatformServiceImpl
0000000000010d30 D __ZTIPU39objcproto28EZRHttpClientPlatformService11objc_object
0000000000010fa0 D __ZTIPU42objcproto31EZRAudioStreamerPlatformService11objc_object
0000000000011200 D __ZTIPU44objcproto33EZRGreetingMessagePlatformService11objc_object
0000000000010d18 D __ZTIU39objcproto28EZRHttpClientPlatformService11objc_object
0000000000010f88 D __ZTIU42objcproto31EZRAudioStreamerPlatformService11objc_object
00000000000111e8 D __ZTIU44objcproto33EZRGreetingMessagePlatformService11objc_object
000000000000c700 S __ZTSPU39objcproto28EZRHttpClientPlatformService11objc_object
000000000000c9c0 S __ZTSPU42objcproto31EZRAudioStreamerPlatformService11objc_object
000000000000cca0 S __ZTSPU44objcproto33EZRGreetingMessagePlatformService11objc_object
000000000000c740 S __ZTSU39objcproto28EZRHttpClientPlatformService11objc_object
000000000000ca00 S __ZTSU42objcproto31EZRAudioStreamerPlatformService11objc_object
000000000000cce0 S __ZTSU44objcproto33EZRGreetingMessagePlatformService11objc_object

Это очень странно, потому что все компилируется без проблем.

С отладочной версией фреймворка все работает нормально. Но с Release не работает.

Некоторые проверки:

Он был включен в файл моста:
https://github.com/ezored/sample-app/blob/master/source/ios/SampleApp/SampleApp/SampleApp-Bridging-Header.h

Это было на CMakeLists.txt:
https://github.com/ezored/sample-app/blob/master/vendor/target-ios-master/CMakeLists.txt#L132

Компилируется и устанавливается без проблем, но не запускается. Это показывает сообщение вверх.

Все файлы проекта находятся здесь, любой желающий может скачать и запустить:
https://github.com/ezored/sample-app

Используемые команды:

cmake --build . --config Debug  (is exported all files correct)
cmake --build . --config Release  (is exported only *Impl files)

Команда xcode direct имеет тот же эффект:

xcodebuild build -configuration "Debug"  (is exported all files correct)
xcodebuild build -configuration "Release"  (is exported only *Impl files)

Что я делаю не так? Спасибо за любую помощь.

1

Решение

Решение, которое я нашел, помещено в мой файл CMakeLists.txt:

CXX_VISIBILITY_PRESET по умолчанию

Потому что в файле ios.cmake у меня есть строки:


set(CMAKE_CXX_FLAGS "${XCODE_IOS_PLATFORM_VERSION_FLAGS} ${BITCODE} -fvisibility=hidden -fvisibility-inlines-hidden -fobjc-abi-version=2 -fobjc-arc ${CXX_FLAGS}")

https://github.com/ezored/target-ios/blob/master/build/files/ios.cmake#L284

Я не знаю, является ли это наилучшей практикой, и я постараюсь одобрить приложение в App Store.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]