Pull to refresh
0
0
Send message

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

Reading time6 min
Views7.9K

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

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

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

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

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

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

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

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

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

Читать далее
Total votes 7: ↑7 and ↓0+7
Comments0

iOS Responder Chain или Что спрашивают на собеседовании

Reading time4 min
Views50K

image


Какая разница между первым и вторым примером?

За что отвечает таргет?

В каком случае вызывается метод при нажатие кнопки?

TL;DR


При нажатии на кнопку наш метод вызывается в обоих случаях.


Только в первом примере UIKit попытается вызвать метод в назначенном таргете(у нас это ViewController). Будет краш, если этого метода не существует.


Во втором же примере используется iOS Responder Chain, UIKit будет искать самого ближнего UIResponder-a у которого есть данный метод. Краша не будет, если наш метод не найден.


UIViewController, UIView, UIApplication наследуют от UIResponder.

Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments3

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

Reading time4 min
Views7.4K

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

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

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

Читать далее
Total votes 29: ↑28 and ↓1+27
Comments5

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

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

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

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

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

Reading time12 min
Views50K
В первой статье цикла я описал свой переезд в Германию с семьей.

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


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

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

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

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


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

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

Reading time8 min
Views65K

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


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

Читать дальше →
Total votes 21: ↑21 and ↓0+21
Comments13

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

Reading time16 min
Views78K

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


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

Читать дальше →
Total votes 133: ↑130 and ↓3+127
Comments459

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

Reading time10 min
Views36K

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


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

image

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

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

Reading time13 min
Views48K

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


image

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

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

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


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

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

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

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

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

Reading time4 min
Views415K


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

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

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

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

Ну, приступим.
Читать дальше →
Total votes 64: ↑59 and ↓5+54
Comments26

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

Reading time4 min
Views2.7K
В Райффайзенбанке несколько мобильных приложений, которые должны работать на самых разных девайсах и операционных системах, поэтому мы стараемся автоматизировать рутинные процессы в тестировании. Эта статья показалась нам полезной, и мы решили ее перевести.


foto source: unsplash.com

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

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

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

Reading time7 min
Views22K


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

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

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

Читать дальше →
Total votes 20: ↑18 and ↓2+16
Comments13

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

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



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

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

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

И все это будет на Swift:)
Читать дальше →
Total votes 17: ↑17 and ↓0+17
Comments3

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

Reading time5 min
Views16K
image

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

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

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

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

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

Соблазн использования именно Firebase велик, но если мы хотим застраховаться от ненужной возни с различными надзорными ведомствами, то начинаем смотреть альтернативные варианты.
Читать дальше →
Total votes 6: ↑5 and ↓1+4
Comments3

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

Reading time4 min
Views8.8K
Всем привет!

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

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

image

Кому интересно — заходите под кат.
Читать дальше →
Total votes 7: ↑7 and ↓0+7
Comments5

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

Reading time15 min
Views5.8K


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.
Читать дальше →
Total votes 4: ↑4 and ↓0+4
Comments0

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

Reading time27 min
Views19K


Выполнение 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 и т.д.
Читать дальше →
Total votes 5: ↑5 and ↓0+5
Comments1

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

Reading time7 min
Views46K
Добрый день! В первой части я рассказывал о том, как получал визу и искал жилье, а в этой расскажу, как найти работу в Германии и как это делал я. Забегая вперед, скажу, что в Берлине мне потребовалась 10 дней, чтобы получить первый оффер, который я в итоге и принял. Но приготовления были, конечно, более длительными.
Читать дальше →
Total votes 32: ↑31 and ↓1+30
Comments108

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

Reading time2 min
Views4.7K
Сегодня мы будем переводить речь в текст. Сначал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 будет отображать это на экране.
Читать дальше →
Total votes 5: ↑5 and ↓0+5
Comments2
1
23 ...

Information

Rating
Does not participate
Registered
Activity