«По душе» на iPhone
Дорога до TestFlight
План работы со статусами. Я обновляю эту страницу по ходу работы.
Обновлено 25 сентября, 22:14 по Москве
Сейчас
Шаг 4 из 6. Части для iPhone и первая сборка
Готово 5 частей из 6. Сейчас: iPhone 0.2.0 (260925.2150) в TestFlight и Android 0.2.0-260925.2156 на стенде — в них все 32 правки по вашему списку от 25 сентября. Дальше — личный чат и подписка на человека (DUSHA-163, DUSHA-164), потом ручная проверка iPhone и сверка экранов на iPhone (шаг 5); этап 3 ускорения — только после вашего «да».
Помощники
Пульт для симулятора iPhone шаг 4
Делает способ нажимать на экран симулятора iPhone из скрипта, чтобы я мог пройти приложение руками: нажатия, прокрутка, ввод текста.
Тексты, картинки, шрифты шаг 3, готово
Готово и влито: 619 из 623 экранов бит в бит, у 4 — только системная полоса жеста; QR-рамку исправил.
Связь с сервером шаг 3, готово
Готово и влито: вход, афиша, запись, чат с фото, профиль и селфи проверены руками на стенде.
Даты и мелочи шаг 3, готово
Готово и влито: 141 кадр с датами бит в бит, тексты по-русски те же буква в букву.
Новый движок шаг 2, готово
Готово и влито: 610 из 623 экранов бит в бит; у 12 экранов фильтров отличается сглаживание края тонкой рамки мини-карты — решу отдельно.
Готово раньше шаг 4
Рисование, карта, камера селфи и оболочка приложения для iPhone сделаны и подключены.
- 1Подготовка кода
- 2Новый движок
- 3Общий проект
- 4Части для iPhone и первая сборка
- 5Сверка на iPhone
- 6Финальная сборка в TestFlight
- Первая сборка в TestFlight
- 24 сентября — в TestFlight, обновление 21:30
- Сборка, сверенная по всем экранам
- около 13–15 октября
- Моей работы всего
- 70–95 часов
Работа идёт в отдельной ветке поверх сборки 22 сентября, поэтому Android-сборки для тестировщиков это не задевает. Правки соседей по Android сюда пока не входят: по вашему решению добавим их после того, как вы посмотрите iPhone. В конце Android и iPhone собираются из одного кода.
Как это выглядит на iPhone
Снимки с симулятора iPhone 17e, 24 сентября вечером: та же сборка, что пойдёт в TestFlight, вход на тестовый стенд dusha под тестовым пользователем. Экраны нажимались руками, по одному.
План
Подготовка кода
ИдётОтделяю в коде всё, что умеет только Android. Внешне Android не меняется, и я проверяю это после каждой части: снимаю экраны старой и новой сборкой и сравниваю их попиксельно.
Части шага · готово 11 из 12
- Готово
Рисование: тени, свечения, размытия
Проверено: 38 экранов совпали со старой сборкой бит в бит.
- Готово
Хранение входа и настроек
Проверено: после обновления поверх старой версии вход и настройки сохраняются.
- Готово
Разрешения, фото, камера, селфи, геопозиция
Проверено руками на эмуляторе со стендом. Фото на сервере стоят ровно.
- Готово
Отправка ошибок приложения на сервер
Проверено: сборка и тесты, приложение запускается. Правила текста журнала общие для Android и iPhone.
- Идёт
Размер экрана и отступы
Окно диалогов разделено на Android и iPhone; отступы на iPhone проверю на симуляторе.
- Готово
Карта
Проверено руками: карта афиши, кнопки масштаба, «к моей локации», радиус «Рядом», смена города, карта события, выбор места в форме, мини-карты.
- Готово
«Поделиться» и открытие приложения по ссылке
«Поделиться», «в картах» и копирование ссылки идут через общий код; проверено руками. Ссылки podushe:// — при переезде навигации в общую часть.
- Готово
Служебный журнал для разработчика
Сделано при переносе экранов: журнал разработчика общий, на iPhone пишет в консоль Xcode.
- Готово
Шрифты, тексты и картинки
Сделал помощник: 619 из 623 экранов бит в бит со старой сборкой, у 4 отличается только системная полоса жеста; QR-рамку исправил.
- Готово
Даты и время
Сделал помощник: общий код, те же тексты по-русски; 141 кадр с датами бит в бит.
- Готово
Связь с сервером, загрузка картинок, QR-код
Сделал помощник: проверено руками на стенде — вход, афиша, запись, чат с фото, профиль, селфи; QR клетка в клетку.
- Готово
Мелкие доработки
Сделано вместе с датами, связью с сервером и переносом экранов.
- Готово
Новый движок
ГотовоДелает: помощник
Перевожу Android на версию движка, которая работает и на iPhone. После этого перепроверяю все 623 экрана с Figma.
Общий проект
ГотовоДелает: я
Переношу код в общую часть. Дня тишины не нужно: правки соседей по вашему решению добавим позже. Уже сделано: модуль приложения общий для Android и iPhone, готовые части для iPhone подключены, фреймворк приложения для iPhone собирается. 38 экранов Android после переноса совпали с экранами до переноса. Дальше экраны переезжают в общую часть, как только помощники закончат тексты, связь с сервером и даты.
Части для iPhone и первая сборка
ИдётДелает: два помощника и я, заранее
Дописываю то, что на iPhone устроено иначе: карту, камеру, фото, геопозицию, разрешения. Уже готовы и собираются под iPhone мои черновики настроек стенда, хранилищ, разрешений, выбора фото и камеры, подготовки снимков и геопозиции; помощники делают рисование и оболочку приложения. Запускаю на симуляторе iPhone. В конце шага выкладываю первую сборку в TestFlight. Настоящего iPhone у меня нет, поэтому карту и камеру на телефоне проверите вы или тестировщики.
Части шага · готово 5 из 6
- Готово
Рисование, карта, камера селфи, фото и разрешения для iPhone
Сделали помощники; рисование и карта сверены с Android — разница глазом не видна.
- Готово
Все экраны — в общей части для Android и iPhone
172 файла; код собирается под обе платформы без ошибок.
- Готово
Первый запуск на симуляторе iPhone
Открывается приветственный экран с фото, значками и кнопкой «Войти».
- Готово
Проверка, что Android не изменился
Все 623 экрана сняты новой сборкой: 615 совпали со старой бит в бит, у 8 отличается только системная полоса жеста внизу (её рисует Android, не приложение). Кадры, которые под нагрузкой снялись чёрными или недорисованными, пересняты — совпали.
- Идёт
Ручная проверка на симуляторе iPhone
Пройдены руками: вход по номеру, афиша на карте и списком, событие, фильтры, профиль, карточки свайпом, создание события, избранные, чаты. Исправлено по ходу: нижние кнопки стояли на 10 pt выше макета; приложение закрывалось при ошибке сети. Дальше — запись на событие, чат, редактирование профиля, селфи.
- Готово
Пробная сборка в TestFlight
Сборка 0.2.0 (260924.1919) обработана Apple и доступна во внутреннем тестировании; приглашение отправлено Николаю на nikolayyy05@icloud.com.
- Готово
Сверка на iPhone
ВпередиСравниваю все 623 экрана iPhone с Figma тем же способом, что и Android, и правлю расхождения.
Финальная сборка в TestFlight
ВпередиВыкладываю сверенную сборку и подключаю тестировщиков. Вы ставите на iPhone приложение TestFlight, открываете приглашение из почты и нажимаете «Установить».
Что понадобится от вас
Ваше «да» на действия в аккаунте Apple
ПолученоПолучено 24 сентября вечером. Сделано: идентификатор «По душе» (com.podushe.app.dusha), новый сертификат подписи команды (у команды их теперь 3 — это последнее свободное место), профиль App Store; сборка подписана.
Готово.
Карточка приложения для TestFlight
ПолученоСоздана 24 сентября вечером: «По душе iCloud», идентификатор com.podushe.app.dusha, SKU podushe-dusha.
Готово.
Подпись сборок на макмини
ПолученоБольше не нужно: подписываю новым сертификатом команды, он хранится на макмини в отдельной связке ключей, пароль пользователя не нужен.
Готово.
Тестировщики
ПолученоНиколай Добросоцкий (nikolayyy05@icloud.com) получил доступ к приложению и добавлен во внутреннюю группу «Тестируем «По душе»» — ей доступны все сборки. Других тестировщиков добавлю по просьбе: нужна почта Apple ID человека из команды.
Готово.
Журнал
В TestFlight сборка 0.2.0 (260925.2150), на стенде Android 0.2.0-260925.2156: все 32 правки по вашему списку от 25 сентября. По ходу финальной проверки на iPhone нашёл и исправил выбор места булавкой: адрес теперь виден сразу.
Вечерние сборки: iPhone 0.2.0 (260925.1609) — в TestFlight, Android 0.2.0-260925.1606 на стенде. Внутри — правки по ручной проверке ускорения (помощники прошли обе сборки, поломок нет): страница события открывается сразу, профиль и чат больше не мигают пустым состоянием. На Android при возврате на «Афишу» карта больше не мелькает пустым полем: до первого кадра поверх лежит её снимок — те же пиксели (проверено записью экрана по кадрам, и со вкладок, и со страницы события). Пустая карточка ленты — цвет карточки вместо круглого силуэта с чёрными углами, в шапке — ваше фото. Тесты: 318 из 318.
Ускорение без изменения дизайна, этапы 1 и 2 (Android и iPhone). Переходы между экранами — как в прототипе Figma: 0,1–0,3 с вместо 0,7 с. Экраны не грузят лишнего: «Чаты» и «Профиль» больше не заводят свою копию афиши, ответы сервера разбираются в фоне, одинаковые одновременные запросы идут одним, списки городов и тем приложение помнит 10 минут, а только что виденное событие открывается сразу. Карта берёт плитки с копии на нашем стенде в России (сервер карт режется у российских провайдеров) и хранит на телефоне до 300 МБ. Лента подгружает следующие карточки заранее. Сверка 623 экранов со сборкой 1816 — как и раньше: 611 совпадают точно, у остальных едва заметен край рамки мини-карты. Сборки: iPhone 0.2.0 (260925.1437) — в TestFlight, Android 0.2.0-260925.1444 на стенде.
По замечанию Николая карта афиши больше не создаётся заново при каждом возврате: одна карта живёт всё время работы приложения, и после «Избранных» или страницы события она на месте сразу — с тем же масштабом и маркерами (Android и iPhone; было и в сборке 1816). На iPhone во время перехода карта больше не пропадает белым полем; касание по маркеру рядом с группой открывает событие, а не приближает карту. Новые сборки: iPhone 0.2.0 (260925.1206) — доступна в TestFlight, Android 0.2.0-260925.1213 на стенде.
Ручной проход Android закончен: помощник прошёл сборку 1816 и новую рядом, экран за экраном — регистрация, профиль, афиша, фильтры, поиск, событие, создание и правка события, запись и отмена, чат события с фото, поддержка, уведомления, настройки, выход и вход. Поломок из-за нового ядра нет; в двух местах новая лучше (касание пустого места прячет клавиатуру, шторка фильтров не закрывается от короткого движения). Кадр календаря переснят — совпал со сборкой 1816 точка в точку: из 623 экранов 611 совпадают точно, у 11 едва заметен край рамки мини-карты, 1 — незаметная разница. Найдены старые ошибки, которые есть и в 1816, — список в разделе «Что нашёл по дороге».
Apple обработала сборку iPhone 0.2.0 (260925.0947) — она доступна в TestFlight группе «Тестируем «По душе»»: открыть TestFlight на iPhone и нажать «Обновить».
Сверка кода со сборкой 1816 (два помощника, каждый файл) и исправления: селфи снова уходит в прежнем размере (было в полтора раза тяжелее); фото из галереи iPhone в формате HEIC теперь видно в кружке профиля (раньше оставался пустым, хотя фото отправлялось); на карте для города без известного центра события снова встают между шапкой и низом; фото для отправки читаются в фоне; на Android удаляется старый кэш картинок до 250 МБ. Новые сборки: iPhone 0.2.0 (260925.0947) в TestFlight и Android 0.2.0-260925.0954 на стенде — обе из одного кода, 316 тестов зелёные.
По замечаниям Николая: на iPhone экраны больше не выезжают справа — плавно проявляются, как на Android; маркеры афиши с фото появляются сразу при каждом возвращении на карту (раньше дорисовывались 2–4 секунды); фильтры на обоих телефонах закрываются свайпом вниз. Селфи больше не уходит дважды при повторном нажатии.
Профиль и статус не сохранялись из-за ошибки сервера на стенде dusha, а не из-за iPhone: если селфи подтверждали несколько раз, сервер падал на чтении профиля. Исправлены и код сервера, и данные на стенде. Новые сборки: iPhone 0.2.0 (260925.0857) в TestFlight и Android 0.2.0-260925.0904 на стенде.
По просьбе Николая: iOS-ветка запушена в git (feature/ios-cmp); в неё влиты сегодняшние правки соседей по Android (чат события, DUSHA-101…113, правки против нагрева, кнопки над навигацией) — переведены на общий код, чтобы работали и на iPhone. Клавиатура при регистрации теперь убирается касанием пустого места, клавишей ввода и нажатием на дату рождения. Обновление 0.2.0 (260924.2123) загружено в TestFlight и обработано Apple.
Apple обработала первую сборку для iPhone — она доступна во внутреннем тестировании TestFlight. Приглашение отправлено Николаю на nikolayyy05@icloud.com: открыть письмо на iPhone и нажать «Начать тестирование».
Первая сборка «По душе» для iPhone загружена в TestFlight: версия 0.2.0, номер 260924.1919, стенд dusha. Администратор создал карточку «По душе iCloud», я открыл Николаю Добросоцкому доступ к приложению и добавил его во внутреннюю группу тестировщиков. Apple обрабатывает сборку, после этого придёт приглашение в TestFlight.
Николай попросил выложить текущую сборку в TestFlight. Сделано: идентификатор «По душе», новый сертификат подписи команды и профиль — по вашему разрешению; сборка для iPhone собрана и подписана. Не хватает только карточки приложения в App Store Connect: её может создать только администратор команды. Проверка Android после переноса закончена: все 623 экрана совпали со старой сборкой, кроме системной полосы жеста на 8 из них.
На симуляторе iPhone приложение входит на тестовый стенд по номеру телефона и показывает живые данные: афишу Москвы на карте и списком, события, фильтры, профиль, карточки, создание события, избранные и чаты. По ходу исправил две мои ошибки: нижние кнопки на iPhone стояли на 10 точек выше макета, и приложение закрывалось, если сервер не ответил. Снимки экранов — в разделе «Как это выглядит на iPhone».
Помощник по картинкам закончил проверку: 619 из 623 экранов Android совпали со старой сборкой бит в бит, у 4 отличается только системная полоса жеста внизу. Нашёл и исправил одно настоящее расхождение: у 5 экранов с QR-кодом край рамки отличался на несколько оттенков — теперь совпадает.
Первый запуск на симуляторе iPhone: приложение открылось и показало приветственный экран «Реальные встречи рядом с тобой» с фото, объёмными значками и кнопкой «Войти». Перед этим весь интерфейс — 172 файла экранов, кнопок и логики — переехал в общую часть, и код впервые целиком собрался и под Android, и под iPhone.
Влита работа помощника по текстам, картинкам и шрифтам: они теперь общие для Android и iPhone. Сборки Android и iPhone проходят, 280 тестов зелёные.
Помощник по связи с сервером закончил: запросы к серверу, чат, загрузка фото, картинки и QR-код теперь на общем коде. Руками на стенде проверены вход, афиша, запись на событие, чат с фото, профиль и селфи; QR совпал со старым клетка в клетку. Его работа влита.
Помощник закончил даты: всё время и даты теперь на общем для Android и iPhone коде, тексты по-русски те же буква в букву, все 141 кадр с датами совпали со старой сборкой бит в бит. Его работа влита в мою ветку, идёт общая сборка.
Вы уточнили: в App Store ничего не выкладываем, только TestFlight. Значит, проверка Apple и требования к публикации (удаление аккаунта, демо-номер для проверяющего, юрист по селфи) сейчас не нужны. Тестирование — внутреннее, для людей из команды в App Store Connect.
Готовые части для iPhone подключены к общему проекту, и фреймворк приложения для iPhone уже собирается. Навигация Android больше не зовёт Android напрямую для карт, «поделиться», копирования ссылки и разрешений. Проверка: 38 экранов после переноса совпали с экранами до переноса; руками проверил карту афиши, радиус, смену города, карту события, «поделиться», «в картах» и копирование ссылки.
Модуль приложения переведён на общий проект для Android и iPhone: Android собирается, все 259 тестов зелёные. Запустил трёх новых помощников на большие переделки, без которых экраны не переедут в общую часть: тексты, картинки и шрифты; связь с сервером; даты. Каждый сверяет свою часть попиксельно или руками.
Вы решили: iPhone делаю поверх сборки 22 сентября, правки соседей добавим после того, как посмотрите iPhone. Это сняло ожидание. Сразу начал перенос в общий проект: модуль приложения теперь общий для Android и iPhone, код пока целиком в Android-части. Соседей предупредил, что ждать меня им не нужно.
Помощник закончил карту для iPhone. На симуляторе iPhone и на Android сняли одни и те же сцены с 98 событиями Москвы: подложка, русские подписи, цвета, группы и «+ ещё N» совпадают, камера встаёт в те же координаты до цифры. Одно отличие в пользу iPhone: подписи маркеров там шрифтом SF Pro, как в макете, а на Android сейчас системным. Жесты пальцем проверим на живом телефоне.
Сосед по нагреву телефонов передал ваше решение: исправления всех выйдут одной общей сборкой, когда закончат. Мой перенос на iPhone пойдёт поверх этой общей сборки, поэтому отдельной версии приложения не будет. Пока жду, дописал для iPhone журнал ошибок и служебный журнал, оба собираются.
Готов черновик камеры селфи для iPhone: превью фронтальной камеры, спуск, переворот, вспышка экраном и фонарь. Он собирается под iPhone; проверить его можно только на живом телефоне. Запустил помощника на карту для iPhone: без неё главный экран на iPhone был бы пустым.
Помощник закончил рисование для iPhone. Сравнил попиксельно 11 сцен на Android и на симуляторе iPhone: на свечениях первого экрана и кольцах «Профиль подтверждён» разница не больше 3 уровней яркости из 255, глазом не видна. Работа обоих помощников по iPhone влита в мою ветку.
Помощник закончил оболочку iPhone-приложения: заглушка запускается на симуляторе, настройки стенда читаются, скрипты загрузки в TestFlight готовы. Проверил аккаунт Apple только чтением: сертификаты действуют до марта 2027, карточки «По душе» пока нет. Появились три просьбы к вам, они вверху раздела «Что понадобится от вас».
Пока соседи правят общие файлы Android, начал части для iPhone: настройки стенда, хранилища, разрешения, выбор фото и камера, подготовка снимков, геопозиция. Всё это уже собирается компилятором под iPhone. На симуляторе проверю, когда помощник закончит оболочку приложения.
Половина части «Карта» готова: общий способ управлять картой для Android и iPhone, правила подложки и мини-карт. Проверил руками: карта афиши, выбор места в форме события и мини-карта города работают как раньше. Вторую половину сделаю, когда соседи закончат правки в файле навигации.
Готова четвёртая часть: отправка ошибок приложения на сервер. Правила текста журнала теперь одни для Android и iPhone. Сборка, тесты и запуск на эмуляторе в порядке.
Вы попросили ускориться. Запустил трёх помощников на части, которые не мешают друг другу и соседям: новый движок (шаг 2), рисование для iPhone и проект iPhone с загрузкой в TestFlight (подготовка шагов 4–6). Сам продолжаю шаг 1 и собираю их работу в одну ветку.
Сделал эту страницу. Обновляю её после каждой части работы.
Проверил новую сборку руками на эмуляторе со стендом. Обновление поверх старой версии сохраняет вход. Геопозиция, фото из галереи и с камеры, селфи, уведомления, переход в настройки и история поиска работают.
Первые три части готовы. Проверка поймала две мои ошибки: тени и свечения рисовались чуть иначе, чем раньше. Обе исправлены до того, как куда-то попали. Итог: 38 экранов совпали со старой сборкой бит в бит.
Разбор и пробы. Выбран способ, при котором iPhone-версия собирается из того же кода, что Android: только так экраны на обоих телефонах будут одинаковыми. Сделана резервная копия всего кода. Начат шаг 1.
Найдено попутно
- «Участвовать» на событиях из открытых данных Минкультуры (около 13 из 100 московских): сервер отвечает отказом, на экране ничего не происходит — записаться нельзя. Нужен сервер.
- Регистрация, «О себе»: надпись «Изменить фото» не нажимается (работает только кружок); анкета стирается, если вернуться на шаг назад; поле «О себе» до прокрутки прячется под кнопкой «Продолжить», и касание по нему отправляет шаг без текста. Только приложение.
- Событие после правки: его страница показывает старое название и фото, пока её не открыть заново; в списке чатов остаётся старое название. Отменённое событие висит в «Мои события → Предстоящие» без пометки «Отменено». В строке участников «и ещё 2» без аватаров. Приложение, для названия чата — сервер.
- Черновик события после переустановки возвращается без фото; подсказки по управлению событием появляются после каждого входа (есть карточка DUSHA-83). Колесо времени не выбирает значение касанием, только прокруткой.
- Поиск ищет по всей стране, а «Ничего не найдено» предлагает события за 400–600 км. После подписки на категорию счётчик подписчиков остаётся 0. Расстояние пишется с точкой: «3.1 км». Поиск и счётчик — скорее сервер, запятая — приложение.
- Уведомления: организатор не узнаёт о новом участнике, о сообщениях в чате уведомлений нет ни у кого. Нужен сервер.
- Настройки: «Кто может видеть» и переключатели Push/SMS/Email не уходят на сервер — хранятся только на телефоне; «Выйти из аккаунта» выходит без вопроса, хотя в макете есть окно «Вы действительно хотите выйти»; опечатка «безопастность». Приложение, для настроек — и сервер.
- Вопросы к продукту и дизайну: в тексте «Поделиться» нет ссылки на событие (у событий нет веб-страницы); неделя в календаре начинается с субботы — так нарисовано в макете.
- Уже исправлено 25 сентября: «Изменить фото» в правке профиля (аватар не менялся, «Сохранить» не включалась) и повторная отправка селфи.
Всё это есть и в сборке 1816 — новое ядро ни при чём: помощник прошёл обе сборки рядом, экран за экраном. Я это не чинил: скажите, что чинить мне, а что завести карточками для команды.