Telegram Web Link
Визуальное справочное руководство для документирования кода на Swift

📖 В этом огромном материале Marco Eidinger представляет полный обзор параметров для документирования.

Кроме этого, он делится советами и рекомендациями по эффективному созданию документации, а также рассматривает различия между Xcode Quick Help по сравнению с DocC Renderer и Jazzy.

@iOS Dev
Различные способы сортировки массива строк в Swift

В Swift есть два способа сортировки: тот, который мутирует исходный массив, и тот, который этого не делает.

У них обоих одно и то же требование: элемент в коллекции должен соответствовать протоколу Comparable.

Типы, соответствующие этому протоколу, можно сравнивать с помощью операторов <, <=, >= и >.

📖 В этом материале рассказывается о различных способах сортировки, а также объясняется, в каких случаях localizedStandardCompare поможет справиться, например, с упорядочиванием имен формата Name2.txt, Name7.txt, и Name25.txt.

@iOS Dev
О сложном пути и о Гунсунь Луну из царства Чжао
Пост не только о разработке, но и о том, что мне кажется важным

Если бы за последние 25 лет авиационная промышленность развивалась столь же стремительно, как вычислительная техника, то Boeing 767 можно было бы приобрести сегодня за 500 долларов и облететь на нем земной шар за 20 мин, израсходовав при этом 19 литров горючего. Цитата из журнала «В мире науки» (1983, 8 выпуск).

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

Это касается хардорных фич, объёмного рефакторинга, попаданию в IT в целом, или участию в каких-то контестах, в частности.

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

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

⚽️ В футболе такая же параллель: вчерашняя победа Ливерпуля со счётом 7-0 невероятна, но капитан Манчестер Юнайтед не должен пихать судью на 86 минуте матча. В целом, лучше проиграть один раз 7-0, чем 7 раз по 1-0.

Несмотря на то, что стремление к лучшему естественно, как известно - это враг хорошего (спасибо, Вольтер).

Гунсунь Луну сказал: «Если от палки длиной в один чи ежедневно отнимать половину, это не завершится и через 10000 поколений».
Важно знать меру. И 1 000 задач на литкоде это замечательно, но столько ли нужно на самом деле?

@iOS Dev
Реализация поддержки ссылок с обработкой нажатий в UILabel на Swift

UILabel поддерживает отображение строк с атрибутами ссылки, но не позволяет нажимать на них и открывать их в браузере.

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

🛠 Однако реализация не так проста, и для этого нам потребуется собственные NSLayoutManager, NSTextStorage и NSTextContainer.

📖 В этом материале рассказывается, как создать такие ссылки с обработкой тапов.

@iOS Dev
Генерация похожих цветов в Swift или почему RGB не всегда лучший выбор

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

Однако на практике теперь у нас есть телефоны с дисплеями, которые позволяют отображать более 100% красного цвета, называемым суперкрасным.

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

Наконец, RGB трудно манипулировать. Если вы начнете с черного, вы можете увеличить количество «красного» в палитре цветов RGB, что сделает все более красным. Все идет нормально. Затем вы начинаете увеличивать «зеленый», и вы получаете… желтый?

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

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

Например, вы можете прочесть о цветовом пространстве Hue-Chroma-Luminance.

🛠 И даже немного поиграть с палитрой цветов, примеры кода: тут, тут, здесь или вот в этом gist.

@iOS Devв день 8 марта тема цветов выбрана неслучайно, поздравляю всех девушек с международным женским днём ❤️‍🔥🌹
Channel photo updated
Разбор нововведений в Swift 5.8: API с обратным развертыванием, улучшенные result builders и не только

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

📖 В этой статье Пола Хадсона можно узнать о самых важных изменениях, включающих примеры кода и пояснения.

Вам понадобится Xcode не ниже 14.3, но учтите: некоторые изменения требуют определенного флага компилятора до релиза Swift 6.

🛠 Можно заранее скачать playground, который используется в статье.

@iOS Dev
Загрузка данных в SwiftUI с помощью URLSession и async/await

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

Учитывая такую ​​сложность управления, неудивительно, что URLSession является центральным узлом, который позволяет настроить каждый аспект для группировки нескольких запросов.

📖 В этом обширном материале вы сможете узнать о следующих вещах:

1️⃣ Как с помощью URLSession управлять передачей данных.

2️⃣ Моделирование данных, получаемых через URLSession.

3️⃣ Управление асинхронным процессом обновления от download task.

4️⃣ Создание пользовательского интерфейса для управления загрузкой данных.

@iOS Dev
Как написать свой первый Unit Test на Swift

Не все и не всегда пишут тесты, и этому периодически бывают самые разные объяснения (иногда вполне обоснованные).

🧑‍💻 Если вы новичок в Swift или iOS, вы обязательно зададите себе этот вопрос в какой-то момент.

На самом деле, первые шаги в тестировании сделать довольно просто.

📖 И в этой статье Винсент объясняет, что для этого необходимо сделать.

@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Как создавать настраиваемые виджеты с динамическими параметрами?

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

Среди этих ситуаций можно выделить следующие:

1️⃣ Опции предоставляются удаленным сервером (API).

2️⃣ Параметры взяты из хост-приложения виджета.

3️⃣ Опции генерируются в рантайме.

📖 В этой статье пойдёт речь о первой ситуации. И хотя руководство посвящено этому сценарию, обсуждаемые принципы и методы также могут быть применены к двум другим.

@iOS Dev
Сравнительный анализ GPT-4 и GPT-3.5 на базе задач Leetcode

Состоялся релиз GPT - 4 и вышел технический репорт от OpenAI.

Прежде, чем все паблики/ленты/хабр заполнит волна очередных постов, что же там изменилось, я бы хотел акцентировать внимание на одном неваловажном сравнении, а именно том, как сейчас решает GPT-4 задачи на литкоде.

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

Главный вывод, GPT-4 научился решать хард-задачи. Да, пока мягко говоря не все, но несмотря на это, прогресс от 0 к 3 огромен.

Остальные сравнительные показатели вынесены в таблицу выше.

@iOS Devпока ещё до скайнета далеко
Please open Telegram to view this post
VIEW IN TELEGRAM
Вебхуки GitHub и Xcode Cloud

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

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

Мне для рабочих проектов Xcode Cloud пока что не очень зашёл, так как там невозможно прокинуть доступ на внутреннюю репу на гитлабе (без доступа по внешней сети), но несмотря на это, для репозиториев с публичным адресом это вполне хорошее решение.

📖 В этой статье рассказывается, как вы можете создать функцию Swift для прослушивания вебхука GitHub issue_comment, который запускает события каждый раз, когда пользователь добавляет комментарий к issue в репе или же пуллреквест, а также:

1️⃣ Проверяет наличие комментария в пуллреквесте.

2️⃣ Проверяет, что текст комментария соответствует строке «Upload to TestFlight».

3️⃣ Если это так, функция запускает сборку Xcode Cloud, которая загружает приложение для внутреннего тестирования в TestFlight с использованием API App Store Connect (это SDK я использую и в Starly).

@iOS Dev
This media is not supported in your browser
VIEW IN TELEGRAM
Как вернуть Jump to Definition в Xcode

Если вы предпочитаете старое поведение дефолтному (и хотите сэкономить немного времени при разработке), то можно изменить поведение Command-click.

1️⃣ Откройте Xcode Preferences.

2️⃣ Перейдите ко вкладке Navigation.

3️⃣ Измените значение с Command-click on Code на Jump to Definition.

После этого изменения вы можете открывать связанные команды с помощью command + control + click (вернуть обратно можно по этой же инструкции).

📖 Источник гифки.

@iOS Dev
3 ошибки при работе с замыканиями (и как их избежать)

📖 В этом важном материале с примерами кода (и даже с видео-вставками) идёт речь о следующих ошибках:

1️⃣ Что может пойти не так при захвате переменной.

2️⃣ Retain Cycles и почему они могут появиться (куда же без них).

3️⃣ В чём разница между escaping и non-escaping (и от чего зависит время жизни замыкания).

⭐️ Кстати, рекомендую не забывать и о трёх золотых правилах weak self.

@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Вам не (всегда) нужно использовать [weak self]

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

🛠 Например, это небольшое приложение демонстрирует различные сценарии утечки памяти, а также показывает, где использование [weak self] может быть излишним.

Одна из возможных ситуаций: у вас есть дочерний контроллер, который хранит ссылку на своего владельца/родителя в свойстве. Вот тогда свойство должно быть помечено weak, чтобы предотвратить циклическую ссылку/ретэйн цикл.

📖 В этой статье рассматриваются ключевые моменты на реальных примерах.

😃 iOS Dev — некоторые материалы лучше сохранить
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Создание анимации с помощью SwiftUI

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

1️⃣ Как создать анимацию с помощью маски в SwiftUI?

2️⃣ От концепции к коду: стратегии для создания анимаций в SwiftUI.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Недавно евангелисты Apple, дизайнеры и инженеры (звучит как начало анекдота) собрались на конференции Ask Apple, чтобы ответить на вопросы о Live Activity и Dynamic Island.

Несколько основных моментов из этих разговоров, в том числе рекомендации по размеру, стилю и отличиях в Live Activity Иван разобрал в своём небольшом ролике:

📺 Посмотреть подробнее на канале «Код воробья».

📖 А вот тут, например, есть отличный пример работы с Live Activity.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Код Воробья для iOS разработчиков
Apple отвечает на 10 вопросов про Live Activity. Разобрал самые интересные:

- Как обновлять без пушей
- Как добавить кнопку
- Можно ли менять фон

Остальные доступны по ссылке.
2025/02/24 13:53:21
Back to Top
HTML Embed Code: