Kotlin/Swift (iOS) Туда и Обратно
36 subscribers
130 photos
21 videos
9 files
88 links
Канал - журнал, рассказывающий об опыте изучения Swift & iOS backend-разработчиком на Java & Kotlin
Download Telegram
Даже хейтерам ChatGPT это будет интересно.

🌴 Лежу я значит на пляже - солнце, шум моря, загар ложится ровно, телефон в руке. Но мозг, как обычно, не умеет отдыхать. В голове вертится: "А что если добавить в приложение простенькую фичу? Можно то, и можно это… а ещё и так, да эдак”

И тут я вспоминаю про Copilot в GitHub. Проверил - он доступен с телефона. Думаю: “Дай-ка напишу ему, пусть скажет насколько это вписывается в текущий проект”. А он в ответ предлагает создать Pull Request.

o_O ничоси

Попросил его сделать easy mode для 🇩🇪. Он создает Pull Request, запускается Xcode Cloud CI, сборка проходит успешно, а Copilot ставит меня ревьюером. После нескольких замечаний, он исправляет, то что мне не нравится, объясняет что не понятно. Мой клик на Мерж, сборка Xcode Cloud, отправка в Test Flight, и я не взяв в руки ноутбук и не написав ни единой строчки кода устанавливаю приложение… Итс факинг крейзи 😆
Самое классное, что я понимаю по итогу, что я получаю в проекте, и контролирую, что туда попадает. Ревью как ни как.

До этого я использовал Github Copilot в режиме Agent. Он помогает со всеми делами (жаль не по дому) в VS Code 👩‍💻
У него есть контекст проекта - умеет читать README (для него можно даже писать специальные инструкции в `.github/copilot-instructions.md`), может создать тесты, запустить что-нибудь в терминале, поревьюить, или написать логику.

Это вызывало огромный дискомфорт, поскольку это занятие не высвобождает свободное время - приходится постоянно переписываться и смотреть, что он делает. И главное, я в это время не могу заниматься ничем другим. Мне хотелось, чтобы это было больше похоже на поручение задачи своему коллеге.

Создатели GitHub Copilot coding agent поняли это достаточно быстро. По пути в магазин, на работу, на вечеринку или просто на прогулке, меня посещает мысль - я закидываю её в агента и в свободную минуту могу посмотреть результат, даже с телефона.

Вот это реально экономит время и позволяет больше эксперементировать! 😺
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Ссылка на Github Copilot coding agent

https://docs.github.com/en/copilot/how-tos/use-copilot-agents/coding-agent

Накидайте лайков, если эта тема интересна. Могу про схожее ещё написать 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
4
Продолжаю осваивать Firebase 👩‍💻

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

🟥 Документация - на уровне!
Достаточно пройтись по инструкции: https://firebase.google.com/docs/crashlytics/get-started?platform=ios

Отдельно понравилась настройка Xcode для загрузки Apple Debug Symbols (dSYM), не сам процесс, а идея. После этого отчёты об ошибках становятся человекочитаемыми: вместо адресов памяти видно имена методов.

Главной мотивацией подключения Crashlytics был баг, который я обнаружил после релиза. Снова ною про тесты, они очень нужны, но писать их сложно - мешает интеграция с Firebase.
Как делать UI тесты и “мокать” Firebase - до сих пор загадка для меня 🤔💭
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Зарегал домен 🌐

У меня появился мой первый домен, и этого первенца зовут grocemelier.app

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

✍️ Регистрация не заняла много времени, напротив, это было одно из самых простых. Плати и получай 🤑

Но даже при регистрации домена мне удалось узнать что-то новое. В интерфейсе настройки обнаружил типы записей в DNS. Если я знал, что такое A, NS, то MX и CNAME стали для меня открытием. Разрабатывая backend очень редко приходится сталкиваться с этими вещами, а времени, свободного времени, всегда мало. Даже сказал бы - его нет!

✍️ Создание landing страницы порядком меня помучало (я потратил на это 5 часов)

Поскольку я уже повязан Firebase, то и тут я решил воспользоваться их продуктом Firebase Studio.

Firebase Studio по своей сути является генератором сайтов, приложений, ai решений. И да, это снова AI - Gemini.
Интерфейс представляет собой VS Code 👩‍💻 запущенный на виртуалке (поэтому доступ к терминалу имеется). Туда накинуты расширения, которые показывают Preview сайта, интегрируются с Gemini Agent, и отсюда же можно задеплоить приложение на Google Cloud инфраструктуру посредством Firebase Hosting.

Я создал несколько версий, но на текущий момент оставил только одну - самую простую. Сейчас я смогу собирать emails потенциальных пользователей для участия в Beta тестировании (для этого буду использовать TestFlight). Возможно стоит разместить сразу TestFlight кнопку, но так целостность страницы нарушается, я оставил это немного на попозже - пока буду инвайтить руками.

✍️ По пути применяю полученный опыт

В качестве базы использую Firebase Firestore. Есть функции для отправки нотификаций в телеграм. Firebase Studio умеет работать только с nextjs фреймворком (просил написать на Vue.js - отказался, сказав, что не такой умный), но другие языки/платформы так же поддерживаются.

В общем я получаю очень много интересного опыта и позитивных эмоций занимаясь этим проектом 🥰
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Добавил кнопу логина через Google 🖥

Над этой темой пришлось попотеть.

🔴 Во первых, почему-то Google Sign-In не включен в Firebase SDK

В Firebase Console можно включить различные механизмы Authentication. Но по какой-то непонятной мне причине, https://github.com/google/GoogleSignIn-iOS нужно подключать отдельно.

🔴 Во вторых, документация расходится с практикой

Хорошо описано как добавить Firebase Auth. Есть примеры, и много сторонних статей. Но есть такой пример:

https://firebase.google.com/docs/auth/ios/google-signin


guard let clientID = FirebaseApp.app()?.options.clientID else {
fatalError("Firebase clientID not found. Ensure GoogleService-Info.plist is properly configured and added to the project.")
}
let config = GIDConfiguration(clientID: clientID)
GIDSignIn.sharedInstance.configuration = config


Который у меня не сработал.
Нашел, что я не единственный столкнулся с этой проблемой: https://github.com/firebase/firebase-ios-sdk/issues/15151

Помимо того, что в файле GoogleService-Info.plist CLIENT_ID, это же значение нужно прописать в Info.plist в поле GIDClientID

В документации https://firebase.google.com/docs/auth/ios/google-signin про это ни слова…

🔴 Ну и в третьих, это линковка аккаунтов (тут телеграм сходит с ума и рисует красный кружок 😁)

Если залогинился под одним провайдером, потом под другим, их можно слинковать как одни и те же. Но похоже только 2… Для большинства проектов это совсем не проблема. Но штука не очевидная 🥵 (а тут супер-эмодзи совсем перестали работать)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Ну что друзья, время порадоваться!

Наконец приложение выпущено, конечно, сырое, но уже получившее пару апдейтов:

https://apps.apple.com/de/app/grocemelier/id6745146245

Основная цель, по которой я заводил этот канал, в какой-то степени достигнута, и даже года не прошло 😅

Но это не конец пути, а скорее начало. В частности, это и начало обратного пути, к Kotlin.

За это время я узнал очень много, плюсом оно совпало с бумом AI, и от этого стало только увлекательнее.

Раздумываю сейчас над созданием версии для 👩‍💻 и заодно реализацией некоторых важных фич (трудоемких, но все же нужных), от которых приложение должно стать на 999,99% удобнее и полезнее.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍1