iOS Dev
Open in Telegram
👨💻Автор: Виктор Грушевский (@Viktorianec) ⚒️ База: https://boosty.to/ios_dev | 🤖 @iOSIQBot | https://iosiq.ru 🍏Канал об iOS-разработке, алгоритмах и архитектурах ⭐️ Подготовка к собесам ⭐️ Код. Много кода. #ios #mobile #swift
Show more7 879
Subscribers
-124 hours
-77 days
-4930 days
Posts Archive
7 882
Полное руководство по архитектуре VIPER
📖 В материале с таким названием предлагается узнать, как писать масштабируемый код с использованием VIPER и некоторыми приемами из других архитектур.
Я согласен с автором по многим пунктам.
🧐 Во-первых, НЕ стоит думать, что VIPER — это плохо потому, что кто-то неправильно им воспользовался. MVP хорош для приложения с небольшим объёмом экранов, и я согласен с тем, что не следует использовать VIPER для таких приложений.
🤔 Проблемы могут начаться, когда в приложение попадает все больше компонентов. И вот тут стоит задуматься, а точно ли всё хорошо?
Если в ваших планах небольшое приложение, можно начать с MVC. Позже можно решить проблему массивных контроллеров с помощью MVVM, также подойдет MVP или паттерн координатора.
Автор заверяет, что плохой архитектуры не бывает. Есть плохой выбор, который приводит нас к сложной кодовой базе.
🛠Чтобы писать по-настоящему масштабируемые приложения, можно познакомиться с VIPER с конструктором модулей = VIPER(B).
7 882
Воскресный лайтовый пост
Для тех, кто придет сегодня на день открытых дверей в Developer Center на #WWDC22, уже приготовлены кофе и пончики от Caffè Macs 😋
☺️ Приготовьте нам новую iOS, пожалуйста!
7 882
Туториал по custom transitions в iOS. Прокачиваем стандартные push, pop и modal
📖 В этом руководстве вы узнаете, как заменить push, pop и modal анимации пользовательскими переходами.
🛠Примеры кода находится в репозитории, в нем вы найдете возможности замены стандартных анимаций навигации push & pop на собственные.
Также автор реализовал кастомную модальную анимацию, в которой используются интерактивные переходы.
😉 Очевидно, что есть много разных возможностей, но в этой статье даётся понимание, с чего начать.
7 882
Генерация кода запроса с помощью Postman за 10 секунд
😎 Уверен, что многие разработчики использовали Postman для тестирования своих запросов, да и вообще для проверки того, что API работает. Так вот, знали ли вы о возможности генерить код запроса, в том числе для Swift, прямо из приложения?
🛠 Если вам лень, то вы можете нажать на кнопку Code, и в выпадающем списке выбрать нужный язык, в нашем случае — Swift.
7 882
Почисти Derived Data.
🤔 Часто слышали/говорили эту фразу?
Удаление Derived Data — известный способ, о котором мы вспоминаем, когда Xcode ведет себя странно.
📖 Автор статьи до сих пор помнит, как ему в первый раз рассказали об этом трюке. И хотя DerivedData может меняться с каждой версией Xcode, почему бы не уделить пару минут и не почитать, что там внутри?
Я решил пойти дальше, и посмотреть, к чему приводит игнорирование особенностей DerivedData.
Здесь рассказывается о сложностях при работе с Jenkins CI server, запущенным как Launch Daemon.
Практический совет на будущее — регулярно чистить DerivedData Xcode на CI-сервере.
📺 Хотите копнуть глубже? Есть годное видео с WWDC 2018, которое объясняет, что происходит за кулисами в процессе сборки.
7 882
Как симулировать изменение местоположения в реальном времени с помощью Xcode?
😎Автор этого туториала работал в Porsche, а большую часть своего времени посвящал работе над новым навигационным SDK.
Для успешной разработки SDK нужен был способ имитации изменения местоположения пользователя. В частности, в компании хотели оценить производительность различных навигационных алгоритмов, тестируя их на одном и том же наборе обновлений местоположения.
💻 К счастью, мы можем легко воспроизвести обновления местоположения, используя файлы
.gpx в Xcode. Файл .gpx, по сути, представляет собой отображение точек GPS во времени, а указание метки времени для каждой GPS-координаты позволяет имитировать ходьбу, езду на велосипеде или вождение автомобиля по шоссе.
ℹ️ Кстати! Если захотите сделать собственный кастомный путь, то можно воспользоваться этим сайтом.7 882
Генерация собственного QR-кода (и не только) в Swift
📖 Давайте посмотрим, как мы можем использовать собственный код Swift для создания различных типов штрихкодов и QR-кодов.
Вам не нужны сторонние библиотеки, которые могли бы поддерживать эту функциональность, ведь вы можете создавать самые разные типы QR и штрих-кодов сами, используя родной Swift 😉.
В рамках этого туториала приводятся примеры генерации для:
1️⃣ Aztec Barcode.
2️⃣ QRCode.
3️⃣ PDF417.
4️⃣ Code128.
7 882
Пример создания приложения Todo list для iOS с использованием VIPER
🤔 Решение о том, какую архитектуру приложения использовать при создании iOS-приложения, является одной из самых сложных задач. Существует множество архитектур на выбор: MVC, MVVM, MVP, View State, VIPER и многие другие.
Архитектура, которую мы выберем, будет определять, как будет построено программное обеспечение и как оно будет масштабироваться по мере роста.
📖 Одной из архитектур, о которой идёт речь в этой статье, является архитектура VIPER.
VIPER разделяет структуру приложения на компоненты внутри модуля/экрана с принципом единой ответственности.
Благодаря этому приложение становится более модульным и менее связанным с другими компонентами.
👌 Юнит-тестирование и интеграционное тестирование становятся намного проще из-за границ (протокол/интерфейс) между каждым компонентом.
🛠 Вот тут доступен код приложения, если вы предпочитаете сразу перейти к самому интересному.
7 882
Открыта запись в Digital Lounges!
🤩 Кроме анонса WWDC, компания Apple открыла регистрацию в Digital Lounges.
Они предназначены для того, чтобы разработчики могли напрямую общаться с инженерами и дизайнерами Apple для получения рекомендаций.
✍️ Участники программы Apple Developer Program и победители конкурса Swift Student Challenge 2022 могут зарегистрироваться в Digital Lounges на сайте WWDC или в приложении Apple Developer.
7 882
Apple продолжает подготовку к WWDC, которая должна начаться в понедельник
💻 Cегодня компания запустила прямую трансляцию на YouTube, где зрители могут зарегистрироваться, чтобы получить напоминание о начале мероприятия.
🌐 Стрим также можно будет найти на этой странице.
🗓 Напоминаю дату начала: 6 июня, в 20:00 по московскому времени.
7 882
Повышаем рейтинг приложений с помощью SKStoreReviewController 💪
📖 В статье автор напоминает правила для показа системного алерта:
— Запрос на оценку будет показан пользователю не более трех раз в течение 365 дней.
— Невозможно узнать, появился ли запрос на оценку.
— Мы не узнаем выбор пользователя (нажал или скипнул).
💡Это, конечно, неприятно. Но вместе с тем рассматривается важность подобных оценок и отзывов, и приводится один из примеров нужных таймингов:
— Просим оценить только тех, кто установил приложение более 7 дней назад.
— Запрашивайте оценку 1 раз для каждой версии.
— У пользователя должно быть минимальное количество сессий.
— Нужно определить, что пользователь попробовал целевые функции перед оценкой.
Кроме этого, автор показывает пример нужного конфига.
🛠 И не забывает напомнить нам, что для отзыва пользователь может и перейти по ссылке:
"https://apps.apple.com/app/idXXXXXXXXXX?action=write-review"
Здесь XXXXXXXXXX — айди нашего приложения в сторе.7 882
Перебор элементов и индексов в коллекциях 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 для объединения двух массивов.7 882
Бинго для WWDC 2022 6 июня
📺 Осталась неделя до Worldwide Developers Conference (он же даб-даб ди си, она же даб-даб).
В интернете на сегодняшний день собралось довольно много слухов и рациональных предположений.
😎 А чтобы наблюдать за событием 6 июня было интереснее, предлагаю вашему вниманию бинго с тем, что мы можем услышать или увидеть.
📔 Сохраните себе, вдруг пригодится!
7 882
Как повысить энергоэффективность приложения, если у вас много таймеров, но не все они критичны?
Добавление порога допуска таймера — это простой способ снизить его энергопотребление. Это позволяет задать некоторую свободу действий для системы при выполнении таймера в случаях, если вы можете сказать:
"Я бы хотел, чтобы это выполнялось раз в секунду, но если это произойдет на 200 миллисекунд позже, то в целом тоже норм".
🧐 Это позволяет системе выполнять timer coalescing (если попроще, то что-то вроде объединения), когда несколько событий таймера собираются вместе для экономии заряда батареи.
Например, если вы просите запустить таймер через 1 секунду с допуском 0,5 секунды, он может быть запущен через 1 секунду, 1,5 секунды, 1,3 секунды и так далее.
При этом таймер никогда не будет запущен раньше — допуск добавляет время после запрошенной даты выполнения.
🛠 Пример кода создает таймер, который будет запускаться с допуском в 0,2 сек.
7 882
Туториал для начинаюших по Bezier Paths и Shape Layers
Существуют разные способы и разные подходы к тому, как нарисовать "экран" приложения:
— Использовать полученную графику от дизайнеров.
— Реализовать UI в коде.
— Использовать Interface Builder.
— Комбинации способов выше и другие варианты.
🛠Однако иногда компоненты нужно создать программно, и тогда могут возникнуть сложности.
ℹ️ Этих проблем можно избежать, используя класс
UIBezierPath, который необходим для создания векторных контуров. С его помощью можно создавать и простые фигуры, например прямоугольники, квадраты, овалы и круги, и очень сложные, добавляя прямые и изогнутые линии для набора точек.
📖 В этой статье предлагается практическое руководство по созданию Bezier Paths. Автор рассматривает серию небольших, но понятных примеров, и знакомит нас с обеими концепциями.
😉 Как говорится, от простого к сложному, шаг за шагом!7 882
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️⃣ шаги.7 882
Как найти свой путь в мир IT?
За последнее время рынок IT изменился: многие специалисты уехали за границу и отечественный рынок активно занимается импортозамещением.
Сейчас, как никогда востребована профессия iOS-разработчика! Но с чего начать свой путь? Как эффективнее изучать мобильную разработку?
Рекомендуем начать с бесплатного вебинара «Профессия iOS-разработчик» от онлайн-школы SwiftBook.
Вебинар пройдёт в прямом эфире, будет возможность задать интересующие вас вопросы и подробнее узнать о профессии.
За регистрацию на вебинар получи:
➕ книгу «The Swift Programming Language» от Apple на русском
➕ экипировку iOS-разработчика
Не упустите свой шанс! Регистрируйтесь сейчас ➤ https://clck.ru/jScVy
7 882
Конфигурация кнопок в iOS 15: основные стили и возможности кастомизации.
📖 Написал статью про кастомизацию кнопок в iOS 15, возможно, вы откроете для себя что-то новое.
Можно прочесть про основные стили, конфигурацию, а также, например, про то, как за 10 секунд добавить activityIndicator для кнопки.
7 882
3 способа использования enum, которые должны быть в вашем арсенале
💪 Перечисление (enum) - это очень мощный тип в Swift. Каждый из нас использует его практически в каждом проекте.
Сегодня я хотел бы поделиться некоторыми приемами работы с перечислениями в Swift, о которых могут знать не все.
🧐 Если у вас солидный бэкграунд, то вы будете в курсе, но освежить знания не помешает.
В публикации рассматривается три блока:
1️⃣ Сложные случаи с привязкой значений.
2️⃣ Если нас интересуют конкретный кейс перечисления, то можно использовать
if let и guard let.
3️⃣ Если связанное значение optional, то также можно использовать соответствующий шаблон. Это будет более понятно на конкретных примерах из статьи.