Библиотека мобильного разработчика | Android, iOS, Swift, Retrofit, Moshi, Chuck – Telegram
Библиотека мобильного разработчика | Android, iOS, Swift, Retrofit, Moshi, Chuck
9.53K subscribers
1.7K photos
83 videos
52 files
4.52K links
Все самое полезное для мобильного разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/b60af5a4

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a4adec1b17b35b6c0d8389
Download Telegram
⚙️ AnyLanguageModel — совместимая по API замена Foundation Models на кастомные модели

AnyLanguageModel — пакет Swift, предоставляющий готовую замену фреймворку Apple Foundation Models с поддержкой кастомных моделей. Всё, что вам нужно сделать, — это изменить оператор импорта:

— import FoundationModels
+ import AnyLanguageModel

struct WeatherTool: Tool {
let name = "getWeather"
let denoscription = "Retrieve the latest weather information for a city"

@Generable
struct Arguments {
@Guide(denoscription: "The city to fetch the weather for")
var city: String
}

func call(arguments: Arguments) async throws -> String {
"The weather in \(arguments.city) is sunny and 72°F / 23°C"
}
}

let model = SystemLanguageModel.default
let session = LanguageModelSession(model: model, tools: [WeatherTool()])

let response = try await session.respond {
Prompt("How's the weather in Cupertino?")
}
print(response.content)


Поддерживаемые провайдеры:

• Apple Foundation Models
• Core ML models
• MLX models
• llama.cpp (GGUF models)
• Ollama HTTP API
• Anthropic Messages API
• Google Gemini API
• OpenAI Chat Completions API

💻 AnyLanguageModel на GitHub

🔸 Курс «Специалист по ИИ»
🔸 Получить консультацию менеджера
🔸 Сайт Академии 🔸 Сайт Proglib

🐸 Библиотека мобильного разработчика

#буст #iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
🎁 Топ вакансий для мобильных разработчиков за неделю

Android-разработчик Middle+ — до 250 000 ₽, удалёнка

Mobile KMP developer (Android/IOS + Flutter) — от 360 000 до 420 000 ₽, удалёнка

Senior Android Developer (Seller Experience) —‍ от 300 000 до 400 000 ₽, удалёнка

Kotlin / Java разработчик (middle/senior) —‍ гибрид (Москва)

Flutter разработчик —‍ удалёнка

➡️ Еще больше топовых вакансий —‍ в нашем канале Mobile jobs

🔸 Курс «Специалист по ИИ»
🔸 Получить консультацию менеджера
🔸 Сайт Академии 🔸 Сайт Proglib

🐸 Библиотека мобильного разработчика

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
🛡 Как защитить себя от увольнения

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

👉 Читать статью

🔸 Курс «Основы IT для непрограммистов»
🔸 Получить консультацию менеджера
🔸 Сайт Академии 🔸 Сайт Proglib

🐸 Библиотека мобильного разработчика

#MadeInProglib
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤫 Не используйте Struct в Swift таким образом — это вас замедляет

Структуры в Swift легковесны и быстры, но их неправильное применение бьет по производительности. Разбираем главные ошибки.

1️⃣ Копирование больших данных

Структуры — типы значений. При передаче или присваивании создается копия:

struct UserProfile {
let name: String
let bio: String
let posts: [Post] // Большой массив
let followers: [Follower]
let following: [Following]
}


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

Решение: Выносим тяжёлые данные в класс:

final class UserDataStore {
var posts: [Post] = []
var followers: [Follower] = []
var following: [Following] = []
}

struct UserProfile {
let name: String
var bio: String
let store: UserDataStore // Общая ссылка
}


Теперь копируются только name и bio, а массивы используются совместно.

2️⃣ Copy-on-Write — ваше спасение

Для стандартных типов (String, Array, Dictionary) Swift применяет оптимизацию Copy-on-Write: физическое копирование происходит только при изменении.

Пишите в структуры сколько угодно [String], [Int] и т.д. — пока не меняете их, копирования не будет.

3️⃣ Не ожидайте общего состояния

Структуры не разделяют состояние:

struct Counter { var count = 0 }

var a = Counter()
var b = a
a.count += 1
print(b.count) // 0, а не 1


Для общего состояния нужен класс.

Итог:

🔘 Дробите тяжёлые структуры, выносите данные в классы.
🔘 Доверяйте COW для стандартных типов.
🔘 Не путайте value- и reference-семантику.

Правильное использование структур сохранит скорость и безопасность вашего кода.

🔹 Курс «Основы IT для непрограммистов»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

🐸 Библиотека мобильного разработчика

#буст #MiddlePath #Swift
Please open Telegram to view this post
VIEW IN TELEGRAM
3
📱 Cоздаём свой RenderObject во Flutter

Многие во Flutter привыкли собирать интерфейс из виджетов, не задумываясь, как они вообще устроены. Действительно, стандартных виджетов хватает почти на всё. Почти. Иногда возникает задача, где готовых решений нет или их производительности недостаточно. В такие моменты хочется залезть глубже в движок Flutter и написать что‑то своё на уровне рендеринга.

Автор статьи рассказывает, как сделать собственный RenderObject (конкретно RenderBox) с нуля.

👉 Читать статью

🔸 Курс «Математика для Data Science»
🔸 Получить консультацию менеджера
🔸 Сайт Академии 🔸 Сайт Proglib

🐸 Библиотека мобильного разработчика

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🆚 В чем основное различие между viewModelScope и lifecycleScope в Android

При работе с корутинами в Android разработчики часто используют два самых распространённых скоупа — viewModelScope и lifecycleScope. Оба они упрощают управление асинхронными задачами и предотвращают утечки памяти, но при этом имеют разные цели и правила работы.

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

👉 Читать статью

🔹 Курс «Основы IT для непрограммистов»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

🐸 Библиотека мобильного разработчика

#свежак #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱1