我计划在我的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 Pod转换为Swift框架,而不是静态库。
use_frameworks!
吊舱安装成功。但是,当我构建项目时,出现以下错误。
类“ GTMHTTPUploadFetcher”的接口定义重复
删除DerivedData文件夹并清理项目无效。
我也尝试过不添加use_frameworks!,然后通过桥接头文件的方式添加库。那没有问题。关键是我所有其他依赖项都已启用。不幸的是,CocoaPods 不 支持仅对某些吊舱启用该标志。
有解决此问题的解决方法吗?
正如Google的文档所述,Google工程师应该监视标记有google- drive-sdk的问题,因此我希望至少他们会看到并尽快解决。
我遇到了同样的问题。我的解决方案是 不 使用CocoaPods 安装 适用于iOS的Google API客户端,因为我使用的是基于Swift的Pod,因此无法删除use_frameworks!以解决重复的标头问题。
我改为按照步骤2、3和4的https://developers.google.com/drive/ios/quickstart?ver=swift中的详细说明手动安装了库。我按照说明进行操作,但将其应用于 现有的工作区, 而不是创建新的工作区。
重要的是要注意,我必须调整“ 用户标题搜索路径”中的路径, 以匹配我实际从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并创建一个名为“ Quickstart”的新工作区。使用文件>将文件添加到“快速入门” …,将以下项目从您在上一步中克隆的库中添加到工作区中: google-api-objectivec-client / Source / GTL.xcodeproj gtm-session-fetcher / Source / GTMSessionFetcher.xcodeproj 选择“ GTMSessionFetcher”项目并进行以下更改: 添加类型为iOS>框架和库> Cocoa Touch静态库的新目标,并将其命名为“ GTMSessionFetcherLib”。 将项目的GTMSessionFetcher组中的所有.m文件添加到目标的“构建阶段”>“编译源”部分。 选择“ GTL”项目的“ GTLTouchStaticLib”目标并进行以下更改: 将库GTMSessionFetcher / libGTMSessionFetcherLib.a添加到Build Phases> Link Binary with Libraries。 将绝对路径添加到gtm-session-fetcher / Source /到Build Settings> User Header Search Paths。 将标志GTM_USE_SESSION_FETCHER = 1添加到Build Settings> Preprocessor Macros。 删除“ GTL”项目的“ GTLFramework”目标。 在项目导航器中,删除GTL项目的GTL Source> Common> HTTPFetcher组。 步骤4:准备项目 创建一个新的iOS> Application> Single View Application项目,名为“ QuickstartApp”。将Language设置为Swift,并在保存项目时将Add to和Group字段设置为“ Quickstart”。 将以下框架和库添加到项目的“构建阶段”>“使用库链接二进制文件”部分:libGTLTouchStaticLib.a 安全框架 SystemConfiguration.framework 更改以下构建设置: 将-ObjC -all_load添加到其他链接器标志。 将以下目录的绝对路径添加到“用户标题搜索路径”: gtm-session-fetcher /来源/ google-api-objectivec-client /来源/ ** 将标志GTM_USE_SESSION_FETCHER = 1添加到预处理器宏。 将文件google-api-objectivec-client / Source / OAuth2 / Touch / GTMOAuth2ViewTouch.xib添加到项目的Supporting Files组。 将以下文件添加到QuickstartApp组: google-api-objectivec-client / Source / Services / Drive / Generated / GTLDrive_Sources.m google-api-objectivec-client / Source / Services / Drive / Generated / GTLDrive.h 如果未自动创建,请创建一个新的头文件Bridging-Header.h,其内容如下: #import "GTMOAuth2ViewControllerTouch.h" #import "GTLDrive.h" 将“构建设置”>“ Objective-C桥接头”设置为桥接头的绝对路径。
步骤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并创建一个名为“ Quickstart”的新工作区。使用文件>将文件添加到“快速入门” …,将以下项目从您在上一步中克隆的库中添加到工作区中:
选择“ GTMSessionFetcher”项目并进行以下更改:
选择“ GTL”项目的“ GTLTouchStaticLib”目标并进行以下更改:
步骤4:准备项目
#import "GTMOAuth2ViewControllerTouch.h"
#import "GTLDrive.h"