iOS 靜態庫製作及使用問題

來源:互聯網
上載者:User

iOS 靜態庫製作及使用問題
 
靜態庫使用目標:(.a )
> 自己製作一個靜態庫(可以使用)(前三步)
> 製作模擬器版本和真機版本 (第四步)
> 合并兩個版本 (第六步)


建立靜態庫步驟:
1. 選擇要建立的檔案類型:Cocoa Touch Static Library (.a檔案)


2.將需要封裝的檔案匯入其中
選擇工程找到target(靜態庫) -> Build Phases -> Compile Sources中添加需要封裝的類


3. 設定編譯配置
編譯EditSchem->選擇Run,選擇info,設定其Build Configuration :release/debug
選擇工程:Project->Build Setting -> Code Signing -> Code Signing Identity 選擇其與上面相對應的,release或是debug,設定其為iOS Developer 【注意開始選的是Project不是Targets】


4. 選擇project->iOS Device,點擊運行後會產生arm6,arm7靜態庫,【註:此時產生的靜態庫是適用於真機上的,並不適合用在模擬器】如果需要產生i386的靜態庫【模擬器用】可以通過選擇模擬器再運行一次,【不能用showInFinder開啟,不然只是針對真機的】即可在相應DerivedData中相應工程的Build -> Products Debug-iphonesimulator中找到相應的靜態庫檔案。


小技巧:可通過命令 lipo -inof 路徑/檔案名稱.a 查看檔案是否具備arm 或是 i386的條件


5. 編譯成功後便可使用

註:Debug版本與release版本區別在於調試版本與發布版本,深度區別在於其動態庫的使用。其都是有相應的模擬器與真機模式的靜態庫檔案。


可能出現的問題:undefine symbols for architecture i386
問題解析: 用錯了編譯出來的.a lib,在模擬器裡面,我們需要的是基於i386架構編譯的static lib,但是這個a檔案,編譯出來其實是arm6 arm7架構的。因為我們使用show in finder指向的是一個ios device的庫,並不是i386模擬器下的庫,如果想要編譯i386的庫,就需要注意第4點操作,然後去DerivedData中找到iphonessimulator中的static lib
其實我們開啟到Products Debug檔案就可以看到裡面有兩個檔案夾:
Release-iphoneos 或Debug-iphoneos :裡面的是基於arm6 arm7編譯出來的庫檔案。
Release-iphonesimulator:裡面是基於i386編譯出來的檔案。




6. 將模擬器支援的版本和真機支援的版本合并到一起
lipo -create 路徑/模擬器版本.a 路徑/真機版本.a -output 想放的路徑/靜態庫名稱.a


打包後可查看其支援哪個版本:
lipo -info 路徑/合并後的靜態庫名稱.a


結果展示:
li****:Desktop mac$ lipo -info libdemo.a

Architectures in the fat file: libdemo.a are: armv7 i386 arm64

 


 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.