2011年1月7日金曜日

Mac App Storeで買ったiPhoto'11が起動しない

Mac App Storeで購入したiPhoto'11が起動しないという不具合に遭遇したので顛末を記載しておく。

状況


iPhotoが起動と同時にクラッシュする。クラッシュログは以下のとおり。
Process:         iPhoto [1675]
Path:            /Applications/iPhoto.app/Contents/MacOS/iPhoto
Identifier:      com.apple.iPhoto
Version:         9.1.1 (9.1.1)
Build Info:      iPhotoProject-5310000~5
App Item ID:     408981381
App External ID: 3231463
Code Type:       X86 (Native)
Parent Process:  launchd [667]

Date/Time:       2011-01-07 02:38:50.177 +0900
OS Version:      Mac OS X 10.6.6 (10J567)
Report Version:  6

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000000000000
Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
0   com.apple.CoreFoundation            0x90c51ec0 CFStringGetLength + 80
1   com.apple.CoreFoundation            0x90c51cce CFURLCreateWithFileSystemPath + 30
2   com.apple.prokit                    0x017ba5b1 +[NSProFont registerProUIFont] + 290
3   com.apple.prokit                    0x017b9a02 +[NSProFont initialize] + 67
4   libobjc.A.dylib                     0x96634510 _class_initialize + 380
5   libobjc.A.dylib                     0x9663b972 prepareForMethodLookup + 85
6   libobjc.A.dylib                     0x9663cc17 lookUpMethod + 86
7   libobjc.A.dylib                     0x96634367 _class_lookupMethodAndLoadCache + 40
8   libobjc.A.dylib                     0x96633f13 objc_msgSend + 83
9   com.apple.iLifeKit                  0x016f8ec3 +[iLifeKit install] + 131
10  com.apple.iPhoto                    0x00003707 0x1000 + 9991
11  com.apple.iPhoto                    0x00003275 0x1000 + 8821
/var/log/system.logには以下のようなメッセージが表示されている。
imac iPhoto[1322]: System font path not found in bundle at path: /System/Library/PrivateFrameworks/ProKit.framework

英語的に何か間違っているような気がするが気にしない。

原因推定と暫定対策


ProKitフレームワークがフォントを見つけ切れないのではないかと推測。
具体的にどのフォントなのかは不明だが、さしあたりProKit.frameworkフォルダに含まれているHelveticaNeueUI.ttcを/System/Library/PrivateFrameworks/ProKit.frameworkにコピーしてみたところ無事起動した。

根本対策


上記対策で起動はするようになったのだが、どうも解せない。ProKitはMacOSX 10.6.6 updateに含まれているが、インストールに不備があってこのような事態になっているのではないかとの疑念が頭から離れない。

そこでProKitUpdate6.0.1.dmgを入手、unpkgで展開してMacOSX 10.6.6 Updateと比較してみたところ、明らかな差異を発見できた。 

ProKitUpdate6.0.1のProKit.framework/ 以下でlsを実行した場合。
lrwxr-xr-x  1 masahito  staff   23  1  7 19:12 ProKit@ -> Versions/Current/ProKit
-r--r--r--  1 masahito  staff  405  1  7 19:12 ProKitVersion.plist
lrwxr-xr-x  1 masahito  staff   26  1  7 19:12 Resources@ -> Versions/Current/Resources
drwxr-xr-x  4 masahito  staff  136  1  7 19:12 Versions/

MacOS X 10.6.6 updateのProKit.framework/ 以下でlsを実行した場合。
drwxr-xr-x  3 masahito  staff  102  1  7 19:11 Versions/

要するにシンボリックリンクが張られていないのだ。ProKitUpdate6.0.1同様にシンボリックリンクを貼り直したところ、無事起動した。

これまで一度もProKitをインストールしたことがないMacでMacOS X 10.6.6 updateを適用した場合、iPhoto'11が動かない可能性があるようである。

2011/1/10 追記

MacOS X 10.6.6へのアップデートに、ソフトウェアアップデートを使用せずMac OS X Server v10.6.6 統合アップデートを使用すると、この問題は出ないようだ。