iOS Dev
❗️Apple Search Ads заблокировал все рекламные инструменты и кампании для разработчиков из РФ и Беларуси Сегодня все разработчики получили письмо о том, что им больше недоступны эти инструменты от Apple. Я тоже получил такое письмо утром, Apple ссылается…
Как вы считаете, будут ли заблокированы учетки Apple Developer для разработчиков из РФ и Беларуси?
Anonymous Poll
37%
Да
63%
Нет
Как повысить видимость приложения на устройстве
Читатель нашего канала прислал любопытный способ, как можно с помощью одной строки помочь пользователям проще найти ваше приложение на iOS.
Для этого стоит воспользоваться ключом
На скриншоте пример для приложения iOS IQ (попробовал замаскироваться под твиттер, чтобы заменить его более полезным контентом), обновление которого уже скоро будет доступно подписчикам.
📖 Целиком статья доступна здесь, можно посмотреть на примеры и добавить несколько👏 .
😃 iOS Dev — а вот тут я писал про способ использования для NSUserActivity
Читатель нашего канала прислал любопытный способ, как можно с помощью одной строки помочь пользователям проще найти ваше приложение на iOS.
Для этого стоит воспользоваться ключом
kMDItemKeywords
, который не описан в документации (да и вообще там якобы только macOS) и использовать нужные вам теги.На скриншоте пример для приложения iOS IQ (попробовал замаскироваться под твиттер, чтобы заменить его более полезным контентом), обновление которого уже скоро будет доступно подписчикам.
📖 Целиком статья доступна здесь, можно посмотреть на примеры и добавить несколько
Please open Telegram to view this post
VIEW IN TELEGRAM
Скрытые возможности крашлогов: как читать информацию об ошибках
Никто не любит краши. Бывает, что их сложно анализировать, а исследование причин может отнять большое количество времени (и возможно, даже не всегда привести нас к решению).
Патрик Уордл проделал огромную работу и написал статью, в которой объяснил, как упростить понимание структуры и информации из крашлогов.
Он признаёт, что сам путь исследования требует глубокого понимания реверс-инжиниринга, поэтому поверхностно ещё и затронуты темы дизассемблирования и отладки на примере ARM64.
Сам материал наполнен большим количеством примеров не только под iOS, но и macOS, и, даже показан баг 0day (который затрагивает даже бетки 15 макоси).
📖 Рекомендую прочитать и сохранить исследование.
А если вы хотите узнать, что, например, означает EXC_BAD_ACCESS — у нас в канале уже есть и такой пост.
✅ Кстати, что в ноушне есть раздел по повышению производительности приложения, информация из которого поможет уменьшить причины появления самых разных крашей.
😃 iOS Dev
Никто не любит краши. Бывает, что их сложно анализировать, а исследование причин может отнять большое количество времени (и возможно, даже не всегда привести нас к решению).
Патрик Уордл проделал огромную работу и написал статью, в которой объяснил, как упростить понимание структуры и информации из крашлогов.
Он признаёт, что сам путь исследования требует глубокого понимания реверс-инжиниринга, поэтому поверхностно ещё и затронуты темы дизассемблирования и отладки на примере ARM64.
Сам материал наполнен большим количеством примеров не только под iOS, но и macOS, и, даже показан баг 0day (который затрагивает даже бетки 15 макоси).
📖 Рекомендую прочитать и сохранить исследование.
А если вы хотите узнать, что, например, означает EXC_BAD_ACCESS — у нас в канале уже есть и такой пост.
Please open Telegram to view this post
VIEW IN TELEGRAM
Зарплаты стажёров и джунов в IT
На Хабр.карьере вышло новое исследование зарплат, на этот раз изучили зарплатные возможности для новичков в IT — стажеров и джунов.
Главные выводы:
1️⃣ Проще попасть в IT с позиции стажера.
2️⃣ Доля вакансий с удаленкой для джунов и стажеров сейчас 60%, это на 17% больше, чем в начале 2023.
3️⃣ Больше всего начинающие IT-специалисты зарабатывают в Ozon Tech, YADRO и Холдинге Т1.
💸 Эти данные основаны на реальных зарплатах, а больше про динамику на рынке можно узнать в этом посте.
😃 iOS Dev
На Хабр.карьере вышло новое исследование зарплат, на этот раз изучили зарплатные возможности для новичков в IT — стажеров и джунов.
Главные выводы:
1️⃣ Проще попасть в IT с позиции стажера.
2️⃣ Доля вакансий с удаленкой для джунов и стажеров сейчас 60%, это на 17% больше, чем в начале 2023.
3️⃣ Больше всего начинающие IT-специалисты зарабатывают в Ozon Tech, YADRO и Холдинге Т1.
Please open Telegram to view this post
VIEW IN TELEGRAM
Отслеживание утечек памяти в iOS-приложении со SwiftUI в Runtime
Декларативность, а также то, что в SwiftUI нет явно выраженного жизненного цикла для вьюх, значительно повышает трудности при поиске утечек по сравнению с UIKit.
📖 На хабре iOS-разработчик Фарид поделился своим решением в компании для упрощения поиска проблем утечек в таких проектах.
Основные блоки:
1️⃣ Рассмотрены основные подходы для поиска утечек.
2️⃣ Поиск оптимального варианта для нахождения таких проблем.
3️⃣ Поиск опций для подстраховки от утечек в будущем.
😃 iOS Dev
Декларативность, а также то, что в SwiftUI нет явно выраженного жизненного цикла для вьюх, значительно повышает трудности при поиске утечек по сравнению с UIKit.
📖 На хабре iOS-разработчик Фарид поделился своим решением в компании для упрощения поиска проблем утечек в таких проектах.
Основные блоки:
1️⃣ Рассмотрены основные подходы для поиска утечек.
2️⃣ Поиск оптимального варианта для нахождения таких проблем.
3️⃣ Поиск опций для подстраховки от утечек в будущем.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Как использовать файлы EditorConfig в Xcode 16
🛠 Если вы работали/работаете над несколькими проектами с разным кодстайлом, то может быть такое, что приходится настраивать параметры Xcode каждый раз при переключении между проектами.
А если в проекте нет линтера, который обеспечивает соблюдение стиля и вы вдруг забудете применить эти настройки, то в итоге можно легко получить непоследовательное форматирование кода во всем проекте.
В Xcode 16 добавлена поддержка файлов EditorConfig, которые позволяют задавать настройки редактора Xcode для каждого проекта.
📖 В этой статье вы узнаете, как настроить файлы EditorConfig в Xcode и какие настройки поддерживаются на данный момент.
✅ Больше советов по работе с инструментарием вы можете найти здесь.
😃 iOS Dev
🛠 Если вы работали/работаете над несколькими проектами с разным кодстайлом, то может быть такое, что приходится настраивать параметры Xcode каждый раз при переключении между проектами.
А если в проекте нет линтера, который обеспечивает соблюдение стиля и вы вдруг забудете применить эти настройки, то в итоге можно легко получить непоследовательное форматирование кода во всем проекте.
В Xcode 16 добавлена поддержка файлов EditorConfig, которые позволяют задавать настройки редактора Xcode для каждого проекта.
📖 В этой статье вы узнаете, как настроить файлы EditorConfig в Xcode и какие настройки поддерживаются на данный момент.
Please open Telegram to view this post
VIEW IN TELEGRAM
SwiftUI AlignmentGuide: расширенное руководство
📖 На хабре опубликована большая статья с примерами для работы с модификатором AlignmentGuide, описано, когда могут пригодиться ViewDimensions и какие есть альтернативы.
🛠А ещё есть интерактивный сайт, где можно посмотреть не только на самые разные примеры верстки, но и поперетаскивать блоки.
😃 iOS Dev
📖 На хабре опубликована большая статья с примерами для работы с модификатором AlignmentGuide, описано, когда могут пригодиться ViewDimensions и какие есть альтернативы.
🛠А ещё есть интерактивный сайт, где можно посмотреть не только на самые разные примеры верстки, но и поперетаскивать блоки.
Please open Telegram to view this post
VIEW IN TELEGRAM
DebugDescription в Xcode 16: новый макрос для упрощения отладки
При работе с кастомными типами отладка может быть непростой задачей.
Для упрощения можно юзать
А с помощью макроса DebugDescription, можно вызвать debugDescription и чекнуть детальное описание.
😃 iOS Dev
При работе с кастомными типами отладка может быть непростой задачей.
Для упрощения можно юзать
CustomDebugStringConvertible
, который позволяет кастомизировать вывод в таких случаях.А с помощью макроса DebugDescription, можно вызвать debugDescription и чекнуть детальное описание.
Please open Telegram to view this post
VIEW IN TELEGRAM
Работа с данными банковских приложений на iOS с использованием SwiftUI + Vision
Одна из перспективных задач при работе с любыми приложениями — упрощение ввода, так как это экономия времени, сил и способ избежать потенциальных ошибок.
Но у того же FinanceKit есть множество ограничений: минимальная ось 17.4 и требования к самим компаниям, да и пользователи вряд ли захотят делиться своими данными.
🧑💻 Наш читатель, Слава Слуцкер, придумал необычный и интересный способ для решения задачи сбора данных о кэшбеке из разных источников на базе скриншотов (но, конечно, потенциал использования выше).
Для этого он использовал связку Vision (для распознавания определённых строк и дальнейшего парсинга процентов) и SwiftUI. Vision умеет работать в том числе и с разными языками, что безусловный плюс, а ещё прямо на устройстве.
📖 В статье на хабре вы можете почитать о процессе решения этой задачи, познакомиться с кодом и, возможно, использовать это в своих приложениях. Кстати, посмотреть результат (и поделиться фидбэком) можно в тестфлайте.
😃 iOS Dev
Одна из перспективных задач при работе с любыми приложениями — упрощение ввода, так как это экономия времени, сил и способ избежать потенциальных ошибок.
Но у того же FinanceKit есть множество ограничений: минимальная ось 17.4 и требования к самим компаниям, да и пользователи вряд ли захотят делиться своими данными.
🧑💻 Наш читатель, Слава Слуцкер, придумал необычный и интересный способ для решения задачи сбора данных о кэшбеке из разных источников на базе скриншотов (но, конечно, потенциал использования выше).
Для этого он использовал связку Vision (для распознавания определённых строк и дальнейшего парсинга процентов) и SwiftUI. Vision умеет работать в том числе и с разными языками, что безусловный плюс, а ещё прямо на устройстве.
📖 В статье на хабре вы можете почитать о процессе решения этой задачи, познакомиться с кодом и, возможно, использовать это в своих приложениях. Кстати, посмотреть результат (и поделиться фидбэком) можно в тестфлайте.
Please open Telegram to view this post
VIEW IN TELEGRAM
Как автоматически локализовать секцию «Что нового?» с помощью App Store connect API
При создании новой версии приложения в App Store Connect мы обязаны указывать какую-то инфу, которая меняется нечасто (конечно, если у вас нет SMM-команды, которая отвечает за юмор и репосты скриншотов).
Раньше для этого повсеместно использовали fastlane, но сейчас всё чаще я слышу от коллег о переходе на нативное апи (некоторые пишут свою обёртку, некоторые используют готовые решения).
Эти способы позволяют сэкономить немного времени, усилий и устранить человеческие ошибки.
📖 В этой статье рассказано, как использовать API App Store Connect для предварительного указания информации при создании новой версии приложения.
🔗 А вот здесь описаны и другие кейсы использования этого API.
😃 iOS Dev
При создании новой версии приложения в App Store Connect мы обязаны указывать какую-то инфу, которая меняется нечасто (конечно, если у вас нет SMM-команды, которая отвечает за юмор и репосты скриншотов).
Раньше для этого повсеместно использовали fastlane, но сейчас всё чаще я слышу от коллег о переходе на нативное апи (некоторые пишут свою обёртку, некоторые используют готовые решения).
Эти способы позволяют сэкономить немного времени, усилий и устранить человеческие ошибки.
📖 В этой статье рассказано, как использовать API App Store Connect для предварительного указания информации при создании новой версии приложения.
🔗 А вот здесь описаны и другие кейсы использования этого API.
Please open Telegram to view this post
VIEW IN TELEGRAM
Работа с JSON в Swift: расширенное руководство
Парсинг JSON чаще всего является базой приложения для iOS, использующим REST API.
Делюсь руководством, которое поможет освежить знания (состоит из нескольких глав, в каждой их которых подразделы с примерами).
1️⃣ Как работать с данными JSON в Swift.
2️⃣ Продвинутые техники для парсинга сложных данных.
3️⃣ Создание приложения SwiftUI, которое загружает и парсит JSON.
🛠 Проект целиком доступен и на github.
🔗 А вот тут я писал про четыре полезных сервиса для упрощения работы с JSON.
😃 iOS Dev
Парсинг JSON чаще всего является базой приложения для iOS, использующим REST API.
Делюсь руководством, которое поможет освежить знания (состоит из нескольких глав, в каждой их которых подразделы с примерами).
1️⃣ Как работать с данными JSON в Swift.
2️⃣ Продвинутые техники для парсинга сложных данных.
3️⃣ Создание приложения SwiftUI, которое загружает и парсит JSON.
🛠 Проект целиком доступен и на github.
🔗 А вот тут я писал про четыре полезных сервиса для упрощения работы с JSON.
Please open Telegram to view this post
VIEW IN TELEGRAM
Планируете что-то обновить после презентации?
Anonymous Poll
16%
AirPods (или AirPods Max)
12%
Apple Watch (или ultra)
5%
iPhone 16 (или plus)
24%
iPhone 16 pro (или pro max)
60%
Ничего менять не планирую
Camera Control в iPhone16: AVCaptureControl и фреймворк LockedCameraCapture
Буквально вчера показали новый телефон, а у нас уже появилсяновый островок новый контрол, с которым можно работать.
📖 На официальной странице Apple можно познакомиться с лучшими практиками в плане дизайна.
А из того, что нам может пригодиться:
1️⃣ AVCaptureControl — новый контрол только для 16/16 Pro (примеры работы - тут).
2️⃣ LockedCameraCapture — новый фреймворк, с помощью которого можно создать расширение для запуска камеры на залоченном девайсе. Туториал уже доступен (но, как и всегда, есть ряд ограничений).
😃 iOS Dev
Буквально вчера показали новый телефон, а у нас уже появился
📖 На официальной странице Apple можно познакомиться с лучшими практиками в плане дизайна.
А из того, что нам может пригодиться:
1️⃣ AVCaptureControl — новый контрол только для 16/16 Pro (примеры работы - тут).
2️⃣ LockedCameraCapture — новый фреймворк, с помощью которого можно создать расширение для запуска камеры на залоченном девайсе. Туториал уже доступен (но, как и всегда, есть ряд ограничений).
Please open Telegram to view this post
VIEW IN TELEGRAM
Swift Testing: Разбор API и макроса
Новый понятный и выразительный API делает написание тестов более простым, а в самом интерфейсе Xcode сделали большой шаг вперёд для оповещений при ошибках (или же корректном выполнении).
📖 В этой статье уделено внимание написанию тестов с использованием новых возможностей, а также разобрана миграция с XCTests.
🔗 А вот тут можно детальнее познакомиться с улучшениями и преимуществами по сравнению с XCTests.
😃 iOS Dev
#expect
Новый понятный и выразительный API делает написание тестов более простым, а в самом интерфейсе Xcode сделали большой шаг вперёд для оповещений при ошибках (или же корректном выполнении).
📖 В этой статье уделено внимание написанию тестов с использованием новых возможностей, а также разобрана миграция с XCTests.
🔗 А вот тут можно детальнее познакомиться с улучшениями и преимуществами по сравнению с XCTests.
Please open Telegram to view this post
VIEW IN TELEGRAM
iOS Dev
🥳 Нужен будет только один набор скриншотов при загрузке приложения в App Store (как для iPhone, так и для iPad). 📖 Отличная новость для дизайнеров, инди-разработчиков, да и для компаний тоже. А ещё доступ к запросу фичеринга будет более явным (конечно же…
Обновление App Store Connect
C сегодняшнего дня обязателен только один набор скриншотов для приложений (и для iPhone, и для iPad).
🤩 Теперь выкладывать приложения будет проще (и быстрее).
😃 iOS Dev
C сегодняшнего дня обязателен только один набор скриншотов для приложений (и для iPhone, и для iPad).
Please open Telegram to view this post
VIEW IN TELEGRAM
Оптимизация использования памяти для SwiftUI+CoreData
Несмотря на наличие lazy containers в SwiftUI, и в целом механизмов для оптимизации CoreData, по мере увеличения сложности приложений могут возникнуть ситуации, когда можно поймать краши из-за слишком большого использования памяти.
Важно понимать не только особенности работы с вьюхами, но и свойства самой CoreData.
📖 В этом проекте рассмотрен пошаговый процесс оптимизации работы с памятью для демонстрационного приложения (изначально использующего 1,6 ГБ памяти для отображения всего лишь 100 элементов данных), которое в итоге сможет работать с сотнями объектов и юзать всего 200 МБ.
🛠 Код приложения доступен на GitHub.
✅ Кстати, если вы хотите почитать в целом про память: ARC, side table, флаги, утечки и многое другое (и поотвечать на вопросы) — доступ можно получить здесь.
😃 iOS Dev
Несмотря на наличие lazy containers в SwiftUI, и в целом механизмов для оптимизации CoreData, по мере увеличения сложности приложений могут возникнуть ситуации, когда можно поймать краши из-за слишком большого использования памяти.
Важно понимать не только особенности работы с вьюхами, но и свойства самой CoreData.
📖 В этом проекте рассмотрен пошаговый процесс оптимизации работы с памятью для демонстрационного приложения (изначально использующего 1,6 ГБ памяти для отображения всего лишь 100 элементов данных), которое в итоге сможет работать с сотнями объектов и юзать всего 200 МБ.
🛠 Код приложения доступен на GitHub.
Please open Telegram to view this post
VIEW IN TELEGRAM
Подборка вопросов по Swift и iOS с технических собеседований 2024
Я продолжаю обновлять базу знаний, а также собирать материалы (и новые темы) для будущего обновления приложения iOS IQ.
Сегодня готов поделиться здесь огромным материалом (а в ноушене комментариями, дополнениями и примерами).
1. В чем разница между статической переменной и переменной класса?
Почему их природа схожа, и при чём здесь наследование?
2. Вычисляются ли ленивые переменные более одного раза?
И почему потокобезопасность важна.
3. В чём разница между self и Self?
Разница же в Swift заключается в их использовании и контексте. Если вы писали на других языках, то наверняка знаете для чего там использовался this или typeof (в ноушне много примеров).
4. Как сделать методы опциональными в протоколе?
Есть два подхода - optional и extension (а вот как их использовать - в разборе вот здесь).
5. Как происходит оптимизация использования памяти в UITableView?
В канале я регулярно делюсь проблемами и решениями для оптимизации. Например, как быть, если у нас очень много ячеек. В Notion есть пример разбора и таких ситуаций.
6. Что такое Dependency Injection и каковы его преимущества?
Здесь, как вы уже догадались, речь про Constructor injection/Property injection/Method injection. Ну и про описание преимуществ, конечно.
7. Объясните разницу между throws и rethrows в Swift
Как правильно использовать do-catch и многое другое.
8. Объясните типы сессий и задач, поддерживаемые классом URLSession.
Default Session/Ephemeral Session/Background Session. В этой теме рассмотрено, есть ли у нас способ повторить неудавшиеся запросы.
9. Сравните статические и динамические библиотеки
Про то, что может включать каждый тип либ, что происходит при компиляции, как быть с обновлениями.
10. Как бы вы реализовали список с бесконечной прокруткой?
Большой разбор на примерах.
11. Что такое copy-on-write в Swift? Объясните, как настроить его реализацию.
Конечно, эта техника позволяет значительно сократить использование памяти и повысить производительность. Но вот что внутри?
12. Объясните, как используется паттерн Factory и какую проблему решает этот паттерн.
Тут можно не забыть об использовании этой подборки
13. Что такое APNS и как он работает?
14. Объясните назначение ключевого слова «mutating» в Swift.
15. В чем разница между
16. Что такое Mocks и Stubs и в чем разница между ними?
Назначение/Поведение/Использование.
17. Объясните протоколы Equatable, Hashable и Comparable в Swift.
18. Что означает UIApplicationMain?
19. Объясните, почему Swift является типобезопасным языком?
Все о Strong Type, Type Inference, Type Casting, optional, дженериках.
20. Зачем вам нужны escaping closures и когда их следует использовать?
✅ Напомню, что в бусти продолжает действовать выгодное предложение (а если вам нравится канал — то ещё и здесь, в телеграм), и вы уже сейчас можете получить доступ не только к этому материалу, но и к большому количеству тем для собеседований и разбору практических задач.
😃 iOS Dev
Я продолжаю обновлять базу знаний, а также собирать материалы (и новые темы) для будущего обновления приложения iOS IQ.
Сегодня готов поделиться здесь огромным материалом (а в ноушене комментариями, дополнениями и примерами).
1. В чем разница между статической переменной и переменной класса?
Почему их природа схожа, и при чём здесь наследование?
2. Вычисляются ли ленивые переменные более одного раза?
И почему потокобезопасность важна.
3. В чём разница между self и Self?
Разница же в Swift заключается в их использовании и контексте. Если вы писали на других языках, то наверняка знаете для чего там использовался this или typeof (в ноушне много примеров).
4. Как сделать методы опциональными в протоколе?
Есть два подхода - optional и extension (а вот как их использовать - в разборе вот здесь).
5. Как происходит оптимизация использования памяти в UITableView?
В канале я регулярно делюсь проблемами и решениями для оптимизации. Например, как быть, если у нас очень много ячеек. В Notion есть пример разбора и таких ситуаций.
6. Что такое Dependency Injection и каковы его преимущества?
Здесь, как вы уже догадались, речь про Constructor injection/Property injection/Method injection. Ну и про описание преимуществ, конечно.
7. Объясните разницу между throws и rethrows в Swift
Как правильно использовать do-catch и многое другое.
8. Объясните типы сессий и задач, поддерживаемые классом URLSession.
Default Session/Ephemeral Session/Background Session. В этой теме рассмотрено, есть ли у нас способ повторить неудавшиеся запросы.
9. Сравните статические и динамические библиотеки
Про то, что может включать каждый тип либ, что происходит при компиляции, как быть с обновлениями.
10. Как бы вы реализовали список с бесконечной прокруткой?
Большой разбор на примерах.
11. Что такое copy-on-write в Swift? Объясните, как настроить его реализацию.
Конечно, эта техника позволяет значительно сократить использование памяти и повысить производительность. Но вот что внутри?
12. Объясните, как используется паттерн Factory и какую проблему решает этот паттерн.
Тут можно не забыть об использовании этой подборки
13. Что такое APNS и как он работает?
14. Объясните назначение ключевого слова «mutating» в Swift.
15. В чем разница между
@StateObject
и @ObservedObject
в SwiftUI?16. Что такое Mocks и Stubs и в чем разница между ними?
Назначение/Поведение/Использование.
17. Объясните протоколы Equatable, Hashable и Comparable в Swift.
18. Что означает UIApplicationMain?
19. Объясните, почему Swift является типобезопасным языком?
Все о Strong Type, Type Inference, Type Casting, optional, дженериках.
20. Зачем вам нужны escaping closures и когда их следует использовать?
Please open Telegram to view this post
VIEW IN TELEGRAM
Кастомизация тем в SwiftUI с использованием ShapeStyle
В SwiftUI настройка внешнего вида приложения на базе кастомной темы безусловно улучшит пользовательский опыт.
Первоначальный подход к управлению этими настройками предполагает монотонное повторение одних и тех же действий для разных экранов.
📖 В этой статье рассмотрен способ с использованием кастомного ShapeStyle для создания собственных тем во всем приложении.
😃 iOS Dev
В SwiftUI настройка внешнего вида приложения на базе кастомной темы безусловно улучшит пользовательский опыт.
Первоначальный подход к управлению этими настройками предполагает монотонное повторение одних и тех же действий для разных экранов.
📖 В этой статье рассмотрен способ с использованием кастомного ShapeStyle для создания собственных тем во всем приложении.
Please open Telegram to view this post
VIEW IN TELEGRAM