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