底层开发之越狱开发第一篇

做越狱开发也有一些时间了,有很多东西想总结一下,希望给他人一些借鉴,也是自己对过去开发经历的一些总结。个人不推荐使用盗版,这里主要以技术介绍为主。

这个系列里面主要介绍怎样进行越狱开发,涉及到以下几个方面:

  • (1)主要涉及到越狱市场的建立,在App内部实现ipa的安装和卸载以及更新。参照的对象就是91助手,25pp,同步推那样的应用。建立一个盗版的App Store.当然了,如果通过299刀的企业证书的话,是不需要通过Cydia的,直接通过网页链接就可以实现app的推广,有一定的风险。这里面涉及到一些协议,后面会进行介绍。
  • (2)在App内部实现壁纸和铃声的替换。这个过程涉及到的东西很多,特别是铃声的替换,iPhone里面非常麻烦;
  • (3)一些越狱插件的开发,通过里面有些插件非常好用,合理,而且非常美观漂亮。

这里先从App内部安装ipa包开始讲,后面逐步把上面提到的3点全部讲完。

一般情况下安装91助手,同步推这样的应用需要手机越狱,同时安装AppSync,这样才能使用,所以进行开发的必备条件也是如此。

上传的demo工程的地址,我的github链接:https://github.com/easonoutlook/IPAInstaller

之前一直在fork别人的东西,也没做什么贡献,从现在开始,为开发为开源,做一点自己的贡献。

进入正题:

需要的工具和环境:

1、修改SDKSettings.plist文件

我用的是Xcode4.6.3版本,iPhone的版本是6.1.2, 路径为:/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/

将这个目录下的 SDKSettings.plist里面的CODE_SIGNING_REQUIRED置为NO

执行命令为:

转到目录下

cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk

将原有文件备份

sudo cp SDKSettings.plist SDKSettings.plist.orig

对SDKSettings.plist文件进行编辑

sudo vim SDKSettings.plist

将下面对应的字段改为NO
<key>CODE_SIGNING_REQUIRED</key>
<string>YES</string>  // 默认为YES, 需要改为NO

此操作参考的路径如下:http://kqwd.blog.163.com/blog/static/4122344820117191351263/

2、给工程添加相应的权限,iOS6里面需要赋予权限才可以,iOS5之前不需要此操作

新建一个plist文件,命名为entitlements.

创建一个plist

将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>com.apple.private.mobileinstall.allowedSPI</key>
        <array>
            <string>Install</string>
            <string>Browse</string>
            <string>Uninstall</string>
            <string>Archive</string>
            <string>RemoveArchive</string>
        </array>
    </dict>
</plist>

将Code Signing 的Code Signing Entilements设置为刚刚创建的entitlements.plist文件

后面还需要一个手续,将生产的app文件用ldid签名。后面再介绍。

3、实现越狱安装的代码:

typedef NSDictionary *(*PMobileInstallationLookup)(NSDictionary *params, id callback_unknown_usage);
NSDictionary *IPAInstalledApps()
{
    void *lib = dlopen("/System/Library/PrivateFrameworks/MobileInstallation.framework/MobileInstallation", RTLD_LAZY);
    if (lib)
    {
        PMobileInstallationLookup pMobileInstallationLookup = (PMobileInstallationLookup)dlsym(lib, "MobileInstallationLookup");
        if (pMobileInstallationLookup)
        {
            NSArray *wanted = nil;//[NSArray arrayWithObjects:@"com.celeware.IPADeploy",@"com.celeware.celedial",nil]; Lookup specified only
            NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:@"User", @"ApplicationType", wanted, @"BundleIDs",nil];
            NSDictionary *dict = pMobileInstallationLookup(params, NULL);
#ifdef DEBUG
            NSLog(@"%@", dict);
#endif
            return dict;
        }
    }
    return nil;
}

所有代码均在之前的github目录中,可以自行查看。

4、编译生成App文件

因为需要给APP签名加权限,所以不要生成IPA文件,而是生成APP文件。等把签名与权限加好后,再手动用APP制作IPA文件。

在Xcode中选择设备(IOS Device)(图3),编译(Build)(图4)。编译完成后,在工程的Products文件夹中可以看到刚刚编译好的APP文件,右键Show in Finder(图5),就可以在文件夹中显示。将APP复制到一个别的文件夹中,什么地方都可以,后面需要用到。

5、制作ipa文件

将之前提到的ldid下载好后,将ldid文件放到/usr/bin中。

比如在 Download 目录下, sudo -i

然后 cp ldid /usr/bin/即可将文件拷贝到/usr/bin中。

然后对之前生成的文件,进行ldid签名

这个命令中“ldid -S” ,“ldid”与“-S”之间有一个空格。“-S”与“entitlements.xml”之间没有空格。“entitlements.xml”就是上面说到的XML文件,如果你的XML不是这个名,请将命令修改为你的XML文件名即可。

“-Sentitlements.xm”与“ipainstall.app”之间有一个空格。“ipainstall”是刚刚生成的APP文件,如果你的名字不一样,请修改为你的名字。“/“后面和APP的名字是一样的。  如果没有输出错误信息或是卡住(就是敲回车后没反应)就是添加权限成功了。

6、生成ipa文件,安装

新建一个文件夹,命名为“Payload”。将刚刚添加好权限的APP文件放到这个文件夹中。右键“压缩Payload”,得到一个“.zip”文件,将这个ZIP文件的后缀名改为“.ipa”。好了,IPA文件就制作完成了。

然后通过itools安装,测试刚刚生成的文件

整合了很多资源,有些地方弄的比较凌乱,后面加以完善

参考资源链接:

iOS开发——高级技术精选&底层开发之越狱开发第一篇的更多相关文章

  1. iOS开发——高级技术精选&底层开发之越狱开发第二篇

    底层开发之越狱开发第二篇 今天项目中要用到检查iPhone是否越狱的方法. Umeng统计的Mobclick.h里面已经包含了越狱检测的代码,可以直接使用 /*方法名: * isJailbroken ...

  2. iOS开发——高级技术精选OC篇&Runtime之字典转模型实战

    Runtime之字典转模型实战 如果您还不知道什么是runtime,那么请先看看这几篇文章: http://www.cnblogs.com/iCocos/p/4734687.html http://w ...

  3. iOS开发——高级技术OC篇&运行时(Runtime)机制

    运行时(Runtime)机制 本文将会以笔者个人的小小研究为例总结一下关于iOS开发中运行时的使用和常用方法的介绍,关于跟多运行时相关技术请查看笔者之前写的运行时高级用法及相关语法或者查看响应官方文档 ...

  4. iOS开发——高级技术&通讯录服务

    通讯录服务 AddressBook iOS中带有一 个Contacts应用程序来管理联系人,但是有些时候我们希望自己的应用能够访问或者修改这些信息,这个时候就要用到 AddressBook.frame ...

  5. iOS开发——高级技术&蓝牙服务

    蓝牙服务 蓝牙 随着蓝牙低功耗技术BLE(Bluetooth Low Energy)的发展,蓝牙技术正在一步步成熟,如今的大部分移动设备都配备有蓝牙4.0,相比之前的蓝牙技术耗电量大大降低.从iOS的 ...

  6. iOS开发——高级技术&PassBook服务

    PassBook服务 Passbook是苹果推出的一个管理登机牌.会员卡.电影票.优惠券等信息的 工具.Passbook就像一个卡包,用于存放你的购物卡.积分卡.电影票.礼品卡等,而这些票据就是一个“ ...

  7. iOS开发——高级技术&广告服务

    广告服务 上 面也提到做iOS开发另一收益来源就是广告,在iOS上有很多广告服务可以集成,使用比较多的就是苹果的iAd.谷歌的Admob,下面简单演示一下如何 使用iAd来集成广告.使用iAd集成广告 ...

  8. iOS开发——高级技术&社交服务

    社交服务 Social 现 在很多应用都内置“社交分享”功能,可以将看到的新闻.博客.广告等内容分享到微博.微信.QQ.空间等,其实从iOS6.0开始苹果官方就内置了 Social.framework ...

  9. iOS开发——高级技术&内购服务

    内购服务 大家都知道做iOS开发本身的收入有三种来源:出售应用.内购和广告.国内用户通常很少直接 购买应用,因此对于开发者而言(特别是个人开发者),内购和广告收入就成了主要的收入来源.内购营销模式,通 ...

随机推荐

  1. ASP.NET MVC学习之视图篇(2)

    继ASP.NET MVC学习之视图(1)学习 4.HTML辅助器 虽然在ASP.NET MVC中我们已经摆脱了ASP.NET的控件,但是对于页面中需要循环标签的情况依然还是存在,可能很多人认为用for ...

  2. Dynamic CRM 2013学习笔记(十六)用JS控制Tab可见,可用

    一个Form里经常会有好几个Tab,有时要根据一些条件设置哪些Tab可用,可见.下面就介绍下如何用JS对Tab进行控制. 1. 控制可见   function setTabVisableByName( ...

  3. C#设计模式(17)——观察者模式(Observer Pattern)

    一.引言 在现实生活中,处处可见观察者模式,例如,微信中的订阅号,订阅博客和QQ微博中关注好友,这些都属于观察者模式的应用.在这一章将分享我对观察者模式的理解,废话不多说了,直接进入今天的主题. 二. ...

  4. Windows上一步一步CoreRun

    起步只有3个文件:CoreRun.exe, coreclr.dll, mscorlib.dll, HelloWorld.exe 运行命令:CoreRun HelloWorld.exe 出错: Asse ...

  5. AngularJS实战项目(Ⅰ)--含源码

    前言 钻研ABP框架的日子,遇到了很多新的知识,因为对自己而言是新知识,所以经常卡在很多地方,迟迟不能有所突破,作为一个稍有上进心的程序员,内心绝对是不服输的,也绝对是不畏困难的,心底必然有这样一股力 ...

  6. Scrum 是什么?

    Scrum 是什么? Scrum 是当前最流行的敏捷软件开发方法论和实施框架.但就像人们对 “Agile” 术语的不同理解一样,不同的人对 “Scrum” 也有着不同的理解.那么,到底 Scrum 是 ...

  7. 高手速成android开源项目【blog篇】

    主要介绍那些乐于分享并且有一些很不错的开源项目的个人和组织.Follow大神,深挖大神的项目和following,你会发现很多. 一.个人 JakeWharton 就职于SquareGithub地址: ...

  8. Color颜色对照表

    Color.AliceBlue 240,248,255 Color.LightSalmon 255,160,122 Color.AntiqueWhite 250,235,215 Color.Light ...

  9. webpy使用笔记(一)

    webpy入门 工作环境中需要经常生产和测试服务器,机房一直很混乱,因此萌生了开发一个简单方便的服务器管理系统(说的好高大上,其实就是个可以获取服务器信息的小web应用).之所以选择webpy,正式因 ...

  10. 在dos中运行java程序,若出现Exception in thread “main" java.lang.NoClassDefFoundError

    在dos中运行java程序,若出现Exception in thread “main" java.lang.NoClassDefFoundError,可以检查一下几项: 环境变量配置: 注意 ...