Как стать автором
Обновить
0
0

Пользователь

Отправить сообщение

Погружение в автотестирование на iOS. Часть 2. Как взаимодействовать с ui-элементами iOS приложения в тестах

Время на прочтение6 мин
Количество просмотров8.6K

Привет, Хабр!

В прошлой статье мы разобрались:

- Что такое ui-тесты и для чего они нужны;

- Как настроить окружение для тестов;

- Как находить ui-элементы в проекте и проставлять им accessibilityidentifier.

В этой статье мы разберем:

- Как обращаться и инициализировать ui-элементы в ваших тестах;

- Как взаимодействовать с ui-элементами приложения;

- Как писать ассерты для проверки в автотесте ожидаемого результата.

Читать далее
Всего голосов 7: ↑7 и ↓0+7
Комментарии0

Navigation bar и анимация перехода

Время на прочтение4 мин
Количество просмотров7.7K

Поведение UINavigationBar при переходе по стеку может показаться непредсказуемым и часто забагованным. Но, на самом деле, так и есть! Эта статья призвана освежить знания о принципах работы и показать возможности  кастомизации поведения.

Немного общей теории

Если вы хорошо осведомлены, смело пролистывайте непосредственно к анимации.

Читать далее
Всего голосов 25: ↑24 и ↓1+27
Комментарии5

Собеседование: Swift. Вопросы и ответы

Время на прочтение13 мин
Количество просмотров60K
Языку программирования Swift всего четыре года, но он уже становится основным языком разработки для iOS. Развиваясь до версии 5.0, Swift превратился в сложный и мощный язык, отвечающий как объектно-ориентированной, так и функциональной парадигме. И с каждым новым релизом в нем добавляется еще больше возможностей.

Но насколько хорошо вы на самом деле знаете Swift? В этой статье вы найдете примеры вопросов для собеседования по Swift.

Вы можете использовать эти вопросы для интервьюирования кандидатов, чтобы проверить их знания или вы можете проверить свои собственные. Если вы не знаете ответа, не переживайте: к каждому вопросу есть ответ.
Читать дальше →
Всего голосов 10: ↑10 и ↓0+10
Комментарии19

Германия, или Туда и Обратно — 2

Время на прочтение12 мин
Количество просмотров50K
В первой статье цикла я описал свой переезд в Германию с семьей.

Обосновались мы в красивом и благородном городе — Висбадене. Именно тут Достоевский прокутил все свое состояние.


Казино в Висбадене

Я же в принципе не азартен, поэтому намеревался просто пожить в Европе. Получить опыт работы в международной компании. Хотел вдоволь попутешествовать, благо до любой европейской достопримечательности можно легко доехать или долететь.
Если вас интересуют подробности моего опыта путешествий, столкновения с немецкими порядками, ведения семейного бюджета — добро пожаловать под кат.
Читать дальше →
Всего голосов 106: ↑104 и ↓2+129
Комментарии449

Make <your iOS app> talk. Доклад Яндекса

Время на прочтение16 мин
Количество просмотров3K
Cтандартные библиотеки распознавания речи и озвучки текста в iOS дают массу возможностей. Из доклада VolkovRoman вы узнаете, как за счёт минимального количества кода научить ваше приложение проговаривать текст и кастомизировать озвучку. Рома рассмотрел API распознавания речи, его ограничения и особенности, lifecycle запроса на распознавание и методы работы в офлайн-режиме. Вас ждут примеры UX, обход существующих багов и особенности работы с аудиосессией.


— Всем привет, меня зовут Роман Волков. Сегодня мы поговорим о том, как научить ваше мобильное приложение общаться с вашими пользователями.
Читать дальше →
Всего голосов 9: ↑9 и ↓0+9
Комментарии0

Apple Wallet. Что это такое и как интегрировать в него свою карту

Время на прочтение8 мин
Количество просмотров69K

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


Что такое Wallet? Он позволяет держать в телефоне различного вида карты (билеты, скидочные карты и т.п.), облегчая жизнь пользователям продукта. Более того, есть возможность актуализировать информацию о карте посредством push-уведомлений, но это тема для отдельной статьи. Но если у вас есть карта/билет/абонемент, которые можно интегрировать в телефон, то для этого есть решение! Как это сделать – читайте ниже.

Читать дальше →
Всего голосов 21: ↑21 и ↓0+21
Комментарии13

Жизнь и работа в Нидерландах

Время на прочтение16 мин
Количество просмотров79K

Наконец-то руки дошли до продолжения статьи "Истории о моей работе в Нидерландах" — а именно, пришла пора рассказать о деталях переезда и поделиться практическими советами с будущими трактористами. Прошу прощения у всех, кто ждал этого продолжения гораздо раньше. Не буду распространяться о причинах задержки, но поверьте, это были очень напряженные для меня месяцы, и я вряд ли мог взяться за эту статью в тот срок, который озвучивал раньше. Кстати, дорогие мои вопрошающие в личке! Вы, на самом деле, являетесь полноправными соавторами этой статьи, потому что некоторые из ваших умных и иногда неожиданных вопросов мне самому в голову не пришли бы, а другие сделали мою задачу гораздо проще. Вместо того, чтобы обдумывать план статьи, подачу и прочая, прочая, бери формат вопрос-ответ, и дело в шляпе. Уважаемые nightstalker, ATmegAdriVeR, Flem_1, dmtrr, ChingizKhalafov, Carduelis, artem2511, gri_mih, Ommonick, это ваши вопросы, вам от меня огромная благодарность. Надеюсь, от всех читателей тоже.


Ну а начну я все же с краткого рассказа о том, как я дошел до жизни в Нидерландах.

Читать дальше →
Всего голосов 100: ↑97 и ↓3+127
Комментарии459

Подробный разбор стоимости жизни в Кремниевой Долине

Время на прочтение10 мин
Количество просмотров37K

Самое дорогое место в США


В прошлой статье мы подробно разобрали структуру средних зарплат программистов в Кремниевой Долине, а теперь было бы неплохо понять, сколько придётся потратить на оплату счетов, и сколько же денег останется в итоге, ведь область залива Сан-Франциско традиционно считается самым дорогим местом в США, уступая по стоимости жизни разве что центру Манхеттена (а по некоторым данным уже давно обогнала Нью-Йорк).

image

Если Вам проще воспринимать информацию на слух или в режиме видео-ролика, то специально для Вас готово 18-минутное видео с тайм-кодами в комментариях.
Читать дальше →
Всего голосов 38: ↑36 и ↓2+52
Комментарии101

Детальный разбор структуры зарплат IT-специалистов в Кремниевой Долине

Время на прочтение13 мин
Количество просмотров50K

О чем пойдет речь


image

В рамках пятничного безумия, давайте представим, что у Вас волшебным образом появилось разрешение на работу в США, и Вы уже готовы после завтрака телепортироваться в самый центр Маунтин-Вью, чтобы моментально найти работу в крупной IT-компании и начать зарабатывать свой первый взнос на дом в Кремниевой Долине. Но прежде, давайте попробуем разобраться из чего состоит заработная плата разработчика программного обеспечения, что обычно включено в социальный пакет IT-специалиста, и какие дополнительные льготы получают сотрудники крупных технологических компаний в США. Все эти знания пригодятся Вам, чтобы продать себя дороже, жить комфортнее и быстрее заработать на сарайчик в пригороде Сан-Франциско.

Если Вам проще воспринимать информацию на слух или в режиме видео-ролика, то специально для Вас готово 28-минутное видео с тайм-кодами в комментариях.

Три главных компонента


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

Так вот, в первую очередь нужно понимать, что сумма, которую заплатит Вам работодатель
формируется из трех компонентов:

  1. Сash — это деньги, которые Вы получаете непосредственно на карточку два раза в
    месяц (или же их присылают Вам бумажным чеком, который потом можно либо обналичить, либо положить на Ваш банковский счет.
  2. Non-cash — это акции в различных вариациях: RSA, RSU, PSU, PSA или ESPP.
  3. Benefits — все косвенные затраты работодателя на Вас, с которых Вы также имеете
    выгоду.

Когда речь заходит о зарплате, тут принято говорить о сумме за год до уплаты налогов. Эта сумма называется Total Compensation (TC) и включает в себя Cash и Non-cash компоненты.
Читать дальше →
Всего голосов 71: ↑71 и ↓0+71
Комментарии150

Принципы SOLID в картинках

Время на прочтение4 мин
Количество просмотров476K


Если вы знакомы с объектно-ориентированным программированием, то наверняка слышали и о принципах SOLID. Эти пять правил разработки ПО задают траекторию, по которой нужно следовать, когда пишешь программы, чтобы их проще было масштабировать и поддерживать. Они получили известность благодаря программисту Роберту Мартину.

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

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

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

Ну, приступим.
Читать дальше →
Всего голосов 57: ↑52 и ↓5+54
Комментарии26

Автоматические скриншоты iOS с помощью XCTestplan и XCode 11

Время на прочтение4 мин
Количество просмотров2.8K
В Райффайзенбанке несколько мобильных приложений, которые должны работать на самых разных девайсах и операционных системах, поэтому мы стараемся автоматизировать рутинные процессы в тестировании. Эта статья показалась нам полезной, и мы решили ее перевести.


foto source: unsplash.com

Если ваше приложение мультиязычное, универсальное и рассчитано на разные девайсы, то на создание скриншотов для каждой конфигурации можно потратить много времени. Представьте, у вас четыре языка, поддержка iPad и iPhone и вам нужно сохранить по 4 экрана, — это 32 скриншота. Процесс необходимо автоматизировать, чтобы не тратить время каждый раз, когда обновляются интерфейсы.

Инструмент XCTestPlan, который появился в XCode 11, позволяет нам создавать несколько конфигураций для тестов. Сейчас конфигурации чаще всего применяются, чтобы определить, как тесты будут запускаться, включая выбор языка для приложения. В этой статье вы узнаете, как можно использовать XCTestPlan, чтобы автоматизировать получение скриншотов.
Читать дальше →
Всего голосов 6: ↑5 и ↓1+6
Комментарии0

Транспорт-бот Jabber конференций для Telegram

Время на прочтение7 мин
Количество просмотров23K


Доброго времени суток.

В один прекрасный день, после значительного перерыва, судьба вновь столкнула меня с jabber-конференциями. Правда, среди знакомых jabber уже никто не использует, 2007 год канул в лету, а основным средством общения стал Telegram. Поддержка XMPP на мобильных устройствах оставляла желать лучшего — клиенты на Android хороши каждый в чём-то одном, с iOS и WP всё мягко скажем, не очень. И особенности протокола тоже сказываются на автономности. Поэтому возникла мысль: а не сделать ли бота, которой будет транслировать сообщения из конференций в чат Telegram?

В качестве инструментов использовались:
  • Python 3.5
  • aiohttp для API Telegram
  • slixmpp для xmpp
  • gunicorn как wsgi сервер
  • nginx как фронтенд и прокси для gunicorn
  • VS Code в качестве IDE

Читать дальше →
Всего голосов 20: ↑18 и ↓2+16
Комментарии13

Из ошибки в алерт с действиями

Время на прочтение19 мин
Количество просмотров9K
Привет, Хабр! Для пользователя сообщения об ошибке часто выглядят как «Что-то не так, АААА!». Конечно, ему бы хотелось вместо ошибок видеть волшебную ошибку «Починить все». Ну или другие варианты действий. Мы начали активно добавлять себе такие, и я хочу рассказать про то, как вы можете это сделать.



Сначала представлюсь — меня зовут Александр, последние шесть лет я посвятил iOS-разработке. Сейчас отвечаю за мобильное приложение ManyChat и проблемы буду решать на его примере.

Давайте сразу сформулируем, что мы будем делать:

  • Добавим типу Error функциональности
  • Превратим ошибки в понятные для пользователя алерты
  • Выведем в интерфейс возможные дальнейшие действия и обработаем их нажатия

И все это будет на Swift:)
Читать дальше →
Всего голосов 17: ↑17 и ↓0+17
Комментарии3

Как организовать бэкенд мобильного приложения?

Время на прочтение5 мин
Количество просмотров17K
image

Что мы делаем? Сервис регистрации и авторизации пользователя для мобильного приложения

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

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

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

(ФЗ 152 «О персональных данных», ст. 12, Глава 2)

Соблазн использования именно Firebase велик, но если мы хотим застраховаться от ненужной возни с различными надзорными ведомствами, то начинаем смотреть альтернативные варианты.
Читать дальше →
Всего голосов 3: ↑2 и ↓1+4
Комментарии3

Добавляем темную тему в iOS

Время на прочтение4 мин
Количество просмотров9.4K
Всем привет!

Меня зовут Андрей, я из команды «Мой Брокер». Я рассĸажу Вам ĸаĸ добавлял поддержĸу темной темы в iOS.

Apple в iOS 13 добавила темную тему для всей системы, пользователи могут выбрать светлое или темное оформление на настройках iOS. В темном режиме система использует более темную цветовую палитру для всех экранов, видов, меню и элементов управления.

image

Кому интересно — заходите под кат.
Читать дальше →
Всего голосов 7: ↑7 и ↓0+7
Комментарии5

Современный код для выполнения HTTP запросов в Swift 5 с помощью Combine и применение их в SwiftUI. Часть 2. Hacker News

Время на прочтение15 мин
Количество просмотров6.1K


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



В предыдущих статьях  на примере базы данных фильмов TMDb и агрегатора новостей NewsAPI.org была представлена стратегия применения Combine для формирования HTTP запросов и использования их во View Model для управления UI, спроектированного с помощью SwiftUI. В этой статье мы в точности воспроизведем ту же самую стратегию для разработки приложения, взаимодействующего с агрегатором новостей Hacker News, но добавим работу с «внешним» издателем Timer и для простоты исключим обработку ошибок.

Надо сказать, что выборка статей на ресурсе Hacker News имеет совершенно другую логику, чем в новостном агрегаторе NewsAPI.org, но технология, основанная на выполнении HTTP запросов с помощью Combine, прекрасно показывает свою гибкость и в этой ситуации. Кроме того, информация на сайте Hacker News очень часто обновляется и использование внешнего «издателя» Timer позволит автоматически отслеживать поступающие на сайт новые истории (Story), именно так их называют на этом ресурсе.

API агрегатора новостей Hacker News можно использовать совершенно свободно и не требуется никакой регистрации для аккаунта разработчика. Это здорово, потому что вы можете сразу начать работать над кодом без длительной регистрации, как мы делали это с другими public APIs.
Читать дальше →
Всего голосов 4: ↑4 и ↓0+4
Комментарии0

Современный код для выполнения HTTP запросов в Swift 5 с помощью Combine и применение их в SwiftUI. Часть 1

Время на прочтение27 мин
Количество просмотров20K


Выполнение HTTP запросов — это один из самых важных навыков, которые необходимо получить при разработке iOS приложений. В более ранних версиях Swift (до версии 5) вне зависимости от того, формировали ли вы эти запросы «с нуля» или с использование известного фреймворка Alamofire,  вы в конечном итоге получали сложный и запутанный код с callback типа completionHandler: @escaping(Result<T, APIError>) -> Void.

Появление в Swift 5 нового фреймворка функционального реактивного программирования Combine в сочетании с уже существующими URLSession и Codable предоставляет вам все необходимые инструменты для самостоятельного написания очень компактного кода для выборки данных из интернета.

В этой статье в соответствии с концепцией Combine мы будем создавать «издателей» Publisher для выборки данных из интернета, на которые в дальнейшем сможем легко «подписаться» и использовать при проектировании UI как с помощью UIKit, так и с помощью SwiftUI.

В SwiftUI это выглядит более лаконично и более эффектно, так как действие «издателей» Publisher не ограничивается просто выборкой данных, а простирается дальше, вплоть до управления пользовательским интерфейсом (UI). Дело в том, что в SwiftUI разделение данных и View осуществляется с помощью ObservableObject классов с @Published свойствами, изменения которых SwiftUI АВТОМАТИЧЕСКИ отслеживает и полностью «перерисовывает» свои View.

В эти ObservableObject классы можно очень просто заложить определенную бизнес-логику приложения, если некоторые из этих @Published свойств являются результатом синхронных и/ или асинхронных преобразований других @Published  свойств, которые можно напрямую менять такими «активными» элементами пользовательского интерфейса (UI) как текстовые поля TextField, Picker, Stepper, Toggle и т.д.
Читать дальше →
Всего голосов 5: ↑5 и ↓0+5
Комментарии1

Опыт переезда для работы программистом в Берлин (часть 2)

Время на прочтение7 мин
Количество просмотров46K
Добрый день! В первой части я рассказывал о том, как получал визу и искал жилье, а в этой расскажу, как найти работу в Германии и как это делал я. Забегая вперед, скажу, что в Берлине мне потребовалась 10 дней, чтобы получить первый оффер, который я в итоге и принял. Но приготовления были, конечно, более длительными.
Читать дальше →
Всего голосов 32: ↑31 и ↓1+30
Комментарии108

Перевести речь в текст на iOS, используя Speech framework

Время на прочтение2 мин
Количество просмотров5.1K
Сегодня мы будем переводить речь в текст. Сначалa убедитесь, что у вас установлена последняя версия iOS и Xcode. Для Speech Framework нужна минимум iOS 10. Я создал проект с поддержкой SwiftUI, для этого нужна iOS 13. Но это не обязательно, можете использовать Storyboard.

Если вы не знаете, что такое SwiftUI, и хотите быстрый обзор, вам сюда.

Создайте новый проект “File > New > Project…”, выберите “Single View App” и “User Interface: SwiftUI”. Проект будет выглядеть примерно так:



Выбираем файл ContentView.swift и меняем «struct ContentView...» на:

struct ContentView: View {
    @ObservedObject var speechRec = SpeechRec()
    var body: some View {
        Text(speechRec.recognizedText)
            .onAppear {
                self.speechRec.start()
        }
    }
}

class SpeechRec: ObservableObject {
    @Published private(set) var recognizedText = ""
    func start() {
        recognizedText = "Привет!"
    }
}


ContentView — это то, что показываем на экране. SpeechRec — это где мы будем переводить речь в текст. Распознанный текст будем держать на recognizedText, а ContentView будет отображать это на экране.
Читать дальше →
Всего голосов 5: ↑5 и ↓0+5
Комментарии2

История переезда системного администратора в Германию. Часть вторая: переезд и первые шаги

Время на прочтение15 мин
Количество просмотров59K
Всем привет.

Я наконец-то изыскал время и написал вторую часть своей истории об IT-эмиграции. Первую часть можно прочитать тут — История переезда системного администратора в Германию. Часть первая: поиск работы и виза. В этой части я опишу подробно, как мы с сестрой обустраивались на новом месте, какие ошибки при этом допускали и сколько нам эти ошибки стоили.

Итак, поехали.

У нас было два загранпаспорта, национальная виза, контракт на работу, договор на учебу и целое множество вещей всех сортов и расцветок, а также лысый кот, длинный список дел, норовящая развалиться машина и несколько тысяч евро. Не то чтобы всё это было так уж необходимо для переезда в Германию, но если уж начал эмигрировать из России, то становится трудно остановиться. Единственное, что вызывало у меня опасение — это жилье. Ничто в мире не бывает более беспомощным, безответственным и порочным, чем поиск квартиры во Франкфурте. Я знал, что рано или поздно мы столкнемся и с этим.

Читать дальше →
Всего голосов 82: ↑73 и ↓9+64
Комментарии273
1
23 ...

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность