実機特有バグ? 現在実機でLoading画面から抜け出せない問題対策
Description
代表より
現在実機でLoading画面から抜け出せない問題が発生しています。
バトル開始で発生するのでご確認お願いします
ーーー 以下 にて対応しました。レビュー マージをお願いします。
Comments (9)
実機で出ていなかったログを mac と iPhone Safari WebInspector を使ってなんとか出せるようにした。
Origin capacitor://app is not allowed by Access-Control-Allow-Origin. Status code: 200
Failed to load resource: capacitor://not_allowed.png (CORS エラー)
Fetch API cannot load capacitor://not_allowed.png due to access control checks.
Unhandled Promise Rejection: Error: [Loader.load] Failed to load capacitor://not_allowed.png.
TypeError: Load failed
index-X-Q29Rzs.js:4029:39034
- どこかのコードが
capacitor://not_allowed.pngという URL の画像を fetch しようとしている - iOS の WKWebView が CORS で拒否
- Loader.load() が reject、その Promise を catch していない
- その await が永久に未解決のまま残り、Loading 状態が解除されない ← これが INS-749 の正体っぽい
ー
- ファイル
public/not_allowed.pngは 存在する(apps/client/public/not_allowed.png, 6221 bytes) - preload 設定は
src: "/not_allowed.png"(preload.ts:249)— 先頭スラッシュ - ブラウザでは
/not_allowed.pngがhttp://localhost:.../not_allowed.pngに解決されて成功 - iOS Capacitor では、エラーログ上の URL が
capacitor://not_allowed.pngに化けている(本来capacitor://app/not_allowed.pngであるべき。host (app) が欠落)
PixiJS / Capacitor の URL 解決ロジックが capacitor:// scheme + 先頭スラッシュ URL の組合せで host を落としていて、結果存在しない URL を fetch → CORS で弾かれ → unhandled promise rejection → preload が永久に終わらない → Loading 状態解除されない?
Battle.tsx:1082 (staticAssets: BATTLE_STATIC_ASSETS)
→ preloadAssets()
→ Assets.loadBundle() ← preload.ts:165
→ not_allowed.png のロード失敗で reject
→ caller (usePagePreloader) が握り潰し or isLoading 解除されず
→ Battle scene の isLoading=true が永久に続く
→ INS-749
BATTLE_STATIC_ASSETS の src: "/not_allowed.png"(先頭スラッシュ)が、iOS Capacitor の capacitor:// scheme と組み合わさったときに URL host が落ちて capacitor://not_allowed.png になり、CORS で弾かれる。Pixi の Assets.loadBundle がそれで reject、Battle の preload 全体が止まる
ブラウザでは http://...:5173/ への絶対パス解決で正しく動くため見つかっていなかったバグ
URL 変換スキーム については、論理を精査した結果こちらの方が根本解決となるので、そちらに委ねる
https://github.com/instansys/ultemist/pull/585
永遠ローディングとなってしまう論理は、こちらでの修正とする。
レビュー マージ依頼をさせていただきました。