【问题标题】:Adding Google Objective-C API 'GTL' to iPhone project将 Google Objective-C API 'GTL' 添加到 iPhone 项目
【发布时间】:2012-07-07 10:00:43
【问题描述】:

如何将 Google Drive API 添加到我的 iPhone 项目中才能使用它?

到目前为止,我已经将 GTL 项目拖到了我当前的应用程序项目中(以便它嵌套在我的应用程序项目下)。然后,在我的应用程序目标的构建阶段,我添加了 GTL.framework,然后将 GTL.framework 添加到我的“使用库链接二进制文件”(参见附图)。这会引发以下错误:

clang: error: no such file or directory: '/Users/xxx/Library/Developer/Xcode/DerivedData/Golf-hfbczyaemhyzgvbrtgdxqnlzeuaa/Build/Products/Debug-iphonesimulator/GTL/GTL'

我该如何解决这个问题?

【问题讨论】:

  • 3.5 年后,这些步骤仍然令人困惑和令人沮丧,谷歌的人就不能让它变得更简单和直接吗? ://

标签: objective-c xcode api sdk google-drive-api


【解决方案1】:

我也为这个错误消息而苦苦挣扎。我就是这样解决的:

确保您已在 GTLSource/Common/ 下添加您正在使用的服务的文件夹(例如,为 GoogleDrive 添加 Drive 文件夹)。

在 GTL.xcodeproj(您已经添加到工作区)下找到 GTLSource 文件夹并将其拖到您的主项目(在您的情况下为高尔夫)。完成!

现在您可以删除对已添加到工作区的 GTL.xcodeproj 的引用。

使用这种方法,您甚至不需要添加库(如果已添加,请从链接库列表中删除它们)。

Google API 文档与 Apple 的文档完全不同(不好)。

我还应该提到我正在为 iOS 而不是 MacOSX 构建应用程序,但这也应该适用于 OSX。

【讨论】:

  • 我又遇到了这个问题,忘记了我之前已经解决过,登陆这个页面却没有意识到我实际上已经发布了这个解决方案:)
  • 对于 Swift 解决方案,请使用 Rob 的答案并查看我自己的 stackoverflow.com/questions/24082606/…
  • @RawMean 您所说的“确保您已在 GTLSource/Common/ 下添加了您正在使用的服务的文件夹(例如,为 GoogleDrive 添加 Drive 文件夹)到底是什么意思。”云端硬盘文件夹中有什么?
  • TNX 很多,它工作,虽然它抱怨“OSX xibs 不支持目标设备'ipad'”(我使用 XCode7.1.1) - 我刚刚删除了 GTL Source\ 中对 Mac 文件夹的引用Common\OAuth2,只留下Touch。
  • @BorisGafurov 如果您使用的是 GoogleDrive,Drive 文件夹应包含 SDK 中与 GoogleDrive 服务对应的文件。另一种说法是,您可以删除所有 google 服务的文件夹,但您实际使用的服务除外(以减小应用程序的大小)。关于删除对 Mac 文件夹的引用:是的,这也是我为摆脱该错误所做的。
【解决方案2】:

不仅要执行上述操作,还要进入“[Project Name] Targets->Build Phases> Compile Sources”并单击 + 按钮。然后添加所有 .m 文件,由于某种原因,大多数文件不是自动的。

我还必须从 Drive 文件夹中删除(引用)“GTLDrive_Souces.m”,但我不明白为什么我必须这样做。

【讨论】:

  • "不仅做上面的吗?"我不明白你的意思。你的答案上面有很多东西。
【解决方案3】:

我今天大部分时间都在为这个确切的问题而苦苦挣扎,我发现它非常令人沮丧。我终于弄明白了,所以这里有一个简单的分步指南,介绍如何使用 XCode5、使用 ARC 将 Google API 添加到 iOS7 项目,而无需创建工作区或任何其他操作。

RawMean 提供的答案效果很好,但它给了我 ARC 的问题。我也不喜欢您必须添加项目、创建工作区然后删除项目的事实。所以我的解决方案将同时处理这两个问题。

  1. 查看代码。为此,您只需从终端运行svn checkout http://google-api-objectivec-client.googlecode.com/svn/trunk/ google-api-objectivec-client-read-only。我将此代码称为“Google 的代码”
  2. 转到项目的构建阶段。展开“Link Binary With Libraries”并添加Security.frameworkSystemConfiguration.framework。这两个是 Google 代码所必需的。
  3. 转到项目的构建设置。使用那里的搜索框,查找Other Linker Flags(确保选择搜索框左侧的“全部”)。添加-ObjC -all_load
  4. 现在搜索 User headers search path 并将完整路径添加到 Goggle 的 /Source 目录。确保选择recursive
  5. 使用 Finder 转到 Google 的 /Source/OAuth2/Touch 目录。将 GTMOAuth2ViewTouch.xib 拖放到您的项目中。
  6. 返回 Finder 并转到 Google 的 /Source 目录。将 GTLCommon_Sources.mGTLCommon_Networking.m 拖放到您的项目中。
  7. 现在,您需要导入要使用的服务的文件。就我而言,我需要使用 Google Drive,所以我会添加这些。在 finder 中,转到 Google 的 /Source/Services/Drive/Generated 目录。将GTLDrive.hGTLDrive_Sources.m 拖放到您的项目中。如果您想使用其他服务,请转到其目录并导入相应的 .h 和 .m 文件。
  8. 由于某种原因,Google 的代码不使用 ARC,因此如果您现在尝试构建,您将收到 ARC 编译错误。因此,我们需要仅针对 Google 的代码禁用 ARC。为此,请返回项目的构建阶段,但这次展开“编译源”。确保GTLCommon_Sources.mGTLCommon_Networking.m 存在。选择它们,按回车键并输入-fno-objc-arc。这将为他们两个禁用 ARC。确保您没有为任何其他文件添加此选项(除非您知道自己在做什么)。
  9. 你完成了!现在,只要您想使用 Google 的 API,只需导入 GTMOAuth2ViewControllerTouch.h 和您的服务标头即可。就我而言,由于我使用的是 Google Drive,因此我还将导入 GTLDrive.h

我希望这有助于并避免一些人把头发都拔掉。

【讨论】:

  • 为我工作。谢谢!
  • 这适用于 Swift,详情请参阅我的答案stackoverflow.com/questions/24082606/…
  • 你绝对是个救世主!非常感谢。根据 Google 的官方文档,经过 2 小时的努力,这项工作得以实现。再次感谢。
  • 还要确保进入“GTLNetworking_Sources”类并将 GTMOAuth2ViewControllerTouch.m 更改为 GTMOAuth2ViewControllerTouch.h
  • 当所有其他答案都失败时,你救了我!
【解决方案4】:

使用 Pod 更好

  1. 如何安装 CocoaPods 并设置您的 Xcode 项目 供参考:[http://blogs.triffort.com/?p=309][1]
  2. 打开pod文件并添加

    pod 'Google-API-Client/Drive', '~> 1.0' 保存 pod 文件并在终端调用 pod install。注意:pod 文件必须提供 link_with 'Your_project_name', 'Your_project_nameTests' 在此行之后只添加 你的图书馆

【讨论】:

  • 您如何使用 cocoapods 将文件 GTMOAuth2ViewControllerTouch.hGTLDrive.h 导入到您的项目中?我无法使用任何导入语句,也找不到要导入的模块。
  • @KVISH:目前你做了什么?你打开了 .workspace 还是 .xcodeproject ?
  • 这是一个旧答案,请使用官方 pod。见:github.com/google/google-api-objectivec-client/issues/…
【解决方案5】:

这并没有真正解决安装 Google API 的问题,但是在这个 repo 中,我从 iOS 应用程序访问了 Google 表单,而没有使用 Google 的 API。 https://github.com/goktugyil/QorumLogs

所以在一些项目中你可以跳过安装 API 部分

这里是如何设置它的教程: https://github.com/goktugyil/QorumLogs/blob/master/Log%20To%20GoogleDocs.md

下面是代码:

private static var googleFormLink: String!
private static var googleFormAppVersionField: String!
private static var googleFormUserInfoField: String!
private static var googleFormMethodInfoField: String!
private static var googleFormErrorTextField: String!

/// Setup Google Form links
static func setupOnlineLogs(#formLink: String, versionField: String, userInfoField: String, methodInfoField: String, textField: String) {
    googleFormLink = formLink
    googleFormAppVersionField = versionField
    googleFormUserInfoField = userInfoField
    googleFormMethodInfoField = methodInfoField
    googleFormErrorTextField = textField
}

private static func sendError(#text: String) {
    var url = NSURL(string: googleFormLink)
    var postData = googleFormAppVersionField + "=" + text
    postData += "&" + googleFormUserInfoField + "=" + "anothertext"                
    postData += "&" + googleFormMethodInfoField + "=" + "anothertext" 
    postData += "&" + googleFormErrorTextField + "=" + "anothertext" 

    var request = NSMutableURLRequest(URL: url!)
    request.HTTPMethod = "POST"
    request.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type")
    request.HTTPBody = postData.dataUsingEncoding(NSUTF8StringEncoding)
    var connection = NSURLConnection(request: request, delegate: nil, startImmediately: true)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 2013-12-15
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    相关资源
    最近更新 更多