Обновить
65.59

iOS *

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

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

Force Update — механизм принудительного обновления мобильных приложений

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

Абсолютное большинство мобильных приложений имеет интересный нюанс – «хвост» старых версий, которыми все еще продолжают пользоваться. В этой статье мы посмотрим, какие проблемы это приносит и как с этим бороться. Материал будет полезен и мобильным разработчикам, и тем, кто каким-либо образом связан с разработкой мобильных приложений, к примеру, разрабатывает backend сервисы, которые используются в приложениях.

Читать далее

Разбираем SceneDelegate и AppDelegate в iOS 13

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

Продолжаем делиться своей практикой и переводами статей, которые могут быть полезны мобильному разработчику. В прошлых статьях мы разобрали инструменты тестирования и оптимизацию внедрения зависимостей в Android, а сейчас рассмотрим одно из нововведений в iOS 13 – поддержку многооконного режима и разделение AppDelegate (жизненный цикл и настройка приложения) и SceneDelegate (отображение приложения). 

От автора: Ещё до Xcode 11, при создании нового проекта вы знали, что по умолчанию создаются некоторые файлы, такие как AppDelegate.swift, ViewController.swift и StoryBoard, а также некоторые другие. Но в Xcode 11 вы могли заметить, что наряду с файлами по умолчанию, указанными выше, создается новый файл – SceneDelegate.swift.

Сначала вам может быть непонятно, что это за файл, для чего он создан и как использовать SceneDelegate при разработке приложения. Но давайте попробуем понять разницу между AppDelegate и SceneDelegate.

Читать далее

FPS не падай, девайс не грейся

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

В октябре 2020 года в техническую поддержку Авито стали обращаться пользователи с проблемами нагрева девайса и просадками FPS вплоть до полного фриза iOS-приложения. Проблема, как казалось, была глобальной. Она не относилась к какой-то конкретной функциональности приложения и поэтому не подходила в бэклоги продуктовых команд. Выход был один: засучить рукава и самому разобраться, что пошло не так. Не даром же я performance engineer.

Читать далее

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

Время на прочтение4 мин
Охват и читатели3.8K
В новом дайджесте годовой определяющий отчет State of Mobile 2022 от App Annie о рынке мобильных приложений, советы по разработке игр от Сида Мейера, тренды разработки и UI/UX, борьба Apple с клонами (да) и мошенниками (нет) и многое другое!

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

Экспорт UI дизайн-интерфейсов из Figma в Xcode iOS/Android Studio, в виде .xib/xml

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

Экспорт UI дизайн-интерфейсов из Figma в Xcode iOS/Android Studio, в виде .xib/xml

FigmaConvertXib это инструмент для экспорта элементов дизайна из проекта Figma, в среду разработки, с точностью 90%. В результате конвертации будут созданы файлы xib / xml, и уже с помощью интерфейс редактора Xcode/Android Studio, можно будет манипулировать всеми элементами у себя коде. Если дизайн вашего проекта разрабатывается в Figma, и вы не реализуете дизайн программно, то это для вас. Для того чтобы не тратить огромное время на реализацию всех UI элементов.

Читать далее

Big O нотация в Swift

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

Данная статья поможет начинающим iOS разработчикам разобраться в производительности алгоритмов в Swift.

Обозначение Big O нотация (или просто Big O) — это способ оценки относительной производительности структуры данных или алгоритма, обычно по двум осям: времени и пространству.

Читать далее

Что нужно знать аналитику при разработке под Android & iOS

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

Мы уже не представляем свою жизнь без мобильных телефонов и приложений, которые в них установлены. В мире сегодня насчитывается около 3,5 миллиардов пользователей смартфонов, 99% из которых работают на Google Android или Apple iOS. При этом мобильная разработка — молодое направление, информации по которому мало. Для того чтобы найти ответ даже на простой интересующий вопрос, порой требуется потратить немало времени. 

Привет, это Мария Чернова, бизнес-аналитик в 65apps. Эта статья поможет аналитикам, которые только начинают свой путь в мобильной разработке, разобраться в базовых различиях дизайна и паттернов поведения.

Читать далее

SwiftUI — Custom NavigationView

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

В публикации мы рассмотрим альтернативу NavigationView т.к. он переодически выкобенивается и отказывается работать надлежащим образом.

Альтернатива кастомная, не использует UIKit, подача материала простая (насколько смог упростить), каждый момент постарался разобрать максимально подробно.

Соответственно, будут пройдены все этапы от определения необходимых типов до конечной реализации с примерами использования и пояснениями.

Читать

Второе приложение. SwiftUI, может познакомимся поближе?

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

Публикация, в которой идет речь о SwiftUI. Расчитана в первую очередь на разработчиков, которые только столкнулись со SwiftUI.

Ничего фантастического в публикации нет, примеры некоторых моментов, которые не столь очевидны и переодически вызывают вопросы.

Состав публикации

• Вычисляемые свойства

• Инициализация оболочек (оберток) свойств

• Собственные оболочки свойств

• Динамический предикат (NSPredicate)

• @ViewBuilder

• Optional(nil) != nil

Читать далее

Долистать до конца и обратно

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

Как создать стабильное пролистывание экранов в вашем приложении? Как обеспечить обновление таблиц по мере пролистывания? - На эти и другие вопросы поможет ответить UIPageViewController, а также его нативные методы, описание принципов работы которых раскрывается в данной статье.

Читать далее

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

Время на прочтение3 мин
Охват и читатели4.8K
Первый наш дайджест про мобильную разработку в новом году — частично с новостями и статьями из прошлого. Поздравляем вас с новым годом и рассказываем про async/await, Qt, Fleet, бесплатные ресурсы и многое другое!

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

Swift. Class && Struct (классы и структуры) ч.2

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

Данная публикация является второй частью ранее опубликованного материала и рассчитана на ознакомление с ним. Ссылка на первую часть - Тыц

Вторая часть базового введения в классы и структуры языка Swift, для новичков в разработке под iOS. В публикации разобраны особенности типов, некоторые нюансы и отличия. Примеры составлены очень просто, доступно и таким образом, чтобы появилось больше мотиваций углубляться в язык. Параллельно освещаются другие возможности языка.

Читать далее

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

Kotlin Multiplatform. Работаем с асинхронностью на стороне iOS. Publishers, async/await

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

Всем доброго времени суток! С вами Анна Жаркова, ведущий разработчик компании Usetech. Продолжаем говорить про Kotlin Multiplatform и работу с асинхронными функциями. В этой статье мы будем рассматривать, как можно удобно подключать Kotlin общий код на стороне iOS, используя возможности Swift. А именно, как работать с Combine Publishers и новым async/await.

* Примеры кода доступны в полной версии статьи, и к сожалению, не доступны в предпросмотре

Концепция Kotlin Multiplatform позволяет нам сделать код максимально общим, т.е вынести практически все в общую часть.

Если на стороне common, мы оперируем корутинами и suspend функциями, то на стороне iOS проекта нативного благодаря поддержке interop Kotlin/Obj-C с версии Kotlin 1.4 suspend функции преобразуются в функции с completion handler.

Далее мы можем в этом блоке либо вызвать вывод данных, либо выполнение какого-то следующего метода. Все стандартно и просто.

Однако, не все любят простой синтаксис completion handler. А еще мы прекрасно знаем, что если ими злоупотреблять, можно легко попасть в ситуацию callback hell и потерять читабельность и чистоту кода.

Также не стоит забывать, что в зависимости от поставленной задачи у нас могут быть не только обобщаемые методы. Код платформенных проектов у нас может быть не идентичен, поэтому нельзя исключать логики сугубо нативной, вызовы которой мы можем сочетать с вызовами логики из общего модуля. Что вполне логично. Поэтому вполне нормально, что мы решим применить здесь доступные подходы конкретной платформы.

Попробуем сделать наш Kotlin код совместимым с Combine Publishers. Для этого превратим вызов нашей suspend функции в AnyPublisher с использованием Future Deferred и Promise.

Читать далее

Async/await для существующих iOS-приложений

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


Ранее я писал статью о работе оффлайн с веб-контентом. С того времени команда Apple выпустила Xcode 13.2 и Swift 5.5. Прочитав книгу о современной модели многопоточности в Swift, я понял, что это лучшее время для обновления моих примеров с async/await!
Перед прочтением моей статьи очень рекомендую прочитать материал о многопоточности в Swift Language Guide.
Читать дальше →

Кодогенерация DTO: зачем она нужна и как её настроить

Время на прочтение12 мин
Охват и читатели39K
Data Transfer Object — модель данных, которые мы передаём из одного слоя приложения в другой. В Яндекс Go мы активно используем DTO. Предположим, нужно отобразить в UI приложения для вызова такси экспериментальную кнопку с двумя свойствами — надписью на кнопке и ориентировочным временем ожидания такси. Тогда в сетевом слое надо написать примерно такую DTO-модель:

struct OrderButtonExperimentDTO: Decodable {
   let buttonTitle: String
   let estimationMinute: Int
}

Правильно написанная модель позволяет разрабатывать разные слои приложения независимо — но нужно следить за актуальностью самой модели на каждом слое. Например, если в коде выше ожидалось не estimationMinute, а estimationMinutes, то клиент не сможет декодировать полученные из сети данные и пользователь не увидит время ожидания. Такую ошибку легко совершить, в n-й раз перепечатывая названия переменных под каждый слой — а разработчики и правда должны рутинно это делать при любом изменении (или расширении) исходного формата данных. Ещё сложнее заметить ошибку на код-ревью.

Поэтому мы решили добавить механизм, который сам бы составлял и переписывал код моделей DTO в зависимости от исходного формата.
Читать дальше →

Bottom Sheet, перейдём на «ты»?

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

Bottom Sheet представлялся мне сложным и недосягаемым. Это был вызов! Я не понимал, с чего начать. Возникало много вопросов: использовать view или view controller? Auto или manual layout? Как анимировать? Как скрывать Bottom Sheet интерактивно?

Но всё изменилось после работы над Bottom Sheet для приложения Joom, где он используется повсеместно. В том числе и в таких критических сценариях, как оплата. Так что могу точно сказать, что в этом компоненте мы уверены. Настолько уверены, что я даже рассказывал о нём на Podlodka iOS crew #7. В рамках воркшопа я показал, как сделать Bottom Sheet, который умеет подстраиваться под размер контента, интерактивно закрывается и поддерживает UINavigationController.

Стоп, но Apple же предоставила системный Bottom Sheet. Зачем писать свой? Действительно, это так, но компонент поддерживается только с iOS 15. А это значит, что полноценно его можно будет использовать только через 2-3 года. К тому же часто требования дизайнеров выходят за рамки стандартных iOS-элементов.

В рамках статьи хочу развеять туман над Bottom Sheet, ответить на вопросы, которыми задавался я сам и предложить один из вариантов реализации. Чтобы в конце вы могли добавить в резюме строчку «Профессионально делаю Bottom Sheet'ы»

Если заинтересовал, то начнём! Создадим простой Bottom Sheet и шаг за шагом его прокачаем.

1. Научимся подстраиваться под размер контента и закрывать Bottom Sheet.

2. Добавим интерактивное закрытие, учитывая контент, который скроллится.

3. Поддержим UINavigationController с навигацией внутри Bottom Sheet.

Читать далее

React → React Native: снится ли фронтендерам мобильная разработка?

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


Привет! Я Виктор Ильтимиров, разработчик мобильных приложений в СберМаркете. Хочу рассказать, сложно ли переходить с React на React Native и зачем команда СберМаркета использует Reanimated.

Ранее я рассказывал об этом в докладе React → React Native Meetup | SberMarket Tech.
Читать дальше →

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

Время на прочтение3 мин
Охват и читатели2.4K
В последнем нашем дайджесте в этом году использование языков в приложениях iOS 15, парковка магнитолы по гайдлайнам Гугла и укрощение батчинга, исходники Telegram, отказ от модульного тестирования и многое другое! С наступающим Новым Годом!

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

SwiftUI: Как Чук и Гек искали nil

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

Эта таинственная история рассказывает о том, как два брата акробата программиста Чук и Гек начали делать свой проект на SwiftUI и столкнулись с неведомым! Как Optional притворялся View и к чему это привело.

Читать далее