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

Автор треда рассказывает о том, как запустил 10 приложений, зарабатывающих более $15,000 в месяц, и теперь ищет пути для масштабирования. В треде OP делится своими размышлениями о том, нужен ли сооснователь, а также как найти баланс между развитием новых идей и управлением существующими проектами.

📍 О чём статья:
- Сложности управления множеством приложений.
- Проблемы налогов.
- Опыт найма фрилансеров и выводы о поиске партнёра для совместной работы.

🔗 Читай пост на Reddit: Made $15K+ Last Month: Need Advice on Scaling My App Business
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥6🙈5
40 лет и увольнение: опыт собеседований в Google, Meta и Amazon

Автор делится своим личным опытом прохождения собеседований на позиции Senior iOS Engineer в крупнейших компаниях после увольнения. В статье рассказывается о подготовке, прохождении интервью и ценных советах для соискателей

📍 О чём статья:
- Подготовка к собеседованиям: структуры данных, алгоритмы и паттерны проектирования
- Детальный опыт прохождения интервью в Nelzyagram, Amazon и Google
- Советы по улучшению резюме и прохождению технических и поведенческих интервью
- Важность системного дизайна для iOS позиций
- Личные выводы и рекомендации для пажилых специалистов

🔗 Читай фулл пост: Turned 40 and got layoff on April fools day 2024, Here is my senior iOS interview experience with Google, Nelzyagram and Amazon
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12😢2
16.1 версия Xcode вышла, можно качать! 👋

[ссылка на скачивание]
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥63👍2
#concurrency #multithreading

Многопоточная разработка в iOS — словно блуждание в лабиринте. Непрекращающиеся сложности с синхронизацией, запутанные задачи GCD и постоянная головная боль с поддержанием стабильности приложений.

Но представь, что все эти трудности остались позади. Ты уверенно используешь Actor и async/await для управления потоками, легко синхронизируешь задачи и переходишь от GCD к новым, более простым и эффективным подходам. Твой код становится чище, а производительность приложений — выше.

Чтобы к этому придти — нужно начать с основ, основ structured concurrency. Понять разницу между unstructured, чтобы понимать от чего уходим и к чему приходим, основу как теоретическую, так и практическую, чтобы не наплодить проблем с умным видом.

Вcе это есть и уже доступно в книге, от нашего 🐘 Никиты. Ccылка на чтиво здесь: [ссылка на бесплатную книгу]

Не забудь поделиться с друзьями, чтобы быстрее перейти к Structured Concurrency и перестать страдать 🥥
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥194👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Оффициальный GitHub Copilot для Xcode уже доступен 👋

Инструкция по установке находится внутри репы.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍3👏21👎1
#salary

В этом треде можно прочитать про те самые зарплаты на ВУ (валютные удалёнки). Люди делятся своей позицией, страной / городом, зарплатой, которую они получают. Весьма интересно почитать, так же можете спросить свои вопросы 🪖

https://www.reddit.com/r/iOSProgramming/s/OiqKsaKIx3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2
Если идешь на собеседование и предстоит секция лайвкодинга, то обязательно, прям возьми и запомни, что нельзя молча решать его.

1. Может закроится мысль у интервьюера, что ты просто знаешь, что так надо делать и знаешь без почему. Тебе же надо аргументировать своё решение.

Например решил добавить протокол к сервису, так скажи, что это ради тестов, ради подмены реализации, добавь, что тем самым мы реализуем букву D из SOLID принципов. Приведи пример из рабочего процесса, что дескать была реализация на GCD и чтобы плавно переехать на Structured Concurrency реализацию, протокол нам поможет.

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

3. Даже если не знаешь решения, ты должен зацепиться за что-то и начинать распутывать. Я это всегда повторял и буду повторять! Так - как это лишний плюсик кандидату, про это даже подробно в воркшопе "Полный процесс собеседования: от подготовки до фидбека + PDF гайд" проговаривал.

4. Не бойся рассказать про новые технологии, как например в секциях про многопточность, привет акторам и структурному concurrency. В ноушене есть секции соответствующие, достаточно рассказать про тред пул, плюсы и минусы async / await, что такое актор и какую он проблему решает и не решает, и всё, минимум уже знаешь. А дальше уже только апгрейд минимума: отмена тасок и проверка, async let для параллельного выполнения, даже картинку добавил, актор хопинг и реентерабельность, Task.deatached + Task.yield и все, крепки мидл+ дальше рекомендую.

Что-то забыл, или добавить / отредактировать? Пишите в чате и добавлю 👋
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥4👍2🤯1
Тред про изучение iOS с нуля и устройства в BIG Tech

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

Сам тред - весьма занимательный. Автор делится своим обучением: что и в какой последовательности делал. Рассказал про свою ЗП, в какой нише проект, количество откликов на вакансии - спойлер 280+.

Тред будет полезным тем кто обучается или в процессе, чтобы как минимум зарядится мотивацией, так как там, да-да не удивляйтесь, сложнее найти первую работу чем в СНГ, в общем и целом.

https://www.reddit.com/r/swift/comments/1h09dm0/3_years_ago_i_didnt_know_any_ios_dev_now_im_a/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button
👍31
Чёрная пятница

Гитхаб репозиторий со списком программ и скидками на них, можно удачно взять ПО на год(ы) вперёд. А если не хочется тратить свои деньги, то можно спросить у руководства о возмещении, скидки обычно длятся от пары дней и до недели, лучше уточнять в каждом предложении! 🤨
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍1🔥1
Несколько вариантов почему могут отозвать оффер (разделю их по главам):

1. Нарушение флоу найма
2. Затянули время
3. Мудаки и иуды

По подробнее по каждому пункту:


1.
➣ Рекрутер или согласующий/нанимающий скинул оффер до того, как прошла проверка СБ или до того, как одобрило последнее лицо согласования (понадеявшись, что всё будет ОК). Тут всё понятно, человек поспешил, нарушил — получил в своё "портфолио" негативно настроенного кандидата.
➣ Всё ок, СБ и согласование пройдены, но до выхода на работу =бац= и отзыв оффера: Тут люди либо получили пиздов сверху, либо передумали(3):
Пиздов сверху можно получить, если ты:
• Превышаешь вилку и согласовываешь это в тихую;
• Вывод человека не по той ставке команды/отдела/департамента. Например кандидата выводят не в департамент 1, а в департамент 2, чтобы потом перевести аккуратно и незаметно (чаще всего так делают, когда всё збс, но итоговое лицо мудак и не пойдёт на встречу), соответственно если это спалили то габэлла;
• Вывод человека на ставку выше (прим.: мидла на синьора). Допустим человек прошёл тех.собесы на мидл/мидл+, а его выводят на синьора (либо заочно, либо подарком, либо по блату, либо рекрутер/согласующий договорился), а потом это бац и спалилось.


2.
➣ Согласовали дату выхода через 2-10 недель и за это время попался другой кандидат (на два зуба больше и просящий на 6 копеек меньше). Искали сами специально (повторюсь в 3 главе) или просто попался по рекомендации/случайно нашли не так важно,→ суть в том, что рыночек порешал и кто-то более сильный/дешёвый/наглый забрал ваш оффер;
➣ Не спецом затянули и случился повтор 1: что-то вскрылось узналось (результаты собесов, накрутка, СБ, ход не по флоу-найма (прим. пропустить могли один этап) и т.п.).
➣ Пока ждали выход, пересмотрели бюджет/ставки/бэклог/аутстафф или аутсорс подрядчиков на год/квартал/месяц и потребность отпала и заморозили найм;
➣ Пока ждали выход кто-то сверху или сбоку согласовал перевод/перестановки и ставка закрылась;


3.
➣ Продолжают вести кандидата, имея сомнения и не пытаясь их прощупать. Потом сомнения подтверждаются и всё =ЧАО ПОКА= (сомнения могут быть в чём угодно: в софтах, в хардах, в документах, в месте жительства и т.п.).
➣ Главный хуй передумал: Это может по самым разным причинам: приснился сон, птица мимо =ЧЁРНАЯ= пролетела, когда думал о новом сотруднике, узнал что он дева, узнал что завтра доллар будет по 110 и решил вложить часть ФОТа в акции S&P500, вспомнил что на финале кандидат запнулся/замялся, тут вообще что угодно может быть;
➣ Похожее на пункт 2, но действуют не из позиции своей "безопасности", а из наглости/мудачества.
Пример: Специально затянули время, чтобы попытаться найти кого-то дешевле/тупее/скромнее/круглее/синусоиднее и т.п.
➣ Передумали насчёт другого кандидата и у вас оффер отозвали, а ему прислали;
➣ В дополнение последнему пункту во 2-ой главе: Тут уже корпоративные игры. По сути мудаки те, кто помещал найму, а не нанимающая сторона (рекрутеры, согласующие, нанимающие, кадровики);



Фухх, вроде всё, но если вдруг шо забыл, добавлю/исправлю🫡
И некоторые пункты мудачества спорные могут быть, ибо посмотреть можно по разному)

Спасибо большое Семёну за такое прекрасное объяснение, которое добавлю в ноушен самособой!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥11👍3💔2
#менторы #отзывы #своих_не_бросаем

Всем доброго воскресного дня! Хочу порекомендовать "Таблицу менторов" от нашего ноушена, в частности двух менторов, их кстате всего два, если хотите добавиться пишите в лс.

Товарищ СОВА - @OwlMaster
Товарищ Рома - @ondalor

Только положительные отзывы слышал про наших архаровцев, в частности:
- быстрое вовлечение в проект
- квалифицированная помощь
- работа на результат

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

Лично мой кейс, Романы4 помог в переговорах к ЗП, была сложная ситуация, но Романыч помог и всё разрешилось прибаквой к окладу.

Вот тут все отзывы на Рому, на Сову нет отзывов, поэтому напишите пожалуйста кто с ним взаимодействует, дабы накинуть старине заслуженные отзывы.

УТП своих менторов в том, что всегда в чате можно поинтересоваться, что к чему и почему, а не эфимерный ментор из интернета, где отзыв можно написать совершенно любой, у нас же, всегда можно в чате найти того, кто сотрудничал, обнял!
🔥12👍4💯3
Новый тип в стандартной библиотеке Swift — Vector

Swift добавляет Vector, новый тип в стандартной библиотеке, который представляет собой массив фиксированного размера. Это альтернатива классическим C-массивам: T[N], std::array<T, N> в C++ и [T; N] в Rust.

Почему это важно?

Обычные массивы — это динамические структуры данных, которые выделяются на heap и могут быть излишне затратными для небольших массивов фиксированного размера. Vector, напротив, хранит элементы на stack или inline, что обеспечивает высокую производительность и минимизацию накладных расходов.

Основные преимущества Vector:

- Фиксированный размер: размер массива задаётся при создании.

- Высокая производительность: нет динамического выделения памяти.

- Безопасность: инлайн-инициализация элементов с возможностью индексации и итерации.

Пример использования:
let numbers: Vector<4, Int> = [1, 2, 3, 4]

for i in numbers.indices {
print(numbers[i])
}


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

Официальный обзор и примеры можно найти в предложении SE-0453.
🔥15👍3
Pets vs. Cattle — Почему 99% твоего кода отправят в утиль (и это нормально)

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

Что если, значительная часть работы делается в стол? Значит ли это, что происходит бесполезная работа?

💡 "Pets vs. Cattle" — концепция из DevOps, которая применима и к разработке.

Pets — уникальные, любимые проекты, которым уделяют особое внимание. Они требуют постоянного ухода, улучшений и переживаний.

Cattle — код, который выполняет свою задачу, а потом его заменяют новым, без лишних сантиментов.

🔹 Большинство разработчиков относятся к своему коду как к питомцу: холят, лелеют, бесконечно рефакторят.
🔹 А бизнесу нужны "коровы", которые дают результат здесь и сейчас.

Что если мы можем принять тот факт, что 99% кода не переживет следующий бизнес-цикл. И это нормально. Настоящий профессионал не хранит код, а учится эффективно управлять "фермой". Чтобы разобраться в этом вопросе, можно почитать статью у Вастрика, а своим мнением поделиться в чате.
🔥8👍2
Swift 6.1 и новинки в многопоточности

Swift 6.1 (beta) привносит важные изменения для работы с асинхронностью и акторами. Если ты следишь за эволюцией concurrency в Swift, вот что стоит знать:

[Изолированный deinit (будет в будущем)]

Разработчики давно ждали, чтобы deinit мог быть привязан к актору. В будущем можно будет явно указывать isolated deinit, например, для @MainActor классов. Это упростит управление памятью, но принесёт небольшие накладные расходы.
---

[Расширенное использование nonisolated]

Теперь nonisolated можно указывать сразу на всём расширении, а не на каждом методе. Это избавляет от дублирования, особенно при реализации протоколов в @MainActor классах.

💡 Было:

extension MainActorType: NotIsolated {
nonisolated func doStuff() {}
nonisolated func doThings() {}
}


💡 Стало:

nonisolated extension MainActorType: NotIsolated {
func doStuff() {}
func doThings() {}
}

Меньше кода — больше удобства.

---

[Автоматический вывод типа в TaskGroup]

Раньше в withTaskGroup приходилось вручную указывать тип результатов. Теперь компилятор умеет автоматически определять тип из контекста.

💡 Было:

let messages = await withTaskGroup(of: Message.self) { group in
// ...
}


💡 Стало:

let messages = await withTaskGroup { group in
// Swift сам понимает, что тут Message!
}


Типы всё ещё нужно указывать в сложных случаях, но в большинстве ситуаций — компилятор справляется сам.

Подробный разбор всех нововведений — читай тут.
8👍4🔥3
#обучение

Сейчас наполняю главу для изучения замыканий, думаю, что лучше этих двух видео и не найти даже:

1. https://www.youtube.com/watch?v=WeT1U9YiFAg
2. https://www.youtube.com/watch?v=410NFC0DYiM

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

А вот capture list, delayed deallocation, autoclosure, проблема @escaping замыканий со SwiftUI, работа с ARC и вложенные замыкания + ARC — это уже на грейды повыше. Всё это можно найти и в ноушене, например вот здесь:

1. Capture list
2. Delayed deallocation
3. Autoclosures
4. Почему не стоит использовать escaping замыкание в SwiftUI
5. Escaping
6. Вложенные замыкания и ARC
🔥7🫡4👍3
#работа #шабашка

Всем привет, наш добрый друг — эйчар Семён поделился таким интересным графиком: https://public.tableau.com/app/profile/alkadarskiy.selim/viz/2021_16595984868110/232020

Актуально и сейчас. Как работать? Откликаться на вакансию либо ДО массовой активности других соискателей либо ПОСЛЕ чтобы ваш отклик был выше.
🔥14👍21
#полезное #swiftui #observable

lazy var в @Observable – почему не работает? 🤔

Если ты попробуешь использовать lazy var в @Observable классе, то наткнёшься на ошибку:

@Observable class MyClass {
private(set) lazy var something = "" // 'lazy' cannot be used on a computed property
}


Но почему так?

Ключевая проблема@Observable автоматически создаёт "синтезированные" свойства для отслеживания изменений. lazy var же инициализируется при первом доступе, а это конфликтует с механизмом синтеза.

Если добавить к нему макрос @ObservationIgnored, то система наблюдения будет игнорировать синтез для этого свойства.


@Observable class MyClass {
@ObservationIgnored
private(set) lazy var something = "" // 💚 Все ок, теперь можно!
}
🔥10👍32
#полезное #поиск_работы #линкедин

1. Создать ЛинкедИн;
2. Оформить профиль (можно как у меня, можно как у других людей с оформленным профилем);
3. Еженедельно расходуйте весь максимум на добавление контактов (100-150 шт). Добавляйте инфлюенсеров и рекрутеров и людей с большим количеством контактов - это поможет в будущем при посте: "я в поиске работы"/"я уволился" и т.п.;
4. Попросите знакомых заапрувить навыки на Линке;
5. Комментируйте рандомные посты, поздравляйте с днём бетона всех у кого день бетона, желайте удачи, ставьте лайки, пишите посты и повторюсь "расширяйте сеть контактов" — это гаранты вашего высокого SSI рейтинга. Чем выше эта залупа, тем вы "круче";
Ссылка для проверки SSI метрики на LinkedIn
6. Лайфхак: смешной мем в посте добавляет охватов больше, чем полезный "высер" + люди будут хихикать и потом мб вам придут и дадут ваку за хороший смех;
7. Делать всё нужно регулярно↑;
8. После 1000+ контактов можно забить хуй, но не рекомендую))))
9. Плашечка опенТуВорк: честно, холивар на ровном месте. Хотите ставьте, хотите нет);
10. Если вы в поиске работы — укажите ваш тг везде: в шапке, в заголовке, в "о себе", в контактах;
11. Можно заебаться и настроить авто-аутрич, когда к вам в контакт добавляется, чтобы от вас прилетало сообщение: салам аллейкум, одна тут? *Я такое не делал, так что не подскажу*;
12. Как искать ваки: в постах рекрутеров, через булевые запросы в поисковой строке линка, по хештегам, писать в лс рекрутерам и "привет рОдная, есть чем поживиться для пажилого?"

=КрАтЕньКо=

P.S. Я договорился с Семёном и будет гайд для небазовых, где он подробном и четко все сделат, в основном канале сегодня - завтра отпишу.
🔥177