制作iOS越狱包
IPA越狱包的制作流程:
- 首先,你需要通过xcode进行Archive,在菜单的Product下面,方法不再赘述。
- 第二步,将该文件的后缀名改成zip。举个例子,把feimaobijia.ipa改成feimaobijia.zip,然后双击进行解压,然后会解压出一个名为Payload的文件夹。在该文件夹内是一个用你BundleName命名的文件,鼠标对准,然后右击,选择“显示包内容”,这时会显示里面的所有内容,这些内容主要是你的资源文件,例如图片和nib文件等等。
- 第三步,这也是最关键的一步,在这些文件中找到名为“info.plist”的文件,双击打开(用xcode或者文本编辑器),直接选择用xcode打开就可以了,然后再里面添加字段,其中Key是SignerIdentity,Value是Apple iPhone OS Application Signing。然后保存该文件。
<key>SignerIdentity</key> <string>Apple iPhone OS Application Signing</string>
- 第四步,将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 的文件:
用爱思助手或者其他plist编辑工具打开文件:
从这里可以看到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