iOS8:自定义Swift Framework访问用Objective-C编写的外部框架

use*_*173 7 frameworks couchbase-lite xcode6 ios8

我正在尝试CouchbaseKit在Swift中创建一个名为(Xcode中的新目标)的自定义框架.在我的内部CouchbaseKit,我需要访问CouchBaseLite Framework完全用Obj-C编写的内容.我正在使用Cocoapods管理CouchBaseLite和其他几个框架.下面是我的podfile.

Podfile

# Uncomment this line to define a global platform for your project
link_with ['CouchbaseKit']
# platform :ios, '8.0'

use_frameworks!
target 'CouchbaseDB' do
link_with ['CouchbaseKit']

pod 'couchbase-lite-ios'
pod 'SwiftyJSON', '~> 2.2.0'
pod 'Alamofire', '~> 1.2'
pod 'XCGLogger', '~> 2.0'
end

target 'CouchbaseDBTests' do
end

target 'CouchbaseKit' do
end

target 'CouchbaseKitTests' do
end
Run Code Online (Sandbox Code Playgroud)

项目内的Pod:

在此输入图像描述

对于我的TARGETS,我在Build Phases中有以下设置.

定义模块

允许框架模块中的非模块化包含

问题: 当我尝试访问CouchbaseKit(我的自定义框架)中的CouchbaseLite框架时,出现错误,"没有这样的模块'CouchbaseLite'不存在.

在此输入图像描述

尝试:

  1. 由于项目是在Swift中,我创建了一个Objective-C文件并点击是" 你想配置一个Objective-C桥接头吗? "

  2. 即使允许非模块化包括框架模块设置为YES的所有目标,当我尝试我仍然得到一个错误#import <CouchbaseLite/CouchbaseLite.h>CouchbaseKit.h 在此输入图像描述

以下是我的自定义框架的构建阶段 CouchbaseKit

在此输入图像描述

问题: 如何在我的自定义Swift框架中看到外部Objective-C框架(CouchasebaseLite)?

otr*_*tri 2

不幸的是,Cocoapods 0.39 遇到了“Transitive Vendor Dynamic Libraries Unsupported”的问题,您将在最新的 couchbase-lite-ios 版本(包括二进制 CouchbaseLite.framework)中看到这一点。不幸的是,这个问题让我很困扰,我不得不重构所有内容以使用 Carthage,并在最终项目中手动管理我的框架。

说到这里,发布的二进制文件 CouchbaseLite.framework 只是缺少模块映射。

添加一项到:CouchbaseLite.framework/Modules/module.modulemap

framework module CouchbaseLite {
  umbrella header "CouchbaseLite.h"

  export *
  module * { export * }
}
Run Code Online (Sandbox Code Playgroud)

然后,您将能够将此框架包含到桥接标头中,并正确嵌套动态框架。但您可能需要像我一样转而使用 Carthage 构建 CouchbaseKit.framework。

  • Carthage 有一个很好的目的,但现在(2015 年 11 月 7 日)围绕 Xcode 7 的开发空间和框架从静态库切换到所有动态库存在很多争议。所以有一半的时间依赖是行不通的。Xcode 7 正在建立一个新标准,最终我们都会采用动态框架。Carthage 的价值在于快速整合依赖项并使其保持最新状态。Cocoapods 在 OSS 方面整体表现较好,但在具有私有代码依赖项的客户端项目中部署代码方面表现较差。 (2认同)