Ios12 app目录怎么一一对应的?

现在这个地址下是这样的

iPhone:/var/mobile/Containers/Data/Application root# ls
016CC9FE-67BC-40DA-9333-80A7DE796C27/  5C57C81F-71DF-442C-9808-BB7CF1F5FC54/  B1C90945-C6EC-45DA-8A1D-810AA127B425/
064B754C-09C8-4F52-8D12-1E903B75D2E0/  5CE8464F-9104-4B03-A917-908A0AA438F2/  B20826F6-C126-4F1F-AECD-25A571CF4AFC/

在哪里可以找到 文件夹-app 对应信息呢?

就不能ps -e一下吗

LSApplicationProxy *app = [LSApplicationProxy applicationProxyForIdentifier:bid];
NSLog(@“app=%@”,app);
NSLog(@"[CC_CC] dataContainerURL=%@",[app dataContainerURL]);
//bundleContainerURL
NSLog(@"[CC_CC] bundleContainerURL=%@",[app bundleContainerURL]);

issh里面有个issh apps命令能够显示手机上所有安装的应用信息,然后grep过滤一下就行

xia0 ~ $ issh apps
[*]:iproxy process for 2222 port dead, start iproxy 2222 22 
[*]:++++++++++++++++++ Nice to Work :) +++++++++++++++++++++ 
[*]:Run find /var/containers/Bundle/Application/ -regex "[^\.]*/[^\.]*\.app$" -exec sh -c " echo '=========';echo "{}";defaults read "{}/Info.plist" CFBundleIdentifier; 		defaults read "{}/Info.plist" CFBundleExecutable; defaults read "{}/Info.plist" CFBundleDisplayName; " \; 
=========
/var/containers/Bundle/Application/11141D36-7FE5-429E-879B-C4AE431B6A29/Aweme.app
com.ss.iphone.ugc.Aweme
Aweme
抖音短视频
=========
/var/containers/Bundle/Application/1539E720-A8A3-4FF6-A313-337840D34CAE/News.app
com.ss.iphone.article.News
News
今日头条
=========
/var/containers/Bundle/Application/1D04386E-D1F8-4AB7-B069-676FAB07B06C/live4iphone.app
com.tencent.live4iphone
live4iphone
腾讯视频
=========
/var/containers/Bundle/Application/68F5D8B8-E867-4781-9D39-9EF1966F941E/Telegram.app
ph.telegra.Telegraph
Telegram
Telegram
=========
/var/containers/Bundle/Application/701B4574-1606-41F3-B0DB-92D34F92E886/com_kwai_gif.app
com.jiangjia.gif
com_kwai_gif
Kwai
=========
/var/containers/Bundle/Application/7328055D-6F64-495A-A370-250074ACD470/qrScan.app
com.maxingchi.qrScan
qrScan
二维码扫描
=========
...

由于是find命令去遍历的,所以需要几秒钟时间

ps:想做一个获取当前运行app信息的命令,一直没想到很好实现方式(在iOS8之前SpringBoardService私有api可以拿到当前运行app的bundleID)

多谢,不过有点麻烦… 我不是想在程序里面用到… 只是想在ssh进去的时候能快速进到对应文件夹

我有bundleID 信息,是不是可以更方便的找到这个目录?:joy:

这个确实可以. 但是应用要先打开着

如果你知道app的执行文件名称,比如VX的为 WeChat ,确实有简单的办法
直接在shell中输入
ls /var/containers/Bundle/Application/*/WeChat.app 就能显示
或者
cd /var/containers/Bundle/Application/*/WeChat.app 就能进入VX app的目录

4 Likes

卧槽还能这么玩。。。我一直是 find | grep 的说

确实挺方便的:+1:
不过系统是如何知道 app对应地址的呢? 难道是随机生成相同地址,后面就靠地址识别?

SpringBoard初始化的时候在内存中肯定有结构体保存了应用的信息,另外这个随机目录都是系统生成的,在生成完以后保存应用的安装信息很合理。具体可以分析下app的安装过程

app bundle 目录有个plist 可以查对应目录,不过我忘了是那个了(等于白说) :rofl::rofl:

uicache的代码里面有

1 Like

每个目录下都有.com.apple.mobile_container_manager.metadata.plist,里面有bundleid,了解一下

了解了⁠ ⁠

iPhone:~ root# ipainstaller -i com.tencent.xin
Identifier: com.tencent.xin
Version: 7.0.5.35
Short Version: 7.0.5
Name: WeChat
Display Name: WeChat
Bundle: /private/var/containers/Bundle/Application/3409A2E7-4322-4826-B6F6-06E4C9E7C7D0
Application: /private/var/containers/Bundle/Application/3409A2E7-4322-4826-B6F6-06E4C9E7C7D0/WeChat.app
Data: /private/var/mobile/Containers/Data/Application/BA4E2077-1268-4EC6-8470-1150FC238C56
iPhone:~ root# 

了解,但是要用遍历的方式了:rofl: 这种一一对应信息 的有没有统一存放的地方呢?

多谢,我去看下源码是怎么找到地址的~

你是说这个吗😂

"/private/var/mobile/Library/Caches/com.apple.mobile.installation.plist"
if (kCFCoreFoundationVersionNumber < 1140.10) {
        NSDictionary *mobileInstallationPlist = [NSDictionary dictionaryWithContentsOfFile:@"/private/var/mobile/Library/Caches/com.apple.mobile.installation.plist"];
        NSDictionary *installedAppDict = (NSDictionary*)[mobileInstallationPlist objectForKey:@"User"];

代码来自 ipainstaller, 但是我现在是ios12 看不大懂它是怎么来的了

怎么会看不大懂, 不就在else里面嘛?

1 Like