Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

iOS: every snapshot command fails with "escaped its cumulative clip" while a system alert is shown at the largest Dynamic Type size

クローズ
#3,801 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
55/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
ios, typescript
領域
mobile, testing

調査の方向性

Read SnapshotPresentationInvariant.swift in the snapshot presentation source linked from the issue, then inspect validateRegular and the failing node’s cumulative clip handling. Reproduce with the largest Dynamic Type size and an App Tracking Transparency alert on either listed simulator. Done when snapshot succeeds and the visible alert button can be found and tapped without breaking the reported wait/is behavior.

索引モデルが issue の本文から書いたものです。

説明

bug

Problem

On an iOS simulator with the text size set to the largest accessibility size (accessibility-extra-extra-extra-large), every command that takes a snapshot fails while the App Tracking Transparency prompt is on screen:

Error (COMMAND_FAILED): regular iOS snapshot node escaped its cumulative clip

At that size the prompt's title no longer fits and iOS lets its content extend past the alert's frame. The regular-snapshot clip invariant rejects the whole capture, so the prompt cannot be answered by text or ref (find text "Ask App Not to Track" click), and wait/is on the app underneath fail too. The error's own hint says: "This is a runner presentation bug: report it with the failing command and the app under test."

Environment

  • agent-device 0.21.28 (invariant unchanged on main at 63f762e and in 0.21.29-nightly.20261018.74)
  • macOS 26.6.2, Xcode 27.1 (27A9275), Node 24.22.0
  • Simulators: iPhone SE (3rd generation) on iOS 17.5; iPhone 17e on iOS 27.0; English locale
  • Target app: an Expo development build that calls requestTrackingAuthorization after its first screen

Reproduction

xcrun simctl ui "$SIM" content_size accessibility-extra-extra-extra-large
xcrun simctl privacy "$SIM" reset all <bundle id>         # ATT status back to notDetermined
npx agent-device open <bundle id> --platform ios --udid "$SIM" --relaunch
npx agent-device alert wait 10000                          # exit 0, prints the prompt title
npx agent-device snapshot -i                               # exit 1, COMMAND_FAILED
npx agent-device find text "Ask App Not to Track" click    # exit 1, COMMAND_FAILED
Text size iOS 17.5 (iPhone SE 3rd gen) iOS 27.0 (iPhone 17e)
large … accessibility-extra-extra-large (6 sizes) snapshot -i exit 0, 1 run each exit 0, 1 run each
accessibility-extra-extra-extra-large exit 1, 3 of 3 exit 1, 2 of 2

Commands that don't snapshot keep working at the largest size: alert wait, alert get and alert accept (exit 0, tracking authorized), and press x y on the "Ask App Not to Track" button at coordinates read from screenshot (tracking denied, then wait on the app succeeds).

Failure details (--json):

  • iOS 17.5: "reason": "regular-node-outside-cumulative-clip", node 3, frame {x: 48, y: 33, w: 279, h: 621.5} within clip {x: 32, y: 18, w: 311, h: 631}: it overflows the bottom of the clip by 5.5 pt.
  • iOS 27.0: frame {x: 48, y: 664.7, w: 294, h: 290.7} within clip {x: 18, y: 70.7, w: 354, h: 716}: it starts above the clip's bottom edge (786.7) and ends at 955.

Cause

SnapshotPresentationInvariant.validateRegular (source), introduced in #1946, throws regularNodeOutsideCumulativeClip as soon as one node is not contained in its ancestors' clip. UIKit itself lets a system alert's content exceed its frame at large Dynamic Type sizes, so one overflowing node fails the whole capture.

Expected

The snapshot succeeds: the overflowing node is clipped to its ancestor (or dropped if fully outside), and find text "Ask App Not to Track" click taps the visible button.

主要言語
TypeScript
スター
5.1k
フォーク
339
平均マージ
12時間 23分
マージ済み PR(30日)
730

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

callstack/agent-device のほかの issue

callstack/agent-device の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。