Могу ли я использовать CocoaPods при создании Cocoa Touch Framework?

Я создаю новую конструкцию Touch Cocoa (MyFramework.framework), которая будет иметь зависимость от Alamofire. Эта структура будет написана в Swift. В качестве теста я начал новый проект Cocoa Touch Framework:

File > New > Project > Framework & Library > Cocoa Touch Framework

Затем в терминале я выполнил:

pod init

в этом каталоге проектов. Во вновь созданном подпикселе я добавил следующее:

source 'https://github.com/CocoaPods/Specs.git'
# Uncomment this line to define a global platform for your project
platform :ios, '8.0'
# Uncomment this line if you're using Swift
use_frameworks!

pod 'Alamofire', '~> 3.0'

Еще раз, в Терминале я выполнил:

pod install

и начал кодирование.

Все казалось хорошим и хорошим, пока я не использовал продукт MyFramework.framework в проекте Single View. Когда я пытаюсь запустить проект, я получаю следующую проблему:

dyld: Library not loaded: @rpath/Alamofire.framework/Alamofire
Referenced from: /Users/me/Library/Developer/CoreSimulator/Devices/87DA70B6-49BF-441E-BD81-F4A80B0792CF/data/Containers/Bundle/Application/2E414EA8-7E54-4D71-9295-566D4FAAADE2/test.app/Frameworks/MyFramework.framework/MyFramework
Reason: image not found

Я думал, что проекты Cocoa Touch Framework по своей сути являются динамическими и поэтому будут включать все зависимости.

Может ли кто-нибудь сказать мне, почему это происходит и как я могу это исправить? Это проблема с CocoaPods или я что-то не хватает?

Я noob для, поэтому, пожалуйста, дайте мне знать, если вам нужна дополнительная информация от меня.

Спасибо!

Ответы

Ответ 1

К сожалению, CocoaPods не поддерживает использование с Cocoa Target Framework. Я нашел несколько ссылок на это, копая их проблемы в GitHub:

Мы не поддерживаем интеграцию Pods в целевые объекты...
- неоничу от 4 ноября 2015 года

и

... для того, чтобы это "просто работало", CP должен был бы провести рекурсивный анализ зависимостей в вашем проекте Xcode, а также как-то убедиться, что вы никогда не будете использовать продукт сборки в другом контексте. - неоничу от 7 июля 2015 г.


До сих пор я нашел два способа решения проблемы:

Правильный способ - создать новую спецификацию для вашего фреймворка и привести его в свой основной проект через CocoaPods. Это устраняет все проблемы, которые CococaPods имеет с графиком зависимостей и является рекомендуемым решением разработчиков CocoaPods.

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

platform :ios, '9.0'
use_frameworks!

def myfirstframework_pods
    pod 'Alamofire', '~> 3.0'
end

target 'MyApp' do
    pod 'SwiftKeychainWrapper', '~>1.0'
    myfirstframework_pods
end

target 'MyFirstFramework' do
    myfirstframework_pods
end

Ответ 2

Просто добавьте Alamofire.framework в раздел "Встроенные двоичные файлы" на вкладке "Общие" целевой программы.