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 879
Subscribers
-124 hours
-77 days
-4930 days
Posts Archive
iOS Dev
7 882
Полное руководство по архитектуре VIPER 📖 В материале с таким названием предлагается узнать, как писать масштабируемый код с
Полное руководство по архитектуре VIPER 📖 В материале с таким названием предлагается узнать, как писать масштабируемый код с использованием VIPER и некоторыми приемами из других архитектур. Я согласен с автором по многим пунктам. 🧐 Во-первых, НЕ стоит думать, что VIPER — это плохо потому, что кто-то неправильно им воспользовался. MVP хорош для приложения с небольшим объёмом экранов, и я согласен с тем, что не следует использовать VIPER для таких приложений. 🤔 Проблемы могут начаться, когда в приложение попадает все больше компонентов. И вот тут стоит задуматься, а точно ли всё хорошо? Если в ваших планах небольшое приложение, можно начать с MVC. Позже можно решить проблему массивных контроллеров с помощью MVVM, также подойдет MVP или паттерн координатора. Автор заверяет, что плохой архитектуры не бывает. Есть плохой выбор, который приводит нас к сложной кодовой базе. 🛠Чтобы писать по-настоящему масштабируемые приложения, можно познакомиться с VIPER с конструктором модулей = VIPER(B).

iOS Dev
7 882
Воскресный лайтовый пост Для тех, кто придет сегодня на день открытых дверей в Developer Center на #WWDC22, уже приготовлены
Воскресный лайтовый пост Для тех, кто придет сегодня на день открытых дверей в Developer Center на #WWDC22, уже приготовлены кофе и пончики от Caffè Macs 😋 ☺️ Приготовьте нам новую iOS, пожалуйста!

iOS Dev
7 882
Туториал по custom transitions в iOS. Прокачиваем стандартные push, pop и modal 📖 В этом руководстве вы узнаете, как заменит
Туториал по custom transitions в iOS. Прокачиваем стандартные push, pop и modal 📖 В этом руководстве вы узнаете, как заменить push, pop и modal анимации пользовательскими переходами. 🛠Примеры кода находится в репозитории, в нем вы найдете возможности замены стандартных анимаций навигации push & pop на собственные. Также автор реализовал кастомную модальную анимацию, в которой используются интерактивные переходы. 😉 Очевидно, что есть много разных возможностей, но в этой статье даётся понимание, с чего начать.

iOS Dev
7 882
Генерация кода запроса с помощью Postman за 10 секунд 😎 Уверен, что многие разработчики использовали Postman для тестировани
Генерация кода запроса с помощью Postman за 10 секунд 😎 Уверен, что многие разработчики использовали Postman для тестирования своих запросов, да и вообще для проверки того, что API работает. Так вот, знали ли вы о возможности генерить код запроса, в том числе для Swift, прямо из приложения? 🛠 Если вам лень, то вы можете нажать на кнопку Code, и в выпадающем списке выбрать нужный язык, в нашем случае — Swift.

iOS Dev
7 882
Почисти Derived Data. 🤔 Часто слышали/говорили эту фразу? Удаление Derived Data — известный способ, о котором мы вспоминаем,
Почисти Derived Data. 🤔 Часто слышали/говорили эту фразу? Удаление Derived Data — известный способ, о котором мы вспоминаем, когда Xcode ведет себя странно. 📖 Автор статьи до сих пор помнит, как ему в первый раз рассказали об этом трюке. И хотя DerivedData может меняться с каждой версией Xcode, почему бы не уделить пару минут и не почитать, что там внутри? Я решил пойти дальше, и посмотреть, к чему приводит игнорирование особенностей DerivedData. Здесь рассказывается о сложностях при работе с Jenkins CI server, запущенным как Launch Daemon. Практический совет на будущее — регулярно чистить DerivedData Xcode на CI-сервере. 📺 Хотите копнуть глубже? Есть годное видео с WWDC 2018, которое объясняет, что происходит за кулисами в процессе сборки.

iOS Dev
7 882
Как симулировать изменение местоположения в реальном времени с помощью Xcode? 😎Автор этого туториала работал в Porsche, а большую часть своего времени посвящал работе над новым навигационным SDK. Для успешной разработки SDK нужен был способ имитации изменения местоположения пользователя. В частности, в компании хотели оценить производительность различных навигационных алгоритмов, тестируя их на одном и том же наборе обновлений местоположения. 💻 К счастью, мы можем легко воспроизвести обновления местоположения, используя файлы .gpx в Xcode. Файл .gpx, по сути, представляет собой отображение точек GPS во времени, а указание метки времени для каждой GPS-координаты позволяет имитировать ходьбу, езду на велосипеде или вождение автомобиля по шоссе. ℹ️ Кстати! Если захотите сделать собственный кастомный путь, то можно воспользоваться этим сайтом.

iOS Dev
7 882
Генерация собственного QR-кода (и не только) в Swift 📖 Давайте посмотрим, как мы можем использовать собственный код Swift дл
Генерация собственного QR-кода (и не только) в Swift 📖 Давайте посмотрим, как мы можем использовать собственный код Swift для создания различных типов штрихкодов и QR-кодов. Вам не нужны сторонние библиотеки, которые могли бы поддерживать эту функциональность, ведь вы можете создавать самые разные типы QR и штрих-кодов сами, используя родной Swift 😉. В рамках этого туториала приводятся примеры генерации для: 1️⃣ Aztec Barcode. 2️⃣ QRCode. 3️⃣ PDF417. 4️⃣ Code128.

iOS Dev
7 882
Пример создания приложения Todo list для iOS с использованием VIPER 🤔 Решение о том, какую архитектуру приложения использова
Пример создания приложения Todo list для iOS с использованием VIPER 🤔 Решение о том, какую архитектуру приложения использовать при создании iOS-приложения, является одной из самых сложных задач. Существует множество архитектур на выбор: MVC, MVVM, MVP, View State, VIPER и многие другие. Архитектура, которую мы выберем, будет определять, как будет построено программное обеспечение и как оно будет масштабироваться по мере роста. 📖 Одной из архитектур, о которой идёт речь в этой статье, является архитектура VIPER. VIPER разделяет структуру приложения на компоненты внутри модуля/экрана с принципом единой ответственности. Благодаря этому приложение становится более модульным и менее связанным с другими компонентами. 👌 Юнит-тестирование и интеграционное тестирование становятся намного проще из-за границ (протокол/интерфейс) между каждым компонентом. 🛠 Вот тут доступен код приложения, если вы предпочитаете сразу перейти к самому интересному.

iOS Dev
7 882
А ещё на странице мероприятия доступно открытие паков с карточками в дополненной реальности. 🤗 Каждая карточка это Memoji с разработчиком, генерятся случайно. 😉 Чтобы открыть пак, перейдите по ссылке с мобильного телефона и используйте двойное нажатие по картинке.

iOS Dev
7 882
Открыта запись в Digital Lounges! 🤩 Кроме анонса WWDC, компания Apple открыла регистрацию в Digital Lounges. Они предназначе
Открыта запись в Digital Lounges! 🤩 Кроме анонса WWDC, компания Apple открыла регистрацию в Digital Lounges. Они предназначены для того, чтобы разработчики могли напрямую общаться с инженерами и дизайнерами Apple для получения рекомендаций. ✍️ Участники программы Apple Developer Program и победители конкурса Swift Student Challenge 2022 могут зарегистрироваться в Digital Lounges на сайте WWDC или в приложении Apple Developer.

iOS Dev
7 882
Apple продолжает подготовку к WWDC, которая должна начаться в понедельник 💻 Cегодня компания запустила прямую трансляцию на
Apple продолжает подготовку к WWDC, которая должна начаться в понедельник 💻 Cегодня компания запустила прямую трансляцию на YouTube, где зрители могут зарегистрироваться, чтобы получить напоминание о начале мероприятия. 🌐 Стрим также можно будет найти на этой странице. 🗓 Напоминаю дату начала: 6 июня, в 20:00 по московскому времени.

iOS Dev
7 882
Повышаем рейтинг приложений с помощью SKStoreReviewController 💪 📖 В статье автор напоминает правила для показа системного а
Повышаем рейтинг приложений с помощью SKStoreReviewController 💪 📖 В статье автор напоминает правила для показа системного алерта: — Запрос на оценку будет показан пользователю не более трех раз в течение 365 дней. — Невозможно узнать, появился ли запрос на оценку. — Мы не узнаем выбор пользователя (нажал или скипнул). 💡Это, конечно, неприятно. Но вместе с тем рассматривается важность подобных оценок и отзывов, и приводится один из примеров нужных таймингов: — Просим оценить только тех, кто установил приложение более 7 дней назад. — Запрашивайте оценку 1 раз для каждой версии. — У пользователя должно быть минимальное количество сессий. — Нужно определить, что пользователь попробовал целевые функции перед оценкой. Кроме этого, автор показывает пример нужного конфига. 🛠 И не забывает напомнить нам, что для отзыва пользователь может и перейти по ссылке: "https://apps.apple.com/app/idXXXXXXXXXX?action=write-review" Здесь XXXXXXXXXX — айди нашего приложения в сторе.

iOS Dev
7 882
Перебор элементов и индексов в коллекциях Swift 🤔Автор считает, что enumerated() для получения элементов и индексов не самый
Перебор элементов и индексов в коллекциях Swift 🤔Автор считает, что enumerated() для получения элементов и индексов не самый правильный способ и предлагает альтернативу. Интовое значение через enumerated() не должно использоваться в качестве индекса, если только коллекция не zero-based и не индексирована целыми числами. Это счетчик, который всегда начинается с нуля. 🧑‍💻 Для перебора элементов и индексов можно использовать функцию zip(). // Array<String> var ingredients = ["potatoes", "cheese", "cream"] // Array<String>.SubSequence var doubleIngredients = ingredients.dropFirst() for (i, ingredient) in zip( doubleIngredients.indices, doubleIngredients ) { // do something with the index doubleIngredients[i] = "\(ingredient) x 2" } Мы можем отказаться от enumerated() и подсчитывать элементы с помощью функции zip(). Это можно использовать для продвинутого контроля, начинаем ли мы считать с 0 или с 1. 📖 Кстати! В этой статье можно почитать, как использовать zip для объединения двух массивов.

iOS Dev
7 882
Бинго для WWDC 2022 6 июня 📺 Осталась неделя до Worldwide Developers Conference (он же даб-даб ди си, она же даб-даб). В инт
Бинго для WWDC 2022 6 июня 📺 Осталась неделя до Worldwide Developers Conference (он же даб-даб ди си, она же даб-даб). В интернете на сегодняшний день собралось довольно много слухов и рациональных предположений. 😎 А чтобы наблюдать за событием 6 июня было интереснее, предлагаю вашему вниманию бинго с тем, что мы можем услышать или увидеть. 📔 Сохраните себе, вдруг пригодится!

iOS Dev
7 882
Как повысить энергоэффективность приложения, если у вас много таймеров, но не все они критичны? Добавление порога допуска тай
Как повысить энергоэффективность приложения, если у вас много таймеров, но не все они критичны? Добавление порога допуска таймера — это простой способ снизить его энергопотребление. Это позволяет задать некоторую свободу действий для системы при выполнении таймера в случаях, если вы можете сказать: "Я бы хотел, чтобы это выполнялось раз в секунду, но если это произойдет на 200 миллисекунд позже, то в целом тоже норм". 🧐 Это позволяет системе выполнять timer coalescing (если попроще, то что-то вроде объединения), когда несколько событий таймера собираются вместе для экономии заряда батареи. Например, если вы просите запустить таймер через 1 секунду с допуском 0,5 секунды, он может быть запущен через 1 секунду, 1,5 секунды, 1,3 секунды и так далее. При этом таймер никогда не будет запущен раньше — допуск добавляет время после запрошенной даты выполнения. 🛠 Пример кода создает таймер, который будет запускаться с допуском в 0,2 сек.

iOS Dev
7 882
Туториал для начинаюших по Bezier Paths и Shape Layers Существуют разные способы и разные подходы к тому, как нарисовать "экр
Туториал для начинаюших по Bezier Paths и Shape Layers Существуют разные способы и разные подходы к тому, как нарисовать "экран" приложения: — Использовать полученную графику от дизайнеров. — Реализовать UI в коде. — Использовать Interface Builder. — Комбинации способов выше и другие варианты. 🛠Однако иногда компоненты нужно создать программно, и тогда могут возникнуть сложности. ℹ️ Этих проблем можно избежать, используя класс UIBezierPath, который необходим для создания векторных контуров. С его помощью можно создавать и простые фигуры, например прямоугольники, квадраты, овалы и круги, и очень сложные, добавляя прямые и изогнутые линии для набора точек. 📖 В этой статье предлагается практическое руководство по созданию Bezier Paths. Автор рассматривает серию небольших, но понятных примеров, и знакомит нас с обеими концепциями. 😉 Как говорится, от простого к сложному, шаг за шагом!

iOS Dev
7 882
Xcode поставляется со своей версией Swift, и мы всегда можем обратиться к этому списку. Иногда бывает ситуация, когда обновля
Xcode поставляется со своей версией Swift, и мы всегда можем обратиться к этому списку. Иногда бывает ситуация, когда обновлять Swift для своего проекта не лучший вариант в текущий момент. Для более старой версии Swift, можно сделать следующее: 1️⃣ Проверьте версию Swift: xcrun swift --version 2️⃣ Узнайте местонахождение: xcrun -f swift 3️⃣ Установите альтернативный набор инструментов Swift, если требуется: — На этом ресурсе можно скачать нужный вариант. Установите его, он будет располагаться тут: /Library/Developer/Toolchains — Проверьте идентификатор: cat /Library/Developer/Toolchains/swift-5.5-RELEASE.xctoolchain/Info.plist Например, CFBundleIdentifier для org.swift.550202109201a — С идентификатором теперь можно выбирать, какой нужен набор инструментов: xcodebuild -toolchain org.swift.550202109201a xcrun -toolchain org.swift.550202109201a Как альтернатива, можно создать переменную окружения: export TOOLCHAINS=org.swift.550202109201a Для проверки, что всё сработало, используйте 1️⃣ и 2️⃣ шаги.

iOS Dev
7 882
Как найти свой путь в мир IT? За последнее время рынок IT изменился: многие специалисты уехали за границу и отечественный рын
Как найти свой путь в мир IT? За последнее время рынок IT изменился: многие специалисты уехали за границу и отечественный рынок активно занимается импортозамещением. Сейчас, как никогда востребована профессия iOS-разработчика! Но с чего начать свой путь? Как эффективнее изучать мобильную разработку? Рекомендуем начать с бесплатного вебинара «Профессия iOS-разработчик» от онлайн-школы SwiftBook. Вебинар пройдёт в прямом эфире, будет возможность задать интересующие вас вопросы и подробнее узнать о профессии. За регистрацию на вебинар получи: ➕ книгу «The Swift Programming Language» от Apple на русском ➕ экипировку iOS-разработчика Не упустите свой шанс! Регистрируйтесь сейчас ➤ https://clck.ru/jScVy

iOS Dev
7 882
Конфигурация кнопок в iOS 15: основные стили и возможности кастомизации. 📖 Написал статью про кастомизацию кнопок в iOS 15, возможно, вы откроете для себя что-то новое. Можно прочесть про основные стили, конфигурацию, а также, например, про то, как за 10 секунд добавить activityIndicator для кнопки.

iOS Dev
7 882
3 способа использования enum, которые должны быть в вашем арсенале 💪 Перечисление (enum) - это очень мощный тип в Swift. Каж
3 способа использования enum, которые должны быть в вашем арсенале 💪 Перечисление (enum) - это очень мощный тип в Swift. Каждый из нас использует его практически в каждом проекте. Сегодня я хотел бы поделиться некоторыми приемами работы с перечислениями в Swift, о которых могут знать не все. 🧐 Если у вас солидный бэкграунд, то вы будете в курсе, но освежить знания не помешает. В публикации рассматривается три блока: 1️⃣ Сложные случаи с привязкой значений. 2️⃣ Если нас интересуют конкретный кейс перечисления, то можно использовать if let и guard let. 3️⃣ Если связанное значение optional, то также можно использовать соответствующий шаблон. Это будет более понятно на конкретных примерах из статьи.