Как использовать Cocoapods во встроенной структуре?
Я использую встроенную фреймворк для своих пользовательских представлений в новом проекте, чтобы использовать преимущества нового @IBDesignable материала в Xcode 6, и я хотел бы оживить упомянутые представления в Facebook Pop. Я добавил Pop в проект с использованием Cocoapods, но встроенная инфраструктура не имеет доступа к этим файлам ('POP/pop.h' file not found
).
Я попытался скопировать фазы сборки, связанные с Cocoapods, с целевого объекта приложения на целевую платформу, но они не работают как есть. Что делает копирование папки Pop во встроенную фреймворк напрямую, но тогда Xcode сообщает мне, что я должен изменить все угловые скобки <POP/pop.h>
на цитаты "POP/pop.h"
. Я предполагаю, что там лучший способ, и я замалчиваю его.
Ответы
Ответ 1
Предполагая, что в вашем подфайле вы используете link_with 'MyCustomFramework'
, где "MyCustomFramework" - это ваше встроенное имя фреймворка и запустить pod install
. Выберите файл проекта (синий в правом верхнем углу) и перейдите в раздел " Настройки сборки". Затем найдите " Разрешить немодульное включение в Framework Modules" и установите для него ДА как для файла проекта (синий), так и для целевой пользовательской рамки (например, MyCustomFramework - значок оранжевого "значка для ланчбокса" ).
![Setting build settings for non-modular includes]()
Затем вы можете включить cocoa содержимое pods в свой основной файл MyCustomFramework.h.
![Including CocoaPods in CustomFramework]()
Затем просто импортируйте '@import MyCustomFramework;' в вашем целевом приложении, и вы получите остальную часть CocoaPods в вашем распоряжении. (Пример показывает вам доступ к "каждому" из ObjectiveSugar).
![Importing CustomFramework into AppDelegate]()
Независимо от того, нужно ли это делать или нет, это отдельная проблема, но это позволяет вашей пользовательской структуре включать библиотеки CocoaPods сама по себе, а затем позволяет целевой среде приложения просто включать вашу пользовательскую структуру и получать все CocoaPods.
Извините за несколько изображений, но мне нравится быть визуальным.
Ответ 2
Я предполагаю, что вы модифицируете фреймворк для использования Pop. В этом случае вам также нужно будет добавить путь заголовков Pop к строкам заголовка структуры настроек Build Settings.
Но если вы изменяете фреймворк, вы можете просто создать podspec для него и позволить CocoaPods обрабатывать все (и отправить запрос тянуть к создателю?).
Что касается вопроса о щедрости.
Структура никогда не должна встраивать другие библиотеки. Если, например, вы хотите использовать AFNetworking в своей библиотеке:
- Укажите, что AFNetworking требуется в ваших собственных инструкциях по установке рамок.
- Если вы распространяете двоичные файлы, вы просто создаете локально для заголовков AFNetworking. При связывании своего приложения пользователям необходимо будет предоставить свои собственные AFNetworking.
- Если вы распространяете исходный код с вашей каркасной структурой (если пользователи сами его сами создают), попросите на этапах установки указать путь заголовков AFNetworking в своих структурах "Пути поиска заголовков сборки" и предустановить его на общие пути, такие как
POD_ROOT
и т.д.
Затем он работает, но у вас есть сложные инструкции по установке, пользователям приходится вручную добавлять ресурсы, если таковые имеются, трудно контролировать версию AFNetworking, добавляемую пользователями, и большинство из них никогда не обновит вашу инфраструктуру, потому что это может нарушить их настройку. Все основания для поддержки CocoaPods, создавая podspec (вы можете продолжать поддерживать проект framework/static library, если вы действительно этого хотите).