当前位置: 首页 > 面试题库 >

类“ GTMHTTPUploadFetcher”的接口定义重复

谷梁楷
2023-03-14
问题内容

我计划在我的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的问题,因此我希望至少他们会看到并尽快解决。


问题答案:

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


 类似资料:
  • 我正在使用一个接口来定义一个新类型。这是正确的做法吗?我做如下: 然后,为了实例化它,我必须这样做: 它实际上创建了一个空对象,这不是我想要的;但是如果没有这个,它会引发一个错误,例如,“无法读取未定义的属性‘问题’”。我定义新类型的方法是错误的吗? ====EDIT====以下是我根据你的评论所做的: 然后我说: 然后我仍然得到这个错误:无法读取未定义的属性“push”。我不想在定义接口的地方启

  • 1.1.1. Rokid客户端协议 1.1.1. Rokid客户端协议 目录 Tts接口定义 speech接口定义 asr接口定义 nlp接口定义 Tts接口定义 调用接口 bool prepare(const char* config_file); void release(); bool prepared(); int speak(const char* content, TtsCall

  • 3.3. 定义repository的接口 首先需要定义实体类的接口,接口必须继承repository并且输入实体类型和ID类型,如果需要用到CRUD方法,可以使用CrudRepository来替代Repository。 3.3.1. 自定义接口 通常,您的存储库接口将会扩展Repository, CrudRepository或PagingAndSortingRepository。 另外,如果你不想

  • 我正在编写一个代码,它取两个点,确定两个点的大小,比较它们,并返回哪个更大。我有我的主类和方法来运行所有的东西,然后还有另一个类点来实现我的接口。但是,我无法使从接口调用的方法正常工作。我的代码是: 当我尝试运行它时,我得到错误“exception in thread”main“java.lang.nullPointerException:不能调用”point.getMetality()“,因为”

  • 我有一个来自库的方法,看起来像这样: 而接口只有一个方法定义: 不幸的是,对于我的用例,我需要和。 一种解决方案是创建一个新类来实现和,在这种情况下,我必须为每个不同的用例创建一个不同的类。 通常,如果没有,我可以将方法作为lambda调用,这样就不用创建专门的类包了。 有没有办法用接口扩展这个lambda?

  • 在第一步中我们定义了一个针对特定域对象的repository接口,接口继承了Repository接口并且标明了域对象类型及其主键类型。如果想要暴露CRUD方法可以不继承Repository接口,直接继承CrudRepository接口即可。