Build macOS

GitHub composite action to automatically build and sign macOS applications using fastlane. Complete support for npm, CocoaPods, Xcode builds, code signing, and notarization.

Why Build macOS?

Complete macOS build automation with intelligent dependency detection

🔍

Automatic Detection

Automatically detects and installs npm, Bundler, and CocoaPods dependencies based on your project structure.

⚙️

Flexible Configuration

Customizable paths for workspace, project, scheme, and output. Works with any macOS project structure.

🔐

Code Signing

Optional code signing with fastlane match and Developer ID for distribution outside the Mac App Store.

Notarization

Built-in support for Apple notarization to ensure your app is trusted by macOS Gatekeeper.

Smart Caching

Built-in caching for npm, CocoaPods, and Xcode DerivedData for faster builds.

📦

ZIP Creation

Optional ZIP archive creation for easy distribution and upload to GitHub releases.

Quick Start

Get up and running in minutes with these simple examples

Unsigned Build (Testing Only)
# Build unsigned app for local testing
- name: Build macOS App
  uses: starburst997/build-macos@v1
  with:
    workspace_path: "macos/MyApp.xcworkspace"
    project_path: "macos/MyApp.xcodeproj"
    scheme: "MyApp-macOS"
    output_name: "MyApp"
    mac_bundle_id: "com.company.myapp"
    build_signed: false
Signed Build with Developer ID
# Build and sign for distribution outside Mac App Store
- name: Build macOS App
  uses: starburst997/build-macos@v1
  with:
    # Project configuration
    workspace_path: "macos/MyApp.xcworkspace"
    project_path: "macos/MyApp.xcodeproj"
    scheme: "MyApp-macOS"
    output_name: "MyApp"
    mac_bundle_id: "com.company.myapp"

    # Build configuration
    build_signed: true
    export_method: "developer-id"
    create_zip: true

    # Apple credentials
    apple_connect_email: ${{ secrets.APPLE_CONNECT_EMAIL }}
    apple_developer_email: ${{ secrets.APPLE_DEVELOPER_EMAIL }}
    apple_team_id: ${{ secrets.APPLE_TEAM_ID }}

    # Match configuration
    match_repository: ${{ secrets.MATCH_REPOSITORY }}
    match_password: ${{ secrets.MATCH_PASSWORD }}
    match_deploy_key: ${{ secrets.MATCH_DEPLOY_KEY }}

    # App Store Connect API
    appstore_issuer_id: ${{ secrets.APPSTORE_ISSUER_ID }}
    appstore_key_id: ${{ secrets.APPSTORE_KEY_ID }}
    appstore_p8: ${{ secrets.APPSTORE_P8 }}
React Native App Example
# Build React Native macOS app with npm and CocoaPods
- name: Build React Native macOS App
  uses: starburst997/build-macos@v1
  with:
    working_directory: "sample"
    workspace_path: "macos/MyApp.xcworkspace"
    project_path: "macos/MyApp.xcodeproj"
    scheme: "MyApp-macOS"
    cocoapods_directory: "macos"
    output_name: "MyApp"
    mac_bundle_id: "com.company.myapp"
    build_signed: true
    create_zip: true
    # ... add credentials

Perfect For

Versatile solution for various macOS app development workflows

Native macOS Apps

  • Swift and Objective-C projects
  • Xcode workspace support
  • CocoaPods dependency management
  • Full code signing support

React Native macOS

  • Automatic npm detection
  • Metro bundler integration
  • CocoaPods for native modules
  • Configurable working directory

Electron/Hybrid Apps

  • Node.js toolchain support
  • Custom build scripts
  • Flexible path configuration
  • ZIP packaging for distribution

Distribution Ready

  • Developer ID code signing
  • Automatic notarization
  • GitHub releases integration
  • CI/CD pipeline ready