ios应用内下载并安装另一个应用(原创)

ios黑科技之实现91助手的效果(app内下载并安装另一个app)

今天分享一个非常牛逼,非常装逼的黑科技--ios应用内下载并安装另一个应用,中间不需要经过appstore。
其实这个技术,就是我们实现91助手或者同步推的效果,他们也可以在他们的应用里面下载并安装其他的app。

下面教程分两步走
第一步,自动下载并安装另一个app,中间不需要经过appstore
第二步,基于第一步,实现和91助手、同步推一模一样,自己管理下载和安装(支持断点续传、下载管理器等)

不过这个技术并不可以上线appstore(91助手和同步推那些也没有上线appstore)。

除非你是像同步推类型的公司,否则这个技术只是用来装逼。

学这个技术前,首先要知道itms-services协议,这个技术是基于itms-services协议的。

itms-services:学名叫:OTA (Over The Air) 空中下载,是Apple在 iOS4 中新加的一项技术,目的是让开发者能够脱离Appstore,实现从自己的服务器下载并安装iOS应用。简单地说,就是用户只需要在Safari中点开一条链接,就能直接在主界面中安装App,不需要通过App Store。
当然,这里面还涉及到苹果签名之类的东西,大家就自行百度了,这里就不解释了。
这里的演示,我就直接通过苹果签名过的ipa进行演示,大家也可以像我这样做,就不用自己弄签名这么复杂了。

下面详细介绍怎么做

1 首先我们要获取已经签名的ipa文件,在mac里面打开itunes,点搜索,下面我搜索 git,以这个app为例,点击获取。

02.png

2 输入你的appid 和 密码


3 下载后,在资料库里面找到 刚刚的app,右键点击 在Finder显示

03.png
04.png
05.png

4 好了,ipa下载下来了,而且这个ipa已经通过了签名(你的appid已经有这个ipa的使用权了)


5 接下来把ipa上传到 7牛里面,

06.png

6 然后编写plist文件

07.png

<?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>items</key>
    <array>
        <dict>
            <key>assets</key>
            <array>
                <dict>
                    <key>kind</key>
                    <string>software-package</string>
                    <key>url</key>
                    <string>http://xxx.xxx.com/xxxx.ipa</string>
                </dict>
            </array>
            <key>metadata</key>
            <dict>
                <key>bundle-identifier</key>
                <string>请填上你的开发者证书用户名</string>
                <key>bundle-version</key>
                <string>版本</string>
                <key>kind</key>
                <string>software</string>
                <key>title</key>
                <string>请填上标题</string>
            </dict>
        </dict>
    </array>
</dict>
</plist>


7 把plist文件上传的GitHub,然后点击GitHub的

08.png

8 最后一步,手机safari通过itms-services协议下载,在手机safari 输入

itms-services://?action=download-manifest&url=https://raw.githubusercontent.com/xxxx/xxxx.plist

url后面就是刚刚在GitHub的plist链接


下载成功。并且可以成功运行。


刚刚上面的流程是这样做

01.png

第一步完成了,总结一下:
上面的演示简单来说,就是只要用户在appstore下载过这个app,就有这个app的使用权(签名)
我们之后进行itms-services下载的ipa文件,就可以直接使用
如果这个ipa文件我们没有使用权(没有签名)
那么这个app打开的时候就会不停的要我们输入appid和密码
就算输入对了也没有反应(以前直接是闪退,不允许使用)
原因是苹果检查到你的appid没有这个ipa的使用权(签名)。


下面开始牛逼的第二步教程:
你会发现,上面的下载是跟appstore一样的,他会在你手机的桌面直接进行下载,并且下载完之后直接进行自动安装。
但这样,我们就无法管理下载了(虽然用私用api可以查看,不过这种办法不好用)

如果我想实现像91助手那样的功能,可以用下载管理器去管理 每个ipa包的下载,可以暂停,可以继续,支持断点续传,可以控制ipa下载后是否要安装,自己可以选择ipa安装包的安装后是否删除。
那么继续往下看

在上面第六点那里,其实plist里面的ipa路径,系统是帮我自动 下载-安装,**那如果我已经下载好了呢? 是不是就不用下载,直接帮我安装呢?
没错,如果已经下载好了,那么系统会帮我们直接安装 **

09.png

然后我们会有个思路,能不能先把网盘的ipa下载好
然后把plist里面的url换成我们沙盒的地址呢?
然后系统检测到沙盒的ipa已经下载好了,那么就可以从沙盒直接安装。

想法是对的,不过直接换成沙盒的话,我试过,是不行的
原因是ios8开始,沙盒的地址每次都会随机生成的,而且就算写了沙盒地址,前面的协议规定一定要http
所以不可以直接写沙盒地址。
既然不允许访问沙盒,又只可以访问http,那我访问自己的ip不就可以了吗。
**没错,访问自己的ip
像这样 http://127.0.0.1/xxx.ipa **
所以我们自己在程序里面做一个虚拟http服务器,访问本机的ip就等于访问本机的沙盒。
具体流程图如下:

10.png

好的,有了想法之后,接下来就是实现了
流程1 在源码里面有虚拟的http服务器,可以直接用
流程2 源码里面封装好,可以设置ipa路径,可以设置成你们的网盘路径
流程3 源码里面封装好,可以设置https的plist路径,可以设置成你们的路径
流程4 以下是plist文件,其中url那里改成http://127.0.0.1:10001/xxxx.ipa 注意端口要和源码里面的虚拟服务器端口一致
流程5 下载好之后会提示安装

<?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>items</key>
        <array>
            <dict>
                <key>assets</key>
                <array>
                    <dict>
                        <key>kind</key>
                        <string>software-package</string>
                        <key>url</key>
                        <string>http://127.0.0.1:10001/xxxx.ipa</string>
                    </dict>
                </array>
                <key>metadata</key>
                <dict>
                    <key>bundle-identifier</key>
                    <string>com.www.m2m</string>
                    <key>bundle-version</key>
                    <string>4.5.6</string>
                    <key>kind</key>
                    <string>software</string>
                    <key>title</key>
                    <string>pinglide</string>
                </dict>
            </dict>
        </array>
    </dict>
</plist>

下面附上我的源码,里面已经包含下载管理器和虚拟服务器等
https://github.com/lovelyjune/DownloadAndInstallIpa


源码介绍:
实现和91助手、同步推的效果
已经封装好下载管理器,可以用下载管理器去管理 每个ipa包的下载
下载可以暂停,可以继续
支持断点续传(就算退出app,下次进入app依然保持上次的断点续传)
支持后台下载(按home键出去桌面之后依然保持下载)
支持设置最大并行下载数(默认是3个同时下载)
可以控制ipa下载后是否要安装
自己可以选择ipa安装包是否删除


使用说明:
1.快速添加一个下载ipa任务

[[DownloadManager manager] addDownloadTaskWithUrl:@"http://xxxx.com/xxxx.ipa"  andPlistUrl:@"https://raw.githubusercontent.com/xxxxx/xxxxx.plist" andGameName:@"xxxxx" andGameId:@"xxxxx" andType:@"ipa"];

2.下载过程中,进度的监听,我是直接返回任务数组的数据源,可以通过数组里面的OneDownloadItem 获取每个任务

[[DownloadManager manager] progressBlock:^(NSArray *allModelArr){}];

3.下载完成后的监听,返回是单个任务的完成回调

    [[DownloadManager manager] completeBlock:^(OneDownloadItem *oneItem) {}];

ps:我里面的虚拟服务器端口默认设置成10001,你可以按需自定义,直接用我的源码可以下载ipa,不过你们安装不到,因为你们appid没有得到app的签名(使用权),所以记得跟着我上面第一步的教程走一下,就可以安装了

感谢第三方插件HTTPServer、MJExtension


欢迎star

原创文章,不允许转载



参考
http://www.cnblogs.com/star91/p/5018995.html

http://stephen830.iteye.com/blog/2101884

http://blog.sina.com.cn/s/blog_5f19ccb10101da5m.html

http://www.jianshu.com/p/35ca63ec0d8e

http://blog.csdn.net/markely/article/details/12752037

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272

推荐阅读更多精彩内容