ios應(yīng)用內(nèi)下載并安裝另一個應(yīng)用(原創(chuàng))

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為例系吩,點擊獲取。

02.png

2 輸入你的appid 和 密碼


3 下載后妒蔚,在資料庫里面找到 剛剛的app穿挨,右鍵點擊 在Finder顯示

03.png
04.png
05.png

4 好了月弛,ipa下載下來了,而且這個ipa已經(jīng)通過了簽名(你的appid已經(jīng)有這個ipa的使用權(quán)了)


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>請?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的

08.png

8 最后一步,手機safari通過itms-services協(xié)議下載土涝,在手機safari 輸入

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

url后面就是剛剛在GitHub的plist鏈接


下載成功佛寿。并且可以成功運行。


剛剛上面的流程是這樣做

01.png

第一步完成了但壮,總結(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)會幫我們直接安裝 **

09.png

然后我們會有個思路,能不能先把網(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就等于訪問本機的沙盒。
具體流程圖如下:

10.png

好的姓赤,有了想法之后赡译,接下來就是實現(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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市柿顶,隨后出現(xiàn)的幾起案子茄袖,更是在濱河造成了極大的恐慌,老刑警劉巖嘁锯,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宪祥,死亡現(xiàn)場離奇詭異聂薪,居然都是意外死亡,警方通過查閱死者的電腦和手機蝗羊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門藏澳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人耀找,你說我怎么就攤上這事翔悠。” “怎么了野芒?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵凉驻,是天一觀的道長。 經(jīng)常有香客問我复罐,道長涝登,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任效诅,我火速辦了婚禮胀滚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘乱投。我一直安慰自己咽笼,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布戚炫。 她就那樣靜靜地躺著剑刑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪双肤。 梳的紋絲不亂的頭發(fā)上施掏,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音茅糜,去河邊找鬼七芭。 笑死,一個胖子當(dāng)著我的面吹牛蔑赘,可吹牛的內(nèi)容都是我干的狸驳。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼缩赛,長吁一口氣:“原來是場噩夢啊……” “哼耙箍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起酥馍,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤辩昆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后物喷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卤材,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡遮斥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了扇丛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片术吗。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖帆精,靈堂內(nèi)的尸體忽然破棺而出较屿,到底是詐尸還是另有隱情,我是刑警寧澤卓练,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布隘蝎,位于F島的核電站,受9級特大地震影響襟企,放射性物質(zhì)發(fā)生泄漏嘱么。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一顽悼、第九天 我趴在偏房一處隱蔽的房頂上張望曼振。 院中可真熱鬧,春花似錦蔚龙、人聲如沸冰评。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甲雅。三九已至,卻和暖如春坑填,著一層夾襖步出監(jiān)牢的瞬間抛人,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工穷遂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留函匕,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓蚪黑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親中剩。 傳聞我的和親對象是個殘疾皇子忌穿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容