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

我在iOS应用中实现了对Google云端硬盘的访问。 自2014年年中以来,这一直是应用程序中的一个主动function,并且在iOS 6,7和8下正常运行。我目前正在检查我的项目是否与iOS 9兼容。

我已经下载了最新的google-api-objectivec-client以确保我的项目保持最新状态。

我重新编写了标准的Google实现……如本页所详述的,并在本文末尾包含完整性。

问题:当我尝试构build任何版本时,收到错误“ GTMSessionFetcher.h file not found”。

我确定我已经按照Google网页上下面的步骤正确实施了API。

我已经浏览了我的代码的旧版本,但不幸的是我没有备份Google SDK,所以不能轻易地告诉发生了什么变化。

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

 #if GTM_USE_SESSION_FETCHER #import "GTMSessionFetcher.h" #else #import "GTMHTTPFetcher.h" #endif // GTM_USE_SESSION_FETCHER 

我不明白GTM_USE_SESSION_FETCHER是如何设置的,为什么在这种情况下会是真的。

任何build议不胜感激。


适用于iOS的Google Drive API实施

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

步骤3:准备项目

  1. 在Xcode中,创build一个包含示例应用程序的新项目:
    • 单击文件>新build>项目,select单一视图应用程序模板,然后单击下一步。
    • 填写产品名称,组织名称和公司标识符。 确保selectObjective-C作为语言,然后单击下一步。
    • select该项目的目标目录,然后单击创build。
  2. GTL.xcodeproj从客户端库下载文件夹的Source目录拖到XCode项目中,添加客户端库。
  3. 在XCode Project Navigator中,select您创build的项目以显示项目设置。
  4. select项目设置中的“构build阶段”选项卡,然后修改“ Link Binary with Libraries列表以包括:
    • 来自GTL项目的libGTLTouchStaticLib.a
    • Security.frameworkSystemConfiguration.framework
  5. 在项目设置中select“生成设置”选项卡,然后修改以下两个生成设置:
    • -ObjC -all_load到链接>其他链接器标志设置。 编辑这些字段的好方法是在字段名称上单击一次以select它,然后单击Enterinput设置。
    • 将客户端库头添加到应用程序项目中,方法是将客户端库的源目录添加到使用recursion选项的searchpath>用户头searchpath部分。 您可以selectrecursion选项,方法是将**添加到path中,或者双击input的path并在出现的对话框中selectrecursion。 要在基于Unix的系统中查找此目录的绝对path,请在terminal窗口中导航到步骤2中下载客户端库的目录,cd到Source目录中,然后键入pwd命令。
  6. GTMOAuth2ViewTouch.xib从客户端库的Source/OAuth2/Touch文件夹拖放到应用程序的“ Supporting Files夹中。
  7. 通过将GTLDrive.hGTLDrive_Sources.m从客户端库的Source/Services/Drive/Generated文件夹中直接拖到应用程序项目来添加Drive API服务。

感谢Rivero指引我朝着正确的方向发展

感谢彼得对这个问题的回答 。

build立iOS 6,7,8和9 …

黑客以下…


步骤1

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

find这个代码块…

 #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 

…和改变

 #define GTM_USE_SESSION_FETCHER 1 

… 至

 #define GTM_USE_SESSION_FETCHER 0 

第2步

GTMGatherInputStream.m (HTTPFetcher目录)

变化

 return [[[self alloc] initWithArray:dataArray] autorelease]; 

… 至

 return [[(GTMGatherInputStream*)[self alloc] initWithArray:dataArray] autorelease]; 

第3步

GTMHTTPFetcherLogging.m (HTTPFetcher目录)

变化

 NSString *escapedResponseFile = [responseDataFileName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

… 至

 NSString *escapedResponseFile = [responseDataFileName stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; 

步骤4

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

变化

弃用的function= YES

… 至

弃用函数=否


@ andrewbuilder的解决scheme的作品。

如果你的目标是IOS 8,只需改变

 #define GTM_USE_SESSION_FETCHER 1 

 #define GTM_USE_SESSION_FETCHER 0 

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

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

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

使用JSON-RFC的Objective-C的Google API客户端库已被replace为REST(尚未发布结束date)。

在这里输入图像说明

拉着新的图书馆,所有的依赖为我工作,没有任何黑客入侵。

https://github.com/google/google-api-objectivec-client

 git clone --recursive https://github.com/google/google-api-objectivec-client-for-rest.git 

我也面临同样的问题。这是我如何设法解决这个问题。

文档说,我们应该把绝对path在用户头searchpath 。我是绝对path,但我的目录名称中包含的空间,这是由Xcode不能正确理解。我的目录是

 /Users/maclover/Xcode Test Projects/Manager/gtm-session-fetcher/Source/ 

然后我改变到不包含任何空格的目录

 /Users/maclover/Desktop/Manager/gtm-session-fetcher/Source/ 

在我的应用程序和GTLTouchStaticLib中的用户标题searchpath中更改这个工作对我来说。对于客户端C客户端path也一样。

最后一件事就是不需要#define GTM_USE_SESSION_FETCHER 1改成#define GTM_USE_SESSION_FETCHER 0如果你正在使用最新的项目。这是以前的库的解决方法,谷歌已经在11月10日更新。

经过无数的试验和错误之后,我偶然发现了一个论坛post,说Google一直在关注API客户端的pod版本。

使用:

pod'GoogleAPIClient'

链接来源: GoogleApiClient

步骤1

GTMOAuth2Authentication.h

 #define GTM_USE_SESSION_FETCHER 1 to #define GTM_USE_SESSION_FETCHER 0 

第2步

GTMGatherInputStream.m

  return [[[self alloc] initWithArray:dataArray] autorelease]; ... to return [[(GTMGatherInputStream*)[self alloc] initWithArray:dataArray] autorelease]; 

第3 步像图像:ios版本select比ios 9更less

第4 步启用bitCode