Arm1.ru

Фреймворки для серверного Swift

Пару месяцев назад мне попался пост про серверные фреймворки для Swift - сравнение производительности 4-х фреймворков на Swift для сервера между собой и с Node.js. Производительность меня заинтересовала. Судя по результатам, лучшим оказался Perfect. Через месяц автор выложил ещё одно сравнение производительности, но тестировал уже не в macOS, а в Linux. И снова Perfect оказался в лидерах.

На этих выходных я решил как следует его потрогать. Перед этим я бегло посмотрел в 4 сравниваемых фреймворка: Perfect, Kitura, Vapor и Zewo. Требований у меня к фреймворку было не много, кроме стандартного роутинга запросов и выдачи ответов, мне нужно:

  • Поддержка шаблонизаторов, чтобы отдавать не только JSON, но и HTML.
  • Поддержка сетевых запросов, т.к. в самом Foundation ничего для сетевых запросов ещё не готово.
  • Желательно, чтобы были готовые библиотеки для работы с разными БД. 

Естественно, всё это нужно под Linux. 

Читать далее...

comment comments

Установка Swift 3 на Ubuntu Server 16.10

Записал видео-туториал по установке Swift 3 на Ubuntu Server 16.10

comment comments
local_offer swift linux ubuntu

Shake эффект для UIView

// MARK: - UIView Extension, or NSView
extension UIView {

  /// Shake animation
  func shake() {
    let animation = CAKeyframeAnimation(keyPath: "transform.rotation")
    animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
    animation.duration = 1.0
    animation.values = [-Double.pi / 6, Double.pi / 6, -Double.pi / 6, Double.pi / 6, -Double.pi / 7, Double.pi / 7, -Double.pi / 8, Double.pi / 8, 0.0 ]

    layer.add(animation, forKey: "shake")
  }

}

myView.shake()

comment comments

Про переход на Swift 3 и Swift 2.4

За последние пару недель состоялся релиз новых версия macOS, iOS, tvOS и watchOS. Вместе с ними вышел новый Xcode и новая версия Swift.

При открытии проекта в новом Xcode он сразу предлагает конвертировать проект в новую версию Swift - или в версию 2.3, которая почти без изменений, как промежуточная версия, или сразу в новую версию Swift 3, в котором изменений прилично.

Сам проект конвертировать труда не составляет, ибо есть встроенный в Xcode конвертер. Я решил сначала попробовать 2.3, чтобы не углубляться в дебри изменений. Рабочий проект сконвертировался без проблем, а потом начался ад с зависимостями. Я пользуюсь Carthage, все зависимости компилируются в .framework, который ты импортируешь в свой проект. 1 раз импортировав, потом уже сам проект трогать не приходится, просто пересобирать зависимости. В первую неделю после релиза многие разработчики быстро выкатили обновления - и релиз на Swift 2.3, и релиз на Swift 3. Но не все. Например, SwiftyJSON - разработчики на какое-то время пропали, а их фреймворк очень популярен. Пришлось копать - те зависимости, которые не обновились, благо, подхватили сторонние разработчики. Они их форкнули, всё перевели на Swift 2.3 и отправили pull request'ы в оригинальные репозитории. 

Пришлось потратить какое-то время и заменить некоторые зависимости на форки. И ура, проект собрался наконец. В течение следующей недели авторы всех зависимостей, которые я использую, уже выкатили релизы для Swift 2.3. Я с чистым сердцем вернул зависимости на оригинальные.

Само собой, есть смысл побыстрее перейти на Swift 3, потому что 2.3 - версия временная и поддержка её в будущих релизах Xcode исчезнет. Да и 3-й Swift обещают по возможности последней версией, которая сломает совместимость с предыдущими версиями.

Опять же - сам проект без особых проблем сконвертировался в Swift 3. Не всё, но многое. А то, что само не конвертнулось, Xcode сам при компиляции предлагал исправить, в основном надо было только тыкать мышкой и разрешать ему это поправить. Хоть я и дождался, когда все зависимости обновятся на Swift 3, пришлось немного попотеть. К слову - если framework скомпилен в Swift 2.3, то в проект на Swift 3 его нельзя включить. И обратно тоже. Разгрёб разные проблемы - начался гемор другой. AlamoFire для Swift 3 не просто обновился, а мажорно обновился - с переименованием классов и изменением API. В итоге пришлось некоторые методы вообще переписать на две трети. Хотя в большинстве случаев просто пришлось поменять местами аргументы и где-то что-то переименовать. Плюс, теперь чтобы передать get-параметры, нужно их ручками в строку URL добавлять, раньше это мог сделать аргумент parameters, но теперь эти данные шлются в теле запроса, как будто мы форму заполнили.

Но в итоге всё закончилось хорошо, хотя миграция и заняла время и силы. Вперёд, в будущее.

P.S. опенсорсная версия Swift 3, которую можно запускать на Linux, всё ещё не имеет полной реализации классов для работы с сетью. А фреймворк для бэкенда Perfect не компилится в Ubuntu 16.04. Пока Swift для бэкенда опять откладывается.

comment comments
local_offer swift

Элегантный extension для Notification.Name в Swift 3

В новой версии Swift 3 теперь другой конструктор для NSNotification (теперь уже просто Notification, префикс NS отбросили):

struct Config {
  static let shouldCloseBrowserNotification = "ShouldCloseBrowserNotification"
}

let notification = Notification(
  name: Notification.Name(rawValue: Config.shouldUpdateDialogNotification),
  object: nil,
  userInfo: nil
)
NotificationCenter.default.post(notification)

Выглядит параметр name не очень то красиво теперь. Зато можно расширить Notification.Name, чтобы было красиво:

extension Notification.Name {
  static let shouldCloseBrowserNotification = Notification.Name("ShouldCloseBrowserNotification")
}

let notification = Notification(
  name: .shouldUpdateDialogNotification,
  object: nil,
  userInfo: nil
)
NotificationCenter.default.post(notification)

comment comments

Про Mac App Store

Читал раньше упоминания о том, что Mac App Store is dead. Примерно месяц назад я запилил свой информер для яндексовской AppMetrica и залил в MAS. Стал наблюдать за чартами (недолго, правда). Собственно, на старте было 2 покупки (я даже знаю от кого обе). Результат меня удивил.

Сразу первое место в категории Бизнес в российском Mac App Store. Приятно, конечно, когда твоя иконка украшает список категорий.

Вот только всего 2 покупки говорят о том, что в Mac App Store прям очень мало покупают и скачивают приложения. Бесплатные, может быть, качают больше, но платные - точно очень мало. По крайней мере в России. Ни в какое сравнение с App Store с приложениями для iOS. Кроме того, приложение заняло 8-е место в общем топе магазина.

Значит дело не в категории. В других странах, скорее всего, приложений покупают больше, но в России - совсем мало. Правда, для macOS и пиратство развито гораздо сильнее, чем для iOS, потому что не нужен никакой геморой с jailbreak. Поэтому, наверное, люди и не очень часто покупают у нас. 

comment comments

Как сделать сочную иконку приложению

Секрет прост. Идём на iconfinder.com, ищем годную flat-иконку. Видимо, что она в довольно тусклых тонах. Качаем SVG, открываем в Sketch. Добавляем элементам градиенты и тени - получаем контрастную сочную иконку. По крайней мере, лучше, чем было :)

comment comments