类“GTMHTTPUploadFetcher”的重复接口定义
我打算在Swift项目中使用Google Drive API 。 我试图通过CocoaPods(v0.39.0)添加Drive SDK。 以下是我的Podfile。
platform :ios, '8.0' use_frameworks! pod 'Google-API-Client/Drive'
我有use_frameworks!
标志的添加,以便CocoaPods可以将Objective-C窗格转换为Swift框架而不是静态库。
Pod安装成功。 但是,当我build立项目,我得到以下错误。
类“GTMHTTPUploadFetcher”的重复接口定义
删除DerivedData文件夹并清理项目不起作用。
我也尝试不添加use_frameworks!
然后通过桥接头的方式添加库。 这没有问题。 事情是所有我的其他依赖与它打开工作。 不幸的是CocoaPods 不 支持只为某些豆荚转换该标志。
有没有解决这个问题的解决方法?
正如谷歌的文档所述 ,谷歌的工程师们应该可以监控google-drive-sdk的问题,所以我希望至less他们能够看到这个问题并尽快解决。
我遇到了同样的问题。 我的解决scheme是不使用CocoaPods为iOS 安装 Google API Client,因为我使用的是基于Swift的Pod,所以我无法删除use_frameworks!
试图解决重复的头问题。
我按照https://developers.google.com/drive/ios/quickstart?ver=swift上步骤2,步骤3和步骤4的详细说明手动安装了库。我按照说明将其应用于现有的工作区而不是创build新的工作区。
请注意,我必须调整“ 用户标题searchpath”中的path,以匹配我实际从Google复制源代码的位置。
我在这里复制说明以供参考。
第2步:下载Google客户端库
运行以下命令以使用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并创build一个名为“Quickstart”的新工作空间。 使用“文件”>“将文件添加到”“快速入门”…,将以下项目添加到您在上一步中克隆的库中的工作区中:
- 谷歌-API的ObjectiveC客户/来源/ GTL.xcodeproj
- GTM-会话提取器/来源/ GTMSessionFetcher.xcodeproj
select“GTMSessionFetcher”项目并进行以下更改:
- 添加iOS> Framework&Library> Cocoa Touch静态库types的新目标,并将其命名为“GTMSessionFetcherLib”。
- 将项目的GTMSessionFetcher组中的所有.m文件添加到目标的Build Phases> Compile Sources部分。
select“GTL”项目的“GTLTouchStaticLib”目标并进行以下更改:
- 将库GTMSessionFetcher / libGTMSessionFetcherLib.a添加到“构build阶段”>“与库链接二进制文件”。
- 将绝对path添加到gtm-session-fetcher / Source /到Build Settings> User Header Search Paths。
- 将标志GTM_USE_SESSION_FETCHER = 1添加到“生成设置”>“预处理器macros”。
- 删除“GTL”项目的“GTLFramework”目标。
- 在项目导航器中,删除GTL项目的GTL Source> Common> HTTPFetcher组。
步骤4:准备项目
- 创build一个名为“QuickstartApp”的新的iOS> Application> Single View Application项目。 将语言设置为Swift,保存项目时,将“添加到”和“组”字段设置为“快速启动”。
- 将以下框架和库添加到项目的Build Phases> Link Binary with Libraries部分:libGTLTouchStaticLib.a
- Security.framework
- SystemConfiguration.framework
- 更改以下生成设置:
- 添加-ObjC -all_load到其他链接器标志。
- 将以下目录的绝对path添加到用户标题searchpath:
- GTM-会话提取器/来源/
- 谷歌-API的ObjectiveC客户/来源/ **
- 将标志GTM_USE_SESSION_FETCHER = 1添加到预处理器macros。
- 将文件google-api-objectivec-client / Source / OAuth2 / Touch / GTMOAuth2ViewTouch.xib添加到项目的支持文件组中。
- 将以下文件添加到QuickstartApp组:
- 谷歌-API的ObjectiveC客户/来源/服务/驱动器/生成/ GTLDrive_Sources.m
- 谷歌-API的ObjectiveC客户/来源/服务/驱动器/生成/ GTLDrive.h
- 如果没有自动创build,则使用以下内容创build一个新的头文件Bridging-Header.h:
#import "GTMOAuth2ViewControllerTouch.h"
#import "GTLDrive.h"
- 将“生成设置”>“Objective-C桥接头”设置为桥接头的绝对path。
根据谷歌,这个错误是由第三方使用cocoapod造成的,但是他们现在有一个官方的pod( 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 'GTMOAuth2'
pod 'Google/SignIn'
我发现唯一的解决方法是,您必须进入Google Drive导入的三个项目,并检查导入是如何完成的。 现在它的导入头,而不是框架(三个框架相互依赖)。 你必须手动做,它会工作。
我没有代码示例向您展示,但我知道我上次以这种方式工作。
简单的解决scheme:
转到编辑scheme – >select生成 – >生成选项取消并行生成
现在运行你的App