未找到GTMSessionFetcher.h文件将应用程序升级到最新的google-api-objectivec-client

and*_*der 4 xcode objective-c ios google-drive-api ios9

我在iOS应用中实现了对Google云端硬盘的访问权限.这是自2014年中期以来应用程序中的一个活跃功能,并且在iOS 6,7和8下正常运行.我目前正在检查我的项目是否与iOS 9兼容.

我已下载最新版本google-api-objectivec-client以确保我的项目保持最新状态.

我重新编写了标准的Google实施工具......详见本页详细信息,并在本文末尾包含完整性.

问题:当我尝试构建我的任何版本时,我收到错误" GTMSessionFetcher.h找不到文件".

我确定我已按照以下/ Google网页上的步骤正确实施了API.

我查看了旧版本的代码,但遗憾的是我没有备份Google SDK,因此无法轻易说出已更改的内容.

它似乎源于......内GTMOAuth2Authentication.h......

#if GTM_USE_SESSION_FETCHER
  #import "GTMSessionFetcher.h"
#else
  #import "GTMHTTPFetcher.h"
#endif  // GTM_USE_SESSION_FETCHER
Run Code Online (Sandbox Code Playgroud)

我不明白如何GTM_USE_SESSION_FETCHER设置以及在这种情况下为什么会这样.

任何建议都非常感谢.


适用于iOS的Google Drive API实施

注意:步骤1和2完成没有问题.

第3步:准备项目

  1. 在Xcode中,创建一个包含示例应用程序的新项目:
    • 单击文件>新建>项目,选择单视图应用程序模板,然后单击下一步.
    • 填写产品名称,组织名称和公司标识符.确保选择Objective-C作为语言,然后单击"下一步".
    • 选择项目的目标目录,然后单击"创建".
  2. 通过GTL.xcodeprojSource上面的客户端库下载文件夹的目录拖动到XCode项目来添加客户端库.
  3. 在XCode项目导航器中,选择您创建的项目以显示项目设置.
  4. 在项目设置中选择Build Phases选项卡,然后修改Link Binary with Libraries列表以包括:
    • libGTLTouchStaticLib.a 来自GTL项目.
    • Security.frameworkSystemConfiguration.framework.
  5. 在项目设置中选择Build Settings选项卡,然后修改以下两个构建设置:
    • 添加-ObjC -all_load到链接>其他链接器标志设置.编辑这些字段的一种好方法是在字段名称上单击一次以选择它,然后单击Enter以输入设置.
    • 通过使用递归选项将客户端库的Source目录添加到"搜索路径">"用户头"搜索路径部分,将客户端库头添加到应用程序项目.您可以通过将**附加到路径或双击输入的路径并在出现的对话框中选择递归来选择递归选项.要在基于Unix的系统中查找此目录的绝对路径,请在终端窗口中导航到步骤2中下载客户端库的目录,cd进入源目录,然后键入pwd命令.
  6. 拖动GTMOAuth2ViewTouch.xib从客户端库的Source/OAuth2/Touch文件夹到应用程序的Supporting Files文件夹.
  7. 通过拖动添加驱动器,API服务GTLDrive.h,并GTLDrive_Sources.m从客户端库的Source/Services/Drive/Generated文件夹直接到应用程序项目.

and*_*der 8

最初感谢Rivero指出我正确的方向......

感谢彼得这个问题的回答.

为iOS 6,7,8和9构建...

黑客攻击以下......


步骤1

GTMOAuth2Authentication.h(OAuth目录)和 GTLService.h(对象目录)中

找到这个代码块...

#if (!TARGET_OS_IPHONE && defined(MAC_OS_X_VERSION_10_11) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_11) \
  || (TARGET_OS_IPHONE && defined(__IPHONE_9_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0)
  #ifndef GTM_USE_SESSION_FETCHER
    #define GTM_USE_SESSION_FETCHER 1
  #endif
#endif
Run Code Online (Sandbox Code Playgroud)

......并且改变

#define GTM_USE_SESSION_FETCHER 1
Run Code Online (Sandbox Code Playgroud)

... 至

#define GTM_USE_SESSION_FETCHER 0
Run Code Online (Sandbox Code Playgroud)

第2步

GTMGatherInputStream.m(HTTPFetcher目录)中

......改变

return [[[self alloc] initWithArray:dataArray] autorelease];
Run Code Online (Sandbox Code Playgroud)

... 至

return [[(GTMGatherInputStream*)[self alloc] initWithArray:dataArray] autorelease];
Run Code Online (Sandbox Code Playgroud)

第3步

GTMHTTPFetcherLogging.m(HTTPFetcher目录)中

......改变

NSString *escapedResponseFile = [responseDataFileName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

... 至

NSString *escapedResponseFile = [responseDataFileName stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
Run Code Online (Sandbox Code Playgroud)

第4步

GTL项目设置中,在Apple LLVM 7.0警告 - 所有语言下

......改变

不推荐使用的功能=是

... 至

不推荐使用的功能=否



Yuc*_*hou 5

@ andrewbuilder的解决方案有效.

如果你的目标是IOS 8,那就改变吧

#define GTM_USE_SESSION_FETCHER 1
Run Code Online (Sandbox Code Playgroud)

#define GTM_USE_SESSION_FETCHER 0
Run Code Online (Sandbox Code Playgroud)

在GTMOAuth2Authentication.h和GTLService.h文件中.

如果您的目标是IOS 9,则需要使用GTMSessionFetcher文件(https://code.google.com/p/gtm-session-fetcher/)替换GTMHTTPFetcher文件.

参考:https://github.com/google/google-api-objectivec-client/issues/88