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

Есть популярная задача на capture list, value type и reference type в одном листе!

На этапе собеседования происходит жанглирования требя этими вещами:
— Убирается или добавляется capture list
— У объекта меняется семантика: был class -> стал struct

Текстовый разбор этой задачи как-всегда есть в ноушене, а вот видео обзор, причём грамотный и по-полочкам разложенный нашел.
🔥12👍3👏3
Is this project dead? - Не такие слова хочется видеть в репозитории фастлейна. Но что делать, если всё к этому идет, и нужно какое-то решение?

Мой друг Макс не остался в стороне и законтребьютил решение. У себя в Plata они уже давно его используют.

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


Blimp - это "фастлейн на Swift": CLI / библиотека для автосборки и выката iOS-приложений, собранная как конструктор из SPM-пакетов и Swift Argument Parser.

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

Сертификаты пока не ведёт - для этого авторы предлагают временно юзать fastlane match.

Ключевые отличия:

Blimp - нативный Swift (SPM), минимум внешних зависимостей; легко встраивается в Swift-проекты / утилиты.

Уже закрывает ключевой happy-path: архив -> загрузка -> TestFlight группы -> ревью, но ещё не управляет сертификатами / профилями.

Удобно тянуть как библиотеку в свои Swift-утилиты: BlimpKit + чистый типобезопасный код.

На сегодня не управляет профилями / сертификатами - берём гибрид с fastlane match.


Если кто пропустил воркшоп с Максом и как он в крупной компании лупендит CI / CD в соляного, то вот здесь крайне советую послушать.

Буду рад и признателен каждому, кто поставит звёздочку данному проекту: больше звёзд -> выше выдача -> больше людей контрибьютящих и помогающих в поиске багов.

(Текст не редактировать,информацию в скобках удалить,оплата назначается через 15 минут после публикации)
🔥105👍4
#заметка Во вторник будут открыты двери для всех, кто подписан через BOOSTY / Telegram в MINI APP ☀️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13🎉74
#swiftui #собеседование #middle

Code Review: экран с проблемами производительности

Ты открываешь Pull-Request и видишь такой код на review. Здесь может-быть:
1. Всё отлично
2. Что-то ОК, что-то не ОК
3. Множество чего не ОК


import Foundation
import UIKit
import SwiftUI

enum Achievement: Identifiable {
case notable
case cool
case minor

var id: UUID { UUID() }
}

struct User {
var avatar: UIImage?
var name: String
var bio: String
var achievements: [Achievement] = []
}

struct UsernameView: View {
let user: User

var body: some View {
// NB: реализация упрощена для упрощения восприятия
HStack {
if let avatar = user.avatar {
Image(uiImage: avatar)
}

Text(user.name)
}
}
}

struct ProfileView: View {
let user: User

var body: some View {
// NB: реализация упрощена для упрощения восприятия
Text(user.bio)
}
}

struct AchievementView: View {
var achievement: Achievement

var body: some View {
// ...
}
}

struct UserView: View {
@State var user: User

var body: some View {
ScrollView {
VStack {
UsernameView(user: user)
ProfileView(user: user)

ForEach(user.achievements) { achieve in
if achieve != .minor {
AchievementView(achievement: achieve)
}
}

TextField("Username", text: $user.name)
TextField("Bio", text: $user.bio)
}
}
}
}


Пока-что можешь оценить, но но не запускай его в playground или проекте - это проверка себя, впервую очередь.
👍42🕊2
Сколько проблем в коде выше?
Anonymous Poll
11%
0
7%
1
20%
2
20%
3
22%
4
20%
5
На самом деле количество проблем можно выделить разное, но сводиться они будут к одному. Ниже спойлер задачи сверху! 🔞

Давайте ниже рассмотрим, в чём же есть проблемы:

1. var id: UUID { UUID() } - каждый раз, когда мы обращаемся в ForEach, мы получаем другое UUID. Из-за того, что id реализовано как computed property - id генерируется при каждом вызове.


- Можно поправить как var id: String и внутри switch self и написать значения
- Можно поправить как var id: Self { self } и всё тип-топ
- Можно поправить как добавление String или Int к enum и реализовать var id: Int { rawValue } / var id: String { rawValue }


2. VStack вместо LazyVStack / List. Тем самым при имении user.achievements равном даже как 100-300 элементов, мы можем иметь просадки в начале, потому-что сразу всё в память.



Зависит от того, что за элемент и что он показывает и т.д. Что уже говорить про 1-2К.

3. @State var user: User Хоть мы и передаем весь объект ProfileView, где используем только `user.bio`, у нас всё-равно будут ненужные re-evaluate и re-draw, даже когда мы не меняем bio.


4. HStack / VStack по-умолчанию имеют от 8 до 12 точек отступов, соответсвенно если явно не указать `spacing:0`, то будет расхождение с дизайном.


Если ты дополнишь этим пунктом, хоть он и не стоит в основной задаче, ты покажешь свою точность, что тебе важен не только код, но и сам продукт и его итоговый результат!

Соответсвенно важно не количество правильных минусов, а какие минусы ты нашел, что они пораждают и так-далее!

Поэтому я каждый раз и говорю, что такие практически задания на собеседование - это ТОП!

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

В этом плане у практических по UIKit с его ранлупами и прочим, есть большое поле на вопросы и познания глубины, но не достаёт практичности в применении на работе.

Эта задача в ноушене
Секция практических задач по SwiftUI
— Моковые собеседования по SwiftUI:
один, два, три


P.S. Ставь лайк - если понравилась задача и разбор
Please open Telegram to view this post
VIEW IN TELEGRAM
9🔥4🎉2
MainActor привязан к конкретному thread?
Anonymous Quiz
69%
Да
31%
Нет
👍1
#собеседование

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

Хочу отдельно по UIKit и отдельно Многопоточности, если есть материалы какие-то полезные, пожелания или просто фидбек, как-всегда в лс можно отписать 🆗
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥32
#материалы #swiftui #изучение #attributegraph

В последнем разборе задачи code-review, которое спрашивают в одном крупном биг техе - я оставил ссылки для дополнительного изучения AttributeGraph в SwiftUI. Но я хотел бы поделиться этоми ссылками здесь и дополнить рекомендации.

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

1. Attribute graph by Chris Eidhof: статья и презентация в видео на YouTube
2. OpenAttributeGraph: open source implementation of Apple's Private framework - AttributeGraph which is a high performance computing engine written in C++ and Swift.
3. Untangling the AttributeGraph: редко где увидеть можно, но очень полезная
4. Thinking in SwiftUI: настоящая кладезь, п.1 на основе этой книги сделан
5. Сами знаете где и на русском языке

AttributeGraph - это приватный фреймворк. Знание и понимание концепций его работы, это уже очень многое тебе даст, как я уже говорил и в работе и на собеседовании.

Из-за того, что по нему мало информации в интернете - эти знания будут твоим большим преимуществом. Советую изучать даже в общих чертах, если не хочется погружаться.

Эта группа теперь открыта, поэтому можешь смело делать репосты полезных и интересных постов себе в избранное или друзья и коллегам.
🔥7👍1
#swiftui #task

SwiftUI: почему task не перезапускается при смене данных

- task {} и onAppear не имеют автоматического трекинга зависимостей.
- Они запускаются только при “появлении” view, а что именно считается появлением - в SwiftUI до сих пор размыто.
- Если внутри task используется url, а значение меняется - код не выполнится повторно, потому что задача не пересоздаётся...

For example, the task will re-run when you put the image loader in a List and scroll it out of bounds and back into bounds. Likewise, when you put the image loader in a tab view, the task will also run again when switching tabs.
👍2🔥2
#swift #ios #backend

What's new in Swift: December 2025 Edition

Команда Swift выложила декабрьский дайджест - и там есть о чём почитать.

Swift 6.2:
- WebAssembly support
- Глубокая C++ interoperability
- Улучшения memory safety
- Более доступный concurrency с progressive disclosure

Платформы:
- FreeBSD 14.3+ preview уже доступен
- Android: ежедневные snapshot-сборки и end-to-end демо
- AWS: Amazon официально поддерживает Swift в Amazon Linux + AWS Lambda Runtime

Swift Evolution:
- async / await теперь можно использовать в defer-блоках

Блоги и доклады:
- Swift SDK для Android
- Temporal Swift SDK: workflow orchestration на Swift
- Swift Configuration 1.0: единый подход к конфигурациям

Кстати советую посмотреть:"Separate code from configuration with Swift Configuration - Honza Dvorsky" весьма наглядно и доходчиво

🔗 Читать: https://www.swift.org/blog/whats-new-in-swift-december-2025/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥3
Доброе утро, так как у бусти постоянно проблемы с оплатами, а в этом месяце так вообще, уже человек 10 написали, что "деньги есть, всё ок - не списывает. Ждал несколько дней, любые карты - не принимает.

То есть аналог в виде Tribute, где есть скидки кстати не только на первый и шесть месяцев, но и на 12 месяцев.

Скидки причём на всю оплату, а не как у бусти на первый месяц только. Если подписаны на бусти, то имеет смысл отписаться и переподписать на Tribute тоже, спасибо за внимание!

1️⃣ Небазовый тир: на каждый период сделал скидку в виде меньшей цены

2️⃣ Базовый тир: на каждый период сделал скидку в виде меньшей цены
👍15
КАК Y COMBINATOR УЧИТ СТАРТАПЫ ВАЙБ-КОДИНГУ: КОРОТКИЙ ГАЙД

Этот гайд основан на нескольких компаниях, которые в том или ином виде используют vibe coding.

Не знаю кто им помогал, но ощущение, что рука технаря и не сильно то коснулась данных документов.

К примеру любой джюн скажет, что фичи лучше деливерить изолированно - Git Workflows.

Но если-что ИИ это не остонавливает от:"Похоже мы не на той ветке, надо смёржить!"

В целом материалы от части полезные, так как обозначают необходимые на подумать темы.

Но любой вайбкодер со стажем скажет и покажет, чего и где не хватает.

В начале января уже будет воркшоп, где поделюсь своим опытом на основе мини апы, с конкретными кейсами, ошибками и нужным материалом.
🔥8👍6
Actor Hopping: не все переключения одинаково дорогие

While hopping between actors on the cooperative pool is fast, you still need to be mindful of hops to and from the main actor when writing your app.


Это цитата итогового утверждения от инженера из Apple. Оно было сказано в рамках WWDC "Swift concurrency: Behind the scenes". Cоветую весь посмотреть, если не смотрели или смотрели давно.

Суть сводится к следующему:
- Hopping между actors в cooperative pool: дёшево
- Hopping на / с MainActor: дороже

Почему так?

Main thread отделён от cooperative pool и имеет особую роль в системе - он обслуживает UI и main run loop. Поэтому переключение между MainActor и cooperative pool обычно сопровождается context switch / switching threads.

Так же обновил соответсвующий раздел в ноушене, приятного чтения!
👍3🔥3
Январь - это лучшее время для оффера. Бюджеты свежие. Компании готовы платить больше, чем в любое другое время года. Если думаешь менять работу в 2026 - готовиться надо сейчас.

SwiftUI спрашивают почти везде. Собрал подборку из своих SwiftUI материалов, чтобы не тратить время на поиски.

1. [Middle / Middle+] SwiftUI, Swift Concurrency: задачи, практика и лайвкодинг [ссылка на материал]

2. SwiftUI, Combine, Structured Concurrency [80/20: теория на практику] [ссылка на материал]

3. Разбор SwiftUI задачи с собеседования: полный разбор и решения [ссылка на материал]

4. На каком потоке выполняется Task? Разбор хитрой задачи по Swift Concurrency [ссылка на материал]

5. Лайвкодинг SwiftUI задачи с собеседования: полный разбор и объяснения [ссылка на материал]

Смотреть лучше порционно: одна задача или ролик до часа. Но если есть силы на парочку - почему бы и нет?
🔥20👍6
Почему Swift кажется простым, пока не копнёшь глубже?

Ты наверняка замечал эту штуку, что начинаешь писать на Swift - всё понятно. let, var, структуры, замыкания.

Потом лезешь в async / await. Окей, разобрался. Потом @Sendable, isolated, nonisolated. Уже сложнее.

Doug Gregor - один из главных архитекторов Swift, называет это progressive disclosure. Постепенное раскрытие сложности.

Идея простая: язык должен пускать новичка без боли. Но когда тебе нужна мощь - она есть. Просто спрятана до поры.

На SwiftCraft 2025 Doug рассказал, как этот принцип работает изнутри. Почему одни фичи "на поверхности", а другие закопаны. И какие вызовы это создаёт, когда Swift идёт в embedded, в серверы, в новые ниши.
👍6🔥6
iOS Roadmap - Полезное | Swift, SwiftUI, Интервью
Январь - это лучшее время для оффера. Бюджеты свежие. Компании готовы платить больше, чем в любое другое время года. Если думаешь менять работу в 2026 - готовиться надо сейчас. SwiftUI спрашивают почти везде. Собрал подборку из своих SwiftUI материалов, чтобы…
Продолжая тему подготовки к собеседования хочу порекомендовать следующую подборку:

1. Собеседование на софты: задачи, сроки и конфликты | Что актуально не только на валютной удалёнке, но и на СНГ собеседованиях [ссылка на материал]

2. Mobile System Design Interview: Spotify / Part I Большое кол-во собеседований уже содержат в том или ином виде System Design - однозначно маст хэв [ссылка на материал]

3. Mobile System Design Interview: Spotify / Part II [ссылка на материал]

4. Mobile System Design Interview: Spotify / Part III [ссылка на материал]

5. Разбор SwiftUI задачи с собеседования: полный разбор и решения | Я рад, что всё больше и больше собеседований содержат SwiftUI и не просто теорию, а практические задачи. Опыт есть опыт [ссылка на материал]

6. На каком потоке выполняется Task? Разбор хитрой задачи по Swift Concurrency | Первое и пока-что единственное видео с разбором Swift Concurrency, которое тоже, всё чаще и чаще встречается на собеседовании [ссылка на материал]

7. Лайвкодинг SwiftUI задачи с собеседования: полный разбор и объяснения | Хочу завершить разбором и лайвкодингом другой SwiftUI задачи, где постарался показать какие дополнительные вопросы могут накидывать и про что тебе стоит сказать и что не забыть [ссылка на материал]

-----

Как-всегда рад обратной связи, предложениям, пожеланиям, или же просто если понравилось можно всегда поддержать и написать, всегда с радостью читаю про успех каждого! 🙂
🔥11👍3