Подтвердить что ты не робот

Свяжите статическую библиотеку внутри динамической (Cocoa Touch) рамки

У меня есть динамическая структура, которая связана с Картами Google (которая, насколько я вижу, все еще представляет собой статическую библиотеку, если не совсем так, только с оболочкой фреймворка).

Проблема в том, что рамки связаны с статической библиотекой, а также, кажется, включают ее код напрямую, так как мне не нужно связывать или вставлять Карты Google в приложение, которое использует фреймворк, и все работает нормально. За исключением случаев, когда я также работаю с Картами Google в приложении.

Либо я получаю "undefined символы для архитектуры XY" на этапе компиляции, либо я привязываю Карты Google к нему, а затем я получаю стену предупреждений на консоли отладки во время запуска приложения, например:

Класс GMSPolyline2D реализован как в /.../Build/Products/Debug-iphonesimulator/MyFramework.framework/MyFramework а также /..../Bundle/Application/7C73324B-4A42-4063-98AA-879345997DE6/MyApp.app/MyApp. Один из двух будет использован. Какой из них undefined.

Есть ли способ связать только Google Maps в рамках, но НЕ включать символы в инфраструктурный продукт? Он работает для динамических фреймворков, но статические библиотеки, похоже, просто включены. Я уже пробовал слабую связь с -weak_framework и -weak_library, но, похоже, не работает.

На самом деле, я не мог заставить Xcode найти двоичный файл GoogleMaps для -weak_library внутри его фреймворка, даже с прямой ссылкой внутри папки .framework как путь поиска библиотеки.

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


Изменить: я мог бы получить -weak_library для работы, просто передав абсолютный путь непосредственно в разделе флага компоновщика вместо использования пути поиска в библиотеке. Однако проблема все еще остается, очевидно, она все еще включена в структуру.

4b9b3361

Ответ 1

Не делать Dat

Лучшей практикой является размещение всего вашего кода, зависящего от Google Maps, в отдельной библиотеке, которая ссылается как на вашу библиотеку, так и на статическую библиотеку Google Maps.

(Кредит: Роберт Нейпир отвечает на Как скомпилировать статическую библиотеку, которая включает в себя необязательные классы, зависящие от сторонней библиотеки