我创建了一个使用ZXing条形码扫描库的iPhone项目。我使用CocoaPods添加了ZXing,当我在我的系统(Mountain Lion with Xcode 4.5(4G182))上编译它时,它工作得很好。但是,当我将其传递给负责生成已签名的企业分发ipa的人员时,根据我的理解,他也使用相同版本的Xcode,他在编译时看到以下解析错误:
Parse Issue
Expected unqualified-id in file included from /The/Absolute/Path/to/Pods/ZXing/objc/src/ZXing/ZXBinarizer.mm
突出显示的行是:
#import <ZXing/ZXBinarizer.h>
^
我能够通过WebEx查看他的系统,并检查了标题搜索路径,显然通过CocoaPods配置的值确实解析为文件的实际位置。
当我点击问题导航器中的“Parse Issue”行时,它只显示:
../../ZXing/objc/src/ZXing/ZXBinarizer.h
^
我在网上搜索了相当多的解决方案,我看到很多引用“预期的不合格ID”,但大多数是由于代码格式错误。
关于Xcode还有很多我不理解的事情,所以我希望有人会告诉我,我忽略了一些简单的事情。
答案 0 :(得分:0)
发布指向正在编译的确切代码的链接会有所帮助。
您可以使用clang -E
查看预处理后的代码(扩展了所有#imports),然后diff
系统上预处理的输出与同一命令的输出相对应你的同事的系统。
我确实看到了
http://code.google.com/p/zxing/source/browse/trunk/objc/src/ZXing/ZXBinarizer.h
他们指的是NSObject
而没有#importing <Foundation/Foundation.h>
。这是一个坏主意,但它可能不是你的实际问题。 (如果它是罪魁祸首,我会期待一个不同的错误信息。)
您是否100%确定您的同事正在将ZXBinarizer.mm编译为Objective-C ++,而不是常规C ++?
您是否100%确定Xcode没有为您提供错误的任何特定文件和行信息?如果Xcode真的只是指向#import
行,那么你可以在该行之前和之后发布10行,并且该文件的前10行是#imported吗?
答案 1 :(得分:0)
我最终不得不恢复使用CocoaPods进行依赖关系管理,只需手动包含项目。既然问题发生在别人的机器上,但我自己工作得很好,我无法确定真正的原因。在我将ZXing直接包含在我的项目中后,他能够编译它。
答案 2 :(得分:0)
smcmahon ,我在使用CocoaPods构建iOS项目并看到那些奇怪的错误时遇到了类似的问题,并且能够找出问题所在。确保CocoaPods创建的符号链接(如ZXing/ZXBinarizer.h
)确实是符号链接,而不仅仅是包含文件路径的常规文本文件。
我的博客中有一个更详细的解释:http://www.egeek.me/2013/01/26/note-about-building-cocoapods-powered-ios-projects/
希望这会有所帮助。