iPhone 3.0的转储框架无法正常工作?

时间:2009-09-30 00:05:34

标签: iphone frameworks dump

嘿我的程序需要一些额外的功能,我想为我的iPhone程序使用一些未记载的API。 我下载了: DumpFrameworks为Dumpframeworks.pl 和类转储 来自:http://ericasadun.com/HeaderDumpKit/

我在下载中放置了DumpFrameworks.pl 和/ usr / local / bin中的类转储文件

在我运行的终端中:

$perl DumpFrameworks.pl

出现了一些警告和错误:

Framework: Accelerate
2009-09-30 08:39:58.776 class-dump[466:903] Warning: This file does not contain any Objective-C runtime information.
Framework: ApplicationServices
2009-09-30 08:40:00.443 class-dump[473:903] Couldn't read file: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/ApplicationServices.framework/ApplicationServices
2009-09-30 08:40:00.449 class-dump[473:903] Couldn't read file: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/ApplicationServices.framework/ApplicationServices
class-dump: Input file (/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/ApplicationServices.framework/ApplicationServices) is neither a Mach-O file nor a fat archive. 
... etc (above warnings are very common when I run the perl script)

***但最重要的是,剧本最终似乎失败了。

我得到了***

(after several warnings like above)
Framework: WebKit
    2009-09-30 08:40:24.228 class-dump[662:903] caught exception: expected (many things), got 260
    2009-09-30 08:40:24.232 class-dump[662:903] type: ^{WebDocumentLoaderMac=^^?iB^{Frame}{RefPtr<WebCore::MainResourceLoader>="m_ptr"^{MainResourceLoader}}{HashSet<WTF::RefPtr<WebCore::ResourceLoader>,WTF::PtrHash<WTF::RefPtr<WebCore::ResourceLoader> >,WTF::HashTraits<WTF::RefPtr<WebCore::ResourceLoader> > >="m_impl"{HashTable<WTF::RefPtr<WebCore::ResourceLoader>,WTF::RefPtr<WebCore::ResourceLoader>,WTF::IdentityExtractor<WTF::RefPtr<WebCore::ResourceLoader> >,WTF::PtrHash<WTF ... etc (I got many many lines of this kind of code in WebCore framework)

我想知道我在这里做错了什么? 我需要一些额外的设置吗?

我正在使用Mac OS 10.6.1,并希望首先转储3.0框架,但我的真正目标是3.1框架

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

根据我对无证API的理解,他们就在那里。所以在任何应用程序中我都可以调用它们。

根据我对类转储的理解,他们需要发现未记录的API。

在Sadun的书中,她说,这是一个未经证实的API调用,使用它,将其包含在标题中。然后你可以使用它。

我的建议是不要使用它们。

答案 1 :(得分:1)

Erica网站上包含的类转储版本似乎已过时。一个工作版本(从iPhone OS 3.2开始,无论如何)可以在这里找到: http://www.codethecode.com/projects/class-dump/

注意:执行一些框架后,脚本仍然会失败;而不是修复脚本,您只需在您关心的框架上手动运行class-dump。

即:

cd /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.2.sdk/System/Library/Frameworks/UIKit.framework
class-dump UIKit -H -o ~/temp/Headers/UIKit

答案 2 :(得分:0)

我想我总共使用过DumpFrameworks一次,所以我不是那么熟悉它或为什么它失败了。但是,IIRC,它只是可以轻松转储标题中的信息。

关于头文件的位置,不仅仅是剪切和粘贴脚本。 查看脚本的功能。它清楚地评论了它是否拉动了公共和私人框架。转到那些目录,开始钻取,然后你会找到头文件。

在项目中包含框架,将它们导入到您希望调用函数的位置,然后调用标题中列出的函数。

如果您不知道,调用未记录的API是让您的应用被Apple拒绝的好方法。