【问题标题】:How to integrate Cocoapods with a Swift project?如何将 Cocoapods 与 Swift 项目集成?
【发布时间】:2014-07-30 03:34:29
【问题描述】:

随着 Apple 推出他们的新编程语言 Swift,我想知道如何将其与通过 CocoaPods 提供的现有 Objective-C 库集成?

【问题讨论】:

  • 您还可以阅读我最近的article,了解如何使用您的 Swift 项目设置 CocoaPods。

标签: ios objective-c xcode swift cocoapods


【解决方案1】:

Cocoapods 0.36 及更高版本引入了use_frameworks! 指令,这意味着在 Swift 中导入 Objective-C pod 不需要桥接头。

请在下面找到使用 MBProgressHUDAlamofire 的完整示例:

1。播客文件

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

2。删除

从您的桥接头中删除#imports,如果您不需要,甚至删除桥接头文件。如果您选择后一种可能性,请不要忘记在您的 Xcode 项目配置中删除路径(到此已删除的桥接头文件)。

3。添加导入

在需要这些类的每个 Swift 文件的顶部添加 import MBProgressHUD 和/或 import Alamofire

4。必要时修复枚举

您现在正在使用真正的框架,所以您的枚举已经在飞行中!你可能有一条 Swift 行,它可以像这样使用桥接头:

progressHUD.mode = MBProgressHUDModeIndeterminate

现在必须变成这样:

progressHUD.mode = MBProgressHUDMode.Indeterminate

没什么大不了的,但一堆错误可能会让你误入歧途,如果你使用大量的 Objective-C 枚举,你会遇到更大的问题。

(Source of this answer)

供您参考:我想(您必须自己测试才能确定)use_frameworks! Podfile 中的指令仅与面向 iOS >= 8 的 Xcode 项目兼容。

【讨论】:

    【解决方案2】:

    该过程似乎与Using Swift with Cocoa and Objective-C 文档的Mix and Match 部分中描述的过程相似。

    1. 创建您的 Podfile 并运行 pod install
    2. 创建一个新的Objective-C 头文件Example-Bridging-Header.h,并将其添加到项目中。
    3. 将导入语句添加到桥标头
    4. 为您的目标设置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)
    

    更多:Integrating Cocoapods with a Swift project

    【讨论】:

    • 对我来说,导入语句需要包含项目目录,也就是 #import <Reachability/Reachability.h> 而不是 #import "Reachability.h"
    • 只是一个更新。 Swift POD,即:Swift Libs 也将很快得到 CocoaPods 的支持。下一个版本 0.36 将在 CocoaPods 中带来完整的 Swift 支持。大部分功能已经完成,您现在可以使用我的blog-post中的说明试驾 Swift Pods
    • Cocoapods 0.36 及以上版本引入了use_frameworks!这意味着在 Swift 中导入 Objective-C pod 不再需要桥接头(请参阅下面的答案)。
    • 除了上述之外,我发现我必须在 Build Settings 中的“User Header Search Paths”中添加“Pods/**”。我还必须在桥文件中添加“#import”。
    • 谢谢 Swifty。我试过use_frameworks!但这对我不起作用。将“Pods/**”添加到用户搜索路径有效。
    【解决方案3】:

    更新: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 对吗?如果是这样,您应该在答案中写下。
    【解决方案4】:

    如果您在 bridging-header.h 中遇到文件未找到错误,您可能需要确保您的 Pods 库在您的构建方案中被链接。

    CocoaPods 故障排除部分在 #4 here 下描述了如何执行此操作

    【讨论】:

      【解决方案5】:

      现在您可以通过运行sudo gem install cocoapods 来使用cocoapods 0.36.0 版本,它支持集成swift 框架。当你使用 swift 编写的框架时,你应该在 Podfile 中显式使用它:

      platform :ios, '8.0'
      use_frameworks!
      pod 'Alamofire'
      

      【讨论】:

        【解决方案6】:

        在我的例子中,我发现我没有将 pod 添加到主要目标,而是仅添加到 Podfile 中的 Test 和 TestUI 目标,如 here 所述。

        【讨论】:

          猜你喜欢
          • 2017-04-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-30
          • 2017-01-22
          • 2016-07-29
          • 2019-07-12
          相关资源
          最近更新 更多