Связывание библиотеки фреймворка iOS8 БЕЗ модулей

Представьте себе следующий сценарий;

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

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

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

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

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

Любая помощь будет высоко ценится!


person AlBirdie    schedule 11.05.2015    source источник


Ответы (1)


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

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

Подробнее см. iOS-Framework здесь: https://github.com/jverkoey/iOS-Framework

person Nicolas Buquet    schedule 11.05.2015
comment
Хотя это кажется решением, я не думаю, что оно жизнеспособно. Я, как поставщик фреймворка, действительно не собираюсь предоставлять библиотеку AFNetworking своим клиентам, поскольку это может иметь серьезные последствия для их текущего процесса разработки. Представьте, что они используют CocoaPods для своего проекта, включая модуль для AFNetworking. Использование описанного вами метода по существу нарушило бы эту зависимость для них и вынудило бы меня обновлять статическую библиотеку AFNetworking всякий раз, когда что-то изменяется в этой библиотеке, что может представлять интерес для моего клиента. - person AlBirdie; 11.05.2015
comment
Таким образом, вы должны включить исходный код AFNetworking в свой проект и реорганизовать классы AFNetworking и глобальные функции/переменные (например, добавив свои инициалы: AIAFNetworking), чтобы они не конфликтовали с другим импортом AFNetworking в проекте конечного пользователя. Имена методов можно сохранить, потому что они привязаны к классу, имена которого будут изменены. - person Nicolas Buquet; 11.05.2015
comment
Я тоже думал об этом, но это довольно уродливое решение, если честно. Честно говоря, я не могу себе представить, что эту проблему нельзя решить красиво (каким-то образом указав мою структуру, чтобы посмотреть на основной проект для зависимостей), поскольку это, вероятно, довольно распространенная проблема. - person AlBirdie; 11.05.2015
comment
Возможно, вам поможет @compatibility_alias из Objective-C. См. эту тему SO: stackoverflow.com/questions/178434/ - person Nicolas Buquet; 11.05.2015
comment
Это делает переименование исходного кода AFNetworking намного более удобным для будущих обновлений. Не знал об этом. Все еще интересно, действительно ли это последнее средство для решения этих проблем с зависимостями. - person AlBirdie; 11.05.2015