未签名的ipa可以修改代码吗?

准备

重新签约前做一些准备工作。

1.首先,下载并安装Xcode,它包含一个codesign_allocate程序。安装时,/usr/bin中会有一个额外的codesign程序,用来对ipa包进行签名。

2.企业证书的证书文件、私钥文件、供应配置文件等。注意,企业证书必须是iOS分发类型,而不是iOS开发。

重新签名步骤

1.解压缩ipa

解压缩ipa以获得有效负载/[应用程序名称]。捆绑,然后打开捆绑。

2.删除旧的ipa签名信息

删除捆绑包中的_CodeSignature文件夹,即删除之前ipa的签名信息。

3.替换证书

删除捆绑包中的旧配置文件,并将其替换为我们自己的企业证书的配置文件。

请注意,我们在ipa包中的企业证书应该重命名为embedded.mobileprovision。

4.修改捆绑内容

此时,我们可以随心所欲地修改bundle中的内容,比如添加一个动态库,删除一张图片。

注意:如果要在bundle中添加动态库,必须先压缩成zip文件,然后在程序启动时解压到Documents目录下,再dlopen,否则程序启动时动态库文件会卡死。

重新签名

在修改了包的内容之后,您需要通过/usr/bin/codesign程序对其进行重新签名。该命令如下所示:

/usr/bin/code sign-f-s " iPhone Distribution:your company name "-resource-rules Payload/MYAPP.app/ResourceRules.plist Payload/myapp . app

其中,iPhone分发可以从keychain access获取,keychain access是企业证书的名称,比如下面的“iPhone分发:XXXXXXXXXX”:

具体命令示例:

codesign-f-s " iPhone Developer:xxxxxxxxxxxxx "-resource-rules Payload/NdCP _ Game _ demo . app/resource rules . plist Payload/NdCP _ Game _ demo . app

这个命令的意思是:使用keychain中“iPhone Developer:xxxxxxxxxxxxx”标识的证书,按照Payload/NdCP_Game_Demo.app/resource rules . plist中的规则进行签名,如果签名已经存在于ipa包中,将被替换,这个过程生成的_CodeSignature目录将存储在Payload/NdCP _ Game _ demo . app中。

命令执行后,bundle中将生成一个new _CodeSignature目录,其中包含新的签名信息。

重新包装到ipa中

上述工作完成后,可以生成并发布新的ipa。命令示例如下:

zip -r重新测试. ipa有效负载

#请注意,有效负载后面不能跟“/”

释放

经过打包发布测试,得出修改ipa包内容和其中的签名后,重新签名的ipa文件可以成功安装在非越狱设备和越狱设备上。注意是通过有SSL证书的网站和苹果系统(内部分发程序)安装的,不是通过PP助手之类的第三方工具。