一尘不染

类“ GTMHTTPUploadFetcher”的接口定义重复

swift

我计划在我的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框架,而不是静态库。

吊舱安装成功。但是,当我构建项目时,出现以下错误。

类“ GTMHTTPUploadFetcher”的接口定义重复

删除DerivedData文件夹并清理项目无效。

我也尝试过不添加use_frameworks!,然后通过桥接头文件的方式添加库。那没有问题。关键是我所有其他依赖项都已启用。不幸的是,CocoaPods

支持仅对某些吊舱启用该标志。

有解决此问题的解决方法吗?


正如Google的文档所述,Google工程师应该监视标记有google-
drive-sdk的问题,因此我希望至少他们会看到并尽快解决。


阅读 244

收藏
2020-07-07

共1个答案

一尘不染

我遇到了同样的问题。我的解决方案是 使用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桥接头”设置为桥接头的绝对路径。
2020-07-07