Мобильный кот
2.72K subscribers
88 photos
3 videos
2 files
87 links
Все, что считаю важным про жизнь мобильного разработчика

Шкаф с материалами
https://t.me/cat_with_mobile_cabinet
Download Telegram
Семантическое версионирование - человечья нумерация версий пакетов

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

Версия указывается в формате X.Y.Z-STATE.

🔸 X - мажорная/старшая версия пакета. Увеличиваем ее когда в пакете происходят изменения без обратной совместимости, при этом удаляем все deprecate-методы. Изменение X ведет за собой обнуление Y и Z.

🔸 Y - минорная/младшая версия пакета. Увеличиваем, когда в пакете появляется новая функциональность. Придержите коней, и не удаляйте старевшие методы, помечайте их как deprecated, тем самым вы подготовите пользователей к их удалению.

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

🔸 STATE - опциональная мета-информация о состоянии пакета: alpha, beta, rc и т.д.

Более подробно почитать можно тут и на хабре.

#пишемхорошийкод
Proxyman - дебаггер/снифер запросов, который делает вашу профессию интереснее.

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

Вот ты изучил API сервера, написал прекрасный код, создал нужные структуры, подписанные на протокол Codable, далее пульнул все это в URLSession и наслаждаешься результатом. Но внезапно что-то пошло не так: то ли запрос неверный, то ли ответ кривой (что более вероятно, твой код конечно же идеален).

И на этом этапе вступает в дело дебаггер сетевых запросов Proxyman, или один из его аналогов: Postman и Charles. Ты смотришь тело запроса и ответа и определяешь, что идет не так, где твой код неверно кодирует JSON. Это очень полезная тулза, которая должна быть наготове у каждого разработчика. Установка и настройка с установкой сертификатов, занимает всего пару минут, а удовольствие от использования не проходит никогда.

Кстати в последнем опросе от Devcrowd Proxyman вошел в топ инструментов разработчика. А узнал о нем в свое время от основателя Coffee&Code Сергея и моего питерского коллеги по VK - Артема. За что им огромное спасибо.

#инструменты
Книга Наука DevOps. Ускоряйся

Сеньор кот-devops представляет вам контент не для мальчика, но мужа. Книга - кладесь знаний для начальника любого уровня и того, кто стремится им стать. О том, как организовать эффективную разработку продукта, ускорить время его доставки до пользователей, внедрить современные методологии разработки, привлечь и увлечь разработчиков.

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

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

#книга
NEOVIM - идеальный консольный текстовый редактор с максимальным уровнем кастомизации

NeoVim - это форк хорошо известного VIM. И если в вашей жизни есть что-то кроме Xcode или Android Studio, или вы просто любите используете Терминал, то вам стоит попробовать.

Как было сказано в одном из обзоров - увеличение производительности особенно прочувствуют те, кто обладает десятипальцевым способом печати. В этом случае мышка совершенно не нужна (да она и не поддерживается в редакторе), а все операции производятся практически без смещения кистей. То есть вам не нужно постоянно двигать руку с клавиатуры к мышке и обратно. Звучит на самом деле интересно. А в купе с максимальным уровнем кастомизации и возможностями iTerm + Oh My Zsh - NeoVim может стать буквально продолжением ваших пальцев.

Ну а если Vim и так ваш любимый редактор, то просто попробуйте. Установка через Brew, MacPorts или самостоятельная сборка из исходников.

https://github.com/neovim/neovim

#инструменты
Forwarded from Vladislav Mokrov
Network Link Conditioner
Теперь встроенный в 14 хкоде)
Display Control - синхронное управление яркостью внешнего дисплея и Mac Book

Наверняка всем, кто использует внешний дисплей вместе с ноутбуком, знакома ситуация, когда вечером сел поработать, снизил яркость ноута, а монитор выжигает глаза при показе любого белого изображения. Проблема решается покупкой дорого Apple Display или некоторых моделей LG Ultrafine с поддержкой управления яркостью, но это что-то на бохатом.

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

Поменяли яркость ноута кнопочка - вслед за ней поменялась яркость монитора!😉
Это пожалуй одна из самых полезных программулин, найденных мной за предыдущий год.

Скачиваем тут

Кто не любит бесплатное ПО, то есть платные аналоги: Display Buddy и Lunar

😀 UPD. Более свежее приложение от того же автора с пачкей новых функций - Better Display

#инструменты
Please open Telegram to view this post
VIEW IN TELEGRAM
@_spi - атрибут для тех, кто пишет фреймворки.

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

Обычно используют следующие варианты решения:
1) «Нет никаких приватных функций, пусть все функции будут общедоступными». Но так вы перегружаете список доступных функций, окно автодополнения и вызываете у пользователя библиотеки вопросы.
2) «Сервисные функции начинаются с _», вроде _enableDebugMode(). Итог как и в пункте 1.
3) Самый радикальный, но наиболее безопасный - выпуск нескольких версий библиотеки, одна со скрытым функционал, и одна только с общедоступным.

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

Так например вы можете пометить любые функции, методы, а возможно и свойства (не знаю, не проверял) с помощью @_spi(имя), и данный элемент станет доступным пользователю только если он импортирует библиотеку с помощью конструкции ```@_spi(имя) import ВашаБиблиотека```.

Пример смотрите в картинке ниже поста.

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

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

SPI - System Programming Interface. Это тот же API, только «системный» или «сервисный».

Почитать можно тут. Так же обратите внимание на @_spiOnly и @_spi_available по той же ссылке.
🎧🎙️Подкаст Кофе и Код с моим участием «ушел на золото».

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

Спасибо, что пишите и даете обратную связь по вашим успехам.

https://coffeecodepodcast.mave.digital

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

https://github.com/apple/swift-evolution/blob/main/proposals/0380-if-switch-expressions.md

В Swift 5.9 if и switch теперь официально станут выражениями, а значит мы сможем писать, как в Котлине

let result = if …
let result = switch …
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩 Отличные новости с самого утра
Apple частично открыла исходный код Foundation, разместив его на своем github

Фреймворк постепенно переписывают на Swift, и при желании каждый желающий может внести свой вклад.
Please open Telegram to view this post
VIEW IN TELEGRAM
😭 Баг или фича

Неоднозначное поведение, которое воспроизводится в Xcode 14.2, и вероятно/возможно/сомнительно не воспроизводится в Xcode 14.3

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

Теперь чуть подробнее.

1⃣ Пример. Обычная структура с одним аргументом-замыканием в инициализаторе. if let value обращается к локальному для функции value, которое не является опционалом. Все окей, все логично, показана ошибка.

2⃣ Пример. Структура из SwiftUI (из-за чего собственно и произошел затык). HStack с замыканием, но в этом случае ошибки нет, так как value обращается не к локальному для функции параметру, а к опциональному value - свойству самого объекта SomeStruct.

Почему? я хз)

3⃣ Пример. Пришла идея, что проблема может быть связана с использованием resultBuilder, так как замыкание, передаваемое в HStack - это ViewBuilder, который является resultBuilder. Попробовал воспроизвести - воспроизводится. Причина в этом.

Почему? хз) Но интересно.

🥂Ниже файл с проектом.
Please open Telegram to view this post
VIEW IN TELEGRAM
В недавнем обновлении Telegram анонсировал шаринг папок, и я с радостью готов поделиться своим списком ресурсов, которые читаю сам:

🥂 Лучшие ресуры по iOS-разработке.

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

UPD. Если ссылка не открывается, то обновите Telegram
Please open Telegram to view this post
VIEW IN TELEGRAM
😂 Есть знатоки?

Попробуйте убрать ошибку.

А без классического Type Eraser и какого-нибудь AnyFoo, AnyHashable и тд?
Please open Telegram to view this post
VIEW IN TELEGRAM
📕 LLVM: Инфраструктура для разработки компилятора

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

Компилятор Swift основан на проекте LLVM. Это целая инфраструктура программных решений, на ее основе существуют решения для C, C++, Objective-C, JavaScript, Kotlin и многих других языков.

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

Если вы на конфе, то заглядывайте поздороваться на стенд VK. Тут все, Coffee&Code, SwiftBook, Стас, Дюша☺️