스토어 상장기: 스토어 두 곳, 리젝 두 번, 여유는 제로
English Deutsch Español Français Português 中文 Italiano 日本語 Русский Türkçe Polski Nederlands Bahasa Indonesia
Moneyflow가 이제 App Store와 Google Play에 올라와 있어요. 순탄했다고 말하고 싶지만, 아니었어요. 그 과정에서 Apple에게 리젝을 두 번 받았고, 빌드 스크립트에 거절하는 법을 가르쳤고, 람보가 처음부터 체커 깃발이었다는 걸 알게 됐고, Google은 어깨를 으쓱하고 넘겼지만 Apple은 넘기지 않은 버그를 고쳤어요.
이건 릴리스 노트, 런북, 급하게 쓴 커밋 메시지를 조각조각 이어 붙인 전체 이야기예요. 길고, 약간 뻔뻔하고, 곧 직접 앱을 출시하려는 분께는 실제로 쓸모 있는 조언도 들어 있어요. 커피를 준비하세요. 아니면 자산을 담보로 한 소액 대출도 좋고요.
날짜로 보는 짧은 버전
- 버전 1.2.8이 Google Play에 공개돼요. 그날 저녁 여섯 개 언어로 공지가 이어져요.
- 아무도 읽을 수 없던 스플래시 화면을 구해 낸 뒤, iOS가 1.2.8로 Android를 따라잡아요.
- Apple에 첫 번째 제출은 인앱 구매 없이 들어가요. 두 번째 제출은 39개를 모두 담아 들어가요. Apple의 첫 답변: Information Needed.
- 상표 대청소, 그리고 앱에 빠진 키를 되돌려 놓은 빌드 31.
- iPad에서 온 두 번째 리젝: 로그인 버튼 두 개가 모두 오류를 띄우고, 심사자는 상점을 찾지 못해요.
- 범인은 빠진 매개변수 하나. Android는 줄곧 조용히 봐주고 있었어요.
- 제대로 서명된 빌드 34. Sign in with Apple이 마침내 작동해요.
- 버전 1.2.9가 Google Play에 배포돼요.
- 플레이어들이 휴대폰이 뜨겁다고 알려 와요. 우리는 게임이 그러지 못하게 막아요.
- 한 주말에 버전 다섯 개, 1.2.10부터 1.3.1까지.
- App Store 링크가 홈페이지에 올라가요. 현재 위치: 여기.
상장 전: 정착을 못 하던 브라우저 게임
Moneyflow는 브라우저 게임으로 시작했어요. 진짜 직업과 진짜 청구서와 진짜 월급을 가진 캐릭터를 고르고, 주사위를 굴려서, 9 to 5에서 탈출하고 꿈 두 개를 이룰 만큼 패시브 인컴을 쌓아 가는 게임이에요. 싱글 플레이든 멀티플레이든, 둘 다 해내는 것만이 이기는 유일한 방법이에요. 결혼식과 혼전 계약서와 이혼도 있는데, 그건 곧 이야기할게요.
그러다 이게 여러분의 휴대폰에 있어야 한다고 생각했고, 앱 스토어는 전혀 다른 게임이라는 걸 알게 됐어요. 주사위도, 카드도 없고, 양식과 설문과 언제나 이기는 하우스만 있죠. Google Play 서류 작업은 앞서 Google Play 스토어에 Moneyflow 등록하기에 정리했어요. 이건 그 속편이에요. 그다음에 두 스토어에서 무슨 일이 있었는지, 그리고 과거로 돌아갈 수 있다면 우리 자신에게 해 주고 싶은 말을요.
1라운드: Google Play는 승낙했어요 (전부 요구한 뒤에)
Google Play가 먼저였고, 주택담보대출을 신청할 때의 은행처럼 굴었어요. 친절하고, 꼼꼼하고, 내가 가진 모든 서류를 보고 싶어 하죠. 데이터 보안 양식, 콘텐츠 등급, 계정 삭제 페이지, 비공개 테스트 기간. 앞선 글에서 이 모든 걸 다뤘으니, 여기서는 첫 등록이 끝난 뒤에 우리가 바꾼 것만 이야기할게요.
클릭을 멈췄어요. 인앱 구매 39개(말 18개, 주사위 스킨 14개, 보드 테마 4개, 팩 3개, 전부 코스메틱)는 손으로 만드는 대신 스크립트로 만들었고, 앱과 두 스토어 사이에 RevenueCat을 두어 구매 로직이 어디서나 똑같아요. 릴리스도 Android Publisher API로 해요. 스크립트 하나가 편집을 열고, 번들을 업로드하고, 트랙을 지정하고, 커밋하고, 어느 단계든 실패하면 편집을 삭제해서 실패한 실행이 아무것도 남기지 않아요. 이 이야기 전체에서 가장 깔끔한 부분이에요.
Play에는 나름의 변덕이 있어요. 한 번이라도 본 빌드 번호는 거부해요. 업로드만 하고 출시하지 않은 번호도 마찬가지예요. 그래서 빌드 번호는 게임 속 현금처럼 굴러요. 하나 쓰면 사라지고, 얻은 게 있든 없든 상관없어요. 서비스 계정도 두 개가 있는데, 게시가 허용된 건 하나뿐이에요. 다른 하나는 편집을 열고, 번들 전체를 업로드하고, 트랙에 지정한 뒤, 마지막 단계에서 403을 받아요. 그 모든 노력 끝에, 케이크가 이미 식탁에 올라온 뒤에 단호한 “안 돼요”를 듣는 거죠.
9월 7일에 버전 1.2.8이 공개됐어요. 그날 저녁 여섯 개 언어로 공지를 올렸어요. 공개적으로 신나 할 거라면 독일어, 스페인어, 프랑스어, 포르투갈어, 중국어로도 하는 게 좋으니까요.
Google Play는 승낙했어요. Apple은 생각이 달랐고요.
2라운드: Apple은 튕겨요
Android가 앞서가는 동안 iOS는 App Store Connect에서 여전히 버전 1.2.1에 머물러 있었어요. 9월 10일에 따라잡았어요. 버전 1.2.8, 빌드 30, 새 스크린샷 열 장, 여덟 개 언어의 프로모션 문구. 그 전에 유료 앱 계약이라는 작은 문제가 있었어요. Apple은 그 계약에 동의하고 은행 및 세금 정보를 제출하기 전에는 인앱 구매를 단 하나도 만들게 해 주지 않아요. 그때까지는 시도할 때마다 409가 돌아오는데, “아직 안 돼요, 서류를 확인할 때까지는요”라는 Apple식 표현이에요.
그다음 App Store Connect API로 39개 구매를 전부 스크립트로 만들었어요. 첫 실행에서는 24개가 UNEXPECTED_ERROR로 실패했어요. 다시 돌렸더니 깨끗하게 통과했어요. 런북에는 이제 저장소에서 가장 선(禪)적인 문장이 들어 있어요. 디버깅하지 말고 다시 실행하라.
스플래시 화면이 아니었던 스플래시 화면
실제 휴대폰에서 우리 실행 화면은 읽을 수 없었는데, 이유는 두 가지였어요. 스토리보드가 화면을 정사각형 아트워크로 채우는 바람에, 키가 큰 휴대폰에서는 높이가 맞을 때까지 확대되면서 너비의 약 54%가 잘렸어요. 워드마크와 장식 프레임 전체가 가장자리 밖으로 밀려났어요. 더 나쁜 건, 다크 모드 버전이 크림색 캔버스 위에 약 5% 크기로 놓인 맨몸 캐릭터뿐이어서, 다크 모드로 설정된 모든 휴대폰에서 로고가 보이지 않았다는 거예요.
아트워크를 화면 안에 맞추고 자체 크림색 배경 위에 놓는 방식으로 바꾸고, 다크 변형을 없애고, 로고 락업을 캔버스의 88%로 교체했어요. 이미지 폴더가 55MB에서 9.1MB로 줄었어요. 첫인상이 55MB나 나가서는 안 되죠.
상점에서 아무것도 못 파는 앱을 제출하는 방법
위장이 훌륭한 함정이 하나 있어요. 인앱 구매는 별도의 심사 항목이고, Apple은 제출물에 포함되지 않은 구매는 심사하지 않아요. 처음 제출했을 때 앱은 상품 39개를 전부 “제출 준비 완료” 상태로 남겨 둔 채 심사에 들어갔어요. 그대로 승인됐다면, 사고팔기에 관한 게임인데 상점이 아무것도 팔 수 없는 앱을 내보낼 뻔했어요. 이를 되돌리는 데 심사 철회와 대기열 순번을 치렀어요.
함정은 Apple이 인앱 구매 페이지에서 절대 제출할 수 없는 초안 제출을 시작하게 해 준다는 거예요. 앱 버전이 없으면 모든 상품이 “Unable to Add for Review”로 추가에 실패하고, 초안을 제출하면 “add an app version for the selected platform”으로 실패해요. 어느 메시지도 버전을 먼저 넣어야 한다는 걸 알려 주지 않아요. 우리는 당연히 해결책을 스크립트로 만들려 했어요. API에는 제출물에 인앱 구매를 연결하는 관계 자체가 없어요. 이 문이 UI 전용이라는 걸 받아들이기까지 세 가지 철자를 시도했고, 이제 런북에 정중하게 그렇게 적어 놔서 아무도 다시 시도하지 않게 했어요.
마침내 우리를 기쁘게 한 숫자는 마흔이었어요. 앱 버전 하나에, 그 버전에 딸린 구매 상품 서른아홉 개.
리젝 첫 번째: Apple이 나를 더 알고 싶어 해요
9월 11일에 Apple이 답을 보냈어요. 제목은 Guideline 2.1, Information Needed. 버그도, 크래시도, 위반도 아니었어요. Apple은 결함을 전혀 보고하지 않았어요. 심사 이력이 짧은 계정에 Apple이 보내는 설문이었고, 화면 녹화 요구가 함께 왔어요. 리젝이라기보다 신원 조회에 가까워요.
목록은 일곱 가지였어요. 화면 녹화, 앱의 용도와 대상, 모든 걸 들어가 볼 방법, 사용하는 외부 서비스, 지역에 따라 달라지는 것이 있는지, 규제 대상인지 혹은 다른 사람의 자료를 기반으로 하는지, 그리고 구매가 어떻게 작동하는지. 첫 데이트에서 하는 질문이 합리적인 것처럼 합리적인 질문들이었어요. Resolution Center는 답변을 4,000자로 제한하는데 우리 답변은 3,917자였고, 이제 막 만난 상대에게 해 본 가장 긴 말이에요.
그다음은 녹화였어요. Apple은 실제 휴대폰에서 실제 속도로 실제 흐름을 원했어요. 콜드 런치, 싱글 플레이 게임, 상점과 구매 시트, 가입, 로그인, 멀티플레이 로비, 그리고 계정을 다시 삭제하는 것까지요. 60프레임으로 찍은 4분짜리 iPhone 영상은 약 240MB로 첨부하기엔 너무 커서, ffmpeg로 인터페이스를 읽을 수 있게 유지하면서 10MB 미만으로 줄였어요. 촬영 목록 전체를 적어 뒀어요. 이 프로젝트가 우리에게 가르쳐 준 게 하나 있다면, 우리는 뭐든 어떻게 했는지 잊어버린다는 거니까요.
답변은 두 곳에 넣었어요. Resolution Center 답장, 그리고 앱 등록 정보의 심사 노트예요. 그러면 앞으로의 모든 제출이 질문에 이미 답한 채로 도착해요. 심사자는 그 노트를 글자 그대로 따라요. 앱을 한 번도 본 적 없고, 쓸 수 있는 시간이 40초이고, iPad를 든 사람을 위해 쓰세요. 이 셋은 모두 사실로 밝혀질 거예요.
리허설하다가 하나 더 나왔어요. 계정 삭제가 “삭제 중...”에서 한 번 멈췄다가 두 번째 시도에서 작동했어요. 서버가 졸았던 것 같은데, 심사자에게는 고장 난 버튼과 똑같아 보여요. 심사자가 마을에 와 있는 동안은 서버를 깨워 두세요.
상표 대청소
Apple이 우리를 주목하는 동안, 브랜드처럼 들리는 게 있는지 게임을 훑어 봤어요. Apple의 콘텐츠 권리 규정 때문에 살펴보게 됐는데, 발견한 건 마음에 들지 않았어요. 캐릭터 두 명이 “BMW 3 Series (CPO)”와 “Honda Civic”을 갖고 있었어요. 그 이름들은 게임에 보탬이 안 되면서 문제만 부를 수 있어서, 이제 “스포츠카 (인증 중고)”와 “기본형 세단”이에요. “monopoly”라는 단어는 App Store 키워드에서 빠졌어요.
그리고 람보가 있었어요. 알고 보니 람보 말은 처음부터 자동차가 아니었어요. 내내 체커 깃발 이모지였어요. 예전 이름은 슈퍼카를 약속하고 레이스 깃발을 내줬던 거죠. 재무적으로 말하자면 그냥 마케팅이에요. 이제 이름은 체커 깃발이에요. 탱크라는 보드 테마는 샤크 풀이 됐어요.
어기지 않은 단 하나의 규칙.
표시 이름은 바꿨고, 모든 제품 ID는 그대로 뒀어요. 체커 깃발 말은 보닛 아래에서 여전히 pawn.lambo이고 앞으로도 그래요. 그 ID들은 두 스토어에서 이미 운영 중이고, 가격에 묶여 있고, 팩 지급 목록에 이름이 올라 있어서, 하나라도 바꾸면 이미 갖고 있는 모든 사람에게서 그 아이템이 회수됐을 거예요. 이름은 카피예요. ID는 계약이에요.
리젝 두 번째: iPad 사건
9월 17일에 Apple이 다시 연락해 왔고, 이번에는 진짜 문제를 찾아냈어요. 심사자는 iPadOS 27이 돌아가는 iPad Air(11인치, M3)를 쓰고 있었는데, iPhone 전용 앱은 iPad에서 호환 모드로 실행되고 거기서 심사되기 때문이에요. 지적은 두 가지였어요. Guideline 2.1(a): Apple로 계속하기나 Google로 계속하기를 탭하면 오류가 났어요. Guideline 2.1(b): 심사자가 우리의 인앱 구매 39개를 찾지 못했어요.
둘 다 우리 잘못이었고, 어떤 의미에서는 같은 잘못이었어요.
버그
로그인 플러그인은 호출할 때마다 options 객체를 원해요. iOS에서는 그게 없으면 플러그인이 로그인 창이 뜰 기회도 갖기 전에 “Missing provider or options”로 거부해요. Android에서는 같은 플러그인이 조용히 빈 객체가 있다고 가정하고 계속 진행해요. 그래서 같은 코드 한 줄이 Google Play 심사는 무사히 통과하고, Apple 쪽에서는 첫 탭에서 넘어졌어요. 모든 iPad뿐 아니라 모든 iPhone에서도요.
빠진 매개변수 하나. Android는 봐줬어요. iOS는 봐주지 않았어요.
아무도 찾지 못한 상점
구매 문제는 별개의 오해였는데 첫 번째와 딱 맞아떨어졌어요. 예전 심사 노트는 심사자에게 구매하려면 로그인이 필요하다고 알려 줬어요. 그런데 로그인이 고장 나 있었어요. 그래서 심사자는 상점에 영영 도달하지 못했고, 우리가 만든 닫힌 순환이었어요.
자세히 보니 상점에는 실망시킬 방법이 세 가지 더 있었어요. 상품 목록이 패키지 없이 로드되면 상점은 그걸 “판매할 게 없음”으로 처리해서, 내가 아직 갖고 있지 않은 모든 아이템을 숨겼어요. 세 가지 팩(말 5종, 테마, 스타터 캐릭터)은 6월부터 숨겨져 있었고요. 그리고 게스트가 말 5종 팩을 샀다면 돈을 내고도 아무것도 잠금 해제되지 않았을 거예요. 우리 서버가 로그인한 플레이어에게만 팩을 개별 아이템으로 풀어 줬으니까요. 게스트는 물론 심사자가 바로 그런 사람이고요. 누군가의 돈을 받고 빈 상자를 건네는 건 훌륭한 금융 교훈이에요. 다만 우리가 가르치고 싶던 교훈은 아니었죠.
기록을 위해 수정 목록을 적어요. 매개변수를 넘긴다. iPad에서 두 로그인 창이 앱의 활성 창에 붙게 한다. 플러그인이 첫 번째 창에 앵커를 걸었는데 iPadOS에서는 그게 늘 보이는 창이 아니었으니까. 상점이 로드된 상품이 0개일 때 “비어 있음”이 아니라 “아직 로드되지 않음”으로 받아들이게 가르친다. 팩을 되돌린다. 앱이 게스트를 위해서도 팩을 풀어 주게 가르친다. 그리고 심사 노트를 다시 써서, 구매에는 로그인이 전혀 필요 없고 상점으로 가는 정확한 경로가 여기 있다고 쉬운 말로 적는다.
결과가 1.2.9였어요. 릴리스 노트는 우리에게 가장 큰 대가를 치르게 한 두 문장으로 시작해요. “로그인 수정: Google로 계속하기를 일부러 누르면 계정 선택 창이 뜨고, 네이티브 로그인에서 더는 오류가 나지 않아요. 가격이 로드되기 전에도 상점은 항상 아이템을 보여 줘요.” 두 문장에 우리 인생 열흘이 들어갔어요.
빌드 32와 33: 우리가 입에 올리지 않는 빌드들
그냥 수정본을 내보내면 되지 않느냐고 생각하겠죠. 실제로 두 번 냈고, 두 번 다 틀렸어요. TestFlight 빌드 32와 33에서 Google 로그인은 됐는데, Apple 자체 테스트 프로그램에 있는 Apple 자체 버튼인 Sign in with Apple이 AuthorizationError 1000으로 실패했어요.
원인은 알고 나면 뻔하고 모를 때는 보이지 않아요. 권한(entitlement)은 코드 서명에 실려 가요. 우리 업로드 스크립트는 서명을 끈 채 앱을 아카이브하고 서명을 내보내기 단계에 맡겼는데, 내보내기 단계는 앱에 서명할 수는 있어도 앱에 원래 없던 권한을 부여할 수는 없어요. Sign in with Apple 권한이 빌드에 들어가지 못했어요. 개발자 용어로, 앱이 바지도 안 입고 집을 나선 거예요.
업로드 스크립트는 이제 아카이브 시점에 서명하고, 서명에 권한이 빠진 아카이브는 업로드를 거부해요. 우리가 문지기를 만든 거예요. 신분증을 검사해요. 빌드 32와 33은 죽었고, 제대로 차려입은 빌드 34가 Apple에 다시 보낸 빌드예요.
그러자 Apple이 승낙했어요.
뜨거운 물건
9월 24일쯤 플레이어들이 휴대폰이 뜨거워진다고 알려 왔어요. iPhone 15, iPhone 16 Pro Max, 그리고 웹 버전도 조금 따뜻하다고요. 복리의 날것 그대로의 섹시함 때문이었다고 말하고 싶어요. 하지만 타이머였어요.
게임은 모든 모드에서 1초마다 카운터를 올렸고, 틱마다 게임 전체가 다시 렌더링됐어요. 보드, 모든 칸, 모든 패널. 영원히요. 한편 움직이는 말은 주사율이 빠른 휴대폰에서 초당 30프레임짜리 애니메이션을 그리느라 초당 최대 120번 다시 그려졌어요. 모든 카드 뒤의 전체 화면 블러는 그 아래에서 말이 계속 움직이는 탓에 매 프레임 다시 계산됐고요. 보드를 살아 있게 보이게 하던 글로우는 박스 섀도를 애니메이션했는데, 그러면 매 프레임 다시 그리기가 강제돼요.
네 가지를 모두 고쳤어요. 카운터는 타임아웃 하나가 됐어요. 말은 온전한 프레임만 그리고, 화면 밖에 있을 때, 동작 줄이기가 켜져 있을 때, 카드에 가려졌을 때는 멈춰요. 글로우와 링은 그림자 대신 불투명도와 위치를 애니메이션하고, 세 번 맥동한 뒤 쉬어요. 헤드리스 테스트 10초 동안 보드의 유휴 작업은 624ms에서 15ms로 줄었어요. 카드가 열려 있고 드래곤 말이 보드에 있을 때는 1,188ms에서 11ms로 줄었고요. 이제 우리 애니메이션은 이 프로젝트의 다른 어느 부분에서 우리가 보여 준 것보다 더 큰 절제를 보여 줘요.
이건 헤드라인 “시원해진 폰”과 함께 더 공정해진 해고 규칙을 담아 1.2.10으로 나갔어요. 해고되면 월급만 멈춰요. 부수입은 계속 들어오고, 청구서는 여전히 내야 해요. 해고는 아파야 해요. 사이드 허슬을 지워 버리면 안 되고요.
장부: 모든 릴리스 노트를 연달아 읽기
릴리스 노트는 한 파일에 모아 두고, 그 파일이 두 스토어에 모두 공급돼요. 순서대로 읽으면 묘한 일기가 되니, 행간의 의미를 덧붙여 여기 옮겨요. 날짜는 커밋 날짜예요. 파일은 1.0.1에서 곧장 1.2.6으로 건너뛰니, 그 사이에 일어난 일은 일기 없이 일어난 거예요. 아래 버전 번호는 각각 자기 글로 연결돼요.
1.0.0
Moneyflow 첫 출시. 부동산, 주식, 사업으로 나만의 금융 제국을 세워 보세요. 9 to 5 쳇바퀴에서 벗어나 패스트트랙에 올라, 꿈을 향해 달려가세요.
진지하고, 짧고, 살짝 겁먹었어요. 얼마나 작았는지 보세요.
1.0.1
Google Play playmoneyflow.com에서 웹 구매를 이용할 수 있어요. 전반적으로 안정성과 UX를 개선했어요.
App Store 안정성과 성능을 개선했어요. 재무제표 패널과 주사위 애니메이션의 여러 버그를 고쳤어요.
같은 버전에 노트 두 벌. 스토어마다 사람들에게 무엇을 말해도 되는지에 대한 생각이 달라서, 각각 한 벌씩 두고 섞이지 않게 애쓰고 있어요.
1.2.6
세금이 도입됐어요: 월급에는 소득세, 부수입에는 15%, 이익을 본 매각에는 15% 양도소득세가 붙어요. 캐릭터들이 이제 2025년 미국의 실제 연봉을 받아요. 임대료와 사업 수익은 경제를 따라가요 — 불황엔 얇고, 호황엔 후해요.
세금 징수원이 도착했어요. 아무도 원하지 않았지만 모두에게 필요했어요. 이제 게임 속 모든 수익은 세후로 평가돼요. 중요한 수익은 그것뿐이니까요.
1.2.7
거래, 제안, 대출 견적을 협상하세요: 50/50 동전 던지기 한 번, 20% 유리하거나 20% 불리해요. 입찰 경쟁에서 어떤 부동산을 팔지, 이혼할 때 어떤 자산을 넘길지 직접 고르거나 — 혼전 계약서에 서명하세요.
순수했던 흥정의 첫 번째 형태. 혼전 계약서가 처음 등장한 버전이기도 한데, 그때 우리 머릿속에 뭐가 있었는지 알려 주는 대목이에요.
1.2.8 9월 7일
두 번 흥정하세요: 협상하고 재협상할 수 있지만 — 상대가 자리를 박차고 나갈 수 있어요(10%, 그다음 15%). 카드가 내 삶에 맞게 나와요: 결혼 전에는 이혼이 없고, 주식이 없으면 주식 매도도 없어요. 이혼하면 순재산이 나뉘고, 전 배우자가 대출을 떠안을 수 있어요.
로맨틱한 버전이에요. 두 번 물으면 예민해지죠. 이 버전 전까지는 덱이 결혼도 하기 전에 이혼 카드를 줄 수 있었는데, 라스베이거스의 예식장보다 더 정신없는 일이었어요. 우리를 Apple의 현관 앞까지 데려간 버전이기도 해요.
1.2.9 9월 22일
로그인 수정: Google로 계속하기를 일부러 누르면 계정 선택 창이 뜨고, 네이티브 로그인에서 더는 오류가 나지 않아요. 가격이 로드되기 전에도 상점은 항상 아이템을 보여 줘요.
리젝 두 번과 빠진 매개변수 하나에 떠밀려, 어쩔 수 없이 쓴 노트예요.
1.2.10 9월 26일
시원해진 폰: 이제 플레이하는 동안 기기가 열심히 일하지 않아요. 유휴 애니메이션은 몇 번 맥동한 뒤 쉬고, 보드는 1초마다 다시 그려지지 않아요. 더 공정해진 해고: 월급만 멈추고, 부수입은 계속 들어오며, 건너뛴 월급날에도 지출은 나가요.
휴대폰에 열이 나게 하던 걸 그만둔 버전이에요.
1.2.11 9월 26일
매수 메뉴에 새로 추가: 도심 아파트, 세탁소, 도로변 모텔. … 모든 카드에 고유한 일러스트가 있고, 선택지는 카드 바로 아래에 있어요. 친구를 비공개 멀티플레이 방에 초대하세요.
가장 북적였던 릴리스이자 가장 단명한 릴리스 중 하나예요. 같은 날 저녁에 1.2.12가 도착했거든요. 친구가 있는 사람에게는 비공개 방이 헤드라인이에요. 방장 한 명, 두 자리에서 네 자리, 그리고 여섯 글자 코드.
1.2.12 9월 26일
현금이 모자라요? 이제 메울 방법을 직접 고르고 파산이 얼마나 가까운지 확인해요: 연속 긴급 대출, 남은 대출 여력, 남은 월급날. 긴급 대출이 이제 신용카드보다 싸요.
파산에 이제 카운트다운이 붙었는데, 우리가 아는 가장 친절한 공포 교육법이에요. 긴급 대출이 이제 신용카드보다 싸졌는데, 현실이 해 주는 것보다 나아요. 카드를 닫은 뒤 주사위가 저절로 굴러가던 것도 고쳤어요. 버그였거나 우리의 가장 수동적 공격적인 기능이었어요.
1.3.0 9월 27일
도로변 모텔과 SaaS 회사부터 빅 쇼트까지 새 카드 24장, 그리고 희귀도: 이제 고급 카드와 희귀 카드가 나와요. 카드를 숨겨 보드를 본 다음 카드로 돌아가기를 탭하세요. 해고와 응급 상황 카드는 더 이상 닫을 수 없어요.
새 카드 스물네 장, 희귀도 시스템, 그리고 조용히 이달 가장 중요한 변화: 이제 카드가 서버에서 도착해요. 자세한 이야기는 아래에서 이어가요.
1.3.1 9월 27일
자산을 담보로 빌려요: 대출이 없는 부동산, 사업, 주식이면 무엇이든 이제 시장 금리에 0.5%를 더한 더 저렴한 이자 전용 대출의 담보가 될 수 있어요.
또 레버리지예요. 금융 게임이라 어쩔 수 없어요. 같은 날 1.3.0 뒤에 이어서 나왔어요.
1.4.0 10월 1일
새로운 프로 봇이 매 수를 계획하고 경제를 읽어요. 이제 모든 봇이 꿈을 사고, 이기고, 보유 자산을 담보로 대출을 받을 수 있어요. 경제의 영향이 커졌어요: 금리는 호황·침체 사이클을 따르고, 침체기엔 세금이 줄고, 보유 자산의 임대료는 호황엔 오르고 침체엔 내려가요.
봇이 이기는 법을 배운 버전이에요. 지금까지는 어느 봇도 이길 수 없었는데, 어느 봇도 꿈을 사 본 적이 없었으니까요. 프로 봇이 도착했고, 경제는 기분에 따라 금리, 세금, 임대료를 움직이기 시작했고, 앱은 여덟 개 언어를 더 배웠어요.
1.4.1 10월 1일
… 주택담보대출은 이제 25년, 사업 대출은 15년, 자동차 대출은 6년에 걸쳐 상환됩니다. 은행 대출은 이자만 내며, 상환액이 소득의 67%에 이를 때까지 빌릴 수 있습니다. …
주택담보대출에 드디어 만기가 생겼어요. 대출 작업이 1.4.0이 확정된 뒤에 끝나서, 같은 날 저녁 홈 화면의 뉴스 카드와 함께 1.4.1로 나갔어요.
1.4.2 10월 1일
버그 하나, 1.4.1 이후 20분도 안 되어 고쳤어요. 이제 브리지론 버튼이 은행이 실제로 승인할 금액을 제안해요. 스토어 노트는 따로 없어요.
버전 다섯 개의 주말.
9월 26일 토요일
- 14:241.2.10시원해진 폰, 공정해진 해고
- 16:271.2.11매물, 대출 기간, 카드 일러스트
- 19:401.2.12파산 카운트다운
9월 27일 일요일
- 09:311.3.0새 카드 24장, 희귀도, 원격 콘텐츠
- 13:191.3.1내 자산을 담보로 빌리기
커밋 시각이고, 소피아 시간이에요. 모든 버전이 모든 스토어에 자기 이름으로 도달한 건 아니에요. Google Play에서는 1.2.12가 1.2.11 대신 프로덕션에 올라갔고, iOS에서도 그 자리에 대신 제출됐어요. 같은 주말에 덱은 코드로 그린 일러스트 130장을 얻었어요.
최고의 업데이트는 아무도 승인할 필요가 없는 업데이트
그 주말이 끝날 즈음 유용한 걸 하나 알게 됐어요. 업데이트를 내보내는 데 가장 느린 부분은 만드는 게 아니라, 스토어가 살펴보길 기다리는 것이라는 거예요. 그래서 1.3.0은 조금 다른 일을 했어요. 앱에게 배달을 받는 법을 가르쳤죠.
새 카드는 이제 우리 서버에서 도착하니까, 대부분의 새 콘텐츠에는 더 이상 앱 업데이트가 필요 없어요. 장치를 설치하는 데 앱 릴리스 한 번이 필요했어요. 그 뒤로 새 카드는 배포 한 번이면 되고, 번역과 일러스트도 포함이에요.
상점도 같은 방식이에요. Apple은 새 인앱 구매를 새 빌드 없이 따로 심사하니까, 새 말도 이제 새 버전이 필요 없어요.
영리한 부분은 안전망이에요. 앱이 플레이할 수 없는 카드를 받는 사람은 없어서, 예전 버전과 새 버전이 문제없이 한 테이블에 앉을 수 있어요. 정말로 새로운 메커닉을 만들어 낼 때는 여전히 모두와 같은 대기열로 돌아가고요.
같은 릴리스에서 희귀도도 들어왔는데, 일부 카드가 다른 카드보다 훨씬 드물게 나온다는 뜻이에요. 얼마나 드문지는 비밀이지만, 가장 희귀한 카드는 App Review가 한 번에 통과하는 것만큼 가끔 나와요. 우리는 일반 카드를 뽑았어요.
스코어보드
스프레드시트를 좋아하는 분들을 위해서요.
- 1020일 동안 쓴 빌드 번호, 30에서 40까지
- 39인앱 구매, 전부 코스메틱
- 2Apple의 리젝, 그리고 우리가 직접 철회한 제출 한 번
- 3,917답변의 글자 수, 허용 한도는 4,000자
- 39개 중 24개스크립트 첫 실행에서 생성에 실패한 구매 수. 두 번째 실행은 깨끗했어요
- 2권한 없이 내보낸 죽은 빌드, 32와 33
- 5한 주말에 커밋한 버전
- 624 → 15게임을 식히기 전과 후, 10초당 유휴 작업 밀리초
처음 시작할 때의 우리에게 해 주고 싶은 말
예전에는 저녁 한 번 내내 클릭하던 일이 이제 스토어마다 버전 올리기 한 번, 노트 하나, 명령 몇 개로 끝나요. 자동화할 수 없는 건 기다림뿐이에요. 나머지는 전부 이 목록에 담았어요.
- 인앱 구매보다 먼저 제출물에 버전을 넣으세요. Apple은 반대 순서로도 하게 해 주고, 그다음엔 이유를 말해 주지 않아요.
- 앱을 한 번도 본 적 없는 심사자를 위해 심사 노트를 쓰세요. 그들은 40초와 iPad 한 대를 갖고 있고, 노트를 글자 그대로 따라요. 모든 것으로 가는 정확한 경로를 알려 주세요.
- 상점 앞에 로그인을 세우지 마세요. 게스트도 지갑이 있고, 심사자는 게스트예요.
- 아카이브에 서명하고, 권한을 입고 있지 않은 아카이브는 스크립트가 업로드를 거부하게 하세요. 문지기를 만드세요.
- 빠진 키는 비명을 지르게 하세요. 빌드 30은 결제 키 없이 나갔는데 아무것도 크게 불평하지 않아서 상점이 그냥 비어 있었어요. 조용한 실패는 지연된 리젝이에요.
- 코드를 공유하더라도 두 플랫폼 모두에서 테스트하세요. Android는 봐준 걸 iOS는 거부했고, 코드 한 줄이 두 가지 성격을 가졌어요.
- 상품 이름은 바꾸되 ID는 절대 바꾸지 마세요. 이름은 카피예요. ID는 계약이에요.
- 스크립트로 만들고, 반복 가능하게 하고, 적어 두세요. Apple의 API는 가끔 그냥 한순간을 겪으니, 디버깅하기 전에 다시 실행하세요. 우리 런북은 우리가 모든 걸 두 번 잊어버렸기 때문에 존재해요.
- 스토어마다 규칙이 다르면 릴리스 노트도 따로 두세요. 같은 버전, 다른 문장.
- 콘텐츠는 서버에서 내보내고, 스토어 대기열은 새 메커닉을 위해 아껴 두세요. 최고의 업데이트는 아무도 승인할 필요가 없는 업데이트예요.
- 플레이어가 실제로 가진 뜨거운 기기에서 테스트하세요. 시뮬레이터는 한 번도 얼굴을 붉히지 않았어요. iPhone 16 Pro Max는 붉혔고요.
- 심사자가 마을에 와 있는 동안은 서버를 깨워 두세요. 잠든 서버는 고장 난 버튼과 똑같아 보여요.
자, 한번 몰아 보세요
Moneyflow는 App Store에서도 무료, Google Play에서도 무료, 어떤 브라우저에서도 무료예요. 광고는 없고, 시작하는 데 계정도 필요 없어요. 상점의 모든 것은 코스메틱이에요. 이기는 데 도움이 되는 건 하나도 없는데, 돈에 관한 게임에서 그건 아주 원칙적이거나 아주 형편없는 사업이거나 둘 중 하나예요.
다음은요? 이제 서버에서 도착하는 더 많은 카드, 친구와 함께 즐기는 더 많은 방법, 그리고 우주가 친절하다면 버전 번호 없이 보내는 온전한 한 주.
보드에서 만나요.