寫(xiě)在前面
本文記錄的主要有兩點(diǎn):
-
.a
靜態(tài)庫(kù)的制作流程以及使用 -
.framework
靜態(tài)庫(kù)的制作流程以及使用
制作.a靜態(tài)庫(kù)
第一步:Xcode新建項(xiàng)目 - Frame & Library - Static Library促煮。
第二步:博主這里取名為:StaticLibrary,這里出現(xiàn)的兩個(gè)文件沒(méi)有用可以刪掉。
第三步:把想要打成靜態(tài)庫(kù)的文件放在
StaticLibrary
文件夾下面出革,博主這里以WWPerson
文件為例潭流。第四步:修改
BuildSetting
配置察署,將Build Active Architeture Only
設(shè)置為NO
闯参。第五步:添加需要暴露在外面的
.h
文件镊尺,.m
文件會(huì)自動(dòng)編譯到.a
文件中朽砰。在未添加之前是下圖所示:
點(diǎn)擊+添加尖滚,添加之后:
需要注意的是:這里需要暴露的
.h
文件需要放在Public
列表欄里面喉刘。第六步:
Edit Scheme
- 模式改為release
模式。第八步:分別在真機(jī)和模擬器上都要
Command+B
編譯漆弄,編譯之后我們可以看到如下內(nèi)容睦裳。其中,
Release-iphoneos
代表的是真機(jī)下的靜態(tài)庫(kù)文件撼唾,Release-iphonesimulator
表示的是模擬器下的靜態(tài)文庫(kù)文件廉邑。
溫馨提示:
- 在模擬器上編譯靜態(tài)庫(kù)時(shí)最好選擇高端一點(diǎn)的設(shè)備,這樣低端設(shè)備也可以用倒谷,如果選擇低端設(shè)備可能會(huì)出現(xiàn)在高端模擬器上出現(xiàn)錯(cuò)誤等問(wèn)題蛛蒙。
- 通過(guò)
Xcode
-Preferences
-Location
可以找到上面的靜態(tài)庫(kù)內(nèi)容。
到這里靜態(tài)庫(kù)的制作方法就基本完成了渤愁,但是還有一個(gè)重要的問(wèn)題我們還沒(méi)有解決牵祟,那就是模擬器和真機(jī)下的靜態(tài)庫(kù)需要合并,接下來(lái)我們看一下如何合并靜態(tài)庫(kù)抖格。
合并靜態(tài)庫(kù)
-
新建一個(gè)文件夾用來(lái)存放真機(jī)和模擬器下打包出來(lái)的靜態(tài)庫(kù)诺苹,博主這里新建一個(gè)“合并靜態(tài)庫(kù)”的文件夾。
- 打開(kāi)終端雹拄,在終端輸入
lipo -create 模擬器下的.a 真機(jī)下的.a -output 新合并的靜態(tài)庫(kù)的存放路徑
收奔,如下:
溫馨提示:
如果在合并的過(guò)程中有人碰到跟博主一樣的錯(cuò)誤的話,請(qǐng)按照下面的方式修改Xcode配置滓玖,然后重新編譯生成新的.a靜態(tài)庫(kù):
出現(xiàn)錯(cuò)誤的原因在于:在Xcode12之后編譯的模擬器靜態(tài)庫(kù)也支持arm64坪哄,會(huì)導(dǎo)致真機(jī)和模擬器有相同的支持架構(gòu)arm64,這也就導(dǎo)致模擬器和真機(jī)不能合并的問(wèn)題势篡。
上面Xcode設(shè)置就是將arm64架構(gòu)移除损姜。
-
合并之后,可以在目標(biāo)文件夾下看到我們剛合并的靜態(tài)庫(kù):
- 可以使用
lipo -info
看一下我們打出來(lái)的這個(gè)靜態(tài)庫(kù)支持的架構(gòu)是哪些:
.a靜態(tài)庫(kù)的使用
靜態(tài)庫(kù)的使用很簡(jiǎn)單殊霞,只需要將暴露在外面的.h
文件和.a
靜態(tài)庫(kù)放在項(xiàng)目中即可使用:
.framework靜態(tài)庫(kù)制作流程
第一步:Xcode新建項(xiàng)目 - Frame & Library - Framework摧阅,將需要打包成framework
靜態(tài)庫(kù)的文件資源等拖拽進(jìn)該項(xiàng)目。
配置framework:
Build Settings
配置:
Product Name
:可以修改名稱绷蹲,這里的名稱是最終打包出來(lái)的framework
的名稱棒卷,博主這里叫PrintFramework
。Mac-O Type
:選擇Static Library
祝钢。Build Active Architeture Only
:設(shè)置為NO
比规。Base SDK
:選擇iOS
。iOS Deployment Target
:選擇打包出來(lái)的framework
最低支持的iOS版本拦英。
Build Phases
配置:
Copy Bundle Resource
:在這里面添加framework
項(xiàng)目使用到的一些資源文件蜒什,包括:xib
、plist
疤估、圖片等灾常。Link Binary With Libraries
:在這里面添加framework
項(xiàng)目的依賴庫(kù)霎冯。Compile Sources
:framework
項(xiàng)目包含的實(shí)現(xiàn)文件。Headers
:將要暴露出來(lái)的頭文件放在public
下钞瀑,不需要暴露在外面的頭文件放在project
下沈撞。
第二步:如果項(xiàng)目中用到了圖片、Xib
等資源時(shí)需要?jiǎng)?chuàng)建一個(gè)Bundle
:File - New - Target - macOS - Bundle雕什。
溫馨提示:
在創(chuàng)建Bundle
時(shí)的名稱不能和framework
的名稱一樣缠俺,一樣會(huì)導(dǎo)致失敗。
配置Bundle:
- 選中
Bundle
Target贷岸,Product Name
- 修改Bundle
名稱壹士,博主這里叫PrintFramework
。
Base SDK
:修改為iOS
偿警。Supported Platforms
:修改為iOS
墓卦。Enable Bitcode
:設(shè)置為NO
。COMBILE_HIDPI_IMAGES
:設(shè)置為NO
户敬。(避免Bundle
中的圖片變成tiff
格式而無(wú)法使用)
使用Bundle:
- 在
framework
項(xiàng)目中使用Bundle資源不能再通過(guò)直接獲取資源名稱來(lái)獲取落剪,需要通過(guò)獲取Bundle資源路徑來(lái)獲取資源,比如:
第三步:將創(chuàng)建好的Bundle
添加到framework
項(xiàng)目的依賴中去尿庐。
第四步:Edit Scheme
- 模式改為release
模式忠怖。
第五步:分別在真機(jī)和模擬器下編譯framework
項(xiàng)目,得到兩個(gè)文件如下:
到這里抄瑟,我們制作的framework
靜態(tài)庫(kù)就基本完成凡泣,接下來(lái)就是和制作.a
靜態(tài)庫(kù)一樣需要合并靜態(tài)庫(kù),博主這里久不過(guò)多闡述了皮假,按照上面的方式產(chǎn)生新的framework
靜態(tài)庫(kù)鞋拟。
第六步:將新合并的framework
文件替換掉之前的xxx.framework
中的framework
文件。
.framework靜態(tài)庫(kù)使用
將打包出來(lái)的xxx.framework
和Bundle
導(dǎo)入項(xiàng)目中即可使用:
到這里惹资,關(guān)于
.framework
靜態(tài)庫(kù)的制作方法就結(jié)束了贺纲。
寫(xiě)在最后
iOS中關(guān)于制作.a
和.framework
靜態(tài)庫(kù)的流程到這里就基本結(jié)束了,下一篇文章博主將來(lái)詳細(xì)講一下靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的區(qū)別褪测,最后歡迎大家去我的個(gè)人技術(shù)博客逛逛猴誊。