无法将 Swift 和 Obj-C 库与 Cocoapods 一起使用
Unable to use both Swift and Obj-C libs with Cocoapods
我刚刚开始一个新的 Swift 项目,我想使用不同的库。特别是,我想使用 Realm.io,一个 Obj-C 库。但是,我也想使用纯 Swift 库,例如 Alamofire 或 Dollar。
我使用 Cocoapods 来管理我的依赖项。我使用最新版本 (0.37.0) 和新的 use_frameworks!
标志。 pod install
随时成功。
不幸的是,当我尝试构建我的项目时,出现了两个错误(针对我的主要目标):
Umbrella header Realm.h not found
来自 module.modulemap
Could not build Objective-C module Realm
来自任何使用 import Realm
的文件
其他导入工作正常。
我注意到以下几点:如果我删除纯 Swift 库和 use_frameworks
,一切正常。我知道 this current issue from Cocoapods。但是,Realm 要求开发人员使用该标志应该不是问题。
这是我的 Podfile:
platform :ios, '8.0'
use_frameworks!
target 'rothrock' do
pod 'Realm'
pod 'Cent'
pod 'SwiftyJSON'
pod 'Alamofire'
end
target 'rothrockTests', :exclusive => true do
end
我没有使用桥接头。我应该吗?
有什么想法或解决方法吗?
您需要桥接 header 并在那里导入您的 Objective-C 库 header。
如果您只使用 Realm,您可以查看此文档以了解 Swift http://realm.io/docs/cocoa/(转到选项卡中的 CocoaPods)
Swift
- 安装 CocoaPods 0.36.0 或更高版本 (
[sudo] gem install cocoapods
)。
- 在您的 Podfile 中,将
use_frameworks!
和 pod 'Realm'
添加到您的应用目标。
- 从命令行,运行 pod install。
- 使用 CocoaPods 生成的 .xcworkspace 文件来处理您的项目!
- 下载最新版本的 Realm 并解压 zip。
- 将位于 Swift/RLMSupport.swift 的文件拖到 Xcode 项目的文件导航器中,选中“需要时复制项目”复选框。
我刚刚在一个项目中安装了 Realm 库,其中包含您上面提到的一些库,例如 Alamofire 和 SwiftyJSON 和其他人,当您构建项目甚至放置 import Realm
时它工作正常,根本没有编译错误。
我使用的是稳定版 Cocoapods 0.36.0,这是我的 PodFile :
source 'https://github.com/CocoaPods/Specs.git'
use_frameworks!
platform :ios, '8.0'
link_with 'ApiWorkflow', 'ApiWorkflowTests'
pod 'SwiftyJSON', '~> 2.2'
pod 'Alamofire', '~> 1.2'
pod 'Typhoon', '~> 3.0'
pod 'SwiftCSV', '~> 0.1'
pod 'Realm'
希望对你有所帮助
好的,这是完整的演练:
- 使用 Cocoapods 和
use_frameworks!
标志安装依赖项。
- 由于您需要使用 Objective-C 依赖项,因此创建桥接 header。您可以通过将 Objective-C class 导入您的 Swift 项目来轻松创建一个,而不是删除它(向导会询问您是否需要桥接 header)。否则,创建一个新的 header 文件。然后,导航到您的目标配置并在
Swift Compiler - Code Generation
> Objective-C Bridging header
. 中输入您的文件名
- 仍在您的目标配置中,在
Search Paths
> User Header Search Paths
中添加一个新条目:Pods
作为值并将其标记为递归。
- 从您的代码中删除与您的 Objective-C 库相关的所有
import
指令。
- 构建您的项目。你应该成功了。
我刚刚开始一个新的 Swift 项目,我想使用不同的库。特别是,我想使用 Realm.io,一个 Obj-C 库。但是,我也想使用纯 Swift 库,例如 Alamofire 或 Dollar。
我使用 Cocoapods 来管理我的依赖项。我使用最新版本 (0.37.0) 和新的 use_frameworks!
标志。 pod install
随时成功。
不幸的是,当我尝试构建我的项目时,出现了两个错误(针对我的主要目标):
Umbrella header Realm.h not found
来自module.modulemap
Could not build Objective-C module Realm
来自任何使用import Realm
的文件
其他导入工作正常。
我注意到以下几点:如果我删除纯 Swift 库和 use_frameworks
,一切正常。我知道 this current issue from Cocoapods。但是,Realm 要求开发人员使用该标志应该不是问题。
这是我的 Podfile:
platform :ios, '8.0'
use_frameworks!
target 'rothrock' do
pod 'Realm'
pod 'Cent'
pod 'SwiftyJSON'
pod 'Alamofire'
end
target 'rothrockTests', :exclusive => true do
end
我没有使用桥接头。我应该吗?
有什么想法或解决方法吗?
您需要桥接 header 并在那里导入您的 Objective-C 库 header。
如果您只使用 Realm,您可以查看此文档以了解 Swift http://realm.io/docs/cocoa/(转到选项卡中的 CocoaPods)
Swift
- 安装 CocoaPods 0.36.0 或更高版本 (
[sudo] gem install cocoapods
)。 - 在您的 Podfile 中,将
use_frameworks!
和pod 'Realm'
添加到您的应用目标。 - 从命令行,运行 pod install。
- 使用 CocoaPods 生成的 .xcworkspace 文件来处理您的项目!
- 下载最新版本的 Realm 并解压 zip。
- 将位于 Swift/RLMSupport.swift 的文件拖到 Xcode 项目的文件导航器中,选中“需要时复制项目”复选框。
我刚刚在一个项目中安装了 Realm 库,其中包含您上面提到的一些库,例如 Alamofire 和 SwiftyJSON 和其他人,当您构建项目甚至放置 import Realm
时它工作正常,根本没有编译错误。
我使用的是稳定版 Cocoapods 0.36.0,这是我的 PodFile :
source 'https://github.com/CocoaPods/Specs.git'
use_frameworks!
platform :ios, '8.0'
link_with 'ApiWorkflow', 'ApiWorkflowTests'
pod 'SwiftyJSON', '~> 2.2'
pod 'Alamofire', '~> 1.2'
pod 'Typhoon', '~> 3.0'
pod 'SwiftCSV', '~> 0.1'
pod 'Realm'
希望对你有所帮助
好的,这是完整的演练:
- 使用 Cocoapods 和
use_frameworks!
标志安装依赖项。 - 由于您需要使用 Objective-C 依赖项,因此创建桥接 header。您可以通过将 Objective-C class 导入您的 Swift 项目来轻松创建一个,而不是删除它(向导会询问您是否需要桥接 header)。否则,创建一个新的 header 文件。然后,导航到您的目标配置并在
Swift Compiler - Code Generation
>Objective-C Bridging header
. 中输入您的文件名
- 仍在您的目标配置中,在
Search Paths
>User Header Search Paths
中添加一个新条目:Pods
作为值并将其标记为递归。 - 从您的代码中删除与您的 Objective-C 库相关的所有
import
指令。 - 构建您的项目。你应该成功了。