AppFiles - Mobile Development
2.01K subscribers
2.61K photos
33 videos
8 files
3.5K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
SwiftEasyPop - это легкая и простая в использовании библиотека SwiftUI для отображения оповещений и тостов в приложениях. Из особенностей - простой и интуитивно понятный API для отображения оповещений и тостов, высокая настраиваемость, поддержка пользовательских иконок, цветов и сообщений, совместимость с iOS 14.0+, поддерживает светлый и темный режим.

SwiftEasyPop на GitHub: https://github.com/tunahancelik/SwiftEasyPop
Платформа: iOS
⭐️: 7
Принципы функционального программирования — Обучающий курс Университета Карнеги-Меллона

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

Описание: https://apptractor.ru/learn/printsipy-funktsionalnogo-programmirovaniya-obuchayuschiy-kurs-universiteta-karnegi-mellona.html
Платформа: программирование/обучение
Влияние AnyView на производительность SwiftUI

AnyView — это представление без типа (type-erased), которое может пригодиться в контейнерах SwiftUI, состоящих из разнородных представлений. В таких случаях вам не нужно указывать конкретный тип всех представлений, которые могут находиться в иерархии. При таком подходе можно избежать использования дженериков, что упрощает код. Однако его использование может сопровождаться снижением производительности. Как известно, SwiftUI полагается на тип представлений для вычисления разниц (диффинга). Если это AnyView (который, по сути, является оберткой), SwiftUI будет сложно определить идентичность представления и его структуру, и он просто всегда будет перерисовывать всё представление, что не очень эффективно.

В этой статье на примере Stream SDK отслеживаем производительность ленты (заминки анимации и FPS) - без AnyView и с ним.

Статья: https://apptractor.ru/info/articles/anyview.html
Платформа: iOS
Что такое Функциональное программирование

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

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

Статья: https://apptractor.ru/info/articles/chto-takoe-funktsionalnoe-programmirovanie.html
Платформа: программирование

Поставьте 👍, если хотите почитать больше о функциональном программировании.
👍4🤮1
Compose Stacked Snackbar - мультиплатформенная библиотека (Android, iOS и десктопы) для отображения уведомлений (снеков) внизу экранов. Имеет встроенные типы (ошибка, предупреждение, информация, успех), поддерживает кастомные уведомления, сами они свайпятся вправо или влево для закрытия или можно привязать действия, есть анимация, автоматическое удаление.

Compose Stacked Snackbar на GitHub: https://github.com/rizmaulana/compose-stacked-snackbar
Платформа: Android/кроссплатформа
⭐️: 16
Perception - инструменты наблюдения для платформ, которые официально не поддерживают Observation. Библиотека предоставляет инструменты, которые имитируют @Observable и withObservationTracking в Swift 5.9, но при этом они бэкпортированы для работы на iOS 13, macOS 10.15, tvOS 13 и watchOS 6. Это означает, что вы можете начать использовать преимущества инструментов наблюдения Swift 5.9 уже сегодня, даже если вы не можете отказаться от поддержки старых платформ Apple. Использование инструментов этой библиотеки работает почти так же, как и использование официальных инструментов.

Perception на GitHub: https://github.com/pointfreeco/swift-perception
Платформа: iOS
⭐️: 191
Традиционная пятничная подборка - видео и подкасты за неделю:

(iOS Ru) Как делать браузер под iOS и управлять большой командой
(iOS Ru) Топ-10 вопросов по iOS: cобеседование с разбором ответов и материалами
(iOS Ru) Swift-уроки: PropertyWrappers — обертки свойств
(iOS En) Detecting Sensitive Content in your own iOS app
(iOS En) SwiftUI Custom File Extensions | Import & Export
(iOS En) How to write Unit Tests for Code Performance in Xcode
(iOS En) How To Use Context Menus In Xcode 15 (SwiftUI)
(iOS En) Customized Animated Paywalls - RevenueCat
(And Ru) Рефакторинг аналитики в многомодульном Android приложение для ускорения сборки
(And Ru) Разработка Карт и первый коммит с KMM в Яндексе
(And Ru) Как мы создавали дизайн систему на Jetpack Compose
(And Ru) Из 1С в Android-разработчики? Кодревью кода на Kotlin
(And En) The FASTEST Local Search - Introduction to AppSearch on Android
(And En) The #1 Thing Android Developers Ignore When Testing Their App
(And En) Top 3 Secret Jetpack Compose Modifiers I Bet You Didn’t Know
(And En) Digging into Android System Services
(And En) What's up with Android's back?
(Dev Ru) Agile на масштабе. 100 команд. планирование, синхронизация, прозрачность
(Dev En) Data Analyst Bootcamp for Beginners (SQL, Tableau, Power BI, Python, Excel, Pandas, Projects, more)
(Mrk Ru) Темные паттерны в UX: как приложения нами манипулируют

Что вы посмотрели/послушали интересного про разработку? Киньте ссылку в комментарии.

🌐 AppFiles
👍1
Вопросы с собеседований: Для чего нужны фрагменты, если есть активити

Давайте представим, что ваше мобильное приложение - это книга, а активити и фрагменты - это страницы в этой книге.

Активити (Activity):

• Активити - это целая страница с информацией или задачей.
• Если у вас есть несколько страниц (активити), то каждая страница представляет отдельный экран в вашей книге.

Фрагмент (Fragment):

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

Так почему фрагменты важны, если у нас уже есть активити?

• Гибкость в дизайне: Фрагменты позволяют легко изменять и улучшать отдельные части экрана без изменения всего экрана (активити).
• Переиспользование: Вы можете использовать один и тот же фрагмент на разных страницах (в разных активити), делая ваш код более удобным и переиспользуемым.
• Многозадачность: Фрагменты помогают в создании сложных экранов, например, с разными частями информации, которые могут обновляться независимо друг от друга.

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

Подробнее: https://apptractor.ru/info/techhype/voprosy-s-sobesedovaniy-dlya-chego-nuzhny-fragmenty-esli-est-aktiviti.html
Платформа: Android
🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
RichEditor - WYSIWYG редактор для Jetpack Compose. Пока, правда, редактор предлагает только жирный, наклонный, подчеркнутый шрифты и заголовки.

RichEditor на GitHub: https://github.com/canopas/rich-editor-compose
Платформа: Android
⭐️: 24
Android-разработка в 2023 году: год эволюции

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

• Jetpack Compose 1.5.7
• Studio Bot
• Android 14 (“Upside Down Cake”)
• Android Studio Hedgehog
• Jetpack Glance
• Библиотека Telecom Jetpack
• Библиотека Jetpack Media3
• Менеджер учетных данных
• Kotlin DSL
• Gemini

Статья: https://apptractor.ru/info/articles/android-2023.html
Платформа: Android
1🤔1
Google удалил курс Android Basics with Kotlin

Google удалил курс Android Basics with Kotlin с сайта, теперь вместо него доступен только Android Basics with Compose.

Компания ясно дает понять, что если вы начинаете новое приложение, то должны делать его в Compose, а если вы учитесь, то должны изучать Compose. Это не значит, что вещи, написанные на XML и системе представлений, перестанут работать, это просто значит, что вам не стоит изучать это, если вы начинаете работать с Android сейчас.

Обсуждение на Reddit: https://www.reddit.com/r/androiddev/comments/194r5xm/google_just_removed_their_android_basics_with/
Платформа: Android
1
This media is not supported in your browser
VIEW IN TELEGRAM
ScrollView с прилипающим выделенным элементом на SwiftUI

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

Статья: https://habr.com/ru/articles/784768/
Платформа: iOS
FxSwipeAction - библиотека SwiftUI для создания уникальных и настраиваемых действий для свайпов. Она позволяет разработчикам легко добавлять действия для свайпов в представления SwiftUI. Благодаря простой интеграции и широким возможностям настройки она улучшает взаимодействие с пользователем, предоставляя интуитивно понятный и отзывчивый интерфейс пролистывания. Фичи: поддерживаются любые представления, включая List и VStack, можно использовать иконки из SF Symbols, дизайн действий можно настраивать, действия автоматически закрываются при взаимодействии с другими элементами группы.

FxSwipeAction на GitHub: https://github.com/X901/FXSwipeAction
Платформа: iOS
⭐️: 16
Пост post-mortem: разбираемся, почему Google Play Protect посчитал 2ГИС вредоносным ПО

10 января Google Play Protect ошибочно посчитал 2ГИС вредоносным приложением.

Пользователи 2ГИС на Android начали получать системное сообщение, что 2ГИС — вредоносное приложение. Мы стали массово получать сообщения от пользователей и разбираться в ситуации.

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

Статья: https://habr.com/ru/companies/2gis/articles/786404/
Платформа: Android
От стажера до ведущего разработчика — как расти в IT

Алексей Маринин — iOS-разработчик-самоучка с коммерческим опытом более 4-х лет. За свою карьеру он успел вырасти от стажера до ведущего разработчика, а так же внести вклад в разработку таких больших компаний, как Сбербанк, МТС, Озон и ПСБ. Мы пообщались с ним и поговорили о том, как учиться, как проходить собеседования и как расти разработчику.

Интервью: https://apptractor.ru/info/interview/ot-stazhera-do-veduschego-razrabotchika-kak-rasti-v-it.html
Платформа: обучение
🤡3
Simple Calendar 2023 - это настраиваемое автономное приложение с ежемесячным календарем для Android. Планировщик и ежедневник в вашем кармане, созданный именно для того, чтобы делать то, что должен делать личный крошечный планировщик расписания в 2023 году. Никаких сложных функций, ненужных разрешений или рекламы.

Simple Calendar на GitHub: https://github.com/SimpleMobileTools/Simple-Calendar
Платформа: Android
⭐️: 3.4K
🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
GPUPixel - это высокопроизводительная библиотека фильтров красоты для изображений и видео, написанная на C++11. Чрезвычайно проста в компиляции и интеграции, имеет очень маленький размер. Работает на GPU и содержит встроенные фильтры, позволяющие добиться результатов коммерческого уровня. Поддерживает все платформы, включая iOS, Mac, Android, и теоретически может быть перенесена на любую платформу, поддерживающую OpenGL/ES. Для определения ключевых точек лица в настоящее время используется библиотека Face++, но в будущем она будет заменена на VNN.

GPUPixel на GitHub: https://github.com/pixpark/gpupixel
Платформа: кроссплатформа
⭐️: 16
ADAMANT Messenger for iOS - нативный iOS-клиент для мессенджера. Вы можете использовать этот репозиторий для создания собственной версии приложения ADAMANT для iOS. В теории, ADAMANT - самый безопасный и анонимный мессенджер, использующий шифрование на основе блокчейна (собственно, единственный же на нем). Есть интегрированные криптовалютные переводы.

ADAMANT Messenger for iOS на GitHub: https://github.com/Adamant-im/adamant-iOS
Платформа: iOS
⭐️: 223
💅1
Внедрение зависимостей для создания элегантных горизонтальных архитектур

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

Статья: https://apptractor.ru/dep-inj
Платформа: iOS
Вопросы с собеседований: Асинхронные задачи в Swift

Swift вводит поддержку асинхронного программирования через асинхронные функции (async/await) и структуры данных, такие как Task. Вот пример асинхронной функции в Swift:

func fetchData() async throws -> Data {
let url = URL(string: "https://apptractor.ru/")!
let (data, _) = try await URLSession.shared.data(from: url)
return data
}


Здесь функция fetchData является асинхронной, обозначенной ключевым словом async. Она использует await, чтобы ждать завершения асинхронной операции, в данном случае, запроса данных через URLSession. Возвращаемый тип функции указывает на тип данных, который будет возвращен после успешного выполнения асинхронной операции.

Для вызова асинхронной функции используется ключевое слово await. Пример использования:

do {
let data = try await fetchData()
// Обработка полученных данных
} catch {
// Обработка ошибок
}


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

Платформа: iOS
4🤣1