iOS Такой 🍏
3.38K subscribers
423 photos
10 videos
2 files
303 links
IT | Подкасты | Apple | iOS Материалы | Swift

Реклама: @new_repository

Тёплый чат: https://t.me/+tzWmsOMTPpFjMzAy

Бусти: boosty.to/dimov_ios
Download Telegram
Поиск retain cycle с помощью инструментов Xcode

При разработке под iOS многие разработчики часто сталкиваются c retain cycle, когда как минимум 2 объекта удерживают строгие ссылки друг на друга. Самый простой кейс — когда разработчик просто забыл сделать weak у delegate (да, такое бывает) или вызвал self в escaping замыкании дочернего объекта.

В реальном большом проекте очень тяжело отыскать, кто держит сильную ссылку друг на друга, причем это могут быть не 2 объекта.

Один из способов решение данной проблемы является - Debug Memory Graph
Debug Memory Graph, как и любой инструмент, имеет ошибки.

Как пользоваться можно увидеть в данной статье, и так же советую посмотреть видео про откладку в ios следующее видео
👍11🔥4👎21
Xcode 11 и XCFrameworks: новый формат упаковки фреймворков

XCFrameworks - технология Apple которая была добавлена в 2019 году. Она позволяет создавать и использовать переносимые библиотеки, которые могут быть использованы на разных платформах Apple.

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

XCFramework имеет несколько преимуществ, в сравнении с устоявшимися подходами:

- Упаковка зависимостей под все целевые платформы и архитектуры в единый bundle из коробки.

- Подключение bundle в формате XCFramework, как единой зависимости для всех целевых платформ и архитектур.

- Отсутствие необходимости в сборке fat/universal фреймворка.

- Нет необходимости избавляться от x86_64 слайсов (slice) перед загрузкой конечных приложений в AppStore.


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

#digest #полезное
👍5🔥2👎1👏1
Статические и динамические библиотеки/фреймворки в iOS

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

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

Динамические библиотеки (.dylib) же отличаются от статических тем, что они "линкуются" с исполняемым бинарником, т.е код нашей библиотеки не попадает в исполняемый файл, а подгружается во время выполнения. В результате размер исполняемого бинарника меньше, а так как код загружается только в момент обращения к нему, то время запуска обычно уменьшается; но если все динамические библиотеки загружаются при запуске приложения то это может сильно повлиять на время запуска приложения.

При попытке отправить ресурсы (такие как строковые файлы, изображения и т. д.) библиотеки iOS/macOS доставляются вместе с пакетами (Bundle's), содержащими эти ресурсы.

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

#digest
👍152🔥2👎1
Полезные iOS-инструменты для дебаггинга

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

#digest #дебаггинг
👍7🔥21👎1
XCFramework - это новый формат фреймворков, представленный Apple в Xcode 11.0.

Он представляет собой архив, который содержит скомпилированный код и ресурсы для разных платформ (например, iOS, macOS, tvOS и т. д.). XCFramework позволяет упаковывать код и ресурсы в единый файл, который может быть использован на разных платформах без необходимости создания отдельных фреймворков для каждой платформы.

Основная цель XCFramework - облегчить распространение и использование фреймворков для разработчиков, которые создают приложения для разных платформ Apple. Ранее, для каждой платформы требовалось создавать отдельный фреймворк, что могло быть неудобно и затратно по времени. XCFramework позволяет объединить код и ресурсы для всех платформ в один файл, что упрощает его использование и распространение.

Преимущества использования XCFramework включают:

1. Упрощение процесса сборки и распространения: XCFramework позволяет упаковать код и ресурсы для разных платформ в один файл, что упрощает процесс создания и распространения фреймворков.

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

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

4. Поддержка биткода: XCFramework поддерживает биткод, что позволяет оптимизировать код при сборке и автоматически адаптироваться к разным платформам.

В целом, XCFramework является удобным и эффективным инструментом для разработчиков, позволяющим упростить создание, распространение и использование фреймворков на разных платформах Apple.

iOS Такой подготовил для вас маленький выпуск о том, как внедрить XCFrameworks к себе в проект.

#digest #доклад
👍9🔥54👎1
Что нового в SwiftUI для iOS 17?

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

Некоторые обновления в этом релизе из числа тех, которые автор предлагал лично. Среди них - добавление шейдеров Metal, улучшение работы Color с Codable, добавление замыкания по завершении для анимаций, которое дает нам возможность анимировать градиенты. Теперь мы ещё можем скруглять углы прямоугольника по своему усмотрению. Только благодаря первой бета-версии автор закрыл как минимум дюжину своих предложений!

- Набор обновлений для ScrollView
- Улучшение прорисовки и анимаций
- Интеграция встроенных покупок (in-app purchases) в SwiftUI
- Новый модификатор inspector()
- Новый модификатор onKeyPress()
- Управление отображением колонок NavigationSplitView в компактных макетах
- Добавление тактильных эффектов с использованием сенсорной обратной связи
- Уведомление пользователя о недоступности контента
- Одновременная заливка и обводка фигур
- Новый API для работы со spring анимациями

Прочие изменения
- Модификатор foregroundColor() теперь считается устаревшим и его заменил новый - foregroundStyle()

- Изменение цветов с использованием градиента будет происходить с анимацией

- Spring анимация теперь является дефолтной в SwiftUI и содержит гораздо больше встроенных параметров, таких как .bouncy и .snappy, а сами анимации теперь создаются с помощью гораздо более простого API

- Появилась возможность скруглять только определенные углы прямоугольника, а не все сразу

- Упрощен синтаксис для заливки и обрезки фигур: .rect, .capsule и т.д.

- При создании табличных представлений вместо ForEach(users, content: TableRow.init) можно писать просто ForEach(users)


#digest #swiftui
👍105🔥2💩1
Всем привет!

Сегодня хотим поделиться с вами интересной темой - реактивное программирование.

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

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

В нашем докладе:
- Мы подробно рассмотрим основные принципы реактивного программирования и покажем, каким образом он может быть полезен в разработке современных приложений на основе RxSwift и RxCocoa

- Мы разберемся с понятиями потоков данных, реактивных стримов и операторами, которые позволяют обрабатывать данные эффективно и гибко.

#digest #доклад
👍21🔥83🤮1
Диспетчеризация методов iOS

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

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

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

#digest #диспетчеризация
👍17🔥73🤡1
UICollectionViewCompositionalLayout

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

NSCollectionLayoutSize: Размеры ширины и высоты относятся к типу NSCollectionLayoutDimension, которые могут быть определены путем установки доли ширины/высоты макета (в процентах по отношению к его контейнеру) или путем установки абсолютных или расчетных размеров.

NSCollectionLayoutItem: Это ячейка нашего макета, которая отображается на экране в зависимости от размера.

NSCollectionLayoutGroup: содержит NSCollectionLayoutItem в горизонтальной, вертикальной или пользовательской формах.

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

Sections и items в СompositionalLayout соответствуют Sections и items класического СollectionViewDataSource. Группы, однако, не имеют эквивалента в СollectionViewDataSource и не отображают содержимое в виде элементов / ячеек. Они используются исключительно для описания расположения наших Items в рамках Section.

#digest
👍12🔥5🎉2💩1
Привет, друзья!

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

- Git. (Командная разработка)
- Тестирование и почему это важнее, чем вы думаете
- Пишем проект с ChatGPT и без
- SwiftUI (продвинутый уровень)
- Английский язык. Эффективные методики обучения.


И, наконец, мы хотели бы провести мок собеседование на нашем канале. Мы пригласили опытного iOS Разработчика/Team Lead, который проведет интересное и познавательное собеседование. Если вы хотите проверить свои знания и навыки, а также получить ценные советы от профессионала, пиши мне @new_repository или ставь + в комментариях.

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

Спасибо, что остаетесь с нами, и до скорой встречи на нашем канале!

#iOS #разработка #новости
🔥27👍115🤬1
Всем привет! Очередной выпуск! На этот раз читаем и смотрим про Git.

Git - это распределенная система управления версиями, которая позволяет разработчикам эффективно работать с кодом и отслеживать все изменения, вносимые в проект. Он позволяет сохранять историю изменений, создавать ветки для параллельной разработки, объединять изменения, а также откатываться к предыдущим версиям кода.

GitFlow - это методология разработки программного обеспечения, основанная на Git. Она предлагает стратегию ветвления и слияния в Git, которая помогает организовать работу команды разработчиков и упростить процесс слияния кода. GitFlow определяет набор веток, которые используются для разработки новых функций, исправления ошибок и выпуска стабильных версий.

Команда iOS Такой подготовила доклад на YouTube, посвященный GitFlow. В докладе они рассказывают о преимуществах использования GitFlow при разработке iOS-приложений и демонстрируют практические примеры работы с ветками, слиянием кода и управлением версиями. Этот доклад может быть полезен для iOS-разработчиков начинающего уровня, и тех которые хотят улучшить свои навыки работы с Git и эффективно организовать процесс разработки.

#digest #доклад #Git
👍103🔥2👎1
Что нового в UIKit

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

Анимация символов, превью контроллеров прямо в Xcode, авто-вибранси для лейблов — это и многое другое ждёт вас в новой версии. Читайте подробности в обзоре и сделайте свои приложения ещё круче!

#digest #uikit
👍18🔥53👎1
Тестирование и почему это важнее, чем вы думаете

Тестирование в iOS - это процесс проверки функциональности, надежности и качества приложений, разработанных для устройств Apple. Оно включает в себя создание и выполнение тестовых сценариев, проверку работоспособности приложения в различных условиях и обнаружение и исправление ошибок.

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

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

Ресурсы на гостя - Даниила.

#digest #доклад #тестирование
🔥134👍4❤‍🔥1👎1
Глубокое погружение в Swift Regex

Обработка строк для извлечения, манипулирования или поиска данных - это основной навык, который необходимо приобрести большинству инженеров-программистов. Регулярные выражения, или regex, являются почтенным титаном обработки строк. Регулярные выражения являются неотъемлемой частью многих инструментов командной строки, используемых в Unix, поисковых системах, текстовых процессорах и текстовых редакторах. Недостатком регулярных выражений является то, что их может быть сложно создавать, читать и отлаживать. Большинство языков программирования поддерживают ту или иную форму регулярных выражений — и теперь Swift тоже поддерживает Swift Regex.

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

Swift Regex обеспечивает первоклассную поддержку регулярных выражений в языке Swift и нацелен на смягчение или полное устранение многих недостатков регулярных выражений. Компилятор Swift изначально поддерживает синтаксис регулярных выражений, что приводит к ошибкам во время компиляции, подсветке синтаксиса и строго типизированным захватам. Синтаксис регулярных выражений в Swift совместим с Perl, Python, Ruby, Java, NSRegularExpression и многими другими.

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

#digest
👍104🔥3👎1
С вами команда iOS Такой. Нам нужна обратная связь!

Мы выпустили уже достаточное количество выпусков, и какие еще ожидаются:
- Пишем проект с ChatGPT и без
- SwiftUI (продвинутый уровень)
- Английский язык. Эффективные методики обучения.
- Диспетчеризация на практике
- Моковое собеседование iOS
- Важность one to one


Так же недавно вошли в релиз выпуски:
- Тестирование проекта на практике
- Git и командная работа
- Реактивное программирование на основе RxSwift и RxCocoa
- Как использовать XCFrameworks на практике

Нам нужна обратная связь, о том, какие выпуски вы бы хотели видеть! И что не нравится в наших выпусках/канале. Пишите все, что думаете. Мы не боимся делать ошибок - мы растем!
🔥184👍3👎1
Дорогие друзья!

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

@NSOwl, спасибо тебе за твою бесценную помощь и наставничество в начале моего пути. Твои советы и знания в iOS помогли мне развиться и попасть на свою первую работу. Я до сих пор это ценю.

@MaxAnokhin и @gellert_kirill
Ваши советы и обратная связь помогали мне преодолевать трудности и развиваться в своих умениях. Без вас я бы не смог достичь таких результатов. За это время вы не просто стали для меня знакомыми, а целыми друзьями - отношениями которыми, я очень сильно дорожу.

@Dmitriy_Soloshenko
Вам я хочу выразить благодарность за то, что вы всегда были готовы поделиться своим опытом и знаниями. Спасибо Вам!

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

P.S Скоро много новых выпусков ✌️
25🥰3👍2👎1
Создаем дефолтные аватары пользователей в SwiftUI

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

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

Содержание статьи с примерами кода

1. Настройка модели пользователя
2. Создание расширения для строк
3. Кастомный View дефолтного аватара
4. Реализация генератора аватаров


#digest #swiftui
👍9🔥52👎1🤮1
ChatGPT в Swift на практике

Привет, друзья!

В это воскресенье у нас в гостях была Екатерина Батеева - iOS разработчик из Одноклассников.

Катя показала нам на примере, как оседлать ChatGPT и как строить с ним диалог, что бы корректно донести до него то, чего мы хотим. Так же мы увидим небольшой пример использования нейросети Kandinsky от Сбера для иконок приложения и, самое интересное, - как превратить дизайн из Figma в готовый экран на SwiftUI буквально в пару кликов!

Это был великолепный доклад, который мы советуем вам просмотреть.

Приятного просмотра! Увидимся в следующее воскресенье :)

#digest #доклад #ChatGPT
👍17🔥116👎1
Сравнение декларативных фреймворков

В этой статье автор покажем вам, как написать один и тот же код на трех популярных декларативных фреймворках — Jetpack Compose, SwiftUI и Flutter.

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

#ios #android #flutter
👍9🔥51👎1
Что такое память?

Основной единицей информации является бит, который равен 1 или 0. Традиционно мы организовываем биты в группы по восемь, называемые байтами. Память  —  это просто длинная последовательность байтов, один за другим уходящих в даль. Но они расположены в определенном порядке. Каждый байт получает число, называемое его адресом.

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

Cтатья для прочтения
Видео для закрепления материала

#digest #arc #память
👍113🔥2💩1
📢 Внимание, в это воскресенье у нас запланирован SwiftUI! 🎉

Мы приглашаем вас на прямую трансляцию, где Мишин Денис проведет детальный разбор одного из самых инновационных фреймворков разработки пользовательского интерфейса - SwiftUI! 🚀

SwiftUI - это мощный инструмент, который позволяет создавать потрясающие и современные пользовательские интерфейсы для ваших приложений на платформах iOS, macOS, watchOS и tvOS. В этом разборе мы рассмотрим все основные возможности и функции, которые делают SwiftUI таким классным и интуитивно понятным для разработчиков.

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

Присоединяйтесь к нам в это воскресенье, чтобы получить полезную информацию и вдохновение от нашего разбора SwiftUI! Не забудьте подписаться на наш YouTube-канал, чтобы получать уведомления о новых видео и быть в курсе всех наших интересных мероприятий. Увидимся в воскресенье в 19:30 по МСК! 🎥

#digest #доклад
12👍42🔥2🥴2