обработка зависимостей для проекта iOS Framework

Я создал проект iOS Framework, используя этот метод: https://github.com/jverkoey/iOS-Framework

Работает довольно аккуратно, но я немного запутался в том, как включать библиотеки / фреймворки, которые необходимы моей структуре для работы, и, в частности, как это сделать, чтобы в случае, если стороннее клиентское приложение, использующее мою инфраструктуру, может включать эти библиотеки а также без конфликтов.

Скажем, мой код инфраструктуры нуждается в следующих двух вещах:

  • FacebookSDK.framework
  • libFlurry.a

Первый – это iOS Framework. Когда я добавлю его в фазу «Link Binary With Libraries» в моей платформе и попробую скомпилировать проект клиента, который использует мою фреймворк, компоновщик жалуется на недостающие символы – мне нужно добавить FacebookSDK к проекту клиента, который велик: нет возможности конфликты, если клиентские приложения хотят использовать Facebook.

Однако, когда я делаю то же самое со статической библиотекой Flurry, я получаю ошибку с повторяющимися символами при компиляции клиентского проекта. Что меня немного смущает, потому что это не FacebookSDK.framework, а только статическая библиотека?

ukaszs-iMac:FacebookSDK.framework lukasz$ file Versions/A/FacebookSDK Versions/A/FacebookSDK: Mach-O universal binary with 3 architectures Versions/A/FacebookSDK (for architecture i386): current ar archive random library Versions/A/FacebookSDK (for architecture armv7): current ar archive random library Versions/A/FacebookSDK (for architecture cputype (12) cpusubtype (11)): current ar archive random library 

Поэтому мои вопросы:

  1. почему библиотека, встроенная в фреймворк (например, Facebook), не связана с моим проектом проекта Framework, тогда как библиотека, включенная в качестве файла .a?
  2. как включить файл .a в мою структуру, чтобы он не вызывал ошибки повторяющихся символов, когда клиентское приложение, использующее мою фреймворк, также нуждается в этой конкретной статической библиотеке?

6 Solutions collect form web for “обработка зависимостей для проекта iOS Framework”

В описываемом случае использования вы должны ссылаться на эти внешние библиотеки из своего приложения, а не на свою собственную структуру. Это может быть одно или другое, но это не может быть и то, и другое.

Если вы решите, что эти зависимости зависят от приложения, вы должны удалить их из «Link Binary With Libraries» и любой другой явной компоновки ссылок и просто проецировать свой проект фреймворка с помощью пути к этим фреймворкам и библиотекам, чтобы он мог найти символы (но не ссылки на них) во время компиляции (т.е. путь к библиотекам должен быть включен LIBRARY_SEARCH_PATHS).

  1. Используйте cocoapods, это легко ( http://cocoapods.org/ )

  2. Разработчики приложений должны будут включить podfile и загрузить зависимости.

  3. При разработке вашего SDK используйте примерное приложение / демонстрационное приложение поверх SDK для имитации этого.

Вы не должны связывать что-либо при создании фреймворка, а просто создавать двоичный файл *.a с объектами вашей инфраструктуры.

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

Вы можете ссылаться на *.h файлы заголовков из других библиотек в своей структуре, чтобы скомпилировать ваши объекты.

В результате шаги установки для вашей структуры должны содержать информацию о других необходимых инфраструктурах / библиотеках, их поддерживаемых версиях, о том, как добавлять файлы ресурсов (если есть) и т. Д. Только некоторые из многих причин, почему вы можете рассмотреть возможность создания CocoaPods , podspec вместо этого.

Используйте менеджер зависимостей CocoaPods. Вот хороший гид,

7 миниатюрных видеоуроков

Вы должны использовать CocoaPods. Ваша зависимость от Facebook может быть сделана путем ссылки на CocoaPod.

Если вы хотите включить эту конкретную версию Facebook в свой блок, вы можете поместить ее в свое репо и использовать свойство vendored_frameworks для ссылки на нее.

Аналогично, если вы хотели бы использовать libFlurry.a, вы могли бы сделать это, используя s.vendored_libraries .

Для системных библиотек вам не нужно их libZ.a , например libZ.a

Я настоятельно рекомендую создать ваш CocoaPod, используя pod lib create YourPodName . Недавно они изменили механизм, как это работает, и это действительно приятно.

Вы можете создать пример проекта, который показывает, как использовать ваш код в контексте приложения.

Затем, один из других опрятных вещей, о которых я только что узнал, кто-то может pod try YourPodName и он автоматически загрузит, интегрирует и запускает проект Xcode.

CocoaPods стоит того.

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

Средства: предлагайте их установить с помощью cocoapods и загрузить свою библиотеку, но не включайте ничего другого, дайте им список, в котором они нуждаются.

  • Библиотека (файл .a) или фреймворк в iOS, что является лучшим выбором
  • Sqlite Crash libsqlite3.dylib` ___ lldb_unnamed_function669 $$ libsqlite3.dylib
  • Как определить во время выполнения загрузку фреймворка?
  • Внедрение фреймворков внутри фреймворка iOS
  • Как создать файл Cartfile? Или легко добавить фреймворки в ваше приложение?
  • Игнорировать файлы в скрипте сборки - Xcode
  • Использование зависимости CocoaPod при разработке CocoaPod
  • IOS Framework с push-уведомлениями
  • Как добавить структуру внутри другой структуры (Umbrella Framework)
  • .framework - красный, несмотря ни на что
  • iOS - обновить структуру
  • Почему некоторые связанные фреймворки выглядят как часть Lego, а другие - как набор инструментов?
  • Interesting Posts

    Тип не имеет подписчиков?

    iOS: выполнение действия после времени, когда пользователь взаимодействует / прокручивается

    Сравните 2 nsmutablearray и получите другой объект для третьего массива в ios

    Сортировка NSArray словарей по значению ключа в словарях

    Увеличить изображение, используя автоматическую компоновку в прокрутке. Как центрировать?

    SKShapeNode не работает на IOS 7

    Потоковое видео MP4 на iPhone прямо с S3?

    Как скомпилировать раскадровку на детской площадке

    Как улучшить отображение переменных, являющихся объектами в отладчике xcode 4.5 (noob)

    Проблемы с пакетным рисунком с атласными файлами и SpriteKit

    iOS Определение углов визитной карточки в режиме реального времени

    UITraitCollection и UISplitViewController на iPad

    Есть ли какие-либо уведомления, чтобы до того, как приложение заполнило фон?

    Операционная система API WebAudio для Safari iOS 7

    UIViewController не обновляет ограничения вида при изменении ориентации устройства

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.