11

如何将 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'

我该如何解决这个问题?

在此处输入图像描述

4

5 回答 5

25

今天大部分时间我都在为这个确切的问题而苦苦挣扎,我发现它非常令人沮丧。我终于弄明白了,所以这里有一个简单的分步指南,介绍如何使用 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. 转到项目的构建阶段。展开“将二进制文件与库链接”并添加Security.frameworkSystemConfiguration.framework。这两个是谷歌代码所必需的。
  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.

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

于 2014-02-27T00:49:58.280 回答
14

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

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

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

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

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

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

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

在此处输入图像描述

于 2012-07-07T19:53:51.293 回答
1

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

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

于 2013-05-26T04:37:10.117 回答
1

最好使用 Pod

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

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

于 2015-05-19T03:20:46.037 回答
1

这并不能真正解决安装 Google API 的问题,但在这个 repo 中,我在不使用 Google API 的情况下从 iOS 应用程序访问了 Google Forms。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)
}
于 2015-09-17T10:09:49.617 回答