Реализация поддержки ссылок с обработкой нажатий в UILabel на Swift
Конечно, можно реализовать это на базе
🛠 Однако реализация не так проста, и для этого нам потребуется собственные
📖 В этом материале рассказывается, как создать такие ссылки с обработкой тапов.
@iOS Dev
UILabel
поддерживает отображение строк с атрибутами ссылки, но не позволяет нажимать на них и открывать их в браузере. Конечно, можно реализовать это на базе
UITextView
, но это более тяжелый компонент и, следовательно, может быть не лучшим выбором. 🛠 Однако реализация не так проста, и для этого нам потребуется собственные
NSLayoutManager
, NSTextStorage
и NSTextContainer
.📖 В этом материале рассказывается, как создать такие ссылки с обработкой тапов.
@iOS Dev
Генерация похожих цветов в Swift или почему RGB не всегда лучший выбор
Теоретически RGB — это группа цветовых пространств, которая позволяет указать дисплею, какое напряжение требуется каждому субпикселю.
Однако на практике теперь у нас есть телефоны с дисплеями, которые позволяют отображать более 100% красного цвета, называемым суперкрасным.
О RGB тоже трудно думать. Красный, зеленый и синий аддитивный свет ведут себя не так, как мы привыкли — вы можете видеть отдельные цвета вблизи, но по мере удаления они смешиваются вместе, и вы начинаете видеть только один цвет.
Наконец, RGB трудно манипулировать. Если вы начнете с черного, вы можете увеличить количество «красного» в палитре цветов RGB, что сделает все более красным. Все идет нормально. Затем вы начинаете увеличивать «зеленый», и вы получаете… желтый?
Но есть и другие представления цветов, которые легче поддаются изменению.
📖 В этом необычном материале автор делится своими размышлениями о генерации цветов на Swift и рассказывает о выводах, к которым пришёл.
Например, вы можете прочесть о цветовом пространстве Hue-Chroma-Luminance.
🛠 И даже немного поиграть с палитрой цветов, примеры кода: тут, тут, здесь или вот в этом gist.
@iOS Dev —в день 8 марта тема цветов выбрана неслучайно, поздравляю всех девушек с международным женским днём ❤️🔥🌹
Теоретически RGB — это группа цветовых пространств, которая позволяет указать дисплею, какое напряжение требуется каждому субпикселю.
Однако на практике теперь у нас есть телефоны с дисплеями, которые позволяют отображать более 100% красного цвета, называемым суперкрасным.
О RGB тоже трудно думать. Красный, зеленый и синий аддитивный свет ведут себя не так, как мы привыкли — вы можете видеть отдельные цвета вблизи, но по мере удаления они смешиваются вместе, и вы начинаете видеть только один цвет.
Наконец, RGB трудно манипулировать. Если вы начнете с черного, вы можете увеличить количество «красного» в палитре цветов RGB, что сделает все более красным. Все идет нормально. Затем вы начинаете увеличивать «зеленый», и вы получаете… желтый?
Но есть и другие представления цветов, которые легче поддаются изменению.
📖 В этом необычном материале автор делится своими размышлениями о генерации цветов на Swift и рассказывает о выводах, к которым пришёл.
Например, вы можете прочесть о цветовом пространстве Hue-Chroma-Luminance.
🛠 И даже немного поиграть с палитрой цветов, примеры кода: тут, тут, здесь или вот в этом gist.
@iOS Dev —
Разбор нововведений в Swift 5.8: API с обратным развертыванием, улучшенные result builders и не только
Хотя многие важные изменения Swift в настоящее время можно узнать в Swift Evolution, Swift 5.8 сам по себе является более чистым релизом: есть не только дополнения, но также и улучшения функциональности.
📖 В этой статье Пола Хадсона можно узнать о самых важных изменениях, включающих примеры кода и пояснения.
Вам понадобится Xcode не ниже 14.3, но учтите: некоторые изменения требуют определенного флага компилятора до релиза Swift 6.
🛠 Можно заранее скачать playground, который используется в статье.
@iOS Dev
Хотя многие важные изменения Swift в настоящее время можно узнать в Swift Evolution, Swift 5.8 сам по себе является более чистым релизом: есть не только дополнения, но также и улучшения функциональности.
📖 В этой статье Пола Хадсона можно узнать о самых важных изменениях, включающих примеры кода и пояснения.
Вам понадобится Xcode не ниже 14.3, но учтите: некоторые изменения требуют определенного флага компилятора до релиза Swift 6.
🛠 Можно заранее скачать playground, который используется в статье.
@iOS Dev
Загрузка данных в SwiftUI с помощью URLSession и async/await
Хотя загрузка данных с сервера может показаться разработчику простой, она зависит от нескольких компонентов.
Учитывая такую сложность управления, неудивительно, что
📖 В этом обширном материале вы сможете узнать о следующих вещах:
1️⃣ Как с помощью
2️⃣ Моделирование данных, получаемых через
3️⃣ Управление асинхронным процессом обновления от download task.
4️⃣ Создание пользовательского интерфейса для управления загрузкой данных.
@iOS Dev
Хотя загрузка данных с сервера может показаться разработчику простой, она зависит от нескольких компонентов.
Учитывая такую сложность управления, неудивительно, что
URLSession
является центральным узлом, который позволяет настроить каждый аспект для группировки нескольких запросов.📖 В этом обширном материале вы сможете узнать о следующих вещах:
1️⃣ Как с помощью
URLSession
управлять передачей данных.2️⃣ Моделирование данных, получаемых через
URLSession
.3️⃣ Управление асинхронным процессом обновления от download task.
4️⃣ Создание пользовательского интерфейса для управления загрузкой данных.
@iOS Dev
Как написать свой первый Unit Test на Swift
Не все и не всегда пишут тесты, и этому периодически бывают самые разные объяснения (иногда вполне обоснованные).
🧑💻 Если вы новичок в Swift или iOS, вы обязательно зададите себе этот вопрос в какой-то момент.
На самом деле, первые шаги в тестировании сделать довольно просто.
📖 И в этой статье Винсент объясняет, что для этого необходимо сделать.
@iOS Dev
Не все и не всегда пишут тесты, и этому периодически бывают самые разные объяснения (иногда вполне обоснованные).
На самом деле, первые шаги в тестировании сделать довольно просто.
📖 И в этой статье Винсент объясняет, что для этого необходимо сделать.
@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Как создавать настраиваемые виджеты с динамическими параметрами?
Существует ряд обстоятельств, когда нам понадобится настраиваемый виджет с динамическими параметрами.
Среди этих ситуаций можно выделить следующие:
1️⃣ Опции предоставляются удаленным сервером (API).
2️⃣ Параметры взяты из хост-приложения виджета.
3️⃣ Опции генерируются в рантайме.
📖 В этой статье пойдёт речь о первой ситуации. И хотя руководство посвящено этому сценарию, обсуждаемые принципы и методы также могут быть применены к двум другим.
@iOS Dev
Существует ряд обстоятельств, когда нам понадобится настраиваемый виджет с динамическими параметрами.
Среди этих ситуаций можно выделить следующие:
1️⃣ Опции предоставляются удаленным сервером (API).
2️⃣ Параметры взяты из хост-приложения виджета.
3️⃣ Опции генерируются в рантайме.
📖 В этой статье пойдёт речь о первой ситуации. И хотя руководство посвящено этому сценарию, обсуждаемые принципы и методы также могут быть применены к двум другим.
@iOS Dev
Сравнительный анализ GPT-4 и GPT-3.5 на базе задач Leetcode
Состоялся релиз GPT - 4 и вышел технический репорт от OpenAI.
Прежде, чем все паблики/ленты/хабр заполнит волна очередных постов, что же там изменилось, я бы хотел акцентировать внимание на одном неваловажном сравнении, а именно том, как сейчас решает GPT-4 задачи на литкоде.
😎 Для этого я изучил отчёт, который находится в публичном доступе и собрал сравнение в отдельную таблицу.
Главный вывод, GPT-4 научился решать хард-задачи. Да, пока мягко говоря не все, но несмотря на это, прогресс от 0 к 3 огромен.
Остальные сравнительные показатели вынесены в таблицу выше.
@iOS Dev —пока ещё до скайнета далеко
Состоялся релиз 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
1️⃣ Проверяет наличие комментария в пуллреквесте.
2️⃣ Проверяет, что текст комментария соответствует строке «Upload to TestFlight».
3️⃣ Если это так, функция запускает сборку Xcode Cloud, которая загружает приложение для внутреннего тестирования в TestFlight с использованием API App Store Connect (это SDK я использую и в Starly).
@iOS Dev
Если объяснять термин простыми словами, вебхук это механизм отправки уведомлений при наступлении в системе какого-то события, на которое подписано клиентское приложение.
Подписка на события вебхука не является чем-то очень сложным, для этого необходимо создать сервер, который может обрабатывать POST-запросы и передавать URL-адрес сервера веб-сайту с вебхуком.
📖 В этой статье рассказывается, как вы можете создать функцию 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
Если вы предпочитаете старое поведение дефолтному (и хотите сэкономить немного времени при разработке), то можно изменить поведение
1️⃣ Откройте
2️⃣ Перейдите ко вкладке
3️⃣ Измените значение с
После этого изменения вы можете открывать связанные команды с помощью command + control + click (вернуть обратно можно по этой же инструкции).
📖 Источник гифки.
@iOS Dev
Если вы предпочитаете старое поведение дефолтному (и хотите сэкономить немного времени при разработке), то можно изменить поведение
Command-click
.1️⃣ Откройте
Xcode Preferences
.2️⃣ Перейдите ко вкладке
Navigation
.3️⃣ Измените значение с
Command-click on Code
на Jump to Definition
.После этого изменения вы можете открывать связанные команды с помощью command + control + click (вернуть обратно можно по этой же инструкции).
📖 Источник гифки.
@iOS Dev
3 ошибки при работе с замыканиями (и как их избежать)
📖 В этом важном материале с примерами кода (и даже с видео-вставками) идёт речь о следующих ошибках:
1️⃣ Что может пойти не так при захвате переменной.
2️⃣
3️⃣ В чём разница между
⭐️ Кстати, рекомендую не забывать и о трёх золотых правилах weak self.
@iOS Dev
📖 В этом важном материале с примерами кода (и даже с видео-вставками) идёт речь о следующих ошибках:
1️⃣ Что может пойти не так при захвате переменной.
2️⃣
Retain Cycles
и почему они могут появиться (куда же без них).3️⃣ В чём разница между
escaping
и non-escaping
(и от чего зависит время жизни замыкания).@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Вам не (всегда) нужно использовать [weak self]
Конечно, при некорректной работе с замыканиями могут возникать ошибки.
🛠 Например, это небольшое приложение демонстрирует различные сценарии утечки памяти, а также показывает, где использование
Одна из возможных ситуаций: у вас есть дочерний контроллер, который хранит ссылку на своего владельца/родителя в свойстве. Вот тогда свойство должно быть помечено weak, чтобы предотвратить циклическую ссылку/ретэйн цикл.
📖 В этой статье рассматриваются ключевые моменты на реальных примерах.
😃 iOS Dev — некоторые материалы лучше сохранить
Конечно, при некорректной работе с замыканиями могут возникать ошибки.
🛠 Например, это небольшое приложение демонстрирует различные сценарии утечки памяти, а также показывает, где использование
[weak self]
может быть излишним.Одна из возможных ситуаций: у вас есть дочерний контроллер, который хранит ссылку на своего владельца/родителя в свойстве. Вот тогда свойство должно быть помечено weak, чтобы предотвратить циклическую ссылку/ретэйн цикл.
📖 В этой статье рассматриваются ключевые моменты на реальных примерах.
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
В двух частях автор делится своим опытом создания несложных анимаций, шагами и тем, что в итоге получилось.
1️⃣ Как создать анимацию с помощью маски в SwiftUI?
2️⃣ От концепции к коду: стратегии для создания анимаций в SwiftUI.
Please open Telegram to view this post
VIEW IN TELEGRAM
Недавно евангелисты Apple, дизайнеры и инженеры (звучит как начало анекдота) собрались на конференции Ask Apple, чтобы ответить на вопросы о Live Activity и Dynamic Island.
Несколько основных моментов из этих разговоров, в том числе рекомендации по размеру, стилю и отличиях в Live Activity Иван разобрал в своём небольшом ролике:
📺 Посмотреть подробнее на канале «Код воробья».
📖 А вот тут, например, есть отличный пример работы с Live Activity.
😃 iOS Dev
Несколько основных моментов из этих разговоров, в том числе рекомендации по размеру, стилю и отличиях в Live Activity Иван разобрал в своём небольшом ролике:
📺 Посмотреть подробнее на канале «Код воробья».
📖 А вот тут, например, есть отличный пример работы с Live Activity.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Код Воробья для iOS разработчиков
Apple отвечает на 10 вопросов про Live Activity. Разобрал самые интересные:
- Как обновлять без пушей
- Как добавить кнопку
- Можно ли менять фон
Остальные доступны по ссылке.
- Как обновлять без пушей
- Как добавить кнопку
- Можно ли менять фон
Остальные доступны по ссылке.
Lines — наглядная утилита для оценки размера ваших файлов в проекте
Проект, над которым мы трудимся в рабочее время, довольно крупный. Настолько, что более половины кода в нём до сих пор на Objective-C.
И хотя вся новая функциональность, конечно же, пишется на Swift, часть требует обновлений.
Недавно мы нашей командой решили основательно взяться за рефакторинг, но как понять, что брать за точку отсчёта?
Для этого можно воспользоваться этим решением. Или попытаться использовать способ отсюда с 11к звёзд на github (но на M1 могут возникнуть проблемы с зависимостями).
Для своих целей я реализовал несложную утилиту с модными async/await и диаграммами со SwiftUI, и решил, что вполне могу поделиться с сообществом, если кому-то пригодится.
Что есть полезного из фич:
1️⃣ Возможность ограничить расширения файлов (или убрать все - но тогда утилита попытается перебрать все файлы в вашем проекте).
2️⃣ Показ суммарного количества строк по каждому расширению. Если выбрано, например, только swift, то будет отображаться топ самых крупных файлов (с возможностью сортировки).
3️⃣ Есть опция перехода к файлу по двойному клику.
🧑💻 Доступно на Gumroad (бесплатно).
👨💻 В маковском сторе (тоже бесплатно).
P.S. Нативно под мак пишу крайне редко, и, к сожалению, свободное время бывает редкими вечерами (и то не постоянно), поэтому интерфейс, возможно, ещё обновлю.
😃 iOS Dev — не только же про мобильную разработку.
Проект, над которым мы трудимся в рабочее время, довольно крупный. Настолько, что более половины кода в нём до сих пор на Objective-C.
И хотя вся новая функциональность, конечно же, пишется на Swift, часть требует обновлений.
Недавно мы нашей командой решили основательно взяться за рефакторинг, но как понять, что брать за точку отсчёта?
Для этого можно воспользоваться этим решением. Или попытаться использовать способ отсюда с 11к звёзд на github (но на M1 могут возникнуть проблемы с зависимостями).
Для своих целей я реализовал несложную утилиту с модными async/await и диаграммами со SwiftUI, и решил, что вполне могу поделиться с сообществом, если кому-то пригодится.
Что есть полезного из фич:
1️⃣ Возможность ограничить расширения файлов (или убрать все - но тогда утилита попытается перебрать все файлы в вашем проекте).
2️⃣ Показ суммарного количества строк по каждому расширению. Если выбрано, например, только swift, то будет отображаться топ самых крупных файлов (с возможностью сортировки).
3️⃣ Есть опция перехода к файлу по двойному клику.
Please open Telegram to view this post
VIEW IN TELEGRAM
Советы по отладке или в чём разница между po, v и vo
📖 Кшиштоф Заблоцки делится любимыми приемами и советами по отладке, которые он использует при работе над Swift-проектами.
В частности, вы сможете узнать:
1️⃣ Как настроить кастомный
2️⃣ Когда лучше использовать
3️⃣ Как добавить свой брейкпоинт, используя
😃 iOS Dev
📖 Кшиштоф Заблоцки делится любимыми приемами и советами по отладке, которые он использует при работе над Swift-проектами.
В частности, вы сможете узнать:
1️⃣ Как настроить кастомный
.lldbinit
.2️⃣ Когда лучше использовать
po
, и в чём разница между po
и v
.3️⃣ Как добавить свой брейкпоинт, используя
lldb
.Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Интересная анимация изменения температуры на SwiftUI
🤩 Разработчик рассказывает, как за 10 часов, впервые попробовав SwiftUI, ему удалось создать эту анимацию, которая у некоторых может вызвать ностальгию по симуляторам вроде iBeer.
🛠 Код доступен на github, для запуска только дропните неиспользуемые ассеты.
Раньше я скидывал и свой пример создания анимации как в Wallet тоже на SwiftUI(так что пора собирать мини-коллекцию) .
😃 iOS Dev
🛠 Код доступен на github, для запуска только дропните неиспользуемые ассеты.
Раньше я скидывал и свой пример создания анимации как в Wallet тоже на SwiftUI
Please open Telegram to view this post
VIEW IN TELEGRAM