NSAttributedString: создание, редактирование и управление атрибутами
UILabel стоит больше, чем вы думаете — это не просто утверждение, а факт. Если вы работали с большим количеством стилей, то эта тема может быть очень близка. А когда мы говорим про что-то более производительное, нет иного варианта, кроме как уйти к Core Text.
Несмотря на это, работа со строками встречается постоянно, в любых приложениях - поэтому знать особенности и способы редактирования полезно.
📖 В этой статье доступно изложены варианты работы с разными атрибутами (создание кликабельных ссылок, параграфов, вложений-картинок и не только).
Приятно, что автор понимает издержки и указывает про возможность кэширования таких строк.
😃 iOS Dev
UILabel стоит больше, чем вы думаете — это не просто утверждение, а факт. Если вы работали с большим количеством стилей, то эта тема может быть очень близка. А когда мы говорим про что-то более производительное, нет иного варианта, кроме как уйти к Core Text.
Несмотря на это, работа со строками встречается постоянно, в любых приложениях - поэтому знать особенности и способы редактирования полезно.
📖 В этой статье доступно изложены варианты работы с разными атрибутами (создание кликабельных ссылок, параграфов, вложений-картинок и не только).
Приятно, что автор понимает издержки и указывает про возможность кэширования таких строк.
Please open Telegram to view this post
VIEW IN TELEGRAM
Жёсткие рамки или при чём тут бесконечный скролл
При работе над разными проектами, чаще всего можно встретить два варианта построения процессов: долгие эпики на несколько кварталов (и даже лет) и значительно менее продолжительные спринты с фиксированными фичами.
При таком формате важно избегать состояния scope creep (или же неконтролируемое увеличение масштаба проекта, что особенно часто встречается в начале разработки, бывалые менеджеры проектов поймут о чём речь).
Чтобы это предотвратить, существует примерно миллион возможных вариантов скоринга спринтов, но практически все они рано или поздно рушатся.
Поэтому крайне важно сосредоточиться на том, что важно, и вам очень повезло, если на текущем месте работы руководящий состав это понимает. Фичи, затрагивающие производительность, должны быть выше по приоритету, нежели перекраска темы приложения, а стабильность проекта должна преобладать над потенциальным разрастанием фич в разные стороны (привет всем супер-приложениям, в которых даже фокус-группы ломаются над простейшими сценариями).
При этом жёсткие рамки должны быть сформированы на основе вашей архитектуры или принятых стандартов внутри команды, но на мой взгляд, диктовать разработчику конкретный способ решения не слишком эффективно.
В нашей команде я стараюсь придерживаться именно этой позиции: если есть фича, которую нужно реализваоть, необходимо закладывать нефиксированный временной отрезок внутри более длинной дистанции, в рамках которой эта фича должна быть реализована. Если получится выполнить таск ранее, чем до окончания спринта — прекрасно, но накладывать на разработчиков просьбы оценки времени в начале иногда лишнее, так как часто существует много переменных, которые зависят и от смежных команд, и от реализации на сервере, и от утверждения или изменения дизайна в процессе.
При этом ситуация, когда разработчик видит результат сразу или понимает, на каком этапе он находится, помогает оценить и свои силы, и приблизительно понять, в каких местах требуется оптимизация или проверка дополнительных корнер-кейсов.
В связи с этим я хотел бы вспомнить о человеке, из-за которого много времени буквально попадает в яму (можно встретить и соответствующий термин с дофаминовой петлёй).
Его имя — Аза Раскин. И именно ему мы должны сказать спасибо (или выразить негодование) за появление бесконечного скролла. Ведь в далеком 2006 году кроме пагинации не существовало альтернативы, и именно благодаря ему пользователи теперь значительно реже ощущают ход времени в ряде запрещённых соцсетей.
Хотелось бы, чтобы разработка все-таки не превращалась в бесконечный скролл, а мы с вами понимали, в какой момент должна быть перевёрнута нужная страница.
😃 iOS Dev
При работе над разными проектами, чаще всего можно встретить два варианта построения процессов: долгие эпики на несколько кварталов (и даже лет) и значительно менее продолжительные спринты с фиксированными фичами.
При таком формате важно избегать состояния scope creep (или же неконтролируемое увеличение масштаба проекта, что особенно часто встречается в начале разработки, бывалые менеджеры проектов поймут о чём речь).
Чтобы это предотвратить, существует примерно миллион возможных вариантов скоринга спринтов, но практически все они рано или поздно рушатся.
Поэтому крайне важно сосредоточиться на том, что важно, и вам очень повезло, если на текущем месте работы руководящий состав это понимает. Фичи, затрагивающие производительность, должны быть выше по приоритету, нежели перекраска темы приложения, а стабильность проекта должна преобладать над потенциальным разрастанием фич в разные стороны (привет всем супер-приложениям, в которых даже фокус-группы ломаются над простейшими сценариями).
При этом жёсткие рамки должны быть сформированы на основе вашей архитектуры или принятых стандартов внутри команды, но на мой взгляд, диктовать разработчику конкретный способ решения не слишком эффективно.
В нашей команде я стараюсь придерживаться именно этой позиции: если есть фича, которую нужно реализваоть, необходимо закладывать нефиксированный временной отрезок внутри более длинной дистанции, в рамках которой эта фича должна быть реализована. Если получится выполнить таск ранее, чем до окончания спринта — прекрасно, но накладывать на разработчиков просьбы оценки времени в начале иногда лишнее, так как часто существует много переменных, которые зависят и от смежных команд, и от реализации на сервере, и от утверждения или изменения дизайна в процессе.
При этом ситуация, когда разработчик видит результат сразу или понимает, на каком этапе он находится, помогает оценить и свои силы, и приблизительно понять, в каких местах требуется оптимизация или проверка дополнительных корнер-кейсов.
В связи с этим я хотел бы вспомнить о человеке, из-за которого много времени буквально попадает в яму (можно встретить и соответствующий термин с дофаминовой петлёй).
Его имя — Аза Раскин. И именно ему мы должны сказать спасибо (или выразить негодование) за появление бесконечного скролла. Ведь в далеком 2006 году кроме пагинации не существовало альтернативы, и именно благодаря ему пользователи теперь значительно реже ощущают ход времени в ряде запрещённых соцсетей.
Хотелось бы, чтобы разработка все-таки не превращалась в бесконечный скролл, а мы с вами понимали, в какой момент должна быть перевёрнута нужная страница.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация шейдера с презентации Apple для iPhone 16e
В сообществе часто создают свои интерпретации логотипов, посвященным событиям от Apple. Например, для последней даже создали небольшой сайт, где можно посмотреть эффект на лого разных компаний.
Bobby Bobak, в свою очередь, портировал код на SwiftUI (можно настраивать и величину преломления, и блюр).
📖 Реализация доступна на GitHub.
📱 Оригинальный пост Стивена Хейни.
Кстати, вот тут, например, можно посмотреть на реализацию эффекта для Siri в iOS 18.
Напомню, что в базе iOS IQ есть целый ряд необычных и сложных шейдеров с примерами использования.
😃 iOS Dev
В сообществе часто создают свои интерпретации логотипов, посвященным событиям от Apple. Например, для последней даже создали небольшой сайт, где можно посмотреть эффект на лого разных компаний.
Bobby Bobak, в свою очередь, портировал код на SwiftUI (можно настраивать и величину преломления, и блюр).
📖 Реализация доступна на GitHub.
Кстати, вот тут, например, можно посмотреть на реализацию эффекта для Siri в iOS 18.
Напомню, что в базе iOS IQ есть целый ряд необычных и сложных шейдеров с примерами использования.
Please open Telegram to view this post
VIEW IN TELEGRAM
Что происходит, когда вы перемещаете файл в git?
Это интересный вопрос, поскольку каждый из нас работает с гитом постоянно. Кто-то предпочитает Xcode или Tower, кто-то юзает консоль, но так или иначе понимание принципов важно.
Многие считают, что коммиты в git - это диффы изменений, но Бруно Роша в своей статье опровергает этот тезис. Коммиты это снэпшоты (кроме исключения): то есть при любом изменении в файле, git будет хранить полную копию этого файла в репозитории.
Советую посмотреть в частности на то, как именно гит понимает, когда у нас два одинаковых файла (хоть и с разными именами).
📖 Про ряд других любопытных кейсов также можно почитать в оригинальной статье.
Не забудьте и про этот пост, где понятно рассказано об основах работы с гитом для iOS-разработчиков.
😃 iOS Dev
Это интересный вопрос, поскольку каждый из нас работает с гитом постоянно. Кто-то предпочитает Xcode или Tower, кто-то юзает консоль, но так или иначе понимание принципов важно.
Многие считают, что коммиты в git - это диффы изменений, но Бруно Роша в своей статье опровергает этот тезис. Коммиты это снэпшоты (кроме исключения): то есть при любом изменении в файле, git будет хранить полную копию этого файла в репозитории.
Советую посмотреть в частности на то, как именно гит понимает, когда у нас два одинаковых файла (хоть и с разными именами).
📖 Про ряд других любопытных кейсов также можно почитать в оригинальной статье.
Не забудьте и про этот пост, где понятно рассказано об основах работы с гитом для iOS-разработчиков.
Please open Telegram to view this post
VIEW IN TELEGRAM
Рисование карт с помощью Swift Charts
Стандартный фреймворк Swift Charts это мощный инструмент для отображения данных с помощью самых разных способов.
В своей статье Артём Новичков вдохновился крутой сессией с WWDC и придумал необычное решение с комбинацией GeoJSON и MapKit.
📖 А что из этого вышло можно увидеть здесь.
🛠 Код проекта на GitHub.
😃 iOS Dev
Стандартный фреймворк Swift Charts это мощный инструмент для отображения данных с помощью самых разных способов.
В своей статье Артём Новичков вдохновился крутой сессией с WWDC и придумал необычное решение с комбинацией GeoJSON и MapKit.
📖 А что из этого вышло можно увидеть здесь.
🛠 Код проекта на GitHub.
Please open Telegram to view this post
VIEW IN TELEGRAM
Task.sleep() vs Task.yield(): Объяснение различий
В Swift Concurrency можно использовать
И хотя оба варианта выглядят и ведут себя похоже, есть несколько различий, о которых полезно знать.
📖 В этой статье Антуан рассказывает про оба способа и объясняет, какие есть области применения в приложениях.
😃 iOS Dev
В Swift Concurrency можно использовать
Task.sleep()
и Task.yield()
, чтобы позволить определенной задаче «заснуть» или «выйти» на определенный период времени. И хотя оба варианта выглядят и ведут себя похоже, есть несколько различий, о которых полезно знать.
📖 В этой статье Антуан рассказывает про оба способа и объясняет, какие есть области применения в приложениях.
Please open Telegram to view this post
VIEW IN TELEGRAM
Простая настройка модуляризации для iOS-приложения
При этом подходе можно добиться целого ряда важных преимуществ.
Например, разбиение приложения на модули поможет не только облегчить совместную работу над проектом и повысить тестируемость, но и при правильных настройках улучшит скорость сборки.
📖 В этой статье показано, как можно структурировать такой проект (с использованием Core/Domain/Presentation слоёв), и, что немаловажно, как масштабировать этот подход для реализации более сложных и объёмных приложений.
🛠 Код доступен на GitHub.
🔗 В канале можно и посмотреть на подход Spotify к реализации модульной архитектуры.
А познакомиться с разными подходами для выбора нужной архитектуры проекта (и посмотреть на то, какие могут быть подводные камни) можно как всегда вот здесь (или же⭐️ прямо тут).
😃 iOS Dev
При этом подходе можно добиться целого ряда важных преимуществ.
Например, разбиение приложения на модули поможет не только облегчить совместную работу над проектом и повысить тестируемость, но и при правильных настройках улучшит скорость сборки.
📖 В этой статье показано, как можно структурировать такой проект (с использованием Core/Domain/Presentation слоёв), и, что немаловажно, как масштабировать этот подход для реализации более сложных и объёмных приложений.
🛠 Код доступен на GitHub.
🔗 В канале можно и посмотреть на подход Spotify к реализации модульной архитектуры.
А познакомиться с разными подходами для выбора нужной архитектуры проекта (и посмотреть на то, какие могут быть подводные камни) можно как всегда вот здесь (или же
Please open Telegram to view this post
VIEW IN TELEGRAM
Промпт-инженеры и их зарплаты
В канале я регулярно поднимаю вопросы, связанные с AI (от проблем у Stackoverflow, запрета использования в Apple до опросов).
И хотя польза от них есть, ведь эти инструменты можно использовать для решения вещей вроде базовых штук, связанными с анимациями или поиском каких-то свойств (буквально вместо поисковика), но есть то, чего стоит опасаться.
Во-первых, запросы на основе реального корпоративного кода часто запрещены (и я поддерживаю этот запрет, если только это не вами созданная и обученная сетка в локальном окружении).
Во-вторых, знаю ребят, которые пытались юзать ChatGPT (и аналоги) для решения алгоритмов и ломались уже на вещах уровня medium в литкоде. Особенно когда речь идёт о корнер-кейсах или нетривиальных условиях.
Будет неловко, если этот код попадёт в продакшен, как считаете?
В-третьих, и об этом ниже, на мой взгляд развитие ИИ должно было привести к решению базовых, даже бытовых вещей и оставить человеку возможность создавать что-то новое.
Но вот в чём парадокс, происходит ровно наоборот, хотя пару десятков лет назад казалось разве робот может написать симфонию.
Люди создают музыку с использованием нейросетей, рисуют картины, программируют и даже пишут книги.
Достаточно почитать про бум книг на амазоне, целиком придуманных нейросетями. Или про то, что произошло с медиумом, на котором ребята с чашкой чая пилят десятки пустых, наполненных водой, статей.
На счёт зарплат таких специалистов - отдельный разговор. Допустим, подписка на ChatGPT стоит от 20 до 200 долларов. Какое образование необходимо, чтобы пользоваться этим инструментом в IT-сфере?
Как думаете, должна ли быть отдельная должность с ограниченным пулом задач для промпт-инженеров в iOS, возможно ли это в целом? Могут ли у них быть собственные грейды?
😃 iOS Dev
В канале я регулярно поднимаю вопросы, связанные с AI (от проблем у Stackoverflow, запрета использования в Apple до опросов).
И хотя польза от них есть, ведь эти инструменты можно использовать для решения вещей вроде базовых штук, связанными с анимациями или поиском каких-то свойств (буквально вместо поисковика), но есть то, чего стоит опасаться.
Во-первых, запросы на основе реального корпоративного кода часто запрещены (и я поддерживаю этот запрет, если только это не вами созданная и обученная сетка в локальном окружении).
Во-вторых, знаю ребят, которые пытались юзать ChatGPT (и аналоги) для решения алгоритмов и ломались уже на вещах уровня medium в литкоде. Особенно когда речь идёт о корнер-кейсах или нетривиальных условиях.
Будет неловко, если этот код попадёт в продакшен, как считаете?
В-третьих, и об этом ниже, на мой взгляд развитие ИИ должно было привести к решению базовых, даже бытовых вещей и оставить человеку возможность создавать что-то новое.
Но вот в чём парадокс, происходит ровно наоборот, хотя пару десятков лет назад казалось разве робот может написать симфонию.
Люди создают музыку с использованием нейросетей, рисуют картины, программируют и даже пишут книги.
Достаточно почитать про бум книг на амазоне, целиком придуманных нейросетями. Или про то, что произошло с медиумом, на котором ребята с чашкой чая пилят десятки пустых, наполненных водой, статей.
На счёт зарплат таких специалистов - отдельный разговор. Допустим, подписка на ChatGPT стоит от 20 до 200 долларов. Какое образование необходимо, чтобы пользоваться этим инструментом в IT-сфере?
Как думаете, должна ли быть отдельная должность с ограниченным пулом задач для промпт-инженеров в iOS, возможно ли это в целом? Могут ли у них быть собственные грейды?
Please open Telegram to view this post
VIEW IN TELEGRAM
Синхронное выполнение задач в iOS-приложениях
Все iOS-разработчики справедливо беспокоятся о потенциальной блокировке основного потока. Поэтому практически всегда длительные задачи переносятся с него, чтобы сохранить отзывчивость приложения..
Но на самом деле, если процесс короткий, как справедливо подмечает Мэтт в своей статье, такое смещение может плохо сказаться на производительности. Так как хотя затраты на переключение минимальны, такая операция на/из потока не является бесплатной.
Добавление в код параллелизма сопровождается увеличением сложности сразу по нескольким направлениям (и оно может быть существенным).
📖 Больше примеров и полезных размышлений можно прочитать в оригинальном материале.
А разбор других (не менее важных) вопросов в разработке, подборку вопросов по многопоточности и многое другое можно найти💰 в закрытой базе и ⭐️ прямо здесь.
😃 iOS Dev
Все iOS-разработчики справедливо беспокоятся о потенциальной блокировке основного потока. Поэтому практически всегда длительные задачи переносятся с него, чтобы сохранить отзывчивость приложения..
Но на самом деле, если процесс короткий, как справедливо подмечает Мэтт в своей статье, такое смещение может плохо сказаться на производительности. Так как хотя затраты на переключение минимальны, такая операция на/из потока не является бесплатной.
Добавление в код параллелизма сопровождается увеличением сложности сразу по нескольким направлениям (и оно может быть существенным).
📖 Больше примеров и полезных размышлений можно прочитать в оригинальном материале.
А разбор других (не менее важных) вопросов в разработке, подборку вопросов по многопоточности и многое другое можно найти
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Grand Central Dispatch: большой разбор
Наш подписчик подготовил фундаментальный разбор GCD, и в отличие от многих аналогичных статей, наполнил его примерами, над которыми можно (и нужно) подумать.
Среди основных тем:
🔘 Основные концепты: thread, multithreading, GCD, task, queue
🔘 Типы очередей: main, global, custom
🔘 Quality of Service (QoS) и разбор приоритетов
🔘 Последовательная и параллельная очереди
🔘 Способы выполнения задач: async, sync
🔘 Deadlock
🔘 Упражнения для проверки знаний по GCD - весь код доступен на GitHub
Пообщавшись с Кириллом, было принято решение вынести некоторые задачи и в большую подборку.
📖 Оригинальную статью можно прочесть здесь.
Напомню, что доступ к этой и другим практическим темам можно получить💰 тут и ⭐️ прямо здесь.
😃 iOS Dev
Наш подписчик подготовил фундаментальный разбор GCD, и в отличие от многих аналогичных статей, наполнил его примерами, над которыми можно (и нужно) подумать.
Среди основных тем:
Пообщавшись с Кириллом, было принято решение вынести некоторые задачи и в большую подборку.
📖 Оригинальную статью можно прочесть здесь.
Напомню, что доступ к этой и другим практическим темам можно получить
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Симметричные и асимметричные эффекты в SwiftUI c добавлением модификатора Scroll Transition
📖 Делюсь неплохим гайдом с примерами кода по добавлению эффектов при скролле, важно помнить, что это доступно только с iOS 17.
А ещё напомню, что в канале есть несколько полезных постов:
🔗 Добавление растягиваемого заголовка в ScrollView с параллакс-эффектом для SwiftUI
🔗 Реализация эффектов ScrollView
🔗 Ещё один разбор ScrollTransitionConfiguration
А для UIKit можно чекнуть, как реализовать бесконечный скролл на базе UITableView + API HackerNews.
😃 iOS Dev
📖 Делюсь неплохим гайдом с примерами кода по добавлению эффектов при скролле, важно помнить, что это доступно только с iOS 17.
А ещё напомню, что в канале есть несколько полезных постов:
А для UIKit можно чекнуть, как реализовать бесконечный скролл на базе UITableView + API HackerNews.
Please open Telegram to view this post
VIEW IN TELEGRAM
Новый инструмент анализа производительности: Processor Trace
Длительное выполнение операций в главном потоке может привести к самым различным проблемам: от подвисаний и проблем отображения вплоть до того, что приложение перестанет отзываться в целом.
🛠 В Xcode 16.3 Beta 2 появился новый инструмент для проверки нагрузки: Processor Trace.
С его помощью можно получить информацию о выполняемом коде, включая ветвления и инструкции.
Но, как обычно, есть и большое но: мы можем использовать его только на M4 и на устройствах iPhone 16 и выше.
И недостаток поменьше: при использовании трассировки девайс будет работать приблизительно на 1 % медленнее.
Благодаря новому инструменту можно проверять активность процессора (и уже затем мы можем решать, что реально вынести в фон с помощью Swift Concurrency или dispatch queue).
📖 Обратите внимание и на этот пост с советами по повышению производительности.
😃 iOS Dev
Длительное выполнение операций в главном потоке может привести к самым различным проблемам: от подвисаний и проблем отображения вплоть до того, что приложение перестанет отзываться в целом.
🛠 В Xcode 16.3 Beta 2 появился новый инструмент для проверки нагрузки: Processor Trace.
С его помощью можно получить информацию о выполняемом коде, включая ветвления и инструкции.
Но, как обычно, есть и большое но: мы можем использовать его только на M4 и на устройствах iPhone 16 и выше.
И недостаток поменьше: при использовании трассировки девайс будет работать приблизительно на 1 % медленнее.
Благодаря новому инструменту можно проверять активность процессора (и уже затем мы можем решать, что реально вынести в фон с помощью Swift Concurrency или dispatch queue).
📖 Обратите внимание и на этот пост с советами по повышению производительности.
Please open Telegram to view this post
VIEW IN TELEGRAM
Музей науки Манчестера
В эти выходные нахожусь в Манчестере, и хотя красивых эпл сторов тут нет (кто давно читает канал, знает, что тут можно увидеть необычные магазины изнутри), я просто не мог не заглянуть в музей, посвященный знаковым изобретениям.
Вообще, локация этого музея сама по себе необычная, для этого выбрана территория бывшего первого в мире пассажирского вокзала (Манчестер—Ливерпуль-Роуд).
Понятен и акцент на исторические достижения в области промышленности. Но лично для меня было интересно посмотреть на реплику первого в истории компьютера, в котором можно было хранить инструкции выполнения программ в памяти.
И хотя он описан как маленький и примитивный (для своего времени), да и название у него символичное Малыш (или baby) сейчас эта махина выглядит просто огромной.
27 тонн, 15 на 7 метров с потребляемой мощностью в 150+ кВт. Вычислительная мощность — 357 операций умножения в секунду. При этом само умножение было реализовано очень любопытно и по факту 1 умножение равнялось 14 операциям сложения.
После такого задача писать мобильные приложения кажется немного проще 😌
😃 iOS Dev
В эти выходные нахожусь в Манчестере, и хотя красивых эпл сторов тут нет (кто давно читает канал, знает, что тут можно увидеть необычные магазины изнутри), я просто не мог не заглянуть в музей, посвященный знаковым изобретениям.
Вообще, локация этого музея сама по себе необычная, для этого выбрана территория бывшего первого в мире пассажирского вокзала (Манчестер—Ливерпуль-Роуд).
Понятен и акцент на исторические достижения в области промышленности. Но лично для меня было интересно посмотреть на реплику первого в истории компьютера, в котором можно было хранить инструкции выполнения программ в памяти.
И хотя он описан как маленький и примитивный (для своего времени), да и название у него символичное Малыш (или baby) сейчас эта махина выглядит просто огромной.
27 тонн, 15 на 7 метров с потребляемой мощностью в 150+ кВт. Вычислительная мощность — 357 операций умножения в секунду. При этом само умножение было реализовано очень любопытно и по факту 1 умножение равнялось 14 операциям сложения.
После такого задача писать мобильные приложения кажется немного проще 😌
Please open Telegram to view this post
VIEW IN TELEGRAM
Создание UDP-сервера и клиента в Swift на базе фрейморка Network
Сетевая модель OSI описывает, каким образом устройства в локальных (и глобальных сетях) обмениваются данными.
Всего у неё 7 уровней и каждый из них выполняет определённую задачу (скорее всего вы и так это знаете, обычно это проходят на 2-3 курсе универа).
Так вот, на прикладном уровне чаще всего нам достаточно URLSession.
Но вот для сетевых задач более низкого уровня (работа с TCP и UDP), фреймворк Network предоставляет более полный контроль на транспортном уровне. Это обеспечивает большую гибкость и эффективность по сравнению с URLSession.
📖 В этом материале от нашего читателя Максима Егорова вы можете познакомиться с тем, как написать свой UDP-сервер и клиент на несложном, но любопытном примере.
🛠 Полный код проекта доступен здесь.
😃 iOS Dev
Сетевая модель OSI описывает, каким образом устройства в локальных (и глобальных сетях) обмениваются данными.
Всего у неё 7 уровней и каждый из них выполняет определённую задачу (скорее всего вы и так это знаете, обычно это проходят на 2-3 курсе универа).
Так вот, на прикладном уровне чаще всего нам достаточно URLSession.
Но вот для сетевых задач более низкого уровня (работа с TCP и UDP), фреймворк Network предоставляет более полный контроль на транспортном уровне. Это обеспечивает большую гибкость и эффективность по сравнению с URLSession.
📖 В этом материале от нашего читателя Максима Егорова вы можете познакомиться с тем, как написать свой UDP-сервер и клиент на несложном, но любопытном примере.
🛠 Полный код проекта доступен здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
Кровь, пот и пиксели
Перед обратным перелётом из Манчестера вспомнил про вашу чудесную подборку книг и решил чем-нибудь занять 5 часов. Спасибо, что на пути оказался один из магазинов blackwells с прайсом за книгу в 12 фунтов.
Признаюсь, я ждал историй успешного успеха, и отчасти поэтому занизил изначальные ожидания. Но Джейсон Шрейер не стал описывать сказки, как сделать в гараже собственный GTA VI. Вместо этого он сосредоточился на реальных трудностях не только корпораций-гигантов вроде Blizzard, но и инди-разработчиков, например, целая глава выделена для истории Stardew Valley.
Конечно, я не буду делиться спойлерами, чтобы не уменьшать потенциальный интерес от чтения. Но не могу не вынести пару мыслей касаемо разработки ПО в целом, а не только игр.
Проблемы были и будут всегда, вопрос лишь в том, как именно на это реагировать не только в здесь и сейчас, но и в долгосрочной перспективе. Ведь часто бывает так, что у нас бывает только вектор развития (или как верно заметил Шрейер, работая в огромной корпорации вы как будто находитесь на корабле и плывёте куда-то на запад, но куда именно - неизвестно).
Порой крайне сложно (если вообще реально) добиться, чтобы изначально поставленные годовые планы были достигнуты в нужный срок и со всем объёмом.
И наша задача как разработчиков постараться описать как можно больше корнер-кейсов до начала реализации, чтобы наш корабль не превратился в призрак.
😃 iOS Dev
Перед обратным перелётом из Манчестера вспомнил про вашу чудесную подборку книг и решил чем-нибудь занять 5 часов. Спасибо, что на пути оказался один из магазинов blackwells с прайсом за книгу в 12 фунтов.
Признаюсь, я ждал историй успешного успеха, и отчасти поэтому занизил изначальные ожидания. Но Джейсон Шрейер не стал описывать сказки, как сделать в гараже собственный GTA VI. Вместо этого он сосредоточился на реальных трудностях не только корпораций-гигантов вроде Blizzard, но и инди-разработчиков, например, целая глава выделена для истории Stardew Valley.
Конечно, я не буду делиться спойлерами, чтобы не уменьшать потенциальный интерес от чтения. Но не могу не вынести пару мыслей касаемо разработки ПО в целом, а не только игр.
Проблемы были и будут всегда, вопрос лишь в том, как именно на это реагировать не только в здесь и сейчас, но и в долгосрочной перспективе. Ведь часто бывает так, что у нас бывает только вектор развития (или как верно заметил Шрейер, работая в огромной корпорации вы как будто находитесь на корабле и плывёте куда-то на запад, но куда именно - неизвестно).
Порой крайне сложно (если вообще реально) добиться, чтобы изначально поставленные годовые планы были достигнуты в нужный срок и со всем объёмом.
И наша задача как разработчиков постараться описать как можно больше корнер-кейсов до начала реализации, чтобы наш корабль не превратился в призрак.
Please open Telegram to view this post
VIEW IN TELEGRAM
Реализация пошаговой анимации в SwiftUI
На talk.objc.io вышел бесплатный эпизод, посвященный созданию анимации с комбинацией хэдера и нескольких ячеек (которые должны появляться в шахматном порядке и учитывать изменения прозрачности и градиента).
📖 Выпуск с видео и примерами кода доступен здесь.
😃 iOS Dev
На talk.objc.io вышел бесплатный эпизод, посвященный созданию анимации с комбинацией хэдера и нескольких ячеек (которые должны появляться в шахматном порядке и учитывать изменения прозрачности и градиента).
📖 Выпуск с видео и примерами кода доступен здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
Примерно раз в год я прошу вас, читатели, помочь улучшить канал: подсветить недостатки, указать, что можно сделать иначе, поделиться идеями и мыслями в целом.
Сейчас как раз пятница, так что если у вас будет пара минут свободного времени, буду рад прочесть любые ваши отзывы.
По традиции, форма анонимная, ни один вопрос не обязательный, но все ответы совершенно точно будут прочитаны и каждое мнение будет иметь значение.
😎 Пройти опрос можно по этой ссылке.
😃 iOS Dev
Сейчас как раз пятница, так что если у вас будет пара минут свободного времени, буду рад прочесть любые ваши отзывы.
По традиции, форма анонимная, ни один вопрос не обязательный, но все ответы совершенно точно будут прочитаны и каждое мнение будет иметь значение.
Please open Telegram to view this post
VIEW IN TELEGRAM
Picker в SwiftUI: примеры кода
Это один из самых часто используемых элементов, который позволяет выбирать пользователям из набора значений. Возможно, наиболее известные стили это сегмент-контрол и меню-пикер.
📖 В этой статье на несложных примерах рассказано, как создать такой пикер и настроить нужное отображение.
😃 iOS Dev
Это один из самых часто используемых элементов, который позволяет выбирать пользователям из набора значений. Возможно, наиболее известные стили это сегмент-контрол и меню-пикер.
📖 В этой статье на несложных примерах рассказано, как создать такой пикер и настроить нужное отображение.
Please open Telegram to view this post
VIEW IN TELEGRAM
iOS Conf SG 2025: подборка докладов
В январе прошла одна из крупнейших конференций по iOS и новый набор лучших презентаций уже доступен.
Рекомендую обратить внимание на эти доклады:
📺 Isolation, actors, sendable… Глубокое погружение в параллелизм
Donny Wals рассказывает об изоляции (кстати, напомню про этот пост), акторах и многом другом, чтобы наконец разобраться, что на самом деле пытается сказать нам компилятор, когда выдает загадочную ошибку.
📺 Заблуждения про тестирование и как использовать тесты для более быстрой разработки
В этом выступлении Krzysztof Zablocki делится лучшими подходами к тестированию при работе над Sourcery, New York Times и Arc Browser.
📺 Создание приложений, которые выделяются
Klemens Strasser, который получил 2 номинации Apple Design Award и даже победу, делится своим опытом.
📺 10 лет Swift: что произошло за это время
Swift, который мы пишем сегодня, почти не похож на Swift, который мы писали, когда он появился 10 лет назад. Чему мы научились за это время и какие изменения еще предстоят? В этом докладе на эти вопросы пробует ответить Пол Хадсон.
📺 За пределами программирования: необходимые софт-скиллы для успешной карьеры в iOS
Спикер делится советами, как строить более прочные отношения, преодолевать трудности на рабочем месте и как софт скиллы способствуют профессиональному росту
🔗 Эти и другие доклады доступны здесь.
😃 iOS Dev
В январе прошла одна из крупнейших конференций по iOS и новый набор лучших презентаций уже доступен.
Рекомендую обратить внимание на эти доклады:
📺 Isolation, actors, sendable… Глубокое погружение в параллелизм
Donny Wals рассказывает об изоляции (кстати, напомню про этот пост), акторах и многом другом, чтобы наконец разобраться, что на самом деле пытается сказать нам компилятор, когда выдает загадочную ошибку.
📺 Заблуждения про тестирование и как использовать тесты для более быстрой разработки
В этом выступлении Krzysztof Zablocki делится лучшими подходами к тестированию при работе над Sourcery, New York Times и Arc Browser.
📺 Создание приложений, которые выделяются
Klemens Strasser, который получил 2 номинации Apple Design Award и даже победу, делится своим опытом.
📺 10 лет Swift: что произошло за это время
Swift, который мы пишем сегодня, почти не похож на Swift, который мы писали, когда он появился 10 лет назад. Чему мы научились за это время и какие изменения еще предстоят? В этом докладе на эти вопросы пробует ответить Пол Хадсон.
📺 За пределами программирования: необходимые софт-скиллы для успешной карьеры в iOS
Спикер делится советами, как строить более прочные отношения, преодолевать трудности на рабочем месте и как софт скиллы способствуют профессиональному росту
🔗 Эти и другие доклады доступны здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
Структурная идентичность в SwiftUI
В отличие от традиционных UI-фреймворков, когда мы вручную отслеживаем и обновляем элементы интерфейса, SwiftUI автоматически выполняет перерисовку, когда это необходимо.
Однако перерисовывать все подряд — неэффективно.
И поэтому нам может помочь структурная идентичность — с её помощью SwiftUI решает, какие вью действительно нужно перерисовывать, сохранив производительность.
📖 В этой статье Наташа Фадеева на примерах объясняет, в чем особенности такого подхода и какую роль играет идентичность, например, в списках.
😃 iOS Dev
В отличие от традиционных UI-фреймворков, когда мы вручную отслеживаем и обновляем элементы интерфейса, SwiftUI автоматически выполняет перерисовку, когда это необходимо.
Однако перерисовывать все подряд — неэффективно.
И поэтому нам может помочь структурная идентичность — с её помощью SwiftUI решает, какие вью действительно нужно перерисовывать, сохранив производительность.
📖 В этой статье Наташа Фадеева на примерах объясняет, в чем особенности такого подхода и какую роль играет идентичность, например, в списках.
Please open Telegram to view this post
VIEW IN TELEGRAM