Utakoto — 31가지였던 글자 크기를 열 가지 역할로, 그리고 큰 글자에서 잘리던 버튼과 배지
날 값으로 흩어져 있던 글자 크기 826곳을 10개 역할로 모으고, 고정 높이 컨트롤에만 큰 글자 상한 1.3배를 걸었습니다. 줄 높이를 크기에서 떼어 테스트로 지키게 한 이유와, 빛 그림자를 화면당 하나로 줄인 판단을 정리합니다.
혼자 앱 다섯 개를 만들고 운영하는 개발자의 개발일지.
매일 한 앱, 한 가지 변경 — 왜 그렇게 했는지까지.
날 값으로 흩어져 있던 글자 크기 826곳을 10개 역할로 모으고, 고정 높이 컨트롤에만 큰 글자 상한 1.3배를 걸었습니다. 줄 높이를 크기에서 떼어 테스트로 지키게 한 이유와, 빛 그림자를 화면당 하나로 줄인 판단을 정리합니다.
가나를 못 읽으면 따라 말할 수 없던 AI 대화 추천 답에 가사와 같은 규칙의 한글 발음과 보내지 않는 스피커 버튼을 붙였습니다. 같은 날 곡 요청 선정이 주 2회로 바뀌어, 요일을 앱이 아니라 서버 시각에서 읽게 고쳤습니다.
어제 위쪽 테두리를 지운 미리보기 시트가 실기기에서 여전히 각져 보였던 원인은 시트 윗변에서 끝나던 막이었습니다. 막을 화면 전체로 넓히고, 아래로 끌어 닫는 공통 훅을 바텀 시트 16곳에 붙여 같은 날 OTA 로 냈습니다.
곡 탭 전체 목록에 곡·아티스트 전환과 리스트·2열 전환을 넣고 머리를 고정했습니다. 아티스트 사진은 공식 채널 이미지에서 곡 썸네일, 이름 첫 글자 순으로 대신하게 했고, 가사 제보 보상은 접수가 아니라 고쳐졌을 때 서버가 주도록 정해 같은 날 OTA 로 냈습니다.
가로로 받아 둔 전면광고를 세로에서 띄우면 'Ad too large for window' 로 떨어졌습니다. iPad 에서만 받은 방향을 기억해 바뀌면 버리고 다시 받게 했고, 같은 인스턴스에 load() 를 다시 부르던 55분 만료 처리도 인스턴스를 새로 만드는 쪽으로 고쳐 OTA 로 냈습니다.
내용 높이에 맞추는 시트 안에 둔 가로 ScrollView 가 제목을 덮고 아래 버튼의 터치까지 가로챘습니다. 스크롤을 걷어 알림 받을 날은 한 줄 항목으로, 시각은 같은 너비 칸 다섯으로 바꾸고, 끄면 칸을 숨기지 않고 흐리게 남긴 이유.
7월에 넣은 '자정 종료는 다음 날에 그리지 않는다' 규칙이 DB 가 주는 '00:00:00' 표기 때문에 실제 일정에는 한 번도 적용되지 않았습니다. 비교를 자정 판정 함수로 바꾸고, 앱과 서버 테스트에 DB 모양 픽스처를 더한 기록입니다.
사진 정리 앱 Airout 의 1.0 이 나오기까지 열흘. Screen Time 알림 카드를 약관 때문에 뺐다가 되살리고, ExtensionKit 형식 문제와 Family Controls 자동 거절, 권한 안내 버튼 5.1.1(iv) 지적을 차례로 넘긴 기록.
Joiny 1.2.0 은 기능보다 스토어 쪽 정리가 컸습니다. iOS 키워드에서 이름·부제와 겹치는 단어를 덜어 75자에서 97자로 채웠고, 스크린샷 첫 장을 '오늘'에서 '함께 짜는 일정'으로 바꿨습니다. 다른 회사 상표는 넣지 않았습니다.
일정이 빈 Day 카드가 반쯤 올린 시트에서 잘리고 버튼 셋이 같은 일을 다투던 화면을 문구 한 줄과 버튼 둘로 줄였습니다. 넘칠 때만 페이드, 상태 바 흐림, 빈 지도 안내, 그리고 identify 없이 기기 단위로 세는 퍼널 이벤트 6개를 넣은 이유와 확인한 범위입니다.
앱 없이 초대 링크를 연 iPhone 사용자가 설치 뒤 어느 여행인지 잃던 문제를, 초대 페이지의 링크 복사와 첫 실행의 시스템 붙여넣기 버튼으로 이었습니다. 권한 창 없이 클립보드를 다루는 방법과 OTA 로 낸 근거를 정리합니다.
다른 앱에서 저장한 일정 이미지를 읽어 새 여행을 채우는 기능을 하루에 만들었습니다. 긴 이미지는 겹치게 잘라 보내고, 장소는 나라를 확인해 붙이고, 여행은 확인 화면을 거친 뒤 서버에 있는 결과로만 만듭니다.
RevenueCat 고객이 기기마다 익명 ID 로 만들어져 서버 웹훅이 결제를 계정에 남기지 못했습니다. 게스트까지 포함한 Supabase 사용자 ID 로 logIn 하고, 익명으로 산 광고 제거는 합쳐질 때 sync-iap 로 맞추는 OTA 를 냈습니다.
첫날 둘째 곡을 시도하는 사람이 더 잘 돌아온다는 점검 결과를 따라, 첫 미션 결과 화면에 추천 3곡을 넣고 가입 버튼을 뺐습니다. 게스트 곡 한도는 서버가 1곡·3곡 군으로 나눠 주고, 알림 안내는 거절 48시간 뒤 한 번만 더 묻게 했습니다.
Oftway 1.0 을 App Store 심사에 내기 전 하루 동안 한 일. 높이가 달랐던 Apple·카카오·Google 버튼을 같은 규격으로 맞추고, Apple 로그인에서는 이름을 묻지 않고, 카카오 장소 키는 무료 쿼터 때문에 그대로 두되 로그인은 따로 만든 앱으로 나눈 이유.
프로필 사진을 비공개 Storage 와 서명 URL 로 붙이고, 사진을 이니셜 원 위에 겹쳐 호출부를 고치지 않았습니다. 같은 날 거꾸로 서 있던 설정 탭 위계를 바로 세우고 튀던 모달 움직임을 줄인 기록입니다.
맞혀도 틀려도 테두리 색과 토스트 한 줄뿐이던 학습 화면에 반응하는 카세트 캐릭터를 넣었습니다. SVG 없이 View 로만 그려 OTA 로 낸 이유, 움직임을 프리셋 값 그대로 옮긴 방식, 범위를 넓히며 함께 고친 것과 아직 남은 판정까지.
잠긴 iPhone 에서 위치 이벤트로 깨어난 Oftway 가 2분에 16번 죽었습니다. 로그인 세션 키를 '첫 잠금 해제 뒤 읽기'로 새 이름에 옮기고, 읽을 수 없는 순간에는 새 키를 만들지 않고 계정만 잠시 끄기로 한 이유.
공유 캘린더 안에 위시리스트를 넣었습니다. 승인 판정을 '작성자를 뺀 지금 멤버 전원'으로 계산하고 알림은 한 번만 보내도록 서버에 두었고, 구버전 앱 히스토리는 v1 함수로 지켰습니다. 시뮬레이터에서 잡은 가격 커서 버그까지 정리한 기록입니다.
곡 요청을 공개 보드로 바꾸고, 포인트로 내 요청 순위를 올리던 부스트 대신 한 곡에 하루 한 표 투표를 넣었습니다. 서버 배포가 막힌 날 OTA 를 미룬 이유와 아직 확인하지 못한 회원 투표까지.
GPS 오차로 이웃한 15m 칸 두 줄에 쌓인 길을 그릴 때만 한 칸 폭 뼈대로 가늘게 하고, 1·2·1·2 로 흔들리던 짙기는 한 줄 안에서 닫기·열기로 골랐습니다. 집계는 그대로 두고 그리기만 바꾼 이유와, 그 대가로 합쳐지거나 옅어질 수 있는 길.
설정의 계정 삭제가 사실은 로그아웃만 하고 있었습니다. 외래키를 그대로 두고 지우면 다른 멤버의 공유 일정까지 사라지는 문제를 sentinel 사용자 하나와 정리 RPC 로 풀고, 그룹은 남은 멤버에게 넘긴 기록.
단어 카드를 아침 알림으로 바꾼 뒤 곡 코스 알림이 열흘 가까이 한 통도 예약되지 않았습니다. 코스 진행자만 코스 알림을 먼저 받게 순서를 바꾸고, 하루 한 통 예산과 단어 카드는 그대로 둔 판단.
걷는 중에 끼어든 '지하철 1.1km · 1분'은 앞당겨 찍힌 iOS 방문 점 때문이었습니다. 초속 100m 상한 하나로 막고 방문 점은 남긴 이유, 그리고 사용자가 고친 수단만 이웃 조각과 합치기로 한 기준.