2012-07-06 22 views
11

Làm cách nào để thêm API Google Drive vào dự án iPhone của tôi để tôi có thể sử dụng?Thêm API GTL 'Mục tiêu-C của Google' vào dự án iPhone

Cho đến nay, tôi đã kéo dự án GTL vào dự án ứng dụng hiện tại của tôi (để nó được lồng trong dự án ứng dụng của tôi). Sau đó, theo các giai đoạn xây dựng của mục tiêu ứng dụng của tôi, tôi đã thêm GTL.framework và sau đó thêm GTL.framework vào 'Liên kết nhị phân của tôi với Thư viện' (xem ảnh đính kèm). Điều này sẽ ném lỗi sau:

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

Làm cách nào để khắc phục sự cố này?

enter image description here

+1

Sau 3,5 năm các bước vẫn còn khó hiểu và bực bội, không thể Google guys chỉ làm cho nó dễ dàng hơn và thẳng về phía trước? :/ –

Trả lời

14

Tôi cũng gặp khó khăn với thông báo lỗi này. Đây là cách tôi đã giải quyết:

Đảm bảo bạn đã thêm thư mục cho dịch vụ bạn đang sử dụng theo GTLSource/Common/(ví dụ: thêm thư mục Drive cho GoogleDrive).

Dưới GTL.xcodeproj (mà bạn đã thêm vào không gian làm việc của bạn), hãy tìm thư mục GTLSource và kéo nó vào dự án chính của bạn (Golf trong trường hợp của bạn). Làm xong!

Bây giờ bạn có thể xóa các tham chiếu đến GTL.xcodeproj mà bạn đã thêm vào không gian làm việc.

Với cách tiếp cận này, bạn thậm chí không cần phải thêm các thư viện (để loại bỏ chúng khỏi danh sách các thư viện được liên kết nếu bạn đã thêm chúng).

Tài liệu Google API không giống tài liệu của Apple (nó không tốt).

Tôi cũng nên đề cập đến việc tôi đang tạo ứng dụng cho iOS chứ không phải MacOSX, nhưng điều này cũng sẽ hoạt động đối với OSX.

enter image description here

+0

Nếu tôi có thể upvote nhiều hơn một lần tôi sẽ. Cảm ơn –

+6

Tôi đã gặp phải sự cố này và quên rằng tôi đã giải quyết nó trước đây, đã truy cập trang này và nhận ra rằng tôi đã đăng giải pháp này :) – RawMean

+1

Để có giải pháp Swift, hãy sử dụng câu trả lời của Rob và xem http:/của riêng tôi /stackoverflow.com/questions/24082606/google-objective-c-api-gtl-with-swift/24114960#24114960 –

1

Không chỉ thực hiện ở trên, nhưng đi theo "[Tên dự án] Targets-> Xây dựng giai đoạn> Compile Nguồn" và nhấp vào nút +. Sau đó, thêm tất cả các tệp .m, vì một số lý do hầu hết các tệp không tự động.

Tôi cũng phải xóa (tham chiếu) thành "GTLDrive_Souces.m" từ thư mục Drive, nhưng tôi không hiểu tại sao tôi phải làm phần đó.

+0

"Không chỉ làm như trên?" Tôi không hiểu ý bạn là gì. Có rất nhiều thứ ở trên câu trả lời của bạn. – Kaydell

25

Tôi đã gặp khó khăn với vấn đề chính xác này trong hầu hết các ngày hôm nay và tôi thấy nó cực kỳ bực bội. Cuối cùng tôi đã tìm ra tất cả, vì vậy đây là hướng dẫn từng bước đơn giản về cách thêm API Google vào dự án iOS7 bằng cách sử dụng XCode5, sử dụng ARC, mà không phải tạo Workspaces hoặc bất kỳ thứ gì trong đó.

Câu trả lời do RawMean cung cấp hoạt động tốt, nhưng nó đã cho tôi các vấn đề với ARC. Tôi cũng không thích thực tế là bạn phải thêm dự án, tạo không gian làm việc và sau đó xóa dự án. Vì vậy, giải pháp của tôi sẽ giải quyết cả hai vấn đề này.

  1. Kiểm tra mã. Để thực hiện việc này, bạn chỉ có thể chạy svn checkout http://google-api-objectivec-client.googlecode.com/svn/trunk/ google-api-objectivec-client-read-only từ thiết bị đầu cuối của mình. Tôi sẽ tham chiếu đến mã này là "mã của Google".
  2. Chuyển đến giai đoạn xây dựng của dự án của bạn. Mở rộng "Liên kết nhị phân với thư viện" và thêm Security.frameworkSystemConfiguration.framework. Cả hai được yêu cầu bởi mã của Google.
  3. Chuyển đến Cài đặt bản dựng của dự án của bạn.Sử dụng hộp tìm kiếm ở đó, tìm kiếm Other Linker Flags (đảm bảo "Tất cả" được chọn ở bên trái hộp tìm kiếm). Thêm -ObjC -all_load.
  4. Bây giờ, hãy tìm kiếm User headers search path và thêm đường dẫn đầy đủ vào thư mục /Source của Goggle. Đảm bảo bạn chọn recursive.
  5. Sử dụng Trình tìm kiếm, truy cập thư mục /Source/OAuth2/Touch của Google. Kéo và thả GTMOAuth2ViewTouch.xib vào dự án của bạn.
  6. Quay lại Finder và truy cập thư mục /Source của Google. Kéo và thả GTLCommon_Sources.mGTLCommon_Networking.m vào dự án của bạn.
  7. Bây giờ, bạn cần phải nhập tệp cho các dịch vụ bạn muốn sử dụng. Trong trường hợp của tôi, tôi cần phải sử dụng Google Drive, vì vậy tôi sẽ thêm chúng. Trong công cụ tìm, truy cập thư mục /Source/Services/Drive/Generated của Google. Kéo và thả GTLDrive.hGTLDrive_Sources.m vào dự án của bạn. Nếu bạn muốn sử dụng các dịch vụ khác, hãy vào thư mục của họ và nhập tệp .h và .m thích hợp.
  8. Vì một số lý do, mã của Google không sử dụng ARC, vì vậy nếu bạn cố gắng xây dựng ngay bây giờ, bạn sẽ nhận được các lỗi biên dịch ARC. Vì vậy, chúng tôi cần vô hiệu hóa ARC cho mã của Google chỉ. Để làm điều này, hãy quay lại giai đoạn xây dựng của dự án của bạn, nhưng lần này mở rộng "Biên dịch nguồn". Đảm bảo rằng có GTLCommon_Sources.mGTLCommon_Networking.m. Chọn chúng, nhấn enter và nhập -fno-objc-arc. Điều này sẽ vô hiệu hóa ARC cho cả hai. Đảm bảo bạn không thêm tùy chọn này cho bất kỳ tệp nào khác (trừ khi bạn biết mình đang làm gì).
  9. Bạn đã hoàn tất! Bây giờ, bất cứ khi nào bạn muốn sử dụng API của Google, chỉ cần nhập GTMOAuth2ViewControllerTouch.h và tiêu đề dịch vụ của bạn. Trong trường hợp của tôi, vì tôi đang sử dụng Google Drive, tôi cũng sẽ nhập GTLDrive.h.

Tôi hy vọng rằng sẽ giúp và tiết kiệm một số người khỏi kéo tất cả tóc ra.

+1

Làm việc cho tôi. Cảm ơn! – bvs

+2

Thao tác này với Swift vui lòng xem câu trả lời của tôi để biết chi tiết http://stackoverflow.com/questions/24082606/google-objective-c-api-gtl-with-swift/24114960#24114960 –

+2

Bạn là một vị cứu tinh tuyệt đối! Cảm ơn nhiều. Đã làm việc này sau 2 giờ đấu tranh theo tài liệu chính thức của Google. Một lần nữa xin cảm ơn. –

1

Better to use Pod

  1. How to install CocoaPods and setup with your Xcode project for reference : [ http://blogs.triffort.com/?p=309][1]
  2. Open the pod file and add

    pod 'Google-API-Client/Drive', '~> 1.0' save pod file and call pod install in terminal. Note:pod file you must give link_with 'Your_project_name', 'Your_project_nameTests' after this line only add your library

+0

làm thế nào bạn nhập khẩu các tập tin 'GTMOAuth2ViewControllerTouch.h' và' GTLDrive.h' vào dự án của bạn với cocoapods? Tôi không thể sử dụng bất kỳ câu lệnh nhập nào và tôi không tìm thấy mô-đun nào cần nhập. – KVISH

+0

@KVISH: Hiện tại bạn đã làm gì? bạn đã mở. workspace hoặc .xcodeproject? –

+0

đảm bảo KHÔNG thêm use_frameworks! trong Podfile. –

1

điều này không thực sự giải quyết được vấn đề cài đặt Google API nhưng trong repo này tôi đã truy cập Google Biểu mẫu từ ứng dụng iOS mà không cần sử dụng API của Google. https://github.com/goktugyil/QorumLogs

Vì vậy, bạn có thể bỏ qua phần API cài đặt trong một số dự án

Dưới đây là hướng dẫn làm thế nào để thiết lập nó: https://github.com/goktugyil/QorumLogs/blob/master/Log%20To%20GoogleDocs.md

Heres mã để làm điều đó:

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) 
} 
Các vấn đề liên quan