1. 程式人生 > >iOS中 Framework靜態庫的建立和使用遇到的那些坑 韓俊強的部落格

iOS中 Framework靜態庫的建立和使用遇到的那些坑 韓俊強的部落格




前言

網上關於Framework製作的教程數不勝數,然而都過於陳舊,最新的也是使用Xcode7的教程,而且有些設定也只給出步驟,並沒有給出原因,而且按照有些教程製作出的framework還有些問題,所以我把自己製作framework的過程記錄下來,並且使用的是最新的Xcode8環境。本次製作framework,包含AFN,FMDB第三方,.a檔案,xib,Bundle檔案,還有Category分類,幾乎製作和使用framework遇到的所有坑都被我遇到了,所以,此篇部落格在我這屬於乾貨,特此分享給大家,以免再走彎路!


製作篇:
將Mach-O Type設為Static Library,framework可以是動態庫也可以是靜態庫,對於系統的framework是動態庫,而使用者製作的framework只能是靜態庫。





然後將Link With Standard Libraries關閉,我想可能是為了避免重複連結


選擇工程檔案>target第一項>Build Setting>搜尋linking,然後幾個需要設定的選項都顯現出來,首先是Dead Code Stripping設定為NO,網上對此項的解釋如下,大致意思是如果開啟此項就會對程式碼中的”dead”、”unreachable”的程式碼過濾,不過這個開關是否關閉,似乎沒有多大影響,不過為了完整還原framework中的程式碼,將此項關閉也未曾不可。






使用到.a檔案怎麼辦呢?兩處都要加,不然實質沒打包進去!!






加第三方如:AFN,FMDB該怎麼辦?
記住:增加第三方拖包進去後,不要加framework依賴庫,只加tdb依賴庫,確保通過編譯!溫馨提示:在加tdb時,用該加lib連結庫,如下圖:第一步:

第二步:快捷鍵shift + command + G



第三步:Go並選擇相應lib庫:如sqlite.3.0tdb就因該選擇libtclsqlite3.dylib



================================================================================================================
1.解決分類(使用)iOS 程式引入framework 類別報錯unrecognized selector sent to class





2、bundle帶來的打包失敗


解決辦法:


將bundle中plist檔案中的Optimization刪除

合成真機和模擬器錯誤:


原因:其中一個framework是合成過的,不能再合成了!3. framework推薦如下設定:Mach-O Type > Static Library;( 靜態庫,如果需要提審 Appstore 的話不允許使用動態庫的)

Dead Code Stripping > NO;(是否消除無效程式碼)

Link With Standard Libraries 預設是YES,如果沒有特殊要求的話,預設就可以。(設為 NO 要配置Other Linker Flags)

Enable Bitcode > NO;(支援舊庫)
最終制作好的framework要:刪掉info.plist,移出 framework。

更多:每週更新關注新浪微博iOS開發者交流群:446310206



相關推薦

iOS Framework靜態建立使用遇到的那些 部落

前言網上關於Framework製作的教程數不勝數,然而都過於陳舊,最新的也是使用Xcode7的教程,而且有些設定也只給出步驟,並沒有給出原因,而且按照有些教程製作出的framework還有些問題,所以我

C語言呼叫靜態函式動態函式的方式

C語言中呼叫動態庫函式的兩種方式 方式一.隱式呼叫 將動態庫的相關檔案拷貝到當前目錄下(lib、dll),然後新增以下程式碼,在程式中指定連線庫函式。 注意:第二個引數給出的是引入庫檔案(或稱“匯出庫檔案”),而不是dll。在程式執行過程中,lib將dll中需要用到的函式對映到對應的記憶

Innodb的事務隔離級別鎖的關係 美團技術部落

前言: 我們都知道事務的幾種性質,資料庫為了維護這些性質,尤其是一致性和隔離性,一般使用加鎖這種方式。同時資料庫又是個高併發的應用,同一時間會有大量的併發訪問,如果加鎖過度,會極大的降低併發處理能力。所以對於加鎖的處理,可以說就是資料庫對於事務處理的精髓所在。這裡通過分析

iOS建立.a.framework靜態,以及Bundle資原始檔的使用

引言 在開發中.framework靜態庫還是比較常見的,比如:SDK,公司間的程式碼合作等。我們可以把一些不願意讓別人見到的程式碼,用靜態庫的方式把它隱藏起來,只留下.h檔案顯示方法供程式設計人員使用。而.a檔案出了靜態庫本身外,還需要引入.h檔案,而.fra

iOS建立.a.framework靜態,及Bundle資原始檔的使用

引言 在開發中.framework靜態庫還是比較常見的,比如:SDK,公司間的程式碼合作等。我們可以把一些不願意讓別人見到的程式碼,用靜態庫的方式把它隱藏起來,只留下.h檔案顯示方法供程式設計人員使用。而.a檔案出了靜態庫本身外,還需要引入.h檔案,而.framework就

IOS 靜態.framework制作

https works select 其它 開源庫 sta cat neo working 什麽是庫? 庫是程序代碼的集合,是共享程序代碼的一種方式 根據源代碼的公開情況,庫可以分為2種類型 開源庫 公開源代碼,能看到具體實現 比如SDWebImage、AFNetwor

iOS開發:xcode4使用靜態工作區

在xcode4中,為了將一些比較獨立的功能封裝起來,或者多人同時開發時,需要將程式打包成靜態庫,但在xcode4中設定工作區、工程和靜態庫等遇到了一系列問題,不知道是不是xcode的高版本中已經解決了這些問題?我用的是xcode4.0(4A304a), SDK是4.3。 從網上能夠查到的寫的比較全面的使

Xcode 創建.aframework靜態(轉)

通過 不用 方式 源碼 右鍵 eos 一個 iphone5s 最終 最近因為項目中的聊天SDK,需要封裝成靜態庫,所以實踐了一下創建靜態庫的步驟,做下記錄。 庫介紹 庫從本質上來說是一種可執行代碼的二進制格式,可以被載入內存中執行。庫分靜態庫和動態庫兩種。iOS中的靜態

Android.mk 靜態共享

有些類似的問題碰到過很多次,但大腦裡總是各種碎片化的記憶,長時間記住這些碎片並不是人類大腦的強項,所以有事沒事就要捋捋,知道前因後果才 能記憶深刻。 Android.mk Android.mk 只是GNU Makefile的一小部分,用來編譯modul

Linux靜態動態簡介及生成過程示例

http://www.daxixiong.com/?/article/13 【文章摘要】在實際的軟體開發專案中,不是每一行程式碼都需要我們親自寫。在我們的軟體產品中,有一些程式碼(尤其是函式)的出現頻率很高,它們可以被當作公共程式碼來反覆使用。為了避免重複勞動,我們就把這些

iOS Xcode打包靜態framework

iOS中.a與.framework庫的區別 從上面我們可以看出.a 和.framework的區別就是.a+.h+soureFile=.framework,這樣的話,我們還是直接封裝個.framework比較好。 封裝framework步驟 1、開啟xcode,新建工

IOS開發合併靜態

在xcode開發中經常會使用到一些三方的靜態庫,比如百度地圖SDK。然而在使用過程中會發現如果直接把os和simmulator裡面的兩個靜態庫拖進專案中會導致不能執行。所以只能在使用真機的時候新增os下的.a檔案 在使用模擬器的時候新增simulator下的.a檔案。這樣就

C++關於[]靜態數組new分配的動態數組的區別分析

zid dad ima lin aer uem asa iba ash %E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3java%E8%99%9A%E6%8B%9F%E6%9C%BA7---%E7%BA%BF%E7%A8%8B%E5%AE%89%E5

ios的奇怪崩潰SignalEXC_BAD_ACCESS錯誤分析

奔潰 ges bad strong 分享圖片 bject 文章 原子 exc 什麽是Signal 在計算機科學中,信號(英語:Signals)是Unix、類Unix以及其他POSIX兼容的操作系統中進程間通訊的一種有限制的方式。它是一種異步的通知機制,用來提醒進程一個事

iOS的事件的產生傳遞

事件 container 步驟 -s 重難點 format 希望 接受 這也 每一次將代碼打散再串聯就是一次重構。 https://www.jianshu.com/p/2e074db792ba iOS中的事件的產生和傳遞 3.1.事件的產生 發生觸摸事件後,系

iOS的屬性傳值委託模式

    iOS中常用的傳值模式有很多中,然而我們在學習階段用的比較多的傳值方式,就是屬性傳值以及委託協議傳值,或者通知方式的傳值模式,但是,我這裡主要根據自己在學習過程中學習理解到的兩種常用傳值模式。    一是,屬性傳值模式,我簡單的根據自己在

用Makefile編譯靜態檔案動態檔案

    最近要用到的簽名演算法只給了一堆原始碼沒有給庫檔案,api都不好呼叫,於是嘗試著用Makefile給一堆c原始碼編譯靜態連結庫檔案和動態連結庫檔案。 Makefile檔案編輯的相關資料連結: https://www.cnblogs.com/yya

windows下動態dll靜態編譯使用問題

window下動態庫dll和靜態庫lib問題 windows下動態庫dll和靜態庫lib的聯絡和區別,以及示例匯出個動態庫 https://blog.csdn.net/lifei092/article/details/79630273 問題: 1,生成dll時,同時生成lib是做

HelloWorld CMake CMake構建靜態與動態及其使用

繼續完善Hello World,建立它的共享庫, 包括靜態庫和動態庫。   本節的任務: 1,建立一個靜態庫和動態庫,提供HelloFunc函式供其他程式程式設計使用,HelloFunc 向終端輸出Hello World字串。 2,安裝標頭檔案與

iOS編譯OpenSSL靜態(使用指令碼自動編譯)

使用指令碼編譯:https://github.com/gitusrs/openssl-ios-build-shell-script 1、該指令碼只是一個OpenSSL編譯指令碼,使用時需要自己下載OpenSSL原始碼(openssl-*.tar.gz) 2、將 openssl-