Pull to refresh

Портфель iOS TEAM разработчика

Reading time 4 min
Views 22K
Development for iOS *Swift *
Tutorial
image

Каждый раз когда в команду приходит новый сотрудник, приходится решать вопрос с тем, какие приложения стоит установить на его компьютер. Даже опытные разработчики не помнят всего списка того, чем они попользуются. Часть приложений запускается ежедневно. Часть — время от времени. Но, когда такого приложения нет под рукой — это часто становится потерей драгоценного времени. Как правило, первые дни отводятся на развертывание окружения и ознакомление со списком задач. Хорошо когда есть возможность пройтись по списку и отметить то, что было сделано перед погружением в проект. Из этих соображений был сформирован «портфель» с которым работает наша команда.
Читать дальше →
Total votes 23: ↑15 and ↓8 +7
Comments 42

Введение в обработку ошибок в Swift 3

Reading time 5 min
Views 10K
Productivity Inside corporate blog Development for iOS *Swift *Development for MacOS *
Translation
Сегодня мы приготовили перевод для тех, кто так же, как автор статьи, при изучении Документации языка программирования Swift избегает главы «Error Handling».

Из статьи вы узнаете:

  • что такое оператор if-else и что с ним не так;
  • как подружиться с Error Handling;
  • когда стоит использовать Try! и Try?


Читать дальше →
Total votes 14: ↑9 and ↓5 +4
Comments 8

Пора валить! Опыт миграции с Objective-C на Swift

Reading time 7 min
Views 7.2K
SuperJob corporate blog Development for iOS *Development of mobile applications *Objective C *Swift *
Олег Алексеенко, руководитель iOS разработки Superjob, рассказывает об опыте компании по переходу c Objective-C на Swift.

Статья написана по материалам выступления на RIT2017.



У Superjob 3 мобильных приложения для iOS:

  • Поиск работы (создание резюме, поиск вакансий и т.д.)
  • Поиск сотрудников (создание вакансий, поиск резюме)
  • Производственный календарь (планирование рабочего времени и отпусков)

Total votes 13: ↑9 and ↓4 +5
Comments 9

Способ управления цветовыми схемами «Swift» «iOS»-приложения

Reading time 4 min
Views 9.7K
Perfect code *Development for iOS *ООP *Swift *
Даже для самого что ни на есть начинающего разработчика (скорее, на которого и рассчитан данный очерк), надеюсь, не секрет, что в коде не должно присутствовать никаких т.н. «hardcoded»-значений и прочих всяких там «magic numbers». Почему – тоже, надеюсь, понятно, а если нет, то в Сети имеются десятки, а то и сотни статей на эту тему, а также написан классический труд. «Android Studio» (наверное, не во всех случаях, но все же) даже любит генерировать «warnings» на эту тему и предлагать выносить строки и т.д. в ресурсные файлы. «Xcode» (пока?) такими подсказками нас не балует, и разработчику приходится самостоятельно держать себя в узде или, скажем, получать по рукам от коллег после «code review».

Все это касается и используемых в приложении цветов.

Читать дальше →
Total votes 17: ↑14 and ↓3 +11
Comments 13

Использование ReSwift: написание приложения Memory Game

Reading time 21 min
Views 8.5K
Development for iOS *Development of mobile applications *
Tutorial
Translation
ReSwift

Примечание. В этой статье используются Xcode 8 и Swift 3.

По мере того, как размеры iOS приложений продолжают увеличиваться, паттерн MVC постепенно теряет свою роль как «подходящего» архитектурного решения.

Для iOS разработчиков доступны более эффективные архитектурные паттерны, такие как MVVM, VIPER и Riblets. Они сильно отличаются, но у них есть общая цель: разбить код на блоки по принципу единой ответственности с многонаправленным потоком данных. В многонаправленном потоке, данные перемещаются в разных направлениях между различными модулями.

Иногда вы не хотите (или вам не нужно) использовать многонаправленный поток данных — вместо этого вы хотите, чтобы данные передавались в одном направлении: это однонаправленный поток данных. В данной статье про ReSwift вы свернёте с проторенного пути и узнаете, как использовать фреймворк ReSwift для реализации однонаправленного потока данных при создании Memory Game приложения, под названием MemoryTunes.
Читать дальше →
Total votes 8: ↑8 and ↓0 +8
Comments 3

Параллельное программирование в Swift: Operations

Reading time 10 min
Views 9.9K
Development for iOS *Objective C *Swift *
Translation
В параллельном программировании в Swift: Основы Я представил множество низкоуровневых способов для управления параллелизмом в Swift. Первоначальная идея состояла в том, чтобы собрать все различные подходы, которые мы можем использовать в iOS в одном месте. Но при написании этой статьи я осознал, что их слишком много, чтобы перечислить в одной статье. Поэтому я решил сократить методы более высокого уровня.

image

Я упомянул Operations в одной из моих статей, но давайте рассмотрим их более внимательно.
Читать дальше →
Total votes 14: ↑14 and ↓0 +14
Comments 0

Производительность в iOS или как разгрузить main thread. Часть 1

Reading time 8 min
Views 12K
e-legion corporate blog High performance *Development for iOS *Development of mobile applications *Swift *



Есть разные приёмы и хитрости, которые помогают оптимизировать работу iOS-приложений, когда одна задача должна выполняться за 16,67 миллисекунд. Рассказываем, как разгрузить main thread и какие инструменты лучше подходят для отслеживания стека вызовов в нём.


«Ребята, давайте представим, что вы сможете сократить время запуска на 10 секунд. Умножив это на 5 миллионов пользователей, ежедневно у нас будет 50 миллионов секунд. За год это составит порядка десяти человеческих жизней. Поэтому, если вы сделаете первичную загрузку на 10 секунд быстрее, вы спасёте несколько десятков жизней. Это действительно стоит того, не правда ли?»

Стив Джобс о производительности (времени запуска компьютера Apple II).


Статья основана на докладе iOS-разрабочика из Fyusion Люка Пархема, с которым он выступил на Международной конференции мобильных разработчиков MBLT DEV в прошлом году.

Читать дальше →
Total votes 24: ↑23 and ↓1 +22
Comments 3

Производительность в iOS — Core Animation, Offscreen Rendering и System Trace. Часть 2

Reading time 7 min
Views 9.6K
e-legion corporate blog High performance *Development for iOS *Development of mobile applications *Swift *



Как избежать проблем с производительностью с помощью пресета Core Animation, что использовать для трассировки участков кода и с помощью каких функций сократить долю вычислительных операций в приложении с 26% до 0.6% — читай во второй части статьи по материалам доклада Люка Пархэма на прошлогодней конференции MBLT DEV. Первая часть статьи доступна здесь.


Под катом не только полезные советы, но и последние early bird билеты на MBLT DEV 2018 — купить их можно только сегодня.

Total votes 17: ↑16 and ↓1 +15
Comments 1

Архитектурный шаблон «Итератор» («Iterator») во вселенной «Swift»

Reading time 5 min
Views 7.6K
Development for iOS *ООP *Swift *
«Итератор» – один из шаблонов проектирования, которые программисты чаще всего не замечают, потому что его реализация, как правило, встроена непосредственно в стандартные средства языка программирования. Тем не менее, это тоже один из поведенческих шаблонов, описанных в книге «Банды четырех» (“Gang of Four”, “GoF”) “Шаблоны проектирования” (“Design Patterns: Elements of Reusable Object-Oriented Software”), и понимать его устройство никогда не помешает, а иногда даже может в чем-то помочь.
Читать дальше →
Total votes 18: ↑16 and ↓2 +14
Comments 2

Ускорение компиляции в Xcode на swift

Reading time 2 min
Views 7.9K
Development for iOS *Xcode *Swift *
Sandbox
С ростом проекта, скорость компиляции проекта замедляется. Особенно это заметно становится, когда тестируешь программу, делая параллельно небольшие изменения в программе.

Сначала давайте узнаем как долго компилируется проект до наших улучшений. ЧТобы это сделать надо в терминале ввести

defaults write com.apple.dt.Xcode ShowBuildOperationDuration -bool YES

Для этого нужно зайти в раздел Product зажать alt и нажать Clean Build Folder, а потом собрать проект заново. Мой проект компилируется 81 секунду. Посмотрим какой результат будет после улучшения.



Нам, в первую очередь, стоит узнать какие места приводят к замедлению компиляции. По умолчанию Xcode не показывает предупреждения, где проблема, но мы можем это исправить.
Самые «тяжелые» места большие функции и проверка типов. Поэтому нам нужно вписать эти две строчки в раздел Build Settings -> Other Swift Flags -> Debug

-Xfrontend -warn-long-function-bodies=100
-Xfrontend -warn-long-expression-type-checking=100

(здесь у нас стоит 100мс время компиляции, мы можем поставить любое число)

Наглядный рисунок


Пример моего рабочего проекта



У меня есть участок который занимает 13778 ms, скорее всего у вас не будет такого, но из-за специфики проекта у меня такие участки есть. Так как там построено бинарное дерево для OCR.
Из-за глубокой вложенности друг в друга и определения типа только в самом начале, перед знаком равенства, компилятору требуется много времени понять какой перед ним тип. (Дерево занимает 30 строк, вот его часть)
Читать дальше →
Total votes 15: ↑15 and ↓0 +15
Comments 6

Немного практики функционального программирования в Swift для начинающих

Reading time 31 min
Views 88K
Development for iOS *Development of mobile applications *Functional Programming *Swift *
Tutorial


Я хотела бы представить концепцию Функционального Программирования новичкам самым простейшим образом, выделив некоторые его преимущества из множества остальных, которые реально позволят сделать код более читаемым и выразительным. Я подобрала для вас интересные демонстрационные примеры, которые находятся на Playground в Github.

Функциональное Программирование: Определение


Прежде всего, Функциональное Программирование — это не язык или синтаксис, а скорее всего — способ решения проблем путем разбиения сложных процессов на более простые и последующей их композиции. Как следует из названия "Функциональное программирование", единицей композиции для данного подхода является функция; и цель такой функции — избежать изменения состояния или значений за пределами своей области действия (scope).

В Мире Swift для этого есть все условия, ибо функции здесь являются такими же полноправными участниками процесса программирования, как и объекты, а проблема изменяемости (mutation) решается на уровне концепции value ТИПОВ (структур struct и перечислений enum), которые помогают управлять изменяемостью (mutation) и четко сообщают о том, как и когда это может произойти.

Однако Swift не является в полном смысле языком Функционального программирования, он не принуждает вас к Функциональному программированию, хотя и признает преимущества Функциональных подходов и находит способы встраивания их.

В этой статье мы сфокусируемся на использовании встроенных в Swift (то есть «из коробки») элементов Функционального программирования и понимании того, как можно их комфортно использовать в вашем приложении.
Читать дальше →
Total votes 18: ↑17 and ↓1 +16
Comments 18

Опыт использования «координаторов» в реальном «iOS»-проекте

Reading time 10 min
Views 11K
Development for iOS *
Мир современного программирования богат на тренды, а для мира программирования «iOS»-приложений это справедливо вдвойне. Надеюсь, я не сильно ошибусь, утверждая, что одним из самых «модных» архитектурных шаблонов последних лет является «координатор». Вот и наша команда какое-то время назад осознала непреодолимое желание попробовать на себе этот прием. Тем более, что подвернулся очень удачный случай – значительное изменение логики и тотальная перепланировка навигации в приложении.
Читать дальше →
Total votes 12: ↑12 and ↓0 +12
Comments 6

«Фабричный метод» и «Абстрактная фабрика» во вселенной «Swift» и «iOS»

Reading time 9 min
Views 14K
Programming *Perfect code *Development for iOS *ООP *Swift *
Слово «фабрика» – безусловно одно из самых часто употребляемых программистами при обсуждении своих (или чужих) программ. Но смысл в него вкладываемый бывает очень разным: это может быть и класс, порождающий объекты (полиморфно или нет); и метод, создающий экземпляры какого-либо типа (статический или нет); бывает, и даже просто любой порождающий метод (включая, конструкторы).

Конечно, не все, что угодно, порождающее экземпляры чего-либо, может называться словом «фабрика». Более того, под этим словом могут скрываться два разных порождающих шаблона из арсенала «Банды четырех» – «фабричный метод» и «абстрактная фабрика», в подробности которых я и хотел бы немного углубиться, уделяя особое внимание классическим их пониманию и реализации.
Читать дальше →
Total votes 7: ↑7 and ↓0 +7
Comments 4

Изменяем содержимое уведомления приложения iOS

Reading time 4 min
Views 2.9K
Development for iOS *Swift *
Tutorial
Sandbox
Привет!

В этой статье я хочу поделиться своим опытом использования одного не очевидного (по крайней мере для меня) варианта изменения текста уведомления приложения, отправкой дополнительных данных через UNUserNotificationCenter.

Я надеюсь эта статья будет полезна для новичков в программировании под iOS на Swift. Предполагается, что у вас есть хотя бы некоторый опыт программирования под iOS на Swift. Я использовал Swift 5 и Xcode 10.2.1. И так, приступим.

Читать дальше →
Total votes 12: ↑11 and ↓1 +10
Comments 2

Поднимаем читаемость кода в iOS разработке

Reading time 3 min
Views 12K
Perfect code *Development for iOS *Development of mobile applications *Xcode *Swift *
Sandbox
Представьте себе книгу, в которой нет деления на главы, а все идет без логической и смысловой разбивки, книгу, где нет абзацев, нет точек и запятых, книгу, где в первой строке рассказывается про одно, во второй про другое, в третьей опять про первое.

Представили?

Смогли бы вы понять, о чем книга?

Насколько быстро вы смогли бы найти интересующий вас отрывок?

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

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

Для удобства я буду использовать слово класс (class), но подразумевать любой вид типа (class, struct, enum).

Благодаря применению этих советов ваш код станет читабельным, что в дальнейшем обеспечит удобство и скорость работы с ним.
Total votes 22: ↑19 and ↓3 +16
Comments 29

Human pose estimation on images for iOS

Reading time 5 min
Views 8.3K
Development for iOS *Development of mobile applications *Swift *Artificial Intelligence

Human pose estimation


A few months ago I came across one interesting open source project on the Internet — Openpose the aim of which is to estimate a human pose in real-time on a video stream. Due to my professional activities, I was interested to run it on the latest iOS device from Apple to check the performance and figure out if it is possible at all. It was also interesting to see how the performance of the neural network framework for iOS has been changed in the last years.

Read more →
Total votes 7: ↑6 and ↓1 +5
Comments 0

Протокольно ориентированное программирование, часть 3

Reading time 5 min
Views 4.5K
Swift *

Завершающая статья на тему протокольно ориентированного программирования.


В этой части мы рассмотрим как переменные обобщенного типа хранятся и копируются и как с ними работает метод dispatch.

Читать дальше →
Total votes 7: ↑7 and ↓0 +7
Comments 3

Создание инкрементального сервера для iOS Team

Reading time 3 min
Views 2.8K
Development for iOS *
image

Бесплатная книга

После пяти лет наступаний на одни и те же грабли, и полугода поисков DevOps-а, который знает что-такое Provision Profile и как от него зависит развертывание приложения, было принято решение составить пошаговую инструкцию, в картинках, о том, настраивать рабочее окружение в iOS Team с минимальными финансовыми вложениями (к примеру, когда нет проплаченных аккаунтов GitHub или Jira), а работа кипит.
Читать дальше →
Total votes 8: ↑8 and ↓0 +8
Comments 1

Стартуем с Core Data! Сложное простыми словами

Reading time 5 min
Views 30K
Development for iOS *Xcode *Swift *
Sandbox
Тем с Core Data уже написано большое количество, но большинство этих статей на английском языке, а так же с использованием большого количества «умных» слов которые могут запутать новичков.

Продолжение серии статей [Часть 2]

В данной статье я постараюсь рассказать о фреймворке от Apple понятным языком, чтобы даже «самые маленькие» программисты смогли вынести для себя информацию, и получить тот минимальный обьем знаний который поможет им в своих проектах.
Читать дальше →
Total votes 7: ↑7 and ↓0 +7
Comments 4

Валидация полей iOS — быстро и просто

Reading time 7 min
Views 6.6K
Development for iOS *Swift *
imageВалидация полей ввода — едва ли не самая распространенная задача в мобильных приложениях. Каждое приложение которое имеет форму авторизации и регистрации, также имеет некоторое количество средств ввода информации со стороны пользователя, которые порождают вполне ожидаемый садистско — изощренный ажиотаж тестировщиков. Продвинутая, технически-грамотная общность разработчиков научилась эффективно с ними с ним бороться путем встраивания регулярных выражений в исходный код.
Читать дальше →
Rating 0
Comments 5
1