2015-05-11 2 views
2

Представьте себе следующую ситуацию;Структура библиотеки iOS8, связывающая WITHOUT Pods

Я разрабатываю каркас для какао, который требует SomeLibrary (например, AFNetworking). Мои рамки будут включены в чей-то проект, который может потребовать SomeLibrary. Как это сделать, не запуская эти неприятные повторяющиеся предупреждения, когда я включаю AFNetworking в свою структуру напрямую (либо через исходный код, либо в Cocoapods)?

Я пробовал это с Cocoapods в обоих проектах (моя фреймворк и тестовый проект, который включает в себя мою фреймворк), но это также приводит к предупреждению двойного кода.

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

Как я могу это сделать, не создавая мой фреймворк (что на самом деле не вариант)?

Я нашел этот связанный ответ, но я не знаю, какой путь поиска установить для проекта рамки, чтобы найти библиотеку главного проекта; https://stackoverflow.com/a/23123725/1069487

Любая помощь была бы высоко оценена!

ответ

0

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

  1. Вы строите AFNetworking как статическая библиотека (которая даст вам .a файл как AFNetworking.a)
  2. Вы строите вашу базу, ссылающихся против вашей статической библиотеки. Но имейте в виду, что библиотека не будет внедрена в вашу инфраструктуру (нет способа включить статическую библиотеку в фреймворк на iOS). Ваша инфраструктура может использовать API AFNetworking, потому что она связана с ней.
  3. Любой проект, использующий вашу фреймворк и использующий методы AFNetworking вашей структуры, должен связываться со статической библиотекой AFNetworking.a, которую вы должны предоставить в качестве автономного файла рядом с вашей картой.

См КСН-Framework здесь для более подробной информации: https://github.com/jverkoey/iOS-Framework

+1

Хотя это, как представляется, решение, я не вещь, это жизнеспособный один. Я, как поставщик инфраструктуры, действительно не намерен предоставлять библиотеку AFNetworking моим клиентам, поскольку это может иметь серьезные последствия для их текущего процесса разработки. Представьте, что они используют CocoaPods для своего проекта, в том числе POS для AFNetworking. Использование описанного вами метода существенно портит эту зависимость для них и заставит меня обновлять статическую библиотеку AFNetworking всякий раз, когда что-то меняется на эту библиотеку, которая может представлять интерес для моего клиента. – AlBirdie

+0

Итак, вы должны включить его исходный код AFNetworking в свой проект и реорганизовать классы AFNetworking и глобальные функции/переменные (например, добавить ваши инициалы: AIAFNetworking), чтобы они не сталкивались с другим импортным AFNetworking в проекте конечного пользователя. Имена методов можно сохранить, потому что они привязаны к классу, чьи имена будут изменены. –

+1

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

Смежные вопросы