Использовать стороннюю структуру, встроенную в динамическую структуру

Насколько я понимаю, большое изменение в динамической структуре ios и статике связано с тем, что статичность статически связана с кодом во время соединения (до запуска), а динамика связана во время запуска / выполнения

Теперь у меня есть тестовый проект:

Мой проект имеет динамическую структуру, связанную с ним – A.framework.

import A.framework

В A.framework есть встроенная внутри него структура – B.framework

В моем основном проекте я хочу использовать классы из B.framework

Теперь я вижу это с простой операцией импорта в основном проекте:

 import B.framework 

Это действительно работает, и я могу использовать код изнутри B.framework, который встроен в связанную A.framework

Как это может быть? это что-то безопасное и надежное в использовании? Как основной проект распознает B.framework?

Как насчет случаев, когда основной проект напрямую связывает B.framework с проектом? в этом случае я вижу много «повторяющихся ошибок символов» во время соединения

Самое главное, как я могу построить A.framework, не вставляя B.framework внутри него, в то время как вне курса, используя его классы и функции

Любые разъяснения помогут 🙂

Как вы заметили, связывание B.framework приведет к дублированию символов. Вот почему A.framework не должен вставлять B.framework. Вы никогда не должны вставлять фреймворк в другую структуру, если есть вероятность, что потребительское приложение позаботится о встроенной инфраструктуре (на практике это означает, что вы действительно просто не должны этого делать).

A.framework был неправильно упакован. Если вы упаковали его, вы должны удалить встроенную инфраструктуру и связать все на уровне приложения. Если кто-то еще упаковал его, вы должны открыть проблему с ними, чтобы исправить эту ошибку. Эта проблема не нова для динамических фреймворков. Это также проблема со статическими рамками. Единственное подходящее время для привязки зависимостей – это уровень приложения.

(Существует исключение, если вы контролируете всю экосистему (например, Apple). Тогда такие вещи, как зонтичные рамки , приемлемы, но вы не Apple.)

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

Например:

  • Создать проект с целевой картой
  • Перетащите GMA.framework в целевую среду рамки (это приведет к ее привязке, но не к внедрению)
  • Создать цель приложения
  • У приложения есть ссылка как GMA.framework, так и ваша тестовая среда. Это будет отлично работать без коллизий, потому что есть только одна GMA.framework, и она только встроена в приложение.

Если вы используете несколько фреймворков, вы можете попробовать Cocoa Pods менеджер зависимостей, который поможет вам получить доступ к нескольким фреймворкам. Это также позволит вам сохранить точку останова, которая поможет вам отлаживать даже внутри рамки, а также вы можете делать изменения.

  • Обнаружение только двойного или одного крана с UIViews?
  • Размер кеша Websql на iOS
  • CTFramesetterSuggestFrameSizeWithConstraints с атрибутами обрезки, возвращающими нулевую высоту
  • Возможно преобразование вида на предыдущий контроллер просмотра при изменении ориентации экрана?
  • Как загрузить несколько изображений без использования ASIHTTPRequest
  • Быстрый способ получения эскиза из ALAsset с применением фильтров
  • Как узнать, работает ли UIColor на основе шаблонов?
  • iPhone viewWillAppear не стреляет
  • Есть ли причина изменить файл main.m в приложениях iOS?
  • Неверный размер UILabel для отдельной строки текста с использованием LineSpacing и нескольких цветов
  • Экран загрузки приложений и всплывающих окон
  • Interesting Posts

    Нарисуйте простой круг uiimage

    Многоконтекстовые основные данные – повторяющиеся проблемы при импорте из фонового контекста

    Получение NSManagedObject из NSSet

    IOS Facebook SDK: что случилось с sharerDidCancel: (id <FBSDKSharing>) делегировать делегата?

    iOS: похоже, что glDeleteBuffers не освобождает память

    Почему AVSampleBufferDisplayLayer перестает показывать CMSampleBuffers, взятый из делегата AVCaptureVideoDataOutput?

    Слияние видео вместе с AVMutableComposition не вызывает звука

    как хранить весь словарь в массиве

    Как я могу использовать кнопку раскрытия детали с раскадровки?

    быстрый 3 gamecenter: количество участников всегда 4

    Кривые рисования графика с помощью UIBezierPath

    Проблема с табличным представлением таблицы iOS, я использую отправку и сохранение кеша

    UICollectionView Просмотр заголовка и нижнего колонтитула

    Swift3: UITableViewCell и UIButton – Показать и скрыть UITableViewCell, щелкнув UIButton

    Может ли OCMock запустить параметр блока?

    Давайте будем гением компьютера.