[英]“Symbol not found” Crash while Testing Mac OS X 10.7-specific code on 10.6
我有一个应用程序,它使用仅在10.7 Lion中找到的几个类。 (例如,NSFileCoordinator。)
当我的应用程序启动时,它可以使用NSFileCoordinator来协调对数据存储的读访问。 (我保存到XML。)
该应用程序在10.7 Lion下正常启动,但在10.6 Snow Leopard下启动时,应用程序崩溃并显示如下所示的错误。
我的基本SDK设置为10.7,部署目标是10.6。 据我所知,我的所有代码都被正确包装,如:
if (NSClassFromString(@"NSFileCoordinator") != nil) {
// Do something the 10.7 way
} else {
// Do something the 10.6 way
}
但出于某种原因,我仍然看到了崩溃。 由于Base SDK是10.7,我无法在10.6中的Xcode下运行应用程序,这使得调试变得困难。 其他消息正在记录到控制台:
9/1/11 9:48:03 AM [0x0-0x18018].com.me.myapp[173] dyld: Symbol not found: _OBJC_CLASS_$_NSFileCoordinator
9/1/11 9:48:03 AM [0x0-0x18018].com.me.myapp[173] Referenced from: /Volumes/Macintosh HD/Users/Me/Library/Developer/Xcode/DerivedData/Mac-ebdxgdvcqfnptlftkreamrwdxetd/Build/Products/Debug/myapp.app/Contents/MacOS/myapp
9/1/11 9:48:03 AM [0x0-0x18018].com.me.myapp[173] Expected in: /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
9/1/11 9:48:03 AM [0x0-0x18018].com.me.myapp[173] in /Volumes/Macintosh HD/Users/Me/Library/Developer/Xcode/DerivedData/Mac-ebdxgdvcqfnptlftkreamrwdxetd/Build/Products/Debug/myapp.app/Contents/MacOS/myapp
崩溃报告:
Process: myapp [137]
Path: /Volumes/Macintosh HD/Users/Me/Library/Developer/Xcode/DerivedData/Mac-ebdxgdvcqfnptlftkreamrwdxetd/Build/Products/Debug/myapp.app/Contents/MacOS/myapp
Identifier: com.me.myapp
Version: 1.5.0 (150)
Code Type: X86-64 (Native)
Parent Process: launchd [92]
Date/Time: 2011-09-01 09:40:32.591 -0400
OS Version: Mac OS X 10.6.8 (10K549)
Report Version: 6
Interval Since Last Report: 2009 sec
Crashes Since Last Report: 5
Per-App Crashes Since Last Report: 5
Anonymous UUID: 32784C79-0821-471E-BCBF-BE5874774075
Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000
Crashed Thread: 0
Dyld Error Message:
Symbol not found: _OBJC_CLASS_$_NSFileCoordinator
Referenced from: /Volumes/Macintosh HD/Users/Me/Library/Developer/Xcode/DerivedData/Mac-ebdxgdvcqfnptlftkreamrwdxetd/Build/Products/Debug/myapp.app/Contents/MacOS/myapp
Expected in: /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
in /Volumes/Macintosh HD/Users/Me/Library/Developer/Xcode/DerivedData/Mac-ebdxgdvcqfnptlftkreamrwdxetd/Build/Products/Debug/myapp.app/Contents/MacOS/myapp
您需要弱化链接框架,因此这些未解析的符号在加载时不会出错。
@Anomie有正确的答案,但让我进一步扩展它。 以下是命令行工具的代码,与您正在执行的操作类似:
int main (int argc, const char * argv[])
{
@autoreleasepool {
if (NSClassFromString(@"NSFileCoordinator")) {
NSLog(@"Version >= 10.7");
} else {
NSLog(@"Version < 10.7");
}
}
return 0;
}
该程序链接到的唯一框架是Foundation。 但是为了弱化链接到此框架,您必须执行以下操作:
转到“构建设置”并添加以下“其他链接标志”:
-weak_framework基金会
重建您的项目。 我已经在OS X 10.6和10.7上进行了测试,并且都没有崩溃并且都产生了预期的输出。 希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.