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

Swift *

Открытый объектно-ориентированный язык

Сначала показывать
Порог рейтинга
Уровень сложности

Пользовательский инструмент, который не помешал бы вам в вашем приложении

Время на прочтение11 мин
Количество просмотров2.2K
В преддверии старта базового курса «iOS-разработчик» подготовили для вас еще один интересный перевод.





Примечание: Эта статья был написана незадолго до WWDC 2020, но вам следует читать ее только после просмотра конференции. Все, о чем здесь пойдет речь, уже доступно — вам не нужно скачивать бета-версию или ждать до осени, чтобы использовать это. Также, я собираюсь обновить статью, если что-нибудь относящееся к ней зарелизят на WWDC

Большинство из вас, вероятно, уже работали или в настоящее время работают над приложением, для которого значительная часть функциональности зависит от связи с сервером посредством HTTP. Когда что-то работает не так, как ожидалось, или вы просто хотите понять область кода, с которой вы еще не знакомы, часто бывает полезно посмотреть HTTP-запросы, идущие между приложением и сервером. Какие запросы были сделаны? Что именно отправляет сервер? Для этого вы, вероятно, используете такие инструменты, как Charles Proxy или Wireshark.

Однако эти инструменты часто довольно сложны в использовании и особенно в настройке. Они могут потребовать, чтобы вы настроили собственный SSL сертификат и выполнили множество нетривиальных операций, чтобы заставить устройство доверять ему. Они также отображают очень много информации, которая может вам никогда и не понадобиться для понимания вашего приложения. И в то же время их трудно сопоставить с тем, что происходит в вашем приложении. Что, если я скажу вам, что существуют инструменты, которые могут выполнять большую часть этой работы, требующие от вас значительно меньше мороки с их настройкой, и отображающие информацию в виде, который намного более сопоставим с тем, что на самом деле происходит в вашем приложении?
Читать дальше →

Разделяй и властвуй. Модульное приложение из монолита на Objective-C и Swift

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


Привет, Хабр! Меня зовут Василий Козлов, я iOS-техлид в Delivery Club, и застал проект в его монолитном виде. Признаюсь, что приложил руку к тому, борьбе с чем посвящена эта статья, но раскаялся и трансформировал своё сознание вместе с проектом.

Я хочу рассказать, как разбивал существующий проект на Objective-C и Swift на отдельные модули — framework’и. Согласно Apple, framework — это директория определенной структуры.

Изначально мы поставили цель: обособить код, реализующий функцию чата для поддержки пользователей, и уменьшить длительность сборки. Это привело к полезным последствиям, которым сложно следовать, не имея привычки и существуя в монолитном мире одного проекта.
Читать дальше →

FigmaExport: как автоматизировать экспорт UI-Kit из Figma в Xcode и Android Studio проекты

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


Если вы iOS- или Android-разработчик и дизайн вашего проекта разрабатывается в Figma, то скорее всего вы сталкиваетесь с проблемами при экспорте ресурсов: цвета выгрузить нельзя, а иконки и картинки экспортировать неудобно. В этой статье я расскажу, как можно облегчить себе жизнь и автоматизировать экспорт UI-Kit из Figma напрямую в Xcode и Android Studio.
Читать дальше →

AppCode 2020.2: поддержка Swift Package Manager, улучшенное быстродействие, Change Signature для Swift и многое другое

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

КПДВ — это Change Signature, уже пятый рефакторинг для Swift. Обо всем остальном в новом AppCode 2020.2 — под катом.


Change Signature


Читать дальше →

Создаем калькулятор на Swift 5

Время на прочтение12 мин
Количество просмотров17K
В преддверии старта базового курса «iOS-разработчик» публикуем статью, которую написал наш внештатный автор.



Всем привет! Прошло уже больше года с того момента, как появился релиз Swift 5, который принес разработчикам много нового. В этой статье я хочу поговорить о мобильной разработке для IOS, как она устроена, что для этого нужно, и о многом другом. Статья рассчитана на людей, которые только начинают свое программирование на Swift 5.
Читать дальше →

Реализуем машинное обучение на iOS-устройстве с использованием Core ML, Swift и Neural Engine

Время на прочтение9 мин
Количество просмотров11K
Привет, хабр! В преддверии старта продвинутого курса «Разработчик iOS», мы традиционно подготовили для вас перевод полезного материала.





Введение


Core ML — это библиотека машинного обучения, выпущенная в свет Apple на WWDC 2017.

Она позволяет iOS разработчикам добавлять в свои приложения персонализированный опыт в режиме реального времени с использованием передовых локальных моделей машинного обучения с помощью Neural Engine.
Читать дальше →

Контрибьютим в Swift

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


Знакомо, узнали?


Каждый раз когда вы пытались объявить опциональное замыкание @escaping в Swift компилятор ругался и писал непонятную ошибку @escaping attribute only applies to function types. Мне это не нравилось, и я решил это исправить. Теперь компилятор Swift 5.3 вместо этой ошибки напишет Closure is already escaping in optional type argument.


И сегодня мы разберемся, как сделать свой вклад в развитие языка Swift.

Читать дальше →

iOS in-app purchases: клиентское или серверное хранение продуктов

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

На сегодняшний день около 80% мобильных приложений работают по подписочной системе. Благодаря этому мы имеем сотни разных подходов к тому как и когда показать пользователю экран с предложением подписки, как мотивировать пользователя на покупку, чем лучше завлечь пользователя.



При встраивании подписок, иногда упускаются важные вопросы:


  • как и где хранить id для предлагаемых продуктов?
  • как часто планируется итерация по новым продуктам?
Читать дальше →

Новые Property Wrappers в SwiftUI

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

Привет, Хабровчане! В конце августа в OTUS стартует новая группа профессионального базового курса «Разработчик iOS». Как всегда делимся полезным переводом и приглашаем на бесплатные онлайн-мероприятия: «День Открытых Дверей» и «Быстрый старт в IOS-разработку».





WWDC20 привнес в SwiftUI много новых функций, о которых на протяжении следующих недель я собираюсь рассказывать вам в своем блоге. Начать же сегодня я хочу с главных дополнений к потокам данных SwiftUI в виде новых оберток свойств (Property Wrappers) @StateObject, @AppStorage, @SceneStorage и @ScaledMetric.

Читать дальше →

iOS in-app purchases: часть 2: Инициализация и обработка покупок

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

Всем привет, меня зовут Виталий, я основатель Adapty. Мы продолжаем цикл статей, посвещенных встроенным покупкам в iOS приложениях:


  1. iOS in-app purchases, часть 1: Конфигурация и добавление в проект.
  2. iOS in-app purchases, часть 2: Инициализация и обработка покупок. — Вы тут.
  3. iOS in-app purchases, часть 3: Серверная валидация покупок.
  4. iOS in-app purchases, часть 4: Локальное тестирование покупок в XCode.
  5. iOS in-app purchases, часть 5: Обработка ошибок SKErrors

В нашем блоге также есть туториалы для Android, React Native и Flutter, заходите, чтобы найти что-то полезное.


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


Создание экрана с подписками


В любом приложении, которое использует встроенные покупки присутствует пейволл. Есть требования от Apple, которые определяют минимальный набор необходимых элементов и поясняющих текстов для подобных экранов. На данном этапе мы не будем максимально точно выполнять их все, но наш вариант будет очень приближен к рабочему варианту.


image
Читать дальше →

Новости о машинном обучении Apple в 2020 году

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

В 2020 году машинное обучение на мобильных платформах перестало быть революционным новшеством. Интеграция интеллектуальных функций в приложения стала стандартной практикой.

К счастью, это вовсе не означает, что Apple прекратила разрабатывать инновационные технологии.

В этой публикации я кратко расскажу о новостях в отношении платформы Core ML и других технологий искусственного интеллекта и машинного обучения в экосистеме Apple.
Читать дальше →

MVI и SwiftUI – одно состояние

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

Представим, нам нужно внести небольшую правку в работу экрана. Экран меняется каждую секунду, поскольку в нем одновременно происходит множество процессов. Как правило, чтобы урегулировать все состояния экрана, необходимо обратиться к переменным, каждая из которых живет своей жизнью. Держать их в голове либо очень трудно, либо вовсе невозможно. Чтобы найти источник проблемы, придется разобраться в переменных и состояниях экрана, да еще проследить, чтобы наше исправление не поломало что-то в другом месте. Допустим, мы потратили уйму времени и все-таки внесли нужную правку. Можно ли было решить эту задачу проще и быстрее? Давайте разбираться.

Читать дальше →

Swift: Копируй-изменяй

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


Часто бывает так, что нам нужно скопировать объект, изменив некоторые его свойства, но сохранив остальные неизменными. Для этой задачи существует функция copy().

Это отрывок описания метода copy() из документации Kotlin. На нашем родном языке Swift это означает примерно такую возможность:


struct User {
    let id: Int
    let name: String
    let age: Int
}

let steve = User(id: 1, name: "Steve", age: 21)

// Копируем экземпляр, изменив свойства `name` и `age`
let steveJobs = steve.changing { newUser in
    newUser.name = "Steve Jobs"
    newUser.age = 41
}

Выглядит вкусно, не так ли?


Увы, в Swift отсутствует подобный функционал "из коробки". Это небольшое руководство поможет реализовать его самостоятельно.

Читать дальше →

Ближайшие события

Swift и Си: туда и обратно

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

Однажды мне поручили задачу под iOS — VPN-client со специфической криптографией.

Криптография в нашей компании традиционно своя, есть готовая реализация на Си.

В этой статье я расскажу, как мне удалось подружить Си и Swift.

Для наглядности в качестве примера напишем простую функцию преобразования строки на Си и вызовем ее из Swift.
Читать дальше →

Делегаты и колбэки в Swift простым языком. Что же такое этот delegate, и как работает callback

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

В Swift при изучении UI (User Interface) каждый рано или поздно приходит к необходимости использования делегата. Все гайды о них пишут, и вроде бы делаешь, как там написано, и вроде бы работает, но почему и как это работает, не у каждого в голове укладывается до конца. Лично у меня даже какое-то время складывалось ощущение, что delegate – это какое-то волшебное слово, и что оно прям встроено в язык программирования (вот, насколько запутаны были мои мысли от этих гайдов). Давайте попытаемся объяснить простым языком, что же это такое. А разобравшись с делегатом, уже гораздо легче будет понять, что такое колбэк (callback), и как работает он.


Официант и повар


Итак, перед тем как перейти к коду давайте представим себе некоего официанта и какого-нибудь повара. Официант получил заказ от клиента за столиком, но сам он готовить не умеет, и ему нужно попросить об этом повара. Он может пойти на кухню и сказать повару: «Приготовь курицу». У повара есть соответствующие инструменты (сковорода, масло, огонь…) и навык приготовления. Повар готовит и отдает блюдо официанту. Официант берет то, что сделано поваром и несет к клиенту.


А теперь представим себе ситуацию, что официант не может прибежать на кухню и сказать повару напрямую, какое блюдо у него заказали. Не пускают его на кухню (допустим, такие правила) или кухня находится на другом этаже (устанешь бегать). И единственный способ общения – это окошко мини-лифта. Официант кладет туда записку, нажимает кнопку, лифт уехал на кухню. Приезжает обратно с готовым блюдом. Запомнили? Теперь зафиксируем ситуацию в голове, попробуем воссоздать через код и понять, как это связано с нашей темой.

Читать дальше →

Как я простые циклы искал

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

иконка библиотеки Проснулся я как-то ближе к вечеру и решил — всё пора, пора уже сделать новую фичу в моей библиотеке. А за одно и проверку графа на циклы починить и ускорить. К утреннему обеду сделал новую фичу, улучшил код, сделал представление графа в удобном виде, и дошёл до задачи нахождения всех простых циклов в графе. Потягивая чашку холодной воды, открыл гугл, набрал "поиск всех простых циклов в графе" и увидел...

Найти простые циклы

Apple WWDC 2020: что нового в тестировании iOS

Время на прочтение6 мин
Количество просмотров4.5K
Привет, меня зовут Сергей, и я тестирую iOS приложения в Exness. В конце июня 2020 г. закончилась очередная WWDC. Давайте разберемся, что же она принесла нового в мир тестирования iOS приложений.

image
Читать дальше →

BoxView — удобный autolayout для iOS

Время на прочтение4 мин
Количество просмотров2.9K
Хочу поделиться библиотекой для эффективного построения пользовательского интерфейса iOS приложений на основе autolayout.

Хотя с появлением SwiftUI актуальность autolayout быстро уменьшается, пока этот механизм все еще активно используется, и библиотека может быть полезна для тех, кто создает (или меняет) UI непосредственно в коде.
Читать дальше →

Аккуратно и системно облегчаем понимание кода

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

Читаемость кода упрощает как процесс написания программ, так и последующие действия – от отладки и оптимизации до тестирования и сопровождения.


image


Один из эффективных способов для понимания кода – применение функциональной парадигмы программирования. Основная идея функционального программирования состоит в представлении процесса вычислений как последовательного изменения состояний без хранения где-либо самих состояний. В качестве примера системы, в которой хорошо реализован функциональный подход, часто приводят Haskell, а также Erlang или Scala. Внедряя такой подход в распространенные языки, такие как JS или Swift, можно добиться как улучшения читаемости, так и тестируемости.


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

Читать дальше →

iOS in-app purchases часть 1: конфигурация и добавление в проект

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

Всем привет, меня зовут Виталий, я основатель Adapty. Подписки — один из способов монетизировать приложение. С их помощью вы можете дать пользователю возможность получить постоянный доступ к обновляемому контенту в приложении или же к предоставляемому сервису. В отличие от обычных покупок, где Apple берет себе 30% комиссию, на подписках эта комиссия сокращена до 15% в случае, если пользователь подписан в течение 1 года и более. Важный момент: если пользователь отменит подписку, то данный счетчик сбросится через 60 дней.


Мы выпускаем цикл статей, закрывающих все вопросы добавления встроенных покупок в iOS:


  1. iOS in-app purchases, часть 1: конфигурация и добавление в проект. — Вы тут.
  2. iOS in-app purchases, часть 2: Инициализация и обработка покупок.
  3. iOS in-app purchases, часть 3: Серверная валидация покупки.
  4. iOS in-app purchases, часть 4: Локальное тестирование покупок в XCode.
  5. iOS in-app purchases, часть 5: Обработка ошибок SKErrors.

​​В этой части мы научимся:


  • cоздавать покупки в App Store Connect;
  • конфигурировать подписки — указывать длительность, стоимость, пробные периоды;
  • получать список покупок в приложении

когда подключаешь покупки в приложении

Читать дальше →