Выход на публику: два магазина, два отказа, ноль спокойствия

Дневник запуска · 29 сентября 2026 г. · 20 минут чтения

English Deutsch Español Français Português 中文 Italiano 日本語 한국어 Türkçe Polski Nederlands Bahasa Indonesia

Moneyflow теперь в App Store и в Google Play. Мы бы с радостью рассказали, что всё прошло гладко. Не прошло. По пути мы получили два отказа от Apple, научили скрипт сборки говорить «нет», выяснили, что Lambo всё это время был клетчатым флагом, и починили ошибку, на которую Google пожал плечами, а Apple — нет.

Это вся история целиком, собранная из наших заметок о релизах, наших инструкций и коммитов, которые мы писали в спешке. Она длинная, немного дерзкая, и если ты собираешься запускать собственное приложение, в ней есть настоящие советы. Налей кофе или возьми небольшой кредит под залог своих активов.

Скачать в App Store Скачать в Google Play

Коротко, по датам

  1. Версия 1.2.8 выходит в Google Play. Анонс появляется в тот же вечер, на шести языках.
  2. iOS догоняет Android на версии 1.2.8, после того как мы спасаем заставку, которую никто не мог прочесть.
  3. Первая отправка уходит в Apple без покупок в приложении. Вторая уходит со всеми 39. Первый ответ Apple: Information Needed.
  4. Весенняя уборка товарных знаков и сборка 31, чтобы вернуть в приложение пропавший ключ.
  5. Отказ второй, с iPad: обе кнопки входа показывают ошибку, а проверяющий не может найти Магазин.
  6. Виновник — один пропущенный параметр. Android всё это время тихо его прощал.
  7. Сборка 34, подписана как положено. Вход через Apple наконец работает.
  8. Версия 1.2.9 выходит в Google Play.
  9. Игроки сообщают, что их телефоны сильно греются. Мы заставляем игру перестать это делать.
  10. Пять версий за одни выходные, от 1.2.10 до 1.3.1.
  11. Ссылка на App Store появляется на нашей главной странице. Ты здесь.

До IPO: браузерная игра, которая боится обязательств

Moneyflow начинался как браузерная игра. Ты выбираешь персонажа с настоящей работой, настоящими счетами и настоящей зарплатой, бросаешь кубики и пытаешься нарастить достаточно пассивного дохода, чтобы вырваться из рутины с девяти до шести и оплатить две мечты. Сделать и то и другое — единственный способ победить, и в одиночной игре, и в мультиплеере. Есть ещё свадьба, брачный договор и развод, до них мы тоже дойдём.

Потом мы решили, что ей место на твоём телефоне, и выяснили, что магазин приложений — совсем другая игра. Ни кубиков, ни карточек, только формы, анкеты и казино, которое всегда в выигрыше. О бумажной работе для Google Play мы писали раньше, в посте Как мы выкладывали Moneyflow в Google Play. Это сиквел: что случилось дальше, в обоих магазинах, и что мы сказали бы себе, если бы могли вернуться назад.

Раунд первый: Google Play говорит «да» (после того как попросил всё на свете)

Google Play пошёл первым и вёл себя как банк, когда просишь ипотеку: дружелюбно, дотошно и жаждуще увидеть каждый документ, какой у тебя есть. Форма «Безопасность данных», рейтинг контента, страница удаления аккаунта, период закрытого тестирования. Предыдущий пост рассказывает обо всём этом, так что здесь — что мы изменили, когда первая карточка была готова.

Мы перестали кликать. Все 39 покупок в приложении (18 фишек, 14 дизайнов кубиков, 4 темы поля и 3 набора, и каждая из них косметическая) создавались скриптом, а не вручную, а между приложением и обоими магазинами стоит RevenueCat, так что логика покупок везде одна и та же. Релизы мы тоже выпускаем через Android Publisher API. Один скрипт открывает правку, загружает бандл, назначает трек и фиксирует, а если какой-то шаг падает, удаляет правку, так что неудачный запуск ничего не оставляет после себя. Это самая аккуратная вещь во всей этой истории.

У Play свои причуды. Он отвергает любой номер сборки, который когда-либо видел, включая те, что ты загрузил и так и не выпустил, поэтому номера сборок ведут себя как наличные в игре: потратил один — и он ушёл, получил ты что-нибудь взамен или нет. Ещё у нас два сервисных аккаунта, и публиковать разрешено только одному. Другой может открыть правку, загрузить целый бандл, назначить его на трек и на самом последнем шаге получить 403. Столько усилий и твёрдое «нет», когда торт уже стоит на столе.

7 сентября версия 1.2.8 вышла. В тот же вечер мы опубликовали анонс на шести языках, потому что если уж радоваться публично, то на немецком, испанском, французском, португальском и китайском — тоже.

Google Play сказал «да». У Apple были другие планы.

Раунд второй: Apple строит из себя недотрогу

Пока Android мчался вперёд, iOS всё ещё стоял в App Store Connect на версии 1.2.1. 10 сентября он догнал: версия 1.2.8, сборка 30, десять новых скриншотов и промотекст на восьми языках. До всего этого нужно было решить небольшой вопрос с соглашением Paid Apps. Apple не даст создать ни одной покупки в приложении, пока ты его не примешь и не подашь банковские и налоговые данные. До тех пор каждая попытка возвращает 409, а это способ Apple сказать: «Пока нет, и не будет, пока я не увижу твои бумаги».

Потом мы автоматизировали все 39 покупок через App Store Connect API. Первый запуск упал на 24 из них с UNEXPECTED_ERROR. Мы запустили снова, и всё прошло чисто. Теперь в инструкции самое дзен-предложение во всём репозитории: перезапусти, а не отлаживай.

Заставка, которой не было

На настоящем телефоне наш стартовый экран было не прочесть, и по двум разным причинам. Раскадровка заполняла экран квадратной картинкой, так что на высоком телефоне она масштабировалась, пока не совпадёт высота, и обрезала около 54% ширины. Логотип и вся декоративная рамка уходили за край. Хуже того, тёмные версии были просто голой фигурой размером около 5% на кремовом полотне, то есть невидимым логотипом на каждом телефоне с тёмной темой.

Мы перешли к тому, чтобы вписывать картинку в экран на её собственном кремовом фоне, убрали тёмные варианты и поставили логотип с надписью на 88% полотна. Папка с изображениями сжалась с 55 МБ до 9,1 МБ. Первое впечатление не должно весить 55 МБ.

Как отправить приложение, в Магазине которого нечего продавать

Вот ловушка с превосходной маскировкой. Покупки в приложении — отдельные объекты проверки, и Apple не станет проверять ту, которой нет в твоей отправке. В первый раз приложение ушло на проверку, а все 39 продуктов остались стоять на «Ready to Submit». Одобри его Apple — мы бы выпустили игру о купле-продаже, в Магазине которой нечего купить. Отзыв стоил нам действия Remove from Review и места в очереди.

Ловушка в том, что Apple позволяет начать черновик отправки со страницы In-App Purchases, который никогда нельзя отправить. Без версии приложения ни один продукт не добавляется: «Unable to Add for Review», а отправка черновика падает с «add an app version for the selected platform». Ни одно из сообщений не говорит, что версию нужно добавить первой. Мы, разумеется, попытались автоматизировать исправление. В API вообще нет связи покупки в приложении с отправкой. Мы перепробовали три написания, прежде чем смириться, что эта дверь только в интерфейсе, и теперь в инструкции так и сказано, вежливо, чтобы никто больше не пробовал.

Число, которое наконец нас порадовало, — сорок: одна версия приложения плюс тридцать девять вещей, которые можно к ней купить.

Отказ номер один: Apple хочет узнать нас получше

11 сентября Apple ответила. В теме письма стояло Guideline 2.1, Information Needed. Это была не ошибка, не сбой и не нарушение. Apple не сообщала ни о каком дефекте. Это анкета, которую Apple отправляет аккаунтам с короткой историей проверок, и к ней прилагалось требование записи экрана. Считай это не отказом, а проверкой биографии.

В списке было семь пунктов: запись экрана, для чего приложение и для кого, как войти и всё попробовать, какие внешние сервисы оно использует, меняется ли что-то по регионам, регулируется ли оно и не построено ли на чужих материалах, и как работают покупки. Вопросы были разумные, примерно как вопросы на первом свидании. Resolution Center ограничивает ответ 4 000 символов, а наш занял 3 917, и это самое длинное, что мы когда-либо говорили человеку, с которым только что познакомились.

Потом запись. Apple хотела настоящий сценарий на настоящей скорости на настоящем телефоне: холодный запуск, одиночная игра, Магазин и окно покупки, регистрация, вход, лобби мультиплеера и снова удаление аккаунта. Четыре минуты видео с iPhone в 60 кадров в секунду весят около 240 МБ, а это слишком много для вложения, поэтому ffmpeg сжал его до менее 10 МБ с читаемым интерфейсом. Мы записали весь список кадров, потому что если этот проект чему-то нас и научил, так это тому, что мы всё забываем.

Ответы мы положили в двух местах: в ответ в Resolution Center и в заметки для проверяющих в карточке приложения, чтобы каждая следующая отправка приходила уже с ответами на эти вопросы. Проверяющие следуют этим заметкам буквально. Пиши их для того, кто никогда не видел твоё приложение, у кого есть сорок секунд и в руках iPad. Всё это окажется правдой.

Пока мы репетировали, всплыло ещё кое-что. Удаление аккаунта один раз зависло на «Deleting...» и сработало со второго раза. Мы подозреваем, что сервер задремал, а для проверяющего это выглядит ровно как сломанная кнопка. Не давай серверу спать, пока проверяющий в городе.

Весенняя уборка товарных знаков

Пока Apple держала наше внимание, мы прошлись по игре в поисках всего, что звучит как бренд. Правила Apple о правах на контент заставили нас присмотреться, и найденное нам не понравилось. У двух персонажей были «BMW 3 Series (CPO)» и «Honda Civic». Эти названия ничего не добавляли игре и приглашали кучу проблем, поэтому теперь это «Спорткар (с пробегом)» и «Простой седан». Слово «monopoly» ушло из наших ключевых слов в App Store.

Потом был Lambo. Выяснилось, что фишка Lambo никогда не была машиной. Всё это время она была эмодзи клетчатого флага, так что прежнее название обещало суперкар, а выдавало гоночный флаг. С финансовой точки зрения это просто маркетинг. Теперь она называется Chequered Flag. Тема поля The Tank стала Shark Pool.

Единственное правило, которое мы не нарушили.

Мы изменили отображаемые названия, а каждый ID продукта оставили ровно там, где он был. Клетчатая фишка по-прежнему pawn.lambo под капотом и всегда ею останется. Эти ID работают в обоих магазинах, привязаны к ценам и названы в выдаче наборов, а переименование любого из них отобрало бы предмет у всех, кто им уже владеет. Названия — это текст. ID — это контракты.

Отказ номер два: инцидент с iPad

17 сентября Apple вернулась, и на этот раз нашла настоящие проблемы. Проверяющий использовал iPad Air (11 дюймов, M3) с iPadOS 27, потому что приложения только для iPhone запускаются на iPad в режиме совместимости и проверяются там. Замечаний было два. Guideline 2.1(a): нажатие на «Продолжить с Apple» или «Продолжить с Google» показывало ошибку. Guideline 2.1(b): проверяющий не смог найти наши 39 покупок в приложении.

Обе проблемы были наши, и в некотором смысле это была одна и та же проблема.

Баг

Плагин входа требует объект options при каждом вызове. На iOS, если его нет, плагин отклоняет запрос с «Missing provider or options» ещё до того, как успеет появиться окно входа. На Android тот же плагин молча подставляет пустой объект и работает дальше. Поэтому одна и та же строка кода прошла проверку Google Play и упала при первом нажатии на стороне Apple, на каждом iPhone и на каждом iPad.

Один пропущенный параметр. Android его простил. iOS — нет.

Магазин, который никто не мог найти

Покупки были отдельным недоразумением, которое идеально легло на первое. В старых заметках для проверяющих мы писали, что для покупок нужен вход. Вход был сломан. Поэтому проверяющий так и не дошёл до Магазина, в замкнутом круге нашего собственного изготовления.

Дальше стало хуже, когда мы присмотрелись, потому что у Магазина нашлось ещё три способа разочаровать. Если список продуктов загружался без пакетов, Магазин считал это «ничего не продаётся» и прятал все предметы, которых у тебя ещё не было. Три набора (из 5 фишек, Темы и Стартовый персонаж) были скрыты с июня. А гость, купивший Набор из 5 фишек, заплатил бы и ничего бы не разблокировал, потому что наш сервер раскладывал наборы на предметы только для вошедших игроков. А гость, конечно, — именно то, кем является проверяющий. Забрать у человека деньги и вручить пустую коробку — отличный финансовый урок. Просто не тот, который мы хотели преподать.

Список исправлений, для протокола. Передать параметр. Сделать так, чтобы оба окна входа цеплялись к активному окну приложения на iPad, потому что плагин привязывался к первому окну, а на iPadOS оно не всегда видимое. Научить Магазин, что ноль загруженных продуктов означает «ещё не загружено», а не «пусто». Вернуть наборы. Научить приложение раскладывать наборы для гостей. И переписать заметки для проверяющих, чтобы простыми словами сказать: для покупки вход не нужен, и вот точный путь к Магазину.

Результатом стала 1.2.9. Её заметка о релизе открывается двумя предложениями, которые стоили нам больше всего: «Исправления входа: „Продолжить с Google“ показывает выбор аккаунта при осознанном нажатии, а нативный вход больше не выдаёт ошибку. Магазин всегда показывает свои товары, даже до загрузки цен». Два предложения, десять дней нашей жизни.

Сборки 32 и 33: о них мы не говорим

Можно подумать, что мы могли просто выпустить исправление. Мы выпустили, дважды, и оба раза неверно. В сборках TestFlight 32 и 33 вход через Google работал, а вход через Apple, собственная кнопка Apple в собственной тестовой программе Apple, падал с AuthorizationError 1000.

Причина очевидна потом и невидима до. Права (entitlements) путешествуют в подписи кода. Наш скрипт загрузки архивировал приложение с отключённой подписью и оставлял подпись шагу экспорта, который может подписать приложение, но не может дать ему права, которых у него никогда не было. Права для входа через Apple в сборку так и не попали. На языке разработчиков приложение вышло из дома без штанов.

Теперь скрипт загрузки подписывает на этапе архива и отказывается загружать любой архив, в подписи которого нет нужных прав. Мы построили вышибалу. Он проверяет документы. Сборки 32 и 33 мертвы, а сборка 34, одетая как положено, — та, что мы отправили Apple обратно.

А потом Apple сказала «да».

Горячая штучка

К 24 сентября игроки говорили нам, что их телефоны нагреваются. iPhone 15, iPhone 16 Pro Max, а веб-версия тоже была чуть тёплой. Мы бы с радостью сказали, что это сырая сексуальность сложного процента. Это был таймер.

Игра тикала счётчиком раз в секунду, в любом режиме, и каждый тик перерисовывал всю игру: поле, каждую клетку, каждую панель. Вечно. Тем временем анимированные фишки перерисовывались до 120 раз в секунду на телефонах с быстрыми экранами, чтобы нарисовать анимацию в 30 кадров в секунду. Размытие на весь экран за каждой картой пересчитывалось на каждом кадре, потому что под ним всё время двигалась фишка. А свечение, из-за которого поле выглядело живым, анимировало тени, что заставляет перерисовывать каждый кадр.

Мы починили все четыре. Счётчик стал одним тайм-аутом. Фишки рисуют только целые кадры и встают на паузу, когда они за экраном, при уменьшении движения или когда их закрывает карта. Свечение и кольца анимируют прозрачность и положение вместо теней, и пульсируют три раза, а потом отдыхают. Простой на поле упал с 624 мс до 15 за десять секунд безголового тестирования. С открытой картой и фишкой-драконом на поле он упал с 1 188 мс до 11. Наши анимации теперь демонстрируют больше самообладания, чем мы проявляли где-либо ещё в этом проекте.

Выпущено как 1.2.10, с заголовком «Телефоны прохладнее», вместе с более честным правилом увольнения. Останавливается только твой оклад, когда тебя увольняют. Пассивный доход продолжает платить, а счета всё равно нужно оплачивать. Быть уволенным должно быть чувствительно. Это не должно удалять твою подработку.

Бухгалтерская книга: все заметки о релизах подряд

Заметки о релизах мы храним в одном файле, том самом, из которого питаются оба магазина. Если прочитать их по порядку, получается странный дневник, и вот он, с добавленным подтекстом. Даты — это даты коммитов. В файле нет записей между 1.0.1 и 1.2.6, так что всё, что случилось между ними, случилось без дневника. Номер каждой версии ниже ведёт на её собственный пост.

1.0.0

Первый релиз Moneyflow. Строй финансовую империю на недвижимости, акциях и бизнесе. Вырвись из офисной рутины, выйди на Скоростную дорожку и гонись за своими мечтами.

Искренне, коротко и слегка в ужасе. Посмотри, какой она была маленькой.

1.0.1

Google Play Веб-покупки теперь доступны на playmoneyflow.com. Улучшена стабильность и удобство по всему приложению.

App Store Улучшены стабильность и производительность. Исправлены разные ошибки на панели финансового отчёта и в анимации кубиков.

Одна версия, два набора заметок. У магазинов разные представления о том, что можно говорить людям, поэтому мы держим по набору на каждый и стараемся их не путать.

1.2.6

Налоги введены: подоходный налог с зарплаты, 15% с пассивного дохода, 15% налога на прирост капитала с прибыльных продаж. Персонажи теперь получают реальные американские зарплаты 2025 года. Аренда и доходность бизнеса следуют за экономикой — скудны в кризис, щедры в бум.

Появляется налоговая. Никто об этом не просил, и всем это было нужно. Любая доходность в игре теперь оценивается после налогов, потому что только она и имеет значение.

1.2.7

Торгуйся по сделкам, предложениям и условиям кредита: один раз подбрасывается монета, на 20% лучше или на 20% хуже. Выбирай, какую недвижимость продать в «Борьбе за недвижимость» и какие активы отдать при разводе — или подпиши брачный договор.

Торг в невинной первой форме. А ещё первое появление брачного договора, что многое говорит о том, что было у нас на уме.

1.2.8 7 сентября

Торгуйся дважды: поторгуйся, а потом ещё раз — но собеседник может уйти (10%, затем 15%). Карты теперь подходят твоей жизни: никакого развода до свадьбы, никакой продажи акций без акций. Развод делит чистое имущество, а бывший супруг может взять на себя кредиты.

Романтичная. Попросишь дважды — и они обидчивы. До этой версии колода могла выдать развод до свадьбы, а это хаотичнее, чем часовня в Вегасе. Это ещё и версия, которая привела нас к дверям Apple.

1.2.9 22 сентября

Исправления входа: «Продолжить с Google» показывает выбор аккаунта при осознанном нажатии, а нативный вход больше не выдаёт ошибку. Магазин всегда показывает свои товары, даже до загрузки цен.

Написана под давлением двух отказов и одного пропущенного параметра.

1.2.10 26 сентября

Телефоны прохладнее: игра больше не заставляет твоё устройство работать на износ, пока ты играешь. Анимации в простое пульсируют несколько раз и затихают, а поле перестаёт перерисовываться каждую секунду. Увольнения честнее: останавливается только оклад, пассивный доход продолжает приходить, а расходы по-прежнему нужно платить в пропущенные зарплаты.

Та, в которой мы перестали давать твоему телефону температуру.

1.2.11 26 сентября

Новое в меню покупок: городская квартира, химчистка и мотель у трассы. … У каждой карты своя иллюстрация, а варианты выбора расположены прямо под картой. Приглашай друзей в приватную комнату мультиплеера.

Самый насыщенный релиз и один из самых недолгих, потому что в тот же вечер вышла 1.2.12. Приватные комнаты — главное для всех, у кого есть друзья: хост, от двух до четырёх мест и код из шести символов.

1.2.12 26 сентября

Не хватает денег? Теперь ты сам выбираешь, как покрыть нехватку, и видишь, как близко банкротство: экстренные кредиты подряд, запас для займов и сколько зарплат осталось. Экстренные кредиты теперь стоят дешевле кредитной карты.

Банкротство теперь идёт с обратным отсчётом, а это самый дружелюбный из известных нам способов научить страху. Экстренные кредиты теперь стоят дешевле кредитной карты, а это больше, чем сделает для тебя реальная жизнь. Ещё исправлено: кубики раньше бросались сами после закрытия карты, что было либо ошибкой, либо нашей самой пассивно-агрессивной функцией.

1.3.0 27 сентября

24 новые карты, от мотеля у трассы и SaaS-компании до «Игры на понижение», плюс редкость: теперь выпадают необычные и редкие карты. Скрой карту, чтобы посмотреть на поле, а потом нажми «К карте». Увольнения и ЧП больше нельзя закрыть.

Двадцать четыре новые карты, система редкости и, тихо, самое важное изменение месяца: карты теперь приходят с сервера. Об этом ниже.

1.3.1 27 сентября

Займы под залог активов: любой объект недвижимости, бизнес или акции без кредита теперь могут обеспечить более дешёвый кредит с выплатой только процентов по рыночной ставке плюс 0,5%.

Опять плечо. Это финансовая игра, и мы ничего не можем с собой поделать. Она вышла после 1.3.0, позже в тот же день.

1.4.0 1 октября

Новые боты уровня «Профи» планируют каждый ход и читают экономику, и теперь любой бот может покупать мечты, побеждать и занимать под залог своих активов. Экономика влияет сильнее: ставки следуют циклу подъём-спад, в рецессию снижаются налоги, а арендная плата с твоих активов растёт в подъём и падает в рецессию.

Та, в которой боты научились побеждать. До сих пор ни один из них не мог, потому что ни один никогда не покупал мечту. Пришли боты «Профи», экономика начала двигать ставки, налоги и аренду в такт своему настроению, а приложение выучило ещё восемь языков.

1.4.1 1 октября

… Ипотека теперь гасится за 25 лет, бизнес-кредиты за 15, автокредиты за 6; по банковским кредитам платятся только проценты, а занимать можно, пока платежи не дойдут до 67% дохода. …

У ипотеки наконец есть дата окончания. Работа над кредитами появилась после того, как 1.4.0 была уже собрана, поэтому вышла как 1.4.1 в тот же вечер, вместе с новостной карточкой на главном экране.

1.4.2 1 октября

Одна ошибка, исправленная меньше чем через двадцать минут после 1.4.1: кнопка «Бридж-кредит» теперь предлагает ту сумму, которую банк действительно одобрит. У неё нет собственных заметок для магазинов.

Выходные пяти версий.

Суббота, 26 сентября

Воскресенье, 27 сентября

Время коммитов, по времени Софии. Не каждая версия дошла до каждого магазина под собственным номером: в Google Play 1.2.12 ушла в продакшен вместо 1.2.11, а в iOS была отправлена вместо неё. За те же выходные колода пополнилась 130 иллюстрациями, нарисованными кодом.

Лучшее обновление — то, которое никому не нужно одобрять

К концу тех выходных мы узнали кое-что полезное. Самая медленная часть выпуска обновления — не его сборка. Это ожидание, пока магазин на него посмотрит. Поэтому 1.3.0 сделала кое-что иное: научила приложение принимать доставки.

Новые карты теперь приходят с наших серверов, так что большинству нового контента обновление приложения больше не нужно. Чтобы поставить механику, потребовался один релиз приложения. После этого новые карты — это деплой, переводы и иллюстрации включены.

Магазин работает так же. Apple проверяет новую покупку в приложении отдельно, без новой сборки, поэтому новой фишке тоже не нужна новая версия.

Хитрая часть — страховка. Никому не выпадет карта, которую его приложение не умеет разыграть, поэтому старые и новые версии могут сидеть за одним столом без проблем. Когда мы придумываем действительно новую механику, мы всё равно встаём в очередь, как все.

Тот же релиз принёс редкость, а это значит, что некоторые карты выпадают гораздо реже других. Насколько реже — наш секрет, но самые редкие появляются примерно так же часто, как App Review проходит с первого раза. Нам выпала обычная.

Табло

Для тех, кто любит таблицы.

Что мы сказали бы себе в самом начале

То, что раньше было вечером кликов, теперь — повышение версии, заметка и горсть команд на магазин. Ожидание — единственное, что мы не можем автоматизировать. Всё остальное вошло в этот список.

  1. Сначала добавляй версию в отправку, потом покупки в приложении. Apple позволит сделать наоборот, а потом откажется объяснить почему.
  2. Пиши заметки для проверяющего так, будто он никогда не видел приложение. У него сорок секунд и iPad, и он следует заметкам буквально. Дай ему точный путь ко всему.
  3. Никогда не ставь вход перед своим Магазином. У гостей тоже есть кошельки, а проверяющие — гости.
  4. Подписывай архив, а потом сделай так, чтобы скрипт отказывался загружать тот, в котором нет прав. Построй себе вышибалу.
  5. Пусть пропавшие ключи кричат. Сборка 30 вышла без ключа платежей, и ничего громко не пожаловалось, так что Магазин был просто пустым. Тихий сбой — это отказ с задержкой.
  6. Тестируй на обеих платформах, даже если код общий. Android простил то, от чего iOS отказался, и у одной строки кода оказалось два разных характера.
  7. Переименовывай продукты, но никогда их ID. Названия — это текст. ID — это контракты.
  8. Автоматизируй, делай повторяемым, записывай. У API Apple порой просто бывает момент, так что перезапусти, прежде чем отлаживать. Наши инструкции существуют, потому что мы всё забыли дважды.
  9. Держи отдельные заметки о релизе, когда у магазинов отдельные правила. Одна версия, разные предложения.
  10. Отдавай контент с сервера, а очередь магазина оставляй для новых механик. Лучшее обновление — то, которое никому не нужно одобрять.
  11. Тестируй на горячем железе, которое действительно есть у твоих игроков. Симулятор никогда не краснел. iPhone 16 Pro Max покраснел.
  12. Не давай серверу спать, пока проверяющий в городе. Спящий сервер выглядит точно как сломанная кнопка.

Ну же, прокатись с нами

Moneyflow бесплатна в App Store, бесплатна в Google Play и бесплатна в любом браузере. Рекламы нет, а чтобы начать, аккаунт не нужен. Всё в Магазине косметическое. Ничто в нём не помогает победить, а в игре про деньги это либо очень принципиально, либо очень плохой бизнес.

Что дальше? Больше карт, которые теперь приходят с сервера, больше способов играть с друзьями и, если вселенная будет добра, одна полная неделя без номера версии.

Скачать в App Store Скачать в Google Play Играть в браузере

До встречи на поле.