Улучшение времени сборки приложений и SPM-пакетов
Прежде, чем приступать к подобным оптимизациям, важно определить цели. Например, что мы хотим улучшить, только ли «чистые билды» или же инкрементальные сборки.
Кроме этого, можно использовать флаги для вывода предупреждений в тех местах, компиляция которых занимает больше, чем хотелось бы:
📖 В этом исследовании можно посмотреть, что возможно ускорить и какие именно настройки в Xcode могут нам в этом помочь.
😃 iOS Dev
Прежде, чем приступать к подобным оптимизациям, важно определить цели. Например, что мы хотим улучшить, только ли «чистые билды» или же инкрементальные сборки.
Timing Summary
и Recent Build TimeLine
— важнейшие инструменты в Xcode для измерения времени компиляции.Кроме этого, можно использовать флаги для вывода предупреждений в тех местах, компиляция которых занимает больше, чем хотелось бы:
-Xfrontend -warn-long-function-bodies
=<milliseconds>-Xfrontend -warn-long-expression-type-checking
=<milliseconds>📖 В этом исследовании можно посмотреть, что возможно ускорить и какие именно настройки в Xcode могут нам в этом помочь.
Please open Telegram to view this post
VIEW IN TELEGRAM
Поиск неиспользуемого кода с помощью Periphery
Принцип работы этого инструмента в следующем. Сначала собирается проект, затем для каждого файла с исходным кодом
И уже после завершения индексации анализируется граф для выявления неиспользуемого кода.
В долгосрочной перспективе использование
📖 Пример использования Periphery.
🛠 Ссылка на сам инструмент на Github.
😃 iOS Dev
Принцип работы этого инструмента в следующем. Сначала собирается проект, затем для каждого файла с исходным кодом
Periphery
строит свое внутреннее графовое представление проекта. И уже после завершения индексации анализируется граф для выявления неиспользуемого кода.
В долгосрочной перспективе использование
Peiphery
позволит тратить меньше времени на компиляцию (что логично, меньше кода) и избавит от лишнего шума в кодовой базе.📖 Пример использования Periphery.
🛠 Ссылка на сам инструмент на Github.
Please open Telegram to view this post
VIEW IN TELEGRAM
Как проверить, нужно ли вам указывать причину для использования UserDefaults (и не только)
Осень уже скоро, а вместе с ней и новые требования к API, используемых в проектах.
Для privacy manifest (больше на wwdc notes) потребуется вносить инфу, с какой целью используется некоторые категории фреймворков.
📖 Для поиска таких API Марко Эйдингер написал скрипт, но рекомендует для начала вынести результаты в текстовый файл.
😃 iOS Dev
Осень уже скоро, а вместе с ней и новые требования к API, используемых в проектах.
Для privacy manifest (больше на wwdc notes) потребуется вносить инфу, с какой целью используется некоторые категории фреймворков.
📖 Для поиска таких API Марко Эйдингер написал скрипт, но рекомендует для начала вынести результаты в текстовый файл.
Please open Telegram to view this post
VIEW IN TELEGRAM
Подводные камни тестирования кода в Swift Concurrency
Swift Concurrency — мощнейший инструмент, который в том числе позволяет выполнять задачи с разным приоритетом.
🔘 Несмотря на это, периодически могут возникать сложности и непростые для тестирования кейсы.
📖 В исследовании Александр Пиманов и Камиль Ишмуратов разбираются в причинах, рассказывают о порядке выполнения задач и знакомят с протоколом
📖 Рекомендую к ознакомлению и этот пост: Swift Concurrency — вещи, о которых вам не говорят.
😃 iOS Dev
Swift Concurrency — мощнейший инструмент, который в том числе позволяет выполнять задачи с разным приоритетом.
📖 В исследовании Александр Пиманов и Камиль Ишмуратов разбираются в причинах, рассказывают о порядке выполнения задач и знакомят с протоколом
Executor
.📖 Рекомендую к ознакомлению и этот пост: Swift Concurrency — вещи, о которых вам не говорят.
Please open Telegram to view this post
VIEW IN TELEGRAM
Swift 6: подготовка ваших проектов Xcode к будущему
📁 Команда разработчиков Swift поделилась своими приоритетными направлениями на 2023 год и ранее выпустила подробный отчет о пути к Swift 6.
Оба документа описывают видение будущего Swift и помогают подготовиться к миграции проекта.
📖 В этом материале описаны шаги, которые можно предпринять для адаптации ваших проектов к предстоящим изменениям.
😃 iOS Dev
Оба документа описывают видение будущего Swift и помогают подготовиться к миграции проекта.
📖 В этом материале описаны шаги, которые можно предпринять для адаптации ваших проектов к предстоящим изменениям.
Please open Telegram to view this post
VIEW IN TELEGRAM
Стерпятся — слюбятся: как заставить Swift и Objective-C работать в одном SDK
📖 В новой статье на Хабре описывается методика совместного использования Objective-C и Swift в SDK.
Авторы рассматривают различные подходы, объясняют, почему стандартный способ оказался непригодным, и рассказывают, что они смогли получить в результате.
👨💻 Эта информация будет полезна разработчикам SDK, работающим с обоими языками, а также тем, кто планирует перейти с Objective-C на Swift.
😃 iOS Dev
📖 В новой статье на Хабре описывается методика совместного использования Objective-C и Swift в SDK.
Авторы рассматривают различные подходы, объясняют, почему стандартный способ оказался непригодным, и рассказывают, что они смогли получить в результате.
👨💻 Эта информация будет полезна разработчикам SDK, работающим с обоими языками, а также тем, кто планирует перейти с Objective-C на Swift.
Please open Telegram to view this post
VIEW IN TELEGRAM
Важные советы для разработчиков всех уровней от Бьёрна Страуструпа (создателя C++)
Для успешной карьеры необходимо развиваться всесторонне и не стоит зацикливаться на одном навыке (или фреймворке). Кроме этого:
🔘 Мы не знаем будущего, а наша карьера — долгосрочная вещь. Важно быть гибкими и жить не только одной работой.
🔘 Если вы напишете лучший код, мир не изменится только благодаря этому. Важно слушать остальных (в том числе и потенциальных пользователей), уметь общаться, а также доносить свои идеи.
🔘 Не нужно жалеть о потраченном времени на другие направления. Например, история может дать понимание о некоторых ограничениях, а математика обострит ваш ум, поэтому во всём нужно искать баланс.
🔘 Широкий набор навыков, приобретённых во время обучения, можно будет применить позже, когда придёт время. И для этого совсем необязательно знать две дюжины языков, как сам Бьёрн.
😃 iOS Dev
Для успешной карьеры необходимо развиваться всесторонне и не стоит зацикливаться на одном навыке (или фреймворке). Кроме этого:
🔘 Мы не знаем будущего, а наша карьера — долгосрочная вещь. Важно быть гибкими и жить не только одной работой.
🔘 Если вы напишете лучший код, мир не изменится только благодаря этому. Важно слушать остальных (в том числе и потенциальных пользователей), уметь общаться, а также доносить свои идеи.
🔘 Не нужно жалеть о потраченном времени на другие направления. Например, история может дать понимание о некоторых ограничениях, а математика обострит ваш ум, поэтому во всём нужно искать баланс.
🔘 Широкий набор навыков, приобретённых во время обучения, можно будет применить позже, когда придёт время. И для этого совсем необязательно знать две дюжины языков, как сам Бьёрн.
Please open Telegram to view this post
VIEW IN TELEGRAM
Лучшие практики для обратной связи при работе в команде
За свою карьеру я поработал в нескольких компаниях с разными стилями менеджмента и разными подходами.
Конечно, все мы стремимся к лучшему для себя, но есть базовые принципы, которые могут помочь повысить вашу личную производительность и тем самым повлиять на рост всей команды. Следствием этого будет и успех проекта.
Мне близки мысли Фила Йейтса (инженера с 17-летним опытом).
Обратная связь — это не просто указание на то, что неправильно или правильно, а начало диалога, способствующего пониманию, обучению и росту. К сожалению, многие об этом забывают.
Поэтому вот несколько советов от Фила, которые можно взять на вооружение:
👍 Будьте конкретны. Вместо того чтобы сказать: «Вы хорошо поработали», скажите: «То, как вы отладили эту сложную проблему в коде, впечатляет».
👍 Будьте своевременны. Детали будут свежи в памяти и позволят немедленно извлечь уроки, но нужно учесть готовность собеседника к разговору.
👍 Сосредоточьтесь на действии, а не на человеке. Это поможет сфокусироваться на самой проблеме.
👍 Чаще используйте «Я». Это выразит вашу точку зрения, а не обвинения или предположения в адрес собеседника.
👍 Устройте двусторонний разговор. Это способствует пониманию и заинтересованности.
👍 Будьте конструктивны. Важно не зацикливаться на ошибках, а стремиться к улучшению в следующий раз.
👍 Баланс между позитивным и конструктивным.
👍 Учитывайте точку зрения собеседника. У каждого может своё понимание проблемы.
👍 Будьте искренними и уважительными. Обратная связь должна быть честной и уважительной. Избегайте лести или критики.
Важно учитывать, что обратная связь не заканчивается после разговора. Можно обсудить план по улучшению ситуации, предоставление ресурсов или поддержки, проанализировать прогресс или признать улучшения.
😃 iOS Dev
За свою карьеру я поработал в нескольких компаниях с разными стилями менеджмента и разными подходами.
Конечно, все мы стремимся к лучшему для себя, но есть базовые принципы, которые могут помочь повысить вашу личную производительность и тем самым повлиять на рост всей команды. Следствием этого будет и успех проекта.
Мне близки мысли Фила Йейтса (инженера с 17-летним опытом).
Обратная связь — это не просто указание на то, что неправильно или правильно, а начало диалога, способствующего пониманию, обучению и росту. К сожалению, многие об этом забывают.
Поэтому вот несколько советов от Фила, которые можно взять на вооружение:
Важно учитывать, что обратная связь не заканчивается после разговора. Можно обсудить план по улучшению ситуации, предоставление ресурсов или поддержки, проанализировать прогресс или признать улучшения.
Please open Telegram to view this post
VIEW IN TELEGRAM
SwiftSyntax: Разбор и генерация исходного кода Swift
SwiftSyntax представляет собой набор библиотек, позволяющих анализировать, проверять, генерировать и корректировать исходный код
Изначально он был разработан компанией Apple, а сейчас это поддерживаемый опенсорс со множеством авторов.
Чтобы лучше познакомиться с его структурой, посмотрите на этот сайт, разработанный @kishikawakatsumi.
Кстати, на базе набора этих либ построены Swift parser, swift-format, и Swift macros.
📖 Пример работы с SwiftSyntax хорошо описан здесь.
⭐️ Сам репозиторий с 2 400 звёзд вот тут.
😃 iOS Dev
SwiftSyntax представляет собой набор библиотек, позволяющих анализировать, проверять, генерировать и корректировать исходный код
Swift
. Изначально он был разработан компанией Apple, а сейчас это поддерживаемый опенсорс со множеством авторов.
SwiftSyntax
создает абстрактное синтаксическое дерево (AST) исходного кода, которое позволяет взаимодействовать с высокоуровневым, безопасным и эффективным API. Чтобы лучше познакомиться с его структурой, посмотрите на этот сайт, разработанный @kishikawakatsumi.
Кстати, на базе набора этих либ построены Swift parser, swift-format, и Swift macros.
📖 Пример работы с SwiftSyntax хорошо описан здесь.
⭐️ Сам репозиторий с 2 400 звёзд вот тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Переходы в Swift с эффектом искажения и использованием Metal Shaders
Итоговый шейдер является результатом экспериментов, так как цель состояла в том, чтобы использовать положительное значение для перехода вставки и отрицательное — для удаления.
📖 В этом материале Павел Зак разбирается с
😃 iOS Dev
Итоговый шейдер является результатом экспериментов, так как цель состояла в том, чтобы использовать положительное значение для перехода вставки и отрицательное — для удаления.
📖 В этом материале Павел Зак разбирается с
.distortionEffect
и приводит пример его использования.Please open Telegram to view this post
VIEW IN TELEGRAM
Новый инструмент для создания анимаций: Lottielab
Можно импортировать или создать свои нуля. Экспорт доступен в формате Lottie, Gif или MP4 на любую платформу.
🤩 Их проект на ProductHunt (к слову, занявший первое место по итогам дня).
🔗 Ссылка на сам продукт (пока он в бете — бесплатно, дальше пока неизвестно).
😃 iOS Dev
Можно импортировать или создать свои нуля. Экспорт доступен в формате Lottie, Gif или MP4 на любую платформу.
🔗 Ссылка на сам продукт (пока он в бете — бесплатно, дальше пока неизвестно).
Please open Telegram to view this post
VIEW IN TELEGRAM
Что для вас определяющий фактор при выборе работы?
Anonymous Poll
82%
Размер зарплаты
36%
Задачи (сложность, разнообразие)
47%
Возможность роста
45%
Команда, коллектив
30%
Репутация компании и продуктов
53%
График работы (наличие удаленки и т.д.)
33%
Стек, инструменты, технологии
20%
Прозрачность процессов внутри
16%
Опция релокации (внутри страны и за пределы)
Как сейчас выглядят собеседования изнутри?
На хабре вышел интересный обзор процесса собеседований.
И пусть речь в этой статье о .Net, но посмотреть на взаимодействие автора и техлида любопытно.
В обзоре рассмотрены причины, почему рекрутинг такой как есть, почему сложно преодолеть порог входа для новичков и вновь сделан упор на небходимость базы.
Тема оказалась острой, чему есть подтверждение в количестве комментариев под статьёй.
📖 Процесс собеседований сейчас.
😃 iOS Dev
На хабре вышел интересный обзор процесса собеседований.
И пусть речь в этой статье о .Net, но посмотреть на взаимодействие автора и техлида любопытно.
В обзоре рассмотрены причины, почему рекрутинг такой как есть, почему сложно преодолеть порог входа для новичков и вновь сделан упор на небходимость базы.
Тема оказалась острой, чему есть подтверждение в количестве комментариев под статьёй.
📖 Процесс собеседований сейчас.
Please open Telegram to view this post
VIEW IN TELEGRAM
Макрос #Predicate в Swift 5.9: фильтрация и поиск
Это новый макрос, появившийся в Swift 5.9 и Xcode 15 и позволяющий фильтровать или искать данные в коллекции.
🧑💻 Его можно рассматривать как замену старомодному
Хотя многие из нас будут использовать макросы, не заботясь о том, какой год генерируется внутри, но полезно узнать и о деталях.
📖 Вот тут хороший разбор того, как можно использовать #Predicate и взгляд на базовую реализацию.
📖 А здесь я писал о ключевых словах в предикатах и логических операциях.
😃 iOS Dev
Это новый макрос, появившийся в Swift 5.9 и Xcode 15 и позволяющий фильтровать или искать данные в коллекции.
NSPredicate
, к которому мы привыкли со времен Objective-C.Хотя многие из нас будут использовать макросы, не заботясь о том, какой год генерируется внутри, но полезно узнать и о деталях.
📖 Вот тут хороший разбор того, как можно использовать #Predicate и взгляд на базовую реализацию.
📖 А здесь я писал о ключевых словах в предикатах и логических операциях.
Please open Telegram to view this post
VIEW IN TELEGRAM
Как выйти из внешнего цикла?
Чтобы выйти из нужного цикла, можно добавить любую специальную метку к такому циклу и использовать
Как показывает практика, о таких вещах можно не знать и спустя 5 лет разработки (я тоже не использовал такой способ).
Все совпадения с реальными разработчиками в именах случайны (или нет 😎 ).
😃 iOS Dev
Чтобы выйти из нужного цикла, можно добавить любую специальную метку к такому циклу и использовать
break
с этой меткой. Как показывает практика, о таких вещах можно не знать и спустя 5 лет разработки (я тоже не использовал такой способ).
Please open Telegram to view this post
VIEW IN TELEGRAM
Продвинутые трюки lldb для Swift: внедрение и изменение кода на лету
Хотя в Xcode мы можем добавлять брейкпоинты кликом по строке с кодом, у
Они могут варьироваться от создания методов «на лету» до изменения регистров процессора без необходимости его перекомпиляции, и знание этих команд может значительно улучшить ваш опыт отладки.
И пусть дизассемблирование и запись в память крайне редкое занятие, для повышения производительности можно использовать некоторые более сложные приемы работы с lldb.
📖 Хороший разбор возможностей, вспомогательных методов и их сочетания с брейкпоинтами можно прочесть здесь.
Кстати, если вы захотите создать собственную команду lldb, обратите свой взор сюда😎 .
😃 iOS Dev
Хотя в Xcode мы можем добавлять брейкпоинты кликом по строке с кодом, у
lldb
есть несколько фишек, не представленных в пользовательском интерфейсе. Они могут варьироваться от создания методов «на лету» до изменения регистров процессора без необходимости его перекомпиляции, и знание этих команд может значительно улучшить ваш опыт отладки.
И пусть дизассемблирование и запись в память крайне редкое занятие, для повышения производительности можно использовать некоторые более сложные приемы работы с lldb.
📖 Хороший разбор возможностей, вспомогательных методов и их сочетания с брейкпоинтами можно прочесть здесь.
Кстати, если вы захотите создать собственную команду lldb, обратите свой взор сюда
Please open Telegram to view this post
VIEW IN TELEGRAM
Исследование анимационных кривых в Swift: графики и примеры
Независимо от того, являетесь ли вы дизайнером или разработчиком, понимание принципов формирования анимаций может помочь в работе при создании интерфейса.
Найти точную формулу может быть непросто, поскольку не существует универсального уравнения или стандарта.
Анимация — это сочетание математики и мастерства.
📺 Например, в этом ролике Лукас Гаррон строит свою собственную "идеальную" функцию.
📖 В этом материале рассматриваются основы создания анимаций.
🔗 Кстати, на этом ресурсе можно посмотреть не только на формулы, но и на примеры реализованных анимаций, авторы — Андрей Ситник и Иван Соловьёв.
😃 iOS Dev
Независимо от того, являетесь ли вы дизайнером или разработчиком, понимание принципов формирования анимаций может помочь в работе при создании интерфейса.
Найти точную формулу может быть непросто, поскольку не существует универсального уравнения или стандарта.
Анимация — это сочетание математики и мастерства.
📺 Например, в этом ролике Лукас Гаррон строит свою собственную "идеальную" функцию.
📖 В этом материале рассматриваются основы создания анимаций.
🔗 Кстати, на этом ресурсе можно посмотреть не только на формулы, но и на примеры реализованных анимаций, авторы — Андрей Ситник и Иван Соловьёв.
Please open Telegram to view this post
VIEW IN TELEGRAM
ETTrace — опенсорсный инструмент для измерения производительности
Это фреймворк для iOS, разработанный компанией Emerge.
Хотя Time Profiler технически предоставляет всю необходимую информацию, добиться ее появления может быть очень непросто, даже если вы точно знаете, что делаете.
Например, с этим инструментом не нужно компилировать специальную сборку Profile, как это делается при использовании Xcode и Time Profiler.
📖 Пост с основной информацией от Emerge Tools.
📖 Разбор основных фич с примерами.
🛠 Репозиторий проекта и инструкции по установке.
😃 iOS Dev
Это фреймворк для iOS, разработанный компанией Emerge.
Хотя Time Profiler технически предоставляет всю необходимую информацию, добиться ее появления может быть очень непросто, даже если вы точно знаете, что делаете.
Например, с этим инструментом не нужно компилировать специальную сборку Profile, как это делается при использовании Xcode и Time Profiler.
📖 Пост с основной информацией от Emerge Tools.
📖 Разбор основных фич с примерами.
🛠 Репозиторий проекта и инструкции по установке.
Please open Telegram to view this post
VIEW IN TELEGRAM
Новый iPhone
Вчера анонсировали новую линейку яблочных девайсов. Ожидаемо, с переходом на Type-C вместо ставшего едва ли не символом Apple лайтнинга.
Да, конечно это требование ЕС, и вместо того, чтобы вновь ввязываться в многолетние судебные споры, в компании приняли логичное решение.
Особенно учитывая тот факт, что инженеры Apple участвовали в разработке стандарта Type-C, пусть и не так явно и открыто.
Но это и ожидаемо, любые инновации, которые могут принести деньги, в триллионной корпорации находятся под семью печатями, как тот же Thunderbolt до полной передачи прав Intel (подробнее об истории тут). Тогда первым девайсом с поддержкой этого аппаратного интерфейса стал Macbook Pro (в далёком 2011 году).
Конечно, сама презентация получилась без вау-эффекта, но не только по причине недостатка новых фич.
Возможно, причина тому — наше время, когда ещё на стадии производства появляются сливы информации, а к самому анонсу и журналисты, и зрители уже подходят с веером фактов.
Для меня как разработчика в любом случае главное событие года - это WWDC, а не осенний показ, который заставляет проверить ресурсы и подумать, готовы ли вы менять свой телефон прямо сейчас.
Хотя хочется увидеть что-то вроде письма, которое было отправлено Джобсом очень давно.
Там скрыто:Sent from my iPhone .
😃 iOS Dev
Вчера анонсировали новую линейку яблочных девайсов. Ожидаемо, с переходом на Type-C вместо ставшего едва ли не символом Apple лайтнинга.
Да, конечно это требование ЕС, и вместо того, чтобы вновь ввязываться в многолетние судебные споры, в компании приняли логичное решение.
Особенно учитывая тот факт, что инженеры Apple участвовали в разработке стандарта Type-C, пусть и не так явно и открыто.
Но это и ожидаемо, любые инновации, которые могут принести деньги, в триллионной корпорации находятся под семью печатями, как тот же Thunderbolt до полной передачи прав Intel (подробнее об истории тут). Тогда первым девайсом с поддержкой этого аппаратного интерфейса стал Macbook Pro (в далёком 2011 году).
Конечно, сама презентация получилась без вау-эффекта, но не только по причине недостатка новых фич.
Возможно, причина тому — наше время, когда ещё на стадии производства появляются сливы информации, а к самому анонсу и журналисты, и зрители уже подходят с веером фактов.
Для меня как разработчика в любом случае главное событие года - это WWDC, а не осенний показ, который заставляет проверить ресурсы и подумать, готовы ли вы менять свой телефон прямо сейчас.
Хотя хочется увидеть что-то вроде письма, которое было отправлено Джобсом очень давно.
Там скрыто:
Please open Telegram to view this post
VIEW IN TELEGRAM