Как бы мог выглядеть iOS-разработчик в разных стилях живописи или как мне дали доступ к DALL·E. Часть 2!
Всегда знал, что у iOS-разработчиков есть тяга к необычным вещам
Я своё слово держу, а раз вы такие крутые😎 — то кроме авангардизма, я добавил ещё запросы и для импрессионизма с экспрессионизмом. Ну а почему бы и нет?
@iOS Dev — ниже будет ещё один бонус.
Всегда знал, что у iOS-разработчиков есть тяга к необычным вещам
Я своё слово держу, а раз вы такие крутые
@iOS Dev — ниже будет ещё один бонус.
Please open Telegram to view this post
VIEW IN TELEGRAM
Dall-E from iOS Dev.zip
36.4 MB
Как бы мог выглядеть iOS-разработчик в разных стилях живописи или как мне дали доступ к DALL·E. Часть 3 — архив.
На случай, если вам понадобится аватарка (без всяких вотермарок)
В архиве все картинки по разделам, сгенерированные Dall-E по разделам:
⚪ Ренессанс.
⚪ Классицизм.
⚪ Романтизм.
⚪ Импрессионизм.
⚪ Экспрессионизм.
⚪ Авангардизм.
@iOS Dev
На случай, если вам понадобится аватарка (без всяких вотермарок)
В архиве все картинки по разделам, сгенерированные Dall-E по разделам:
⚪ Ренессанс.
⚪ Классицизм.
⚪ Романтизм.
⚪ Импрессионизм.
⚪ Экспрессионизм.
⚪ Авангардизм.
@iOS Dev
Полное руководство по UICollectionView с примерами на Swift
Узнайте, как использовать UICollectionView с многократно используемыми компонентами UIKit и шаблоном MVVM.
📖 Автор рассказывает о двух подходах к созданию и настройке
🛠 Кроме этого, он делится своим фреймворком
📺 Кстати, рекомендую посмотреть видео Apple о продвинутых пользовательских интерфейсах.
@iOS Dev
Узнайте, как использовать UICollectionView с многократно используемыми компонентами UIKit и шаблоном MVVM.
📖 Автор рассказывает о двух подходах к созданию и настройке
UICollectionView
, а также приводит аргументы за использование кода, а не Interface Builder.🛠 Кроме этого, он делится своим фреймворком
📺 Кстати, рекомендую посмотреть видео Apple о продвинутых пользовательских интерфейсах.
@iOS Dev
Продвинутые эффекты для тени UIView с использованием shadowPath
📖 В этой статье рассматриваются необычные подходы к использованию теней.
Подробно разбирается, зачем нужно каждое из свойств:
Кроме этого демонстрируется, как можно использовать
@iOS Dev
📖 В этой статье рассматриваются необычные подходы к использованию теней.
Подробно разбирается, зачем нужно каждое из свойств:
shadowColor
, shadowOffset
, shadowOpacity
, shadowPath
и shadowRadius
, а также их комбинации.Кроме этого демонстрируется, как можно использовать
UIBezierPath
применительно к тени для создания интересного эффекта.@iOS Dev
Пример реализации автозаполнения пароля для приложения iOS
Функция Password Autofill позволяет пользователям входить в одну и ту же учетную запись на разных устройствах без необходимости запоминать учетные данные.
🌐 Например, при регистрации в веб-приложении пользователи могут придумать пароль и сохранить учетные данные в связке ключей iCloud.
Когда в какой-то момент они запускают нативное приложение для доступа к той же учетной записи, приложение предлагает учетные данные, сохраненные для веб-сайта, в строке пароля QuickType.
После аутентификации пользователя, например, с помощью
Чтобы корректно рализовать эту фичу в приложении для iOS, необходимо выполнить следующие шаги:
1️⃣ Настройка связанных доменов приложения (associated domains).
2️⃣Установка правильного типа автозаполнения для соответствующих полей.
📖 В этом материале более подробно рассматривается каждый из этих шагов.
@iOS Dev
Функция Password Autofill позволяет пользователям входить в одну и ту же учетную запись на разных устройствах без необходимости запоминать учетные данные.
🌐 Например, при регистрации в веб-приложении пользователи могут придумать пароль и сохранить учетные данные в связке ключей iCloud.
Когда в какой-то момент они запускают нативное приложение для доступа к той же учетной записи, приложение предлагает учетные данные, сохраненные для веб-сайта, в строке пароля QuickType.
После аутентификации пользователя, например, с помощью
Face ID
, система заполняет учетные данные - таким образом, их не нужно вводить повторно.Чтобы корректно рализовать эту фичу в приложении для iOS, необходимо выполнить следующие шаги:
1️⃣ Настройка связанных доменов приложения (associated domains).
2️⃣Установка правильного типа автозаполнения для соответствующих полей.
📖 В этом материале более подробно рассматривается каждый из этих шагов.
@iOS Dev
This media is not supported in your browser
VIEW IN TELEGRAM
Что такое phyllotaxis или как повторить анимацию в Wallet и Lock Screen в iOS 16
Оговорюсь, я как и прежде не использую Swift UI в проде, и наверняка код можно сделать чище
С выходом новой iOS многие обратили внимание на крутую анимацию при переходе на заблокированный экран и обратно. Philip Davis в твиттере дополнил, что по факту используемая фигура очень похожа на phyllotaxis (филлотаксис по-русски). Так что же это за зверь такой?
Время нового факта
Филлотаксис — одна из природных загадок, известная со времён Леонардо да Винчи. Название с древнегреческого — «расположение листьев».
Загадочным является наблюдаемое в мире растений геометрически правильное расположение. Вспомните, например, как выглядит подсолнух😏.
Если сосчитать количество однотипных спиралей на поверхности, то с большой вероятностью мы получим одну из пар, образованных двумя соседними числами Фибоначчи.
☺️ Спасибо математикам за псевдокод:
Для упрощения терминологии: n это индекс семечка (у нас это просто кружок,
Что ж, попробуем повторить природное явление с помощью Swift!
1️⃣ Создадим
2️⃣ Радиус можно рассчитать по следующей формуле
3️⃣ Заполяем поле с помощью
4️⃣ И небольшой эффект анимации:
😎 В итоге получится то, что вы видите на гифке.
@iOS Dev — решаю загадки Да Винчи на Swift.
Оговорюсь, я как и прежде не использую Swift UI в проде, и наверняка код можно сделать чище
С выходом новой iOS многие обратили внимание на крутую анимацию при переходе на заблокированный экран и обратно. Philip Davis в твиттере дополнил, что по факту используемая фигура очень похожа на phyllotaxis (филлотаксис по-русски). Так что же это за зверь такой?
Время нового факта
Филлотаксис — одна из природных загадок, известная со времён Леонардо да Винчи. Название с древнегреческого — «расположение листьев».
Загадочным является наблюдаемое в мире растений геометрически правильное расположение. Вспомните, например, как выглядит подсолнух😏.
Если сосчитать количество однотипных спиралей на поверхности, то с большой вероятностью мы получим одну из пар, образованных двумя соседними числами Фибоначчи.
☺️ Спасибо математикам за псевдокод:
n = caseIndex
base_angle = pi*(1+sqrt(5))
r = sqrt(n)
theta = n*base_angle
x = r*cos(theta)
y = r*sin(theta)
Для упрощения терминологии: n это индекс семечка (у нас это просто кружок,
baseAngle
некий стартовый угол, r - радиус, x и y — позиции, на которые мы должны поместить наше семечко).
Что ж, попробуем повторить природное явление с помощью Swift!
1️⃣ Создадим
GeometryReader
, proxy.size
будет размером поля. xCenter
и yCenter
- координаты центра, от которых я отталкивался.2️⃣ Радиус можно рассчитать по следующей формуле
let radius:Double = maxWidth * sqrt(Double(i))
. maxWidth
это ширина семечка (тех, что ближе к краю поля).3️⃣ Заполяем поле с помощью
CircleInside
в зависимости от максимального количества "семечек" внутри поля.4️⃣ И небольшой эффект анимации:
scaleEffect
и rotationEffect
по тапу.😎 В итоге получится то, что вы видите на гифке.
@iOS Dev — решаю загадки Да Винчи на Swift.
Прокачиваем push-уведомления для iOS: Rich Push Notifications
Узнайте, как изменять и улучшать push-уведомления до того, как они будут представлены пользователю
Push-уведомления позволяют приложениям передавать оповещения пользователям — даже если они не используют устройство активно.
Хотя уведомления уже показывают полезную информацию, их истинная мощь проявляется в Rich Notifications.
Rich Notifications позволяют перехватывать notification payload и дают вам возможность их оформления в соответствии с потребностями пользователя.
Это позволяет отображать кастомный UI, который может включать в себя и действия с кнопками.
📖 В этом материале вы узнаете, как изменять и улучшать входящий контент, как создавать собственный интерфейс для таких уведомлений и многое другое.
@iOS Dev
Узнайте, как изменять и улучшать push-уведомления до того, как они будут представлены пользователю
Push-уведомления позволяют приложениям передавать оповещения пользователям — даже если они не используют устройство активно.
Хотя уведомления уже показывают полезную информацию, их истинная мощь проявляется в Rich Notifications.
Rich Notifications позволяют перехватывать notification payload и дают вам возможность их оформления в соответствии с потребностями пользователя.
Это позволяет отображать кастомный UI, который может включать в себя и действия с кнопками.
📖 В этом материале вы узнаете, как изменять и улучшать входящий контент, как создавать собственный интерфейс для таких уведомлений и многое другое.
@iOS Dev
Что представляет собой процесс собеседования в Netflix?
Джорданна Квок поделилась опытом управления командой мобильных разработчиков в Netflix в интервью Полу Хадсону, о принципах найма и о многом другом
✍️ Ниже основные тезисы из интервью на случай, если вы решитесь попытать свои силы:
🟢 В команде Джорданны в Netflix не задают вопросов с LeetCode, и в целом на собеседовании стараются избегать головоломок, анализа сложности и т. д. Причина в том, что они не используют это в повседневной работе.
Зато можно спросить, что такое коллекции? Что представляет собой многопоточность? Вам нужно загрузить, я не знаю, 10 изображений — как вы убедитесь, что они правильно закэшированы? Такие вещи представляют собой настоящие проблемы, с которыми все инженеры будут сталкиваться изо дня в день в Netflix, поэтому именно такие вопросы мы будем задавать на большинстве технических собеседований.
GCD, управление памятью и тому подобное, в целом основы iOS — то, что хотелось бы услышать от кандидатов.
🟢 Намного полезнее тестовое задание. Так как оно лучше отразит, что вы на самом деле испытаете на рабочем месте. Потому что вы получите открытый вопрос, например, «создать приложение, которое что-то делает».
🟢 Даже если что-то не получается, мы делаем все возможное, чтобы дать обратную связь.
🟢 Мы нанимали людей на их второе или третье собеседование, поэтому я просто хочу сказать, что это не значит, что если вы не прошли в первый раз, это не значит, что вы не получите роль в будущем.
Терпение и труд всё перетрут?
Что я думаю об этом?
Те процессы, о которых рассказала Джордана, выглядят более чем разумными. Особенно интересна позиция про алгоритмические секции, хотя Netflix и входит в тот самый FAANG, компании из которого славятся своим харкдором.
🤔 Пусть алгоритмы не являются краеугольным камнем, но это совершенно не означает, что их не нужно учить.
@iOS Dev — об алгоритмах мы ещё поговорим
Джорданна Квок поделилась опытом управления командой мобильных разработчиков в Netflix в интервью Полу Хадсону, о принципах найма и о многом другом
✍️ Ниже основные тезисы из интервью на случай, если вы решитесь попытать свои силы:
🟢 В команде Джорданны в Netflix не задают вопросов с LeetCode, и в целом на собеседовании стараются избегать головоломок, анализа сложности и т. д. Причина в том, что они не используют это в повседневной работе.
Зато можно спросить, что такое коллекции? Что представляет собой многопоточность? Вам нужно загрузить, я не знаю, 10 изображений — как вы убедитесь, что они правильно закэшированы? Такие вещи представляют собой настоящие проблемы, с которыми все инженеры будут сталкиваться изо дня в день в Netflix, поэтому именно такие вопросы мы будем задавать на большинстве технических собеседований.
GCD, управление памятью и тому подобное, в целом основы iOS — то, что хотелось бы услышать от кандидатов.
🟢 Намного полезнее тестовое задание. Так как оно лучше отразит, что вы на самом деле испытаете на рабочем месте. Потому что вы получите открытый вопрос, например, «создать приложение, которое что-то делает».
🟢 Даже если что-то не получается, мы делаем все возможное, чтобы дать обратную связь.
🟢 Мы нанимали людей на их второе или третье собеседование, поэтому я просто хочу сказать, что это не значит, что если вы не прошли в первый раз, это не значит, что вы не получите роль в будущем.
Терпение и труд всё перетрут?
Что я думаю об этом?
Те процессы, о которых рассказала Джордана, выглядят более чем разумными. Особенно интересна позиция про алгоритмические секции, хотя Netflix и входит в тот самый FAANG, компании из которого славятся своим харкдором.
🤔 Пусть алгоритмы не являются краеугольным камнем, но это совершенно не означает, что их не нужно учить.
@iOS Dev — об алгоритмах мы ещё поговорим
Как приостановить Task в Swift?
Структура
Речь идёт именно о наносекундах: нужно написать
Для этого нужно вызвать
ℹ️ Важное уточнение
Вызов
При этом происходит некоторое смещение, поскольку система может быть занята другой работой, но мы по крайней мере, можем быть уверены, что оно не закончится раньше указанного промежутка.
📖 Использование наносекунд немного неуклюже, но на данный момент у Swift нет альтернативы.
🤩 Кстати! В отличие от
@iOS Dev
Структура
Task
в Swift
имеет статический метод sleep()
, который приводит к приостановке текущей задачи по крайней мере на некоторое количество наносекунд. Речь идёт именно о наносекундах: нужно написать
1_000_000_000
, чтобы получить 1 секунду. Для этого нужно вызвать
Task.sleep()
с помощью await
, так как это приведет к приостановке задачи, и вам также нужно использовать try
, потому что sleep()
приведёт к ошибке в случае, если task
будет отменён.ℹ️ Важное уточнение
Вызов
Task.sleep()
заставит текущую задачу «спать» по крайней мере столько времени, сколько вы запросили. При этом происходит некоторое смещение, поскольку система может быть занята другой работой, но мы по крайней мере, можем быть уверены, что оно не закончится раньше указанного промежутка.
📖 Использование наносекунд немного неуклюже, но на данный момент у Swift нет альтернативы.
Thread.sleep()
, Task.sleep()
не блокирует поток, позволяя ему взять дополнительную работу из других мест, если потребуется.@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Разница между Thread.sleep() и Task.sleep()
Сделал наглядную табличку для предыдущего поста, примеры можно посмотреть здесь
@iOS Dev
Сделал наглядную табличку для предыдущего поста, примеры можно посмотреть здесь
@iOS Dev
Что такое Thread Sanitizer и при чём тут гонки данных в Swift?
Thread Sanitizer, также известный как TSan — это инструмент на базе LLVM для изучения проблем с потоками в вашем коде, написанном на языках Swift и C. Он был впервые представлен в Xcode 8 и может стать отличным инструментом для поиска менее заметных ошибок в коде, например, гонок данных.
📖 Автор этой статьи делится, как Thread Sanitizer помог решить проблемы с нестабильными тестами и странными сбоями, в которых не получалось точно определить причину.
Возможно, вы не использовали TSan раньше, поскольку может быть немного непонятно, что делает этот инструмент и как он работает.
В материале затрагиваются важные темы:
⚪ Что такое гонки данных (data races).
⚪ Примеры гонки данных в Swift.
⚪ Использование Thread Sanitizer для обнаружения гонок данных.
⚪ Ограничения для Thread Sanitizer.
⚪ Подходы к решению гонки данных. Также стоит обратить внимание на эту статью и этот пост.
@iOS Dev
Thread Sanitizer, также известный как TSan — это инструмент на базе LLVM для изучения проблем с потоками в вашем коде, написанном на языках Swift и C. Он был впервые представлен в Xcode 8 и может стать отличным инструментом для поиска менее заметных ошибок в коде, например, гонок данных.
📖 Автор этой статьи делится, как Thread Sanitizer помог решить проблемы с нестабильными тестами и странными сбоями, в которых не получалось точно определить причину.
Возможно, вы не использовали TSan раньше, поскольку может быть немного непонятно, что делает этот инструмент и как он работает.
В материале затрагиваются важные темы:
⚪ Что такое гонки данных (data races).
⚪ Примеры гонки данных в Swift.
⚪ Использование Thread Sanitizer для обнаружения гонок данных.
⚪ Ограничения для Thread Sanitizer.
⚪ Подходы к решению гонки данных. Также стоит обратить внимание на эту статью и этот пост.
@iOS Dev
This media is not supported in your browser
VIEW IN TELEGRAM
Повторяем красоту с помощью эффекта увеличения в SwiftUI на практике!
Если помните этот пост, то скорее всего вы задумывались о способах реализации.
📺 Время пришло! Для этого появился туториал.
😉 А для тех, кто не хочет смотреть видео, я дажесделал секретный gist (только для читателей нашего канала) .
@iOS Dev— делюсь реализацией крутых эффектов
Если помните этот пост, то скорее всего вы задумывались о способах реализации.
📺 Время пришло! Для этого появился туториал.
😉 А для тех, кто не хочет смотреть видео, я даже
@iOS Dev— делюсь реализацией крутых эффектов
Что означает EXC_BAD_ACCESS?
Вероятнее всего, однажды вы столкнетесь (а скорее всего, уже сталкивались) с крашем, вызванным EXC_BAD_ACCESS. Так что же это на самом деле?
Всякий раз, когда вы встречаете EXC_BAD_ACCESS, это означает, что вы отправляете сообщение объекту, который уже был освобожден. Это самый распространенный сценарий, но есть и другие.
🧑💻Техническое объяснение сложнее
В нашей работе мы постоянно имеем дело с указателями.
ℹ️ Указатель — это не что иное, как переменная, в которой хранится адрес памяти другой переменной.
Когда вы отправляете сообщение объекту, указатель, который указывает на объект, которому вы отправляете сообщение, должен быть разыменован (dereferenced). Это означает, что вы берете адрес памяти, на который указывает указатель, и получаете доступ к значению этого блока памяти.
Когда этот блок памяти больше не задействован для вашего приложения или, другими словами, этот блок памяти не используется для того, для чего вы думаете, доступ к этому участку (фрагменту) памяти больше невозможен.
Когда это происходит, ядро отправляет исключение (EXC), указывающее, что ваше приложение не может получить доступ к этому блоку памяти (тот самый BAD_ACCESS).
Таким образом, когда вы сталкиваетесь с EXC_BAD_ACCESS, это означает, что вы пытаетесь отправить сообщение в блок памяти, который не может выполнить это сообщение.
Однако в некоторых случаях EXC_BAD_ACCESS вызван поврежденным указателем. Всякий раз, когда ваше приложение пытается разыменовать поврежденный указатель, ядро выдаёт исключение.
Основные причины для EXC_BAD_ACCESS
⚪ Использование памяти, которая была освобождена.
⚪ Попытка записи за конец массива или буфера другого типа.
⚪ Использование указателя, который не был инициализирован.
Что почитать на эту тему?
1️⃣ Debugging EXC_BAD_ACCESS
2️⃣ EXC_BAD_ACCESS crash error: Understanding and solving it
@iOS Dev — о том, что мы иногда можем встретить
Вероятнее всего, однажды вы столкнетесь (а скорее всего, уже сталкивались) с крашем, вызванным EXC_BAD_ACCESS. Так что же это на самом деле?
Всякий раз, когда вы встречаете EXC_BAD_ACCESS, это означает, что вы отправляете сообщение объекту, который уже был освобожден. Это самый распространенный сценарий, но есть и другие.
🧑💻Техническое объяснение сложнее
В нашей работе мы постоянно имеем дело с указателями.
ℹ️ Указатель — это не что иное, как переменная, в которой хранится адрес памяти другой переменной.
Когда вы отправляете сообщение объекту, указатель, который указывает на объект, которому вы отправляете сообщение, должен быть разыменован (dereferenced). Это означает, что вы берете адрес памяти, на который указывает указатель, и получаете доступ к значению этого блока памяти.
Когда этот блок памяти больше не задействован для вашего приложения или, другими словами, этот блок памяти не используется для того, для чего вы думаете, доступ к этому участку (фрагменту) памяти больше невозможен.
Когда это происходит, ядро отправляет исключение (EXC), указывающее, что ваше приложение не может получить доступ к этому блоку памяти (тот самый BAD_ACCESS).
Таким образом, когда вы сталкиваетесь с EXC_BAD_ACCESS, это означает, что вы пытаетесь отправить сообщение в блок памяти, который не может выполнить это сообщение.
Однако в некоторых случаях EXC_BAD_ACCESS вызван поврежденным указателем. Всякий раз, когда ваше приложение пытается разыменовать поврежденный указатель, ядро выдаёт исключение.
Основные причины для EXC_BAD_ACCESS
⚪ Использование памяти, которая была освобождена.
⚪ Попытка записи за конец массива или буфера другого типа.
⚪ Использование указателя, который не был инициализирован.
Что почитать на эту тему?
1️⃣ Debugging EXC_BAD_ACCESS
2️⃣ EXC_BAD_ACCESS crash error: Understanding and solving it
@iOS Dev — о том, что мы иногда можем встретить
Какого языка программирования не существует?
Anonymous Quiz
1%
C
16%
D
3%
Swift
1%
Objective-C
44%
Objective-J
8%
Var'aq
27%
Navi
iOS Dev
Какого языка программирования не существует?
Итак, молодцы те, кто выбрал Navi в представленном выше опросе . А вот немного интересных фактов:
Objective-J — язык программирования, разрабатываемый как часть Cappuccino — фреймворка для веб-приложений. Его синтаксис почти полностью идентичен синтаксису Objective-C. Objective-J относится к JavaScript так же, как Objective-C к языку программирования C: является его строгим, но компактным надмножеством .
Var'aq — эзотерический язык программирования, созданный Брайеном Коннорсом и Крисом Прессей в 2000 году и использующий грамматическую структуру языка Клингонов из сериала Star Trek. Представляет собой язык стек-ориентированного программирования, основанный на PostScript'e, с аспектами Lisp'a (для использования структур данных).
D — мультипарадигмальный статически типизированный компилируемый язык программирования, созданный Уолтером Брайтом из компании Digital Mars.
А вот для Navi пока языка программирования не придумали (хотя для фильма Аватар сам язык используют).
И кстати, кто выбрал Swift?! 😂
@iOS Dev — пытаюсь рассказать что-то новое 😅
Var'aq
D
@iOS Dev — пытаюсь рассказать что-то новое 😅
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Доступность в iOS — определение и примеры
Из этого руководства по специальным возможностям iOS вы узнаете, как сделать приложения более доступными
📖 С помощью этого материала вы измените существующее приложение, чтобы сделать его более доступным для людей с ограниченными возможностями зрения.
В процессе вы пройдёте следующие основные этапы и узнаете как:
⚪ Использовать VoiceOver.
⚪ Проверять свое приложение с помощью Accessibility Inspector.
⚪ Внедрять элементы доступности с помощью UIKit.
⚪ Создавать положительный пользовательский опыт для людей с ограниченными возможностями.
Важный момент!
В ru-сообществе Михаил Рубанов (iOS Mobile Head в Dodo) продолжительное время изучает, развивает и адаптирует свои приложения, и, что более важно, даже написал книгу:
🔗 Про доступность в iOS (книга бесплатная и доступна всем желающим).
🔗 А в настоящее время создаёт полезный для сообщества проект VoiceOverDesigner (которому вы можете помочь, закрыв некоторые из задач и внеся своё имя в развитие проекта).
@iOS Dev
Из этого руководства по специальным возможностям iOS вы узнаете, как сделать приложения более доступными
📖 С помощью этого материала вы измените существующее приложение, чтобы сделать его более доступным для людей с ограниченными возможностями зрения.
В процессе вы пройдёте следующие основные этапы и узнаете как:
⚪ Использовать VoiceOver.
⚪ Проверять свое приложение с помощью Accessibility Inspector.
⚪ Внедрять элементы доступности с помощью UIKit.
⚪ Создавать положительный пользовательский опыт для людей с ограниченными возможностями.
Важный момент!
В ru-сообществе Михаил Рубанов (iOS Mobile Head в Dodo) продолжительное время изучает, развивает и адаптирует свои приложения, и, что более важно, даже написал книгу:
🔗 Про доступность в iOS (книга бесплатная и доступна всем желающим).
🔗 А в настоящее время создаёт полезный для сообщества проект VoiceOverDesigner (которому вы можете помочь, закрыв некоторые из задач и внеся своё имя в развитие проекта).
@iOS Dev
Как изменить стандартный заголовок при создании файлов в Xcode?
📖 Написал руководство, которое даст ответ на этот вопрос.
@iOS Dev
📖 Написал руководство, которое даст ответ на этот вопрос.
@iOS Dev
Telegraph
Как изменить стандартный заголовок при создании файлов в Xcode?
Вы когда-нибудь хотели изменить стандартный текст заголовка, который Xcode автоматически помещает в начало каждого нового исходного файла, который вы добавляете в проект? Для этого можно использовать текстовый макрос FILEHEADER. Создание файла Создайте plist с…
Создание виджетов для приложений iOS с помощью WidgetKit и SwiftUI
Начиная с iOS 14, Apple представила виджеты, которые позволяют пользователям отображать часть содержимого приложения на хоумскрине.
Виджеты отображают соответствующий неинтерактивный контент, позволяя пользователям быстро открыть приложение для получения дополнительных сведений.
Кроме этого, они поддерживают несколько размеров и создаются с использованием SwiftUI.
📖 В статье рассказывается о создании одного из таких виджетов.
Дополнение
Если вы откладываете перевод своего приложения на SwiftUI по тем или иным причинам (или вам просто лень перепиливать, например, свои проекты), то на мой взгляд, идея добавить виджет вполне неплохая.
От простого к сложному, почему бы и нет😉
@iOS Dev
Начиная с iOS 14, Apple представила виджеты, которые позволяют пользователям отображать часть содержимого приложения на хоумскрине.
Виджеты отображают соответствующий неинтерактивный контент, позволяя пользователям быстро открыть приложение для получения дополнительных сведений.
Кроме этого, они поддерживают несколько размеров и создаются с использованием SwiftUI.
📖 В статье рассказывается о создании одного из таких виджетов.
Дополнение
Если вы откладываете перевод своего приложения на SwiftUI по тем или иным причинам (или вам просто лень перепиливать, например, свои проекты), то на мой взгляд, идея добавить виджет вполне неплохая.
От простого к сложному, почему бы и нет😉
@iOS Dev
Почему размер иконок в первых айфонах стал именно таким, каким мы его знаем?
Вопрос, о котором вы, возможно, никогда не задумывались — тревожил программистов из проекта Purple в далёком 2005 году. Под этим названием скрывалась сверхсекретная разработка в коридорах компании Apple, а её сотрудники работали над самыми разными приложениями: почтой, Safari, Заметками и Springboard.
Несмотря на то, что разработчики пытались решить собственные технические сложности, вскоре они начали задавать друг другу вопросы, насколько же большим должен быть объект на экране разрабатываемого устройства, чтобы по нему можно было попадать пальцем?
В команде был Скотт Форстал, которому всё давалось легко и своими гибкими пальцами он очень просто попадал по абсолютно любым целям на экране, но ведь было множество и других людей. Как, например, Грег Кристи, который в случае непопадания издавал невольный вздох в стиле истинного нью-йоркца.
Вскоре Скотт Херц нашёл ответ
Для этого он написал приложение и дал попробовать его своей команде.
После запуска в этом приложении появлялась крупная кнопка Start. А после нажатия на неё экран на мгновение становился пустым, а потом в каком-то случайном месте появлялся прямоугольник. И по нему нужно было попасть пальцем.
Когда вы нажали, в независимости от того, попали вы или нет, где-то на экране появлялся другой прямоугольник. Необязательно меньше, просто другой. И надо было попасть уже не этой фигуре, а затем ещё раз, и ещё раз, и ещё.
Примерно после двадцати нажатий игра заканчивалась.
Всё это время в логах ПО отслеживало нажатия, размер прямоугольников и их положение.
Поскольку в приложение было весело играть, то оно очень быстро разошлось среди сотрудников Purple и количество логов росло в геометрической прогрессии.
В течение следующих нескольких дней собиралась информация о «целях» и результатах попаданий.
Что получилось?
Результаты игры Скотта показали, что если разместить цель в квадрате со стороной пятьдесят семь пикселей, то она может быть где угодно — слева, справа, снизу или сверху. И каждый почти со 100% вероятностью сможет по ней попасть.
Эта игра и дала проекту Purple ответ, который они искали:
Ярлыки на первом iPhone являются квадратами со стороной в 57 пикселей.
В этом посте я показал только один из путей к появлению крутых вещей на основе книги "Творческий отбор. Как создавались лучшие продукты Apple во времена Стива Джобса" за авторством Кена Косиенды.
@iOS Dev — маякните как-нибудь с помощью👏 или 👍 , если такая инфа кажется интересной
Вопрос, о котором вы, возможно, никогда не задумывались — тревожил программистов из проекта Purple в далёком 2005 году. Под этим названием скрывалась сверхсекретная разработка в коридорах компании Apple, а её сотрудники работали над самыми разными приложениями: почтой, Safari, Заметками и Springboard.
Несмотря на то, что разработчики пытались решить собственные технические сложности, вскоре они начали задавать друг другу вопросы, насколько же большим должен быть объект на экране разрабатываемого устройства, чтобы по нему можно было попадать пальцем?
В команде был Скотт Форстал, которому всё давалось легко и своими гибкими пальцами он очень просто попадал по абсолютно любым целям на экране, но ведь было множество и других людей. Как, например, Грег Кристи, который в случае непопадания издавал невольный вздох в стиле истинного нью-йоркца.
Вскоре Скотт Херц нашёл ответ
Для этого он написал приложение и дал попробовать его своей команде.
После запуска в этом приложении появлялась крупная кнопка Start. А после нажатия на неё экран на мгновение становился пустым, а потом в каком-то случайном месте появлялся прямоугольник. И по нему нужно было попасть пальцем.
Когда вы нажали, в независимости от того, попали вы или нет, где-то на экране появлялся другой прямоугольник. Необязательно меньше, просто другой. И надо было попасть уже не этой фигуре, а затем ещё раз, и ещё раз, и ещё.
Примерно после двадцати нажатий игра заканчивалась.
Всё это время в логах ПО отслеживало нажатия, размер прямоугольников и их положение.
Поскольку в приложение было весело играть, то оно очень быстро разошлось среди сотрудников Purple и количество логов росло в геометрической прогрессии.
В течение следующих нескольких дней собиралась информация о «целях» и результатах попаданий.
Что получилось?
Результаты игры Скотта показали, что если разместить цель в квадрате со стороной пятьдесят семь пикселей, то она может быть где угодно — слева, справа, снизу или сверху. И каждый почти со 100% вероятностью сможет по ней попасть.
Эта игра и дала проекту Purple ответ, который они искали:
В этом посте я показал только один из путей к появлению крутых вещей на основе книги "Творческий отбор. Как создавались лучшие продукты Apple во времена Стива Джобса" за авторством Кена Косиенды.
@iOS Dev — маякните как-нибудь с помощью
Please open Telegram to view this post
VIEW IN TELEGRAM
Насколько необходимы основы программирования, та самая база?
📖 Бруно Роша, разработчик в Spotify, рассуждает в своей статье о необходимости алгоритмов, презирании этой темы в сообществе и проводит параллели с развитием музыканта.
Я постарался выделить основные моменты, и позволил себе добавить некоторые комментарии.
Проблема в том, что сообщество часто направляет ненависть к подобным собеседованиям не по назначению. Негатив вокруг этого формата интервью стал настолько велик, что теперь часто можно встретить людей, испытывающих неприязнь к самой теории, которая не имеет ничего общего с непонятными головомками в программировании.
Это мнение стало настолько популярным, что теперь практически невозможно упомянуть концепцию программирования на абстрактном уровне без того, чтобы кто-то немедленно не начал холивар о практике проведения интервью. А это вредит в том числе и индивидуальной карьере инженеров, которым говорят держаться подальше от этих знаний по причинам, не поддающимся логике.
Поднимаются важные вопросы
🔴 Теория не отражает того, что человек будет делать на самом деле в своей работе.
🔴 Знание теории не является показателем мастерства человека в данной практической роли.
🔴 Теория вообще бессмысленна. Зачем разработчику iOS знать, что такое граф?
Всё это создает у людей впечатление, что основы бесполезны, в то время как на самом деле они используют их постоянно!
Я не могу передать, сколько раз я слышал, как разработчик iOS говорил: "Я могу с уверенностью сказать, что никогда в своей работе мне не приходилось использовать граф", а затем радостно рассказывал о чем-то интересном, с чем они работали, используя иерархии UIView. Это одно и то же!
Объекты, которые могут соединяться друг с другом с целью создания единой связной карты элементов, - это буквальное определение графа, поэтому они не только знают, что такое граф, но и используют его с самого первого дня работы в качестве разработчика!
🟢 Графы/деревья: UIView.
🟢 Связные списки: UIResponder.
🟢 Хеш-таблицы: Dictionary<K,V> и протокол Hashable.
🟢 Побитовые операции: OptionSet.
Примечание: автор прав, говоря о том, что даже не зная формальных определений, разработчики с самого начала карьеры (или даже прохождения каких-то курсов), уже получают необходимые знания, пусть и не зная нужных терминов.
Так действительно ли нужно всё это знать. Попробуем провести параллель с профессиональным музыкантом?
Для этого можно ответить самому себе на следующие вопросы:
🔘 Хочу ли я изучать это как хобби и никогда не выходить за рамки игры на диване для развлечения?
🔘 Хочу ли я играть в группе и зарекомендовать себя как музыкальный исполнитель?
🔘 Стремлюсь ли я выйти за рамки простого звания «музыкальный артист», живя и дыша классической музыкой, становясь неотъемлемой частью Венского филармонического оркестра, путешествуя по миру и войдя в историю как легенда, которая буквально сформировала концепцию самой музыки?
Так почему же ведущие компании делают то, что делают?
Для такой компании, как Google, неинтересно нанимать кого-то, кто посвятил свою жизнь изучению всего, что касается UIKit в iOS — их проблема не в том, какие API UIKit использовать, а в том, что API, которые им нужны, не существуют вообще.
Эти проблемы решаются благодаря пониманию computer science и способности создавать новые и эффективные решения. Ваше понимание программирования как концепции доказывает, что вы тот самый тип программиста, который им нужен.
В сочетании с обычными заданиями альтернативные (как, например, код-ревью) могут дать вам действительно хорошее представление о практических знаниях кандидата, поскольку они имеют отношение к должности и задачам, которые нужно будет решать.
📖 Про сложность алгоритмов можно прочитать здесь.
📖 Про подход в Neflix и Tiktok.
@iOS Dev
📖 Бруно Роша, разработчик в Spotify, рассуждает в своей статье о необходимости алгоритмов, презирании этой темы в сообществе и проводит параллели с развитием музыканта.
Я постарался выделить основные моменты, и позволил себе добавить некоторые комментарии.
Проблема в том, что сообщество часто направляет ненависть к подобным собеседованиям не по назначению. Негатив вокруг этого формата интервью стал настолько велик, что теперь часто можно встретить людей, испытывающих неприязнь к самой теории, которая не имеет ничего общего с непонятными головомками в программировании.
Это мнение стало настолько популярным, что теперь практически невозможно упомянуть концепцию программирования на абстрактном уровне без того, чтобы кто-то немедленно не начал холивар о практике проведения интервью. А это вредит в том числе и индивидуальной карьере инженеров, которым говорят держаться подальше от этих знаний по причинам, не поддающимся логике.
Поднимаются важные вопросы
🔴 Теория не отражает того, что человек будет делать на самом деле в своей работе.
🔴 Знание теории не является показателем мастерства человека в данной практической роли.
🔴 Теория вообще бессмысленна. Зачем разработчику iOS знать, что такое граф?
Всё это создает у людей впечатление, что основы бесполезны, в то время как на самом деле они используют их постоянно!
Я не могу передать, сколько раз я слышал, как разработчик iOS говорил: "Я могу с уверенностью сказать, что никогда в своей работе мне не приходилось использовать граф", а затем радостно рассказывал о чем-то интересном, с чем они работали, используя иерархии UIView. Это одно и то же!
Объекты, которые могут соединяться друг с другом с целью создания единой связной карты элементов, - это буквальное определение графа, поэтому они не только знают, что такое граф, но и используют его с самого первого дня работы в качестве разработчика!
🟢 Графы/деревья: UIView.
🟢 Связные списки: UIResponder.
🟢 Хеш-таблицы: Dictionary<K,V> и протокол Hashable.
🟢 Побитовые операции: OptionSet.
Примечание: автор прав, говоря о том, что даже не зная формальных определений, разработчики с самого начала карьеры (или даже прохождения каких-то курсов), уже получают необходимые знания, пусть и не зная нужных терминов.
Так действительно ли нужно всё это знать. Попробуем провести параллель с профессиональным музыкантом?
Для этого можно ответить самому себе на следующие вопросы:
🔘 Хочу ли я изучать это как хобби и никогда не выходить за рамки игры на диване для развлечения?
🔘 Хочу ли я играть в группе и зарекомендовать себя как музыкальный исполнитель?
🔘 Стремлюсь ли я выйти за рамки простого звания «музыкальный артист», живя и дыша классической музыкой, становясь неотъемлемой частью Венского филармонического оркестра, путешествуя по миру и войдя в историю как легенда, которая буквально сформировала концепцию самой музыки?
Так почему же ведущие компании делают то, что делают?
Для такой компании, как Google, неинтересно нанимать кого-то, кто посвятил свою жизнь изучению всего, что касается UIKit в iOS — их проблема не в том, какие API UIKit использовать, а в том, что API, которые им нужны, не существуют вообще.
Эти проблемы решаются благодаря пониманию computer science и способности создавать новые и эффективные решения. Ваше понимание программирования как концепции доказывает, что вы тот самый тип программиста, который им нужен.
В сочетании с обычными заданиями альтернативные (как, например, код-ревью) могут дать вам действительно хорошее представление о практических знаниях кандидата, поскольку они имеют отношение к должности и задачам, которые нужно будет решать.
📖 Про сложность алгоритмов можно прочитать здесь.
📖 Про подход в Neflix и Tiktok.
@iOS Dev
CreateML для iOS: создание настраиваемого фильтра изображений с использованием Style Transfer
Фреймворки машинного обучения Apple с годами становятся все более мощными.
Style Transfer или Neural Style Transfer — одна из техник, которую предоставляют фреймворки.
С помощью переноса стиля (Style Transfer) вы сможете превращать одно изображение в другое, стилизуя его под заданное.
📖 В этом руководстве вы узнаете, как использовать ML-фреймворки Apple для достижения этой цели прямо на вашем iOS-устройстве!
Машинное обучение (ML) в iOS и macOS опирается на два основных фреймворка Apple - CreateML и CoreML.
ℹ️ CreateML позволяет создавать и обучать ML-модели, а CoreML — запускать их.
Изначально CreateML был доступен только для macOS для создания моделей. Затем их можно было использовать в приложениях macOS, iOS или iPadOS.
В 2021 году Apple сделала этот фреймворк доступным для iOS 15 и iPadOS 15. Теперь фреймворк CreateML позволяет обучать и создавать модели на устройстве.
Прочитав статью, вы получите ответы на следующие вопросы:
⚪ Как создать ML-модель на устройстве.
⚪ Как использовать модель для создания стилизованного изображения.
⚪ Основные понятия в обучении и прогнозировании ML.
@iOS Dev
Фреймворки машинного обучения Apple с годами становятся все более мощными.
Style Transfer или Neural Style Transfer — одна из техник, которую предоставляют фреймворки.
С помощью переноса стиля (Style Transfer) вы сможете превращать одно изображение в другое, стилизуя его под заданное.
📖 В этом руководстве вы узнаете, как использовать ML-фреймворки Apple для достижения этой цели прямо на вашем iOS-устройстве!
Машинное обучение (ML) в iOS и macOS опирается на два основных фреймворка Apple - CreateML и CoreML.
ℹ️ CreateML позволяет создавать и обучать ML-модели, а CoreML — запускать их.
Изначально CreateML был доступен только для macOS для создания моделей. Затем их можно было использовать в приложениях macOS, iOS или iPadOS.
В 2021 году Apple сделала этот фреймворк доступным для iOS 15 и iPadOS 15. Теперь фреймворк CreateML позволяет обучать и создавать модели на устройстве.
Прочитав статью, вы получите ответы на следующие вопросы:
⚪ Как создать ML-модель на устройстве.
⚪ Как использовать модель для создания стилизованного изображения.
⚪ Основные понятия в обучении и прогнозировании ML.
@iOS Dev