拆了上百个 IPA 后,我来告诉你里面都有啥
从实际工作经验出发,聊聊 IPA 文件的内部结构,以及每个文件的作用和常见问题。
7cert ·
IPA 就是个 zip 包
没错,你把 .ipa 后缀改成 .zip,直接解压就能看到里面的东西。我刚知道这个的时候也挺意外的,感觉苹果搞得挺神秘,其实就是个压缩包。
解压后你会看到什么
最外层是个 Payload 文件夹,里面有个 你的App名.app 目录,这个 .app 目录才是核心,所有东西都在里面:
- 可执行文件:和 App 同名,没后缀,就是编译出来的二进制程序
- Info.plist:App 的"身份证",Bundle ID、版本号、最低系统版本都在里面
- embedded.mobileprovision:签名时塞进去的描述文件,决定这个 App 能装在哪些设备上
- _CodeSignature/:签名信息,改了任何文件这里面的哈希就对不上了
- Frameworks/:第三方库和系统动态库
这些文件干嘛用的
Info.plist 最重要。重签名的时候经常要改里面的 Bundle ID,改错了直接装不上。我有次手抖把 CFBundleIdentifier 拼错了一个字母,排查了半天才发现。
embedded.mobileprovision 重签名必须换的。你用新证书签名,这个文件也得换成新的描述文件,不然 iOS 验证通不过。
_CodeSignature 这个文件夹你别手动改,签名工具会自动处理。里面存的是每个文件的哈希值,iOS 安装的时候会一一校验,少一个文件或者改一个字节都不行。
我平时怎么看 IPA
以前我都是解压了一个个文件看,后来发现 7cert 直接上传 IPA 就行了,它会自动提取描述文件、签名证书、Bundle ID 这些关键信息,还查 OCSP 告诉你证书有没有被吊销。比我手动看快多了。
尤其是从别人手里拿到的 IPA,先验一下心里有底。
常见问题
改了 IPA 里的文件还能装吗?
不能直接装。改了文件签名就失效了,必须用有效证书重新签名才行。
IPA 能在安卓上跑吗?
不能,iOS 和 Android 是两套系统。安卓用 APK 格式。
怎么从手机上提取已安装的 IPA?
非越狱设备很难直接提取。可以用 Apple Configurator 2 获取 App Store 版本的 IPA。