iOS Dev
7.83K subscribers
1.05K photos
96 videos
1 file
1.23K links
👨‍💻Автор: Виктор Грушевский (@Viktorianec)

⚒️ База: https://boosty.to/ios_dev | 🤖 @iOSIQBot | https://iosiq.ru

🍏Канал об iOS-разработке, алгоритмах и архитектурах

⭐️ Подготовка к собесам

⭐️ Код. Много кода.

#ios #mobile #swift
Download Telegram
🚀 Swift 6.2 уже доступен

📖 Самые важные изменения здесь и в карточках.

Можно ещё раз взглянуть на InlineArray и Span, познакомиться с Subprocess, узнать, что поменялось в NotificationCenter и многое другое.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
5❤‍🔥3511💯6👍3🍓221🔥1🏆1
Как отключить Liquid Glass для iOS-приложения при использовании новых SDK в iOS 26

Всё просто: добавьте в plist проекта UIDesignRequiresCompatibility в YES.

Но это решение вероятно сработает ровно до 27 iOS, так как Apple уже обещает его задепрекейтить.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥16116🏆52👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Сфера Фибоначчи на Metal + SwiftUI

Наложение решётки Фибоначчи (она же золотая спираль или просто сфера Фибоначчи) на поверхность сферы может оказаться неплохим математическим челленджем, а ещё весьма быстрым и эффективным способом распределения точек.

Например, про филлотаксис и одну из загадок Да Винчи я писал уже в канале - обязательно загляните.

А сегодня делюсь анимацией, которую можно сделать с помощью доступных фич Metal уже сейчас (конечно, с поправкой на производительность).

📖 Кстати, на хабре можно посмотреть, как повысить эффективность распределения точек.

А в 💰 бусти и ⭐️ в телеграме вас уже ждёт код реализации (этого и многих других необычных эффектов).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
721🔥16❤‍🔥6💯221👍1
Вышла SQLiteData 1.0 от создателей PointFree: альтернатива SwiftData с CloudKit-синком и шерингом

🛠 Среди заявленных фич на GitHub:

- Создание моделей с помощью структур и перечислений Swift.
- Типобезопасные и схемобезопасные запросы для фетча данных.
- Высокопроизводительный декодер SQLite.
- Можно юзать property wrappers, аналогичные @Query в SwiftData (работает не только в SwiftUI, но и в целом в @Observable-моделях и UIKit-контроллерах).
- Прямой синк с CloudKit.
- Поддержка iCloud-шеринга для обмена инфой между юзерами.
- Основано на SQLite.

📖 Большой обзор с примерами - тут, а полная документация - здесь.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
929👍8🔥6🍓4🤯3211
Как использовать [weak self] в Swift Concurrency Task?

Donny Wals рассматривает кейсы, которые помогут предотвратить утечки памяти и пытается ответить на несколько вопросов.

➡️ Основы использования [weak self] в completion handlers.
➡️ Использование [weak self] и немедленное развертывание внутри таски.
➡️ Есть ли проблема при использовании guard let self при старте задачи.
➡️ Предотвращение strong self внутри задачи.
➡️ Как использовать [weak self] в более длительных задачах.

📖 Статью целиком можно прочитать здесь.

А вот тут есть большой разбор проблем с утечками памяти (классических примеров и способов поиска).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
41611👍7🔥5💯41
🎉 Выпущено в релиз обновление iOS IQ - с новым режимом и поддержкой iOS 26

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

Что из мажорных изменений?

- Полноценный новый боевой режим «Исправь и собери код». Попробовал проверить, насколько вообще реально решать головоломки с кодом, пришёл к выводу, что собрать рабочий варик из хаоса даже 15 строк может быть утомительно - поэтому примерно этим размером и ограничил (рекомендую затестить дзен-рандом и не используйте подсказки, это не наш путь).
- Новый блок вопросов по многопоточке.
- Обновил несколько существующих веток с темами, добавил практически в каждую по несколько новых задач.

Был удивлён, что в даже в RC-версии Xcode завезли проблему с компилированием кода, если в проекте Metal (а у нас он есть), потратил наверное час, чтобы корректно зааттачить нужный тулчейн - если у кого-то есть такая же проблема, вот ветка.

🏠 Скачайте приложение в AppStore - и поставьте оценку, пожалуйста.

* кстати, бот также обновлен, удалил пару дублей в опциях и добавил несколько новых вопросов.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
18❤‍🔥16🔥87💯22👍1🍓1
Кажется, пора внести ясность

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

Все мы хотим проводить рефакторинг! А какой разработчик не хочет?

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

Напомню, что есть полезное правило трёх.

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

Поэтому часто можно услышать от продактов или архитекторов (кому повезло и у них они есть на проекте) - что давайте сделаем фичу, а зарефакторим потом, в следующих спринтах когда-нибудь.

В такой момент важно не пропустить вспышку, когда дальнейшее наслаивание логики может поломать слишком многое внутри.

И в такой момент жизненно важно для проекта остановиться.

Для этого должен быть лид, способный взять ответственность за изменения в ядре проекта (или крупной фичи).

И будет здорово, если ваши стейкхолдеры или продакты смогут оценить такую ветку изменений по достоинству.

Так бывает не всегда.

Зато вы после проведённого рефакторинга сможете спать спокойно.

А вот стоит ли оно таких усилий - решать вам и вашей команде. Ведь многие проекты существуют и прекрасно себя чувствуют на стадии и так сойдёт.

Пишу про моменты, которые вам не расскажут ни на одной конференции здесь.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍2310❤‍🔥52🔥2💯2🤝1
Почему проекты на Swift сталкиваются с трудностями (и как их преодолеть)

📖 У Tuist вышел разбор, в котором объясняется не только то, почему в крупных Swift-приложениях начинаются типичные проблемы, среди которых и медленные билды, и нестабильные тесты, но, например и то, как справиться со всем этим не прибегая к кардинальным изменениям вроде перехода на React Native или помощи Bazel.

Про React Native это отсылочка к недавнему разбору о том, как Shopify взял и перевёл все мобильные приложения на React Native. Хотя у всего есть своя цена.

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

Но вообще в статье есть важные поинты, на которые стоит обратить внимание и посмотреть, можно ли это изменить у вас на проекте:

- Безусловно, одним из факторов для возможного преодоления сложностей они считают модуляризацию.
- Время сборок. Тут не обошлось и без их паблик-дашборда.
- Работа с тестами и разбор флагов.
- Анализ сборок и выводы. Нельзя не вспомнить и про xcbeautify.
- Derived Data. Рассматривают и те проблемы, что есть сейчас, и заглядывают в будущее. На самом деле, Apple уже работает над подходом, называемым хранилищем с адресацией по содержимому и явными модулями, к которому они постепенно подталкивают пользователей.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥15107👍5🏆1
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥1277❤‍🔥53👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация алгоритма для навигации по метро Токио на Swift

В необычном докладе Крис рассказывает не только о способах получения следующих доступных станций в метро, но и о связывании инфы с Dynamic Island.

Сам проект использует два типа данных: статику от жд-системы и GPS в реальном времени от юзера.

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

🛠 Хотя сам алгоритм алгоритм не опенсорснут по очевидным причинам, но в этой репе есть целых 5 приложений, которые использовались для сбора данных.

📖 Сама презентация на английском тут, видео здесь (на японском языке будет позже, если кто-то хочет дождаться).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
917🔥10🏆4👍2🤯2🍓2👏1💯1
Вышла первая версия Swift Configuration - новый инструмент чтения конфигов от Apple

В первую очередь либа преднозначена для экосистемы Swift-серверов, где конфиг часто считывается из нескольких источников. Но не только. Среди основных преимуществ:

➡️ Появился единый API для чтения конфигураций в приложениях и библиотеках.
➡️ Быстрый старт с поддержкой environment variables, аргументов, JSON/YAML и in-memory данных.
➡️ Есть опция создавать свои провайдеры конфигураций с открытым протоколом ConfigProvider.

Новая либа пригодится и в инструментах командной строки, и в тех приложениях и библиотеках, где нужно гибкое управление конфигурацией.

📖 Вводный пост здесь, примеры на GitHub, а вся документация (и кейсы использования) лежат вот тут.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
514🔥9👍6❤‍🔥4🤯1💯1
Основы работы с памятью в Swift: size, stride, alignment

Одной из основных задач на моей текущей работе является работа с бинарным протоколом (когда-то давно выбрали его не только потому что он более компактен по сравнению с традиционными вариантами вроде JSON или XML), но и не в меньшей степени из-за скорости и эффективности обработки (а ещё безопасности).

При работе с памятью для новичков важно понимать всего лишь 3 основных свойства: это size, stride и alignment.

И хотя с size всё кажется очевидным, но даже в доках есть важная сноска:

Размер типа не включает в себя динамически выделенную память. В частности, MemoryLayout<T>.size, когда T является типом класса, остается неизменным независимо от количества сохраненных свойств T.


Для stride как и следует из названия:
это количество байт от начала одного экземпляра T до начала следующего при хранении в непрерывной памяти или в `Array<T>`.


А вот что такое alignment? И вообще что такое смещение значения и как оно влияет?

📖 Делюсь простой и понятной статьёй, в которой буквально на пальцах объясняют все эти свойства, а ещё какие сложности могут возникнуть.

И напомню про этот пост c разбором MemoryLayout.

А если вы хотите разобраться с темой на более детальном уровне, то вам сюда.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥159❤‍🔥54👍1👏1💯1🏆1