嘿我的程序需要一些额外的功能,我想为我的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框架
非常感谢任何帮助。
答案 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拒绝的好方法。