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
2000 импортов: история об организации модулей SwiftPM
Автор делится размышлениями об использовании
И хотя способ кажется неплохим, в разработке есть свои сложности (куда же без них).
Например, потенциальное отсутствие группировки не только затрудняет поиск нужного модуля, но может привести к циклическим зависимостям.
Это требует стратегического планирования для предотвращения будущих ошибок компилятора.
📖 В этом материале пойдет речь про способ для упорядочивания модулей для ясности и удобства, используя скрытую (неофициальную) функцию Swift.
🧐 Кстати, этот способ, похоже, используют и авторы Point-Free в либе TCA (The Composable Architecture).
😃 iOS Dev
Автор делится размышлениями об использовании
@_exported import
, объединении в один CoreDependencies
и использовании этого решения в проекте.И хотя способ кажется неплохим, в разработке есть свои сложности (куда же без них).
Например, потенциальное отсутствие группировки не только затрудняет поиск нужного модуля, но может привести к циклическим зависимостям.
Это требует стратегического планирования для предотвращения будущих ошибок компилятора.
📖 В этом материале пойдет речь про способ для упорядочивания модулей для ясности и удобства, используя скрытую (неофициальную) функцию Swift.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
5 библиотек iOS для вдохновения и изменения пользовательского интерфейса
📖 Domenico Nicoli делится своей подборкой необычных компонентов:
🔘 GravitySliderFlowLayout — кастомный flowlayout для UICollectionView.
🔘 VegaScroll — красивая анимация для UICollectionView.
🔘 Mandoline — вы можете использовать этот компонент, если вам нужен интерфейс с функцией «выбора».
🔘 Reel Search — необычный компонент для выбора опций из списка.
🔘 Sheet — как следует из названия, позволяет создать свои action sheets с функциями навигации.
😃 iOS Dev
📖 Domenico Nicoli делится своей подборкой необычных компонентов:
🔘 GravitySliderFlowLayout — кастомный flowlayout для UICollectionView.
🔘 VegaScroll — красивая анимация для UICollectionView.
🔘 Mandoline — вы можете использовать этот компонент, если вам нужен интерфейс с функцией «выбора».
🔘 Reel Search — необычный компонент для выбора опций из списка.
🔘 Sheet — как следует из названия, позволяет создать свои action sheets с функциями навигации.
Please open Telegram to view this post
VIEW IN TELEGRAM
Краткое руководство по таблицам SwiftUI
Таблицы с несколькими столбцами уже давно являются функцией macOS, на iOS они появились только с iOS 16.
Конечно, есть некоторые особенности использования, но в целом работать с ними несложно.
Например, сортировку по столбцам можно добавить буквально в пару строк (как тут).
📖 А об остальных особенностях таблиц на SwiftUI можно узнать из этого материала.
😃 iOS Dev
Таблицы с несколькими столбцами уже давно являются функцией macOS, на iOS они появились только с iOS 16.
Конечно, есть некоторые особенности использования, но в целом работать с ними несложно.
Например, сортировку по столбцам можно добавить буквально в пару строк (как тут).
@State private var sortOrder = [KeyPathComparator(\Country.name)]
var body: some View {
Table(store.countries, selection: $selected,
sortOrder: $sortOrder) { ... }
}
📖 А об остальных особенностях таблиц на SwiftUI можно узнать из этого материала.
Please open Telegram to view this post
VIEW IN TELEGRAM
Как создать Swift Package из библиотеки C+
В полезном для прокачки своих знаний примере автор рассказывает о возможности привязки к популярной библиотеке линейной алгебры C++ — Eigen.
Для простоты только часть функций Eigen будет перенесена на Swift.
📖 С помощью этого материала можно глубже погрузиться в процесс создания собственного пакета Swift.
🛠 Итоговый результат доступен на Github.
😃 iOS Dev
В полезном для прокачки своих знаний примере автор рассказывает о возможности привязки к популярной библиотеке линейной алгебры C++ — Eigen.
Для простоты только часть функций Eigen будет перенесена на Swift.
📖 С помощью этого материала можно глубже погрузиться в процесс создания собственного пакета Swift.
🛠 Итоговый результат доступен на Github.
Please open Telegram to view this post
VIEW IN TELEGRAM
Профсоюз разработчиков добился от Apple специальной пометки приложений, сделанных нейросетью
Можно выдохнуть!
В течение последних двух с половиной недель после выхода GPT-4 разработчики в Твиттере добивались отмены, или так называемого кэнселлинга приложений, сделанных нейросетями с помощью специального тега #stopAI #freedomForMankind.
Эта инициатива дошла до Тима Кука, который был вынужден прервать рабочую поездку в восточную Азию и созвониться с отделом ревью приложений.
Кто-то даже переслал ему сравнительный анализ решения задач на литкоде.
После нескольких дней напряженных дискуссий всё-таки было принято два важных решения:
1️⃣ Теперь при выкладке приложений нужно будет указывать поколение и тип нейросети.
2️⃣ Все приложения в App Store получат специальную пометку в виде иконки и дополнительного тега, если они сделаны нейросетью.
😃 iOS Dev - будем надеяться, что это поможет. Больше подробностей принятых решений можно узнать в видеообзоре от 9to5mac.
Внимание, это первоапрельская новость! Пока что таких изменений в App Store нет 😎
Можно выдохнуть!
В течение последних двух с половиной недель после выхода GPT-4 разработчики в Твиттере добивались отмены, или так называемого кэнселлинга приложений, сделанных нейросетями с помощью специального тега #stopAI #freedomForMankind.
Эта инициатива дошла до Тима Кука, который был вынужден прервать рабочую поездку в восточную Азию и созвониться с отделом ревью приложений.
Кто-то даже переслал ему сравнительный анализ решения задач на литкоде.
После нескольких дней напряженных дискуссий всё-таки было принято два важных решения:
1️⃣ Теперь при выкладке приложений нужно будет указывать поколение и тип нейросети.
2️⃣ Все приложения в App Store получат специальную пометку в виде иконки и дополнительного тега, если они сделаны нейросетью.
Внимание
Please open Telegram to view this post
VIEW IN TELEGRAM
Лучшие практики для TCA (The Composable Architecture)
Команда The Browser Company активно использует структуру Composable Architecture (об их любопытном способе организации SPM можно почитать вот тут).
Krzysztof Zabłocki на основе своего опыта разработал новый набор лучших практик, которые могут принести пользу проектам, использующим эту архитектуру.
📖 В этом материале перечислены методы, которые могут помочь оптимизировать производительность и стабильность ваших проектов.
📖 Кстати, здесь сообщество делится рекомендациями (и вы можете добавить свои).
😃 iOS Dev
Команда The Browser Company активно использует структуру Composable Architecture (об их любопытном способе организации SPM можно почитать вот тут).
Krzysztof Zabłocki на основе своего опыта разработал новый набор лучших практик, которые могут принести пользу проектам, использующим эту архитектуру.
📖 В этом материале перечислены методы, которые могут помочь оптимизировать производительность и стабильность ваших проектов.
📖 Кстати, здесь сообщество делится рекомендациями (и вы можете добавить свои).
Please open Telegram to view this post
VIEW IN TELEGRAM
StackOverflow тонет или почему Google ломает интернет
И почему всё это очень плохо
В течение восьми последних лет на самом популярном сайте для поиска причин/симптомов/решений для программистов наблюдается уменьшение количества сообщений в целом.
С 2014 года сообщений стало меньше в два раза, вместо 140k -> 70k. Кроме этого, существует очень плохая тенденция, что количество вопросов уже превышает количество ответов.
В последнее время доминирующая причина этого — стойкая вера наших коллег и начинающих разработчиков в то, что нейросети знают всё. Но на самом деле, эти нейросети только собирают факты по ключевым словам и комбинируют их на выходе, и далеко не всегда правильно.
Но не это ключевой фактор
Несмотря на бан использования ChatGPT на самом StackOverflow, они не могут повлиять на количество входящего трафика от крупнейшего поисковика Google при использовании нейросетей.
В первую очередь людям нужны ответы. При этом не важен источник этих самых знаний.
И, например, сам бот на сайте общения не предоставляет никаких ключевых ссылок на источники. Да и решение Bing минует основной источник и, что более важно, самих авторов контента. Ведь тут всё просто:
Авторы создают контент -> прокачивают его видимость -> Google показывает рекламу у себя + авторы получают отдачу в виде денег (ну или альтруистической обратной связи). Казалось бы, win-win для обеих сторон, вот только появляется но.
С появлением нейросетей авторство, как вы понимаете, становится никому не интересно.
Это означает очень простую вещь, создавая контент или в примере с ответами на StackOverflow нейросети просто парсят это всё в датасет и авторы отходят на второй план.
Получается, что крупнейший ресурс лишается основного источника дохода - рекламы на сайте. И даже не нужно складывать пазл до конца для осознания того, что это приведёт к тому, что вместо ответа на свой уникальный вопрос пользователи будут обращаться к нейросети, у которой, как вы понимаете, база ограничена.
И если авторы вопросов (или программистских блогов с разборами) не будут видеть, что их решениями пользуются, то дальшейшее развитие ситуация предсказуемо.
Они перестанут отвечать на вопросы. Перестанут разбирать сложные вещи.
Можно ли что-то сделать?
Да, добавить источники цитирования. Возможно, реализовать в ответах блок с референсами. Наверняка, существуют и другие решения.
Но что случится с хвалёным вау-эффектом от нейросетей, когда окажется, что это лишь поисковик на стероидах?
😃 iOS Dev
И почему всё это очень плохо
В течение восьми последних лет на самом популярном сайте для поиска причин/симптомов/решений для программистов наблюдается уменьшение количества сообщений в целом.
С 2014 года сообщений стало меньше в два раза, вместо 140k -> 70k. Кроме этого, существует очень плохая тенденция, что количество вопросов уже превышает количество ответов.
В последнее время доминирующая причина этого — стойкая вера наших коллег и начинающих разработчиков в то, что нейросети знают всё. Но на самом деле, эти нейросети только собирают факты по ключевым словам и комбинируют их на выходе, и далеко не всегда правильно.
Но не это ключевой фактор
Несмотря на бан использования ChatGPT на самом StackOverflow, они не могут повлиять на количество входящего трафика от крупнейшего поисковика Google при использовании нейросетей.
В первую очередь людям нужны ответы. При этом не важен источник этих самых знаний.
И, например, сам бот на сайте общения не предоставляет никаких ключевых ссылок на источники. Да и решение Bing минует основной источник и, что более важно, самих авторов контента. Ведь тут всё просто:
Авторы создают контент -> прокачивают его видимость -> Google показывает рекламу у себя + авторы получают отдачу в виде денег (ну или альтруистической обратной связи). Казалось бы, win-win для обеих сторон, вот только появляется но.
С появлением нейросетей авторство, как вы понимаете, становится никому не интересно.
Это означает очень простую вещь, создавая контент или в примере с ответами на StackOverflow нейросети просто парсят это всё в датасет и авторы отходят на второй план.
Получается, что крупнейший ресурс лишается основного источника дохода - рекламы на сайте. И даже не нужно складывать пазл до конца для осознания того, что это приведёт к тому, что вместо ответа на свой уникальный вопрос пользователи будут обращаться к нейросети, у которой, как вы понимаете, база ограничена.
И если авторы вопросов (или программистских блогов с разборами) не будут видеть, что их решениями пользуются, то дальшейшее развитие ситуация предсказуемо.
Они перестанут отвечать на вопросы. Перестанут разбирать сложные вещи.
Можно ли что-то сделать?
Да, добавить источники цитирования. Возможно, реализовать в ответах блок с референсами. Наверняка, существуют и другие решения.
Но что случится с хвалёным вау-эффектом от нейросетей, когда окажется, что это лишь поисковик на стероидах?
Please open Telegram to view this post
VIEW IN TELEGRAM
Топ-6 вдохновляющих докладов, номинированных на Swift Community Awards 2022
Остальные номинации с возможностью проголосовать доступны тут
Пока на хабре жюри рассматривает лучшие статьи, на Hacking with swift опубликовали и свой шортлист.
📺 Anna Beltrami: Spark your Creativity – the Power of iPad Playgrounds. О том, как изменить свой стиль разработки и обратиться к своему творческому потенциалу.
📺 Frank Courville: Roll your own networking stack. О том, как создать собственную небольшую библиотеку компонуемых инструментов, чтобы сделать работу с сетью приятной.
📺 Jordi Bruin: Shipping Side Projects in 2-2-2 Easy Steps. Про то, как сохранить идеи небольшими и реализовать их от финалиста Apple Design Awards.
📺 Krzysztof Zabłocki: Improving developer experience through tools and techniques. Про инструменты и методы для экономии месяцев работы и повышения скорости итераций.
📺 Daniel Steinberg: Willing Suspension of Disbelief. В этом докладе говорится про ментальную модель, которая упростит написание асинхронного кода и сделает его более понятным.
📺 Natalia Panferova: Mysteries of SwiftUI Text view. Полезный доклад, в котором рассматриваются возможности компонента, о которых вы могли и не подозревать.
😃 iOS Dev
Остальные номинации с возможностью проголосовать доступны тут
Пока на хабре жюри рассматривает лучшие статьи, на Hacking with swift опубликовали и свой шортлист.
📺 Anna Beltrami: Spark your Creativity – the Power of iPad Playgrounds. О том, как изменить свой стиль разработки и обратиться к своему творческому потенциалу.
📺 Frank Courville: Roll your own networking stack. О том, как создать собственную небольшую библиотеку компонуемых инструментов, чтобы сделать работу с сетью приятной.
📺 Jordi Bruin: Shipping Side Projects in 2-2-2 Easy Steps. Про то, как сохранить идеи небольшими и реализовать их от финалиста Apple Design Awards.
📺 Krzysztof Zabłocki: Improving developer experience through tools and techniques. Про инструменты и методы для экономии месяцев работы и повышения скорости итераций.
📺 Daniel Steinberg: Willing Suspension of Disbelief. В этом докладе говорится про ментальную модель, которая упростит написание асинхронного кода и сделает его более понятным.
📺 Natalia Panferova: Mysteries of SwiftUI Text view. Полезный доклад, в котором рассматриваются возможности компонента, о которых вы могли и не подозревать.
Please open Telegram to view this post
VIEW IN TELEGRAM
Три частые ошибки при работе с Optionals
📖 В этом материале Винсент расскажет о 3 ошибках, которые нужно избегать при работе с опциональными значениями и разбирает:
1️⃣ В чём разница между «
2️⃣ О важности использовать
3️⃣ Излишнее использование опциональных значений там, где это не нужно.
😃 iOS Dev
📖 В этом материале Винсент расскажет о 3 ошибках, которые нужно избегать при работе с опциональными значениями и разбирает:
1️⃣ В чём разница между «
?
» и «!
» при использовании в коде.2️⃣ О важности использовать
optional binding
.3️⃣ Излишнее использование опциональных значений там, где это не нужно.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Необычный эффект на основе значения освещённости
🤩 Alex Widua создал прототип, достигнутый путем эмуляции внешней освещенности устройства и частичного затемнения пользовательского интерфейса.
К сожалению, ему не удалось получить разрешения от
🛠 Вот тут лежит код для этого эффекта, а в качестве бонуса ещё и приложение для воссоздания «блестящей кнопки» (тоже на основе камеры).
😃 iOS Dev
К сожалению, ему не удалось получить разрешения от
SensorKit
, в чём он честно признался, зато код на базе данных EXIF от камеры можно использовать для приблизительного значения.🛠 Вот тут лежит код для этого эффекта, а в качестве бонуса ещё и приложение для воссоздания «блестящей кнопки» (тоже на основе камеры).
Please open Telegram to view this post
VIEW IN TELEGRAM