iOS 打包靜態(tài)庫

最近項(xiàng)目需要靜態(tài)庫打包路召,看了幾篇文章 。做個(gè)總結(jié)
本文介紹的是.frameWork靜態(tài)庫制作方法

第一步:創(chuàng)建framwork工程
如圖:


image.png

第二步:給工程起個(gè)名字瞳遍,創(chuàng)建后如下圖:


image.png

第三步:修改配置,其中有兩處要修改
1.搜索:MACH_O_TYPE 選擇Static Library
image.png

2.還有一處是這樣的,如果你的framework里面需要添加一些分類辙浑,那么需要在Other Linker Flags 添加 -all_load(注意符號不要用中文寫了,all_load它的作用是加載靜態(tài)庫中所有文件泰讽,all_load作用于所有的庫.如圖:


image.png

第四步:往frameWork里面寫東西例衍。eg:我隨便寫了一個(gè)類作為測試:
.h
#import <Foundation/Foundation.h>

@interface TestOrder : NSObject

+ (void)sayHelly;
@end

.m

#import "TestOrder.h"

@implementation TestOrder
+ (void)sayHelly
{
    NSLog(@"這是一個(gè)測試的工程");
}
@end

把需要暴露的文件放在pulic里面昔期,如圖:


image.png

選完P(guān)ublic之后,還需要在STaticTest.h(相對我的framework)添加進(jìn)去佛玄,如圖:(ps:這個(gè)需要手動(dòng)敲進(jìn)去硼一,沒有提示的!)梦抢。如圖:


image.png

第五步:合成般贼。你選模擬器run的只能給模擬器用,選真機(jī)run的只能給真機(jī)用奥吩。這里面framwork分4種哼蛆,模擬器的release和debug,真機(jī)的release和debug霞赫。為了得到高效又能給真機(jī)和模擬用的framework的話腮介,需要合成!端衰!
有兩種方法
1.終端合成
2.腳本合成
第一種請自行百度叠洗。本文介紹第二種

1.新建一個(gè) File -- New -- target 如圖:


image.png

2.在Build Phases添加一項(xiàng)New Run Script Phase,點(diǎn)擊那個(gè)加號旅东,進(jìn)入Run Script中灭抑。
如圖:


image.png
image.png

加入下面的腳本將模擬器和真機(jī)的Framework合并:


# Sets the target folders and the final framework product.
# 如果工程名稱和Framework的Target名稱不一樣的話,要自定義FMKNAME
# 例如: FMK_NAME = "MyFramework"
FMK_NAME=${PROJECT_NAME}
# Install dir will be the final output to the framework.
# The following line create it in the root folder of the current project.
INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework
# Working dir will be deleted after the framework creation.
WRK_DIR=build
DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework
SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework
# -configuration ${CONFIGURATION}
# Clean and Building both architectures.
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos clean build
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator clean build
# Cleaning the oldest.
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
# Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.
lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"
rm -r "${WRK_DIR}"
open "${INSTALL_DIR}"

選擇新建的工程 而后選擇Generic iOS Device ,Command+B 編譯彈出的就是


image.png

補(bǔ)充點(diǎn):
iOS設(shè)備的CPU架構(gòu)

模擬器
4S-5:i386
5s-7P:x86_64

真機(jī)
armv6:iPhone - iPhone3G
armv7:iPhone 3Gs抵代,4,4S,iPad腾节,iPad2
armv7s: iPhone 5、iPhone 5c <靜態(tài)庫只要支持了armv7,就可以在armv7s的架構(gòu)上運(yùn)行>
arm64:iPhone 5s荤牍、iPhone 6案腺、iPhone 6 Plus、iPhone 6s参淫、iPhone 6s Plus救湖、iPad Air、iPad Air2涎才、iPad mini2鞋既、iPad mini3

一般我們只提供Release-iphoneos Release-iphonesimulator這兩個(gè)版本合并后的sdk,合并后的SDK在debug模式和release模式下都是可以用的耍铜。(這個(gè)有點(diǎn)繞邑闺,迷惑了好久,以為需要把debug下的合并后才能用棕兼,最后經(jīng)測試不用)

lipo -info xxxFramework.framework/xxxFramework

查看SDK支持的cup架構(gòu)陡舅,一般是armv7 armv7s i386 x86_64 arm64。

發(fā)現(xiàn)打包SDK不支持i386的問題: Build Setting 搜索Architectures
增加armv7 armv7s arm64伴挚。
如圖:


g.png

如此即可靶衍。
大概就這么多灾炭,用問題歡迎來探討~

demo地址

2020年3月3日補(bǔ)充:
手動(dòng)打包命令為:

在終端運(yùn)行 lipo - create PATH1 PATH2 -output PATH3

注意: 兩個(gè)framework的路徑之間的空格,以及目的文件的名稱
lipo -create xxxx/ProjectName.framework/ProjcetName xxxx/ProjectName.framework/ProjcetName -output xxxx/ProjectName.framework
eg:

lipo -create Debug-iphoneos/ICBCJFTFrameWork.framework/ICBCJFTFrameWork Debug-iphonesimulator/ICBCJFTFrameWork.framework/ICBCJFTFrameWork -output ICBCJFTFrameWork.framework

兩個(gè) xxxx/ProjectName.framework/ProjcetName之間沒打空格 會(huì)報(bào)錯(cuò) lipo: can't open input file
合成framework路徑?jīng)]有命名 會(huì)報(bào)錯(cuò) lipo: can't move temporary file

真機(jī)包和模擬器包合并完成以后包含兩種指令集就算合并成功,結(jié)果如下:

lipo -info /Users/luzhunqing/Desktop/TestSDK-Demo/TestProject.framework/Test
Architectures in the fat file: 
/Users/luzhunqing/Desktop/TestSDK-Demo/TestProject.framework/Test are: x86_64 armv7 arm64 

最近打包遇到一個(gè)問題,發(fā)現(xiàn)在新電腦運(yùn)行合并腳本是有問題颅眶,合并出來的是文稿文件蜈出,如下圖:


Snip20200303_2.png

正常的應(yīng)該是帶有頭文件的,入下圖:


Snip20200303_3.png

下面是解決方案:
output 的時(shí)候不加.framework 后綴涛酗,會(huì)生生一個(gè)這樣的文件(文稿文件)


Snip20200303_5.png

然后把這個(gè)文稿文件改名铡原,名字改成模擬器framework 或者真機(jī)framework 里面的文稿文件的名字,如圖(箭頭指向的那個(gè)):


然后把用這個(gè)合并文稿文件替換掉模擬器framework 或者真機(jī)framework 里面的文稿文件商叹,
然后把替換了文稿文件的任意一個(gè)framwork 拉到工程里面運(yùn)行燕刻,真機(jī)模擬器都解決了。
如此就解決了剖笙,上面的腳本把

xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator clean build

改為

xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator 

即可運(yùn)行腳本
2022.08.31
打開文件夾失敗

open "${INSTALL_DIR}"

改為:

open -a finder "${INSTALL_DIR}"

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卵洗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子枯途,更是在濱河造成了極大的恐慌忌怎,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酪夷,死亡現(xiàn)場離奇詭異,居然都是意外死亡孽惰,警方通過查閱死者的電腦和手機(jī)晚岭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勋功,“玉大人坦报,你說我怎么就攤上這事】裥” “怎么了片择?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長骚揍。 經(jīng)常有香客問我字管,道長,這世上最難降的妖魔是什么信不? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任嘲叔,我火速辦了婚禮,結(jié)果婚禮上抽活,老公的妹妹穿的比我還像新娘硫戈。我一直安慰自己,他們只是感情好下硕,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布丁逝。 她就那樣靜靜地躺著汁胆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪霜幼。 梳的紋絲不亂的頭發(fā)上嫩码,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音辛掠,去河邊找鬼谢谦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛萝衩,可吹牛的內(nèi)容都是我干的回挽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼猩谊,長吁一口氣:“原來是場噩夢啊……” “哼千劈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起牌捷,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤墙牌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后暗甥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喜滨,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年撤防,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了虽风。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡寄月,死狀恐怖辜膝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情漾肮,我是刑警寧澤厂抖,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站克懊,受9級特大地震影響忱辅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜保檐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一耕蝉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧夜只,春花似錦垒在、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谈为。三九已至,卻和暖如春踢关,著一層夾襖步出監(jiān)牢的瞬間伞鲫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工签舞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秕脓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓儒搭,卻偏偏與公主長得像吠架,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子搂鲫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 一傍药、前言 “隔著一段距離看,很多有趣的知識看起來都很唬人魂仍」樟桑”在我初出茅廬的時(shí)候著實(shí)覺得那些后綴名為“.framew...
    蘿卜醬紫閱讀 717評論 0 5
  • 前言: iOS的軟件開發(fā)工具包SDK,一般是以庫的形式出現(xiàn)擦酌,從本質(zhì)上來說是一種可執(zhí)行代碼的二進(jìn)制格式俱诸,可以被載入內(nèi)...
    劍未佩妥閱讀 2,234評論 0 5
  • 一乙埃、前言 前段時(shí)間看的一本書上說:“隔著一段距離看,很多有趣的知識看起來都很唬人锯岖。”比如說這篇我要總結(jié)的“靜態(tài)庫知...
    夜_闌珊閱讀 34,858評論 78 279
  • 版權(quán)聲明本文由陳懷哲首發(fā)自簡書:http://www.reibang.com/users/9f2e536b78fd...
    陳懷哲閱讀 2,645評論 3 17
  • 她是萬紫千紅中一點(diǎn)芍藥樣的白甫何,繁弦緊管中的一曲清唱出吹,高談闊論里的一個(gè)無言
    小王子不愛吃肉丸子閱讀 232評論 0 1