使用私有API在iOS7.1上启动、卸载程序

对于由于各种需求而不得不接触iOS开发的码农来说,如果需求就是开发在AppStore中上线的项目,那只要在书店买来与iOS开发相关的书籍,然后一阵恶补,跌跌撞撞就上路了,但就怕有些需求,“不要上线AppStore,越狱也行,只要实现我想要的功能”,然后就发现越狱的某些东西还是很难搞的,特别是对于我这种都没有接触过OC的超级小白来说,就更难了。想着就想写篇blog,一来当做笔记,二来也是希望对跟我一样的小白们有所帮助。当然请大神们绕行。

破解Xcode+免证书真机调试的教程网上有很多,我是参考的以下两篇文章:http://www.it165.net/pro/html/201407/18577.html 与 http://kuangqi.me/ios/ios-development-without-idp/ ,其中第一篇中“生成本机证书”的部分对于我这种超级小白来说太实用了,当然我没有做这一步,因为已经有了开发者证书。破解Xcode部分,我主要是参照第二篇blog中的内容做的。但在某些地方可能会遇到一些问题,比如编辑配置文件时,需要先修改文件的权限,修改的方式有两种,第一种比较笨,就是直接open . 在Finder中打开,然后右键显示简介,直接修改权限为读与写,此时可能会因为父目录的权限问题禁止修改,所以先 cd 到父目录,把这个文件夹的权限改为读与写,然后再修改配置文件的权限。第二种就是直接使用chown命令修改文件权限。

注意一:在设置Build Settings选项下的Code Signing时,如果之前有苹果的开发者证书,则需要先在General选项下的Identity中把Team设为None,再把Code Signing下的Provisioning Profile设为None,否则有可能在后面使用ldid添加权限时添加不上。我就是因为这个原因,在添加权限的时候总是添加不上,折腾了很久。

使用私有API完成安装、运行、卸载都是可以的,卸载和安装都是使用的MobileInstallation.framework中的方法,详见:http://yonsm.net/reserve-engineering-for-mobile-installation-api/ 

iOS中一个程序操作另一个程序运行,一种是采用通行的url Scheme模式,越狱、非越狱都可以,详见:http://blog.csdn.net/likendsl/article/details/7553605 和http://blog.csdn.net/a6472953/article/details/8424094 ,另一种则是使用私有API,在这篇blog中有详细介绍:http://www.cnblogs.com/gugupluto/p/3206772.html 。

要实现一个程序启动、卸载另一个程序,代码在上面的blog中都已经给出了,综合一下即可,具体实现流程其实跟实现程序内安装ipa文件一样,只是代码不一样,具体安装ipa文件参看以下两篇bloghttp://blog.sina.com.cn/s/blog_9cd1705d0101l4bo.html 

http://chenjohney.blog.51cto.com/4132124/1256610#userconsent# 。

在给APP添加权限时需要将启动与卸载的权限都添加进去,新建一个entitlements.xml文件,内容如下:

<?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>com.apple.private.mobileinstall.allowedSPI</key>
        <array>
            <string>Install</string>
            <string>Browse</string>
            <string>Uninstall</string>
            <string>Archive</string>
            <string>RemoveArchive</string>
        </array>
        <key>com.apple.springboard.launchapplications</key>
        <true/>
        <key>com.apple.springboard.openapplications</key>
        <true/>
        <key>keychain-access-groups</key>
        <array>
            <string>$(AppIdentifierPrefix)com.yourAppName</string>
        </array>
    </dict>
</plist>

其实就是以上blog中的内容整合了出来的XML文件,其中com.yourAppName是你自己的APP的bundleID,然后将这个XML文件与编译生成的APP文件放到同一个文件夹中,命名为Payload,我是直接在桌面新建的Payload的文件夹,这样方便使用。

打开终端,cd到Payload中,比如我是:cd Desktop/Payload,然后执行添加权限操作,输入 ldid -Sentitlements.xml LaunchApp.app/LaunchApp,LaunchApp更改为你自己APP的名字。上面blog中有博主说没有输出错误信息或是卡住(敲回车后没反应)就表示添加权限成功,但我在成功添加权限时并没有卡住,倒是添加不成功时会卡住,这里特别需要注意,请看上文中的注意一。然后输入ldid -e LaunchApp.app/LaunchApp查看结果,如果你看到上面XML文件中的内容则表示添加权限成功。这里其实还可以在添加权限之前输入ldid -e LaunchApp.app/LaunchApp来先检验一次,如果正确按照Xcode的破解方式操作,将Code Signing设为Don't Code Sign,并按照本文中的注意一操作,此时应该会报错:_assert(signature != NULL); errno=0 ,如果没有报错,并出现上面XML格式样的权限文件,则请重新设置Code Signing,并留意本文中的注意一提到的内容。在设置Code Signing时将PROJECT与TARGETS中的Code Signing都设置为Don't Code Sign。

最后将Payload文件夹右键压缩,修改后缀名为ipa即可。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值