Framework打包

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

iOS app需要在許多不同的CPU架構下運行:

  • arm7: 在最老的支持iOS7的設備上使用

  • arm7s: 在iPhone5和5C上使用

  • arm64: 運行于iPhone5S的64位 ARM 處理器 上

  • i386: 32位模擬器上使用

  • x86_64: 64為模擬器上使用

?

由于需要打包的代碼部分大多數由Swift編寫。然后了解背景知識,Swift只支持動態庫(Dynamic)打包。

所以先用動態庫進行打包。試坑吧:

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標志, 而是需要我們手動添加.

-all_load

加載所有靜態庫中的文件. 相比-ObjC, 不同點就是-all_load會將所有的(包括非Objective-C)文件都整合到靜態庫中.
*注意?: 假如你使用了不止一個靜態庫,然后又使用了這個參數,那么你很有可能會遇到duplicate symbol錯誤,因為不同的庫文件里面可能會有相同的目標文件.

-force_load (path_to_archive)

加載指定路徑的靜態庫. 相比-all_load, 不同點就是-force_load只是完全加載了一個庫文件,不影響其余庫文件的按需加載.

使用-all_load或者-force_load大部分原因是因為Xcode4.2之前的版本的鏈接器的bug, 在64位iOS應用環境下當靜態庫中只有分類而沒有類的時候,?-ObjC參數就會失效了. 所以為了兼容Xcode4.2之前的版本, 有兩種解決方法:

1.使用-all_load或者-force_load來替代

2.可以在分類中添加類的聲明以及實現

?

未完待續!!!

轉載于:https://my.oschina.net/u/2483082/blog/752413

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260448.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260448.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260448.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

windows 10 下利用WSL的Linux環境實現vscode C/C++環境的配置

本文主要結合二個工具,介紹如何在windows搭建Linux開發環境: WSL(Windows Subsystem for Linux)VSCode(Visual Studio Code) 文章目錄WSL安裝VSCode安裝配置Linux下的C/C環境1. 打開WSL的控制臺2. 更新ubuntu軟件3. 安裝GCC和GDB4. 配置VSCode(1). 打開…

java類初始化順序

轉自:http://zangweiren.iteye.com/blog/208122 對于靜態變量、靜態初始化塊、變量、初始化塊、構造器,它們的初始化順序以此是(靜態變量、靜態初始化塊)>(變量、初始化塊)>構造器。我們也可以通過下…

Java 8 - Interface Default Method接口默認方法

Java 8 相比于Java 7 推出了幾大特色(features)(接口默認方法)default methods in interface, (接口靜態方法)static method in interface, 函數編程(functional programming), lamda expression, stream API.這里首先…

Windows 11下 WSL使用 jupyter notebook

這里寫目錄標題前言在WSL下的配置測試運行更優雅的啟動方法配置jupyter生成默認配置文件生成秘鑰修改配置文件nohup啟動前言 一直都使用jupyter notebook,不管做數據分析,還是調試代碼,還有寫文章都是。但是好像在WSL下又不好使。看了網上有…

sql2000導出mysql_如何將sql2000的數據庫導入到mysql中?

展開全部先用SQl2000導出e68a843231313335323631343130323136353331333262373366文本文件,把后綴名改為CSv,再從Mysql中一導入OK參考:第一種是安裝mysql ODBC,利用sql server的導出功能,選擇mysql數據源,進…

實現日、周、月排行統計 sql

在如今很多系統中,都需要進行日、周、月排行統計,但是在網上尋找 了一番,發現很多都是相對的周、月排行,即周排行則用當前時間減去7天。這樣我個人認為并不恰當。如月排行中,假設今天是4月22日,則從3月22日至4月22日之…

產品運行所需的信息檢索失敗_為服務業注入新活力,華北工控推出服務機器人專用計算機產品方案...

近年來,隨著人口老齡化趨勢加快和信息科技革命的持續推進,服務機器人已經被當作社會勞動力的一部分在醫療、教育、餐飲等行業廣泛應用,市場潛力巨大。01、需求帶動消費,科技改變服務服務機器人是國內智能機器人產業發展最快的分支…

Windows更新沒有更新提示:從windows 10升級到Windows 11,并WSL下配置cuda

文章目錄從windows 10 升級到Windows 11安裝WSL的安裝配置cuda從windows 10 升級到Windows 11 升級的方法有很多種,各大網站都有。有更新提示的按更新提示操作即可。我的是一直都沒有更新提示,也搜索過網上的一些方法,但都不行。還是沒法更新…

js修改css樣式屬性_這個筆記《CSS樣式的常見屬性及值》,讓菜鳥輕松學會包粽子...

常見樣式屬性及值字體:font-family-size-style: normal(正常)|italic(傾斜)|oblique-weight: normal|bold(粗體)如果組合起來編寫: font: style weight size family字體大小的單位可以是 px, em, rem, pt, cm, mm, in, pc文本:colortext-align(水平對齊方式): left|center|righ…

7.java.lang.IllegalAccessException

java.lang.IllegalAccessException 沒有訪問權限 當應用程序要調用一個類,但當前的方法即沒有對該類的訪問權限便會出現這個異常。對程序中用了Package的情況下要注意這個異常

在 VirtualBox 中 CentOS 網絡設置

轉自&#xff1a;本文發表于水景一頁。永久鏈接&#xff1a;<http://cnzhx.net/blog/minimal-centos-in-virtualbox/>。轉載請保留此信息及相應鏈接。 4. 設置 按照上面的方法安裝之后&#xff0c;還需要一些簡單的設置&#xff0c;比如網絡訪問。然后既然是做網頁服務器…

mysql 熱塊_mysql 優化

數據庫層面&#xff1a;應用系統層面優化SQL優化SQL優化一般通過分析慢查詢日志來抓取長事務高消耗的sql&#xff0c;通過結合具體業務&#xff0c;對sql邏輯進行分析and精簡&#xff0c;or重寫sql。通過配置slow_query_log1和log_queries_not_using_indexes1啟動慢查詢日志記錄…

vscode C++ 分文件、文件夾編譯配置與錯誤解決

文章目錄問題includesourceout配置過程遇到的問題與解決遇到的問題1解決步驟1. ctrl shift p2. 配置json文件修改task.json文件修改launch.json可能遇到的錯誤1. collect2: error: ld returned 1 exit status2. /mnt/d/tmp/c/source/add.cpp:3:10: fatal error: add.h: No su…

gc就是fullgc嗎 major_線上出現fullgc問題如何排查?

1.問題描述線上出現fullgc報警&#xff0c;每5分鐘一次2.背景知識1. 程序執行了System.gc()執行了jmap -histo:live pid命令 在執行minor gc的時候進行的一系列檢查 執行Minor GC的時候&#xff0c;JVM會檢查老年代中最大連續可用空間是否大于了當前新生代所有對象的總大小。 …

修改 jquery.validate.js 支持非form標簽

嘗試使用markdown來寫一篇blog&#xff0c;啦啦啦 源代碼傳送門&#xff1a;github 在特殊情況下我們使用jquery.validate.js對用戶輸入的內容做驗證的時候&#xff0c;表單并不是一定包含在form之中&#xff0c;有可能是一個div彈層&#xff0c;有可能是嵌套在form里面的一個d…

Linux常用文件和目錄操作

cd:變換目錄pwd:顯示弼前目錄mkdir:建立一個新目錄rmdir:刪除一個空目錄 cp&#xff1a;復制目錄或者文件 mv&#xff1a;移動文件或者目錄 rm&#xff1a;刪除文件或者目錄 轉載于:https://www.cnblogs.com/lijingpeng/archive/2012/09/07/2675982.html

淘淘商城項目mysql服務器_SpringMVC+Spring+Mybatis+Mysql+Maven+Svn[ 淘淘商城項目環境搭建 ]...

背景&#xff1a;淘淘商城項目的環境搭建說明&#xff1a;采用SpringMVCSpringMybatisMysqlMavenSvn結構搭建&#xff0c;在開發之中可以參考其結構和搭建步驟去搭建實際的工程項目工程結構簡圖&#xff1a;項目結構&#xff1a;---------------------------------------------…

bean validation校驗方法參數_項目啟動時首先校驗Spring Boot配置參數

1. 概述在項目實際開發過程中&#xff0c;為了更好的復用&#xff0c;我們參考Spring Boot Starters&#xff0c;封裝了許多企業內部中間件的starter。這些中間件的接入都需要申請并在項目中配置一些特定的參數。我們通過ConfigurationProperties注解&#xff0c;增加了在配置過…

進一步理解:inline-block,vertical-align,line-height

看似三個最常見的概念背后卻隱藏了很深的很深“水” 那有多深呢&#xff0c;先來看下面的代碼 引出問題 <style>.inline-block {display: inline-block;}.border {border: 1px solid #000000;}.span {width: 100px;height: 100px;}.bak {background: #33CCFF;} .o-hidden…

刷系統——黑屏問題

引用&#xff1a;http://www.miui.com/thread-344361-1-1.html 此貼大部分內容源自魔趣論壇V大的帖子&#xff0c;本人經過整理后發出&#xff0c;特此聲明原帖地址&#xff1a;http://bbs.mfunz.com/thread-172610-1-1.html——此貼獻給小白們&#xff0c;老鳥一笑而過吧近期有…