iOS Roadmap - Полезное | Swift, SwiftUI, Интервью
444 subscribers
107 photos
3 videos
8 files
195 links
iOS Roadmap: Swift, SwiftUI, архитектуры, интервью. Еженедельные подборки статей и видео, плейбуки, чек-листы, решения задач с пояснениями. Полезно начинающим и практикующим iOS-разработчикам.
Download Telegram
#miniapp #miniapp_обновление

Привет. Хочу поделиться тремя новыми фичами по улучшению поиска работы, которые ждут тебя на проде мини апы.

Обновление: Управление вакансиями

---

1. Отклики. Нашёл подходящую вакансию - отправляй отклик прямо из приложения.

Одно нажатие, и ты уже видишь куда откликался. Все вакансии с откликами собраны в отдельной вкладке - удобно следить за статусом и не терять из виду.

2. Заметки. Добавляй заметки к любой вакансии. Записал, почему понравилась. Отметил вопросы для собеседования.

Заметка привязана к вакансии и всегда под рукой - не нужно держать в голове или искать в мессенджерах.

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

Сравниваешь несколько офферов - собрал в одном месте. Закладка ставится и снимается одним тапом, без лишних шагов.

Если есть какие-то идеи или предложения, всегда готов выслушать и реализовать, чтобы приложение было еще удобнее и полезенне! 🙏
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍1
Давай проверим твою интуицию и знание того, как работают target очереди в GCD. Посмотрите на этот небольшой фрагмент кода:

let databaseQueue = DispatchQueue(label: "com.app.db")
let networkQueue = DispatchQueue(label: "com.app.network", target: databaseQueue)

databaseQueue.async {
print("Start fetching...")

// Имитация сложной сетевой работы
networkQueue.sync {
Thread.sleep(forTimeInterval: 1)
print("Data received: 123")
}

print("Fetching finished")
}


Здесь у нас есть имитация базы данных и сетевого слоя: networkQueue перенаправляет свои задачи в databaseQueue для синхронизации, а внутри мы имитируем задержку сети.

Внимательно изучи код. Как думаешь, что будет выведено в консоль при его запуске?
SwiftUI изнутри: attribute graph, diffing и etc

Наткнулся на очень хорошее и грамотное объяснение того, как SwiftUI работает из-под капота. Да Apple скрывает устройство, но при помощи реверс инжинеринга и собирания по крупицам можно изучить.

Советовал бы всем посмотреть, кто:
A - хочет углубиться в понимание работы с SwiftUI
B - хочет подготовиться к собеседованию

По моим наблюдениям*, на собеседованиях не часто встретишь верхнеуровневое понимание от кандидата Middle и Senior и выше.

Поэтому это та Ахиллесова пята за которую стоит цепляться и демонстрировать свои знания и набирать оценку себе, тем самым забирая у тех, кто не смог ответить или не знал.

Для повседневной работы - это самособой собой актуально на все 146%, да с макросом @Observable по-меньше, но всё-таки если стоит цель прокачаться технически - однозначно!

Если после видеоразбора захочется углубиться, то в ноушене на тему AttributeGraph'a всё уже есть: как его дебажить, что там внутри и примеры код! Однозначно советую.

А ты знал про существование AttributeGraph? Имеешь представление как устроена работа SwiftUI изнутри?

• Поставь 👍 , если что-то слышал
• Поставь 🔥 , если имеешь представление
• Поставь 🩷 , если собаку съел на этом всём

Посмотрим у кого какой уровень, только чествно, сугубо для статистики! 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥6👍3
LinkedIn верификация работает с российским загранпаспортом. Я только что прошла.

Спасибо Лёше Ряховскому, который мне про это написал. У меня заняло 10 минут буквально.

Что нужно:
Биометрический загранпаспорт РФ (тот, что с чипом — на обложке есть специальная метка). Обычный не подойдёт.

Как это работает:
1. Нажимаете в Linkedin на галку верификации в профиле, он выдаст вам QR-код, который нужно открыть в мобильном приложении (ну вот так всё устроено, да)
2. Выбираете страну — ту, где вы сейчас находитесь. Не обращайте внимания, что там написано «страна, выдавшая документы» — просто выбирайте, где вы живёте.
3. Дальше сканируете камерой телефона первую страницу своего загранпаспорта — ту, где фото.
4. Потом самое весёлое: нужно приложить телефон к паспорту и поелозить по нему, чтобы он считал NFC-чип. У меня получилось с третьего раза. Пришлось перевернуть телефон и сканировать задней частью. Не сдавайтесь, если не сработает сразу.
5. Следующий шаг — подтверждение лица. Короткое видео в режиме реального времени, попросит повертеть головой вправо-влево. У меня тоже не с первого раза получилось — нужно хорошее освещение. Становитесь лицом к окну или лампе.
6. После этого LinkedIn одобрил верификацию мгновенно. Галочка появилась в профиле сразу.

И да, нужно согласиться на передачу биометрических данных. Я согласилась.

Зачем вообще это делать?

Верифицированный профиль — хороший сигнал рекрутеру о том, что человек реальный, аккаунт не фейковый, кандидат серьёзно относится к своему присутствию на платформе. Когда у рекрутера 2000 откликов на вакансию, такой сигнал может влиять на принятие решения.

Но есть ещё одна мысль, даже более важная.
Смотрите, логика соцсетей очень простая: за использование новых фич они дают плюшки пользователям, например улучшают ранжирование профиля в поисковой выдаче. Все новые фичи Linkedin типа звёзд, скиллов и прочее — всегда влияли на ранжирование. Это же мне подтверждал продакт менеджер Linkedin.

Я не могу это утверждать наверняка, но у меня есть гипотеза, что верифицированные профили LinkedIn будет лучше ранжировать в поиске и рекомендациях. Что важно для вас, если вы ищете работу или если вы прокачиваете свой проф бренд в этой соц. сети.

Если у вас биометрический загран — потратьте 10 минут.

Пишите в комменты — с какой страной и паспортом пробовали? Получилось или нет. Давайте разбираться, точно ли для всех универсально работает.
8🔥6👍5
Вышел Swift 6.3, что же там внутри?

Два дня назад Apple выкатили Swift 6.3. Найти блог пост можешь как-обычно на swift.org. Но для тех, кому лень все читать, вот основные моменты:

1. @c - Swift функции теперь видны из C:

Раньше, чтобы дёрнуть Swift из C / C++, приходилось городить bridging обёртки. Теперь вешаешь @c на функцию - и компилятор сам генерит декларацию в C-хедере:

@c func callFromC() { ... }


В сгенерированном хедере появится:

void callFromC(void);


Можно задать кастомное имя через @c(MyLib_callFromC). А в связке с @implementation - наоборот, реализовать существующую C-функцию на Swift. Компилятор проверит, что сигнатуры совпадают.

Ты можешь спросить, а зачем тебе это? Если работаешь с C/C++ библиотеками или Embedded - это убирает целый слой boilerplate.

2. Module selectors - ModuleA::getValue()

Импортируешь два модуля, а в обоих есть getValue(). Раньше было больновато, но теперь можно разрулить через :::


import ModuleA
import ModuleB

let x = ModuleA::getValue()
let y = ModuleB::getValue()


Работает и для стандартной библиотеки: Swift::Task { ... } - когда у тебя в проекте есть свой Task и нужно явно указать на системный.

Вроде мелочь, а на больших проектах может быть приятно.

3. Контроль оптимизаций для авторов библиотек

Три новых атрибута:
@specialize - предоставляешь предспециализированные реализации дженерик функций для конкретных типов.
@inline(always) - гарантирует инлайнинг вызова. Без "может быть". Но используй осторожно: размер бинарника подрастёт.
@export(implementation) - открывает реализацию функции из ABI-stable библиотеки для клиентов. Больше возможностей для оптимизаций на стороне вызывающего кода.

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

4. Swift Testing: предупреждения, отмена тестов, картинки

Issue.record("Что-то подозрительное", severity: .warning) - записывает проблему как предупреждение, но тест не падает. Удобно для нестабильных вещей, которые не хочешь игнорировать, но и не хочешь ломать пайплайн.

try Test.cancel() - отмена теста прямо в процессе выполнения. Можно скипнуть конкретный аргумент в параметризованном тесте или остановиться по условию.

Image attachments - ты прикладываешь картинки к тесту на Apple и Windows платформах. Через кросс-импорт с UIKit.

5. Swift Build - единый билд движок, превью

Swift Package Manager получил превью интеграции с Swift Build. В чём суть: один билд движок на всех платформах вместо зоопарка. Пока-что это в превью, но уже можно тестировать на своих пакетах.

Также: пребилженный swift-syntax для макро библиотек, swift package show traits для просмотра трейтов пакета.

6. Android SDK - официально

Это, пожалуй, самая неожиданная штука. Swift 6.3 включает первый официальный SDK для Android. Можно писать нативный Android код на Swift, собирать пакеты под Android, интегрировать Swift в Kotlin / Java-приложения через Swift Java.

Пока рано говорить, что это перевернёт кроссплатформу и KMM KMP стоит переживать . Но сам факт, что Apple выпускает официальный Android SDK - внушительный и дающий надежды сигнал.

Что если swift хочет быть языком не только для яблочных платформ? Поживём - увидим.

7. Embedded Swift - подтянули

Улучшили C-интероп для Embedded, допилили дебаг, продвинулись в linkage model. Если ты работаешь с железом - отдельный блог пост от Apple разбирает детали: Embedded Swift Improvements.

8. DocC - три экспериментальных фичи

Markdown-выгрузка документации: --enable-experimental-markdown-output. Статический HTML внутри <noscript> для SEO и скринридеров. Аннотации для блоков кода: nocopy, highlight, showLineNumbers, wrap.

Если ты ведёшь документацию через DocC - поиграйся. Особенно highlight по строкам - удобно для туториалов.

—-

А ты что-то ждал или нашел для себя приятный сюрприз? 😜
Please open Telegram to view this post
VIEW IN TELEGRAM
👍76
Forwarded from iOS Roadmap - Новости, анонсы и все события
PvP Дуэли в мини приложении

Привет, в приложении уже доступен для пользования функционал дуэлей. Он работает асинхронно, и вот как это устроенно:
Создаёшь дуэль - нажимаешь на кнопку "Быстрый матч"
Отвечаешь на 8 вопросов - это микс тем, сложность по нарастающей: лёгкие -> средние -> сложные -> последний средний
• Ждёшь когда ответит соперник, так же 8 вопросов

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

Кто побеждает? 🤔
1. Больше правильных ответов -> победа
2. Одинаковый счёт? Побеждает тот, кто быстрее отвечал на правильные вопросы: время на ошибки не считается - нельзя наугад тыкать быстро
3. Разница во времени ≤ 3 секунды? Ничья

Новый функционал позволит тебе ещё качественне и с интересом подойти к вопросу подготовки к собеседованию.

Даже если ты не готовишься к собеседованию, узнать кто же лучше знает вопрос и iOS разработку.

Если остались вопросы или предложения, можно отписать в комментарии или в лс, встретимся на дуэли! 🎮

Ссылка на мини приложение
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍21
AI решение для текущего рынка

Репозиторий career-ops насчитывает 13.4K звёзд и помогает с поисками работы.

Ты кидаешь ссылку на вакансию. Система сама парсит описание, сравнивает с твоим CV, оценивает совпадение по 10 параметрам, генерит PDF-резюме, заточенное именно под эту позицию.

Я насчитал 14 режимов:
• Оценка вакансии
• Генерация CV
• Сканирование порталов
• Батч-обработка десятка вакансий параллельно
• Подготовка к интервью
• Скрипты переговоров по зарплате
• LinkedIn

Советую изучить гитхаб и поспрашивать свою LLM как можно на твоём рынке и для тебя найти применение 🙏
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥41
Сегодня Apple отвечает на твои вопросы по Swift Concurrency

Возможно ты вспомнишь, как вечерами сидел и немного злился при миграции на Swift 6? А может-быть тебе не достаточно понятно:"Как же устроен async / await под капотом?"

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

Формат простой:
Задавать вопрос здесь
Отвечать будут здесь

Я бы посоветовал заранее подумать, до эфира, что хочется спросить и, возможно, подготовить код. Тогда ты сможешь одним из первых закинуть в Q&A секцию и не ждать очередь / пропустить.

Сегодня, в 20:00 по МСК


https://www.youtube.com/live/E95agtPgaa0
👍21🔥1
Swift Concurrency + Task.immediate

Представь, что ты на @MainActor и тебе надо вызвать async функцию:


@MainActor
func didTapButton() {
Task {
await viewModel.update()
}
print("после Task")
}


Угадай, что вызовется первым?
• update
• print

Спойлер: print

Task - это "давай положим в очередь. А выполним, когда executor освободится".

И возможно тебе требовалось:
1. Выполнить быструю задачу, которая заканчивается без реального suspend
2. Ловишь легаси колбэки, но точно знаешь, что он на main
3. Нужен порядок: сначала обновить state, потом продолжить синхронный код

И вот, в Swift 6.2 завезли Task.immediate

Как понятно из названия, в Task.immediate стартует тело задачи синхронно, на текущем executor'е и без enqueue. Гонит код до первой реальной suspension и только там отдаёт управление обратно на calling executor.


@MainActor
func didTapButton() {
Task.immediate {
await viewModel.update()
}

print("после Task.immediate")
}


Если update() успеет обновить state до того, как реально приостановится - обновление произойдёт до print.

Всё это, плюс await != suspension, как часто сгодится и др. разобрано глубже в пропозале:
https://github.com/swiftlang/swift-evolution/blob/main/proposals/0472-task-start-synchronously-on-caller-context.md

Или есть небольшое саммари:
https://www.avanderlee.com/concurrency/immediate-tasks-in-swift-concurrency-explained/

В ноушене будет скоро 👍️️️️️️
4👍2🔥2
Крупный редизайн для mini app

Привет! В мини-приложении не так давно появился режим дуэлей.

Если коротко - соревнуешься с реальным человеком на одинаковых вопросах: кто сильнее в iOS. Вопросы случайные, но обоим даются те же. Побеждает тот, у кого больше правильных ответов; при равном счёте решает суммарное время.


Рандомные вопросы одинаковы для обоих, побеждает тот, кто ответил правильнее. А в случае ничьи решает время.


Изучаю AI на практике, поэтому редизайн делал вместе с Claude Design, через агентов в Claude Code. Кто помнит, какой дизайн был раньше - оцените разницу.

Перепаковано всё: от баннера на вкладке "Интервью" до экранов ожидания, самой сессии и финальных результатов.

Если ты не пробовал, то самое время. Можно договориться с другом и сыграть один на один, или принять открытый вызов от любого игрока. Игра асинхронная, возвращайся к ней когда удобно.

Если есть идеи, пожелания, нашел баг - смело пиши @somestay07
5👍2🔥2