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

Шкаф с материалами
https://t.me/cat_with_mobile_cabinet
Download Telegram
🔧LLDB - это низкоуровневый отладчик (debugger), входящий в состав базового элемента компилятора Swift - LLVM. Многие из нас создают программы не зная о том, что могут использовать его возможности при отладке, об этом мы сегодня и поговорим. LLDB имеет множество команд, которые можно использовать прямо в консоли Xcode.

Как только вы приостановили выполнение приложения (например по сработавшему брейкпоинту), в консоли появляется надпись (lldb), сообщаяющая, что вы можете вводить требуемые команды.

1️⃣Вывод значения параметра
Команды print и po, например
(lldb) po UIApplication.shared.delegate.someGlobalSet

При этом в консоли будет выведена полная структура объекта. Команды po и print имею немного отличающийся формат вывода.
po ...
▿ 2 elements
- 0 : 5
- 1 : 6

print ...
(Set<Int>) $R7 = 2 values {
[0] = 5
[1] = 6
}

2️⃣Изменение значение параметра прямо в ходе исполнения
Команды expression и e, например
(lldb) e parameterName = someValue

Эта команда позволит изменить значение параметра parameterName на someValue. При этом прямо в консоли присутсвует автодополнение, а также происходит проверка типов и изменяемости параметров.

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

3️⃣Текущий состав фрейма стека текущего потока
Команда frame, например
(lldb) frame variable

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

Эти команды лишь для затравки вашего интереса. LLDB предоставлет стооолько всего интересно, что я настоятельно рекомендую вам продолжить знакомтсво с ним самостоятельно. Например с помощью этой статьи или этого видео.

Другие полезные штуки по хэштегам #xcode #инструменты #пишемхорошийкод
Что такое универсальные приложения? У этого понятия, с точки зрения iOS-разработчика, есть два определения:

1) Приложения, которые могут работать не нескольких архитектурных решениях (различных устройствах, операционных системах и т.д.). Например, это единое для iOS, iPadOS и macOS приложение. Это круто, но об этом не сегодня.

2) Приложения, пользователем которого может стать человек вне зависимости от региональных и физических особенностей. И именно об этом я хотел бы сказать несколько слов.

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

При создании универсальных приложений вы решаете три вопроса:

Вопрос 1. Локализация - это поддержка приложением нескольких языков. Некоторые относят сюда и часовые пояса/календари, но нет, так как есть ...

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

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

Немного подробнее об этом можете прочитать в моем гите.

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

Более того, поддежка механизмов доступности позволит вам:
- исключить излишнюю перегруженность интерфейса (если вы не можете добраться до элемента с помощью встроенного в iOS механизма доступности, то вероятно структура интерфейса слишком перегружена);
- подготовить приложение к UI-тестам, так как для их реализации требуется использование механизмов Accessibilities.

И вот вам отличный выпуск подкаста Запуск завтра "Как незрячие люди пользуются технологиями и как сделать их доступнее" - о важности того, чтобы ваши приложения были доступными. Рассказывает незрячий пользователь о крутости Яндекс.Такси и ужасном состоянии Яндекс.Go.

Apple Подкасты
Яндекс Музыка
YouTube
🗺 Roadmap - карта тем для начинающего разработчика.

Отличный проект прекрасной статьи от @artyom_ivanov. Пока еще версия 0.1 (как говорит автор), но надеюсь на скорый релиз 1.0 😀

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

https://artyom.space/swift-roadmap/

#продуктивность
♥️ Практики, используемые в ядре Swift

Я люблю копать исходный код Swift. Конечно же, как нормальный программист, почти ничего там не понимаю, но от этого интерес только возрастает😂.

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

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

Задача тривиальная и никак не уровня "серьезного" разработчика. Но каждый раз я все делаю новым способом. Причем решение данного вопроса изменяется еще и в зависимости от языка, на котором я пишу код.

Сегодня в процессе изучения исходного кода типа Array и работы над разделом по массивам в моем справочнике по Swift на GitHub я наткнулся на довольно изящную реализацию данного вопроса, используемую при вызове свойства description у коллекций:

var result = ""
// ...
var first = true
for item in self {
if first {
first = false
} else {
result += ", "
}
debugPrint(item, terminator: "", to: &result)
}
// ...


Запятая добавляется перед каждым элементом, начиная со второго.

P.S. И что самое интересное, в данном куске кода используется inout - аргумент. Так что не такая уж это и плохая практика, видимо.

А как вы решаете такой тривиальный вопрос в своем коде?

#пишемхорошийкод #swiftcore
🏟Площадки для прокачки навыков программирования

Прошел отпуск, вышел Xcode 13 и Swift 5.5, а значит пора возвращаться к каналу. Скоро мы погрузимся в изучение акторов, новой асинхронки и зароемся в исходный код языка на яблочном гитхабе. А сейчас о другом.

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

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

Советую посмотреть каждый из сервисов.

- CoderByte
- Exercism
- Codewars
- CodingGame

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

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

Удачного кодинга!👩‍💻👨🏻‍💻🧑🏾‍💻
📕 Кое-что интересное, что сделает ваши приложения лучше.

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

Несколько дней назад я набрел на книгу Михаила Рубанова «Про доступность iOS». В книге очень доступно описываются доступные в iOS механизмы доступности 🙃 (слишком много доступности не бывает!).

Строго рекомендую к ознакомлению и надеюсь рано или поздно увидеть ее в бумажном формате на своей книжной полке.

Михаил, к слову - ведущий iOS-разработчик DoDo Engineering (пишут весь софт для одноименных пиццерий), и у него есть чему поучиться. Он, как никто другой, знает, насколько важно создавать приложения, которым могут пользоваться все, вне зависимости от физического состояния и возможностей.

☕️ P.S. Я пообщался с Михаилом и он проявил интерес к тому, чтобы стать специальным гостем на одной из наших будущих встреч Coffee&Code в Москве. Ждем с нетерпением!

Ссылка на книгу Про доступность iOS

Другие книги можно найти по тегу #книга
🛠 Что там с Xcode 13?

После первой недели работы с обновленной средой, свифтом и китом, могу сказать, что…

😊 Понравилось
- Обновление интерфейса.
- Автоимпорт библиотек в swift-файлы. Стоит только упомянуть UILabel, и среда автоматом добавляет import UIKit. Но какого это не работает с либами, загруженными из SPM и CocoaPods?
- Button Configuration. Прямо кайф

🙃 Не понравилось
- Увеличившееся время сборки проектов.
- Странно работающий автокомплит. Может он и крутой, но я пока его не понял.
- Баги, баги, способные привести к потере части кода, что у меня и произошло. Каким-то неведомым образом Xcode начал сохранять часть файлов не в папку проекта, а вообще в другие папки… Но при этом пока еще не было ни одного внезапного краша.

🧐 Вывод
- Если начал проект на предыдущей версии, то лучше заверши версию там же. Избегай мажорных обновлений до выпуска в прод.
- Новые проекты начинай на Xcode 13, особенно если хочешь пощупать новые возможности языка и iOS SDK.
- Храни и используй 2 версии среды, 12.5.1 для стабильной работы со старыми проектами, и 13 (примерно так делаю я всегда).

Вот вам пару программ, которые помогут в этом
- XcLauncher
- Xcodes

Ну или просто качай одну версию со стора, а другую с портала разработчиков.
👮🏼‍♂️О безопасности iOS 🔐

Общаясь с коллегами и знакомыми, пользователями устройств Apple, я стал замечать интересную тенденцию: многие считают, что «Раз я пользуюсь iPhone и mac, то с точки зрения конфиденциальности данных я в полной безопасности. Утечка невозможна, так как система не взламываема, а все устанавливаемые из AppStore приложения проходят жестокую модерацию». Особенно это заметно видно на фоне последней яблочной рекламной компании “Конфиденциальность. Это про iPhone”.

Но iOS и macOS небезупречны. Прекрасным доказательством этому служит расследование организации Amnesty International, получившее название «Проект Пегас» (почитать можно тут | ENG) или в августовском номере журнала Хакер. Если кратко, то на июль 2021 года даже последняя версия iOS (14.6) может быть взломана без необходимости пользователя совершать какие-либо действия.

Это конечно не значит, что за вами охотятся израильские шпионы 🕵🏻, но это говорит о том, что уязвимости существуют, а с выходом новых версий ПО - появляются новые. При этом неумелые действия пользователей делают ситуацию еще хуже, так как большинству из нас не нужно иметь дыры в защите: мы сами устанавливаем приложения из недоверенных источников и переходим по сомнительным ссылкам. Мы же уверены, что «продукцию Apple невозможно взломать».

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

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

К чему это я.

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

Ну и будьте просто хорошими людьми 😌. Всем отличного воскресенья
🎨 Релиз SF Symbols 3

В конце сентября вышла финальная версия яблочного «каталога и конструктора символов» SF Symbols 3.

Нововведения доступны для iOS 15, iPadOS 15, macOS Monterey (пока что находится в бете), tvOS 15, и watchOS 8.

- 600+ новых символов.
- Расширенные возможности цветовой кастомизации.
- Прокачанный импорт собственных символов.
- Местами обновленный интерфейс.

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

👨‍🔬Мое мнение: программа обязательно к ознакомлению и употреблению.

Другие полезные #инструменты
💬Текстовое поле для ввода кода подтверждения из смс или email

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

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

В итоге оформил в качестве SPM-пакета.

📒 Кратко о возможностях:

- Настройка количества блоков и элементов в этих блоках (видите в середине разрыв между блоками?);
- использование как в коде, так и с помощью Interface Builder;

🛠 В общем, если кому потребуется:

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

В следующем релизе расширю возможности кастомизации и доступное API. Далее добавлю конфигуратор элементов, с помощью которого можно будет формировать поле любого вида (текстовые префиксы, постфиксы, сепараторы между блоками).

Смотреть тут

#библиотека
📱 Apple Tech Talks 2021

Если вы участвуете в Apple Developer Program, то уже получили соответствующий mail. Продублирую: 25 октября - 17 декабря - даты проведения Tech Talks 2021, на котором его участники смогут задать вопросы спикерам и узнать, как использовать последние нововведения.

📣 Программа выступлений очень большая и будет пополняться вплоть за завершения. Вот несколько интересных лично мне тем:

- A conversation with SwiftUI Engineering
- Meet with Technology Evangelism
- Meet with App Review
- Meet with the App Store Connect team

Обратите внимание, что встречи проводятся в ограниченном формате по предварительной записи. Но начиная с 1 ноября их можно будет найти в приложении Apple Developer.

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

#мероприятия
Минута до старта 🚀
👩‍💻ONLINE
📆31 октября (воскресенье)
19:00 по Москве


Coffee&Code в новом формате аудиочата. Как и всегда, пообщаемся на актуальные темы:

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

Встречаемся в 19:00 в этом телеграм-канале.