2013-10-04 57 views
5

我一直在重構一些代碼的過程中,並創建了一個靜態庫,我現在在一個應用程序中使用的框架中使用。我正在使用cocoapods,並且無法正確地將我的新靜態庫集成到podspec中。Cocoapods podspec問題

我發現構建失敗,因爲構建中缺少靜態庫。如果我手動添加靜態庫到最終的應用程序,框架和應用程序工作正常。構建團隊生成應用程序的最終版本,因此我只負責更新框架的podspec。

是否有可能修改pod規範以將靜態庫設置爲鏈接庫,該鏈接庫顯示在最終應用程序的構建階段之下?

UPDATE:

當添加靜態庫到我的子規範的framework.library屬性我得到library not found for -lMyStaticLib

SUBSPEC供參考:

s.subspec 'MyStaticLibrary' do |msl| 
    mss.source_files = 'FrameworkSource/My-Static-Library/*.{h,a}' 
    msl.library = 'MyStaticLib' 
    msl.xcconfig = { 'HEADER_SEARCH_PATHS' => '"$(SRCROOT)/Pods/My-Framework-Name/FrameworkSource/My-Static-Library"/**', 'LIBRARY_SEARCH_PATHS' => '"$(SRCROOT)/Pods/My-Framework-Name/FrameworkSource/My-Static-Library"/**' } 
    #msl.frameworks = 'MyStaticLib' 
    end 

更新2: 我將屬性更改爲msl.vendored_libraries = 'MyStaticLib'也驗證了podspec中的路徑。一切似乎都要結賬。我仍然遇到構建錯誤。 當我建了一個設備(我得到同樣的錯誤,但i386的,當我建立模擬器):

Undefined symbols for architecture armv7: 
    "_OBJC_CLASS_$_MyStaticLibrary", referenced from: 
     objc-class-ref in MyFramework(FileInFramework.o) 
ld: symbol(s) not found for architecture armv7 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

我也再次驗證了,如果我只是去到應用程序的構建階段和遍歷莢文件夾和手動將MyStaticLibrary.a文件添加到其生成的項目中,沒有問題。

+0

仍然沒有解決這個問題嗎?我遇到類似的問題,並希望你的智慧,如果你設法解決它。 – brainray

回答

3

你絕對可以在你的podspec中添加框架。退房wiki entry on the Podspec format.


編輯:啊,你要尋找的是vendored_frameworks或在0.23.0加入vendored_libraries。看起來這些還沒有被添加到wiki中。將現在更新!

+0

我認爲你的意思是https://github.com/CocoaPods/CocoaPods/wiki/The-podspec-format你的鏈接到Steelcase ;-)我更新了我的帖子,更多的信息。 – propstm

+0

糟糕!修復並更新了我的答案。 – MishieMoo

+0

我已更新我的帖子,更多信息。現在我得到了未定義的架構錯誤。這就好像該項目看到了該庫,但無法訪問該庫中的任何內容。 – propstm

2

嘗試將您的MyStaticLib.a文件重命名爲libMyStaticLib.a。我也遇到了library not found for -lMyStaticLib錯誤,並通過向文件名添加lib前綴來修復它。

+0

這也是我的問題,謝謝 –

1

有關錯誤Library not found for -lxxxxxxx,如果靜態庫名稱爲MyStaticLib.a,嘗試重命名爲libMyStaticLib.a並把它放在perserve_paths屬性,使你的靜態庫將不會被下載後刪除:

msl.libraries = 'MyStaticLib' 
msl.perserve_paths = 'libMyStaticLib.a' 

然後,轉到項目的構建設置:確保在「其他鏈接器標誌」中包含參數-lMyStaticLib

對於ARM和i386體系結構問題,ARM意味着iOS設備,而i386意味着模擬器,更好地使您的靜態庫通用,那麼它可以在兩種體系結構上工作。

+0

爲什麼我需要''Other Linker Flags''?把它放在''LIBRARY_SEARCH_PATHS''裏是不夠的? – confile

0

更改:

msl。vendored_libraries = 'MyStaticLib'

到:

msl.vendored_libraries = 'FrameworkSource /我的靜態庫/ libMyStaticLib.a'

和的CocoaPods將添加一個搜索路徑。