何度も Web を検索してさまざまなことを試した結果、最新の MonoDevelop で問題なく動作するようになりました。ここには、実際には 2 つの別個の問題があります。1 つ目は、私のテストでは OSX 10.6 以降に影響します (10.5 にはアクセスできません)。2 つ目は、OSX 10.7 以降に影響します。
多くの Silverlight Web サイトは、OSX 10.6 でも webView でクラッシュします。ユーザーエージェントを変更することでクラッシュを修正できます
webBrowser.CustomUserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.13+ (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2";
これで問題が修正されたとは信じがたいですが、修正されたわけではありませんが、これを使用しない useragent 文字列は非常に似ています。
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.57.2 (KHTML, like Gecko)
この修正を行っても、最新の MonoDevelop webView + OSX 10.7 以降の Silverlight = クラッシュします。なんで?Silverlight プラグインには、10.7 以降のヒープ実行セキュリティに関する問題があるようです。MonoDevelop 2.8.8.4 は unix 実行可能ファイルにヒープ実行を防止するフラグを設定しませんでしたが、最新の MonoDevelop は設定します。MonoDevelop から、ld に渡されるパラメーターを変更して -allow_heap_execute を実行する場所に到達できるかどうかはわかりません。ただし、16進エディタを使用して、appbundleのunix実行可能ファイルでフラグを自分で変更できます...
HexFiend を入手して、アプリケーション フォルダに入れました。出力アプリ バンドルのコンテンツを (右クリックして) 表示し、 Contents/MacOS/ を掘り下げます。そこに1つのファイルがあります。HexFiendで開きます。次のようなバイトが表示されます。
CEFAEDFE 07000000 03000000 02000000 13000000 3C080000 85002001
最後の 1 を参照してください。それはノーヒープ実行フラグです。1 を 0 に変更してオフにします。これにより、Silverlight を含むページを示す webView が OSX 10.8 で問題なく実行されるようになりました。
私は、これを行うためのポストビルドステップとして呼び出す小さなモノコンソールアプリを作成することになりました。として呼び出されます
mono "<path-to-console-app-exe>" "<path-to-mac.app-package>"
主な機能は次のとおりです。
public static void Main (string[] args)
{
if (args.Length > 0)
{
if (Directory.Exists(args[0]))
{
string containingFolder = Path.Combine (Path.Combine(args[0], "Contents"), "MacOS");
var files = Directory.GetFiles (containingFolder);
if (files.Length == 1)
{
var bytes = File.ReadAllBytes(files[0]);
byte one = (byte)1;
byte allButOne = (byte)~one;
bytes[27] = (byte)(bytes[27] & allButOne);
File.WriteAllBytes(files[0], bytes);
return;
}
}
}
throw new InvalidOperationException("Failed to allow heap execution");
}
価値のあるものとしては、Mac 上の Silverlight は非常に脆弱な提案のようです。私はそれについて短期的な選択肢はありませんし、あなたもそうではないかもしれませんが、これを理解することで、Silverlight と OSX の更新されたバージョンでさまざまな問題を抱えている人々のあらゆる種類の検索結果にたどり着きました。
これが私の答えに役立つリンクです:
Silverlight と同じスタックで Firefox がクラッシュし、修正時にヒープ保護機能がオフになっていました。
ヒープ実行が許可されているプロセス外で Silverlight プラグインを実行することで問題が解決された、リンクされた Firefox のクラッシュ
ヘッダーのフラグに関する Apple リソース
Appleのドキュメントではなく、ヒープ実行フラグが実際にリストされているChromiumバグ-素晴らしい!
ユーザー エージェント文字列を変更することで修正されたクラッシュについて Connect に報告されたバグ 1
ユーザー エージェント文字列を変更することで修正されたクラッシュについて Connect に報告されたバグ 2