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

Я вот кстати много где говорил и говорю, а всё-равно, процентов 10-15% могут пренебречь. Если откликаться на HH, Linkedln и там будут из СНГ эйчары, ну т.е даже если вакансия подразумевает валютную удалёнку, не полнись и засетапь для связи телеграм, никнейм.

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

Можно сделать легче и вставить к своему @name ссылку, чтобы при нажатии автоматом перекидывало на нужного, т.е тебя 🫵
Please open Telegram to view this post
VIEW IN TELEGRAM
💯5🔥3
#полезное #заметка

ТОП 1 упущенное знание для начинающих разработчиков - "Делаем по потребности". В своих видео не просто так повторяю, время от времени, это правило.

- Компилятор не просит var? - Начни с let. Попроси - поменяешь.
- Компилятор не просит self? - Не пиши, попросит - укажешь.


И это самое явное, что переростает в неявное:
[weak self] in <- обыденный capture list, но сколько раз я видел пример, когда после него следуюет `guard let`, для ВЫЗОВА функции, которую можно вызвать и без strong self... Просто написать self?.someFunc и всё бы работало и смысл тот же...


Кто-то подумает, что это мелочь, но я хочу просто напомнить, что в первую очередь - мы программисты, которые пишут для таких же программистов, и умение писать простой для понимания, чтения, поддержки код - большой труд.
11🔥8🏆6
#полезное #резюме #работа

Получается так, что если ты пишешь хоть где-то в резюме свои контакты КРОМЕ КАК ЗОНЫ КОНТАКТОВ - для HH ты нехороший человек и воруешь у них деньги, ты будешь в shadow ban и поэтому тебе - НИКТО НЕ ПИШЕТ!

Вот почему я всегда советовал и советую со своим резюме струячить к Семёну - нашему братскому HR, который и словом и делом и результатом!

Правильно - оставлять контакты только в зоне контактов!
🔥132👏2
Forwarded from Semyon
Такс, 10 минут до дэйли, так что супер краткий фаст:

1. Так выглядит резюме, которое просто лежит на хх (человек не откликался к нам). Как видите контакты скрыты и чтобы их открыть, нужно =потратить деньги=

2. Так выглядит контакт после отклика или после того как куплено открытие контакта (все контакты есть и видна история откликов).

3. Так выглядит =резюме в подарок=. При размещении 1-ой вакансии, ХЭХЭ с барского плеча отсыпает 10-20 резюмешек, чтобы могли разживиться эйчары (контакты тут открыты, это "вьюшка" до перехода в резюме)
🔥113👏3
#заметка #notion

Решил добавлять дополнительные материалы из WWDC в темы, которые помогут изучить материал не только централизировано, как например будет с "Изучение SwiftUI с 0 до PRO", но и точечно - как уже начал сейчас, но что это значит?

Всё просто, есть например тема - SwiftUI: View identity и вот есть ключевые WWDC с просмотром которых можно получить дополнительное понимание от инженеров Apple.

И вот эти напоминания будут лежать в нужных местах.
- Не нужно ходить по углам и искать
- Не нужно думать, что что-то упусти
- Удобно и полезно


Зашел почитать за какую-то тему, увидел рекомендацию посмотреть WWDC для лучшего понимания, дальше уже сам, ВСЁ! Тем самым ты не потеряешь и при этом будешь знать нужные темы.
👍8🔥5🎉32
Пока так, асуждаю!
😁131👏1🤝1
Я понимаю зачем нужны associated values и умею с эти работать и применять
Anonymous Poll
17%
100% / 100%
18%
80% / 80%
11%
60% / 60%
18%
50% / 50%
7%
40% / 40%
29%
Не знаю / не умею
#mini #app #сообщество

Чтобы вы понимали, разработка идёт уже почти 3 недели, позавчера была начата V3 с нуля, так как V2 был отфармотирована Claude Code и при этом он потёр коммиты для отката.

Теперь только через pull-request'ы и строгий GITFLOW с защитой Master, вот такой прикол этот **** отчибучил, причём такой команды в описании не было, он просто подключал Redis и переводил на ZOD архитектуру для большей типизации ошибок, и по какйо-то причине РЕШИЛ, ЧТО НАДО ОТФАРМОТИРОВАТЬ МНОЖЕСТВО КЛЮЧЕВЫХ ФАЙЛОВ и ВИДМО С НУЛЯ НАПИСАТЬ КРИВО, А чтобы придать бодрости духа - потереть коммиты, рил, как-будто дэмон в него вселился вовремя работы, вот так 😄

Так - что всем тем, кто считает, что ИИ уже завтра заменит программистов - большой привет! 👋
Please open Telegram to view this post
VIEW IN TELEGRAM
😁17🤯10👍32
Решение для работы с множественными ветками

Увидел в чате отличную статью о том, как перестать терять время при переключении между ветками Git.

Проблема, которую решает:
- Потеря незакоммиченных изменений при смене веток
- Пересборка проекта после каждого переключения
- Неудобство при code review чужих веток

Суть решения - git worktree: Вместо переключения веток создаём отдельные рабочие копии проекта, каждая смотрит на свою ветку. При этом все копии используют общий .git репозиторий.

Статья небольшая, внутри статьи находятся ключевые команды, преимущества над альтернативами и ограничения! 🙅
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8💯2🔥1
#собеседование #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