我还没有越狱我的 iOS 6 设备或class-dump
在所有的 iOS 6 框架上运行,所以我不能告诉你是否有另一个私有 API来做你以前能做的事情。
您关于检查应用程序文件夹的内容(例如/var/mobile/Applications/*/*.app/
)和阅读 iTunesMetadata.plist 文件的建议听起来很合理。阅读每个应用程序的 Info.plist 也会为您提供CFBundleIdentifier
,通常至少包含发布者的域名(例如com.mycompany.MyAppName
)。
对于不是来自应用商店的应用(并且没有 iTunesMetadata.plist),您可以尝试另一种技术(除了阅读 Info.plist):
Cydia 软件包由实用程序维护dpkg
。您可以使用命令列出所有已安装的软件包dpkg -l
。您可以使用以下命令调用此命令
system("dpkg -l >> /tmp/output.log 2>&1");
将输出通过管道传输到临时文件中,或使用NSTask
. NSTask
是 OS X API 的一部分,不在 iOS 公共 API 中。但是,如果您自己将 NSTask.h 标头添加到项目中,您当然可以将其用作非 App Store 应用程序中的私有 API,以编程方式运行命令并捕获输出。
在命令行,运行dpkg -l
会给你:
ii libhide 2.1 Library to hide icons. If you are a developer wanting to use this library, code samples included in /usr/lib
ii libxml2-lib 2.6.32-3 represents the library for libxml2
ii lsof 33-4 shows what files programs have open
ii lzma 4.32.7-4 slower, but better, compression algorithm
ii make 3.81-2 dependency-based build environments
ii mobilesubstrate 0.9.3999.1 powerful code insertion platform
ri ncurses 5.7-12 feature-complete terminal library
ii network-cmds 307.0.1-6 arp, ifconfig, netstat, route, traceroute
因此,您的应用程序可以解析该输出,以从第二列读取包名称。
然后,您可以使用该apt-cache show
命令从包的 DEBIAN/控制文件中获取信息,该文件将具有以下内容:
iPhone-3G:~ root# apt-cache show sqlite3
Package: sqlite3
Version: 3.5.9-12
Architecture: iphoneos-arm
Maintainer: Jay Freeman (saurik) <saurik at saurik dot com>
Installed-Size: 348
Pre-Depends: dpkg (>= 1.14.25-8)
Depends: sqlite3-lib
Replaces: sqlite3 (<= 3.5.9-11)
Filename: debs/sqlite3_3.5.9-12_iphoneos-arm.deb
Size: 71928
MD5sum: 6d47c112692ac00af61bd84e3847aa42
Section: Data_Storage
Priority: standard
Description: embedded database used by iPhoneOS
Name: SQLite 3.x
Tag: purpose::library, role::developer
我知道这不仅仅是使用author
from更多的工作SBApplication
,但也许它已经足够好了?希望其他人会加入另一个答案......