Заметка про Socket.IO-Client-Swift
Небольшая шпаргалка - для socket.io есть клиент на Swift. Казалось бы, на гитхабе хорошо расписано, как его использовать. Вот только к моему бэкенду на Node.js он никак не хотел подключаться с кодом примеров.
Логи показывали (если пробовать через polling-запросы), что клиент стучится по адресу /engine.io и получает 404 ошибку. Изучение браузерной Javascript-библиотеки, которая с этим же бэкендом работает без каких-либо танцев с бубном, показало, что надо указать другой путь - /socket.io. Благо, для этого есть специальная опция.
Итого, получаем:
let socketURL = NSURL(string: "http://localhost:3000")
let socket = SocketIOClient(socketURL: socketURL!, options: [
.ForceWebsockets(true),
.Path("/socket.io/"),
.ConnectParams(["token": "token"])
])
socket.on("connect") {data, ack in
print("socket connected")
}
socket.connect()
comment
comments
App Store Release Informer 1.1.0
Переписал своего бота на ES2015, плюс добавил тесты. Когда бот пишет о том, что вышла новая версия в App Store, то пишется и что нового в этой версии.
comment comments
Carthage vs. CocoaPods
Пара мыслей о Carthage в сравнении с CocoaPods.
Что у Carthage так же, как и у CocoaPods:
- Для CocoaPods создаётся Podfile. Для Carthage нужно создать Cartfile.
- И там, и там можно указать конкретную версию зависимости и конкретный git-репозиторий.
- После установки зависимостей создаётся Podfile.lock для CocoaPods и Cartfile.resolved для того, чтобы установить конкретные версии зависимостей/библиотек.
- И для CocoaPods, и для Carthage довольно просто всё устанавливается одной командой из консоли.
Минусы:
- Все зависимости необходимо добавлять ручками в проект и раздел Build Phases. Делается это один раз, но ручками, в отличие от CocoaPods, где он сам генерит WorkSpace. С одной стороны это неудобство, с другой - просто мы избалованы CocoaPods. Например, в мире Node.js мало сделать npm install package, ты всё равно должен заинклудить зависимость там где надо через require.
- Меньше выбор. Меньше популярности. CocoaPods старше, популярнее и многие библиотеки распространялись через CocoaPods. Многие до сих пор только через них распространяются, включая, например, SDK от Google. Для Carthage проще найти что-то более менее свежее. Зато оно, как правило, доступно и через CocoaPods, и через Carthage, и даже через Swift Package Manager.
Плюсы:
- Зависимости билдятся один раз. При любой сборке проекта библиотеки и зависимости не собираются заново, даже если очистить все кэши и сделать все clean'ы. В итоге каждый билд идёт быстрее.
- Не создаётся ещё одного файла .xcworkspace, файл проекта остаётся нетронутым. Создание WorkSpace в последних версиях CocoaPods глючит уже чуть ли не полгода и создаёт этот WorkSpace так, что проект просто не собирается и приходится лезть ручками что-нибудь исправлять. Например, путь для поиска файлов-заголовков.
- При обновлении зависимости до последней версии, опять же, не трогается файл проекта. Просто пересобираются, они уже добавлены в проект.
- Можно сбилдить зависимость сразу для всех платформ, или для конкретной, например, для tvOS.
- У CocoaPods центральный репозиторий. Если он упадёт - ничего не будет работать. У Carthage такого нет, он просто берёт с GitHub зависимости. С одной стороны это тоже некий центральный репозиторий, но без промежуточного звена, и шансы, что он выстоит от нагрузки, выше.
Конвертирование UTC даты с миллисекундами из String в NSDate на Swift
Чтобы перевести дату из текста в NSDate из немного нестандартного вида с миллисекундами:
let dateString = "2016-04-22T17:42:46.762+03:00"
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
let myDate = dateFormatter.dateFromString(dateString)
comment
comments
CompareShots v1.1
Вышло обновление CompareShots версии 1.1.
Из нового - прозрачность теперь меняется просто перетаскиванием пальца (горизонтально). Причём такую фичу попросил один из пользователей в письме. К тому же так прозрачность меняется плавнее.
Кроме того, переписал полностью приложение на Swift. Теперь у меня есть аж один зарелизенный проект на нём :) Но это только начало.
Что удивительно - обновление в App Store я отправил вчера, и менее чем через сутки оно уже прошло Review и вышло. Ни разу так быстро Apple на моей памяти так быстро не пропускали приложение.
comment commentsЛог-функция для Swift с выводом файла, метода и строки
Функция-шпаргалка для логирования в Swift:
import Foundation
/**
Лог-функция с выводом файла, метода и строки, откуда вызывается.
Пример использования: DLog("привет")
- parameter messages: тексты/объекты, которые надо вывести
- parameter fullPath: путь до файла, который вызывается
- parameter line: номер строки в файле
- parameter functionName: название метода/функции вызова
*/
func DLog(messages: Any..., fullPath: String = #file, line: Int = #line, functionName: String = #function) {
let file = NSURL.fileURLWithPath(fullPath)
for message in messages {
print("\(file.pathComponents!.last!):\(line) -> \(functionName) \(message)")
}
}
// Пример:
DLog("message 1", "message 2")
// YourClass.swift:42 -> someMethod() message 1
// YourClass.swift:42 -> someMethod() message 2
comment
comments