我有一个项目,我正在使用 Xcode 4.4.1 在 OS X 10.7.4 下编译
我正在使用 Base SDK SDKROOT macosx10.7 我已设置部署目标 MACOSX_DEPLOYMENT_TARGET 10.6
我在 Snow Leopard 上测试了最近的构建,但它崩溃了。以前使用 Xcode 4.2 和 4.3 的构建确实有效,我可以使用 Xcode 版本 3.2.6 在 Snow Leopard 上编译
有没有其他人有过这种经历,或者更好地知道我能做些什么来解决它?
OS Version: Mac OS X 10.6.8 (10K549)
Report Version: 6
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000030
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Application Specific Information:
objc[274]: garbage collection is ON
Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 com.apple.AppKit -[NSImage _allocAuxiliaryStorage] + 158
1 com.apple.AppKit -[NSImage copyWithZone:] + 66
2 libobjc.A.dylib objc_setProperty + 82
3 -[TreeViewController(Dirs) outlineView:willDisplayCell:forTableColumn:item:] + 207
PS 刚刚从 TimeMachine 备份中恢复了 Xcode 4.2.1,并且构建在 Snow Leopard 上工作
我“升级”到了 Mountain Lion——它不允许 Xcode 4.2.1 运行。(这似乎也删除了 OSX 10.8 和 Xcode 4.4 SDK 以及命令行工具 :-( )。这使得仅使用宝贵的编译器变得不可能。
我试图跟进崩溃发生的位置,这似乎是在对 setNodeIcon 的调用中,该调用在我的一个类中定义为
@property (copy) NSImage *nodeIcon;
我意识到我最终将不得不转换为 ARC,但还不愿意开始。转换远非简单,我不确定我是否理解我需要进行的所有更改(一次一个文件),特别是免费桥接更改。
生成的 ARC 代码似乎确实适用于 10.6 - 10.8,但我需要进行大量回归和泄漏测试来确认。
更新评论 2012-09-18
ARC 代码有效,但我发现了几个问题(我已经解决了),但还需要做更多的事情。
我回到我的 GC 代码并更改copy
为assign
. 这似乎奏效了。
@property (assign) NSImage *nodeIcon;
只是为了确认我制作了一个独立的应用程序(见下文),它除了复制一个 NSImage 什么都不做。这以同样的方式崩溃,所以它似乎是编译器中的一个错误。
#import <Cocoa/Cocoa.h>
@interface AppDelegate : NSObject <NSApplicationDelegate> {
NSImage *nodeIcon;
}
@property (assign) IBOutlet NSWindow *window;
@property (copy) NSImage *nodeIcon;
@end
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize nodeIcon;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
NSString *defaultDirectory = NSHomeDirectory();
[self setNodeIcon:[[NSWorkspace sharedWorkspace] iconForFile:defaultDirectory]];
}
@end