2015-01-12 110 views
4

因爲的CocoaPods 0.36是availbable任何人,而現在他們正在與雨燕和框架來支持我有一個疑問,今天困擾着我......老圖書館,新的CocoaPods

我在我的項目目錄中創建Podfile與填充:

source 'https://github.com/CocoaPods/Specs.git' 
platform :ios, '8.0' 

pod 'AFNetworking' 
pod 'SwiftyJSON' 

和運行pod install像往常一樣......你知道這個故事。但是,當我打開我的.xcworkspace並去任何ViewController和import SwiftyJSON它只是工作,但當我嘗試做AFNetworking同樣的事情時,我得到No such module 'AFNetworking'。當然,我可以創造一個橋接報頭,並與Objective-C的方式導入,但是當我讀到this博客文章中,我可以看到:

要使用此subspec斯威夫特,沒有產生傘頭,你需要創建一個橋接頭並使用像#import <AFNetworking/AFNetworking+UIKit.h這樣的導入。使用生成的傘 標題,只需要import AFNetworking,如果您的Podfile中包含子類別 。

糾正我,如果我錯了,但我想如果我們添加庫與CocoaPods不再需要手動橋接頭,對吧?那麼,爲什麼這不起作用?

回答

13

正如我的想法...我在OP中提供的這個例子是不正確的......好吧,基本上它是正確的,因爲它的工作方式應該是這樣。讓我給你展示一個反例。

我有一個Swift項目,但我只想使用Objective-C豆莢(AFNetworking,SSPullToRefresh等)。現在我們遇到了一些麻煩,因爲當您提供Podfile中的Objective-C窗格時,它們將被添加到窗格目標中,作爲靜態庫。你現在可能現在可可豆現在切換到框架(如果你想知道差異,請閱讀this問題)。回到話題......有這種衝突sitation兩種可能的解決方案:

  1. 您手動創建YourProject-Bridging-Header.h#import這些圖書館......這甚至斯威夫特整合之前使用的老辦法。
  2. 在您的Podfile中包含此魔術use_frameworks!方法調用。通過這樣做,你可以強制CocoaPods創建框架而不是靜態庫。

現在,讓我解釋一下爲什麼你會傾向於第二種方案......作爲OP狀態,現在的CocoaPods自動創建傘頭learn about them)。這是您跳過手動創建橋接報頭的便捷方式。

我找到了一個解決方案here所以沒有這篇文章,我可能仍然在努力解決這個問題。歡呼作者!

+0

從您閱讀該文檔,您是否看到使用cocoapods自動生成的傘文件作爲您在* Obj-c *項目中使用的首選方法的方法? IE瀏覽器。配置cocoapods生成橋接報頭爲'AFNetworking.h'而不是'Pods-iOS Example-AFNetworking-umbrella.h',這樣它就會始終跟蹤公共報頭集合 - 一個「單一事實點」?從我的閱讀中,它僅用於Swift代碼的可見性。 –

+0

雨傘頭部是爲Swift創建的。因此,沒有必要將它用於Objective-C項目...爲什麼你會這樣?我只是在混合項目中掙扎,我寫的主要語言是Swift,而一些Pods可以是Objective-C庫。 – cojoj

+0

傘形文件是一個與框架有關的概念,並且fameworks也是Obj-c的新成員。傘文件只是框架中所有公共頭文件的總結,並且是'#import '中的'MyFramework.h'。在引擎蓋下,cocoapods生成一個新的唯一命名的傘文件,並將其註冊到模塊映射中,以便通過「@import MyFramework」使其可用。這個命名和約定是https://github.com/CocoaPods/CocoaPods/issues/3092中討論的主題。這就是Swfit和Obj-c代碼如何找到Obj-c符號。 –