Как локализовать все ваши iOS приложения на 20 языков за 5 минут
Я создал консольный инструмент, который автоматически находит все файлы .strings в проекте xcode и переводит их на все языки.

Открытый объектно-ориентированный язык
Я создал консольный инструмент, который автоматически находит все файлы .strings в проекте xcode и переводит их на все языки.

RGB какой-то отстой.
Модель RGB, мало чем отличающаяся от ASCII, адресов памяти и наличия 86 400 секунд в сутках, является одной из тех инструментов, которые немного упрощают программирование, до поры до времени.

Команда The Browser Company активно использует фреймворк The Composable Architecture (TCA). Основываясь на опыте нашей команды и мнениях более широкого сообщества, я разработал новый набор best practices (лучших практик), которые могут принести пользу вашим проектам TCA.
Вот некоторые из ключевых практик, которые можно использовать в своих проектах.

В рамках предстоящей функции Widgetsmith я хотел рисовать линейные градиенты. Я делал это бесчисленное количество раз, используя замечательный стиль заливки LinearGradient. Это прекрасно работает и может легко встраиваться в множество различных форм и ситуаций в SwiftUI.
Однако всякий раз, когда я использовал их раньше, я использовал только встроенные значения direction (направления):.top,.topTrailing,.leading и т. д. И, если быть честным, это были единственные варианты, которыми я располагаю.
Пару недель назад я выступил с докладом о том, как обрести уверенность в процессе релиза, на Mobile Devops Summit, дистанционном мероприятии, организованном Bitrise. В конце концов, я подумал, что было бы неплохо написать статью с описанием специфики выступления и мотивов, стоящих за ним.

SwiftUI имеет отличный API для стилизации view независимо от их реализации. В этом посте мы рассмотрим, как мы можем стилизовать пользовательские view таким же образом.
В прошлом году в ходе нескольких эпизодов на Swift Talk мы продемонстрировали, как создать собственный степпер для увеличения и уменьшения значения. Он был похож на Stepper в SwiftUI, но с API, который делает его стильным.
Этот пост является кратким изложением того, что мы рассмотрели тогда, а также несколькими приёмами, которым мы научились с тех пор, чтобы наши пользовательские стили view (представление, вью, вьюшка) работали ещё лучше, как built‑in (встроенные) в SwiftUI. В последующем посте мы рассмотрим несколько более продвинутых вариантов использования.

Всем привет. Всем привет. Меня зовут Максим Батраков и я iOS-разработчик в 65apps. В этой статье я хочу рассказать о некоторых особенностях работы с URLSession, разобрать загрузку файлов в background URLSession и показать процесс переноса выполнения активных запросов в background URLSession после того, как приложение ушло в фон.

Какое-то время у нас был только модификатор onHover(perform:) в SwiftUI, который вызывается, когда пользователь перемещает указатель над рамкой view (представление, вью, вьюшка) или от неё. Раньше не было официального способа непрерывного отслеживания местоположения указателя. Это изменилось с введением onContinuousHover(coordinateSpace:perform:) в macOS 13 и iPadOS 16.
Новый модификатор позволяет нам читать текущую HoverPhase и сообщает точное местоположение указателя, когда он находится в пределах границ view. Давайте посмотрим на это в действии.

Машинное обучение отлично выявляет наблюдения. Если вам нужен чистый набор данных для вашей задачи, то это обычно только вопрос времени, когда вы можете построить модель ML со сверхчеловеческой производительностью. Это особенно верно в классических задачах, таких как классификация, регрессия и обнаружение аномалий.
Когда вы будете готовы решить некоторые из своих бизнес‑задач с помощью ML, вы должны подумать, где будут работать ваши модели ML. В некоторых случаях имеет смысл использовать серверную инфраструктуру. Преимущество серверной достоверности в том, что ваши модели ML показали конфиденциальность, поэтому конкурентам будет труднее вас догнать. Кроме того, серверы могут работать с более высоким спектром моделей. Например, модели GPT (прославившиеся благодаря ChatGPT) в настоящее время требуются современные графические процессоры, поэтому о потребительских устройствах не может быть и речи. С другой стороны, обслуживание вашей конфиденциальной информации обходится довольно дорого, и если потребительское устройство может работать с вашей моделью, зачем больше? Кроме того, могут возникнуть проблемы с конфиденциальностью, когда вы не можете отправить данные на удаленный сервер для обработки.
Однако давайте предположим, что имеет смысл использовать устройства iOS ваших клиентов для запуска моделей ML. Что может пойти не так?

Подготовка к собеседованию всегда сложный и долгий процесс. Кандидат хочет показать все свои знания и навыки, а компания не промахнутся с выбором будущего коллеги.
Какие проблемы должен уметь решать каждый iOS разработчик? Как оценить широту и глубину знаний кандидата?
Статья может быть полезна как кандидатам на роль iOS разработчика, так и специалистам ответственным за найм в вашей компании. Давайте глубже рассмотрим один из этапов технического собеседования — live coding интервью.

Facebook для iOS (FBiOS) — старейшая мобильная кодовая база в Meta. С тех пор как приложение было переписано в 2012 году, над ним работали тысячи инженеров, оно было отправлено миллиардам пользователей, и оно может поддерживать работу сотен инженеров одновременно.
После многих лет итерации кодовая база Facebook не похожа на типичную кодовую базу iOS:

Привет! На связи KTS и наш привлеченный эксперт по направлению iOS-разработки Александр.
Забрав инициативу у коллеги, возвращаемся с новой статьей из серии, в которой делимся своим представлением о DI и пробуем решить основную проблему библиотечных решений для DI: нам нужно точно знать, что экран соберётся, зависимости подтянутся, а все ошибки мы отловим на этапе компиляции.
В первой статье мы рассказали о своём понимании Dependency Injection, какие бывают зависимости и откуда их получать. Разобрались в паттерне Dependency Container, написали собственную реализацию и поняли, какую проблему он решает.
В этой статье копнем глубже. Речь пойдёт о жизненных циклах зависимостей: разберёмся, какие они бывают, как ими управлять и какое преимущество это даёт.
Если вы готовы, погнали! ?

Время запуска приложения является важным показателем для пользователей, поскольку это их первое взаимодействие с приложением, и даже незначительные улучшения могут иметь значительные преимущества для пользователей. Первые впечатления являются важным фактором конверсии потребителей, а время запуска часто указывает на общее качество приложения. Кроме того, другие компании обнаружили, что увеличение задержки равнозначно снижению продаж.
В DoorDash мы очень серьезно относимся к скорости запуска приложений. Мы одержимы оптимизацией опыта наших клиентов и постоянными улучшениями.
В этой статье мы рассмотрим три отдельные оптимизации, которые сократили время, необходимое для запуска нашего потребительского приложения для iOS, на 60 %. Мы определили эти возможности, используя проприетарные инструменты повышения производительности, но инструменты Xcode или DTrace также могут быть подходящими альтернативами.

Всем привет! Сегодня я собираюсь показать вам, как работать с Swift Regex, который был добавлен в Swift 5.7
При создании различных типов прокручиваемых пользовательских интерфейсов очень часто требуется наблюдать за текущей позицией прокрутки (или смещением содержимого, как это называет UIScrollView), чтобы инициировать изменения макета, загружать дополнительные данные при необходимости или выполнять другие виды действий в зависимости от того, какой контент просматривает пользователь в данный момент.
Однако, когда дело доходит до ScrollView SwiftUI, в настоящее время (на момент написания) не существует встроенного способа выполнения таких наблюдений за прокруткой. Хотя встраивание ScrollViewReader во view (представление, вью, вьюшка) прокрутки позволяет нам изменять положение прокрутки в коде, оно, как ни странно (особенно учитывая его имя), не позволяет нам каким‑либо образом считывать текущее смещение содержимого.
Один из способов решить эту проблему — использовать богатые возможности UIKit UIScrollView, который благодаря протоколу делегата и методу scrollViewDidScroll обеспечивает простой способ получать уведомления всякий раз, когда происходит прокрутка. Однако, несмотря на то, что я обычно большой поклонник использования UIViewRepresentable и других механизмов взаимодействия SwiftUI/UIKit, в этом случае нам пришлось бы написать довольно много дополнительного кода, чтобы преодолеть разрыв между двумя фреймворками.

Я посмотрел несколько сессий WWDC и прочитал документацию о том, как создавать собственные SF Symbols, но до сегодняшнего дня я никогда не пробовал их делать.
Раньше, всякий раз, когда я хотел создать собственный ресурс изображения переменного размера, я обычно использовал такой инструмент, как PaintCode, чтобы преобразовать его в код, а затем использовать этот код в качестве формы SwiftUI.

Этот репозиторий содержит пример проекта, демонстрирующий, как настроить этапы сборки SwiftLint с помощью функции файлов ввода-вывода Xcode путем определения действия перед сборкой для создания списка входных файлов для SwiftLint. Эта настройка решает новое предупреждение, появившееся в Xcode 14:

Привет, Хабр! Меня зовут Полина, работаю в Doubletapp iOS‑разработчиком и сегодня хочу рассказать о нашем опыте работы с API GoPro, а конкретно с парсингом ответов на команды BLE, которые описаны в этом API.
Содержание:
• Принцип работы с BLE-устройствами
• Сервисы и характеристики BLE-устройств
• Процесс отправки команд и получения ответов через BLE
• Простые ответы
• Комплексные ответы
• Формирование пакетов
• Парсинг комплексных ответов
• Общий алгоритм работы с BLE-ответом

Коротко: мы выпустили новое приложение для macOS под названием Cilicon, которое предоставляет и запускает эфемерные виртуальные машины для CI (Cilicon Installer – автономное приложение). Используя его, мы смогли переключиться на собственные Actions Runners и ускорить нашу CI в 3 раза, а также дать вторую жизнь некоторым из наших поврежденных устройств M1 MacBook Pro.

Сергей Журавель | 22 ноября 2022 г.
Встроенные покупки в iOS. Часть 1: создание покупок и добавление их в проект