3. ipa包重签名ipa包重签名主要针对的是非App Store的安装包,App Store分发最终是上传ipa文件到苹果后台审核,通过后使用Apple私钥加密,然后才能发布安装,不存在重签入侵的可能 。而开发调试、AD-Hoc、In-House等分发途径生成的ipa包不存在苹果后台验证的步骤,这也就意味着你可以对任意的.app、 .ipa文件进行重签名 。
回顾前面讲到的签名流程,真正对ipa包进行签名的关键步骤(④⑤)是在Mac本地进行的,签名过程中需要满足三个条件:App即软件代码编译生成的产物、p12证书以及Provisioning Profile配置文件 。其中App的内容是动态变动的,Apple不会去验证它,实际上也无需验证,因为在开发调试过程中,所开发的App肯定是不停的迭代变化的,如果需要上线App Store那Apple只需在审核阶段对App内容进行把关验证即可,而其他分发渠道它则管不了 。p12以及Provisioning Profile则是下载后主动安装的,大部分情况下都是由管理员创建下载好之后,导出分发给团队成员 。
3.1 签名指令iOS签名调用的是codesign指令,你也可以直接使用相关指令进行签名,下面是codesign的常用指令:
# MAC终端输入: codesign --helpcodesign --helpUsage: codesign -s identity [-fv*] [-o flags] [-r reqs] [-i ident] path ... # signcodesign -v [-v*] [-R=<req string>|-R <req file path>] path|[+]pid ... # verifycodesign -d [options] path ... # display contentscodesign -h pid ... # display hosting paths
查看Xcode的编译日志,也可以看到签名的详细信息
![为什么有些APP没有上架App Store?iOS 打包签名内幕](http://img.jiangsulong.com/220411/214ZS320-5.jpg)
文章插图
# 签名指令codesign -f -s "iphone Distribution: XXX(证书名称)" --entitlements entitlements.plist(Profile配置文件) XXX.app(签名app)
3.2 重签名- 首先获取需要重签名的ipa包,注意该ipa包必须是未加密的 。如果是从App Store下载的ipa,需要砸壳解密后才能进行重签名,你也可以从越狱平台下载 。将获取的.ipa重命名为.zip,然后右键解压,将会生成一个 Payload 文件夹,里面包含.app文件 。
- 将签名证书对应的Provisioning Profile文件重命名为 embedded.mobileprovision,并拷贝放到Payload文件夹中 。同时右键.app文件,显示包内容,将前面的embedded.mobileprovision文件再拷贝一份放到.app文件夹中,替换掉原有的embedded.mobileprovision 。
- entitlements.plist是由签名证书对应的Profile配置导出的签名文件,它与前面截图Xcode签名日志中的XXX.xcent文件的作用相同 。终端cd到Payload文件夹路径,执行指令# cd xxx/Payload,然后执行下面指令 security cms -D -i embedded.mobileprovision将会打印出Profile配置的内容,找到<key>Entitlements</key>,然后把<key>Entitlements</key>下面<dict>...</dict>的内容拷贝到新建的entitlements.plist文件中(可以通过Xcode生成plist文件,选Property List类型),最后将entitlements.plist文件放到Payload文件夹中 。# 拷贝内容为:<dict> ... </dict> <key>Entitlements</key> <dict> <key>application-identifier</key> <string>xxx</string> <key>keychain-access-groups</key> <array> <string>xxx</string> </array> <key>get-task-allow</key> <false/> <key>com.apple.developer.team-identifier</key> <string>xxx</string> </dict>
- 签名证书名称可以在安装证书后从钥匙串中心查看或者在终端使用以下指令查看:security find-identity -v -p codesigning
- 准备工作完成,开始重签名 。先右键.app显示包内容,查看动态库和插件(Plugins、Watch、Frameworks文件夹),如果是个人证书需要移除Plugins、Watch文件夹,因为个人证书没法签名Extention 。如果存在Frameworks,则执行签名指令,有多个的话则每一个Frameworks都要重签一次 。
- codesign -fs "签名证书名称" "Frameworks/xxx.framework(动态库路径)"
- 最后对app进行重签名
- codesign -f -s "iPhone Distribution: XXX(证书名称)" --entitlements entitlements.plist(Profile配置文件) XXX.app(签名app)
- 最后将Payload文件夹下的资源移除,只保留.app文件,右键压缩,然后更改后缀为.ipa,这样重签后的ipa便已生成了,你可以通过iTunes、iTools或其他途径安装到iOS设备上 。
- ipa代码注入一般通过动态库来实现 。新建动态库在Xcode中选择新建 TARTETS — Framework & Library — Framework,然后在framework中添加自定义代码,一般都是使用Runtime来注入附加功能 。最后选择framework要支持的架构,编译后便得到了最终动态库 。
推荐阅读
- 福建白茶,8个来自福建
- 抖音很火的孟婆汤视频 郑州孟婆汤为什么那么火
- |为什么小鱼什么都吃,大鱼却总爱挑食?深度分析钓鱼用饵思路
- 为什么送茶不能送一盒 喜茶鲜肉月饼价格多少钱一盒
- 白茶福鼎价格,福鼎焕珍百茶讲解白茶的价格为什么这么高
- 抖音橱窗开通了为什么绑定不了账户 抖音橱窗添加不了商品怎么办
- 生普功效,为什么选择纯生晒工艺的小青柑好
- 生普价格,为什么价格差别那么大
- 怎么取消抖音达人资质认证 抖音个人认证为什么就是不能通过
- |为什么野钓主播在野外钓鲫鱼时总能爆护?揭秘野钓主播的几种套路