原創分析: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 study:IOS中的變數定義方法以及程式結構
今天主要的學習內容 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)運動 如果我們習慣於數學坐
知識儲備:Spring中Bean的生命週期(基於註解版)
一:前言 在Spring專案中,通常配置Spring都是使用XML的形式進行配置,配置bean是通過<bean></bean>標籤將bean加入IOC容器中,但在Spring註解版中,可以通過Java程式碼進行配置,即建立一個java類在其類頭上標註@Configurat
Python基礎(4):python中的特性入門篇(索引,切片,連線,重複,成員操作符)
在介紹列表的時候發現,有一些特性沒有提前解釋,而穿插在其中又會略顯重複和雜亂,索性在這裡來個總結。 接觸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命令窗(執行