【iOS開發-115】靜態庫的製作以及第三方架構iOS Universal Framework,DEBUG和RELEASE

來源:互聯網
上載者:User

標籤:

(1)概念介紹

——我們平時在項目中用的最多的就是開源的第三方庫,這種庫是開源的,我們不僅能用,還能查看原始碼甚至可以修改原始碼。

——與開源庫對應的就是閉源,閉源庫分為動態庫和靜態庫。動態庫就是.dylib或者.framework結尾的檔案。就是蘋果官方提供給我們用的那些庫。開發人員不能在項目中使用自製的動態庫,否則無法上傳到APPStore。

——所以,對於閉源庫,我們主要討論的是靜態庫。靜態庫的樣子就是使用者拿到的檔案有很多標頭檔.h+資源套件+編譯過的一個二進位檔案.a(.framework)。即沒有公開的那些檔案都被編譯進了.a或.framework裡面。如果是為了保護智慧財產權什麼的可以用靜態庫。

——.a靜態庫需要結合.h檔案和資源套件給使用者使用。而產生.framework的話裡面已經包含.h和資源檔,可直接給使用者使用。

——如果庫涉及圖片等資源,可以用放在與.a或.framework同名的bundle檔案中。建立檔案,修改尾碼為bundle即可。

——靜態庫多次被使用就會多次被拷貝,產生冗餘,但是沒辦法,我們不能使用自製的動態庫(不重複拷貝)。


(2)製作.a靜態庫的主要步驟

——選擇靜態庫,起個名字,然後把需要製作的庫的.h和.m檔案都拖拽進來


——拖拽進來後,在Bulid Phrase增減一個Headers。建議先增減這個Headers,然後再拖拽,我們再開啟會發現Headers裡面已經自動添加了我們的那些標頭檔。然後把需要公開的標頭檔拖拽到Public裡。然後點擊運行,即可產生.a的庫。


——但是我們產生的一般是在模擬器上使用的庫,如果需要在真機上使用,還需要選擇下面的iOS Device然後再運行一下。


——其實,我們可以在~/Library/Developer/Xcode/DerivedData/項目名稱+一堆字元 下找到我們的檔案(可以在Xcode>Window>Organizer如上找到路徑)。


——找到路徑一般會發現有兩個檔案夾,第一個就是真機上的,第二個是模擬器上的。


——如果需要把這兩者合并,可以利用終端命令列lipo。其中中間兩個檔案就是我們需要合并的兩個.a檔案,最後一個是我們需要輸出的合并後的檔案名稱(自己命名,但最好相同)

lipo -create Debug-iphoneos/libHELLOWORLD.a Debug-iphonesimulator/libHELLOWORLD.a -output libHELLOWORLD.a
發現該檔案夾下多了一個檔案,該檔案大小就是上面兩個檔案的大小總和。

——如果需要給別人使用,就把這個.a檔案和我們的標頭檔(在usr/local/include裡)打包一下給別人或者自己即可。


——遇到的問題1:如果用到UIKit架構的話,我們需要新增pch檔案,把UIkit架構用到項目所有檔案中。關於pch檔案的使用看前篇。

——遇到的問題2:如果出現CodeSign error: code signing is required for product type ‘Unit Test Bundle‘ in SDK ‘iOS 8.0‘ ,這個問題的解答在這裡。只需要修改為下面圖上的內容。


——遇到的問題3:如果我們要編譯的檔案包含category分類檔案時,一般會出現錯誤(找不到方法的錯誤即unrecognized selector sent to instance),但是在Xcode6以及iOS8配置的今天已經不再會出現,因為軟體自動幫我們設定了,而如果沒有設定的可Build Setting中對Linking中的Other Linker Frags設定為-ObjC。



(3)製作.framework的靜態庫,自己設定比較繁瑣,可以利用第三方庫iOS Universal Framework。

架構的好處,在於,很多步驟幫我們都設定好了。因為確實步驟比較多而且繁瑣,沒必要去記憶,只需要知道怎樣找到教程設定即可。

詳細可參考:開源架構:iOS-Universal-Framework


(4)DEBUG,好處在於Xcode開啟很多服務來監控錯誤,讓程式員來調試用,但是耗效能。RELEASE,好處在於則相反。我們點擊的項目名有一個Edit Scheme選項,開啟後就可以發現:


——我們上傳APPStore時,在Xcode的Product裡使用打包Archive時預設是Release方式。而我們選擇Run的時候,發現預設參數是Debug。




所以,建議:

——在產生靜態庫的時候,可以把上面Run的參數調整為Release,這樣節省記憶體,運行速度快。

——在平時用Run調試的時候,在DEBUG下運作正常後,在發布程式之前可修改Run的參數為Release,再運行一下類比發布的情況,因為有時候在Debug下正常,在Release下會崩潰,兩者對錯誤的敏感度不同。


【iOS開發-115】靜態庫的製作以及第三方架構iOS Universal Framework,DEBUG和RELEASE

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.