Как добавлять и обрабатывать действия для push и local notifications в iOS
Вероятно, вы знаете, что многие приложения предоставляют такую опцию для своих уведомлений.
💻 Делюсь с вами способом, как создавать такие действия для своих проектов.
😉Кстати, ранее писал о способе тестирования пуш-уведомлений на симуляторе.
Вероятно, вы знаете, что многие приложения предоставляют такую опцию для своих уведомлений.
💻 Делюсь с вами способом, как создавать такие действия для своих проектов.
😉Кстати, ранее писал о способе тестирования пуш-уведомлений на симуляторе.
Telegraph
Как добавлять и обрабатывать действия для push и local notifications в iOS
Локальные и push-уведомления iOS позволяют держать пользователей в курсе событий или получать напоминания о событиях, важных для времени или местоположения, даже если приложение работает в фоновом режиме или неактивно в текущий момент. При использовании уведомлений…
Как подключиться к Wi-Fi в iOS с помощью Swift?
🛠 Для этого нужно добавить немного capabilities. Это "Hotspot Configuration" и "Network Extensions".
В коде мы создаём экземпляр нашего конфига, а затем подключаемся. Должен быть показан системный диалог, после которого и произойдет подключение. Иногда может занять несколько секунд.
#интересное
🛠 Для этого нужно добавить немного capabilities. Это "Hotspot Configuration" и "Network Extensions".
В коде мы создаём экземпляр нашего конфига, а затем подключаемся. Должен быть показан системный диалог, после которого и произойдет подключение. Иногда может занять несколько секунд.
#интересное
Ранее публиковал результаты исследования зарплат для iOS-разработчиков в РФ.
Сегодня прочитал о похожем отчёте в другом мире. Решил поделиться с вами структурированными цифрами по данным сайтов PayScale, Glassdoor, ZipRecruiter и Indeed.
А больше деталей, в том числе и по начальным зарплатам при входе в профессию, можно прочесть здесь.
Сегодня прочитал о похожем отчёте в другом мире. Решил поделиться с вами структурированными цифрами по данным сайтов PayScale, Glassdoor, ZipRecruiter и Indeed.
А больше деталей, в том числе и по начальным зарплатам при входе в профессию, можно прочесть здесь.
Три золотых правила для weak self
🙈 A strong-retained self не всегда retain cycle.
🐵 A weakly retained self никогда не будет retain cycle.
🙉 Обновите self до strong в верхней части замыканий для избежания странного поведения.
Chris Downie в своём разборе показывает, почему это действительно так на примерах.
Эти правила могут повторяться, но они приведут к более безопасному коду, о котором гораздо легче рассуждать.
😉А ещё эти правила прощезаретейнить, бррр, простите, запомнить.
🙈 A strong-retained self не всегда retain cycle.
🐵 A weakly retained self никогда не будет retain cycle.
🙉 Обновите self до strong в верхней части замыканий для избежания странного поведения.
Chris Downie в своём разборе показывает, почему это действительно так на примерах.
Эти правила могут повторяться, но они приведут к более безопасному коду, о котором гораздо легче рассуждать.
😉А ещё эти правила проще
Сохранение конфиденциальных данных с помощью кейчейна в Swift
При разработке приложений для iOS часто возникает необходимость хранить конфиденциальные данные (пароль, токены, секретные ключи и т.д.) локально.
Для начинающих разработчиков первое, что приходит на ум, это хранить их с помощью UserDefaults. Однако, как мы все знаем, хранение конфиденциальных данных с помощью UserDefaults - очень плохая идея, потому что данные, хранящиеся с помощью UserDefaults, не шифруются и крайне небезопасны.
🏦 Для безопасного хранения конфиденциальных данных локально, мы должны использовать keychain (связку ключей), предоставляемую Apple. Это довольно старый фреймворк, поэтому, как вы увидите позже, его API недостаточно Swifty, как у других современных фреймворков Apple.
📖 В этой статье рассказывается, как создать универсальный хелпер, работающий как в iOS, так и в macOS, который сохраняет, обновляет, читает и удаляет данные с помощью keychain.
При разработке приложений для iOS часто возникает необходимость хранить конфиденциальные данные (пароль, токены, секретные ключи и т.д.) локально.
Для начинающих разработчиков первое, что приходит на ум, это хранить их с помощью UserDefaults. Однако, как мы все знаем, хранение конфиденциальных данных с помощью UserDefaults - очень плохая идея, потому что данные, хранящиеся с помощью UserDefaults, не шифруются и крайне небезопасны.
🏦 Для безопасного хранения конфиденциальных данных локально, мы должны использовать keychain (связку ключей), предоставляемую Apple. Это довольно старый фреймворк, поэтому, как вы увидите позже, его API недостаточно Swifty, как у других современных фреймворков Apple.
📖 В этой статье рассказывается, как создать универсальный хелпер, работающий как в iOS, так и в macOS, который сохраняет, обновляет, читает и удаляет данные с помощью keychain.
Анализ HTTP-трафика с помощью стандартных инструментов Xcode
👨🎓 На прошлогоднем WWDC было множество полезных сессий, одна из недооценённых — объяснение работы с инструментом по анализу трафика.
Michael Abadi Santoso кратко сформулировал принципы для использования Instruments Network для записи и анализа HTTP-трафика вашего приложения.
Вот тут рассказывается, как исследовать и визуализировать поведение сеансов, задач и отдельных HTTP-запросов, чтобы обеспечить эффективную передачу данных и соблюдение конфиденциальности.
💻 Но можно и посмотреть картинки.
👨🎓 На прошлогоднем WWDC было множество полезных сессий, одна из недооценённых — объяснение работы с инструментом по анализу трафика.
Michael Abadi Santoso кратко сформулировал принципы для использования Instruments Network для записи и анализа HTTP-трафика вашего приложения.
Вот тут рассказывается, как исследовать и визуализировать поведение сеансов, задач и отдельных HTTP-запросов, чтобы обеспечить эффективную передачу данных и соблюдение конфиденциальности.
💻 Но можно и посмотреть картинки.
А может ну его всё, и в TikTok пойти?
🛠 Ладно-ладно, у нас технический канал, а вы о чём подумали?
Вот вам история о том, какие вопросы могут задать в крупных компаниях на собеседовании. Например, в TikTok. Пусть и не с хэппи-эндом, но история любопытная.
Кандидат прошёл два интервью по Zoom, каждое по 45 минут — в течение одной недели.
Первый этап состоял из двух частей.
- Термины iOS.
- Что нового в мажорной версии? На момент собеседования интервьюер хотел услышать про виджеты.
- Попросили оптимизировать небольшой участок кода.
- Спросили про разницу setNeedsLayout, layoutIfNeeded, layoutSubview.
- Проверили знание того, как найти краши при нехватке памяти без использования Crashlytics.
Во второй части попросили решить задачу, которая на скриншоте.
Второй этап
Целиком и полностью был посвящен проектированию. А также спросили про самый жёсткий баг, на поиски которого ушло больше всего времени.
📖 В конце статьи автор делится советами, как пройти собеседование, или хотя бы повысить шансы на успех.
🛠 Ладно-ладно, у нас технический канал, а вы о чём подумали?
Вот вам история о том, какие вопросы могут задать в крупных компаниях на собеседовании. Например, в TikTok. Пусть и не с хэппи-эндом, но история любопытная.
Кандидат прошёл два интервью по Zoom, каждое по 45 минут — в течение одной недели.
Первый этап состоял из двух частей.
- Термины iOS.
- Что нового в мажорной версии? На момент собеседования интервьюер хотел услышать про виджеты.
- Попросили оптимизировать небольшой участок кода.
- Спросили про разницу setNeedsLayout, layoutIfNeeded, layoutSubview.
- Проверили знание того, как найти краши при нехватке памяти без использования Crashlytics.
Во второй части попросили решить задачу, которая на скриншоте.
Второй этап
Целиком и полностью был посвящен проектированию. А также спросили про самый жёсткий баг, на поиски которого ушло больше всего времени.
📖 В конце статьи автор делится советами, как пройти собеседование, или хотя бы повысить шансы на успех.
Структура памяти в Swift
Посмотрите, как Swift управляет, хранит и ссылается на различные типы данных и объекты, используя безопасный для памяти подход.
Материал состоит из двух больших частей:
- Схема памяти типов значений (value types) в Swift.
- Ссылочные типы (reference types).
Краткий вывод:
🛠 Короче говоря, retain cycles - отстой, но в большинстве случаев их можно избежать, просто используя правильное ключевое слово. Под капотом ARC делает отличную работу, за исключением нескольких крайних случаев, когда вам придется прервать цикл.
Swift - это безопасный для памяти язык программирования по своей конструкции.
Язык гарантирует, что каждый объект будет инициализирован, прежде чем вы сможете его использовать, а объекты, живущие в памяти, на которые больше нет ссылок, будут автоматически деаллоцированы.
Индексы массивов также проверяются на ошибки out-of-bounds. Это дает нам дополнительный уровень безопасности, за исключением случаев, когда вы пишете небезопасный Swift-код 🤔.
Посмотрите, как Swift управляет, хранит и ссылается на различные типы данных и объекты, используя безопасный для памяти подход.
Материал состоит из двух больших частей:
- Схема памяти типов значений (value types) в Swift.
- Ссылочные типы (reference types).
Краткий вывод:
🛠 Короче говоря, retain cycles - отстой, но в большинстве случаев их можно избежать, просто используя правильное ключевое слово. Под капотом ARC делает отличную работу, за исключением нескольких крайних случаев, когда вам придется прервать цикл.
Swift - это безопасный для памяти язык программирования по своей конструкции.
Язык гарантирует, что каждый объект будет инициализирован, прежде чем вы сможете его использовать, а объекты, живущие в памяти, на которые больше нет ссылок, будут автоматически деаллоцированы.
Индексы массивов также проверяются на ошибки out-of-bounds. Это дает нам дополнительный уровень безопасности, за исключением случаев, когда вы пишете небезопасный Swift-код 🤔.
Вариативные параметры (variadic parameters) позволяют передавать в функцию ноль или более значений определенного типа.
👍 Замечательная особенность Variadic Parameters заключается в том, что Swift обрабатывает преобразование одного значения в коллекцию значений. Мы можем сохранить наши API более читабельными, в то время как Swift позаботится о преобразовании.
📖 Давайте посмотрим, как это работает.
👍 Замечательная особенность Variadic Parameters заключается в том, что Swift обрабатывает преобразование одного значения в коллекцию значений. Мы можем сохранить наши API более читабельными, в то время как Swift позаботится о преобразовании.
📖 Давайте посмотрим, как это работает.
DevToysMac
Как заявляют разработчики, это практически швейцарский нож для макоси.
💻Опенсорсный продукт с конвертерами, форматтерами, декодерами, чего там только нет.
Великолепная утилита, Уолтер. Просто охрененная, если я правильно понял. Надёжная, как швейцарские часы.
👍 Лайк, если угадали источник цитаты.
#opensource
Как заявляют разработчики, это практически швейцарский нож для макоси.
💻Опенсорсный продукт с конвертерами, форматтерами, декодерами, чего там только нет.
Великолепная утилита, Уолтер. Просто охрененная, если я правильно понял. Надёжная, как швейцарские часы.
👍 Лайк, если угадали источник цитаты.
#opensource
Понедельник, а мы опять про утечки памяти?!
Именно так! Отладка — важная часть в нашей с вами работе, так что материалы про неё вряд ли будут лишними.
Пару раз я делился материалами про retain cycles: тут, тут и вот здесь, например.
🛠 Решил вынести один из способов в статью здесь. Конечно, для многих он очевиден, и может возникнуть вопрос, зачем — это же и так понятно! Но кто-то может найти этот способ вполне рабочим.
Именно так! Отладка — важная часть в нашей с вами работе, так что материалы про неё вряд ли будут лишними.
Пару раз я делился материалами про retain cycles: тут, тут и вот здесь, например.
🛠 Решил вынести один из способов в статью здесь. Конечно, для многих он очевиден, и может возникнуть вопрос, зачем — это же и так понятно! Но кто-то может найти этот способ вполне рабочим.
Разработчица поделилась своим опытом работы в Expedia
Ким рассказала в целом о своих впечатлениях, я же постарался вынести суть первой части — собеседования.
— Процесс собеседования был исключительно освежающим по сравнению с другими собеседованиями.
— Во время первого телефонного собеседования у Ким случился приступ паники, что привело к сильному затуманиванию мышления.
Скорее всего, больший опыт собеседований поможет справляться с этим лучше, но все ситуации довольно уникальны.
— Спросили об unwrapping optionals. Из-за пункта выше Ким немного поплыла, но интервьюер помог найти ответ. И это позволило рассказать о том, что можно было использовать для очистки вложенных операторов if в коде. Ким привела пример из своей работы.
Тут же Ким привела ремарку, что на других собеседованиях её бы просто сразу списали со счетов и собеседование могло окончиться.
— Последним этапом было очное собеседование, длившееся полдня, на котором Ким познакомили с командой, менеджером, затем был раунд вайтбординга. Далее сессия лайвкодинга и командный обед.
Про командный обед необычно, конечно.
Этот раунд был долгим, но оно преподало мощный урок о проведении собеседований, который Ким применяет с тех пор на всех должностях.
— Ни на одном этапе Ким не оставляли одну. Тот, кто проводил собес, помогал решать проблему. Если Ким застревала в рассуждениях, она могла задать вопросы и получить какие-то разъяснения.
Если можно было спросить о каких-то мыслях, которые могли помочь, это стоило делать.
— Ожидания были понятны на каждой итерации собеседования. Собеседование — занятие, где участвует два человека, для работы в паре. Важные слова: интервьюеру важно, как вы можете работать с ним в команде, а не только самостоятельно.
— Решение задач было важным пунктом. Но его нужно было пройти в том числе и для того, чтобы понять, что представляет из себя окружение в целом.
Ким рассказала в целом о своих впечатлениях, я же постарался вынести суть первой части — собеседования.
— Процесс собеседования был исключительно освежающим по сравнению с другими собеседованиями.
— Во время первого телефонного собеседования у Ким случился приступ паники, что привело к сильному затуманиванию мышления.
Скорее всего, больший опыт собеседований поможет справляться с этим лучше, но все ситуации довольно уникальны.
— Спросили об unwrapping optionals. Из-за пункта выше Ким немного поплыла, но интервьюер помог найти ответ. И это позволило рассказать о том, что можно было использовать для очистки вложенных операторов if в коде. Ким привела пример из своей работы.
Тут же Ким привела ремарку, что на других собеседованиях её бы просто сразу списали со счетов и собеседование могло окончиться.
— Последним этапом было очное собеседование, длившееся полдня, на котором Ким познакомили с командой, менеджером, затем был раунд вайтбординга. Далее сессия лайвкодинга и командный обед.
Про командный обед необычно, конечно.
Этот раунд был долгим, но оно преподало мощный урок о проведении собеседований, который Ким применяет с тех пор на всех должностях.
— Ни на одном этапе Ким не оставляли одну. Тот, кто проводил собес, помогал решать проблему. Если Ким застревала в рассуждениях, она могла задать вопросы и получить какие-то разъяснения.
Если можно было спросить о каких-то мыслях, которые могли помочь, это стоило делать.
— Ожидания были понятны на каждой итерации собеседования. Собеседование — занятие, где участвует два человека, для работы в паре. Важные слова: интервьюеру важно, как вы можете работать с ним в команде, а не только самостоятельно.
— Решение задач было важным пунктом. Но его нужно было пройти в том числе и для того, чтобы понять, что представляет из себя окружение в целом.