我还没有越狱的iOS我6设备或所有iOS 6的框架运行class-dump
,所以我不能告诉你,如果有另一个私有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
从SBApplication
更多的工作,但也许它够好了?希望其他人可以用另一个答案来编钟...
难道从应用程序的info.plist文件中读取它很困难吗?为什么这不适合你? – Nate
其实info.plist文件似乎也没有这个信息。 – newenglander
那么'CFBundleIdentifier'通常有公司名称,比如'com.mycompany.MyAppName'。不是你在找什么? – Nate