Xcode4 Xcode 4.4.1雪豹上的构建崩溃

Xcode4 Xcode 4.4.1雪豹上的构建崩溃,xcode4,Xcode4,我有一个在OSX10.7.4下使用Xcode 4.4.1编译的项目 我使用的是基本SDK SDKROOT macosx10.7 我已将部署目标设置为MACOSX\u部署\u目标10.6 我在雪豹上测试了一个最新的构建,它崩溃了。 以前使用Xcode 4.2和4.3构建的版本确实有效,我可以使用Xcode版本3.2.6在雪豹上编译 有没有其他人有过这种经历,或者更清楚我能做些什么来解决它 OS Version: Mac OS X 10.6.8 (10K549) Report Versio

我有一个在OSX10.7.4下使用Xcode 4.4.1编译的项目

我使用的是基本SDK SDKROOT macosx10.7 我已将部署目标设置为MACOSX\u部署\u目标10.6

我在雪豹上测试了一个最新的构建,它崩溃了。 以前使用Xcode 4.2和4.3构建的版本确实有效,我可以使用Xcode版本3.2.6在雪豹上编译

有没有其他人有过这种经历,或者更清楚我能做些什么来解决它

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,该版本在雪豹上运行

我“升级”到Mountain Lion,这将不允许运行Xcode 4.2.1。 (这似乎也删除了OSX 10.8和Xcode 4.4 SDK以及命令行工具:-()。 这使得仅仅使用珍贵的编译器是不可能的

#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
我试图跟踪崩溃发生的地方,这似乎是在调用setNodeIcon时发生的,在我的一个类中,setNodeIcon被定义为

@property (copy) NSImage *nodeIcon;
我意识到我最终将不得不皈依ARC,但我还不愿意开始这项工作。 转换远不是很简单,我不确定我是否理解所有需要进行的更改(一次一个文件),特别是免费桥接更改

生成的ARC代码似乎在10.6-10.8上运行,但我需要做大量的回归和泄漏测试来确认


更新意见2012-09-18 ARC代码可以工作,但我发现了几个问题(我已经解决了),但还需要做更多的工作

我回到我的GC代码,并将
copy
更改为
assign
。这似乎有效

@property (assign) NSImage *nodeIcon;
只是为了确认一下,我制作了一个独立的应用程序(见下文),它除了复制一个NSImage之外什么也不做。 这也是以同样的方式崩溃的,因此它似乎是编译器中的一个bug

#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
#导入
@接口AppDelegate:NSObject{
NSImage*nodeIcon;
}
@属性(分配)窗口*窗口;
@属性(副本)NSImage*nodeIcon;
@结束
#导入“AppDelegate.h”
@实现AppDelegate
@合成nodecion;
-(无效)ApplicationIDFinishLaunching:(NSNotification*)通知{
NSString*defaultDirectory=NSHomeDirectory();
[self-setNodeIcon:[[NSWorkspace sharedWorkspace]图标文件:默认目录]];
}
@结束

垃圾收集可能是问题所在。苹果正在逐步取消对垃圾收集的支持。我注意到在Xcode 4.4中,启用垃圾收集的构建设置已被删除。我不确定GC是否是问题所在,但我开始调查,显然GC在10.8建议中被弃用,包括GCC_enable_OBJC_GC,这已经是最新版本了这有点像陷阱22。很多人仍然在使用雪豹,我听说它不完全支持ARC。我知道雪豹不支持的一个ARC特性是对对象的弱引用。如果你需要在雪豹中使用弱引用,Mike Ash在github上有一个项目,你应该看看。Xcode有一个重构工具,您可以从“编辑”菜单访问该工具,该菜单将项目转换为ARC。该工具将在转换之前拍摄快照,以便在转换导致问题时返回。