it-swarm.com.ru

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

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

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

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

pod init

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

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 в проекте с одним представлением. Когда я пытаюсь запустить проект, я получаю следующую проблему: 

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 или я что-то упустил?

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

Спасибо!

32
bneu

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

На самом деле мы не поддерживаем интеграцию Pod в целевые объекты фреймворка ...
- Неоничу 4 ноября 2015 г.

а также

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


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

Правильный способ - создать новую спецификацию pod для вашей платформы и добавить ее в ваш основной проект через 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
24
Dallas Edwards

Попробуйте добавить зависимость от Alamofire в psspec фреймворка, как показано ниже 

Pod::Spec.new do |s|

# Other setup 

# Dependencies
s.dependency "Alamofire"
# Other dependencies if any
0
humblePilgrim