技术标签: iResign 重签名方案 iOS 应用分身 ipa 包重签名 iOS安全 iOS ipa重签名工具 - iOS App Signer iOS ipa重签名工具
重签名的意义:ipa 重签名最大的用处是,不必重新打包,和配置其它第三方获取 appkey 等操作,直接重签名之后依然可以拥有这些功能,更快的发布测试或者灰度版本。
开发证书或者企业证书,即你想要重签名的证书、provision描述文件。我是个人账户。没交钱的那种。(Xcode中自动管理会生成证书和描述文件)。
注意️:每一个重签版本都需重新申请一个 appid 和 provisoning profile,不然同appid的会覆盖。
mac电脑的开发环境配置
安装 homebrew,命令:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安装 ruby,命令:brew install ruby更新 ruby 版本
安装 sigh,命令:sudo gem install sigh
如果出错那就换成gem install sigh安装过程是漫长的。(在安装 sigh 之前,你得检查 gem的镜像源,现在一般为https://gems.ruby-china.org)
自己的ipa 不用多说。编译一下在工程的Product 文件件下就有。也可以通过爱思助手下载具体教程:Mac 如何下载ipa
embedded.mobileprovison
放在同一文件夹目录下,同级sigh resign
或者 fastlane sigh resign
命令先安装重签名之前的 ipa 包,然后再安装我们重签名之后的 ipa 包,如果没有覆盖,出现了两个一模一样的 App,各自点开没闪退没打不开的情况下,说明我们签名成功了。
如果ipa 里面有除了系统之外的 framework或者dylib的话,也需要先签名,不然也会导致签名后安装失败!至于 sigh 里面大致执行的脚本代码如下:
for framework in "$FRAMEWORKS_DIR"/*
do
if [[ "$framework" == *.framework || "$framework" == *.dylib ]]
then
log "Resigning '$framework'"
# Must not qote KEYCHAIN_FLAG because it needs to be unwrapped and passed to codesign with spaces
# shellcheck disable=SC2086
/usr/bin/codesign ${VERBOSE} ${KEYCHAIN_FLAG} -f -s "$CERTIFICATE" "$framework"
checkStatus
else
log "Ignoring non-framework: $framework"
fi
done
看得懂或者熟悉脚本的同学可以直接看脚本文件: resign.sh
位置:/Library/Ruby/Gems/2.3.0/gems/sigh-2.0.1/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)
苹果的政策越来越收紧,这种方案的可行性的周期不确定。因为很多方案已经随着版本的更新,变得不可行了。从 iTunes 关闭了 ipa应该管理功能就知道了,对于包的安全性苹果越来越重视。另外,企业账号申请的难度越来越高,也有这种趋势。这种方法已经失败。
下载 iResign,下载完直接有个可执行的iResign.app,双击执行
参数路径跟图片上描述的很清楚,第一项是你要重签名的 ipa 的路径,第二项是我们重签名的配置描述文件的路径(不用改为 embedded 也可以),第四项,填写我们生成重签名用到的mobileprovison
的 bundle identifier
,勾选修改 ID,第五项是我们重签名用到的mobileprovison
的证书
第三项很多教程说不用填,但是不填是无法自动生成的,会一直卡在entitlements generated
这个步骤,无法生成。所以我们要自己生成entitlements.plist
! 首先我们把要重签的 XXXX.ipa 解压后得到 Payload目录,然后终端 cd 到Payload目录下,执行以下命令:/usr/libexec/PlistBuddy -x -c "print :Entitlements " /dev/stdin <<< $(security cms -D -i XXXX.app/embedded.mobileprovision) > Entitlements.plist
其中 XXXX.app 是你要重签的 ipa的包名。生成的 entitlements.plist
存放在Payload目录下,然后我们用 文本编辑或者 Xcode打开 plist 文件,修改里面的<key>application-identifier</key><string>PREFIX.yourappBundleID</string>
为第四项填写的 bundle id
。到此,配置完成,点击重新签名!
噔噔噔!签名成功请看下图:
iResign 使用注意事项:第三个 plist 文件是必填的,修改ID 的 bunle id 要跟 plist 修改的对应。
下载 iOS App Signer 源码,运行在 May Mac 上
第一项,填写我们需要重签名的 ipa 路径,第二项是我们要签名的证书,第三项选择我们配置的 provisoning profile(默认项Re-Sign Only 是无效的),然后,点击star!
此方式会自动分析 provisoning profile描述文件中的东西,所以不用我们自己填写变更的bundle id
验证得到ipa 直接在爱思助手中的:我的应用->中一拖就可以了。
这个方式亲自试了,比较简单方便。
但是最后重签名之前的能正常打开,重签名之后的都是一而退。暂时不知道什么原因。
感谢:
ipa重签名最直接的教程
在android开发过程中,我们经常有通过子线程来更新界面UI的需求,而android是不允许子线程更新界面的,只能通过主线程来更新界面UI,而且,android开发中,由于要保证主线程的通畅,一般主线程只负责处理界面更新,事件处理,窗体显示的回调等重要且不耗时的操作,而像连接网络,io操作等,一般让子进程负责。所以,android提供了一种消息机制来实现子线程更新UI的需求,android提供H...
Memory Technology and Optimizations使用 SRAM 可以满足最大限度地减少对高速缓存的访问时间的需求。 但是,当发生缓存未命中时,我们需要尽快将数据从主内存中移出,这需要高带宽内存。 这种高内存带宽可以通过将构成主内存的许多 DRAM 芯片组织到多个内存库中并通过使内存总线更宽,或同时进行两者来实现。为了让内存系统跟上现代处理器的带宽需求,内存创新开始发生在 DRAM 芯片内部。 本节介绍内存芯片内部的技术以及那些创新的内部组织。 在描述技术和选项之前,我们需要介绍一些
假设反卷积生成的图像中,包含1只黑猫,黑猫身体部分的像素颜色应该是平滑过渡的。或者极端的说,身体部分应该全部都是黑色的。而在实际生成的图像中,该部分却是由深深浅浅的近黑方块组成的,很像棋盘的网络。这就是所谓的棋盘效应。 现在显著性检测还存在的一个问题就是,在像素级的视觉任务中,会出现这个棋盘效应。这个效应在深度卷积神经网络中的影响是很大的。比如:如果在FCN的输...
作为一个Java开发人员,有些常用的Linux命令必须掌握。即时平时开发过程中不使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令。因为很多服务器上都是Linux系统。所以,要和服务器机器交互,就要通过shell命令。本文并不会对所有命令进行详细讲解,只给出常见用法和解释。具体用法可以使用–help查看帮助或者直接通过google搜索学习。1.查找文件...
主要介绍一款简约的PHP目录列表Directory Lister。
【前言】最近几年,随着计算机学科的强势崛起,计算机这一学科逐渐的渗入到经济学中,以网络新经济学为代表的交叉学科开始走向舞台的中心。很多计算机网络方面的专家学者开始依靠博弈论解决在一定的规则下该网络中“用户最大化收益”的问题。当然,不仅仅是计算机网络,有很多其他方面的也有应用。就笔者本人来看,我们团队研究的就是依靠博弈论解决网络中用户的选择什么样的策略能够保证自己获得最大的收益,与此同时,该网络中的...
应急响应windows入侵排查常见的应急响应事件分类:web入侵:网页挂马,主页篡改,webshell 系统入侵:病毒木马,勒索软件,远控后门 网络攻击:ddos攻击,dns劫持,arp欺骗入侵排查思路一、检查系统账号安全检查服务器是否有弱口令,远程管理端口是否对公网开放。(询问相关服务器管理员)检查服务器是否有可以账号,新增账号。(cmd窗口输入lusrmgr.msc,查看是否有新增或可疑账号,如果管理员组administrator有新增账号请立刻删除或禁用)查看服务
一般生活中我们办理一件事需要一套指定的流水线。例如银行办事,需要先去营业厅取号、排队、办理业务、综合评分。这一套固有的流程,取号、排队、综合评分等都是固定的,不同的客户会办理不同的业务,只有这块是没个客户不同的。类似于这种有固定的流水线,在软件设计的过程中,也是时长被使用到的。定义这条流水线的方法为模板方法,执行到每个环节在调取相应方法的函数。在设计模式中,此类的问题为模板方法模式,下面就通过案例来说一下模板方法的使用。定义及结构特点看下GOF《设计模式》一书中的定义:模板方法模式在一个方法中定义一个
栈(stack)1、栈的介绍栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表允许插入和删除的一端为变化的一端,称为栈顶(top);另一端为固定的一端,称为栈底(bottom)特点:先进后出入栈(push)和出栈(pop)示意图2、栈的应用场景1)子程序的调用:在跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中。2)处理递归调用:和子程序的调用类似,只是除了储存下一个指令的地址外,也将参数、区域变量等数据存入堆栈中
转自:http://www.cnblogs.com/Smart_Joe/archive/2011/03/31/2001545.htmlhttp://timyang.net/programming/mythical-5/Bruce Eckel(Thinking in Java/C++作者) 在他的5%的神话(Mythical 5%) 中提到:5%的程序员开发效率是其他95%程序员的20倍...
前言监控系统是整个业务系统中至关重要的一环,它就像眼睛一样,时刻监测机房、网络、服务器、应用等运行情况,并且在出现问题时能够及时做出相应处理。 美团点评刚开始使用的是Zabbix监控系统,几经优化,在当时能够达到2W+机器,450W+监控项的量。随着各业务线的发展,监控项越来越多,Zabbix的问题也越来越突出,当时针对Zabbix的吐槽问题有:不支持扩展,本身是一个单点...
嘿嘿,一直分享的都是看起来比较枯燥的技术文,今天分享点有趣的技术文吧~都说程序员不懂浪漫,我觉得作为一名成熟的大牛,我需要来证明一下自己,今天小编就来教大家如何用Python代码定时通过微信发消息提醒女友!(ps:简而言之就是微信小机器人啦~)目的:利用python编程定时给女友发提示消息了,分为四个时间段:早上起床、中午吃饭、晚上吃饭、晚上睡觉,都会准时发消息给她了,至于发什么呢...