擷取ios裝置中已安裝程式

來源:互聯網
上載者:User

分3種情況:

1.越獄之後的裝置,可以擷取完整的列表,擷取也比較方便,方法如下:
http://stackoverflow.com/questions/3878197/is-it-possible-to-get-information-about-all-apps-installed-on-iphone/3878220#3878220

http://www.iphonedevsdk.com/forum/iphone-sdk-development/22289-possible-retrieve-these-information.html 

 

也有如下代碼可以擷取:

NSFileManager* fileManager = [NSFileManager defaultManager];    NSMutableArray* applist = [[NSMutableArray alloc] init];    NSString *appPath = @"/var/mobile/Applications";    for (NSString *path in [fileManager contentsOfDirectoryAtPath:appPath error:nil])    {        for (NSString *subpath in [fileManager contentsOfDirectoryAtPath:[NSString stringWithFormat:@"%@/%@",appPath,path] error:nil])        {            if ([subpath hasSuffix:@".app"])            {                NSString* infoplist = [NSString stringWithFormat:@"%@/%@/%@/Info.plist",appPath, path, subpath];                NSLog(@"info.plist的路徑%@",infoplist);                NSDictionary* dict = [NSDictionary dictionaryWithContentsOfFile:infoplist];                NSLog(@"這個app的設定檔內容%@",dict);                [applist addObject:[dict objectForKey:@"CFBundleDisplayName"]];            }        }    }    NSLog(@"applist:%@",applist);    [applist release];

住:代碼啟動並執行目錄為/Applications/

2.沒有越獄的裝置,官方沒有提供api,所以只能用一些技巧,但是擷取內容不全。
http://developer.apple.com/library/ios/#featuredarticles/iPhoneURLScheme_Reference/Introduction/Introduction.html
http://forrst.com/posts/UIDevice_Category_For_Processes-h1H
大概解釋一下2種方法:
方法一:利用URL scheme,看對於某一應用特有的url scheme,有沒有響應。如果有響應,就說明安裝了這個特定的app。
方法二:利用一些方法獲得當前正在啟動並執行進程資訊,從進程資訊中獲得安裝的app資訊。

還有個方法應該也是可行的,就是判斷有沒有安裝某些軟體,這個方法參考這篇文章:

http://www.iloss.me/?p=835但是總體來說,沒有越獄想要擷取完整的安裝列表是不太容易實現。


3

首先本文所研究的必須在越獄的前提下。

ios中要列出已安裝的軟體目前有3中方法:(據我所知)

1.我之前的文章有2種方法擷取,詳情請移步:
http://www.iloss.me/?p=844
2.用系統提供的函數,應該比上面2種方法要方便,安全,高效。(但據我測試系統的也是讀取com.apple.mobile.installation.plist檔案)
Mobile Installation 是 iOS 中負責安裝,卸載,更新等 IPA 的 Framework,我們丟進 IDA分析
得到以下API

__MobileInstallationRebuildMap __text 000011EF 00000072 R . . . B . .
_MobileInstallationCheckCapabilitiesMatch __text 00001261 0000008C R . . . B . .
_MobileInstallationSetDeviceCapabilities __text 000012ED 00000089 R . . . B . .
_MobileInstallationCopySafeHarbors __text 00001376 0000007B R . . . B . .
_MobileInstallationRemoveSafeHarbor __text 000013F1 00000089 R . . . B . .
_MobileInstallationRegisterSafeHarbor __text 0000147A 000000E4 R . . . B . .
_MobileInstallationProcessRestoredContainer __text 0000155E 00000087 R . . . B . .
_MobileInstallationLookupArchives __text 000015E5 0000007B R . . . B . .
_MobileInstallationRemoveArchive __text 00001660 00000087 R . . . B . .
_MobileInstallationRestore __text 000016E7 00000087 R . . . B . .
_MobileInstallationArchive __text 0000176E 00000087 R . . . B . .
_MobileInstallationBrowse __text 000017F5 00000076 R . . . B . .
_MobileInstallationLookup __text 0000186B 0000007B R . . . B . .
_MobileInstallationUninstall __text 000018E6 00000087 R . . . B . .
_MobileInstallationUpgrade __text 0000196D 00000087 R . . . B . .
我這裡只分析今天用到的_MobileInstallationBrowse

最後直接貼上最終的分析結果:

int (*MobileInstallationBrowse)(NSDictionary *options, int (*callback)(NSDictionary *dict, id value), id value);

調用方法:

static int callback(NSDictionary *dict, id result) {      NSArray *currentlist = [dict objectForKey:@"CurrentList"];      if (currentlist)        {        for (NSDictionary *appinfo in currentlist)           {             [(NSMutableArray*)result addObject:[[appinfo copy] autorelease]];           }         }    return 0; } +(id)browse{     NSMutableArray *result = [NSMutableArray new];      MobileInstallationBrowse( [NSDictionary dictionaryWithObject:@"Any"   forKey:@"ApplicationType"],&callback, result);  //Any 代表所有程式,這裡可以用 “System” “User”來區分系統和普通軟體}

最終result數組將是我們擷取到的程式列表,結構是plist形式,如下:

這個和第一種方法得到的結果是一樣的,最後來一張最終


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.