1. 程式人生 > >原創分析:iOS 中使用 Mobile Installation 安裝 IPA(使用iTunes/AppStore一樣的安裝API)

原創分析:iOS 中使用 Mobile Installation 安裝 IPA(使用iTunes/AppStore一樣的安裝API)

原文:http://www.yonsm.net/post/553

iOS 中要安裝一個程式,從使用者角度看有幾種三:

1. 類似 Cydia 這種 DEB 的方式:直接安裝到 /Applications 作為系統的APP,無法長按刪除(不討論CyDelete)。

2. 類似 UCWEB/Installous 的偽 IPA 的方式:直接解包 IPA (實際上就是 ZIP),模擬官方 IPA 的安裝方式。可以理解為黑盒測試這種只管結果的模式。這個安裝方式可以說是知其表而不知其裡,會有N多問題,如圖示可能無法重新整理、IPA無法同步回 iTunes 等問題。從這個角度說,我個人不推薦大家使用 UCWEB 下載安裝 IPA,也不推薦使用 Installous。

3. 官方支援的 AppStore/iTunes 安裝 IPA 的模式:這就是我這裡要說的 Mobile Installation Framework 的方式,這是最官方、最安全、最完美的安裝 IPA 的方式。目前已知、同步推/iFunBox/iFanBox/iTools都是使用這幾種方式(其中 iFanBox 應該是在我和我交流之後才搞定這個:)

Mobile Installation 是 iOS 中負責安裝 IPA 的 Framework,,通過 IDA 分析 /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/PrivateFrameworks/MobileInstallation.framework/MobileInstallation 可知它匯出了以下 API:

Name Address Ordinal
—- ——- ——-
_MobileInstallationArchive 00000F80
_MobileInstallationBrowse 00000FE0
_MobileInstallationCheckCapabilitiesMatch 00000BE0
_MobileInstallationCopySafeHarbors 00000CA4
_MobileInstallationInstall 00001144
_MobileInstallationLookup 00001034
_MobileInstallationLookupArchives 00000E70
_MobileInstallationProcessRestoredContainer 00000E10
_MobileInstallationRegisterSafeHarbor 00000D58
_MobileInstallationRemoveArchive 00000EC0
_MobileInstallationRemoveSafeHarbor 00000CF4
_MobileInstallationRestore 00000F20
_MobileInstallationSetDeviceCapabilities 00000C40
_MobileInstallationUninstall 00001084
_MobileInstallationUpgrade 000010E4
__MobileInstallationRebuildMap 00000B90

其中有兩個 API 是非常有用的:

_MobileInstallationInstall:安裝 IPA
_MobileInstallationLookup:列出已安裝的 IPA

直接貼 MobileInstallationInstall 分析結果了,分析過程看前面幾期:)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//
typedef int (*MobileInstallationInstall)(NSString *path, NSDictionary *dict, void *na, NSString *path2_equal_path_maybe_no_use);
IPAResult IPAInstall(NSString *path)
{
    void *lib = dlopen("/System/Library/PrivateFrameworks/MobileInstallation.framework/MobileInstallation", RTLD_LAZY);
    if (lib)
    {
        MobileInstallationInstall pMobileInstallationInstall = (MobileInstallationInstall)dlsym(lib, "MobileInstallationInstall");
        if (pMobileInstallationInstall)
        {
            NSString *name = [@"Install_" stringByAppendingString:path.lastPathComponent];
            NSString* temp = [NSTemporaryDirectory() stringByAppendingPathComponent:name];
            if (![[NSFileManager defaultManager] copyItemAtPath:path toPath:temp error:nil]) return IPAResultFileNotFound;

            int ret = (IPAResult)pMobileInstallationInstall(temp, [NSDictionary dictionaryWithObject:@"User" forKey:@"ApplicationType"]0, path);
            [[NSFileManager defaultManager] removeItemAtPath:temp error:nil];
            return ret;
        }
    }
    return IPAResultNoFunction;
}

補充一下,之所以要拷貝IPA是因為安裝IPA後可能被刪除。如果安裝IPA可以刪除無所謂則不需要拷貝到一個新地方。

詳細程式碼,請郵件索取 [email protected]


相關推薦

原創分析iOS 使用 Mobile Installation 安裝 IPA使用iTunes/AppStore一樣安裝API

原文:http://www.yonsm.net/post/553 iOS 中要安裝一個程式,從使用者角度看有幾種三: 1. 類似 Cydia 這種 DEB 的方式:直接安裝到 /Applications 作為系統的APP,無法長按刪除(不討論CyDelete)。

轉載Android如何修改系統時間應用程式獲得系統許可權

在 android 的API中有提供 SystemClock.setCurrentTimeMillis()函式來修改系統時間,可惜無論你怎麼呼叫這個函式都是沒用的,無論模擬器還是真機,在logcat中總會得到"Unable to open alarm driver: Permission denied "

一對一直播分析iOS Runtime詳解

Runtime的特性主要是訊息(方法)傳遞,如果訊息(方法)在物件中找不到,就進行轉發,具體怎麼實現的呢。我們從下面幾個方面探尋Runtime的實現機制。 Runtime介紹Runtime訊息傳遞Runtime訊息轉發Runtime應用 Runtime介紹 Objective-C 擴充套件了 C 語言,

Spring原始碼分析Spring的後置處理器BeanPostProcessor

BeanPostProcessor簡介 BeanPostProcessor是Spring IOC容器給我們提供的一個擴充套件介面,如果我們需要在容器完成Bean的例項、初始化方法前後新增一些自己的邏輯處理,那麼定義一個BeanPostProcessor介面的實現類。

資料結構與演算法分析筆記與總結(java實現)--陣列11陣列的逆序對

題目:在陣列中的兩個數字,如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個陣列中的逆序對的總數P。並將P對1000000007取模的結果輸出。 即輸出P%1000000007 輸入描述: 題目保證輸入的陣列中沒有相同的數字 資料範圍:  

Qt分析Qt的兩種定時器

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSi

IOS studyIOS的變數定義方法以及程式結構

今天主要的學習內容 1.OC的資料型別:整型NSInteger、無符號整型NSUInteger、浮點型CGFloat、結構體NSRange、座標(x,y)CGpoint、長寬(W,H)CGSize、圖形CGRect:CGRect由CGpoint和CGSize組成,因此,通

圖文+程式碼分析caffe全連線層、Pooling層、Relu層的反向傳播原理和實現

1.全連線層反向傳播 設CC為loss 全連線層輸入:(bottom_data) aa 全連線層輸出:(top_data) zz 假設 aa維度K_, zz維度N_,則權值矩陣維度為N_行*K_列,batchsize=M_ 全連線層每個輸出zi=b+∑

項目實戰iOS極光推送集成30分鐘搞定

adg append ati 技術分享 tro markdown ocs sym xcode 推送有非常多,如個推、友盟、融雲和極光等等。在這裏就講下怎樣使用極光推送。主要內容是將官方文檔資料詳細匯總並一步一步集成到項目中,您也能夠直接去官方文檔閱

用C語言實現將數組A的內容和數組B的內容進行交換數組一樣

image pri 之前 es2017 sys 變量 ret 只需要 題目 之前我們已經完成了對兩個變量內容進行交換的程序,這兩道題目大同小異,不過是將兩數變成了兩數組。 可能我們會想:我們是不是需要第三個數組作為中間變量進行交換操作? 答案是no,我們只需要通過一個循環體

第89天HTML5 訪問歷史、全屏和網頁存儲API

全屏顯示 cal img 一份 圖片 def api load replace 一、訪問歷史 API 通過history對象實現前進、後退和刷新之類的操作 history新增的兩個方法history.replaceState()和history.pushState()方法屬

js網頁的高和寬document

冒泡 Language ntop int border dom html tee play 一,此例中通過鼠標點擊事件在網頁的中心位置創建一個盒子,不管瀏覽器變小,或是有卷曲的網頁,盒子都會在瀏覽器正中央 主要方法:clientWidth方法獲取當前可見網頁的寬度

VMWare 安裝VMWareTools Centos系統 和 Windows 系統

VMWare Tools Centos 系統 Windows系統 VMWare Tools 是VMware虛擬機中自帶的一種增強工具,相當於VirtualBox中的增強功能(Sun VirtualBox Guest Additions),是VMware提供的增強虛擬顯卡和硬盤性能、以及同步

黃聰通過 itms:services://? 在線安裝ipa ,跨過appstore

ins with 安裝 .get 解決方法 str war item 點擊 1.需要一個html文件,引導下載用戶在線安裝ipa <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">&

Silverlight & Blend動畫設計系列十Silverlight的坐標系統Coordinate System與向量Vector運動

過度 highlight 圖片 nbsp mgr ack jpg .com bsp 原文:Silverlight & Blend動畫設計系列十:Silverlight中的坐標系統(Coordinate System)與向量(Vector)運動  如果我們習慣於數學坐

知識儲備SpringBean的生命週期基於註解版

一:前言 在Spring專案中,通常配置Spring都是使用XML的形式進行配置,配置bean是通過<bean></bean>標籤將bean加入IOC容器中,但在Spring註解版中,可以通過Java程式碼進行配置,即建立一個java類在其類頭上標註@Configurat

Python基礎4python的特性入門篇索引,切片,連線,重複,成員操作符

在介紹列表的時候發現,有一些特性沒有提前解釋,而穿插在其中又會略顯重複和雜亂,索性在這裡來個總結。 接觸python的人不難了解到一個詞:高階特性。 其實內容並不高深,因為高階特性的產生,就是為了讓程式碼更簡介。 以下先介紹簡單的:索引,切片,連線,重複,成員操作符,以及其應用物件。 &nb

在LINUX原始碼安裝redis原始碼包的典例的步驟

(一)下載原始碼包 (二)對已經下載的壓縮包進行解壓  tar  -jxvf  壓縮包.bz2  tar  -zxvf  壓縮包.gz   根據壓縮包的形式,選

劍指offer第三十一題整數1出現的次數從1到n整數1出現的次數

題目描述 求出1~13的整數中1出現的次數,並算出100~1300的整數中1出現的次數?為此他特別數了一下1~13中包含1的數字有1、10、11、12、13因此共出現6次,但是對於後面問題他就沒轍了。ACMer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區

在Windows安裝Hadoop非虛擬機器安裝

在Windows中安裝Hadoop 作業系統:Windows 10 配置Java環境變數 Hadoop底層實現語言是Java,所以我們在執行Hadoop時是需要Java執行環境的。 下載好jdk之後按照提示安裝,這裡就不演示了,安裝完成之後在DOS命令窗(執行