site icon indicating copy to clipboard operation
site copied to clipboard

iOS 17.0 でクラッシュする

Open sassa7777 opened this issue 6 months ago • 5 comments

iOS17.0 Webkit 605.1.15の環境でサイトを開くと繰り返し問題が発生しました。と表示され、開くことができません。

sassa7777 avatar Jun 26 '25 00:06 sassa7777

報告ありがとうございます。 私はiOS 18.5の環境ですが、Safari、Chromeで問題なくページが表示されました。

以前まではページを開けていましたか? ここ数ヶ月はJavaScriptの依存ライブラリアップデートもとくにしていないので、生成されるHTMLとしては安定してるはずではあるのですが…。

ほかの方で、同様の問題が発生してる人がいたら教えてください。

faithandbrave avatar Jun 26 '25 00:06 faithandbrave

少し前(数ヶ月ぐらい?)は開けていましたが、ここしばらく開けていません。

sassa7777 avatar Jun 26 '25 03:06 sassa7777

環境がないので、ひとまずChatGPTに聞いてみました。


iOS17(WebKit 605.1.15)環境で https://cpprefjp.github.io/lang/cpp26.html を閲覧中に「問題が発生しました」と繰り返し表示されクラッシュする現象ですが、これは iOS17のWebKit(特に 17.2~17.5)における既知のバグ に該当する可能性が高いです。


🔍 原因(iOS17 固有の WebKitバグ)

1. WebKit内部のSIGABRTクラッシュ

  • 特定のイベント処理や安全性チェックのタイミングで ProcessThrottler が無効な状態となり、強制終了(abort)されるバグが報告されています (developer.apple.com)。

  • iOS 17 系(17.0~17.1)や17.2.x〜17.5でも断続的に発生しているとの報告があります 。

2. malloc-scribble など診断機能との干渉

  • Xcodeでの実機デバッグ実行中にのみ発生し(リリースビルドでは起こらない)、Malloc Scribble や診断オプションとの組み合わせに起因するケースがあります (stackoverflow.com)。

3. 最新環境でも再現報告あり

  • iOS17.2以降のバージョンでも、Safariや他のWebKitベースブラウザでページ読み込み不可のバグが続いている事例もredditなどで見られます (reddit.com)。


🛠 解決策/回避策

✅ A. Xcode実機デバッグ時の対処(Malloc Scribble)

  • Xcodeのスキーム設定でさらに以下の項目を 無効化してください:

    • Edit Scheme → Run → Diagnostics → “Malloc Scribble” をOFFにする (stackoverflow.com)。

  • これにより、デバッグ中のクラッシュが回避されたという報告があります。

✅ B. リリースビルドではクラッシュしない場合も

  • 実機でアプリ単独起動してもクラッシュしないようであれば、READMEや開発環境でのみ使う診断モードが原因の可能性が高いです。

✅ C. WebKitの修正待ち or 回避パッチ適用

  • Apple は複数のWebKit修正パッチ(例:PR #24778)を進めていますが、iOSで広く適用されるには時間がかかる場合があります 。

  • iOS 17.6以降や18系へのアップデートで根本修正が含まれる可能性があります。


📝 まとめ

現象 回避策・確認事項
デバッガ接続中に WebKit が頻繁にクラッシュ Xcode の Malloc Scribble を無効化(Edit Scheme)
リリースビルドでは問題がない 開発環境のみの診断設定による副作用の可能性大
リリースビルドでも問題が起きる場合 OSアップデート(iOS17.6以降)待ち、またはWebKit修正パッチを待機

faithandbrave avatar Jun 26 '25 05:06 faithandbrave

https://www.reddit.com/r/iphone/comments/1eandas/safari_a_problem_repeatedly_occured_issue/

ここで 3~6 ヶ月前から出るようになったという人たちがいて

u/miekwave • 3mo ago

I turned off “Sifari settings > Prevent site tracking”worked for me when I had same issue trying checkout on some websites on Sifari. I had to turn it off to finish checkout then turn prevent site tracking back on after

「設定」→「Safari」→「プライバシーとセキュリティ → サイト越えトラッキングを防ぐ」を「オフ」にしたら直ったという人がいるみたいです。もっと前には

RajaKuman OP • 1y ago

Just in case someone stumbled upon this thread with the same problem, I traced my steps and realized that my “Block All Cookie” toggle was on. Once I turned it off, life is good.

Settings - Safari - Advanced - Block All Cookies

「設定」→「Safari」→「詳細」→「すべての Cookie をブロック」を「オフ」にしたら直ったという人もいるみたいです。

akinomyoga avatar Jun 26 '25 08:06 akinomyoga

どちらもだめでした。

sassa7777 avatar Jun 26 '25 14:06 sassa7777

こちらはボランティアコミュニティですので、すいませんが手厚いサポートは期待しないでおいてください。 だれかが善意でがんばって調べてくれることもあるかもしれませんが、最新OSで調査しやすい状況というわけでもないので、労力の提供には限界があることをご承知おきください。

faithandbrave avatar Jun 26 '25 14:06 faithandbrave

Claude Codeに聞いてみました。

⏺ iOS17 Safariエラーの原因分析結果

  以下の問題が「A problem repeatedly occurred」エラーを引き起こしている可能性があります:

  主な問題点

  1. 無限ループ・メモリリーク - kunai/js/kunai/yata.js:209-230
    - autoRefreshメソッドでsetIntervalが適切にクリアされない可能性
  2. 大量のDOM操作 - kunai/js/kunai/treeview.js:362-403, 57-59
    - Promise.allで大量の要素を一度に生成しメモリ不足を引き起こす可能性
  3. CSS問題
    - kunai/css/layout.css:120: -webkit-overflow-scrolling: touchはiOS Safariで描画問題を起こしやすい
    - kunai/css/sidebar.css:211: position: stickyがiOS Safariで正しく動作しない場合がある
  4. file://プロトコル処理 - kunai/js/kunai.js:155-167
    - iOS Safariのセキュリティ制限により予期しない動作の可能性
  5. MathJax v3 - cpprefjp/templates/content.html:133
    - 大量の数式レンダリング時にメモリ問題を引き起こす可能性

  特に大量のDOM操作とメモリ管理の問題が、モバイルデバイスでクラッシュを引き起こしている可能性が高いです。

faithandbrave avatar Jun 27 '25 05:06 faithandbrave

まちがってmasterブランチで直接修正してしまいましたが、Claude Codeで指摘されたところを一通り直してデプロイしてみました。 私の環境では、macOS Sequoia 15.5のChrome、Safari、iOS 18.5のChrome、Safariで問題なく表示されました。

これで試してみていただけますでしょうか? これでうまくいかない場合は、iOS Safariのデバッグコンソールを見ていただけると助かります。

faithandbrave avatar Jun 27 '25 06:06 faithandbrave

MathJaxの指摘はおそらく関係ないので、そのままです (そんなに大量の数式は使ってないですし、使ってないページではMathJaxはオフになってるので)

faithandbrave avatar Jun 27 '25 06:06 faithandbrave

ブラウザのキャッシュが残っている場合があるので、キャッシュをクリアするか、普段見てないページで試してみていただけるとよいかと思います

faithandbrave avatar Jun 27 '25 06:06 faithandbrave

Windows 11/Chrome, Edge, Android/Chromeでも表示に問題ないですね。 (なんとなくサイト表示が軽くなった?単にプラシーボ効果かもしれません。)

ページは常に増えつづけますから、kunai/js/kunai/treeview.js 処理がどんどん重くなったせいなのかもですね。

yohhoy avatar Jun 27 '25 07:06 yohhoy

Image

web開発はしたことがないので使い方がわからないのですが、なにか役に立つでしょうか? 問題が起きました。著表示された時点での写真です

sassa7777 avatar Jun 29 '25 11:06 sassa7777

ソースではなく、コンソールタブの内容を貼り付けていただけますでしょうか。 また、ここまでに解決方法として提示されたものを、この段階でなにを実施した結果としてこうなっているのかを明記してください (Safariの設定、キャッシュクリアなど)。

faithandbrave avatar Jun 29 '25 12:06 faithandbrave

Image

何も表示されませんでした。Safariの設定変更は試しました。キャッシュがクリアできないので、別のブラウザ(Chrome, Firefox, Orion)も試しましたが、どれもダメでした。

sassa7777 avatar Jun 29 '25 12:06 sassa7777

確認ありがとうございます。 別のブラウザでもダメということは、Safariの問題ではなく、ブラウザ間で共有されているWebKitの問題なのだと思います。

可能ならOSのバージョンアップをお願いしたいところではありますが、私もiOS 18に上げるまではiOS 17を使っていて、多くの方もそうだったと思いますが問題は報告されていませんでした。 ということは、デバイスに依存した問題の可能性がありますね。 デバイスの依存した問題だとすると、考えられそうなのはメモリ使用量とかですかね。

お試しいただいたcmath/absのページは数式 (MathJax) を使っているので、数式を使っていないstd::vectorstd::shared_ptrなどのページも試してみていただきたいです。

それとお使いのiOSデバイスがなにかも可能なら教えていただきたいです。

faithandbrave avatar Jun 29 '25 13:06 faithandbrave

vector, shared_ptrともに他と同じでした。使っているデバイスはiPhone SE 第2世代です

sassa7777 avatar Jun 29 '25 13:06 sassa7777

iPhone SE 第2世代ではRAMが少ないために、CSSのbox-shadowなどでGPUメモリ使用量を多用するとクラッシュすることがあるそうでした。 またClaude Codeに聞きながら修正をしてデプロイしてみました。

この解決方法を元に、以下を修正
https://stackoverflow.com/questions/76127296/debugging-a-ios-safari-crash-a-problem-repeatedly-occurred

1. 大きな要素のbox-shadow無効化
    - kunai/css/kunai/site/layout.css:
      メインコンテナとヘッダーの大きなbox-shadowを無効化
    - GPUメモリを大量に消費する原因となる大きな要素への影の適用を削除
2. tooltipの最適化
    - kunai/css/kunai/site/tooltip.css:
        - box-shadowを削除し、代わりにborderで視覚効果を維持
    - 複雑なtransitionを簡略化(opacity以外のz-index transitionを削除)
3. サイドバーの最適化
    - kunai/css/kunai/site/sidebar.css: inset box-shadowをborderに置き換え

効果

これらの修正により、以下の効果が期待できます:

- GPUメモリ使用量の大幅削減 - 特に大きな要素へのbox-shadowとopacity/transitionの組み合わせを削除
- コンポジットレイヤー数の削減 - 不要なGPUレイヤーの生成を抑制
- iOS Safariでのパフォーマンス向上
- メモリ使用量の削減によりクラッシュを防止

Stack Overflowの投稿と同様に、視覚的な影響を最小限に抑えながら、GPUメモリ使用量を大幅に削減できました。

こちらもブラウザのキャッシュをして試してみてください。 キャッシュクリアの方法は、以下に記載があります。

Cookie とキャッシュを消去し、履歴は残す 「設定」>「アプリ」>「Safari」>「詳細」>「Web サイトデータ」の順に選択します。

「全 Web サイトデータを削除」をタップします。

faithandbrave avatar Jun 29 '25 14:06 faithandbrave

iPadOS 16.6 (20G75) でも発生しました。 ローカルでサーバーを立てて再現できたのでこちらで最小コードを見つけてみます。 Image

planaria avatar Aug 12 '25 09:08 planaria

ありがとうございます!大変助かります!

OS再起動で直る可能性がある、という情報をいただきました。 クラッシュする現象が起きた方は、そちらも試していただきたいです。

faithandbrave avatar Aug 12 '25 09:08 faithandbrave

トップページでクラッシュするようですと、サンプルコードのWandbox連携や数式がないところなので、原因として考えられるのはサイドバーか検索バーですかね…

faithandbrave avatar Aug 12 '25 09:08 faithandbrave

今のところ kunai-stage-3.css が怪しいです。 以下のコードで再現しました。

Image

planaria avatar Aug 12 '25 09:08 planaria

kunai-stage-3.css を削っていくとエラーにならなくなるのですが、 特定の行を削るとエラーにならなくなるというより、 量が少なくなるとエラーにならなくなる、という動作に見えます。

以下のような複雑な行が多く含まれているので、こういった行が一定数を超えるとエラーになるのかもしれません。

`:is(:is(:is(:is(.kunai-sidebar>.tree.v2) .kunai-branch)>ul.branch)>li):not(.top):not(.headers):not(.header):not(.category):not(.module):not(.lang):not(.classes):not(.members):not(.class):not(.article):hover {

planaria avatar Aug 12 '25 09:08 planaria

ギリギリまで削った kunai-stage-3.css を添付しました。 kunai-stage-3.zip

このファイルを使うとエラーになるのですが、 このファイルから先頭のルールを削除するとエラーにならなくなり、 このファイルから末尾のルールを削除してもエラーにならなくなります。

planaria avatar Aug 12 '25 09:08 planaria

調査ありがとうございます。 CSSのビルドの問題かもしれませんね。

フロントエンドのソースコードはこちらですが、CSSのビルドオプションで最適化オプションをいじれば直るかもしれません https://github.com/cpprefjp/kunai

faithandbrave avatar Aug 12 '25 10:08 faithandbrave

Claude Codeに聞いたところ、以下の設定を推奨されました。

iOS Safariのクラッシュ対策として、以下の設定変更を推奨します:

  postcss.config.js:50 でcssnanoオプションを調整:
  cssnano: {
    preset: ['default', {
      // 複雑な最適化を無効化
      calc: false,
      zindex: false,
      mergeRules: false,
      minifyGradients: false,
      // セレクタの深さを制限
      minifySelectors: false,
      // 既存設定を維持
      autoprefixer: false,
      reduceIdents: false
    }]
  }

これでローカルで動作確認し、問題なさそうであればデプロイしてみます

faithandbrave avatar Aug 12 '25 10:08 faithandbrave

修正を適用し、デプロイしてみましたー。 動作確認していただけると助かります! https://github.com/cpprefjp/kunai/commit/0fbeba77cf37acbd69a2d4ec01c5deed5762e3de

faithandbrave avatar Aug 12 '25 10:08 faithandbrave

こちらで試してみましたが同じエラーが出ますね。 CSS の複雑さもそんなに変わっていないようです。

一例:

:is(:is(:is(:is(.kunai-sidebar > .tree.v2) .kunai-branch) > ul.branch) > li):not(.top):not(.headers):not(.header):not(.category):not(.module):not(.lang):not(.classes):not(.members):not(.class):not(.article):hover {
    background-color: rgb(from #f0f0fd r g b/.9)
}

planaria avatar Aug 12 '25 11:08 planaria

:is:notのネストが深くならないよう修正してみました。 こちらで試してみていただけると助かります!

https://github.com/cpprefjp/kunai/commit/e0999c1726db73a3081485043947f8552c7cc28d

faithandbrave avatar Aug 12 '25 12:08 faithandbrave

まだエラーが発生しますね... 深さの問題ではなかったのかもしれません。

planaria avatar Aug 12 '25 16:08 planaria

いろいろ編集すると、小さい css でもエラーが発生するケースを作れました。 どちらか一方のルールを削除するとエラーは解消されます。

.test {
  color: hsl(from hsl(from color-mix(in srgb, #2a6496, white 15%) h calc(s + 10%) l) h calc(s - 20%) l);
}

.test {
  color: hsl(from color-mix(in srgb, #2a6496, white 15%) h calc(s + 10%) l);
}

calc が複数適用されることが問題...?

planaria avatar Aug 12 '25 16:08 planaria