|
1 | 1 | # SW Площадки |
2 | 2 | [Ссылка на приложение в AppStore](https://workout.su/ios) |
3 | 3 |
|
4 | | -## Установка и настройка проекта |
5 | | -1. Клонировать репозиторий |
6 | | -2. В терминале перейти в папку с проектом |
7 | | -```shell |
8 | | -cd SwiftUI-WorkoutApp |
9 | | -``` |
10 | | -3. Настроить адрес папки с хуками `SwiftUI-WorkoutApp/githooks` |
11 | | -```shell |
12 | | -git -C /*путь_к_репозиторию*/ config core.hooksPath ./githooks |
13 | | -``` |
14 | | -4. Дать разрешение на запуск хука `pre-push` |
15 | | -```shell |
16 | | -chmod +x SwiftUI-WorkoutApp/githooks/pre-push |
17 | | -``` |
18 | | -5. Открыть проект в `Xcode` и дождаться загрузки зависимостей |
19 | | -6. Проект готов к работе! |
20 | | - |
21 | | -## Помощь проекту |
22 | | -1. Для доработок создаем **issue** с описанием задачи |
23 | | -2. Доработки делаем в отдельных ветках |
24 | | -3. Для каждого **PR** необходимо оставить описание на русском языке по аналогии со старыми **PR** |
25 | | -4. Вопросы по iOS-приложению решаем с Oleg991 в [почте](mailto:o.n.eremenko@gmail.com?subject=[GitHub]-SwiftUI-WorkoutApp), [телеграм](http://t.me/oleg991) или в **issue** с подробным описанием проблемы |
26 | | -5. Вопросы по бэкенду/сайту - c Антоном в [почте](mailto:anton@workout.su?subject=[GitHub]-SwiftUI-WorkoutApp) или в **issue** с подробным описанием проблемы |
27 | | - |
28 | | -## Шпаргалка |
29 | | -### Настройка базовых параметров приложения |
30 | | -`Xcode -> SwiftUI-WorkoutApp -> Target: SwiftUI-WorkoutApp -> General` |
31 | | -- `Display Name` - название приложения на экране смартфона |
32 | | -- `Version` - версия приложения для магазина |
33 | | -- `Build` - версия сборки для `TestFlight` |
34 | | - |
35 | | -### Публикация приложения |
36 | | -#### TestFlight |
37 | | -1. Скачать актуальную версию репозитория |
38 | | - - Если ранее не скачивал, можно скачать по зеленой кнопке сверху с текстом `Code -> Open with Xcode` |
39 | | - - Если ранее скачивал, то открываешь `Xcode`, в верхней панели нажать `Source Control -> Pull` |
40 | | -2. Открыть `Xcode` и дождаться загрузки зависимостей; при возникновении ошибок можно: |
41 | | - - почистить `Derived Data` и память билда (`command + shift + k`) |
42 | | - - обновить зависимости (`File -> Packages -> Reset/Resolve/Update`) |
43 | | -3. В верхней панели Xcode сменить девайс на `Any iOS Device` |
44 | | -4. В верхней панели нажать `Product -> Archive` |
45 | | -5. Дождаться архивации, в открывшемся окне со сборками выбрать нужную и нажать **Distribute App** |
46 | | -6. Пройти по всем шагам и снять галку с автоматического изменения версии сборки на одном из финальных шагов |
47 | | - |
48 | | -#### AppStore |
49 | | -1. Открыть страницу с приложением в **AppstoreConnect** |
50 | | -2. В левом меню рядом с версией в статусе **Готово к продаже** нажать `+` и добавить новую версию |
51 | | -3. Заполнить поле **Что нового в этой версии** |
52 | | -4. Ниже в разделе **Сборка** выбрать нужную сборку из `TestFlight` |
53 | | -5. Ниже на странице проверить галки |
54 | | - - *Выпустить эту версию автоматически* |
55 | | - - *Выпустить обновление сразу для всех пользователей* |
56 | | - - *Сохранить текущую оценку* |
57 | | -6. Нажать сверху справа кнопку **Сохранить** |
58 | | -7. Отправить приложение на проверку |
59 | | - |
60 | | -### Скриншоты |
61 | | -1. Генерируем скриншоты при помощи `Fastlane` ([документация](https://docs.fastlane.tools/getting-started/ios/setup/)) |
62 | | -2. Настройки для генерации скриншотов находятся в [Snapfile](./fastlane/Snapfile) ([документация](https://docs.fastlane.tools/actions/snapshot/)) |
63 | | -3. Генерация скриншотов выполняется командой в папке с проектом (команда может меняться в зависимости от способа установки `Ruby`/`fastlane`) |
64 | | -```shell |
65 | | -rbenv exec fastlane snapshot |
66 | | -``` |
67 | | -4. Для генерации скриншотов **необходимо наличие в Xcode симуляторов с нужной версией iOS** в соответствие с настройками в [Snapfile](./fastlane/Snapfile) |
68 | | -5. Если тесты падают с ошибкой при запуске через `fastlane`, нужно убедиться, что при ручном запуске тестов из `Xcode` они успешно проходят во всех локализациях, используемых для создания скриншотов |
69 | | -6. Готовые скриншоты сохраняются в папке [screenshots](./fastlane/screenshots) |
70 | | - |
71 | | -| Список площадок | Площадка | Прошедшие мероприятия | Мероприятие | Профиль | |
72 | | -| --- | --- | --- | --- | --- | |
73 | | -| <img src="./fastlane/screenshots/ru/iPhone 16 Pro Max-1-sportsGroundsList.png"> | <img src="./fastlane/screenshots/ru/iPhone 16 Pro Max-2-sportsGroundDetails.png"> | <img src="./fastlane/screenshots/ru/iPhone 16 Pro Max-3-pastEvents.png"> | <img src="./fastlane/screenshots/ru/iPhone 16 Pro Max-4-eventDetails.png"> | <img src="./fastlane/screenshots/ru/iPhone 16 Pro Max-5-profile.png"> | |
74 | | - |
75 | | -#### Модели девайсов, используемые для скриншотов |
76 | | -По состоянию на 2025 год Apple берет за основу скриншоты для диагонали 6.9 (или 6.7) дюймов и масштабирует их под все остальные размеры экранов, то есть при желании можно использовать для скриншотов только один девайс. |
77 | | -Поскольку в этом проекте подключен и работает `fastlane snapshot`, используем три девайса: |
78 | | -- iPhone 16 Pro Max |
79 | | -- iPhone 16 pro |
80 | | -- iPhone SE (3rd generation) |
81 | | - |
82 | | -Список всех существующих девайсов есть [тут](https://www.ios-resolution.com). |
83 | | - |
84 | | -### Форматирование кода |
85 | | -- Используем [swiftformat (0.55.5)](https://github.com/nicklockwood/SwiftFormat) для форматирования кода |
86 | | -- Правила форматирования перечислены в файле [.swiftformat](.swiftformat) |
87 | | -- Все правила можно найти [тут](https://github.com/nicklockwood/SwiftFormat/blob/master/Rules.md) |
88 | | - |
89 | | -#### Как это работает |
90 | | -1. Перед каждым пушом должен выполняться хук, проверяющий необходимость форматирования кода |
91 | | -2. При нарушении правил форматирования кода, гит выдаст ошибку и напишет команду, которую нужно выполнить для запуска `swiftformat` |
92 | | - |
93 | | -#### Как обновить `swiftformat` |
94 | | -1. Переходим на [страницу с релизами](https://github.com/nicklockwood/SwiftFormat/releases) |
95 | | -2. Скачиваем `swiftformat.zip` |
96 | | -3. Заменяем в папке с проектом старый файл `swiftformat` на новый |
97 | | -4. Если при первом запуске форматирования после обновления файла система выдает алерт и не запускает скрипт, даем разрешение на запуск этого файла в `системных настройках -> конфиденциальность и безопасность` |
98 | | - |
99 | 4 | ## Реализованный функционал |
100 | 5 | - Большинство возможностей требуют подключения к интернету, но некоторые фичи доступны оффлайн |
101 | 6 | - Звездочкой отмечены фичи только для авторизованных пользователей |
@@ -165,3 +70,105 @@ rbenv exec fastlane snapshot |
165 | 70 | - Просмотр текущей версии приложения |
166 | 71 | - Перейти на сайт магазина workout |
167 | 72 | - Просмотр логов сетевых запросов (только в режиме разработки) |
| 73 | + |
| 74 | +## Помощь проекту |
| 75 | +Прежде чем что-то делать, ознакомься с [правилами](.github/CONTRIBUTING.md), пожалуйста. |
| 76 | + |
| 77 | +### Установка и настройка проекта |
| 78 | +1. Убедись, что у тебя установлен Xcode 16+ |
| 79 | +2. Клонируй репозиторий |
| 80 | +3. В терминале перейди в папку с проектом |
| 81 | +```shell |
| 82 | +cd SwiftUI-WorkoutApp |
| 83 | +``` |
| 84 | +4. Настрой гит хуки |
| 85 | +```shell |
| 86 | +# Активируем локальные хуки для этого репозитория |
| 87 | +git config core.hooksPath ./githooks |
| 88 | + |
| 89 | +# Даем права на выполнение pre-push хука |
| 90 | +chmod +x githooks/pre-push |
| 91 | +``` |
| 92 | +5. Открыть проект в через файл `SwiftUI-WorkoutApp.xcodeproj` и дождаться загрузки зависимостей |
| 93 | +6. Проект готов к работе! |
| 94 | + |
| 95 | +#### Что делает pre-push хук |
| 96 | +Хук выполняет двухэтапную проверку перед отправкой изменений: |
| 97 | +1. Блокирует прямой `push` в ветку `main` |
| 98 | +2. Запускает `SwiftFormat` в режиме линтера: если нарушены правила форматирования кода, вылезет ошибка, подробнее можно почитать [тут](#форматирование-кода) |
| 99 | + |
| 100 | +### Форматирование кода |
| 101 | +- Используем [SwiftFormat (0.55.5)](https://github.com/nicklockwood/SwiftFormat) для форматирования кода |
| 102 | +- Правила форматирования перечислены в файле [.swiftformat](.swiftformat) |
| 103 | +- Все правила можно найти [тут](https://github.com/nicklockwood/SwiftFormat/blob/master/Rules.md) |
| 104 | +- Для запуска форматирования нужно в папке с проектом выполнить команду (точка после пробела тоже нужна): |
| 105 | +```shell |
| 106 | +./swiftformat . |
| 107 | +``` |
| 108 | + |
| 109 | +#### Как это работает |
| 110 | +1. Перед каждым пушом должен выполняться хук, проверяющий необходимость форматирования кода |
| 111 | +2. При нарушении правил форматирования кода, гит выдаст ошибку и напишет команду, которую нужно выполнить для запуска `SwiftFormat` |
| 112 | + |
| 113 | +#### Как обновить SwiftFormat |
| 114 | +1. Переходим на [страницу с релизами](https://github.com/nicklockwood/SwiftFormat/releases) |
| 115 | +2. Скачиваем `swiftformat.zip` |
| 116 | +3. Заменяем в папке с проектом старый файл `swiftformat` на новый |
| 117 | +4. Отправляем **PR** с изменениями |
| 118 | +5. Если при первом запуске форматирования после обновления файла система выдает алерт и не запускает скрипт, даем разрешение на запуск этого файла в `системных настройках -> конфиденциальность и безопасность` |
| 119 | + |
| 120 | +## Шпаргалка |
| 121 | +### Настройка базовых параметров приложения |
| 122 | +`Xcode -> SwiftUI-WorkoutApp -> Target: SwiftUI-WorkoutApp -> General` |
| 123 | +- `Display Name` - название приложения на экране смартфона |
| 124 | +- `Version` - версия приложения для магазина |
| 125 | +- `Build` - версия сборки для `TestFlight` |
| 126 | + |
| 127 | +### Публикация приложения |
| 128 | +#### TestFlight |
| 129 | +1. Скачать актуальную версию репозитория |
| 130 | + - Если ранее не скачивал, можно скачать по зеленой кнопке сверху с текстом `Code -> Open with Xcode` |
| 131 | + - Если ранее скачивал, то открываешь `Xcode`, в верхней панели нажать `Source Control -> Pull` |
| 132 | +2. Открыть `Xcode` и дождаться загрузки зависимостей; при возникновении ошибок можно: |
| 133 | + - почистить `Derived Data` и память билда (`command + shift + k`) |
| 134 | + - обновить зависимости (`File -> Packages -> Reset/Resolve/Update`) |
| 135 | +3. В верхней панели Xcode сменить девайс на `Any iOS Device` |
| 136 | +4. В верхней панели нажать `Product -> Archive` |
| 137 | +5. Дождаться архивации, в открывшемся окне со сборками выбрать нужную и нажать **Distribute App** |
| 138 | +6. Пройти по всем шагам и снять галку с автоматического изменения версии сборки на одном из финальных шагов |
| 139 | + |
| 140 | +#### AppStore |
| 141 | +1. Открыть страницу с приложением в **AppstoreConnect** |
| 142 | +2. В левом меню рядом с версией в статусе **Готово к продаже** нажать `+` и добавить новую версию |
| 143 | +3. Заполнить поле **Что нового в этой версии** |
| 144 | +4. Ниже в разделе **Сборка** выбрать нужную сборку из `TestFlight` |
| 145 | +5. Ниже на странице проверить галки |
| 146 | + - *Выпустить эту версию автоматически* |
| 147 | + - *Выпустить обновление сразу для всех пользователей* |
| 148 | + - *Сохранить текущую оценку* |
| 149 | +6. Нажать сверху справа кнопку **Сохранить** |
| 150 | +7. Отправить приложение на проверку |
| 151 | + |
| 152 | +### Скриншоты |
| 153 | +1. Генерируем скриншоты при помощи `Fastlane` ([документация](https://docs.fastlane.tools/getting-started/ios/setup/)) |
| 154 | +2. Настройки для генерации скриншотов находятся в [Snapfile](./fastlane/Snapfile) ([документация](https://docs.fastlane.tools/actions/snapshot/)) |
| 155 | +3. Генерация скриншотов выполняется командой в папке с проектом (команда может меняться в зависимости от способа установки `Ruby`/`fastlane`) |
| 156 | +```shell |
| 157 | +rbenv exec fastlane snapshot |
| 158 | +``` |
| 159 | +4. Для генерации скриншотов **необходимо наличие в Xcode симуляторов с нужной версией iOS** в соответствие с настройками в [Snapfile](./fastlane/Snapfile) |
| 160 | +5. Если тесты падают с ошибкой при запуске через `fastlane`, нужно убедиться, что при ручном запуске тестов из `Xcode` они успешно проходят во всех локализациях, используемых для создания скриншотов |
| 161 | +6. Готовые скриншоты сохраняются в папке [screenshots](./fastlane/screenshots) |
| 162 | + |
| 163 | +| Список площадок | Площадка | Прошедшие мероприятия | Мероприятие | Профиль | |
| 164 | +| --- | --- | --- | --- | --- | |
| 165 | +| <img src="./fastlane/screenshots/ru/iPhone 16 Pro Max-1-sportsGroundsList.png"> | <img src="./fastlane/screenshots/ru/iPhone 16 Pro Max-2-sportsGroundDetails.png"> | <img src="./fastlane/screenshots/ru/iPhone 16 Pro Max-3-pastEvents.png"> | <img src="./fastlane/screenshots/ru/iPhone 16 Pro Max-4-eventDetails.png"> | <img src="./fastlane/screenshots/ru/iPhone 16 Pro Max-5-profile.png"> | |
| 166 | + |
| 167 | +#### Модели девайсов, используемые для скриншотов |
| 168 | +По состоянию на 2025 год Apple берет за основу скриншоты для диагонали 6.9 (или 6.7) дюймов и масштабирует их под все остальные размеры экранов, то есть при желании можно использовать для скриншотов только один девайс. |
| 169 | +Поскольку в этом проекте подключен и работает `fastlane snapshot`, используем три девайса: |
| 170 | +- iPhone 16 Pro Max |
| 171 | +- iPhone 16 pro |
| 172 | +- iPhone SE (3rd generation) |
| 173 | + |
| 174 | +Список всех существующих девайсов есть [тут](https://www.ios-resolution.com). |
0 commit comments