iOS Dev
7.72K subscribers
1K photos
85 videos
1 file
1.17K links
🍏Канал об iOS-разработке, необычных подходах и решениях.
👨‍💻Автор: Виктор Грушевский (@Viktorianec)
Темы:
⭐️ Подготовка к собеседованиям.
⭐️ Архитектуры и алгоритмы.
⭐️ Код. Много кода.

⚒️База знаний: https://boosty.to/ios_dev

#ios #mobile #swift
Download Telegram
Опенсорсный клиент на SwiftUI для Mastodon: демонстрация реализованных методов и фич

IceCubesApp — это приложение с открытым исходным кодом для доступа к децентрализованной социальной сети Mastodon! Он полностью построен на SwiftUI, что делает его быстрым, легким и простым в использовании.

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

Каждый из них ориентирован на определенный аспект приложения, такой как пользовательский интерфейс, сетевое взаимодействие или модели данных.

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

В большинстве случаев архитектура представляет собой простой MVVM.

📖 Thomas Ricouard написал статью, в которой рассказал о некоторых аспектах и реализованных фичах.

🛠 Приложение на Github доступно по ссылке (⭐️2 100).

@iOS Dev
👍16👏83🔥3💯3🤩2🎉1
Quick actions для iOS: интеграция и примеры

🧑‍💻 Quick actions — отличный способ предоставить пользователям быстрый доступ к общим функциям вашего приложения на главном экране.

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

📖 В этом материале вы сможете узнать, как создавать:

1️⃣ Static quick actions, которые всегда доступны для вашего приложения.

2️⃣ Dynamic quick actions, которые ваше приложение может определить в рантайме.

3️⃣ Как поддерживать оба типа быстрых действий на примере тестового приложения.

@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26🔥52👏2💯2
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация вращения линейного градиента на SwiftUI

LinearGradient принимает в качестве управления направлением аргумент типа UnitPoint.

Оказывается, что это просто нормализованная пара X/Y под капотом, так что при выборе подходящих X и Y, можно рисовать свои градиенты под любым углом.

📖 Автор рассказывает о том, как несложно реализовать подобный эффект и приводит пример кода.

@iOS Dev
🔥18👍9😍31👏1🏆1🆒1
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация показа аннотаций диаграмм при наведении в Swift Charts

📖 В этом посте можно узнать, как создать интерактивную гистограмму, которая показывает аннотации при наведении

Отметки столбцов будут отражать данные о продажах трех разных продуктов за год, сгруппированные по месяцам.

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

🛠 Пример реализации доступен на github.

@iOS Dev
👍14🔥72👏21
🚨Срочно обновите fastlane!

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

Дело в том, что теперь Apple требует заголовок X-APPLE-HC при входе в https://idmsa.apple.com/appleauth/auth/signin.

❗️Отсутствие этого заголовка приводит к запрету доступа и возможной блокировке учетной записи Apple ID (некоторых, в том числе и один из моих личных аккаунтов это затронуло).

📔 Детальнее в этом пулл-реквесте: обсуждение и в этой теме.

В версии 2.212.1 эту проблему устранили, однако найстойчиво рекомендуется перейти на ключи App Store Connect API (как раз этот способ я использую в приложении Starly).

🛠Ссылка на актуальную версию fastlane здесь.

[UPD] Проблема затронула также и пользователей Xcodes.

@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
😱24👍9🫡6🤯3🙏21🔥1😁1
Создание приложения, похожего на стандартный iOS Timer с помощью SwiftUI

📖 В этом материале рассказывается, как повторить стандартный таймер на SwiftUI, ориентируясь на следующие 4 части интерфейса:

1️⃣ TimePickerView.

2️⃣ Элементы управления StartButton и StopButton.

3️⃣ CircularProgressView, который виден только при активном таймере.

4️⃣ Элемент управления PauseButton, который виден также только при активном таймере.

Каждый из компонентов пользовательского интерфейса создаётся по отдельности.

🛠 Исходный код проекта доступен здесь.

@iOS Dev
👍24🔥64👏2🤩1🤣1
Создание шаблонов заголовков в Xcode для Swift Packages

Если вы используете Swift Package, при создании нового файла возникают две неприятные проблемы:

1️⃣ Нет шаблона заголовка.

2️⃣ Нет запроса для имени файла.

📖 В этом материале есть решение для обеих проблем (вы можете использовать его и под свои рабочие процессы).

📖 А про изменение стандартных заголовков в файлах Xcode есть небольшой пост вот тут.

@iOS Dev
👍8🔥6💯21👏1
Три способа передачи данных при использовании WatchConnectivity

При работе с watchOS, существуют различные методы для связи между устройствами iPhone и Apple Watch.

Основной точкой взаимодействия является класс WCSession. Этот объект используется для создания соединения между телефоном и часами.

И хотя Apple рекомендует использовать собственные возможности URLSession для запроса данных, методы из поста предназначены для передачи небольших объемов информации.

📖 В этом материале автор рассказывает о своём опыте работы с watchOS и плюсах и минусах каждого из способов связи между Apple Watch и iPhone.

@iOS Dev
👍19🔥21🥰1👏1🆒1
Зарплаты разработчиков во второй половине 2022

🟢 По сравнению с первой половиной 2022 года, зарплаты ощутимо выросли у стажеров — на 14%. Немного подросли зарплаты сеньоров и лидов — по 4%. Практически не изменились зарплаты мидлов и джунов.

🟢 Больше всего выросли зарплаты разработчиков Delphi — на 28%.

Медианная зарплата Objective-С разработчиков выросла на 4% — 260 000 ₽.

🤑Медианная зарплата джунов на Swift — 95 000 ₽ (+9%), процентно схожий рост у мидлов, у сеньоров +3%.

💪 Среди лидов больше всего платят Swift-разработчикам — 350 000 ₽, а меньше всего лиды получают в 1С.

@iOS Dev — о важном
Please open Telegram to view this post
VIEW IN TELEGRAM
👍28🫡74🔥21🥰1🆒1
🔆 Обновление App Store: бенчмарки для приложений

С помощью нового показателя в App Analytics вы можете оценить производительность своего приложения, сравнив ее с аналогичными приложениями в App Store.

Выкатили сравнение по следующим показателям:

🔘Коэффициент конверсии.

🔘Коэффициент удержания на 1-й, 7-й и 28-й день.

🔘Показатель сбоев.

🔘Средний доход на одного платящего пользователя.

Приложения в одной и той же категории App Store группируются вместе.

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

@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍203💯3👨‍💻2🆒2❤‍🔥1🔥1
Визуальное справочное руководство для документирования кода на Swift

📖 В этом огромном материале Marco Eidinger представляет полный обзор параметров для документирования.

Кроме этого, он делится советами и рекомендациями по эффективному созданию документации, а также рассматривает различия между Xcode Quick Help по сравнению с DocC Renderer и Jazzy.

@iOS Dev
👍15🔥72👏2💯1
Различные способы сортировки массива строк в Swift

В Swift есть два способа сортировки: тот, который мутирует исходный массив, и тот, который этого не делает.

У них обоих одно и то же требование: элемент в коллекции должен соответствовать протоколу Comparable.

Типы, соответствующие этому протоколу, можно сравнивать с помощью операторов <, <=, >= и >.

📖 В этом материале рассказывается о различных способах сортировки, а также объясняется, в каких случаях localizedStandardCompare поможет справиться, например, с упорядочиванием имен формата Name2.txt, Name7.txt, и Name25.txt.

@iOS Dev
👍26🔥71👏1💯1
О сложном пути и о Гунсунь Луну из царства Чжао
Пост не только о разработке, но и о том, что мне кажется важным

Если бы за последние 25 лет авиационная промышленность развивалась столь же стремительно, как вычислительная техника, то Boeing 767 можно было бы приобрести сегодня за 500 долларов и облететь на нем земной шар за 20 мин, израсходовав при этом 19 литров горючего. Цитата из журнала «В мире науки» (1983, 8 выпуск).

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

Это касается хардорных фич, объёмного рефакторинга, попаданию в IT в целом, или участию в каких-то контестах, в частности.

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

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

⚽️ В футболе такая же параллель: вчерашняя победа Ливерпуля со счётом 7-0 невероятна, но капитан Манчестер Юнайтед не должен пихать судью на 86 минуте матча. В целом, лучше проиграть один раз 7-0, чем 7 раз по 1-0.

Несмотря на то, что стремление к лучшему естественно, как известно - это враг хорошего (спасибо, Вольтер).

Гунсунь Луну сказал: «Если от палки длиной в один чи ежедневно отнимать половину, это не завершится и через 10000 поколений».
Важно знать меру. И 1 000 задач на литкоде это замечательно, но столько ли нужно на самом деле?

@iOS Dev
❤‍🔥29👍12🔥6🤔4👏21🙏1🕊1💯1🤣1🤗1
Реализация поддержки ссылок с обработкой нажатий в UILabel на Swift

UILabel поддерживает отображение строк с атрибутами ссылки, но не позволяет нажимать на них и открывать их в браузере.

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

🛠 Однако реализация не так проста, и для этого нам потребуется собственные NSLayoutManager, NSTextStorage и NSTextContainer.

📖 В этом материале рассказывается, как создать такие ссылки с обработкой тапов.

@iOS Dev
👍27🤗32🔥1👏1💯1
Генерация похожих цветов в Swift или почему RGB не всегда лучший выбор

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

Однако на практике теперь у нас есть телефоны с дисплеями, которые позволяют отображать более 100% красного цвета, называемым суперкрасным.

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

Наконец, RGB трудно манипулировать. Если вы начнете с черного, вы можете увеличить количество «красного» в палитре цветов RGB, что сделает все более красным. Все идет нормально. Затем вы начинаете увеличивать «зеленый», и вы получаете… желтый?

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

📖 В этом необычном материале автор делится своими размышлениями о генерации цветов на Swift и рассказывает о выводах, к которым пришёл.

Например, вы можете прочесть о цветовом пространстве Hue-Chroma-Luminance.

🛠 И даже немного поиграть с палитрой цветов, примеры кода: тут, тут, здесь или вот в этом gist.

@iOS Devв день 8 марта тема цветов выбрана неслучайно, поздравляю всех девушек с международным женским днём ❤️‍🔥🌹
👍179❤‍🔥6🔥3👏2🌚1💯1
Channel photo updated
Разбор нововведений в Swift 5.8: API с обратным развертыванием, улучшенные result builders и не только

Хотя многие важные изменения Swift в настоящее время можно узнать в Swift Evolution, Swift 5.8 сам по себе является более чистым релизом: есть не только дополнения, но также и улучшения функциональности.

📖 В этой статье Пола Хадсона можно узнать о самых важных изменениях, включающих примеры кода и пояснения.

Вам понадобится Xcode не ниже 14.3, но учтите: некоторые изменения требуют определенного флага компилятора до релиза Swift 6.

🛠 Можно заранее скачать playground, который используется в статье.

@iOS Dev
👍27🔥43👏2🤩1💯1🫡1
Загрузка данных в SwiftUI с помощью URLSession и async/await

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

Учитывая такую ​​сложность управления, неудивительно, что URLSession является центральным узлом, который позволяет настроить каждый аспект для группировки нескольких запросов.

📖 В этом обширном материале вы сможете узнать о следующих вещах:

1️⃣ Как с помощью URLSession управлять передачей данных.

2️⃣ Моделирование данных, получаемых через URLSession.

3️⃣ Управление асинхронным процессом обновления от download task.

4️⃣ Создание пользовательского интерфейса для управления загрузкой данных.

@iOS Dev
👍17🔥43👌1🌚1💯1🏆1
Как написать свой первый Unit Test на Swift

Не все и не всегда пишут тесты, и этому периодически бывают самые разные объяснения (иногда вполне обоснованные).

🧑‍💻 Если вы новичок в Swift или iOS, вы обязательно зададите себе этот вопрос в какой-то момент.

На самом деле, первые шаги в тестировании сделать довольно просто.

📖 И в этой статье Винсент объясняет, что для этого необходимо сделать.

@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥54👏2👌2💯1
Как создавать настраиваемые виджеты с динамическими параметрами?

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

Среди этих ситуаций можно выделить следующие:

1️⃣ Опции предоставляются удаленным сервером (API).

2️⃣ Параметры взяты из хост-приложения виджета.

3️⃣ Опции генерируются в рантайме.

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

@iOS Dev
👍10👏32🔥2💯1