你如何包含IOS 5的SSZipArchive?

对于我正在进行的项目,我需要解压缩某些文件。 为此,我find了SSZipArchive库。 我将其包含在Xcode 4.2中(右键单击Classes文件夹 – >将文件添加到项目,并在对话框中将“将项目复制到目标组的文件夹” – 选中checkbox)。 我包括libz库(我已经尝试了libz和zlib1.2.5)。 我试图编译,突然间我有20个错误:

/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:311:1: error: expected identifier or '(' [1] @class NSString, Protocol; ^ /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:313:19: error: unknown type name 'NSString' [1] FOUNDATION_EXPORT NSString *NSStringFromSelector(SEL aSelector); ^ /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:314:44: error: unknown type name 'NSString' [1] FOUNDATION_EXPORT SEL NSSelectorFromString(NSString *aSelectorName); ^ /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:316:19: error: unknown type name 'NSString' [1] FOUNDATION_EXPORT NSString *NSStringFromClass(Class aClass); ^ /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:317:43: error: unknown type name 'NSString' [1] FOUNDATION_EXPORT Class NSClassFromString(NSString *aClassName); ^ /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:319:19: error: unknown type name 'NSString' [1] FOUNDATION_EXPORT NSString *NSStringFromProtocol(Protocol *proto) NS_AVAILABLE(10_5, 2_0); ^ /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:319:50: error: unknown type name 'Protocol' [1] FOUNDATION_EXPORT NSString *NSStringFromProtocol(Protocol *proto) NS_AVAILABLE(10_5, 2_0); ^ /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:320:19: error: unknown type name 'Protocol' [1] FOUNDATION_EXPORT Protocol *NSProtocolFromString(NSString *namestr) NS_AVAILABLE(10_5, 2_0); ^ /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:320:50: error: unknown type name 'NSString' [1] FOUNDATION_EXPORT Protocol *NSProtocolFromString(NSString *namestr) NS_AVAILABLE(10_5, 2_0); ^ /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:324:30: error: unknown type name 'NSString' [1] FOUNDATION_EXPORT void NSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2); ^ /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:324:53:{324:53-324:76}: error: format argument not an NSString [3] FOUNDATION_EXPORT void NSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2); ^~~~~~~~~~~~~~~~~~~~~~~ /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:85:49: note: instantiated from: #define NS_FORMAT_FUNCTION(F,A) __attribute__((format(__NSString__, F, A))) ^ /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:325:31: error: unknown type name 'NSString' [1] FOUNDATION_EXPORT void NSLogv(NSString *format, va_list args) NS_FORMAT_FUNCTION(1,0); ^ /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:325:63:{325:63-325:86}: error: format argument not an NSString [3] FOUNDATION_EXPORT void NSLogv(NSString *format, va_list args) NS_FORMAT_FUNCTION(1,0); ^~~~~~~~~~~~~~~~~~~~~~~ /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:85:49: note: instantiated from: #define NS_FORMAT_FUNCTION(F,A) __attribute__((format(__NSString__, F, A))) 

这些都是核心库中的错误,所以在Xcode中包含库可能会出错。 我设法将罪魁祸首缩小到SSZipArchive使用的minizip库(如果我删除了这个库,错误消失了,编译器就像它应该运行一样),但是我非常难以理解为什么这会导致编译器有这么多问题。

我经历了很多的头痛之后,发现了什么问题。 原来是_Prefix.pch。 我完全看了一下,结果发现我有下面这行:

 #import "someclass.h" 

这个类被加载到minizip库的.c文件中,导致Objective-C头文件被包含在.c文件中,这是XCode不喜欢的东西。 将这些语句包装在#ifdef语句中修复了这个问题:

 #ifdef __OBJC__ #import "someclass.h" #endif 

请参阅下面的链接,这两个iphone以及Mac应用程序的作品。 从应用程序存档和取消归档