类"GTMHTTPUploadFetcher"的重复接口定义

Isu*_*uru 7 ios cocoapods google-drive-api swift

我计划在Swift项目中使用Google Drive API.我正在尝试通过CocoaPods(v0.39.0)添加Drive SDK.下面是我的Podfile.

platform :ios, '8.0'
use_frameworks!

pod 'Google-API-Client/Drive'
Run Code Online (Sandbox Code Playgroud)

use_frameworks!添加了标志,以便CocoaPods可以将Objective-C pod转换为Swift框架而不是静态库.

Pod安装成功.但是,当我构建项目时,我收到以下错误.

类"GTMHTTPUploadFetcher"的重复接口定义

删除DerivedData文件夹并清理项目不起作用.

我也试过没有添加use_frameworks!,然后通过桥接头方式添加库.这没有问题.事情是我所有其他依赖项工作与它打开.不幸的是,CocoaPods 支持仅针对某些pod 播放该标志.

是否有解决此问题的解决方法?


正如Google的文档中所述,Google工程师据称会监控使用google-drive-sdk标记的问题,所以我希望至少他们会看到这个问题并尽快解决.

Dan*_*ang 3

我遇到了同样的问题。我的解决方案是不使用 CocoaPods 安装适用于 iOS 的 Google API 客户端,因为我使用的是基于 Swift 的 pod,因此无法删除use_frameworks!以尝试解决重复标头问题。

相反,我按照https://developers.google.com/drive/ios/quickstart?ver=swift上的步骤 2、3 和 4 的详细说明手动安装了该库。我按照说明进行操作,但将它们应用于我现有的工作区而不是创建新的工作区。

需要注意的是,我必须调整“用户标头搜索路径”中的路径,以匹配我实际从 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/源/GTMSessionFetcher.xcodeproj

选择“GTMSessionFetcher”项目并进行以下更改:

  • 添加类型为 iOS > Framework & Library> Cocoa Touch Static Library 的新目标,并将其命名为“GTMSessionFetcherLib”。
  • 将项目的 GTMSessionFetcher 组中的所有 .m 文件添加到目标的 Build Phases > Compile Sources 部分。

选择“GTL”项目的“GTLTouchStaticLib”目标并进行以下更改:

  • 将库 GTMSessionFetcher/libGTMSessionFetcherLib.a 添加到“构建阶段”>“将二进制文件与库链接”。
  • 将 gtm-session-fetcher/Source/ 的绝对路径添加到“构建设置”>“用户标头搜索路径”。
  • 将标志 GTM_USE_SESSION_FETCHER=1 添加到“构建设置”>“预处理器宏”。
  • 删除“GTL”项目的“GTLFramework”目标。
  • 在项目导航器中,删除 GTL 项目的 GTL Source > Common > HTTPFetcher 组。

第四步:准备项目

  • 创建一个名为“QuickstartApp”的新 iOS > 应用程序 > 单视图应用程序项目。将语言设置为 Swift ,并在保存项目时将添加到和组字段设置为“快速启动”。
  • 将以下框架和库添加到项目的“构建阶段”>“将二进制文件与库链接”部分:libGTLTouchStaticLib.a
    • 安全框架
    • 系统配置.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 添加到项目的支持文件组中。
  • 将以下文件添加到 QuickstartApp 组:
    • google-api-objectivec-client/源/服务/驱动器/生成/GTLDrive_Sources.m
    • google-api-objectivec-client/源/服务/驱动器/生成/GTLDrive.h
  • 如果没有自动创建,请创建一个新的头文件 Bridging-Header.h,其中包含以下内容:
    • #import "GTMOAuth2ViewControllerTouch.h"
    • #import "GTLDrive.h"
  • 将“构建设置”>“Objective-C 桥接标头”设置为桥接标头的绝对路径。