iOS Xcode打包靜態庫framework
iOS中.a與.framework庫的區別
從上面我們可以看出.a 和.framework的區別就是.a+.h+soureFile=.framework,這樣的話,我們還是直接封裝個.framework比較好。
封裝framework步驟
1、開啟xcode,新建工程
這裡我使用的是Xcode9,選擇Cocoa Touch Framework,然後點next。
2、建立功能類或者拖入已有的功能類
這裡我建立的是ShowResult類。
3、實現功能類的功能
.h檔案中
.m檔案中
4、更改Xcode專案配置
在TARGETS下選中工程>Build Setting>搜尋linking,然後幾個需要設定的選項都顯現出來。
1、首先是Dead Code Stripping設定為NO,網上對此項的解釋如下,大致意思是如果開啟此項就會對程式碼中的”dead”、”unreachable”的程式碼過濾,不過這個開關是否關閉,似乎沒有多大影響,不過為了完整還原framework中的程式碼,將此項關閉也未曾不可。
2、然後將Link With Standard Libraries關閉,我想可能是為了避免重複連結
3、最後將Mach-O Type設為Static Library,framework可以是動態庫也可以是靜態庫,對於系統的framework是動態庫,而使用者製作的framework只能是靜態庫。
5、增加armv7s
更改後:
設定Headers
將你要公開的標頭檔案拖至Public下,要隱藏的放在Private或者Project下,當然,隱藏的標頭檔案就無法再被引用。
然後需要在FrameworkTest.h(必須是公開的,否則無法引用)中將你所有要公開的.h引入。
打包
打包有兩種方式 一種是手動打包,另一種是用指令碼,這裡我用手動打包的方式。
-
1、選中模擬器,編譯程式command+B
-
2、選中測試機,編譯程式command+B
-
3、在finder中找到framework檔案
找到下圖中的FrameworkTest檔案,這裡有兩個同名檔案,一個是Debug-iphoneos(真機)下的,一個是Debug-iphonesimulator(模擬器)下的。
4、通過終端命令將兩個framework合為一個模擬器和真機都可使用的framework。
開啟終端,輸入lipo -create命令,將
Debug-iphoneos下FrameworkTest.framework目錄下的FrameworkTest檔案
拖拽到終端中,會自動有空格。然後將Debug-iphonesimulator下FrameworkTest.framework目錄下的FrameworkTest檔案
拖拽進來,也會自動有空格,然後輸入 -output,敲空格,在引入一個新的路徑。最後敲回車,這樣就合併了。
上面這段命令就是把真機和模擬器中的FrameworkTest合併成一個新的檔案放在和newTest同級的資料夾new下,這個新檔案字尾是.lipo,並不是我們要的FrameworkTest檔案,怎麼辦呢?我們的操作是按照人家說的把合成後的檔名字改成FrameworkTest替換原來的。而且,把字尾.lipo去掉!然後將新生成的這個FrameworkTest替換原來的FrameworkTest。進行下一步。
這裡終端會有一個error
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: can't move temporary file: /Users/lgj/Desktop/new/newTest to file: /Users/lgj/Desktop/new/newTest.lipo (Is a directory)
5、將修改後的framework拷貝出來就是我們最終制作的framework了。
使用
將我們封裝的framework拖拽到新的工程裡面。
我們開啟這個framework看看,發現只有Headers,裡面有兩個.h,其中一個是FrameworkTest.h另一個就是ShowResult.h檔案。
引入標頭檔案:
執行得到[ShowResult show];的結果