#Приложение Checker. Для запуска необходимо установить [Dart](https://www.dartlang.org/install) - язык программирования и [flutter](https://flutter.io/setup/) - фреймворк для создания кроссплатформенных мобильных приложений на этом языке. Для сборки и запуска приложения используются команды flutter run (собирает debug apk, устанавливает его на устройство) и flutter build (собирает release apk, не устанавливает на устройство). Команды run и build необходимо выполнять с опцией --flavor, чтобы apk файл собирался с необходимыми ресурсами и настройками. Название конкретной flavor передается в аргументе. Все flavors перечислены в файле android/app/build.gradle. #Добавление брендированного приложения Для добавления брендированного приложения с названием %name% необходимо: 1) В каталог assets/ положить изображения %name%_logo.png и %name%_splash.png В качестве splash очень желательно использовать квадрат белого цвета 100x100. 2) В файл pubscpec.yaml в раздел assets/ добавить пути этих изображений. 3) В файл lib/resources.dart в методы ```getPrimaryColor``` и ```getButtonsColor``` добавить цвета необходимые цвета. 4) В файл android/app/build.gradle в раздел productFlavors добавить блок следующего вида: ``` %name% { applicationId 'com.dinect.autobonus' buildConfigField "String", "locale", "\"ru\"" buildConfigField "String", "flavor", "\"%name%\"" buildConfigField "int", "currency", "643" buildConfigField "String", "supportPhone", "\"8-800-234-6064\"" buildConfigField "String", "supportUrl", "\"https://www.auto-club.biz\"" buildConfigField "String", "endpoint", "\"https://pos-api-int.dinect.com/20130701/\"" buildConfigField "String", "appToken", "\"9fec83cdca38c357e6b65dbb17514cdd36bf2a08\"" } ``` где все параметры необходимо заменить на соответствующие приложению значения. 6) В каталог android/app/src/ добавить каталоги %name%/res в которых воссоздать структуру ресурсов аналогичную представленной в каталоге android/app/src/pip/res/: Каталоги mipmap должны содержать иконки, каталоги values должны содержать .xml файлы с названием приложения в следующем формате: ``` %name% ``` Иконки проще всего нарезать тут: https://romannurik.github.io/AndroidAssetStudio/icons-launcher.html В качестве Foreground выбрать иконку приложения размером 512x512, выставить необходимые параметры и скачать архив с нарезанными иконками. После выполнения всех этих пунктов появится возможность собирать приложение как описано выше(flutter run --flavor %name% либо flutter build apk --flavor %name%). #Добавление локализации приложения 1) В каталог assets содержит каталоги values-XX в которых находятся файлы локализаций strings.xml 2) В каталог android/app/src/main/res добавить каталог values-%locale% с единственным файлом strings.xml. Файл должен иметь структуру полностью аналогичную файлу android/app/src/main/res/values/strings.xml, измениться должны только значения для строк. #IOS 0) Установите flutter https://flutter.io/setup-macos/ 1) В Xcode создать target аналогично существующим (Autobonus, Develop, PIP, Dinect). Лучше делать путем дублирования существующих 2) При создании таргета автоматически создается build scheme с таким же именем и привязывается к нему 3) В настройках созданного target прописать bundleId (например com.dinect.something) 4) В файле ios/Runner/AppDelegate.m определить словарь настроек аналогично существующим 5) Для того чтобы сбилдить нужный брэнд в Xcode указать нужную схему При добавлении таргета необходимо в каталог ios 1. дописать структуру с именем таргета в podfile 2. выполнить pod deintegrate rm Podfile.lock rm - rf pods source ~/.bash_profile pod install добаваление аналитики FireBase в ios/ Чтобы добавить для ios приложения GoogleServices.plist нужно через Finder создать в каталоге checker/ios подкаталог с названием проекта и туда положить новый GoogleServices.plist Потом из этого каталога перетащить этот файл в корень проекта. Тащить мышкой в синюю иконку Runner слева над структурой проекта. Появится диалоговое окно, в котором нужно выбрать таргет, в котором этот файл будет доступен. Нужно выбрать нужный проект. В pbproject пропишется, что этот plist относится именно к этому таргету и при сборке таргета будет цепляться нужный plist.