2015-11-07 76 views
7

我計劃在我的Swift項目中使用Google Drive API。我試圖通過CocoaPods添加Drive SDK(v0.39.0)。以下是我的Podfile。類'GTMHTTPUploadFetcher'的重複接口定義

platform :ios, '8.0' 
use_frameworks! 

pod 'Google-API-Client/Drive' 

我已經加入了use_frameworks!標誌,這樣的CocoaPods可以Objective-C的豆莢轉化爲斯威夫特框架,而不是靜態庫。

Pod安裝成功。但是,當我構建項目時,出現以下錯誤。類「GTMHTTPUploadFetcher」

刪除DerivedData文件夾和清潔項目沒有工作

重複的接口定義。

我也嘗試過不添加use_frameworks!,然後通過橋接標頭方式添加庫。這沒有問題。事情是所有我的其他依賴與它打開工作。不幸的是,CocoaPods doesn'tsupport只是將某些標記轉換爲標記。

有沒有解決此問題的解決方法?


正如谷歌的docs指出,谷歌的工程師據稱監控標記與谷歌驅動-SDK的問題,所以我希望至少他們會看到這一點,並儘快修復它。

回答

3

我遇到了同樣的問題。我的解決方案是沒有安裝谷歌API客戶端爲iOS使用CocoaPods因爲我使用基於Swift的豆莢,因此,我不能刪除use_frameworks!試圖解決重複標題問題。

我代替手動安裝庫通過在https://developers.google.com/drive/ios/quickstart?ver=swift以下對步驟2,3中的詳細說明,以及4.我按照說明,但應用於他們我的現有工作空間而不是創建新的工作空間的。

請務必注意,我必須調整用戶標題搜索路徑中的路徑,以匹配我實際從Google複製源代碼的位置。

我在這裏複製說明以供參考。

第2步:下載的谷歌客戶端庫

運行以下命令使用Git下載庫:

  • git clone https://github.com/google/google-api-objectivec-client.git
  • git clone https://github.com/google/gtm-oauth2.git
  • git clone https://github.com/google/gtm-session-fetcher.git
  • git clone https://github.com/stig/json-framework.git -b v2.3
  • cp -R gtm-oauth2/Source google-api-objectivec-client/Source/OAuth2
  • cp -R json-framework/Classes google-api-objectivec-client/Source/JSON

第3步:準備工作區

打開Xcode和創建一個名爲 「快速啓動」 新的工作空間。 使用文件>將文件添加到「快速入門」 ......,從你在上一步克隆庫中添加以下項目到工作區:

  • 谷歌-API的ObjectiveC客戶/來源/ GTL.xcodeproj
  • GTM-會話提取器/來源/ GTMSessionFetcher.xcodeproj

選擇 「GTMSessionFetcher」 項目,並進行以下修改:

  • 添加t的新目標他鍵入iOS> Framework & Library> Cocoa Touch Static Library並將其命名爲「GTMSessionFetcherLib」。
  • 將項目GTMSessionFetcher組中的所有.m文件添加到目標的Build Phases> Compile Sources部分。

選擇「GTL」項目的「GTLTouchStaticLib」的目標,並進行以下修改:

  • 添加庫GTMSessionFetcher/libGTMSessionFetcherLib.a建設階段>鏈接二進制與圖書館。
  • 添加絕對路徑到gtm-session-fetcher/Source /到Build Settings> User Header Search Paths。
  • 將標誌GTM_USE_SESSION_FETCHER = 1添加到Build Settings> Preprocessor Macros。
  • 刪除「GTL」項目的「GTLFramework」目標。
  • 在Project導航器中,刪除GTL項目的GTL Source> Common> HTTPFetcher組。

第4步:準備項目

  • 創建一個新的iOS>應用程序>單查看應用程序名爲 「QuickstartApp」 項目。將語言設置爲Swift,並在保存項目時將添加到和組字段設置爲「快速啓動」。
  • 添加以下框架和庫到項目的構建階段>鏈接二進制與庫部分: libGTLTouchStaticLib.a
    • Security.framework
    • SystemConfiguration.framework
  • 更改以下構建設置:
  • 將-ObjC -all_load添加到其他鏈接器標誌。
  • 絕對路徑添加到以下目錄到用戶頭搜索路徑:
    • GTM-會話提取器/來源/
    • 谷歌-API的ObjectiveC客戶/來源/ **
  • 將標誌GTM_USE_SESSION_FETCHER = 1添加到預處理器宏。
  • 將文件google-api-objectivec-client/Source/OAuth2/Touch/GTMOAuth2ViewTouch.xib添加到項目的支持文件組中。
  • 將下列文件添加到QuickstartApp組:
    • 谷歌-API的ObjectiveC客戶/來源/服務/驅動器/生成/ GTLDrive_Sources.m
    • 谷歌-API的ObjectiveC客戶/來源/服務/Drive/Generated/GTLDrive.h
  • 如果沒有自動創建,創建一個新的頭文件轉職Header.h具有以下內容:
    • #import "GTMOAuth2ViewControllerTouch.h"
    • #import "GTLDrive.h"
  • 集構建設置> Objective-C的橋接報頭到橋接報頭的絕對路徑。
+0

感謝您的回覆。我只是試了一下就行了。雖然它不能解決最初的問題,但由於它的工作原理,我暫時會接受它。謝謝。我不相信Google會忽略這一點。這個問題已經存在好幾個月了! – Isuru

+0

謝謝@Isuru。我無法相信它的安裝有多複雜。我相信一旦他們修改了代碼,它會更容易,而且您的原始問題甚至可能會得到修復。像你說的那樣,這是一個長期存在的問題。 – Daniel

+0

是的。這是非常複雜的。我希望谷歌提供更多支持來分發他們的iOS SDK,因爲他們明確表示他們將使用CocoaPods作爲主要渠道。 – Isuru

0

我發現的唯一解決方法是您必須進入Google Drive導入的三個項目並檢查導入是如何完成的。現在它的導入標題,而不是框架(三個框架相互依賴)。你必須手動做,它會工作。

我沒有代碼示例向您展示,但我知道我上次以這種方式工作。

+0

通過[三個項目(http://i.imgur.com/i34BYio。png),你的意思是'Google-API-Client','gtm-http-fetcher'和'gtm-oauth2'嗎? – Isuru

+0

還是你的意思是在['Podfile'](http://pastie.org/10540347)中手動添加它們?我也試過,但仍然得到相同的錯誤。 – Isuru

+0

@isurur你找到了解決辦法嗎? –

0

簡單的解決方案在這裏:

去編輯方案 - >選擇Build - >構建選項的勾去掉了並行化編譯

現在運行你的應用程序