【发布时间】:2014-07-30 03:34:29
【问题描述】:
【问题讨论】:
-
您还可以阅读我最近的article,了解如何使用您的 Swift 项目设置 CocoaPods。
标签: ios objective-c xcode swift cocoapods
【问题讨论】:
标签: ios objective-c xcode swift cocoapods
Cocoapods 0.36 及更高版本引入了use_frameworks! 指令,这意味着在 Swift 中导入 Objective-C pod 不需要桥接头。
请在下面找到使用 MBProgressHUD 和 Alamofire 的完整示例:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.3'
use_frameworks!
pod 'Alamofire', '>= 1.2.2' # Swift pod
pod 'MBProgressHUD', '>= 0.9.1' # Objective-C pod
从您的桥接头中删除#imports,如果您不需要,甚至删除桥接头文件。如果您选择后一种可能性,请不要忘记在您的 Xcode 项目配置中删除路径(到此已删除的桥接头文件)。
在需要这些类的每个 Swift 文件的顶部添加 import MBProgressHUD 和/或 import Alamofire。
您现在正在使用真正的框架,所以您的枚举已经在飞行中!你可能有一条 Swift 行,它可以像这样使用桥接头:
progressHUD.mode = MBProgressHUDModeIndeterminate
现在必须变成这样:
progressHUD.mode = MBProgressHUDMode.Indeterminate
没什么大不了的,但一堆错误可能会让你误入歧途,如果你使用大量的 Objective-C 枚举,你会遇到更大的问题。
供您参考:我想(您必须自己测试才能确定)use_frameworks! Podfile 中的指令仅与面向 iOS >= 8 的 Xcode 项目兼容。
【讨论】:
该过程似乎与Using Swift with Cocoa and Objective-C 文档的Mix and Match 部分中描述的过程相似。
pod install。Example-Bridging-Header.h,并将其添加到项目中。 Objective-C Bridging Header:现在你可以在你的 Swift 文件中使用你的库,在这种情况下,MKUnits:
let kilograms = NSNumber.mass_kilogram(2)()
let pounds = NSNumber.mass_pound(10)()
let result = kilograms.add(pounds)
println(result)
【讨论】:
#import <Reachability/Reachability.h> 而不是 #import "Reachability.h"。
更新:CocoaPods 0.36 稳定版已经发布。它正式支持 Swift。
CocoaPods 现在在其最新的 0.36 版本中支持 Swift。它仍处于测试阶段,但可以正常工作。
首先,您需要通过在终端中运行来安装 CocoaPods 测试版(目前是测试版 2)。
sudo gem install cocoapods --pre
差不多就是这样。您可以像往常一样添加 Swift 库。
但是如果你想通过 CocoaPods 将一个用 Objective-C 编写的库添加到一个 Swift 项目中,那就有一个问题了。您需要将行 use_frameworks! 添加到您的 Podfile。这是一个例子。
use_frameworks!
platform :ios, '8.0'
pod 'MagicalRecord'
我也为此写了blog post。
【讨论】:
use_frameworks! 仅适用于 iOS >= 8 对吗?如果是这样,您应该在答案中写下。
如果您在 bridging-header.h 中遇到文件未找到错误,您可能需要确保您的 Pods 库在您的构建方案中被链接。
CocoaPods 故障排除部分在 #4 here 下描述了如何执行此操作
【讨论】:
现在您可以通过运行sudo gem install cocoapods 来使用cocoapods 0.36.0 版本,它支持集成swift 框架。当你使用 swift 编写的框架时,你应该在 Podfile 中显式使用它:
platform :ios, '8.0'
use_frameworks!
pod 'Alamofire'
【讨论】:
在我的例子中,我发现我没有将 pod 添加到主要目标,而是仅添加到 Podfile 中的 Test 和 TestUI 目标,如 here 所述。
【讨论】: