Skip to content
/ macgo Public

macos bundle and permissions integration for go programs

License

tmc/macgo

Repository files navigation

macgo

A Go library for building macOS applications with proper permissions, entitlements, and bundle structure.

GoDoc License

Overview

macgo simplifies the process of creating macOS applications in Go by automatically handling:

  • App bundle creation and management
  • Permission requests (camera, microphone, files, etc.)
  • Code signing (ad-hoc and Developer ID)
  • Entitlements and sandboxing
  • TCC (Transparency, Consent, and Control) integration

Installation

go get github.com/tmc/macgo

Quick Start

package main

import (
    "log"
    "github.com/tmc/macgo"
)

func main() {
    // Request camera permission with automatic app bundle creation
    err := macgo.Request(macgo.Camera)
    if err != nil {
        log.Fatal(err)
    }

    // Your application code here
}

Core Features

Simple Permission Requests

Request macOS permissions with a single function call:

// Request single permission
macgo.Request(macgo.Camera)

// Request multiple permissions
macgo.Request(macgo.Camera, macgo.Microphone, macgo.Files)

Automatic Bundle Creation

macgo automatically creates a proper .app bundle structure with:

  • Info.plist with required metadata
  • Entitlements for requested permissions
  • Proper executable location
  • App icons (if provided)

Code Signing Support

Built-in support for code signing:

// Ad-hoc signing (development)
cfg := macgo.NewConfig().
    WithAppName("MyApp").
    WithAdHocSign()

// Developer ID signing (distribution)
cfg := macgo.NewConfig().
    WithAppName("MyApp").
    WithAutoSign() // Auto-detects Developer ID

Environment Configuration

Configure via environment variables:

MACGO_APP_NAME=MyApp          # Application name
MACGO_BUNDLE_ID=com.example   # Bundle identifier
MACGO_AD_HOC_SIGN=1          # Enable ad-hoc signing
MACGO_AUTO_SIGN=1             # Auto-detect signing identity
MACGO_DEBUG=1                 # Debug output

Available Permissions

  • Camera (macgo.Camera) - Camera access
  • Microphone (macgo.Microphone) - Microphone access
  • Location (macgo.Location) - Location services
  • Files (macgo.Files) - File system access
  • Network (macgo.Network) - Network connections
  • Sandbox (macgo.Sandbox) - App sandboxing

Advanced Usage

Custom Configuration

cfg := macgo.NewConfig().
    WithAppName("MyApp").
    WithBundleID("com.example.myapp").
    WithPermissions(macgo.Camera, macgo.Microphone).
    WithAppGroups("group.com.example.shared").
    WithDebug()

err := macgo.Start(cfg)

Auto Packages

Import auto packages for automatic configuration:

import (
    _ "github.com/tmc/macgo/auto/media"   // Camera + Microphone
    _ "github.com/tmc/macgo/auto/adhoc"   // Ad-hoc signing
    "github.com/tmc/macgo"
)

func main() {
    // Permissions and signing are pre-configured
    macgo.Request()
}

Package Structure

  • macgo - Core library and main API
  • bundle/ - App bundle creation and management
  • codesign/ - Code signing utilities
  • permissions/ - Permission definitions and validation
  • teamid/ - Team ID detection for signing
  • auto/ - Auto-configuration packages
  • examples/ - Example applications
  • internal/ - Internal implementation packages

Examples

See the examples/ directory for complete examples:

Requirements

  • Go 1.21 or later
  • macOS 11.0 or later
  • Xcode Command Line Tools (for code signing)

License

MIT License - see LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Acknowledgments

This library leverages macOS native frameworks and tools to provide seamless integration with the operating system's security model.

About

macos bundle and permissions integration for go programs

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages