Обновить
65.84

iOS *

Мобильная ОС компании Apple

Сначала показывать
Порог рейтинга
Уровень сложности

Выходим из тюрьмы Apple. Установка произвольных приложений на iOS без джейлбрейка

Время на прочтение5 мин
Охват и читатели242K


App Store — не единственный способ установки приложений для iOS. Раньше люди специально делали джейлбрейк, чтобы установить каталог Cydia. Но в последнее время появилось несколько сторонних каталогов, которые работают вообще без джейлбрейка. Удивительно, но Apple пока не ставит им палки в колёса.

Эти каталоги приносят реальную пользу, ведь здесь независимые разработчики свободно распространяют свои программы без комиссий и цензуры. Apple не может произвольно отзывать со смартфонов такие приложения. А люди получают более широкий выбор программ, включая эмуляторы Linux, независимость от производителя и реальное право владения.

Reactive Data Display Manager. История одного рефакторинга

Время на прочтение10 мин
Охват и читатели1.4K

Борясь с рутиной по конфигурации UITableView и UICollectionView, мы создали библиотеку RDDM. В её основе — адаптер, имплементирующий DataSource и Delegate, и генератор, соответствующий ячейке коллекции.

Библиотека дорабатывалась и становилась мощнее. Но чем больше мы вносили улучшений, тем больше понимали, что с архитектурой библиотеки что-то не так. Последней каплей стала попытка подружить RDDM с мощным UITableViewDiffableDataSource, которая завершилась провалом.

Настало время для рефакторинга.

Читать далее

Nivelir: Удобный DSL для навигации

Время на прочтение16 мин
Охват и читатели9.4K


Год назад мы пересмотрели свою реализацию роутинга в iOS-приложениях hh.ru. Тогда она больше походила на простой слой сборки экранов, чем на роутинг как таковой. Смирившись с этим печальным фактом, мы принялись исследовать тему навигации: пересмотрели много подходов в iOS, примерили каждое в песочнице нашего проекта и даже дошли до Cicerone из мира Android.


Взяв лучшее из всех изученных решений, мы переработали всё это дело в собственную реализацию, которая теперь идеально подходит под наши требования к навигации. Недавно мы начали выносить свои наработки в отдельный open-source проект — Nivelir. Эта статья поможет в нём разобраться и покажет, как устроен роутинг в наших проектах.

Читать дальше →

Взлом и внедрение своего кода в чужое iOS-приложение

Время на прочтение15 мин
Охват и читатели24K


В жизни хакеры не так всесильны и эффектны, как в голливудских фильмах. Но это не значит, что iOS-разработчик может вообще не думать о безопасности своего приложения. Пусть оно и не хранит тайны Пентагона, взломать его всё равно могут хотя бы для того, чтобы получить платные функции бесплатно.


На нашей конференции Mobius разработчик Мурад Татаев рассказывал о взломе iOS-приложений — и о том, что разработчики могут делать для защиты от него. А теперь мы расшифровали этот доклад (видеозапись также прилагаем). Далее повествование идёт от лица спикера.

Как настраивать диплинки: инструкция для Firebase, AppsFlyer и Facebook

Время на прочтение10 мин
Охват и читатели33K

На связи Алексей Поддубный, iOS-разработчик AGIMA. Я расскажу, как в iOS работают диплинки, и разберу тонкости настройки популярных сервисов: где создавать ссылки с динамическими параметрами, как настраивать конфигурацию приложений и что делать после настройки. Инструкции основаны на оригинальных туториалах, которые мы перевели и адаптировали.

Читать далее

Про многопоточность 1. Thread

Время на прочтение13 мин
Охват и читатели53K

Что такое эта ваша многопоточность и как с ней жить? Попробуем разобраться что за зверь pthread, зачем нужен RunLoop, какие примитивы синхронизации доступны в iOS разработке, а так же, какие проблемы за собой влечет многопоточность.

Читать далее

UI-тесты в iOS: укрощение строптивого

Время на прочтение25 мин
Охват и читатели19K

Если вы разработчик или автоматизатор, пишете нативные UI-тесты в iOS или думаете начать их писать, эта статья для вас.

Сегодня мы детально погрузимся в мир UI-тестов, потренируемся в их написании, рассмотрим, с какими проблемами разработчик может столкнуться в процессе покрытия приложения тестами, и предложим вам наши решения. Попробуем вместе с вами написать хороший UI-тест! )

Поехали!

Некоторые методы детектирования отладки iOS приложений

Время на прочтение3 мин
Охват и читатели2K

Изучение приложений на платформе iOS - это достаточно сложная задача, которая разрешима, если использовать правильный набор инструментов. Основа такого набора - устройство с установленным jailbreak и инструмент frida Frida.

Далее будет рассказано о нескольких способах детектирования инструмента frida из приложения. Заметим, что статья не преследует цели описания всех возможных подходов обнаружения frida, поскольку любая защита может быть снята: всё упирается во время, которое необходимо для анализа.

Читать далее

Дайджест интересных материалов для мобильного разработчика #405 (2 — 8 августа)

Время на прочтение3 мин
Охват и читатели2.9K
В новой подборке знакомимся с async/await и запускаем первые тесты, делаем первый аккорд в Jetpack Compose и сравниваем его со SwiftUI, участвуем в чемпионатах и решаем проблемы склада с помощью приложения. Все это и многое другое в нашем новом дайджесте!

Читать дальше →

Как сделать Swift-friendly API с Kotlin Multiplatform Mobile

Время на прочтение6 мин
Охват и читатели5.5K

Kotlin Multiplatform Mobile позволяет компилировать Kotlin код в нативные библиотеки для Android и iOS. И если в случае с Android полученная из Kotlin библиотека будет интегрироваться с приложением написанным на Kotlin, то для iOS интеграция будет с Swift и на стыке Kotlin и Swift, из-за разницы языков, происходит потеря удобства использования. В основном это связано с тем, что компилятор Kotlin/Native (который компилирует Kotlin в iOS framework и является частью Kotlin Multiplatform) генерирует публичное API фреймворка на ObjectiveC, а из Swift мы обращаемся к Kotlin за счет этого сгенерированного ObjectiveC API, так как Swift имеет интероп с ObjectiveC. Далее я покажу примеры ухудшения API на стыке Kotlin-Swift и покажу инструмент, который позволяет получить более удобное API для использования из Swift.

Читать далее

Диспетчеризация в main thread с помощью MainActor

Время на прочтение6 мин
Охват и читатели14K

MainActor — это новый атрибут из Swift 5.5, который представляет из себя глобальный актор, выполняющий свои задачи в главном потоке (main thread). При создании приложений очень важно следить за тем, чтобы задачи обновления UI выполнялись в главном потоке, что при использовании нескольких фоновых потоков (background threads) иногда может быть затруднительно. Использование атрибута @MainActor поможет вам гарантировать, что ваш UI всегда будет обновляться в главном потоке.

Если вы не очень хорошо разбираетесь в акторах (Actor) в Swift, я рекомендую прочитать мою статью Акторы в Swift: как их использовать и как предотвращать состояние гонки по данным. Глобальные акторы (Global actors) ведут себя аналогично обычным акторам, и в этой статье я не буду вдаваться в подробности того, как работают обычные акторы.

Читать далее

Диалоги подтверждения в SwiftUI

Время на прочтение4 мин
Охват и читатели2.8K

Третья версия SwiftUI принесла нам несколько модификаторов представления (view modifiers), которые позволяют нам одинаково обрабатывать семантически похожие операции для разных представлений. Например одним из таких модификаторов представления является onSubmit, который мы можем использовать для управления как формами, так и полями поиска (search fields). На этой неделе мы поговорим о другом модификаторе представления, который SwiftUI предоставляет нам для отображения диалоговых окон подтверждения (confirmationDialog).

Диалог подтверждения (confirmation dialog) — это очень распространенный шаблон UI/UX, который мы обычно используем для подтверждения любых опасных действий в наших приложениях. Например, мы можем выводить диалоговое окно подтверждения перед удалением каких-либо конфиденциальных данных из приложения.

Читать далее

Уязвимости в iOS

Время на прочтение5 мин
Охват и читатели9.5K

Операционные системы - это сложное, многоуровневое программное обеспечение. ОС отвечает за работу памяти, периферийных устройств и всего того, к чему привыкли пользователи. Без операционной системы управление любыми вычислительными устройствами может стать достаточно тяжелой задачей. Долгое время понятие полноценной ОС было ассоциировано с ОС Windows, Linux и другими проектами, которые привычно видеть на серверах и пользовательских рабочих местах. Сегодня же операционные системы шагнули дальше и они распространились и на мобильные устройства.

Одним из примеров таких ОС является семейство iOS, которое появились в результате синтеза IPhoneOS и ОС Darwin. iOS использует достаточно уникальный подход к обеспечению безопасности. Для того, чтобы гарантировать безопасность ОС, для нее разрабатываются устройства, содержащих большое количество механизмов защиты.

В статье будет рассказано о самых интересных уязвимостях операционной системы iOS за последние 3 года.

Уязвимости iOS

Ближайшие события

MBLT возвращается

Время на прочтение3 мин
Охват и читатели1.5K

Привет, Хабр! 

В 2022-м году пройдет 13-я Международная мобильная конференция MBLT+ для бизнеса и разработки. Сегодня мы расскажем, почему конференции MBLT и MBLT Dev являются знаковыми событиями в индустрии с 2012 года, и почему в 2022-м году ты должен быть там!

Читать далее

Знакомимся с async/await в Swift

Время на прочтение9 мин
Охват и читатели35K

Один из самых ожидаемых релизов на WWDC 21 - новая многопоточность в iOS среде.

Под катом разберемся, что это за зверь, как он работает и какие возможности предоставляет.

Читать далее

Дайджест интересных материалов для мобильного разработчика #404 (26 июля — 1 августа)

Время на прочтение3 мин
Охват и читатели2.6K
В этом дайджесте читайте про фоновые задачи в Android 12 и однократные замыкания в Swift, про первый стабильный релиз Jetpack Compose и ускорение я сборок, музыку для инди, различия в покупках на iOS и Android, форменный UX и многое другое!

Читать дальше →

Как мы ускорили разработку и тестирование мобильных приложений

Время на прочтение4 мин
Охват и читатели4.8K

Представим ситуацию: вы разрабатываете экран, до которого в приложении очень сложно добраться. Например, надо авторизоваться, положить товар в корзину, оформить заказ, оплатить его… Таких экранов много, особенно на крупных проектах, а время регулярно тратят все участники команды: при разработке, на code review и тестировании. Это особенно ощутимо на крупных проектах, когда таких труднодоступных экранов много.

Если эта ситуация вам знакома — то вы зашли по адресу! Меня зовут Александр Чаусов, и в статье я расскажу, как мы в Surf увеличили скорость тестирования UI.

Читать далее

Неправильный путь в backend driven UI. Доклад Яндекса

Время на прочтение8 мин
Охват и читатели6K
Архитектура современных приложений часто позволяет передавать логику между клиентом и бэкендом. Главное — не зайти в этих экспериментах слишком далеко. Разработчик iOS-приложения Авто.ру Сергей Сергеев объяснил, как его команда пришла к backend driven UI не самым легким способом.

— Всем привет. Я iOS-разработчик, но история будет кроссплатформенная.
Читать дальше →

Разбираемся с AsyncImage в SwiftUI

Время на прочтение3 мин
Охват и читатели6.9K

На протяжении нашей профессиональной деятельности мы в основном создаем приложения, которые так или иначе обмениваются данными с веб-сервисами. Изображения на удаленных серверах — это как раз один из таких типов данных, которые нам необходимо загружать и отображать в нашем приложении. SwiftUI предоставляет нам тип AsyncImage, который является представлением для загрузки и отображения изображений по URL-адресу. В этой статье вы узнаете, как использовать и кастомизировать AsyncImage в SwiftUI.

Читать далее

@Once: однократные замыкания

Время на прочтение2 мин
Охват и читатели3K

В Swift 5.5 появилась возможность использовать обертки свойств на параметрах функций и замыканий. Это наконец позволило мне реализовать то, что я и многие другие люди всегда хотели видеть в Swift — способ каким-либо образом обеспечить, чтобы замыкание (closure) вызывалось ровно один раз.

Чтобы понять, зачем, вот вам простой пример.

Читать далее