簽名以及驗(yàn)簽過(guò)程:
ipa文件結(jié)構(gòu):
- _CodeSignature目錄里是一個(gè)無(wú)后綴的plist文件,里面存放的是.app中除可執(zhí)行文件外所有文件(非目錄)的hash值茧吊。
- embeded.mobileprovision文件就是打包時(shí)的pp文件(appstore下載的無(wú)此文件)
- MachO文件就是可執(zhí)行文件笛谦,里面包含了自己的簽名型雳。
*archived-expanded-entitlements.xcent:權(quán)限配置文件 - Frameworks(目錄):用于存放用戶級(jí)別的 Framework(Static Framework / Embedded Framework)
iOS 默認(rèn)內(nèi)置了系統(tǒng)級(jí)別的 Framework(Dynamic Framework)奕锌,在項(xiàng)目中使用系統(tǒng)自帶的 Framework 時(shí),實(shí)際上是保存對(duì)系統(tǒng)級(jí)別的 Framework 的引用逞刷。因此嘉涌,在項(xiàng)目打包時(shí),系統(tǒng)級(jí)別的 Framework(Dynamic Framework)不需要拷貝到 .app 中
因?yàn)槊總€(gè) Framework 其實(shí)就是一個(gè) App夸浅,所以 .framework 的結(jié)構(gòu)類似于 .app 的基礎(chǔ)結(jié)構(gòu)仑最,有:
① 存放簽名信息的 _CodeSignature 目錄
② Info.plist 文件
③ 與 Framework 同名的可執(zhí)行文件
④ SC_Info 目錄
因?yàn)?Frameworks 目錄下的每一個(gè) Framework 都有自己獨(dú)立的簽名信息
所以在進(jìn)行 iOS App 重簽名時(shí),需要對(duì) Frameworks 目錄下的每一個(gè) Framework 都進(jìn)行強(qiáng)制重簽名 - Bundle文件:一般是第三方資源
- Plugins(目錄)
用于保存插件题篷,無(wú)法對(duì)此目錄進(jìn)行重簽名词身,因此 App 重簽名時(shí)需要?jiǎng)h除此目錄(或者刪除此目錄下的所有文件) - Assets.car
項(xiàng)目中所有 .xcassets 打包后生成的一個(gè)壓縮包(注意:.xcassets 中的 AppIcon 和 LaunchImage 不會(huì)參與 Assets.car 的打包,而是直接放在 .app 包中 )
可以通過(guò) github 上的開(kāi)源工具 cartool 解壓查看 Assets.car 里面的內(nèi)容 - Info.plist(文件):iOS 系統(tǒng)讀取該文件番枚,并獲取 App 的配置信息
- PkgInfo(文件)
存儲(chǔ)包信息的文件(包的 8 字節(jié)標(biāo)識(shí)符法严,APPL = Application) - lproj(文件)
Localized Project Folder,包含用于支持 iOS / macOS 中 App 的單種語(yǔ)言的文本文件和其他資源文件(可能包含 .strings 和 .nib 文件) - SC_Info(目錄)
包含 appname.sinf 和 appname.supp 兩個(gè)文件:
① .sinf 為 metadata 文件
② .supp 為解密可執(zhí)行文件的密鑰
注
:
- app的簽名包含兩部分:代碼文件的簽名直接在Mach-O文件內(nèi)部葫笼;其它文件的簽名在_CodeSignature目錄中的CodeResources文件中深啤。不可往此目錄寫(xiě)入數(shù)據(jù)
- 因?yàn)槟夸洸粎⑴c簽名,所以重簽名后可以在.app內(nèi)放目錄存放資源路星。
重簽名過(guò)程
- 刪除插件溯街,因?yàn)闊o(wú)法對(duì)插件目錄Pluigin重簽名。
- 對(duì)FrameWorks進(jìn)行簽名
- 給可執(zhí)行文件執(zhí)行權(quán)限
- 拷貝描述文件
- 修改info.plist中的Bundle ID
- 生成plist權(quán)限文件
- 簽名整個(gè)APP
- 生成ipa包