签名相关的命令:
?$security find-identity -v -p codesigning -- 列出钥匙串里可签名的证书
?$security cms -D -i embedded.mobileprovision -- 查看描述文件
?$codesign–fs “证书串” 文件名 -- 强制替换签名
重签步骤:
1.删除插件和带有插件的.app包(比如Watch)
2.对Frameworks里面的库进行重签名
3.给可执行文件 +x(可执行)权限
4.替换描述文件
5.替换BundleID
6.通过授权文件(Entilements)重签.app包
实际操作:
获取破壳的ipa包
获取第三方ipa包
查看ipa包是否已经破壳 》 非上架的都没加壳,无需关注
解压ipa包,进入playload文件夹,找到MachO文件
在终端使用命令otool -l DingTalk | grep crypt,0是已脱壳,大于0是未脱壳(一
般为1)
终端查看本地有效证书
$security find-identity -v -p codesigning
删除无法签名的插件文件
删除Plugins文件夹和Watch文件夹
对.app文件夹内的Frameworks文件夹中的每一个framework强制重签名
命令:$ codesign -fs “iPhone Developer: xxx “ xxx.framework
找到framework文件夹下所有.framework,分别使用上面的命令对其签名。
建议通过脚本命令执行:
将要签名的描述文件该成 embedded.mobileprovision 替换 来的 embedded.mobileprovision
创建entitlements.plist文件
查看描述文件内容,使用命令security cms -D -I embedded.mobileprovision,找到Entitlements节点,接着创建entitlements.plist文件,内容拷贝过去,最后把entitlements.plist文件拷贝到playload文件夹内(与xx.a
工具: https://www.cnblogs.com/guohai-stronger/p/11781249.html
iOS APP签名机制详解
苹果手机设置签名方法
设置签名:点开设置--通用--键盘--添加新的短语---(你的名字)再点:输入码--输入两位自己好记的字母即可。---最后点:存储。一切搞定。 例如:我想把我短语中的(单位:XXXX,姓名:XXXX、信箱:XXXX ) 发给对方 。输入码是KK,在写完主题后,可以另起一行。键入KK,再点space建就好了
工具:iOS app signer
应用:用另一套证书和.mobileproversion来签,实现同一个ipa包能安装到另一个证书的100台设备上。但有个问题boundle id也变为另一个证书绑定的id了,影响了原ipa里面一些绑定了id的三方SDK,比如一键登录等。
1、重签名后,改变ipa里面的plist文件的id。安装失败。打印sign信息发现Info.plist=not bound。说明改变了plist文件后,签名失效。
2、改变plist后重新签名。安装失败。打印sign信息签名成功。说明是安装到手机时验证失败。在用证书重新签名整个app的时候,签名的是证书绑定的id。打印sign信息的是info.plist的id,装机验证会失败。
参考
iOS 的 Code Signing 体系
ipa重签名
iOS开发各种证书详解
重签名的意义:ipa 重签名最大的用处是,不必重新打包,和配置其它第三方获取 appkey 等操作,直接重签名之后依然可以拥有这些功能,更快的发布测试或者灰度版本。
本文介绍三种方式的重签名,当然着重介绍第一种,因为目前来说是签名最全面的,也是最可靠的。
看图说话最直接,下面就看看终端的截图,当出现Successfully signed 路径/xxx.ipa!原来文件夹中的.ipa已经被重签名了。
现在还能用的助手不多了,pp 助手目前还存活,iTools 已经频繁报错没更新了。pp 助手安装 ipa 包的流程大致如下:
看得懂或者熟悉脚本的同学可以前往以下地址: /usr/local/lib/ruby/gems/2.3.0/gems/sigh-2.0.1/lib/assets/resign.sh 或者 /usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.61.0/sigh/lib/assets/resign.sh 版本号是根据自己当前 sigh 插件的版本号决定的(直接执行此脚本可以重签多 target 的 ipa: ./resign.sh YourApp.ipa “iPhone Distribution: YourCompanyOrDeveloperName“ -p “bundel id“=《path_to_provisioning_profile_for_app》.mobileprovision -p “bundel id“=《path_to_provisioning_profile_for_watchkitextension》.mobileprovision -p “bundel id“=《path_to_provisioning_profile_for_watchkitapp》.mobileprovision -p “bundel id“=《path_to_provisioning_profile_for_todayextension》.mobileprovision resignedYourApp.ipa )
Github的官方 read me 提示: This app requires Xcode to be install
姓名:
年龄:
电话: