Примечание: Есть много вопросов SO со схожей проблемой, но почти все они имеют проблемы с запуском в Simulator, потому что им не удалось создать универсальные библиотеки. В этом случае у меня есть универсальная библиотека, я просто не могу понять, почему загрузчику устройств не нравится архитектура в оболочке.
Мы создаем некоторый код C ++, который использует Tensorflow Lite на нескольких платформах. Я пытаюсь связать его с нашей iOS сборкой. Я создал универсальную общую библиотеку с парой общих библиотек, созданных этой командой. Они создают их как отдельные общие библиотеки с одной архитектурой на файл (одна для macOS, одна для iOS arm64 и одна для iOS x86). Я соединил два файла iOS, используя lipo, и смог соединиться и запустить в симуляторе. К сожалению, я не могу использовать этот путь кода в Simulator (по другим причинам), поэтому я собрал и запустил на устройстве.
Но когда я пытаюсь запустить на устройстве, я получаю
dyld: Library not loaded: @rpath/libtensorflowlite.so
Referenced from: /private/var/containers/Bundle/Application/E3E3B0E9-B36E-4ADB-9FFC-CA2D6D2A8AC8/MyApp.app/MyApp
Reason: no suitable image found. Did find:
/private/var/containers/Bundle/Application/E3E3B0E9-B36E-4ADB-9FFC-CA2D6D2A8AC8/MyApp.app/Frameworks/libtensorflowlite.so: no matching architecture in universal wrapper
Я знаю, что в App Store не нравятся биты x86 в универсальных общих библиотеках, поэтому я использовал lipo на этапе сборки Xcode, чтобы удалить часть x86, и теперь мой файл выглядит так:
$ file /Users/rmann/Library/Developer/Xcode/DerivedData/MyApp-fdskkibuvbsubudkmqtgsjxmyqme/Build/Products/Debug-iphoneos/MyApp.app/Frameworks/libtensorflowlite.so
/Users/rmann/Library/Developer/Xcode/DerivedData/MyApp-fdskkibuvbsubudkmqtgsjxmyqme/Build/Products/Debug-iphoneos/MyApp.app/Frameworks/libtensorflowlite.so: Mach-O universal binary with 1 architecture: [arm64:Mach-O 64-bit dynamically linked shared library arm64]
/Users/rmann/Library/Developer/Xcode/DerivedData/MyApp-fdskkibuvbsubudkmqtgsjxmyqme/Build/Products/Debug-iphoneos/MyApp.app/Frameworks/libtensorflowlite.so (for architecture arm64): Mach-O 64-bit dynamically linked shared library arm64
Но он до сих пор этого не видит.
Я делаю нечто похожее с другой библиотекой, которую мы получаем от третьей стороны, и все работает отлично. Как я могу проверить это дальше, чтобы определить, в чем проблема? Спасибо.