一获列、iOS(安裝)包
ipa全稱為iPhone Application Archive讯屈,這里指的包在iOS其實(shí)就是安裝包绑蔫,直觀展示就是xxx.ipa文件
二运沦、iOS包內(nèi)容
要對(duì)其優(yōu)化,就要知道包里面都有什么配深,知道了有什么携添,針對(duì)不同類型的文件,做不同的處理篓叶,從而達(dá)到一定的優(yōu)化烈掠。
安裝包內(nèi)容如下:
_CodeSignature
文件夾:ipa
包簽名文件的存放文件夾Assets.car
:Assets.xcassts
在編譯過(guò)程中生成的最終展示文件羞秤,默認(rèn)里面存放各種分辨率圖片(測(cè)試項(xiàng)目未使用)embedded.mobileprovision
:證書配置文件Info.plist
:項(xiàng)目配置表Plugins
:App
創(chuàng)建的擴(kuò)展,比如Widget
左敌、Push
和Share
等.Iproj
:App
所支持的語(yǔ)言文件exec
文件:可執(zhí)行文件瘾蛋,例如widgetExtension
圖片資源:
.png,.jpg矫限,.webp哺哼,.gif
-
其它資源文件
.xml,.json
.plist
:項(xiàng)目中使用資源的.plist
文件.bundle
:Mac OS
下的資源包集合.conf
:相關(guān)的配置文件.cer
叼风,.der
取董,.p12
:鑰匙串文件.wav
:音頻文件.js
,.html
.nib
:Xcode
自帶的數(shù)據(jù)文件无宿,包含一個(gè)窗口程序和應(yīng)用程序委托對(duì)象.sqlite
:數(shù)據(jù)庫(kù)文件.txt
:文本文件.mom
:Xcode
創(chuàng)建的數(shù)據(jù)模型文件
三茵汰、優(yōu)化策略
Xcode編譯優(yōu)
armv6: iPhone, iPhone 3G, iPod 1G/2G
armv7: iPhone 3GS, iPhone 4, iPhone 4S, iPod 3G/4G/5G, iPad, iPad 2, iPad 3, iPad Mini
armv7s: iPhone 5, iPhone 5c, iPad 4
arm64: iPhone X,iPhone 8(Plus)孽鸡,iPhone 7(Plus)蹂午,iPhone 6(Plus),iPhone 6s(Plus), iPhone 5s, iPad Air(2), Retina iPad Mini(2,3)
arm64e: XS/XS Max/XR/ iPhone 11, iPhone 11 pro,iPhone 11 Pro Max,iPhone SE (2nd generation),iPhone 12 mini,iPhone 12,iPhone 12 Pro,iPhone 12 Pro Max,Phone 13 mini,Phone 13,iPhone 13 Pro,iPhone 13 Pro Max
x86_64: 模擬器64位處理器
i386: 模擬器32位處理器
Excluded Architectures中設(shè)置Release模式下 Any iOS SDK -> armv7
設(shè)置了之后梭灿,Release下把a(bǔ)rmv7的指令集排除在外。選中target會(huì)發(fā)現(xiàn)默認(rèn)設(shè)置了 Any iOS Simulator SDK -> arm64冰悠,意思是模擬器的時(shí)候排除arm64指令集堡妒。(Xcode14以后,官方不兼容arm7s和armv7溉卓,應(yīng)該不需要再設(shè)置了)
資源文件優(yōu)化
1皮迟、刪除無(wú)用圖片資源
使用開(kāi)源項(xiàng)目LSUnusedResources(https://github.com/tinymind/LSUnusedResources),可以根據(jù)項(xiàng)目實(shí)際情況定義查找文件的正則表達(dá)式桑寨。
使用建議:
勾選 Ignore similar name 伏尼,避免掃描出圖片組。
在刪除前在項(xiàng)目中進(jìn)行二次全局搜索確認(rèn)尉尾,是否確實(shí)沒(méi)有使用爆阶。
2、圖片資源壓縮
將png圖片格式轉(zhuǎn)化為WebP沙咏,使用工具iSpart
使用工具ImageOptim或者TinyPng壓縮圖片
使用建議:
由于WebP 在 CPU 消耗和解碼時(shí)間上會(huì)比 PNG 高兩倍辨图。所以,我們有時(shí)候還需要在性能和體積上做取舍肢藐。建議是故河,如果圖片大小超過(guò)了 100KB,你可以考慮使用 WebP吆豹;而小于 100KB 時(shí)鱼的,你可以使用工具進(jìn)行圖片壓縮理盆。這兩個(gè)工具的壓縮率沒(méi)有 WebP 那么高,不會(huì)改變圖片壓縮方式凑阶,所以解析時(shí)對(duì)性能損耗也不會(huì)增加猿规。
3、代碼瘦身
工程量不是很大的話晌砾,直接使用 AppCode 來(lái)做分析坎拐,那些代碼量達(dá)到百萬(wàn)行的團(tuán)隊(duì),則會(huì)自己通過(guò) Clang 靜態(tài)分析來(lái)開(kāi)發(fā)工具养匈,去檢查無(wú)用的方法和類哼勇。
使用AppCode進(jìn)行無(wú)用代碼刪除有一些注意點(diǎn):
-JSONModel 里定義了未使用的協(xié)議會(huì)被判定為無(wú)用協(xié)議;
-如果子類使用了父類的方法呕乎,父類的這個(gè)方法不會(huì)被認(rèn)為使用了积担;
-通過(guò)點(diǎn)的方式使用屬性,該屬性會(huì)被認(rèn)為沒(méi)有使用猬仁;
-使用 performSelector 方式調(diào)用的方法也檢查不出來(lái)帝璧,比如 self performSelector:@selector(arrivalRefreshTime);
-運(yùn)行時(shí)聲明類的情況檢查不出來(lái)湿刽。比如通過(guò) NSClassFromString 方式調(diào)用的類會(huì)被查出為沒(méi)有使用的類的烁,比如 layerClass = NSClassFromString(@“SMFloatLayer”)。還有以[[self class] accessToken] 這樣不指定類名的方式使用的類诈闺,會(huì)被認(rèn)為該類沒(méi)有被使用渴庆。像 UITableView 的自定義的 Cell 使用 registerClass,這樣的情況也會(huì)認(rèn)為這個(gè) Cell 沒(méi)有被使用雅镊。
基于以上種種原因襟雷,使用 AppCode 檢查出來(lái)的無(wú)用代碼,還需要人工二次確認(rèn)才能夠安全刪除掉仁烹。