iOS app須要在許多不一樣的CPU架構下運行:xcode
arm7: 在最老的支持iOS7的設備上使用架構
arm7s: 在iPhone5和5C上使用app
arm64: 運行於iPhone5S的64位 ARM 處理器 上ui
i386: 32位模擬器上使用spa
x86_64: 64爲模擬器上使用調試
因爲須要打包的代碼部分大多數由Swift編寫。而後瞭解背景知識,Swift只支持動態庫(Dynamic)打包。code
因此先用動態庫進行打包。試坑吧:對象
1.打開Xcode(圖爲樓主更新到Xcode8以後採用樣式),建立項目圖片
選擇如圖下所示1建立Framework(2的話就是建立靜態庫,也就是.a)資源
2.建立bundle,在上面Framework的基礎上面Add Target選擇macOS中的Bundle(因爲建立的是默認的OS X,可是須要被實用的是在iOS上面使用的bundle 是點擊Build Settings欄,搜索Base SDK這一行 將OS X的SDK替換成iOS)
3.關於Framework和Bundle。framework裏面只能存放代碼和頭文件。bundle裏面則存放資源文件,相似於圖片,xib,plist等文件。
4.建立一個新的工程,而後將上面建立的Framework工程的xcodeproj拖拽進入工程。編譯一下確保可以正常工做。(建立了聯編工程就能夠很是方便的進行調試,弄出好的Framework)
5.關於使用的第三方庫問題:首先確定不能將全部的第三方庫打包進入Framework中,由於這樣會增大包體積,並且若是其餘的framework裏面也使用的話,同時若是你打進包裏面,那麼外面就沒法使用了。
6.關於存放在bundle裏面的圖片資源的調用 所有須要加上 bundle名字+圖片名字
iOS開發中不免會用到xib。因此關於xib獲取ViewController以及View都須要在bundle那一欄填入下面方法獲取的bundle
因爲樓主在項目中使用的圖片可能會被外面代碼使用,因此樓主直接將圖片資源放在外面,代碼能夠正常調用不須要加上bundle的名字。可是在Xib中若是使用了圖片那麼就會報錯,而且加載不出來,這個時候就須要在代碼從新調用一遍(有關在Framework的Xib中使用工程外面的圖片有方法顯示出來的能夠留言)。
7.有關Stroyboard的使用。也是能夠在封裝在bundle中,在Swift裏面直接指定Storyboard的module(前提是有這個framework並且指定Class和Storyboard ID)
樓主天真的認爲在OC中也能夠這樣使用。可是事實上並不能夠,因爲OC建立不併非Dynamic庫,因此沒法動態連接,因此視圖控制器會被加載出來,可是沒法連接到所對應的類(於是苦逼的樓主將Storyboard部分的視圖所有切換成了xib。若是有方法跪求告知)
建立ViewController的Static寫法(重寫initwithNibname方法)(經過Xib)
建立ViewController的Dynamic寫法(經過Stroyboard)
因爲樓主剛剛使用Swift開發,因此不清楚framework裏面有這麼多坑。
因而乎付出了慘痛的代價,將相關的Swift代碼所有替換成了OC代碼。一切的原因是動靜態庫的問題
使用OC後只須要將下圖所示不勾選,而後在你的工程中添加該文件便可。可是在Swift打包的Dynamic庫中,不勾選就會報錯:沒有所謂的文件(樓主關於Swift打包Dynamic庫問題因爲項目以及時間緣由沒有來得及細細研究。暫時挖個坑在這,以便之後東山再起。(若是有同窗看到這篇文章而且能夠幫忙答疑解惑,那將萬分感激))
(靜態庫須要注意的點) 若是主項目中採用了Category的話 須要在引用framework的工程中設置 Build Pharse -> Other Linker Flags中加上 -all_load 就OK了,再次運行工程,能夠完成全部的編譯過程.
-Objc這個標誌選項會讓連接器加載靜態庫全部的Objective-C的類和Category, 這樣就能把Category中實現的方法整合起來. 可是因爲這樣作會使可執行文件變大, 也會整合一些用不到的對象, 因此纔沒有默認使用-ObjC標誌, 而是須要咱們手動添加.
加載全部靜態庫中的文件. 相比-ObjC
, 不一樣點就是-all_load
會將全部的(包括非Objective-C)文件都整合到靜態庫中.
*注意 : 假如你使用了不止一個靜態庫,而後又使用了這個參數,那麼你頗有可能會遇到duplicate symbol
錯誤,由於不一樣的庫文件裏面可能會有相同的目標文件.
加載指定路徑的靜態庫. 相比-all_load
, 不一樣點就是-force_load
只是徹底加載了一個庫文件,不影響其他庫文件的按需加載.
使用-all_load
或者-force_load
大部分緣由是由於Xcode4.2以前的版本的連接器的bug, 在64位iOS應用環境下當靜態庫中只有分類而沒有類的時候, -ObjC
參數就會失效了. 因此爲了兼容Xcode4.2以前的版本, 有兩種解決方法:
1.使用-all_load或者-force_load來替代
2.能夠在分類中添加類的聲明以及實現
未完待續!!!