我还没有越狱我的iOS 6设备或运行在所有的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/control文件中的信息,该文件可能会有以下内容:
iPhone-3G:~ root
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
我知道这比仅仅使用来自SBApplication
的author
更费力,但或许这已经足够了?希望其他人能提供另一个答案...
CFBundleIdentifier
通常包含公司名称,例如com.mycompany.MyAppName
。这不是你要找的吗? - Nate