
- Главная
- Каталог
- Интернет технологии
- Мобильная разработка #1
Мобильная разработка #1
Разработка мобильных приложений (app) под Android, iOS.
Подборки с полезной информацией, книги, статьи.
Статистика канала
val apiKey = "sk-proj-12345..."
Потом git push, и вы идете спать.
А утром ваш ключ заблокирован, или с карты списали деньги за чужой трафик.
🤖 Реальность: Боты сканируют публичные репозитории GitHub на наличие строк, похожих на ключи, за секунды после публикации. Удалить коммит не поможет, он уже в кеше у злоумышленников.
Как делать правильно (Middle Way):
Секреты никогда не должны попадать в систему контроля версий (Git). Они должны жить только локально на вашем компьютере.
🤖 Android:
Используйте файл local.properties. Он по умолчанию добавлен в .gitignore.
1. Откройте local.properties и добавьте: MY_API_KEY="ваш_ключ".
2. В build.gradle (app) считайте его и прокиньте в код:
defaultConfig {
buildConfigField("String", "API_KEY", gradleLocalProperties(rootDir).getProperty("MY_API_KEY"))
}
{}
3. В коде используйте: BuildConfig.API_KEY.
🍏 iOS:
Вариантов много, но самый простой для старта:
1. Создайте файл Secrets.xcconfig (или .plist).
2. Сразу же добавьте его в .gitignore.
3. Запишите ключ туда.
4. В настройках проекта (Build Settings) подключите этот конфиг или считывайте файл программно.
🛡 Золотое правило:
Если вы клонируете свой проект на чистый ноутбук, он не должен собраться сразу. Он должен попросить вас создать локальный файл с ключами. Это не баг, это безопасность.
Признавайтесь, случалось случайно комитить пароли или токены? 👇
#security #android #ios #git #tips #middle #safety
👉 @developer_mobilainit
wip
fix crash
fix typo
aaaaa rabotay pls
А потом отправляете это в Pull Request. Тимлид открывает историю и… плачет кровавыми слезами. 🩸
Отличное правило хорошего тона: «Ветка может быть грязной, пока она локальна. Но в main должен уйти чистый и атомарный код».
Вам нужен Git Interactive Rebase. Это магия, которая позволяет переписать историю.
🛠 Как это сделать (Консоль / IDE):
Допустим, вы хотите объединить последние 5 мелких коммитов в один красивый.
1. Пишем в терминале: git rebase -i HEAD~5
2. Откроется редактор со списком ваших коммитов. Перед каждым стоит слово pick.
3. Меняем команды:
pick у самого первого (верхнего) коммита.
pick на squash (или s) - это значит «сплющить» этот коммит с предыдущим.
reword.
4. Сохраняем и закрываем. Git предложит написать одно общее сообщение для нового «супер-коммита».
5. Отправляем на сервер: git push --force (Осторожно! Делайте это только в своей ветке, пока никто другой в ней не работает).
💡 Результат:
Вместо 5 мусорных записей у вас одна красивая: Feature: Added dark mode implementation.
Коллеги на ревью скажут спасибо:
✅ Проще читать изменения.
✅ Если баг - проще откатить один коммит, чем искать в куче мелких.
А вы используете Rebase или предпочитаете честную историю со всеми «фиксами»? 👇
#git #teamwork #middle #tips #tools #bestpractices
👉 @developer_mobilaMainActivity или ProfileViewController, а там... 1500 строк кода. 😱
Там и работа с сетью, и валидация полей, и анимации, и сохранение в базу, и даже форматирование даты. В мире разработки это называется God Object (или Massive View Controller).
Почему это плохо?
1. Невозможно тестировать. Как написать юнит-тест на класс, который делает всё?
2. Сложно менять. Поправил верстку — сломалась база данных.
3. Конфликты при слиянии. В команде двое разработчиков полезли в этот файл — здравствуй, merge conflict на полдня.
🚀 Как лечить (Гайд для перехода в Middle):
Если видишь класс больше 300-400 строк, начинай «резню»:
1. ✂️ Всю логику сети - в Repository.
Во View/Activity не должно быть http-клиентов и JSON-парсинга. Она должна просто сказать: repository.getUsers() и показать спиннер.
2. ✂️ Всю бизнес-логику - в UseCases (Интеракторы).
Валидация пароля, подсчет корзины, фильтрация списков - это чистая логика. Выносите её в отдельные классы (PasswordValidator, CartCalculator).
3. ✂️ Сложный UI - в Custom Views / Child ViewControllers.
Если у вас в адаптере списка 500 строк кода настройки ячеек - вынесите ячейку в отдельный класс с методом bind(data).
💡 Правило одной ответственности (SRP):
Класс должен иметь только одну причину для изменения.
.minimumInteractiveComponentSize(). Он сам добавит невидимые отступы, чтобы дотянуть размер до 48dp.
padding="12dp" к самому ImageView или оберните его в прозрачный контейнер, на который повесьте клик. Не используйте TouchDelegate без крайней нужды, это больно.
🍏 iOS (SwiftUI & UIKit):
.onTapGesture на маленькую иконку.
Image("close").onTapGesture { ... }
Image("close").frame(width: 44, height: 44).contentShape(Rectangle()).onTapGesture { ... } (мы делаем прозрачную рамку вокруг).
point(inside:with:) в кнопке, чтобы она ловила касания за своими пределами.
💡 Лайфхак:
Включите в настройках разработчика на телефоне «Показывать границы элементов» (Show layout bounds). Если вы видите маленькие прямоугольники вокруг кнопок, это повод для рефакторинга.
Заботьтесь о пальцах своих пользователей! А вы спорите с дизайнерами, когда они рисуют слишком мелкие элементы? 👇
#ux #ui #android #ios #tips #mobile #design
👉 @developer_mobilaLog.d("TAG", "Я тут")
Log.d("TAG", "А теперь тут, значение i = $i")
Есть способ элегантнее, который отличает опытного разработчика от новичка - Conditional Breakpoints (Условные точки останова).
Они останавливают выполнение программы только тогда, когда выполняется определенное условие.
Как это сделать за 5 секунд:
🤖 Android Studio (IntelliJ IDEA):
1. Поставьте обычный красный брейкпоинт.
2. Нажмите на него правой кнопкой мыши.
3. В поле "Condition" напишите условие на языке Kotlin/Java.
Пример: item.id == 87 или user.name.contains("Test") && i > 50
4. Готово! Студия проигнорирует первые 86 итераций и остановится точно там, где нужно.
🍎 Xcode:
1. Поставьте синий брейкпоинт.
2. Нажмите на него правой кнопкой (или двойной клик) -> "Edit Breakpoint".
3. В поле "Condition" пишите условие на Swift.
Пример: indexPath.row == 87
💡 Бонус-фича для тех, кто не любит останавливаться:
В настройках брейкпоинта уберите галочку Suspend (Остановить) и поставьте галочку Log Message (Evaluate and log).
Теперь IDE будет сама писать в консоль значения переменных при прохождении этой точки, не останавливая приложение. Это те же принты, только вам не нужно пачкать ими код и пересобирать проект!
Какая ваша любимая фишка дебаггера, о которой мало кто знает? Делитесь в комментариях 👇
#productivity #androidstudio #xcode #debug #tips #middle
👉 @developer_mobilaViewModel (Android) или в переменной контроллера (iOS), они же живут долго!»
Реальность: ViewModel переживает поворот экрана, но умирает вместе с процессом. Синглтоны тоже сбрасываются.
✅ Как делать правильно (Level Up):
🤖 Android:
Перестаньте полагаться только на поля класса. Используйте SavedStateHandle.
Это специальный механизм внутри ViewModel, который сохраняет небольшие кусочки данных (ID, поисковый запрос, ввод пользователя) в системный бандл. Система бережно восстановит его даже после смерти процесса.
Гуглить: SavedStateHandle, Parcelable.
🍏 iOS (SwiftUI/UIKit):
В SwiftUI для простых данных (например, выбранная вкладка или текст) используйте обертку @SceneStorage. Она автоматически сохраняет и восстанавливает состояние.
Для сложных данных — сохраняйте их в локальную БД (CoreData/Realm/SwiftData) при каждом изменении, а не при закрытии экрана.
🛠 Как проверить себя (Челлендж на 5 минут):
Не верьте эмулятору. Проверьте свой текущий проект прямо сейчас:
1. Запустите приложение и введите данные в любое поле.
2. Сверните приложение (Home).
3. Android: В настройках разработчика включите опцию «Don't keep activities» (Не сохранять действия).
4. iOS: В Xcode нажмите Debug -> Simulate Memory Warning или остановите дебаг и запустите другое тяжелое приложение.
5. Вернитесь в свое приложение.
Если данные исчезли или случился краш, поздравляю, вы нашли критический баг. Время фиксить!
Знали про SavedStateHandle или по старинке сохраняли всё в базу данных? 👇
#android #ios #bugs #middle #architecture #обучение
👉 @developer_mobilabuildSrc и простое перечисление в build.gradle уступают место TOML-файлам.
🍎 iOS (Swift)
async/await и Actors. Понимание потокобезопасности отличает Мидла от Джуна.
Отзывы канала
всего 10 отзывов
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
Каталог Телеграм-каналов для нативных размещений
Мобильная разработка #1 — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 4.0K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 5.2, количество отзывов – 10, со средней оценкой 5.0.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 1678.32 ₽, а за 49 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий