ios黑科技之實現(xiàn)91助手的效果(app內(nèi)下載并安裝另一個app)
今天分享一個非常牛逼烧栋,非常裝逼的黑科技--ios應(yīng)用內(nèi)下載并安裝另一個應(yīng)用祷杈,中間不需要經(jīng)過appstore已旧。
其實這個技術(shù)冠骄,就是我們實現(xiàn)91助手或者同步推的效果裂允,他們也可以在他們的應(yīng)用里面下載并安裝其他的app廓旬。
下面教程分兩步走
第一步际插,自動下載并安裝另一個app碘耳,中間不需要經(jīng)過appstore
第二步,基于第一步框弛,實現(xiàn)和91助手辛辨、同步推一模一樣,自己管理下載和安裝(支持斷點續(xù)傳瑟枫、下載管理器等)
不過這個技術(shù)并不可以上線appstore(91助手和同步推那些也沒有上線appstore)斗搞。
除非你是像同步推類型的公司,否則這個技術(shù)只是用來裝逼慷妙。
學(xué)這個技術(shù)前僻焚,首先要知道itms-services協(xié)議,這個技術(shù)是基于itms-services協(xié)議的景殷。
itms-services:學(xué)名叫:OTA (Over The Air) 空中下載溅呢,是Apple在 iOS4 中新加的一項技術(shù)澡屡,目的是讓開發(fā)者能夠脫離Appstore猿挚,實現(xiàn)從自己的服務(wù)器下載并安裝iOS應(yīng)用。簡單地說驶鹉,就是用戶只需要在Safari中點開一條鏈接绩蜻,就能直接在主界面中安裝App,不需要通過App Store室埋。
當(dāng)然办绝,這里面還涉及到蘋果簽名之類的東西,大家就自行百度了姚淆,這里就不解釋了孕蝉。
這里的演示,我就直接通過蘋果簽名過的ipa進行演示腌逢,大家也可以像我這樣做降淮,就不用自己弄簽名這么復(fù)雜了。
下面詳細介紹怎么做
1 首先我們要獲取已經(jīng)簽名的ipa文件搏讶,在mac里面打開itunes佳鳖,點搜索,下面我搜索 git媒惕,以這個app為例系吩,點擊獲取。
2 輸入你的appid 和 密碼
3 下載后妒蔚,在資料庫里面找到 剛剛的app穿挨,右鍵點擊 在Finder顯示
4 好了月弛,ipa下載下來了,而且這個ipa已經(jīng)通過了簽名(你的appid已經(jīng)有這個ipa的使用權(quán)了)
5 接下來把ipa上傳到 7牛里面科盛,
6 然后編寫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>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>請?zhí)钌夏愕拈_發(fā)者證書用戶名</string>
<key>bundle-version</key>
<string>版本</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>請?zhí)钌蠘?biāo)題</string>
</dict>
</dict>
</array>
</dict>
</plist>
7 把plist文件上傳的GitHub尊搬,然后點擊GitHub的
8 最后一步,手機safari通過itms-services協(xié)議下載土涝,在手機safari 輸入
itms-services://?action=download-manifest&url=https://raw.githubusercontent.com/xxxx/xxxx.plist
url后面就是剛剛在GitHub的plist鏈接
下載成功佛寿。并且可以成功運行。
剛剛上面的流程是這樣做
第一步完成了但壮,總結(jié)一下:
上面的演示簡單來說冀泻,就是只要用戶在appstore下載過這個app,就有這個app的使用權(quán)(簽名)
我們之后進行itms-services下載的ipa文件蜡饵,就可以直接使用
如果這個ipa文件我們沒有使用權(quán)(沒有簽名)
那么這個app打開的時候就會不停的要我們輸入appid和密碼
就算輸入對了也沒有反應(yīng)(以前直接是閃退弹渔,不允許使用)
原因是蘋果檢查到你的appid沒有這個ipa的使用權(quán)(簽名)。
下面開始牛逼的第二步教程:
你會發(fā)現(xiàn)溯祸,上面的下載是跟appstore一樣的肢专,他會在你手機的桌面直接進行下載,并且下載完之后直接進行自動安裝焦辅。
但這樣博杖,我們就無法管理下載了(雖然用私用api可以查看,不過這種辦法不好用)
如果我想實現(xiàn)像91助手那樣的功能筷登,可以用下載管理器去管理 每個ipa包的下載剃根,可以暫停,可以繼續(xù)前方,支持斷點續(xù)傳狈醉,可以控制ipa下載后是否要安裝才沧,自己可以選擇ipa安裝包的安裝后是否刪除失球。
那么繼續(xù)往下看
在上面第六點那里玄帕,其實plist里面的ipa路徑教沾,系統(tǒng)是幫我自動 下載-安裝熔掺,**那如果我已經(jīng)下載好了呢蔓罚? 是不是就不用下載漩怎,直接幫我安裝呢餐济?
沒錯趣竣,如果已經(jīng)下載好了摇庙,那么系統(tǒng)會幫我們直接安裝 **
然后我們會有個思路,能不能先把網(wǎng)盤的ipa下載好
然后把plist里面的url換成我們沙盒的地址呢遥缕?
然后系統(tǒng)檢測到沙盒的ipa已經(jīng)下載好了卫袒,那么就可以從沙盒直接安裝。
想法是對的单匣,不過直接換成沙盒的話夕凝,我試過宝穗,是不行的
原因是ios8開始,沙盒的地址每次都會隨機生成的码秉,而且就算寫了沙盒地址逮矛,前面的協(xié)議規(guī)定一定要http
所以不可以直接寫沙盒地址。
既然不允許訪問沙盒转砖,又只可以訪問http须鼎,那我訪問自己的ip不就可以了嗎。
**沒錯府蔗,訪問自己的ip
像這樣 http://127.0.0.1/xxx.ipa **
所以我們自己在程序里面做一個虛擬http服務(wù)器晋控,訪問本機的ip就等于訪問本機的沙盒。
具體流程圖如下:
好的姓赤,有了想法之后赡译,接下來就是實現(xiàn)了
流程1 在源碼里面有虛擬的http服務(wù)器,可以直接用
流程2 源碼里面封裝好不铆,可以設(shè)置ipa路徑蝌焚,可以設(shè)置成你們的網(wǎng)盤路徑
流程3 源碼里面封裝好,可以設(shè)置https的plist路徑誓斥,可以設(shè)置成你們的路徑
流程4 以下是plist文件只洒,其中url那里改成http://127.0.0.1:10001/xxxx.ipa 注意端口要和源碼里面的虛擬服務(wù)器端口一致
流程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>
下面附上我的源碼,里面已經(jīng)包含下載管理器和虛擬服務(wù)器等
https://github.com/lovelyjune/DownloadAndInstallIpa
源碼介紹:
實現(xiàn)和91助手岖食、同步推的效果
已經(jīng)封裝好下載管理器红碑,可以用下載管理器去管理 每個ipa包的下載
下載可以暫停舞吭,可以繼續(xù)
支持斷點續(xù)傳(就算退出app泡垃,下次進入app依然保持上次的斷點續(xù)傳)
支持后臺下載(按home鍵出去桌面之后依然保持下載)
支持設(shè)置最大并行下載數(shù)(默認是3個同時下載)
可以控制ipa下載后是否要安裝
自己可以選擇ipa安裝包是否刪除
使用說明:
1.快速添加一個下載ipa任務(wù)
[[DownloadManager manager] addDownloadTaskWithUrl:@"http://xxxx.com/xxxx.ipa" andPlistUrl:@"https://raw.githubusercontent.com/xxxxx/xxxxx.plist" andGameName:@"xxxxx" andGameId:@"xxxxx" andType:@"ipa"];
2.下載過程中,進度的監(jiān)聽,我是直接返回任務(wù)數(shù)組的數(shù)據(jù)源,可以通過數(shù)組里面的OneDownloadItem 獲取每個任務(wù)
[[DownloadManager manager] progressBlock:^(NSArray *allModelArr){}];
3.下載完成后的監(jiān)聽,返回是單個任務(wù)的完成回調(diào)
[[DownloadManager manager] completeBlock:^(OneDownloadItem *oneItem) {}];
ps:我里面的虛擬服務(wù)器端口默認設(shè)置成10001羡鸥,你可以按需自定義蔑穴,直接用我的源碼可以下載ipa,不過你們安裝不到惧浴,因為你們appid沒有得到app的簽名(使用權(quán))存和,所以記得跟著我上面第一步的教程走一下,就可以安裝了
感謝第三方插件HTTPServer衷旅、MJExtension
歡迎star
原創(chuàng)文章捐腿,不允許轉(zhuǎn)載
參考
http://www.cnblogs.com/star91/p/5018995.html
http://stephen830.iteye.com/blog/2101884
http://blog.sina.com.cn/s/blog_5f19ccb10101da5m.html