en
Feedback
iOS Dev

iOS Dev

Open in Telegram

👨‍💻Автор: Виктор Грушевский (@Viktorianec) ⚒️ База: https://boosty.to/ios_dev | 🤖 @iOSIQBot | https://iosiq.ru 🍏Канал об iOS-разработке, алгоритмах и архитектурах ⭐️ Подготовка к собесам ⭐️ Код. Много кода. #ios #mobile #swift

Show more
7 878
Subscribers
-124 hours
-77 days
-4930 days
Posts Archive
iOS Dev
7 878
Написал небольшой пост о Deque, что это вообще такое, а также о некоторых её плюсах. Ну и о минусах тоже, конечно.

iOS Dev
7 878
PhotosPicker: инструмент выбора фотографий с помощью SwiftUI и Transferable 📖 В этой статье рассказывается, как использовать
PhotosPicker: инструмент выбора фотографий с помощью SwiftUI и Transferable 📖 В этой статье рассказывается, как использовать новый SwiftUI PhotosPicker API, о котором было объявлено на одной из сессий #WWDC. Новый SwiftUI PhotosPicker API доступен на всех платформах: ⚪ iOS (16.0+) ⚪ iPadOS (16.0+) ⚪ macOS (13.0+) ⚪ watchOS (9.0+) Больше не нужно использовать UIViewControllerRepresentable для обертывания PHPickerViewController или его старой версии UIImagePickerController. Также приложению не нужно запрашивать доступ к библиотеке, чтобы использовать его. Кстати, из крутых фишек, пикер автоматически выберет оптимальный макет в зависимости от платформы, конфигурации и доступного пространства экрана. Не нужно беспокоиться о пользовательском интерфейсе, а время можно потратить на улучшение приложения. Для внедрения нужны два шага: 1️⃣ Использовать PhotosPicker для получения одного или нескольких экземпляров PhotosPickerItem. 2️⃣ Загрузить данные об объекте с помощью PhotosPickerItem.loadTransferable.

iOS Dev
7 878
Когда скопировал два решения со StackOverflow На самом деле это решение от изобретателя с ником The Q (подозреваю, тут есть связь с Джеймсом Бондом). По легенде, автор сломал колесо своего обычного байка. А после этого решил не выбрасывать его и распилил на две равные половины, после чего и собрал новую версию транспорта — «по формуле 1+0,5+0,5=2». 😅 Иногда хочется поделиться не только серьёзными вещами. @iOS Dev

iOS Dev
7 878
Когда скопировал два решения со StackOverflow На самом деле это решение от изобретателя с ником The Q (подозреваю, тут есть связь с Джеймсом Бондом). По легенде, автор сломал колесо своего обычного байка. А после этого решил не выбрасывать его и распилил на две равные половины, после чего и собрал новую версию транспорта — «по формуле 1+0,5+0,5=2». 😅 Иногда хочется поделиться не только серьёзными вещами. @iOS Dev

iOS Dev
7 878
Clean Architecture и MVVM в iOS: пример реализации проекта При разработке программного обеспечения важно использовать не толь
Clean Architecture и MVVM в iOS: пример реализации проекта При разработке программного обеспечения важно использовать не только паттерны проектирования, но и архитектурные паттерны. Как мы видим на графике Clean Architecture, у нас есть различные слои в приложении. Главное правило — не иметь зависимостей от внутренних слоев к внешним. Стрелки, указывающие снаружи внутрь, это правило зависимостей. Зависимости могут быть только от внешнего слоя внутрь. 📖 В этой статье на рабочем примере проекта показывается, как архитектурные паттерны MVVM и Clean Architecture могут быть применены в приложении для iOS. 🛠 Проект на Github, который может быть использован в качестве шаблона.

iOS Dev
7 878
Различные способы перехвата ошибок в Swift при использовании do-catch Конечно, заманчиво просто поймать все ошибки с помощью
Различные способы перехвата ошибок в Swift при использовании do-catch Конечно, заманчиво просто поймать все ошибки с помощью единственного catch и на этом закончить, но не все ошибки одинаковы, и вы должны относиться к ним именно так. 👍 Изучив различные способы перехвата такого рода ошибок, вы сможете создавать грамотные выражения catch. Они будут легко читаться, пониматься и соответствовать потребностям вашего вашего приложения. 📖 В этой статье автор рассматривает различные способы перехвата из throw-функций. Кроме этого, описываются типы этих функций и разбирается, что в них используется для разделения каждого catch.

iOS Dev
7 878
Субботний опенсорс 🛠 Полезный репозиторий с реализацией нескольких сортировок. Бонусом идёт наглядная демонстрация процесса (в примере для этого показано отображение для Quick Sort). Используется Swift Playgrounds. #opensource

iOS Dev
7 878
Простой способ подсчитать количество строк в ваших Swift-файлах Для этого вам понадобится терминал. Нужно перейти в корень ва
Простой способ подсчитать количество строк в ваших Swift-файлах Для этого вам понадобится терминал. Нужно перейти в корень вашего проекта и скопировать эту команду (для чистоты эксперимента тут исключено содержимое зависимостей CocoaPods): find . -path ./Pods -prune -o -name '*.swift' -print0 ! -name '/Pods' | xargs -0 wc -l Это не всё! Если вы хотите большего, то с помощью этой утилиты можно по фану определить стоимость кода в проекте💰.

iOS Dev
7 878
Xcode's Energy Organizer: поиск причин крашей при высокой нагрузке на CPU Если вы не знаете, что такое CPU Usage termination,
Xcode's Energy Organizer: поиск причин крашей при высокой нагрузке на CPU Если вы не знаете, что такое CPU Usage termination, вам повезло. Это не только один из самых неприятных крашей в iOS, но он даже не рассматривается системой как сбой. Об этом не сообщается Firebase, поэтому о сбое вы даже не узнаете. Ну, пока ваши пользователи не начнут сообщать вам об этом. Очень неприятная вещь! 🤔 Что такое CPU Exceptions в iOS? Согласно Apple, ваше приложение может грузить процессор — до тех пор, пока оно в foreground и не делает это долго. Однако если оно в фоне, вам необходимо сократить использование процессора. Это не то чтобы большая проблема, если задача выполняется единожды. Но если вы постоянно используете более 80% процессора в течение одной минуты, iOS без предупреждения закроет приложение. Это называется CPU Exception, или "прекращение работы при высокой нагрузке на процессор". 📖 В статье разбирается это понятие, рассматривается Xcode's Energy Organizer и приводится совет для предотвращения.

iOS Dev
7 878
Применение default для подсчёта количества символов в строке Задача подсчёта символов в строках является одним из потенциальн
Применение default для подсчёта количества символов в строке Задача подсчёта символов в строках является одним из потенциальных вопросов во многих алгоритмических секциях. Вы можете легко установить значение по умолчанию для ключа в словаре. Для этого как раз можно воспользоваться ключевым словом default. 🛠 На скриншоте я показал два способа для подсчёта повторений букв в строке «Hello iOS Devs». 💼 Конечно, вариантов подсчёта может быть намного больше, но всегда полезно расширить свой инструментарий.

iOS Dev
7 878
На StackOverflow выпустили большой, вернее, ОГРОМНЫЙ отчёт по результатам опроса более 70 000 разработчиков. Собрал в один по
На StackOverflow выпустили большой, вернее, ОГРОМНЫЙ отчёт по результатам опроса более 70 000 разработчиков. Собрал в один пост выжимку по фактам для Swift и Objective-C, больше графиков и сравнений можно посмотреть здесь. Для Swift ❤️ 63% любят этот язык,😱 37% считают его неприятным. 💵 Медианная зарплата составляет $ 78 468 в год. Для Objective-C ❤️ 24% любят, 😱 76% считают его неприятным. 💵 Медианная зарплата $ 83 165 в год. Может на нём не так приятно писать, но пять тысяч долларов это пять тысяч долларов 😅. 🛠 Удовлетворённость средой разработки Xcode равная, 50% считают его годным инструментом, а 50% не очень. 💪Лидеры по зарплатам Closure и Erlang — разработчикам, пишущим на одном из этих языков, платят в среднем $ 100 000 в год.

iOS Dev
7 878
На StackOverflow выпустили большой, вернее, ОГРОМНЫЙ отчёт по результатам опроса более 70 000 разработчиков. Собрал в один по
На StackOverflow выпустили большой, вернее, ОГРОМНЫЙ отчёт по результатам опроса более 70 000 разработчиков. Собрал в один пост выжимку по фактам для Swift и Objective-C, больше графиков и сравнений можно посмотреть здесь. Для Swift ❤️ 63% любят этот язык,😱 37% считают его неприятным. 💵 Медианная зарплата составляет $ 78 468 в год. Для Objective-C ❤️ 24% любят, 😱 76% считают его неприятным. 💵 Медианная зарплата $ 83 165 в год. Может на нём не так приятно писать, но пять тысяч долларов это пять тысяч долларов 😅. 🛠 Удовлетворённость средой разработки Xcode равная, 50% считают его годным инструментом, а 50% не очень. 💪Лидеры по зарплатам Closure и Erlang — разработчикам, пишущим на одном из этих языков, платят в среднем $ 100 000 в год.

iOS Dev
7 878
Стратегии обращения к пользователям с просьбой оценить ваше приложение 👏 📺 Многие пользователи смотрят, сколько звезд у при
Стратегии обращения к пользователям с просьбой оценить ваше приложение 👏 📺 Многие пользователи смотрят, сколько звезд у приложения, прежде чем принять решение о его загрузке. 📖 В этой статье рассказывается про один из подходов. Что НЕ следует делать 🔴 Показывать алерт при запуске. 🔴 Показывать его слишком рано. 🔴 Показывать при любом общем для всех действии. Стратегии получения максимальной отдачи 🟢 Ориентироваться на уникальное действие в приложении. 🟢 Совмещать оценку с существующими. Например, если пользователь уже что-то положительно оценил в вашем приложении. 🟢 Внедрите систему, основанную на весе, для управления отображением ваших алертов. Например: — Открытие твита 1 балл. — Лайк твита 3 балла. — Создание твита 5 баллов. Если пользователь достигнет нужного порога — показываем запрос. 🙋Но вы должны использовать этот инструмент очень эффективно, потому что он очень ограничен, и если вы не будете осторожны, это может привести к печальному результату.

iOS Dev
7 878
Продвинутые анимации в SwiftUI 📖 В цикле статей авторы погружаются в некоторые продвинутые техники создания анимации SwiftUI. Подробно рассказывается о протоколе Animatable, его верном спутнике animatableData, мощном и часто игнорируемом GeometryEffect и протоколе AnimatableModifier. Все эти темы не слишком хорошо описаны в официальной документации и не очень часто упоминаются в постах и статьях о SwiftUI. Тем не менее, они предоставляют нам инструменты для создания довольно красивых анимаций. 1️⃣ Часть первая — Paths. 2️⃣ Часть вторая — GeometryEffect. 3️⃣ Часть третья — AnimatableModifier. 🛠 Все статьи насыщены примерами, а исходный код можно найти на гитхабе.

iOS Dev
7 878
Equality в Swift: протокол Equatable, объяснение и примеры 🧐 Проверка того, считаются ли два объекта или значения равными, о
Equality в Swift: протокол Equatable, объяснение и примеры 🧐 Проверка того, считаются ли два объекта или значения равными, определенно является одной из наиболее часто выполняемых операций во всем программировании. 💻 Одним из наиболее интересных аспектов реализации равенства в Swift является то, что все это сделано протокольно-ориентированным способом — это означает, что любой тип может стать равнозначным, соответствуя протоколу Equatable. 📖 Например, в этой статье рассматривается, как Swift моделирует концепцию равенства и как эта модель различается между типами значений и ссылок.

iOS Dev
7 878
10 фактов про разработку первых айфонов от Кена Косиенды — сотрудника Apple с 15-летним опытом и изобретателя автозамены в iPhone ⚪ Однобуквенные и двухбуквенные комбинации были просто хардкодом. Тяжело поверить, но это правда. При вводе «ik» всегда была автокоррекция на «ok». ⚪ Автокоррекция на оригинальном iPhone была очень простой. Оно всегда соответствовала количеству набранных вами буквавтодополнения не было. Если вы введете 5 букв, в качестве исправлений будут предлагаться только слова из 5 букв… Кроме сокращений, код алгоритма также мог добавлять апостроф. ⚪ Как только вы набирали третью букву в слове, алгоритм просматривал места ваших касаний и строил путь, который больше всего был похож на созвездие, и пытался сопоставить этот шаблон с идеальным центральным попаданием по клавишам для всех слов в словаре. Ближайшее совпадение побеждало. Если это слово отличалось от того, что вы напечатали, а самого слова не было в словаре иначе или оно было настолько непопулярным в языке, чем совпадающее слово, автоисправление предлагало изменение. С точки зрения памяти и вычислений, это было почти все, что команда могла себе позволить на оборудовании в то время. Алгоритм просто делал свою работу. ⚪ У Кена появилась идея сопоставить тип клавиатуры с каждым текстовым полем — например, при нажатии на поле с номером телефона будет отображаться цифровая клавиатура. А ещё временные названия вроде: text input traits, return key type и другие. Примечание: ну, как временное 😂 ⚪ На оригинальной клавиатуре iPhone нужна была клавиша удаления в правом верхнем углу (как на более привычных десктопных клавиатурах). Но она просто-напросто не помещалась, поэтому Кен переместил её на третий ряд, где было место. Кроме того, третий ряд клавиш не смещен относительно второго ряда. Сейчас же нам кажется, что так и нужно👏. ⚪ Кен реализовал словарь автозамены iPhone. Он начал со старых списков слов, которые Apple хранила на редко посещаемых внутренних сайтах. Затем были добавлены всевозможные «дополнения». Названия продуктов (с заглавными буквами: iMac). Названия спортивных команд, затем сленговые сокращения (с Dont -> Don’t). И так далее. ⚪ При разработке команда поняла, что система автозамены может предлагать запрещённые (матерные) слова, поэтому был добавлен список таких выражений с установленным битом для тех записей, которые гласили: «никогда не выполнять автозамену этих слов». Вы могли напечатать их точно, но вот клавиатура в этом бы не помогла. ⚪ В оригинальном iPhone не было cut/copy/paste. Печально известный факт имеет простое объяснение. У Кена не было времени сделать это правильно: он объясняет это тем, что было слишком много работы с клавиатурой, автоисправлением и текстовой системой в целом. У команды дизайнеров тоже не было времени. Так оно и ушло в прод. ⚪ Кривизна пальцев заставляет вас думать, что вы касаетесь экрана выше, чем на самом деле. Поэтому прикосновения определяются с учетом этого. Вот почему даже сегодня трудно определить точку касания, если держать телефон вверх ногами. ⚪ Оригинальный iPhone не имел виртуальной памяти. Некоторые люди придумали систему под названием «Jetsam». Поскольку показывалось только одно приложение за раз, сначала завершали фоновые программы, когда не хватало памяти. Эти программы перезапускались, а не возобновлялись при возвращении на передний план. Не могу не поделиться найденным комментарием на эту тему: И вся нужная структура была разработана позже, чтобы автоматически сохранять и восстанавливать состояние приложения, создавая иллюзию того, что приложение работало все время. Фух! Вот такое небольшое путешествие во времени. Если вы хотите больше необычных фактов, то они есть в книге «Creative Selection: Inside Apple's Design Process During the Golden Age of Steve Jobs». И, конечно, в нашем канале: @iOS Dev

iOS Dev
7 878
10 фактов про разработку первых айфонов от Кена Косиенды — сотрудника Apple с 15-летним опытом и изобретателя автозамены в iP
+3
10 фактов про разработку первых айфонов от Кена Косиенды — сотрудника Apple с 15-летним опытом и изобретателя автозамены в iPhone Разработка это не только написание кода, но и различные подходы к алгоритмам и решению тех или иных задач. Иногда я встречаю интересные факты или алгоритмы, но ещё более важно — истории программистов, особенно тех, кто стоял у истоков. Сегодня я собрал для вас подборку из фактов от программиста Apple, с работой которого каждый из нас сталкивается чаще, чем может показаться. Продолжение тут: 👇

iOS Dev
7 878
10 фактов про разработку первых айфонов от Кена Косиенды — сотрудника Apple с 15-летним опытом и изобретателя автозамены в iP
10 фактов про разработку первых айфонов от Кена Косиенды — сотрудника Apple с 15-летним опытом и изобретателя автозамены в iPhone Разработка это не только написание кода, но и различные подходы к алгоритмам и решению тех или иных задач. Иногда я встречаю интересные факты или алгоритмы, но ещё более важно — истории программистов, особенно тех, кто стоял у истоков. Сегодня я собрал для вас подборку из фактов от программиста Apple, с работой которого каждый из нас сталкивается чаще, чем может показаться. Продолжение тут: 👇

iOS Dev
7 878
Быстрый способ проверить созданную URL-схему (диплинк) в симуляторе c помощью терминала ⏳ Есть старый способ с использованием Safari, но он не так эффективен. Safari не запоминает последнюю добавленную схему, поэтому вам придется вводить её снова и снова. А переход между браузером и приложением делает ситуацию хуже, ещё и тратит время. 👌 Расскажу о другом способе. Вы наверняка знаете, что есть xcrun, который можно использовать для запуска любого инструмента внутри Xcode из командной строки. Опцией для способа ниже является simctl, который и поможет вам управлять симуляторами. Для этого можно использовать: xcrun simctl openurl booted <url> 💻 В качестве параметра url нужно использовать вашу ранее созданную схему. В моём примере это: exampleapp://test. Специально для @iOS Dev.

iOS Dev
7 878
Быстрый способ проверить, все ли элементы коллекции удовлетворяют заданному условию 👌 Со Swift 4.2 для этого можно использов
Быстрый способ проверить, все ли элементы коллекции удовлетворяют заданному условию 👌 Со Swift 4.2 для этого можно использовать метод allSatisfy(). 🟢 Если все элементы удовлетворяют заданному условию, то вызов allSatisfy() вернет true. 🔴Если хотя бы один элемент не пройдет наше условие, то результатом вызова allSatisfy() будет false.