Xcode4.4.1を使用してOSX10.7.4でコンパイルしているプロジェクトがあります。
Base SDKSDKROOTmacosx10.7を使用しています展開ターゲットMACOSX_DEPLOYMENT_TARGET10.6を設定しました
Snow Leopardで最近のビルドをテストしたところ、クラッシュしました。Xcode 4.2および4.3を使用した以前のビルドは機能し、Xcodeバージョン3.2.6を使用してSnowLeopardでコンパイルできます。
他の誰かがこの経験をしたことがありますか、またはそれを解決するために私が何ができるかをもっとよく知っていますか?
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
PSTimeMachineバックアップからXcode4.2.1を復元したところ、ビルドはSnowLeopardで機能します
Mountain Lionに「アップグレード」しました。これにより、Xcode4.2.1を実行できなくなります。(これにより、OSX10.8とXcode4.4 SDK、およびコマンドラインツールも削除されたようです:-()。これにより、貴重なコンパイラだけを使用することができなくなりました。
クラッシュが発生した場所をフォローアップしようとしました。これは、クラスの1つで次のように定義されたsetNodeIconの呼び出しにあるように見えました。
@property (copy) NSImage *nodeIcon;
最終的にはARCに変換する必要があることはわかっていますが、まだこれに着手することには消極的でした。変換は簡単ではなく、必要なすべての変更(一度に1つのファイル)、特にフリーダイヤルブリッジの変更を理解しているかどうかはわかりません。
結果の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