macOS High Sierra/Mojave環境で起動出来ない(1.3.1)
※ なお、MIDITrail 1.2.6は、High Sierra/Mojaveとも正常起動・動作します。 ( #40982 の現象が出る事は確認 )
次の環境で MIDITrail 1.3.1 を起動させたところ、いずれも正常に動作しました。 OSDNからダウンロードしたMIDITrailで試しています。
コード署名無効で落ちていますが、前述の通り再現しないため、調査が難しいです。 次の二つの方法を確認していただけないでしょうか。それぞれアプリをビルドする際の署名の仕方が異なるためです。
OpenGLの初期化処理で、APIを呼び出した時に落ちています。 ダンプによると、VMware Fusion 12の仮想サーバ上でアプリを実行しているように見受けられます。
VMware Fusion 12の仮想サーバ(10.14.6 Mojave)で、MIDITrail 1.3.1を起動したところ、同じエラーが発生することを確認しました。
VMware Fusion固有の問題かもしれないため、仮想サーバでない環境でMIDITrail 1.3.1が起動できるか確認していただけないでしょうか。
なお、仮想サーバ上でもMIDITrail 1.2.6が起動することは確認できました。(ただし画面の描画が一部崩れていました)
MIDITrail 1.3.1の以下対策で追加した処理で落ちているため、1.2.6では落ちないようです。
頂いた情報に基づき再度検証しました。
mks.enableMTLRenderer = “0" mks.enableGLRenderer = “1”
リアルマシン&OSDNダウンロードであれば正常動作する事が確認できました。
ありがとうございます。
App StoreからダウンロードしたMIDITrail 1.3.1を起動させたところ、 High Sierraのみコード署名無効で起動できない。原因は不明。
High Sierra固有の問題と考えられるため、対処なし。
VMware Fusion 12固有の問題と考えられるため、対処なし。
「完了」かつ「直さない」との結論なので今更ですが、VirtualBoxのゲストとしてmacOSを実行している環境でも同じ問題が発生します。MIDITrail 1.3.1または1.3.2を実行するとSIGSEGVが発生して不正終了します。
原因を調査したところ、MTMainView.mm内、-prepareOpenGLでCVDisplayLinkSetCurrentCGDisplayFromOpenGLContext()を呼び出したところで、アドレス0へのアクセスが発生していることが原因でした。pixelFormatがnilになってしまっているようです。pixelFormatがnilになる原因は不明ですが、試しに以下のコードをCVDisplayLinkSetCurrentCGDisplayFromOpenGLContext()コールの直前に追加してみたところ、正常に動作するようになりました。
if (!pixelFormat) { GLint numPixelFormats; CGLPixelFormatAttribute attr[] = { kCGLPFADepthSize, (CGLPixelFormatAttribute)32, (CGLPixelFormatAttribute)0 }; CGLChoosePixelFormat(attr, &pixelFormat, &numPixelFormats); }
何かの参考になればと思い、情報提供をさせていただきます。
tyan0さん、情報提供ありがとうございます。
pixelFormatがnilで返されているとの情報から、ピクセルフォーマット属性を定義する処理を修正したところ、 VMware Fusion 12の仮想サーバ(10.14.6 Mojave)上でMIDITrailが動作しました。 画面も正常に描画されています。
次バージョンで修正しておきます。
変更前 attributes[8] = NSOpenGLPFAAccelerated; //ハードウェアレンダリング attributes[9] = NSOpenGLPFANoRecovery; //リカバリシステム無効 attributes[10] = 0; //終端 変更後 attributes[8] = NSOpenGLPFANoRecovery; //リカバリシステム無効 attributes[9] = 0; //終端 attributes[10] = 0; //終端
早速のお返事ありがとうございます。上記変更にてVirtualBox上のmacOSでも正常動作することを確認いたしました。なお、お気づきとは思いますが、上記変更だけだと下記コードのアンチエイリアスが効かなくなってしまいますね。念のため。
if (rendererParam.isEnableAntialiasing) { attributes[10] = attrbSampleMode; //アンチエイリアシング:サンプルモード attributes[11] = NSOpenGLPFASampleBuffers; //マルチサンプルバッファ attributes[12] = 1; // 設定値 attributes[13] = NSOpenGLPFASamples; //マルチサンプルバッファごとのサンプル数 attributes[14] = rendererParam.sampleNum; // 設定値 attributes[15] = 0; //終端 }
tyan0さん、動作確認ありがとうございます。
アンチエイリアスの設定についても、ご指摘ありがとうございます。修正時に考慮します。
MIDITrail Ver.1.3.3 for macOS で対策しました。
VirtualBox内、Big Sur (ゲスト) にてv1.3.3が正常に動作することを確認いたしました。
対策ありがとうございました。
macOS High Sierra及びMojave環境で、ver 1.3.1が起動出来ない。
Mojave 10.14.6 / MIDITrail 1.3.1 > EXC_BAD_ACCESS (SIGSEGV)
(ダンプは添付ファイルをご覧ください)
旧バージョンOSでの動作について報告するのは心苦しいのですが、Big Sur/iOS14のCoreMIDI動作が2020/11時点では信頼出来ないため、サポートを考慮いただければ大変ありがたいです。