Все потоки
Поиск
Написать публикацию
Обновить
49.18

iOS *

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

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

2ГИС на Apple Watch

Год назад мы масштабно обновили приложение для 2ГИС на Apple Watch: начали показывать на часах местоположение близких в рамках функции «Друзья на карте» и поддерживать ведение по пешему маршруту. К очередной презентации Apple решили добавить ещё полезностей. 

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

Об интересных моментах реализации рассказывает разработчик Иван Гнатюк.

Маленький экран — большие задачи

Сделать маршрут общественного транспорта на часах оказалось не так уж сложно — помогли два момента: 

  • Во-первых, у нас уже было приложение на watchOS 10+, где работало пешее ведение и была настроена коммуникация телефон ← → часы.

  • Во-вторых, мы раньше делали отображение маршрута транспорта для Live Activity на телефоне, и смогли переиспользовать много вьюшек и бизнес-логики (а она бывает непростой).

Оставалось только собрать из уже имеющихся блоков новое отображение для часов, что мы и сделали довольно быстро. Потом мы подумали, а почему бы не сделать и новое LA для общественного транспорта на часах? Текущее отображение от Dynamic Island с телефона выглядело скучно.

Сложность в том, что мы ограничены размерами часов, причём размеры варьируются 40– 49 мм. Скролл мы здесь добавить не можем, поэтому нужно попытаться уместить весь маршрут со всеми его сегментами на маленьком экранчике, попытавшись сохранить максимум полезной информации (номер маршрута, номер выхода из метро).

На помощь пришел GeometryReader — он даёт ширину контейнера, и, зная количество и тип сегментов, мы рисуем маршрут. Если пересадок на маршруте шесть и больше, то оставляем те, что помещаются, а вместо последнего покажем «....». Но на бою нам не удалось построить такой маршрут. Если вам удастся — расскажите нам!

Разработка на настоящих часах — интересно, но непредсказуемо

Разрабатывать и собирать на настоящих часах всегда интереснее. Но с этим могут быть свои приключения. 

  • Например, часы могут «отваливаться». Xcode к ним не подключается и приходится постоянно проверять настройки часов и подключение к WiFi. 

  • Иногда таргет часов ни в какую не хочет устанавливаться на часы — помогает только их перезагрузка.

  • А в какой то момент на часах перестал отображаться и новый LA, и простая трансляция DI. Перезагружали и часы, и телефон — ничего не помогало. Оказалось, что в какой то момент телефон обновился, а часы нет. Вот так и сломалось.

Как работает для пользователя

Для того чтобы видеть основные этапы маршрута, нужно построить маршрут на общественном транспорте в приложении на смартфоне и нажать «В путь», а на часах открыть приложение 2ГИС. В пути достаточно посматривать на часы — приложение покажет ключевую информацию с помощью Live Activities: иконки транспорта с цветом ветки метро, номер выхода, время в пути и пересадки, если они предусмотрены. Чтобы просмотреть весь маршрут, достаточно тапнуть на Live Activities и прокрутить Digital Crown.

Всё будет работать на Apple Watch с watchOS 11, iPhone с iOS 18 и в приложении 2ГИС версии 7.11 или новее. На часы отдельно ничего ставить не нужно — всё подтянется из приложения на айфоне.

Теги:
+5
Комментарии0

Кормак Хэйден — владелец Oasis, приложения для iPhone и смартфонов на Android, которое публикует якобы научно обоснованные рейтинги воды и фильтров, опираясь на результаты лабораторных тестов и открытые данные. Плату берут за, как утверждается, доступ к части функций, чтобы финансировать независимые (без рекламы) анализы. На сайте проекта ведётся раздел с рейтингами бутилированной воды и фильтров, поиск по водопроводной воде по городам США, а также возможность заказать домашние тест-наборы для отправки проб в лабораторию.

В личном микроблоге Хэйден опубликовал лаконичный пост. В нём он в три слова и две кавычки пожаловался, что его давно просили сделать приложение для Android, но финансовый результат Кормака разочаровал.

cormachayden_

В комментариях Хэйдену указали, что кнопка покупки на Android попросту была сломана. Кормак ответил, что локально на его машине всё работает. На самом деле ситуация ещё более смешная.

Оплата на Android в Oasis действительно сломана, это так. Однако в регионе США всё работает, указывает Хэйден. Это будет относительно легко пофиксить. Забавно именно то, что поправить уже нельзя: база данных данных Oasis крайне похожа на открытую закраудсорсенную базу данных OpenFoodFacts, а схожие же функции даёт бесплатное приложение Yuka. Кстати, Oasis по дизайну UI сильно напоминает Yuka.

Один из комментаторов даже назвал Oasis всего лишь фронтендом OpenFoodFacts. Кормак парировал, что в данных последней тяжёлых металлов и ПФАС нету и что Oasis собирает и публикует лабораторные данные, а Yuka якобы устарела, часто ошибается и не включает лабораторные измерения. Впрочем, в комментариях спросили, не заполняет ли Oasis эти значения случайными числами. Один из микроблогеров заметил, что на двух скриншотах у бренда Fiji стоит разная оценка.

На самом деле часто данные Oasis вводят в заблуждение. В комментариях к твиту нашли ошибки в выставленных предельно допустимых концентрациях: в приложении часто занижены ПДК относительно рекомендуемых властями США, и в реальности представленные количества вредных веществ представлять угрозу не могут. Зато эта дополнительная строгость к чистоте на три–четыре порядка ниже ПДК позволяет резко критиковать разные бренды за наличие в них мышьяка и тяжёлых металлов.

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

Наконец, секретом финансового успеха может быть банальный обман пользователей. Один из комментаторов указывает на тестовый период, который может запутать. Триал длится три дня, а затем начинают списывать по $4,99 в неделю. Возможно, что часть пользователей удаляет приложение и просто забывает отключить эту подписку.

Вызывает вопросы сама цена. Есть ли смысл платить по $30 ежегодной подписки за привилегию сравнивать разные бренды бутилированной воды? И вообще, заслуживает ли статуса отдельного приложения то, что может быть страницей в Интернете?

Теги:
+2
Комментарии3

В российских магазинах при покупке iPhone теперь покупателей требуют подписать документ об отказе от претензий, связанных с отсутствием RuStore. В документе говорится, что «товар имеет недостаток: невозможно установить и использовать единый магазин приложений RuStore».

Приобретая данный товар, потребитель уведомлен и согласен с обозначенным недостатком и не вправе предъявлять требования в связи с его наличием на основании ст. 18 РФ закона «О защите прав потребителей».

Теги:
+9
Комментарии1

С 1 сентября 2025 года в России вступили новые правила: все смартфоны и планшеты, продающиеся в стране, должны иметь предустановленный магазин приложений RuStore. На iPhone реализовать подобное невозможно, из‑за чего ритейлеры нашли обходное решение.

Магазины начали отмечать iPhone специальными пометками. У большинства сетей используется маркировка «без RuStore», а некоторые компании добавляют уточнение, что устройство имеет «недостаток». Такая формулировка юридически приравнивает смартфон к «бракованному» и позволяет покупателю вернуть его в течение года.

Теги:
+3
Комментарии7

App Clip в деле: сделали расписание транспорта без установки приложения и лишних мегабайт

В 2ГИС мы любим эксперименты с технологиями. Когда Apple представила App Clips — мини-версии iOS-приложений, — мы начали думать, что ж сделать такое полезное, быстрое и удобное. Появилась идея: а что если показать расписание транспорта прямо на остановке, без установки приложения? Идеально для ситуации, когда нужно получить информацию в моменте.

Пилотный проект начали с Екатеринбурга — на остановках в центре города уже появились QR-коды, по которым можно мгновенно получить расписание автобусов, трамваев и троллейбусов.

Реализация: просто, но есть нюансы

У нас была цель — запустить всё быстро и без лишней сложности. Поэтому мы пошли по самому простому пути. Однако не обошлось без сюпризов: мы столкнулись с интересной особенностью сборки и дистрибуции через App Store.

Когда собирается билд, бинарь App Clip попадает в общий application bundle — вместе с ресурсами, ассетами и иконками. Мы переживали, что это увеличит размер основного приложения для пользователей.

Однако на этапе загрузки в App Store Connect происходит app thinning (slicing) — бинарь анализируется и оптимизируется на стороне App Store. Получается, что из финальной сборки, доступной пользователю, App Clip удаляется. В результате конечный IPA, который скачивает пользователь, не увеличивается в размере, несмотря на то, что в исходном проекте ресурсы App Clip действительно включены в общий bundle.

Чтобы убедиться в этом, мы проверили это на практике:

  1. Собрали билд, в котором бинарь App Clip действительно оказался в общем application bundle.

  2. Загрузили его в App Store Connect.

  3. После релиза скачали IPA напрямую из App Store и проанализировали содержимое.

Результат: в финальном бинаре bundle App Clip отсутствует. Пользователи получают приложение без дополнительного груза, а размер основного приложения не растёт. К слову, в официальной документации Apple этот момент описан довольно туманно, так что мы решили проверить всё на себе.

App Clips считаются не самой популярной фичей, но всё же было интересно покопаться, собрать, выкатить и посмотреть, как это работает в реальности.

Если вы пробовали App Clips — расскажите про свой опыт! Может, нашли нестандартные подходы или столкнулись с подводными камнями, о которых стоит знать другим?

Теги:
+9
Комментарии0

Cursor теперь помогает составлять User Rules

В Cursor буквально сегодня увидел новую опцию. А именно: когда с ним работаешь по проекту и по ходу как-то его поправляешь, то внизу слева выскакивает пимпочка и предлагает занести такие вещи в User Rules.

Очень даже удобно. Не надо самому отдельно все записывать, а потом переносить.

Теги:
-1
Комментарии0

BPN vs MVM

В двух, приложенных к этому посту файлах (здесь и здесь), показан код для решения одной и той же задачи в мобильном приложении. А именно: запустить обратный отсчёт перед началом игры.

В одном файле эта задача реализована в архитектуре BPN (Business Process Notation), о которой рассказывал раньше здесь. А во втором файле тот же код организован по архитектуре MVVM.

Код и в том, и в другом файле написан с помощью Claude Sonnet. В случае с BPN структурировал код вручную, следуя бизнес-процессам. А во втором случае попросил Клода сделать рефакторинг, используя традиционный современный подход и он выбрал MVVM.

Что можно сказать в итоге, сравнивая архитектуру в том, и другом случае. 

Объём кода

В BPN варианте 270 строки кода с комментариями, в MVVM - 524.

Т.е., в MVVM случае кода практически в 2 раза больше.

Количество сущностей, объектов.

BPN - один класс и 3 раширения к нему.

MVM - 6 классов, 1 структура, 3 протокола, каллбэки, фабрика, расширение.

Архитектура

BPN - монолит.

MVVM - вью и модель, анимация и аудио как сервисы, роутер, отдельная структура для хранения значений свойств и т.д.

Что лучше

Как всегда, каждый из подходов имеет свои плюсы и минусы.

В BPN нравится, что можно видеть модель процесса, в данном случае модель одной из задач приложения.

Что такое “Модель”

Наиболее традиционны 2 понимания термина “модель”.

В одном случае, это структура данных, модель объекта.

Например:

struct Person {

let firstName: String

let lastName: String

var age: Int

}

В другом случае, под моделью понимается всё, что не относится к интерфейсу.

Но есть и третье понимание модели - это модель приложения, или модель отдельных процессов внутри приложения. Т.е., составные части приложения (процесса) и их последовательность.

В BPN файле такая модель проступает наглядно:

Модель процесса "Обратный отсчет"
Модель процесса "Обратный отсчет"

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

В файале MVVM блоков кода гораздо больше и нужно несколько раз проскоролить чтобы увидеть их в выпадающем меню. И увидеть целостную модель здесь сложнее.

Conclusion

На относительно небольших проектах архитектура MVVM может быть избыточна. Здесь могут использоваться более простые варианты.

BPN позволяет видеть целостную модель задачи (процесса, приложения).

Теги:
Рейтинг0
Комментарии10

Тесты Project Indigo - альтернативной камеры для iOS

Прочитал тут на днях новости [раз] [два] [три] [четыре], что Adobe выкатила революционное приложение, и сразу зачесались руки его протестировать. Шутка ли? Теперь же телефон будет снимать как заправская DSLR камера.

AI говорили они.. алгоритмы..
AI говорили они.. алгоритмы..

Взял я значит свой iPhone 16 Pro и пошел попить пивка в городе, да поискать что можно сфотографировать для теста.

Я, конечно, не настоящий фотограф, так - зеркалку лет ...надцать назад в руках держал, но по моему мнению прорывом тут и не пахнет.
Ниже будут несколько фотографий, снятых на нативное приложение Камера на iPhone, и аналогичные снятые на Indigo. Всё снималось с автоматическими настройками. Что-то "срук", что-то на телефон, прислонённый к какому-нибудь ровному объекту.

Project Indigo

Раз Два Три Четыре Пять Шесть Семь

iPhone Camera app

Раз Два Три Четыре Пять Шесть Семь

Выводы, как обычно, предлагаю сделать вам самим.

А, ну эта штука еще очень сильно телефон нагревает, чуть ли не до того, что подсветка экрана до нуля падает.

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

Google опубликовала ролик в рамках своей юмористической рекламной кампании Best Phones Forever с «диалогом» между персонифицированными смартфонами Pixel и iPhone. Повествование разворачивается вокруг анонсированных Apple «прорывных» функций iOS 26, которые, по задумке Google, на самом деле уже давно доступны пользователям Pixel.

В видео iPhone перечисляет «новые» возможности операционной системы Apple: перевод сообщений и звонков в режиме реального времени, интеллектуальный отбор вызовов и умное удержание. Выясняется, что аналогичный функционал появился на устройствах Pixel еще пять лет назад, что ставит под сомнение новизну представленных Apple решений.

Теги:
Рейтинг0
Комментарии1

📜 M-V-подставь_свое

Model-View-*** - это шаблоны проектирования
Важное уточнение: это шаблоны проектирования только для presentation слоя, а не для целого приложения

💃 Model
- это как раз та часть приложения о которой мы ближайшее время говорить не будем
Чаще всего ее называют бизнес логикой, но это не совсем верно
Пока, лучше всего воспринимать ее как модель данных которую наше приложение хочет передать пользователю
Причем не важно будет это Ui или API, или что-то другое
MV шаблоны не про frontend, а про то как передать данные клиенту, кем бы он ни был

🖼 View
- это само представление данных пользователю. То, что он по итогу получит
В мире андройд это обычно Activity, Fragment, View или Compose

🪝***
- это какая-то прослойка между моделью данных и их представлением пользователю

Для чего все эти шаблоны вообще придумали?

Дело в том, что View это какой-то вариант отображения данных клиенту 🏐
И часто возникает ситуация, что нужно создать другой вариант отображения ⚽️
Это может быть как бизнес потребность в перекраске кнопок и проведении при этом ab-тестов, 🏀
или желании разработчиков заменить технологию отображения 🏈

Например, у вас было консольное приложение, а вы вдруг захотели сделать для него UI (GitBash|GitUi здравствуйте),
ну или решили заменить Android.View на Compose

Во всех этих случаях нам хочется чем-то разделить саму View и работу с Model, чтобы иметь возможность заменить только View, не трогая ничего другого

В Android, к этому еще добавляется проблема пересоздания View при изменении конфигурации. Когда вы переворачиваете экран (и не только), весь ваш UI просто уничтожается и создается полностью заново. Хотя с точки зрения пользователя это все тот же экран с теми же данными 🫠

Это создает дополнительную потребность отвязать View от остального приложения, чтобы можно было ее подменять прямо в рантайме

Основные шаблоны это MVC, MVP, MVVM и MVI
О них мы и поговорим в следующих постах...

ПС. Посты с большим опережением есть в тг канале из описания профиля

Теги:
Всего голосов 3: ↑2 и ↓1+1
Комментарии1

Apple выпустила тактильный трейлер фильма F1, улучшенный с помощью вибраций iPhone.

Если у вас iPhone под управлением iOS 18.4 или более поздней версии, на вкладке Apple TV Plus приложения TV теперь есть трейлер предстоящего фильма Брэда Питта F1, который теперь улучшен с помощью вибраций, создаваемых современным компонентом Taptic Engine в iPhone.

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

Теги:
Всего голосов 2: ↑2 и ↓0+5
Комментарии0

Смотрите WWDC 2025 вместе с Surf и участвуйте в розыгрыше 🎧

Готовы к WWDC? Подключайтесь к нашей трансляции 9 июня в 20:00 по Москве. В прямом эфире мы вместе с сёрферами разберём главные анонсы и свежие решения Apple. Ожидается много интересного: от революционных обновлений iOS 26 и macOS 26 до новинок в мире ИИ-технологий от Apple.

Присоединяйтесь к нашему обсуждению. На стриме будут Head of Flutter Surf, Евгений Сатуров, и наши опытные iOS-разработчики — Кирилл и Антон. Они поделятся своим экспертным мнением о свежих решениях Apple. Будем активно общаться в чате, делиться впечатлениями и мнениями о презентации.

А чтобы было еще интереснее смотреть, мы разыграем на трансляции AirPods 4. Все подробности об этом здесь: https://surftech.timepad.ru/event/3397366/

Подключайтесь к стримам 9 июня. Запись сохраним:

  • VK Видео: vk.cc/cMuWI5

  • YouTube: vk.cc/cMuWJL

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

Опыт использования Claude для написания готового приложения

Ну вот и я сподобился - написал приложение полностью на Claude.

Приложение на SwiftUI, не enterprise, но достаточно сложное, из категории Favorite.

Начал на Claude Sonnet 3.7, потом вышел 4, закончил на нем.

Всего 1156 строк кода и без ошибок!

Естественно было несколько итераций. Причём практически все - это уточнение промта.

Кода он наворотил много, по мне так можно было и проще. Но он уж развернулся по полной - структуры, классы, вью, перечисления, состояния, published, state и т.д. и т.п.

Как оно там внутри вертится крутится даже не смотрел. Главное - работает и этого достаточно.

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

Теги:
Всего голосов 8: ↑1 и ↓7-4
Комментарии15

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

Как работать с реактивным кодом в iOS на примере Combine

Пожалуй, каждый iOS-разработчик видел в требованиях вакансий «знание фреймворков RxSwift, RxCocoa». Эти инструменты основаны на концепции реактивного программирования.

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

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

Однако с выходом Combine и SwiftUI, мы решили начать внедрять реактивный подход в наши приложения. Благо, теперь не нужны сторонние решения: хватит того, что предоставляет Apple. Давайте посмотрим, как можно работать с реактивным кодом.

Главные элементы Combine, с которыми происходит работа:

1) Publisher — издатель

Протокол, указывающий, что тип может передавать последовательность значений со временем. Publisher предоставляет данные только подписчику (Subscriber) и делает это, когда данные становятся доступны. Без подписки Publisher не активен.

Publisher описывается двумя ассоциированными типами: <Output, Failure>

  • Output — тип выдаваемых значений

  • Failure — тип возможной ошибки. Если ошибок быть не может, используется Never.

2) Subscriber — подписчик

Отвечает за запрос и получение данных от издателя, а также за обработку ошибок.
Имеет типы <Input, Failure>:

  • Input — тип входных данных

  • Failure — тип ошибки

Subscriber сам инициирует запрос и управляет объёмом поступающих данных. Основные способы обработки:

  • sink(receiveCompletion:receiveValue:)Принимает два замыкания: первое вызывается при завершении (успешно или с ошибкой); второе — при получении значений.

  • assign(to:on:)Присваивает полученные значения свойству объекта по keyPath.

3) Operators — операторы

Методы, преобразующие данные и потоки. Операторы — это промежуточное звено между издателем и подписчиком. С их помощью строятся цепочки обработки, трансформации и фильтрации данных.

4) Subjects — субъекты

Особый вид Publisher. Объекты, реализующие этот протокол, могут отправлять значения подписчикам через метод .send(_).

Subjects полезны для интеграции императивного кода: позволяют вручную вставлять значения в поток.

Управление подпиской

Publisher продолжает отправку до завершения или ошибки. Если подписка больше не нужна, её можно отменить с помощью метода cancel(). Все подписчики реализуют протокол Cancellable.

Пример использования Combine с URLSession

var cancellable = Set<AnyCancellable>()

func sendURLRequest(_ urlRequest: URLRequest) {
	URLSession.shared.dataTaskPublisher(for: urlRequest) // 1
    	.map(\.data) // 2
    	.decode(type: LocationModel.self, decoder: JSONDecoder()) // 3
    	.mapError { $0.toServerError() ?? .unidentifiedError } // 4
    	.receive(on: DispatchQueue.main) // 5
    	.sink { completion in // 6
        	print("finished stream with: \(completion)")
    	} receiveValue: { value in
        	print("receive value: \(value)")
    	}
    	.store(in: &cancellable) // 7
}

Что происходит:

  1. Создание Publisher — оборачивает загрузку данных по URL.

  2. map(.data) — извлекает Data из ответа.

  3. decode — преобразует Data в модель LocationModel.

  4. mapError — конвертирует ошибку в нужный формат.

  5. receive(on:) — переключает поток на нужную очередь.

  6. sink — обрабатывает завершение и полученные данные.

  7. store(in:) — сохраняет подписку, чтобы поток не завершился сразу.

Такой подход делает код более читаемым, управляемым и реактивным.

Больше про iOS-разработку — в нашем Telegram-канале Surf Mobile Team. Кейсы, лучшие практики, новости индустрии, анонсы наших мероприятий и вакансий.

Присоединяйтесь!

Теги:
Рейтинг0
Комментарии1

Хардкодить допоздна? А может, лучше нет, ворк?

>> Регистрация и программа <<

23 апреля в 20:00 приглашаем воронежских разработчиков на неформальный митап. Для тех, кто не сможет прийти офлайн, будет трансляция.

Никаких скриншотов кода на слайдах. Никакого душного обсуждения документации. Поговорим о том, что окружает нас вне работы. Прокачаем софт-скиллы и нетворкинг.

В программе митапа три доклада:

  • Лёша, Android-разработчик Surf — «Дедлайн "вчера": как работать с приоритетами».

    Как рассеивается внимание? Как ставить приоритеты в работе с командой? Когда нужно выносить переписку в звонок, а когда можно обойтись текстом? Ответим на эти и многие другие вопросы про приоритеты в работе и жизни.

  • Дима, Flutter-разработчик Surf — «Тимлид — друг или враг? Или так»?

    Расскажу о роли тимлида, но со стороны нижестоящего сотрудника. Что мне нравится/что не нравится в лиде, что для меня кажется полезным, а смысл чего я не понимаю.

  • Кирилл, iOS-разработчик, наш друг и гость из Una Financial — «Work-life health для IT-шника среднего возраста».

    Поделюсь жизненными проблемами разработчиков и способами их решения. Внимательный слушатель вообще сможет их избежать! Обсудим, как сделать жизнь лучше, повысить её качество. Максимально продлим трудоспособный возраст.

Митап пройдет 23 апреля, в 20:00, в воронежском пространстве «Eventuki»: ул. Фридриха Энгельса, 52.

Участие в митапе бесплатное, чтобы прийти или получить ссылку на трансляцию, нужно зарегистрироваться 👈

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

Теги:
Рейтинг0
Комментарии0

Как сократить JSON на 74% при 100 элементах?

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

Качество связи мы не можем контролировать, а вот уменьшить количество передаваемой информации посредством сокращения JSON, — вполне.

Нам нужна функция, которая могла бы вынести и переиспользовать общую логику. В нашем SDUI уже существует концепция «функций», и их разнообразные реализации, но ни одна из них не умела сокращать JSON, поэтому нужна была новая.

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

Детали реализации шаблонизации в статье.

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

Kotlin Multiplatform на практике: как работать с технологией (видео-туториал)

Выпустили серию видео о базовых аспектах работы с Kotlin Multiplatform, технологией для мультиплатформенной разработки (iOS, Android, Web, Desktop).

KMP позволяет использовать общую кодовую базу для нескольких платформ. Причём мы можем гибко регулировать, какую часть кода делаем общей (например, оставляем нативный UI-слой, а бизнес-логику делаем общей).

Рассказали, как и для чего применять технологию на практике, и как к ней подступиться.

Уже доступны все шесть выпусков туториала:

1. Что из себя представляет технология KMP?

2. Настройка окружения

3. Структура проекта

4. Верстка на SwiftUI

5. Верстка на Compose

6. Сетевой слой

Посмотреть туториал можно здесь:

К каждому выпуску приложен документ с пояснением некоторых терминов и полезными ссылками (см. в описании видео), которые пригодятся при ознакомлении с материалом.

Теги:
Всего голосов 9: ↑9 и ↓0+9
Комментарии0

Ну что, народ, что называется "тащусь" от новой сегодняшней версии ChatGPT CodeCopilot.

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

Мне же особенно понравилась опция Code Review. Это круто! Типа он проходит по коду и даёт рекомендации.

For example:

I've reviewed the code and suggested improvements for logical consistency, potential crash prevention, layout calculations, and readability. Let me know if you need further refinements! 🚀

Даже не знаю, как это назвать. Реально круто!

Теги:
Всего голосов 8: ↑4 и ↓4+2
Комментарии1

Будильник на iPhone с новыми версиями iOS продолжает тормозить. Пользователи жалуются, что мелодия играет с задержкой в несколько часов или не играет вообще. Apple знает о проблеме, но уже год не может её исправить. Временное решение: «Настройки» — «Face ID и код-пароль» — отключите «Распознавание внимания».

Теги:
Рейтинг0
Комментарии0

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

Фичи:

Генерация структурированных документов в Markdown/PDF

Интеграция c Jira/Confluence

Возможность автоматической генерации диаграмм (ERD, Sequence)

Полезно ли это/пользовались бы сами?

Теги:
Всего голосов 3: ↑3 и ↓0+4
Комментарии2
1
23 ...