制作iOS越狱包

IPA越狱包的制作流程:

  1. 首先,你需要通过xcode进行Archive,在菜单的Product下面,方法不再赘述。
  2. 第二步,将该文件的后缀名改成zip。举个例子,把feimaobijia.ipa改成feimaobijia.zip,然后双击进行解压,然后会解压出一个名为Payload的文件夹。在该文件夹内是一个用你BundleName命名的文件,鼠标对准,然后右击,选择“显示包内容”,这时会显示里面的所有内容,这些内容主要是你的资源文件,例如图片和nib文件等等。
  3. 第三步,这也是最关键的一步,在这些文件中找到名为“info.plist”的文件,双击打开(用xcode或者文本编辑器),直接选择用xcode打开就可以了,然后再里面添加字段,其中Key是SignerIdentity,Value是Apple iPhone OS Application Signing。然后保存该文件。
    <key>SignerIdentity</key>
    <string>Apple iPhone OS Application Signing</string>
  4. 第四步,将Payload压缩,然后将压缩后的文件后缀名改成ipa即可。
    到此为止,越狱包的制作流程就讲解完毕,接下来你就可以在各渠道发布你的app了。这个ipa越狱包可以安装在没有证书的手机上。

后记:

按该流程走过几遍,能够制作出这样的越狱包。在越狱手机上,貌似只要安装了AppSync插件,无论越狱包还是非越狱包都能装上去。

但是一旦修改了Info.plist中的CFBundleIdentifier,启动时就会立即闪退。而同样的app通过Cydia源deb形式安装的则不会有这个问题。

使用爱思助手连接设备,浏览app的安装位置,发现它们有些不同:

  • Cydia: /Applications/appName.app
  • 爱思助手:/User/Containers/Bundle/Application/F7D20BDA-07DF-4686-B2C8-9DBDC6EB5A83/appName.app

对于用爱思助手安装的app, 在.app的同级目录下多出了一个 .com.apple.mobile_container_manager.metadata.plist 的文件:
image

用爱思助手或者其他plist编辑工具打开文件:
image
从这里可以看到CodeInfoIdentifier与Application-identifier不一致,比对可以正常运行的App的对应文件, 这几个identifier应该保持一致。 也就是说,虽然修改了Info.plist中的CBundleIdentifier,但可执行文件中也有一个application Idetifier 这二者要匹配,这样的程序需要执行某种校验,校验通过则能正常运行。(而对于用Cydia安装到/Applications目录下的app是不会有这个验证过程的) 针对该问题的解决办法为:对app重签名。

在appName.app同级目录下新建一个plist文件,如ent.plist, 其内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>application-identifier</key>
    <string>[TEAM_ID].com.cydiagame.appnew</string>
    <key>com.apple.developer.team-identifier</key>
    <string>[TEAM_ID]</string>
</dict>
</plist>

其中的 application-identifier 须为Info.plist中的CBundleIndentifier同样的id值。
接下来签名整个app:

$ codesign -f -s "iPhone Developer: xxx  (5ZBE4C879L)"  --no-strict --entitlements=ent.plist appName.app

然后用zip打包为ipa文件。用爱思助手安装,可以正常运行,没有闪退。

因此,修改bundle id后,需要对app重新签名!!!

几个有用的命令

  • 使用security命令查看本机的证书(签名app命令中用到的证书就是该命令结果列表中的 iPhone Developer 项 ):
    $ security find-identity -v -p codesigning
  • 通过codesign查看签名信息
    $ codesign -vv -d appName.app
  • 检查签名是否完后,如果没有提示则表示没有错误
    $ codesign --verify appName.app

Ref: https://www.jianshu.com/p/a5859d8f8005 
Ref: http://www.315026.com/showinfo-1402-107728-0.html
Ref: https://www.jianshu.com/p/4e19244dd12e

posted @ 2020-04-20 16:43  opencoder  阅读(1292)  评论(0编辑  收藏  举报