iOS разработчик, который делится фишками, своим опытом и опытом других.
В этом канале вы сможете найти истории из жизни, подходы к реализации а также новости и тренды из мира iOS-разработки
Авторский канал, iOS разработка
🚀 TradingView ищет iOS разработчика.Стек:
UIKit, SwiftUI, Combine, async-await, SPM, iOS 15+
Продукт:
Более 10 миллионов загрузок по всему миру. Наши решения используют Тинькофф, Forbes, Revolut, Interactive Brokers, S&P Global.
Место работы:
Офисы в Тбилиси, Санкт-Петербурге и Ростове-на-Дону, помощь с релокейтом
👉 Если у тебя 2+ лет опыта пиши @janemanolis
😃 iOS Dev
Пример создания музыкального плеера с использование MusicKit и Apple Music API
🎹 Если вы задумывались, как управлять воспроизведением мультимедиа с помощью MediaPlayer, то следующий материал точно пригодится.
📖 В этой статье приводится пример создания приложения на базе API Apple Music.
🛠 Финальный проект на github.
😃 iOS Dev
Реализация «написанной от руки» анимации с использованием svg, path и контрольных точек
На гифке вы можете увидеть практически культовую анимацию слова Hello, показанную на презентации Apple Spring 2020.
К сожалению, SwiftUI не имеет встроенной функции для достижения этого эффекта, поэтому для её воссоздания всё придётся делать с нуля.
📖 В этом материале автор рассказывает о своём опыте повторения такой анимации с помощью конвертации svg в SwiftUI и о необходимых преобразованиях.
🛠 А вот тут есть рабочий пример.
😃 iOS Dev
Итоги конкурса Технотекст - 2022 на хабре!
Наконец-то подвели итоги конкурса технических статей за прошлый год.
Я рад, что попробовал свои силы и пусть не удалось получить наивысший балл по сумме, но всё-таки🥉 место — отличный результат.
Приятно, что жюри оценило насыщенность техническим фишками и отсутствие «воды» (и по этому критерию показатель среди остальных статей максимальный).
Ну а победили две статьи в корпоративных блогах:
🏆По сумме баллов Yatagan и по техническим критериям Kotlin Symbol Processing.
Опенсорсные продукты это большая ответственность и высокая значимость для сообщества, поэтому такие статьи заслуживают высоких результатов.
📖 Все итоги доступны тут, а сам протокол с оценками здесь.
😃 iOS Dev
Настройка различных Launch Screen на основе схемы URL
⏳Основная цель добавления лончскрина — сократить время ожидания пользователя, показывая «часть интерфейса» во время загрузки приложения.
Но что делать, если ваше приложение поддерживает deep links, а первый экран изменяется на основе схемы URL?
При таких условиях важно определить, какой экран следует показывать.
📖 В этой статье объясняется, как корректно добавлять и изменять ключи UILaunchScreens в зависимости от заданных условий.
Кстати, есть несколько базовых советов для ускорения запуска приложения.
👩🎓 А если хотите узнать, чем различается холодный и теплый запуски приложения, то можно обратить внимание и наэтот пост.
😃 iOS Dev
💥 Реализация анимации отклеивания для повторения эффекта в приложении Messages
Один из крутых и необычных эффектов в «Сообщения» — анимация отклеивания, которую можно увидеть при отправке стикера.
Если внимательно посмотреть, можно различить несколько отдельных анимаций, которые сливаются воедино:
1️⃣ Стикер деформируется и «приближается к камере», начиная с верхней и продвигаясь к нижней части стикера.
2️⃣ По поверхности стикера проходит блик, усиливая эффект деформации и заставляя нас поверить, что частично деформированный стикер отражает невидимый источник света.
3️⃣ При «сгибе» стикера можно увидеть рассеянное отражение того, что облегчает пользователю понимание происходящего.
🧐 Robb Böhnke решил поискать способы для повторения этой необычной анимации (не обязательно с точностью до пикселя).
📖 В этом постеон делится, как воссоздать эту анимацию в SceneKit и как интегрировать ее в обычное приложение на UIKit.
🛠 А вот здесь даже есть рабочий пример кода. Только обратите внимание, что на симуляторе не запустится, так как используются кастомные модификаторы шейдеров на Metal.
😃 iOS Dev
Как использовать юнит-тестирование при работе с async/await в Swift
Юнит-тесты можно использовать для проверки кода, написанного с использованием async/await.
Хотя их использование не сильно отличается от синхронных тестов, при проверке асинхронного кода необходимо понимать несколько важных концепций.
📖 В этом материале разбирается значение атрибутов @MainActor, предотвращение дедлоков XCTestExpectation и приводится пример использования await fulfillment.
📖 Также рекомендую вместе с этим материалом ознакомиться и с официальной документацией.
😃 iOS Dev
Ресурс с информацией о текущем времени проверки в App Store и TestFlight
🌐 На этом сайте доступно текущее среднее время проверки iOS, время проверки бета-версии TestFlight и время обработки сборки.
До 2019 года был и другой сайт с похожей функциональностью, но поскольку время проверки сократилось с недель до дней (или даже дня), Дэйв Вервер принял решение о прекращении поддержки.
Одно заметное отличие этой новой страницы заключается в том, что она основана на фактических данных о времени последних обзоров приложений.
Кроме того, здесь есть данные и о проверке билдов для TestFlight, а также о build processing, которыми раньше не делились.
😃 iOS Dev
✅️ Xcode больше не работает с помощью Rosetta? Есть решение, о котором не написали в Release Notes
Как и ожидалось ранее, Apple отключила возможность запуска Xcode с использованием Rosetta в версии 14.3 (больше не работает опция с проставлением галочки в настройках), небольшое видео для ввода в курс дела.
В своих Release Notes они писали о грядущем изменении в разделе deprecations:
Xcode isn’t supported under Rosetta. See Developer Technote “Resolving architecture build errors on Apple silicon“ for more information. (92772361)
После чего сразу же последовал целый ряд статейкак всё очень плохо про остановку поддержки и собственно, что теперь остаётся только переходить на SPM.
К счастью, есть одна фича, не указанная в тех самых release notes, которая пока что ещё позволит нам использовать нужные pods (и другие либы) даже в Xcode 14.3.
Для этого нужно всего лишь использовать:
Product -> Destination -> Destination Architectures -> Show Rosetta Destinations.
😃 iOS Dev — делюсь рабочими способами 😎
C++ Easy Offer — это шанс за один день получить оффер от «Лаборатории Касперского»🔥
Есть коммерческий опыт работы С++ разработчика от 3 лет? Тогда заполняй форму по ссылке до 20 апреля, жди звонка от рекрутера и приходи знакомиться с командами уже 22 апреля.
Над чем поработаете в командах:
🔘 Next Generation Firewall — решение для защиты сетей (программно-аппаратные и виртуальные исполнения), при работе с которыми в технологическом стеке используем С++20 и собственные технологии безопасности.
🔘 Kaspersky Endpoint Security для Linux — приложение для комплексной защиты от киберугроз рабочих станций и серверов под управлением операционной системы Linux.
🔘 Kaspersky Secure Mail Gateway для Linux — продукт, осуществляющий комплексную защиту серверов электронной почты от различных угроз: спам, фишинг и другие виды вредоносных вложений.
🔘 Kaspersky Endpoint Security для iOS и Android — B2B-решение для управления парком мобильных устройств компании.
Работа над крутыми проектами — далеко не все, что предлагает компания. У тебя будут ДМС со стоматологией, спортзалы прямо в офисе и другие приятные бонусы.
Регистрируйтесь и получайте оффер без долгих собеседований!
😃 iOS Dev
Контекстное меню для таблиц в iOS 16
Apple добавила контекстные меню еще в iOS 13.
То, как пользователь видит меню, зависит от платформы:
🔘 Жест касания и удержания (длительное нажатие) на iOS.
🔘 Клик мышкой, удерживая нажатой клавишу Control, в macOS.
🔘 Правый клик на трекпаде в macOS или iPadOS.
В iOS 16 Apple появился новый вариант контекстного меню, которое работает работает только при добавлении в контейнер, например, в таблицу или список.
📖 В этом несложном примере рассказывается, как работать с таким меню, в том числе и в режиме редактирования.
📖 А вот в этом посте я рассказывал, как добавить такое меню для кнопки в UIKit буквально парой строк.
😃 iOS Dev
Простой способ найти все вызовы метода в вашем проекте
Часто нам требуется узнать, где именно в коде вызывается тот или иной метод.
Для этого можно попробовать воспользоваться поиском, а можно использовать следующие опции:
1️⃣ Выделите код. Нажмите Find -> Find Call Hierarchy.
2️⃣ При поиске названия метода выберите фильтр: Call Hierarchy.
3️⃣ После выделения названия метода используете комбинацию клавиш: ⌘ + ⌃ + ⇧ + H, они же: CMD + Ctrl + Shift + H.
😃 iOS Dev
Необычный эффект на основе значения освещённости
🤩 Alex Widua создал прототип, достигнутый путем эмуляции внешней освещенности устройства и частичного затемнения пользовательского интерфейса.
К сожалению, ему не удалось получить разрешения от SensorKit , в чём он честно признался, зато код на базе данных EXIF от камеры можно использовать для приблизительного значения.
🛠 Вот тут лежит код для этого эффекта, а в качестве бонуса ещё и приложение для воссоздания «блестящей кнопки» (тоже на основе камеры).
😃 iOS Dev
Три частые ошибки при работе с Optionals
📖 В этом материале Винсент расскажет о 3 ошибках, которые нужно избегать при работе с опциональными значениями и разбирает:
1️⃣ В чём разница между «?» и «!» при использовании в коде.
2️⃣ О важности использовать optional binding.
3️⃣ Излишнее использование опциональных значений там, где это не нужно.
😃 iOS Dev
StackOverflow тонет или почему Google ломает интернетИ почему всё это очень плохо
В течение восьми последних лет на самом популярном сайте для поиска причин/симптомов/решений для программистов наблюдается уменьшение количества сообщений в целом.
С 2014 года сообщений стало меньше в два раза, вместо 140k -> 70k. Кроме этого, существует очень плохая тенденция, что количество вопросов уже превышает количество ответов.
В последнее время доминирующая причина этого — стойкая вера наших коллег и начинающих разработчиков в то, что нейросети знают всё. Но на самом деле, эти нейросети только собирают факты по ключевым словам и комбинируют их на выходе, и далеко не всегда правильно.
Но не это ключевой фактор
Несмотря на бан использования ChatGPT на самом StackOverflow, они не могут повлиять на количество входящего трафика от крупнейшего поисковика Google при использовании нейросетей.
В первую очередь людям нужны ответы. При этом не важен источник этих самых знаний.
И, например, сам бот на сайте общения не предоставляет никаких ключевых ссылок на источники. Да и решение Bing минует основной источник и, что более важно, самих авторов контента. Ведь тут всё просто:
Авторы создают контент -> прокачивают его видимость -> Google показывает рекламу у себя + авторы получают отдачу в виде денег (ну или альтруистической обратной связи). Казалось бы, win-win для обеих сторон, вот только появляется но.
С появлением нейросетей авторство, как вы понимаете, становится никому не интересно.
Это означает очень простую вещь, создавая контент или в примере с ответами на StackOverflow нейросети просто парсят это всё в датасет и авторы отходят на второй план.
Получается, что крупнейший ресурс лишается основного источника дохода - рекламы на сайте. И даже не нужно складывать пазл до конца для осознания того, что это приведёт к тому, что вместо ответа на свой уникальный вопрос пользователи будут обращаться к нейросети, у которой, как вы понимаете, база ограничена.
И если авторы вопросов (или программистских блогов с разборами) не будут видеть, что их решениями пользуются, то дальшейшее развитие ситуация предсказуемо.
Они перестанут отвечать на вопросы. Перестанут разбирать сложные вещи.
Можно ли что-то сделать?
Да, добавить источники цитирования. Возможно, реализовать в ответах блок с референсами. Наверняка, существуют и другие решения.
Но что случится с хвалёным вау-эффектом от нейросетей, когда окажется, что это лишь поисковик на стероидах?
😃 iOS Dev