Tag: «code snippets»

Creating a DMG File from the Terminal

Creating a DMG file from Terminal

Have you ever needed to package your application for distribution on macOS? The solution is simpler than you might think, and it's right at your fingertips in the Terminal. I recently stumbled upon a handy bash function that streamlines the creation of a DMG (Disk Image) file. Here's how to set it up:

Step 1: Edit Your Profile

nano ~/.zprofile

Step 2: Add the Bash Function

Next, insert the following function into your .zprofile. This script utilizes the hdiutil command, which is built into macOS, to create an HFS+ filesystem within a DMG file.

    hdiutil create -fs HFS+ -srcfolder "$1" -volname "$2" "$2.dmg"

Step 3: Save and Source Your Profile

After adding the code, save the changes and exit `nano`. To make the function available immediately without restarting your terminal, source your profile:

source ~/.zprofile

Step 4: Use the Function

Now, you can easily create a DMG file for any folder or application. For example, to create a DMG for the '', simply run:

dmg ModulbankInformer

This command will generate a ModulbankInformer.dmg file with the contents of the directory.

And there you have it - a quick and efficient way to create DMG files directly from your Terminal!

comment comments

A middleware for Vapor 4 routing to trim a slash in url path

It’s a common thing for a website or a backend to allow URLs like and mySite.Com/webpage/ for the same page. These pages are different URLs for a search engine. If you want to avoid duplicates, you can add a simple middleware to trim the ending slash and redirect a user.

Here’s an example code for such a middleware class for 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)

Just add it to configure.swift file:

import Vapor

public func configure(_ app: Application) throws {

    app.http.server.configuration.port = 8081

    try routes(app)

Works with Vapor 4.92.5.

comment comments