-rw-r--r-- 2.1K 11 апр. 2024 · FC685FE · ~1 мин

Создание DMG файла в терминале

dmg code snippets шпаргалки bash

Создание DMG-файла через Терминал

Вам когда-нибудь нужно было упаковать ваше приложение для распространения на macOS? Решение проще, чем вы думаете, и оно прямо у вас под рукой в Терминале. Недавно я наткнулся на удобную bash-функцию, которая упрощает создание DMG (Disk Image) файла. Вот как её настроить:

Шаг 1: Редактирование профиля

nano ~/.zprofile

Шаг 2: Добавление bash-функции

Затем вставьте следующую функцию в ваш .zprofile. Этот скрипт использует встроенную в macOS команду hdiutil для создания файловой системы HFS+ внутри DMG-файла.

dmg(){
    hdiutil create -fs HFS+ -srcfolder "$1" -volname "$2" "$2.dmg"
}

Шаг 3: Сохранение и применение изменений в профиле

После добавления кода сохраните изменения и выйдите из `nano`. Чтобы функция стала доступна немедленно без перезапуска терминала, примените конфигурацию вашего профиля:

source ~/.zprofile

Шаг 4: Использование функции

Теперь вы можете легко создавать DMG-файл для любой папки или приложения. Например, чтобы создать DMG для 'ModulbankInformer.app', просто выполните:

dmg ModulbankInformer.app ModulbankInformer

Эта команда создаст файл ModulbankInformer.dmg с содержимым директории ModulbankInformer.app.

Вот и всё — быстрый и эффективный способ создания DMG-файлов прямо из вашего Терминала!

[↵] открыть пост creating-a-dmg-file-from-terminal.md
-rw-r--r-- 2.0K 8 апр. 2024 · BA68FE9 · ~1 мин

Swift клиент для CouchDB 1.5.0

swift couchdb swift package vapor open source

Клиент Swift для CouchDB 1.5.0

И вот, ещё одна новая версия библиотеки CouchDB client. После недавнего поста про версию 1.4.0, в Swift on Server вышла новая версия async-http-client, которая включает новую реализацию синглтона клиента. Теперь это HTTPClient.shared, поэтому я обновил библиотеку CouchDB, чтобы адаптировать её к этому изменению. Это также означает, что вам больше не нужно вызывать httpClient.syncShutdown(), если используется синглтон. Кроме того, они подняли минимальную версию Swift до 5.8 (что я также сделал в версии 1.4.0 клиента для CouchDB). Так что я продолжаю поддерживать библиотеку в актуальном состоянии.

Список изменений:

  • Обновил минимальную версию async-http-client до новой 1.21.0. Если вы не можете использовать её в своем проекте, вы всё еще можете оставаться на версии 1.4.0.
  • Теперь библиотека будет внутри использовать HTTPClient.shared (новое в async-http-client 1.21.0) для запросов, если не предоставлен EventLoopGroup.
  • Больше нет внутренних вызовов httpClient.syncShutdown() при использовании HTTPClient.shared.

CouchDB Client на GitHub | Документация с примерами и руководствами.

[↵] открыть пост swift-couchdb-client-1-5-0.md
-rw-r--r-- 1.7K 8 апр. 2024 · 08DA6BF · ~1 мин

Swift клиент для CouchDB 1.4.0

swift couchdb swift package vapor open source

Swift CouchDB client

Вышла новая версия CouchDB Client:

  • Библиотека перешла с HTTPClient.Response на HTTPClientResponse, что похоже на HTTPClient.Response, но предназначено для Swift Concurrency API. Также был выполнен переход с HTTPClient.Body на HTTPClientRequest.Body. Эти изменения влияют на методы get и find. Старые методы помечены как устаревшие (deprecated), для миграции смотрите документацию для получения информации об обновленных методах.
  • Минимальная версия Swift теперь 5.8.
  • Протокол CouchDBRepresentable теперь помечен как Codable.
  • Кроме того, была добавлена новая модель данных под названием RowsResponse. Она принимает обобщённый тип CouchDBRepresentable, что упрощает получение строк из базы данных. Например:
    let decodeResponse = try JSONDecoder().decode(RowsResponse<MyApp>.self, from: data)
  • Наконец, внесены небольшие улучшения в документацию и обучающие примеры.

CouchDB Client на GitHub | Документация с примерами и руководствами.

[↵] открыть пост swift-couchdb-client-1-4-0.md
-rw-r--r-- 1.4K 4 апр. 2024 · 0427246 · ~1 мин

Middleware для роутинга в Vapor 4 для обрезания слеша в url

vapor code snippets шпаргалки swift server side swift

Для веб-сайта или бэкенда — обычное дело, когда такие URL, как mySite.com/webpage и mySite.Com/webpage/, ведут на одну и ту же страницу. Для поисковых систем это разные адреса. Чтобы избежать дублирования контента, можно добавить простую middleware, которая будет удалять завершающий слеш и перенаправлять пользователя.

Вот пример кода для такого класса middleware в Vapor 4:

final class TrimSlashInPathMiddleware: Middleware {
    func respond(to request: Request, chainingTo next: Responder) -> EventLoopFuture<Response> {
        if request.url.path.count > 1, request.url.path.hasSuffix("/") {
            let newPath = String(request.url.path.trimmingSuffix(while: { $0 == "/" }))
            let response = request.redirect(to: newPath, redirectType: .permanent)
            return request.eventLoop.makeSucceededFuture(response)
        }
        return next.respond(to: request)
    }
}

Просто добавьте его в файл configure.swift:

import Vapor

public func configure(_ app: Application) throws {
    app.middleware.use(TrimSlashInPathMiddleware())

    app.http.server.configuration.port = 8081

    try routes(app)
}

Работает с Vapor 4.92.5.

[↵] открыть пост a-middleware-for-vapor4-to-trim-a-slash-in-url-path.md
-rw-r--r-- 703B 3 апр. 2024 · BC252B6 · ~1 мин

Модульбанк информер 1.3

macos приложения модульбанк open source

Модульбанк информер 1.3

Выпустил небольшое обновление для Модульбанк инфомера. Обновил иконку в статусбаре (тепер узнаваемая), и добавил чекбокс для скрытия счетов с нулевым балансом. Ну и немного рефакторинга.

Исходный код на GitHub: https://github.com/makoni/ModulbankInformer
Скачать можно тут: https://github.com/makoni/ModulbankInformer/releases

[↵] открыть пост modulbank-informer-1-3.md
-rw-r--r-- 2.8K 30 марта 2024 · E0344BE · ~2 мин

Как получить выделенный текст внутри TextEditor в SwiftUI на macOS

swiftui macos

Как получить выделенный текст внутри TextEditor в SwiftUI на macOS

TextEditor в SwiftUI все еще не имеет API для получения выделения пользователя. Но так как внутри используется NSTextView, мы можем подписаться на его уведомления.

Вот пример того, как получить подстроку из пользовательского выделения:

[↵] открыть пост how-to-get-selected-text-inside-of-texteditor-in-swiftui-on-macos.md
-rw-r--r-- 1.3K 29 марта 2024 · EA452FF · ~1 мин

Swift клиент для CouchDB 1.3.2

swift couchdb swift package vapor open source

Клиент Swift для CouchDB

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

  • dateDecodingStrategy и dateEncodingStrategy теперь можно передавать в качестве параметров для методов get, update и insert.
  • Добавлена проверка для обработки истекших cookie аутентификации.
  • Сравнение заголовка set-cookie в ответе теперь выполняется в нижнем регистре.
  • Представлены новые методы для использования API _find, позволяющие искать документы с помощью декларативного синтаксиса JSON-запросов.
  • Исправлена ошибка, из-за которой метод update не использовал параметр dateEncodingStrategy.

CouchDB Client на GitHub | Документация с примерами и руководствами.

[↵] открыть пост swift-couchdb-client-1-3-2.md
makoni@arm1:~/blog$ cd ../page-5/ // ← предыдущая cd ./page-7/ // ещё посты →