Skip to content

Create a Swift web wrapper project for macOS

Set the website URL, app identity and window options, and the page shows the file list and the Swift source before you download. The default project is 5 files and 3,821 bytes; build.command compiles it with the Xcode Command Line Tools into an unsigned .app. An icon is accepted only if its bytes really are PNG or JPEG, up to 10 MB — anything else is refused and the ZIP is written without one.

Runs locally in your browser
Local generation ·
ConfigurationSwift + WKWebView
Live previewmacOS 12+
VoriTools Desktop
KNative WKWebView wrapperhttps://voritools.com/
Project contents
Build on your Mac

Unsigned by design

Private and inspectable

How to generate a macOS app project

Fill in the form and the preview follows: app name, website URL, bundle identifier, version, window size, the two window switches and an optional local icon. The bundle identifier is filled in from the app name until you edit it yourself, and the file list and the Swift source appear on the right before anything is downloaded. No compiler and no server are involved yet.

What comes out was built for real while testing: the default project is 5 files in 3,821 bytes, and build.command compiled it with the Xcode Command Line Tools into a working .app. A 256 px PNG icon became an AppIcon.icns of 269,370 bytes, the same picture saved as JPEG one of 1,837,743 bytes. A text file renamed to .png, and any picture over 10 MB, are refused in the status line — the archive is then packed without an icon instead of shipping one the Mac build would choke on.

  1. Enter the app name and the website URL. A URL written without a scheme gets https:// first, and the preview shows the address the app will really load.
  2. Adjust the bundle identifier (reverse-domain, such as com.example.myapp) and the version. The identifier keeps following the app name while you leave it untouched.
  3. Set the window width and height within 480–2560 × 320–1600, and choose whether the window can be resized and shows a title bar.
  4. Pick a local PNG or JPEG icon if you want one; 10 MB is the ceiling. The file is read in the browser only, and the build script turns it into AppIcon.icns.
  5. Press Download macOS project (.zip). Unzip it and double-click build.command — or run chmod +x build.command && ./build.command — and the finished .app appears in the build folder.

The files in the ZIP, the icon rules and what the build step needs

What the ZIP contains

Five files make up the project: Sources/main.swift (the AppKit + WKWebView wrapper that opens your URL), Info.plist (name, bundle identifier, version, minimum system 12.0), build.command (the shell script that compiles it), README.md and .gitignore. A sixth entry — icon.png or icon.jpg — appears only when you choose an icon. The download is named <app name>-macos-project.zip and the measured default archive is 3,821 bytes.

Nothing else is in the archive: no compiled binary, no signature, no tracking. Info.plist is plain XML and the Swift file is short enough to read before you build it; the Copy source button copies exactly that file.

Icon, window and the small print

An icon is accepted only if its bytes really are PNG or JPEG — the signature is checked, not the file name — and only up to 10 MB; anything else is refused with a message and leaves the project without an icon. During the build sips renders 16, 32, 128, 256 and 512 px (plus @2x) into an .iconset and iconutil packs them into Resources/AppIcon.icns — measured: 269,370 bytes from a 256 px PNG, 1,837,743 bytes from the same picture as JPEG.

Window width 480–2560 and height 320–1600 are the accepted ranges (2560 × 1600 was built in testing). Unchecking “Allow window resizing” takes .resizable out of the window style mask; unchecking “Show title bar” hides the title and makes the bar transparent. A plain http:// URL adds NSAllowsArbitraryLoadsInWebContent to Info.plist so the web view is allowed to load it.

Building, signing and privacy

Building happens on your Mac and needs the Xcode Command Line Tools: the script calls xcrun swiftc, so macOS may ask for the developer tools once. If your extractor drops the executable bit of build.command, run chmod +x build.command first.

The result is an unsigned, non-notarized .app: Gatekeeper warns on the first launch, and handing it to other people means signing and notarizing it with your own Apple Developer identity. The page itself keeps the work local — while a project was generated during testing the browser sent no request at all, the only entry being the blob URL of the icon preview.

Recent tools: