2014-10-19 2 views
6

Я ищу способ создания фреймворков, которые имеют подструктуры, которые не мешают друг другу во время выполнения. иллюстрация ниже описывает идею лучше всего.Вложенные рамки Cocoa Touch

enter image description here

Предположим, каждый вариант структуры JSON Parser является несовместима с другой.

Я пробовал массу подходов к достижению вышеуказанного, но каждый раз терпел неудачу. Наиболее многообещающими были зонтичные рамки, но не только Apple препятствует их использованию (мне непонятно почему), но и они, похоже, не работают должным образом.

Что происходит, если я создаю приложение со встроенным Framework, которая сама по себе имеет JSON Parser рамочное v1.0 внедренный, все, кажется, работает нормально. Но как только я добавить JSON Parser рамочное v3.0 в App и связать приложение с ней, Framework A начинает использовать JSON Parser рамочное v3.0 во время выполнения вместо v1.0 который находится внутри него. И предполагая, что они несовместимы друг с другом, это может сломаться. Рамка A.

То же самое касается добавления Рамка B, но реализация которой выбрана во время выполнения, кажется случайной.

Можно ли создать Framework, который имеет встроенный JSON Parser рамки v1.0 и безопасно использовать в таком случае? Мне трудно поверить, что этого не достичь, но я не могу найти способ заставить его работать, и начал задаваться вопросом, возможно ли это :(

+0

на основе получателей Я не нашел 'Embedded binaries' только в приложении-получателе, как вы решили эту проблему? Я хочу сделать приложение

ответ

2

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

Я предполагаю, что вы встроенные рамки «Динамическая библиотека установить имя базу» задано значением @rpath. Тогда, в ваших рамках вложения, удалите соответствующий параметр @executable_path из параметра «Путь к поиску путей» (это приложение, и именно поэтому он сначала находит «глобальную» инфраструктуру). Это должно сделать все так, как вы ожидаете.

Anoth er, который вы можете принять во внимание, это объединение трех версий используемой структуры в файле single framework bundle.

Наконец, вы также можете рассмотреть возможность соединения вручную (см. this post, где определен метод _loadPluginAtLocation).

Надеюсь, это поможет.

+0

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

+0

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