iOS Dev
7.51K subscribers
939 photos
64 videos
1 file
1.06K links
🍏Канал об iOS-разработке, необычных подходах и решениях.
👨‍💻Автор: Виктор Грушевский (@Viktorianec)
Темы:
⭐️ Подготовка к собеседованиям.
⭐️ Архитектуры и алгоритмы.
⭐️ Код. Много кода.

⚒️База знаний: https://boosty.to/ios_dev

#ios #mobile #swift
加入频道
iOS Keychain: использование ключей, хранящихся в Secure Enclave

📲 Одной из замечательных аппаратных особенностей iPhone является Secure Enclave — аппаратный элемент, предназначенный для защиты конфиденциальных данных, включая биометрические: отпечатки пальцев, если устройство поддерживает Touch ID, и сканирование лица в случае Face ID.

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

🔐 ОС или программа может взаимодействовать с Secure Enclave с помощью специальных команд, который не позволяет получить доступ к необработанным данным.

В публикации на Medium рассматривается:

— Генерация и получение ключей.
— Алгоритмы шифрования и дешифрования.
— Как это работает в крипто-API Apple.
— Механизм для подписания и проверки подлинности.

😅Не стоит бояться констант вида:

kSecKeyAlgorithmECIESEncryptionCofactorVariableIVX963SHA256AESGCM

📖 Рекомендую материал для расширения вашей базы знаний о безопасности.
Практическое руководство по бинарным операциям с использованием типа UInt8 в Swift

🤔 Вы должны знать, что размер типов Int и UInt может отличаться на разных платформах (32 бита vs 64 бита). Сама Apple рекомендует всегда отдавать предпочтение общему типу Int перед всеми остальными вариантами.

В большинстве случаев вас не будет волновать длина целочисленных типов. Можно сказать, что Int и UInt довольно часто являются лучшим выбором при написании Swift-кода.

ℹ️ За исключением тех случаев, когда ваша цель — написать чрезвычайно экономичный по памяти или низкоуровневый код...

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

🤔 Для его реализации может возникнуть соблазн преобразовать Sequence в Set, а затем обратно в Array.

🙅‍♂️ Недостатком такого подхода является то, что при этом не сохранится порядок, что явно нежелательно.

🆗 Используя reduce(), можно обеспечить краткую реализацию, сохраняющую порядок, как на скриншоте.
Итерация объектов с помощью метода forEach(_:) является отличной альтернативой классическому циклу for.

Однако есть одно ограничение: forEach(_:) не позволяет остановить перебор элементов на полпути.

Вдохновившись реализацией Objective-C, мы можем написать расширение, которая позволит остановить этот процесс, если необходимо.
Не нравится Xcode? Переходите на Android Studio Улучшайте его, используя расширения!

🧑‍💻 Xcode — наш основной инструмент для разработки.

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

📖 В этой статье вы узнаете, как создать Xcode Source Editor Extension, которое добавляет некоторые дополнительные функции в нашу среду разработки.

ℹ️ И хотя процесс создания расширения на первый взгляд может показаться сложной задачей, после изучения XcodeKit, возможно, вы посмотрите на это под другим углом.
‼️К слову, про Android (не очень позитивные новости)

Коллеги сообщили сегодня, что появилась страница, в которой сказано буквально следующее:

В рамках мер по обеспечению соответствия требованиям Google Play блокирует загрузку платных приложений и обновлений для платных приложений в России с 5 мая 2022 года.

Больше информации об этом здесь.

Не хотелось бы, чтобы корпорация Apple пошла по этому пути.
Нет никакой документации или хотя бы сессий WWDC, которые рассказывали бы о таких изменениях в iOS 15. Но можно использовать реверс-инжиниринг, чтобы понять, что в Apple изменили и помогает ли это вашим приложениям. И если да, то как именно?

📖 Отличная статья о том, что именно управляет запуском приложений.

Кстати, вот ряд советов, которые помогут вам ускорить этот процесс:

1️⃣ Уменьшите число динамических фреймворков.

2️⃣ Уменьшите размер приложения в целом.

3️⃣ Вынесите код из +load и статических инициализаторов.

4️⃣ Отложите работу до отрисовки первого фрейма.

@iOS Dev
Swift предоставляет три специальные переменные #file, #line и #function, которые соответственно устанавливаются в имя текущего файла, строки и функции.

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

🧑‍💻Разработчики могут использовать камеру для обнаружения и отслеживания известных изображений с помощью API под названием ARImageTrackingConfiguration.

Где бы такое можно было использовать?

Если вы уже смотрели фильм о Гарри Поттере, то наверняка помните волшебную газету с анимированными фотографиями.

🛠 С помощью конфигурации отслеживания изображений мы можем воплотить это в реальность с помощью приложения ARKit.

📖 В этом туториале вы узнаете, как использовать ARImageTrackingConfiguration для выполнения отслеживания изображений и создания AR-приложения для газеты, аналогичной той, что появилась в фильме о Гарри Поттере.

📹 А если хотите посмотреть на результат, то тут ссылка на видео.
Что скрыто внутри Code Signing?

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

Для этого можно использовать Xcode или инструмент для Code Signing, а те позаботятся обо всех тонкостях.

Если мы и сталкиваемся с проблемами, то эти задачи обычно связаны с концепциями высокого уровня - подписанием идентификационных данных, прав доступа, профилей - а не с основной реализацией Code Signing.

🙇‍♂️Однако это не всегда так. Время от времени возникают проблемы, когда необходимо понять, как же на самом деле это работает.

Делюсь с вами тремя материалами от Apple на эту тему:

1️⃣ TN3125: Provisioning Profiles

2️⃣ TN3126: Hashes

3️⃣ TN3127: Requirements
Любая попытка получить доступ к массиву, выходящему за его границы, приведет к крашу.

Хотя для предотвращения таких сбоев мы часто пишем if index < array.count { array[index] }, такой подход выглядит громоздким. Хотя и рабочим.

👍 Замечательно то, что это условие можно заключить в subscript, который будет работать с любой коллекцией.
‼️Apple отключила оплату за подписки и приложения в App Store со счёта мобильного у «Мегафона», Yota и Tele2.

Теперь эта возможность осталась только у МТС и «Билайна».

О проблемах с оплатой сообщили в vc по данным Rozetked и iPhones․ru.

😔 В техподдержке Apple сообщили, что функция была ограничена для «Мегафона» и Yota «в связи с текущими регуляциями».
Какой же канал об iOS-разработке без упоминания сердца компании Apple!

😎 Удалось побывать в Сан-Франциско, и, конечно, я бы не простил себе, если бы не получилось заглянуть в Apple Visitor Center.

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

Ну, по крайней мере, заблудиться там сложно (парк же круглый).

Несмотря на то, что Infinite Loop закрыт для публичного посещения, никто не мешает посмотреть, что же рядом.

Решил выложить немного фото прямо отсюда☺️
Вторая часть поста про путешествие к центру земли Apple Visitor Center

🙌🏻В самом центре, конечно же, все в наличии. Даже мак студио, на которые сроки доставки по США сейчас по несколько десятков дней.

🤗 Есть стенд специально для поклонников Hermes, и уникальный раздел с мерчем Apple, который официально не продаётся нигде, кроме этого места.

👩‍💻👨‍💻Кстати, целый день там проходят сессии для пользователей, где сотрудники делятся приёмами как, например, улучшить качество фоток или показывают какие-то фишки Apple Watch.

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