Могу ли я использовать 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
в раздел "Встроенные двоичные файлы" на вкладке "Общие" целевой программы.