类'GTMHTTPUploadFetcher'的重复接口定义
我计划在我的Swift项目中使用Google Drive API。我试图通过CocoaPods添加Drive SDK(v0.39.0)。以下是我的Podfile。类'GTMHTTPUploadFetcher'的重复接口定义
platform :ios, '8.0'
use_frameworks!
pod 'Google-API-Client/Drive'
我已经加入了use_frameworks!
标志,这样的CocoaPods可以Objective-C的豆荚转化为斯威夫特框架,而不是静态库。
Pod安装成功。但是,当我构建项目时,出现以下错误。类“GTMHTTPUploadFetcher”
删除DerivedData文件夹和清洁项目没有工作
重复的接口定义。
我也尝试过不添加use_frameworks!
,然后通过桥接标头方式添加库。这没有问题。事情是所有我的其他依赖与它打开工作。不幸的是,CocoaPods doesn'tsupport只是将某些标记转换为标记。
有没有解决此问题的解决方法?
正如谷歌的docs指出,谷歌的工程师据称监控标记与谷歌驱动-SDK的问题,所以我希望至少他们会看到这一点,并尽快修复它。
我遇到了同样的问题。我的解决方案是没有安装谷歌API客户端为iOS使用CocoaPods因为我使用基于Swift的豆荚,因此,我不能删除use_frameworks!
试图解决重复标题问题。
我代替手动安装库通过在https://developers.google.com/drive/ios/quickstart?ver=swift以下对步骤2,3中的详细说明,以及4.我按照说明,但应用于他们我的现有工作空间而不是创建新的工作空间的。
请务必注意,我必须调整用户标题搜索路径中的路径,以匹配我实际从Google复制源代码的位置。
我在这里复制说明以供参考。
第2步:下载的谷歌客户端库
运行以下命令使用Git下载库:
git clone https://github.com/google/google-api-objectivec-client.git
git clone https://github.com/google/gtm-oauth2.git
git clone https://github.com/google/gtm-session-fetcher.git
git clone https://github.com/stig/json-framework.git -b v2.3
cp -R gtm-oauth2/Source google-api-objectivec-client/Source/OAuth2
cp -R json-framework/Classes google-api-objectivec-client/Source/JSON
第3步:准备工作区
打开Xcode和创建一个名为 “快速启动” 新的工作空间。 使用文件>将文件添加到“快速入门” ......,从你在上一步克隆库中添加以下项目到工作区:
- 谷歌-API的ObjectiveC客户/来源/ GTL.xcodeproj
- GTM-会话提取器/来源/ GTMSessionFetcher.xcodeproj
选择 “GTMSessionFetcher” 项目,并进行以下修改:
- 添加t的新目标他键入iOS> Framework & Library> Cocoa Touch Static Library并将其命名为“GTMSessionFetcherLib”。
- 将项目GTMSessionFetcher组中的所有.m文件添加到目标的Build Phases> Compile Sources部分。
选择“GTL”项目的“GTLTouchStaticLib”的目标,并进行以下修改:
- 添加库GTMSessionFetcher/libGTMSessionFetcherLib.a建设阶段>链接二进制与图书馆。
- 添加绝对路径到gtm-session-fetcher/Source /到Build Settings> User Header Search Paths。
- 将标志GTM_USE_SESSION_FETCHER = 1添加到Build Settings> Preprocessor Macros。
- 删除“GTL”项目的“GTLFramework”目标。
- 在Project导航器中,删除GTL项目的GTL Source> Common> HTTPFetcher组。
第4步:准备项目
- 创建一个新的iOS>应用程序>单查看应用程序名为 “QuickstartApp” 项目。将语言设置为Swift,并在保存项目时将添加到和组字段设置为“快速启动”。
- 添加以下框架和库到项目的构建阶段>链接二进制与库部分: libGTLTouchStaticLib.a
- Security.framework
- SystemConfiguration.framework
- 更改以下构建设置:
- 将-ObjC -all_load添加到其他链接器标志。
- 绝对路径添加到以下目录到用户头搜索路径:
- GTM-会话提取器/来源/
- 谷歌-API的ObjectiveC客户/来源/ **
- 将标志GTM_USE_SESSION_FETCHER = 1添加到预处理器宏。
- 将文件google-api-objectivec-client/Source/OAuth2/Touch/GTMOAuth2ViewTouch.xib添加到项目的支持文件组中。
- 将下列文件添加到QuickstartApp组:
- 谷歌-API的ObjectiveC客户/来源/服务/驱动器/生成/ GTLDrive_Sources.m
- 谷歌-API的ObjectiveC客户/来源/服务/Drive/Generated/GTLDrive.h
- 如果没有自动创建,创建一个新的头文件转职Header.h具有以下内容:
#import "GTMOAuth2ViewControllerTouch.h"
#import "GTLDrive.h"
- 集构建设置> Objective-C的桥接报头到桥接报头的绝对路径。
我发现的唯一解决方法是您必须进入Google Drive导入的三个项目并检查导入是如何完成的。现在它的导入标题,而不是框架(三个框架相互依赖)。你必须手动做,它会工作。
我没有代码示例向您展示,但我知道我上次以这种方式工作。
据谷歌这个错误是通过使用cocoapod由第三方造成的,但他们现在已经在项目(https://github.com/google/google-api-objectivec-client/blob/master/GoogleAPIClient.podspec)官方吊舱和问题应该是固定的。
参见:https://github.com/google/google-api-objectivec-client/issues/103
用途:
pod 'GoogleAPIClient/Drive', '~> 1.0'
大概也:
pod 'GTMOAuth2'
或pod 'Google/SignIn'
简单的解决方案在这里:
去编辑方案 - >选择Build - >构建选项的勾去掉了并行化编译
现在运行你的应用程序
感谢您的回复。我只是试了一下就行了。虽然它不能解决最初的问题,但由于它的工作原理,我暂时会接受它。谢谢。我不相信Google会忽略这一点。这个问题已经存在好几个月了! – Isuru
谢谢@Isuru。我无法相信它的安装有多复杂。我相信一旦他们修改了代码,它会更容易,而且您的原始问题甚至可能会得到修复。像你说的那样,这是一个长期存在的问题。 – Daniel
是的。这是非常复杂的。我希望谷歌提供更多支持来分发他们的iOS SDK,因为他们明确表示他们将使用CocoaPods作为主要渠道。 – Isuru