Добавление Google Objective-C API 'GTL' в проект iPhone

Как добавить API Google Диска в проект iPhone, чтобы я мог его использовать?

До сих пор я перетащил проект GTL в мой текущий проект приложения (чтобы он был вложен в мой проект приложения). Затем, в фазах моей целевой целевой установки приложения, я добавил GTL.framework, а затем добавил GTL.framework в мой "Link binary with Libraries" (см. Прилагаемый рис.). Это вызывает следующую ошибку:

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

Как это исправить?

enter image description here

Ответ 1

Я тоже боролся с этим сообщением об ошибке. Вот как я это решил:

Убедитесь, что вы добавили папку для службы, которую используете в GTLSource/Common/(например, добавьте папку Диска для GoogleDrive).

В GTL.xcodeproj(который вы уже добавили в рабочую область) найдите папку GTLSource и перетащите ее в свой основной проект (Golf в вашем случае). Готово!

Теперь вы можете удалить ссылки на GTL.xcodeproj, которые вы добавили в рабочую область.

При таком подходе вам даже не нужно добавлять библиотеки (поэтому удалите их из списка связанных библиотек, если вы их добавили).

Документация Google API не похожа на документацию Apple (это не хорошо).

Я также должен отметить, что я создаю приложение для iOS, а не MacOSX, но это также должно работать и для OSX.

enter image description here

Ответ 2

Я изо всех сил пытался справиться с этой точной проблемой в течение большей части дня сегодня, и я счел это чрезвычайно расстраивающим. Я, наконец, понял все это, поэтому здесь представлено простое пошаговое руководство по добавлению API Google в проект iOS7 с использованием XCode5 с использованием ARC без создания рабочих областей или любого из них.

Ответ, предоставленный RawMean, хорошо работает, но он дал мне проблемы с ARC. Мне также не понравилось то, что вам нужно было добавить проект, создать рабочую область, а затем удалить проект. Поэтому мое решение будет касаться обеих этих проблем.

  • Проверьте код. Для этого вы можете просто запустить svn checkout http://google-api-objectivec-client.googlecode.com/svn/trunk/ google-api-objectivec-client-read-only с вашего терминала. Я буду ссылаться на этот код как "код Google".
  • Перейдите к проекту "Сформировать фазы". Разверните "Link Binary With Libraries" и добавьте Security.framework и SystemConfiguration.framework. Эти два требуются кодом Google.
  • Перейдите в свой проект "Настройки сборки". Используя окно поиска, найдите Other Linker Flags (убедитесь, что в левой части окна поиска выбрано "Все" ). Добавить -ObjC -all_load.
  • Теперь найдите User headers search path и добавьте полный путь в каталог Goggle /Source. Убедитесь, что вы выбрали recursive.
  • Используя Finder, перейдите в каталог Google /Source/OAuth2/Touch. Перетащите GTMOAuth2ViewTouch.xib в свой проект.
  • Вернитесь к Finder и перейдите в каталог Google /Source. Перетащите GTLCommon_Sources.m и GTLCommon_Networking.m в свой проект.
  • Теперь вам нужно импортировать файлы для служб, которые вы хотите использовать. В моем случае мне нужно использовать Google Диск, поэтому я добавлю их. В Finder перейдите в каталог Google /Source/Services/Drive/Generated. Перетащите GTLDrive.h и GTLDrive_Sources.m в свой проект. Если вы хотите использовать другие службы, перейдите в их каталог и импортируйте соответствующие файлы .h и .m.
  • По какой-то причине код Google не использует ARC, поэтому, если вы попытаетесь построить прямо сейчас, вы получите ошибки компиляции ARC. Поэтому нам нужно отключить ARC только для кода Google. Для этого вернитесь к фазе создания проекта, но на этот раз разверните "Компилировать источники". Убедитесь, что GTLCommon_Sources.m и GTLCommon_Networking.m. Выберите их, нажмите enter и введите -fno-objc-arc. Это отключит ARC для обоих из них. Убедитесь, что вы не добавляете эту опцию для любого другого файла (если вы не знаете, что делаете).
  • Все готово! Теперь, когда вы хотите использовать Google API, просто импортируйте GTMOAuth2ViewControllerTouch.h и заголовок службы. В моем случае, поскольку я использую Google Диск, я также импортирую GTLDrive.h.

Я надеюсь, что это поможет и избавит некоторых людей от выдергивания всех своих волос.

Ответ 3

Не только выполнить вышеуказанное, но идите в разделе "[Название проекта] Цели- > Сборка фаз > Скомпилировать источники" и нажмите кнопку+. Затем добавьте все файлы .m, по какой-то причине большинство из них не являются автоматически.

Мне также пришлось удалить (ссылку) на "GTL;DRive_Souces.m" из папки "Диска", но я не понимаю, зачем мне это делать.

Ответ 4

Лучше использовать Pod

  • Как установить CocoaPods и настроить с помощью вашего проекта Xcode  для справки: [http://blogs.triffort.com/?p=309][1]
  • Откройте файл pod и добавьте

    pod 'Google-API-Клиент/Диск', '~ > 1.0' сохранить файл pod и вызвать pod install в терминале. Примечание: файл pod вы должны указать link_with 'Your_project_name', 'Your_project_nameTests' после этой строки добавляют только ваша библиотека

Ответ 5

это действительно не решает проблему установки Google API, но в этом репо я обратился к Google Forms из приложения iOS, не используя API Google. 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)
}