你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 關於iOS上的靜態庫

關於iOS上的靜態庫

編輯:IOS開發綜合

最近再進行項目的真機調試,然後發現了一個天坑。就此研究了一些iOS上的靜態庫的使用:

首先我們是直接拿一個可以運行的項目來制作靜態庫的,網上大部分都是先創建靜態庫然後再寫內容,看看我的方法。

1.把子項目導入到總項目工程裡面,然後刪除子項目的運行文件,然後再裡面創建一個靜態庫!!!(不要創建framework那個,非常坑。我給坑了好久具體下面在說吧)創建一個.a的靜態庫。名字沒有什麼影響自己喜歡就可以,我一般是按照原來的名字來的。

2.然後在總項目工程裡面添加鏈接 Build Phases ->Target Dependencies 和 Link Binary With Libraries 裡面添加上我們自己創建的那個靜態庫。

3.我們還需要在子項目裡面進行一些配置 選擇子項目,然後TARGETS 裡面選擇自己創建的靜態庫 Build Phases ->Compile Sources 這個裡面把自己需要的實現文件添加進去(.m文件) 如果文件很多的話其實還有一種偷懶的方法就是先創建靜態庫然後把這些文件從原來的項目裡面拖過來,Xcode會自動添加這些實現文件。(我曾經自己添加100多個文件,有點煩。)

4.這樣就剩最後一步了,在主項目裡面 TARGETS -> Build Settings -> User Header Search Paths 裡面設置文件的位置。是文件夾的位置例: ../PKQ/PKQ ../是上級目錄的意思。然後這個選項裡面有一個選擇recursive 的意思是遍歷整個文件(有時候用的時候不好用。。)

5.這樣我們就可以在其他地方調用我們的靜態庫了0v0

 

 

然後接下來的就是一些注意點:

1.靜態庫裡面不能有 這種庫libsqlite3.tbd 這些文件。直接加到主項目裡就可以了,那個bundle文件也加到主項目裡面就可以了。

2.如果靜態庫裡面有分類 xcode是不能正常加載這些文件的找到主工程的 Target -> Build Setting ->Linking 更改其 Other Linker Flags 為: -all_load 或 -force_load 即可。 -all_load的意思是把全部項目都加載進去,一般情況都可以添加這個不過首先會影響運行速度然後有時候其他文件就莫名其妙的報錯了。我之前做的項目就遇見了這個問題,之前的項目是C++混編的然後使用-all_load 就會出現很多錯誤。這種時候就需要-force_load這個標簽了,$(SRCROOT)/../Vendors/build/Debug-iphonesimulator/libVendors.a 路徑就直接把靜態庫拉過去然後刪除了""然後和-force_load 空一格就可以了。

然後要提的是上面之前說的framework xcode自帶創建出來的默認是動態庫,不能真機不能上架.然後你雖然可以改成靜態庫的。Target ->Mach-O Type 裡面設置成Static Library就變成靜態庫了。但是這個靜態庫是.framework是不能使用-force_load這個標簽!!!(我最後有刪除這個創建一個.a的靜態庫重新拉了實現文件= =)

3.不知道還有什麼注意了。就剩下靜態庫的合成了,因為經常要改路徑很麻煩。那我們把真機和模擬器的合成成一個.a文件。 這個我們要在終端裡面來完成 cd 然後目標路徑 有2個操作 1.lipo -info 靜態庫文件 這樣就知道靜態庫支持那個模式了 這個是大概看一下,不過基本上沒有什麼用 2.lipo -create Debug-iphoneos/libVendors.a Debug-iphonesimulator/libVendors.a -output libVendors.a 這個是把2個路徑的靜態庫合成成一個靜態庫的指令。合成成功後把新的靜態庫拖到原來的路徑上覆蓋就可以了。

  如果我上面說的有什麼問題請告訴,我也是個新手。希望能幫助到你

 

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved