Xamarin.ios со встроенными фреймворками выдает Dllnotfound

#reference #xamarin.ios #frameworks #native

Вопрос:

Используя XCode, я создал 12 идентичных фреймворков, только их имена разные (каждый из них происходит от соответствующего названия проекта XCode).

Следуя этому руководству, я внедрил одну из платформ в проект Xamarin.ios в качестве собственной ссылки.

Использование [DllImport(«Фреймворк», точка входа = «Имя функции»)] Я могу получить доступ к любой из 12 платформ как в режиме отладки и выпуска, так и в симуляторе и на устройстве. Пока все идет хорошо.

НО при добавлении всех 12 фреймворков в проект Xamarin.ios во время запуска на устройстве начинают происходить странные вещи (симулятор почему-то не затрагивается!): доступ возможен только к нескольким фреймворкам (обычно 4), остальные выдают исключение Dllnotfound. И даже больше: в зависимости от последовательности добавления фреймворка в проект Xamarin.ios к нему можно получить доступ или создать исключение(!) Например, если я начну процесс добавления с одной из 8 «плохих» фреймворков из предыдущего процесса сборки, этот больше не будет плохим и к нему можно будет получить прекрасный доступ — взамен одна из доступных фреймворков из предыдущего процесса сборки затем выдаст Dllnotfound. Чтобы уточнить, все 12 фреймворков имеют одинаковую внутреннюю жизнь, только разные имена и разные имена точек входа, остальные полностью идентичны, следовательно, взаимозаменяемы.

Моей первой мыслью было ограничение по количеству или размеру встроенных фреймворков, которое было установлено для проектов Xamarin?? В моем случае общий размер приложения с 12 фреймворками составляет около 110 Мб в режиме отладки.

Моей следующей мыслью было возможное столкновение символов между фреймворками: но это не статические библиотеки, использующие «Внутренний__» с огромным пулом всех символов вместе, а строго разделенный набор фреймворков с разными именами (контейнерная система). Кроме того, столкновение символов приведет к ошибке во время сборки, а не во время выполнения…

Еще одна мысль была о моем бесплатном профиле подготовки: может быть, с платной учетной записью разработчика нет ограничений на количество встроенных фреймворков?? Это объяснило бы, почему он всегда работает на Sim-карте…

Еще несколько вещей, которые я пробовал, а также все возможные их комбинации (хотя пока безуспешно):

  • Использование различных версий XCode для создания фреймворков (версии 8 и 11)
  • Использование различных версий Visual Studio для Mac для создания вызывающей программы (2017 и 2019)
  • Использование различных версий развертывания на устройстве (iOS 10.3 и 13.2)
  • Использование опции «интеллектуальная ссылка» для собственной ссылки в Visual Studio
  • Использование параметра «принудительная загрузка» для собственной ссылки в Visual Studio
  • Используя дополнительно возможность указать флаги компоновщика в «дополнительных аргументах mtouch» для собственной ссылки в Visual Studio
  • Использование параметра «Связать все сборки» в Visual Studio

Я что-то упускаю в своем процессе, в своей настройке или в своей идее? Любая помощь была бы признательна после стольких лет расследования. Спасибо:-)

Комментарии:

1. Я не нахожу ограничения по количеству в официальном документе. Я обострил это дело и хотел бы получить обратную связь как можно скорее.