Как стать автором
Обновить
33.86

Swift *

Открытый объектно-ориентированный язык

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

О, вы из Англии? Локализация Ozon Seller на iOS

Время на прочтение10 мин
Количество просмотров2.2K

Всем привет! Меня зовут Андрей, и я делаю iOS-приложение для продавцов Ozon Seller. Наша команда поставляет фичи, красит кнопки, работает над перформансом и  всячески улучшает пользовательский опыт работы продавцов на Ozon.

Нашим приложением активно пользуются юзеры из разных стран, и поэтому день Х, когда мы решим добавить поддержку разных языков, был неизбежен. В этой статье я расскажу про стандартный процесс локализации iOS-приложения, про то, с какими трудностями мы столкнулись и как их решили. Разберём системный алгоритм определения языка и объясню, почему он нам не подошёл. Сделаем перевод приложения «на лету», а также посмотрим, как изменился наш флоу работы со строками.

Читать далее
Всего голосов 64: ↑64.5 и ↓-0.5+65
Комментарии13

Новости

Миссия выполнима: как мы создали приложение для Apple Vision Pro за 8 дней

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров8K

Всем привет! На связи Саша Сырков из 2ГИС, и это рассказ, как чуть больше недели мы разрабатывали приложение на Vision OS, разбирались в особенностях Reality Composer Pro, ловили всевозможные текстурные баги, а в итоге всё же получили заветный апрув от Apple за 17 часов до официального открытия продаж VR-гарнитуры.

Под катом хронология событий от идеи до рабочего продукта и технические подробности создания нашего первого VisionOS-приложения — краткого справочника с 3D-моделями достопримечательностей.

P.S. для самых пытливых в конце вопрос: кто первый отгадает ответ, тому подарим нашего гуся.

Читать далее
Всего голосов 32: ↑30 и ↓2+28
Комментарии33

Разборы важных новинок для iOS-разработки с WWDC 2023

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров3.4K

В это время мы обычно строим планы на будущее, и я уверен, что лучшее начало нового года — обучение новому и развитие навыков. Надеюсь, что в этом вам помогут видео докладов с осенних митапов, которые мы провели с командой iOS-разработки и на которых разобрали темы с последней конференции Apple: WWDC 2023.

Собрал в одной статье все вебинары и их краткое содержание.

Читать далее
Всего голосов 32: ↑31 и ↓1+30
Комментарии0

Раскладываю Swift Runtime на детали

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров7.2K

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

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

Привет, меня зовут Александр Пахомов, я работаю в Альфа-Банке на проекте для юридических лиц Альфа Бизнес Мобайл. В статье расскажу про Runtime:

— покопаемся в исходниках: узнаем на каком языке написан и что делает;
— напишем простой код, скомпилируем и посмотрим как он выглядит на уровне SIL и IR;
— добавлю в мой исходный код функцию swift_releaseи посмотрю результат;
— узнаю, что будет, если не учесть ‘name mangling’;
— и покажу ненастоящую функцию.

Читать далее
Всего голосов 37: ↑37 и ↓0+37
Комментарии1

Истории

Императивный UIKit‍ vs Декларативный SwiftUI

Время на прочтение15 мин
Количество просмотров11K

Для разработки iOS-приложений можно использовать два основных фреймворка: UIKit и SwiftUI. Однако при переходе на SwiftUI многие разработчики сталкиваются с трудностями, ведь парадигмы программирования у двух инструментов сильно отличаются.

В этой статье я хочу помочь разработчикам приложений для iOS понять различия между императивным и декларативным подходами к программированию, а также рассмотреть плюсы и минусы фреймворков UIKit и SwiftUI. Знакомство с ними необходимо для оптимизации процесса разработки и создания продукта высокого качества.

Читать далее
Всего голосов 88: ↑85 и ↓3+82
Комментарии40

Учимся определять способность Core Data к легковесной миграции до загрузки контейнера

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров2.1K

При создании приложения на основе фреймворка Core Data мы проектируем модель данных, в которую потом снова и снова вносим изменения. Неужели при этом каждый раз нужно удалять все данные и загружать их заново, а заодно перегружать сервер и батареи пользователей? Сначала кажется, что это единственный вариант решения, но я выяснил — всё можно сделать проще.

В статье рассказываю, как свести к минимуму последствия изменений структуры данных и их негативное влияние, а также удивляюсь, почему Core Data ещё сам не предложил такое решение.

Читать далее
Всего голосов 52: ↑52 и ↓0+52
Комментарии0

Android vs iOS: кто быстрее покорит Эверест?

Время на прочтение2 мин
Количество просмотров16K

Привет всем мобильным разработчикам! Мы одинаково любим Android и iOS. Но у каждого свои предпочтения. Предлагаем определить фаворита в дружеском поединке. Для этого перенесёмся в Гималаи и покорим Эверест. Выберите команду и постарайтесь дать как можно больше правильных ответов, чтобы добраться до вершины первыми. На весь тест 10 минут.

Взобраться на Эверест
Всего голосов 48: ↑41 и ↓7+34
Комментарии24

Как добавить обязательный запрос на IDFA через App Tracking Transparency

Время на прочтение6 мин
Количество просмотров4.4K

С весны этого года каждый iOS-разработчик должен запрашивать разрешение пользователя на использование рекламного идентификатора IDFA. В предыдущей статье мы сделали подробный обзор изменений в App Store и их влияния на мир iOS-разработки.

А сегодня — практический материал. Расскажем, как с помощью нового фреймворка App Tracking Transparency добавить в своё приложение обязательный запрос на использование персональных данных, как потом эти данные передавать рекламным сетям и что делать, если пользователь решил не делиться своей активностью. 

Читать далее
Всего голосов 48: ↑45 и ↓3+42
Комментарии6

App Tracking Transparency: что изменилось с новой политикой приватности от Apple

Время на прочтение6 мин
Количество просмотров6.3K

Apple в прошлом году заставила понервничать весь мобильный рекламный рынок, анонсировав для App Store новую политику приватности данных. Теперь создатели приложений обязаны спрашивать разрешение пользователей на рекламный трекинг (да-да, тот самый нашумевший IDFA). Правила, которые несколько раз откладывали, вступили в силу в начале этого года. 

В этой статье разберемся, как повлияла новая политика на рынок, и что именно изменилось для пользователей, разработчиков и рекламодателей. А также расскажем, как заполнить анкету по сбору данных, чтобы ваше приложение прошло ревью в App Store.

Читать далее
Всего голосов 41: ↑41 и ↓0+41
Комментарии2

Arduino ракета на 3D принтере — учимся приземлять ракеты дома

Время на прочтение7 мин
Количество просмотров22K

Сегодня я хотел бы поделиться своим опытом проектирования ракеты типа «Батут-М» с управлением вектора тяги (thrust vector control), все детали будем печатать на 3D принтере, а в качестве микроконтроллера использовать Arduino Nano BLE.

Читать далее
Всего голосов 81: ↑79 и ↓2+77
Комментарии38

DI в iOS: Complete guide

Время на прочтение24 мин
Количество просмотров38K

Всем привет, меня зовут Виталий, я iOS-разработчик в юните мессенджера в Тинькофф. Сегодня поговорим о том, что такое DI, зачем он нужен, рассмотрим известные библиотеки для DI и сравним их между собой. Поехали!

Читать далее
Всего голосов 29: ↑29 и ↓0+29
Комментарии7

Как мы ускоряли работу отладчика Swift

Время на прочтение8 мин
Количество просмотров8.6K

Привет! Меня зовут Александр Скворцов, я работаю в команде Яндекс.Браузера для iOS. Это очень большой проект, который насчитывает около тысячи clang-модулей и примерно 600 Swift-модулей. Наверное, из-за таких масштабов мы чаще других наталкиваемся на проблемы инструментов разработки, например, находим критические ошибки в компиляторе, неработающую подсветку и автодополнение. Это бывает неприятно, но жить можно. 

Самая серьёзная проблема возникла с отладкой. В худшем случае с момента запуска до остановки в отладчике на точке входа в приложение проходило больше 20 минут. И это на свежем MacBook Pro 16! С таким «быстродействием» инструментов разработки невозможно эффективно развивать проект, поэтому мы решили разобраться в причинах и поискать возможные решения.

В результате получилось не только снять остроту проблемы у себя, но и внести правки в код отладчика Swift — со временем описанные в статье неприятности перестанут беспокоить всех пользователей Xcode. А теперь расскажу подробнее, как это было.

Читать далее
Всего голосов 50: ↑49 и ↓1+48
Комментарии13

Быстрый, простой, сложный: как мы выпилили Realm

Время на прочтение18 мин
Количество просмотров20K

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

Мы тоже использовали Realm — 3 года подряд. Сначала он помогал, потом раздражал, пару раз выстрелил и в конце чуть не вогнал команду в депрессию. В итоге мы удалили Realm из проекта. Это сложный инструмент — простота интеграции обманчива, а за все удобства придётся расплачиваться.

Почему и как мы его удалили
Всего голосов 46: ↑46 и ↓0+46
Комментарии47

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

Модуляризация iOS-приложения Badoo: борьба с последствиями

Время на прочтение13 мин
Количество просмотров5.5K

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

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

В этой статье я расскажу:

— как мы не потерялись в сложном графе зависимостей;

— как спасли CI от чрезмерной нагрузки;

— что делать, если с каждым новым модулем приложение запускается всё медленнее;

— мониторинг каких показателей стоит предусмотреть и почему это необходимо.

Читать далее
Всего голосов 30: ↑30 и ↓0+30
Комментарии7

Почему я не могу найти Яндекс.Такси через системный поиск на iPhone?

Время на прочтение2 мин
Количество просмотров27K

Переименовав недавно Яндекс.Такси в «Яндекс Go», разработчики приложения сделали невозможным его поиск через Spotlight по главному ключевому слову — «такси». Однако дело здесь вовсе не в названии, поскольку в iOS давно уже предусмотрено всё необходимое для решения разработчиками «супераппа» сложившейся проблемы. Было бы только желание...

Читать полностью
Всего голосов 48: ↑44 и ↓4+40
Комментарии97

Чаты на вебсокетах в iOS, если у вас WAMP

Время на прочтение7 мин
Количество просмотров4.6K


Разработка заняла примерно 9 месяцев, а я занимался реализацией клиент-серверного общения по сокету для iOS. Особенности нашей ситуации:

  1. Поддержка старых версий iOS, где нативных методов для общения по сокетам ещё не было — пришлось искать рабочую библиотеку и фиксить баги.
  2. Протокол WAMP на бэкенде — предстояло научить клиент декодировать any, декодировать протоколы и создать объект, который отвечает за отправку и приём сообщений.

Примечание: описанные ниже способы декодирования, можно применить и в других задачах.
Читать дальше →
Всего голосов 44: ↑44 и ↓0+44
Комментарии18

Как Uber переписал приложение iOS на Swift

Время на прочтение9 мин
Количество просмотров15K
Итак, друзья, садитесь в кружок и послушайте историю самой большой инженерной катастрофы, в которой я участвовал. Это история о политике, архитектуре и логической ошибке невозвратных затрат (вы уж извините, просто сейчас пью Aberlour Cask Strength Single Malt Scotch).


Шёл 2016 год. Трампа ещё не избрали президентом, поэтому движение #DeleteUber пока не началось. Трэвис Каланик оставался гендиром, мы переживали фазу гиперактивного роста с открытием филиалов в других странах, общественные настроения в целом позитивные, все довольны, Uber на высоте.
Всего голосов 34: ↑34 и ↓0+34
Комментарии45

Navigation bar и анимация перехода

Время на прочтение4 мин
Количество просмотров7.4K

Поведение UINavigationBar при переходе по стеку может показаться непредсказуемым и часто забагованным. Но, на самом деле, так и есть! Эта статья призвана освежить знания о принципах работы и показать возможности  кастомизации поведения.

Немного общей теории

Если вы хорошо осведомлены, смело пролистывайте непосредственно к анимации.

Читать далее
Всего голосов 29: ↑28 и ↓1+27
Комментарии5

Apple открыла исходные тексты Swift System и выложила Swift 5.3

Время на прочтение2 мин
Количество просмотров8.5K


Компания Apple открыла исходные тексты библиотеки Swift System. Она предоставляет идиоматический набор программных интерфейсов к системным вызовам и низкоуровневым типам данных. Изначально Swift System поддерживал только системные вызовы платформ Apple, но сейчас портирован и для Linux. Swift System написан на языке Swift, компания распространяет его под лицензией Apache 2.0.

Swift System удобна тем, что предоставляет единую точку доступа ко всем системным интерфейсам. Эту возможность можно использовать на всех поддерживаемых платформах, без специфических обвязок на C в Swift-программах. Положительный момент в том, что Swift System не унифицирует системные вызовы, а предоставляет отдельное подмножество API для каждой поддерживаемой платформы, с учетом ее поведения и точным отражением низкоуровневых интерфейсов ОС.
Читать дальше →
Всего голосов 31: ↑31 и ↓0+31
Комментарии19

Разделяй и властвуй. Модульное приложение из монолита на Objective-C и Swift

Время на прочтение7 мин
Количество просмотров9.2K


Привет, Хабр! Меня зовут Василий Козлов, я iOS-техлид в Delivery Club, и застал проект в его монолитном виде. Признаюсь, что приложил руку к тому, борьбе с чем посвящена эта статья, но раскаялся и трансформировал своё сознание вместе с проектом.

Я хочу рассказать, как разбивал существующий проект на Objective-C и Swift на отдельные модули — framework’и. Согласно Apple, framework — это директория определенной структуры.

Изначально мы поставили цель: обособить код, реализующий функцию чата для поддержки пользователей, и уменьшить длительность сборки. Это привело к полезным последствиям, которым сложно следовать, не имея привычки и существуя в монолитном мире одного проекта.
Читать дальше →
Всего голосов 29: ↑29 и ↓0+29
Комментарии6