diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 970c07e..a0b039a 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -9,6 +9,9 @@ jobs:
platform: [macos-latest, ubuntu-24.04, ubuntu-latest]
go-version: [1.24.1]
runs-on: ${{ matrix.platform }}
+ env:
+ APPLE_TEAM_ID: 6ZG9T42688
+ MACOS_CODESIGN_NAME: Horizontal
steps:
- uses: actions/checkout@v4
- name: Install Go
@@ -47,15 +50,48 @@ jobs:
run: |
npm install -g appdmg
echo ' { "title": "Tella", "icon": "./defaultappicon.icns", "contents": [ { "x": 448, "y": 344, "type": "link", "path": "/Applications" }, { "x": 192, "y": 344, "type": "file", "path": "./build/bin/Tella-Desktop.app" } ] } ' > dmg.json
+ - name: Import macOS signing certificate
+ if: matrix.platform == 'macos-latest'
+ env:
+ MACOS_CERTIFICATE_BASE64: ${{ secrets.MACOS_CERTIFICATE_BASE64 }}
+ MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}
+ KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
+ run: |
+ CERTIFICATE_PATH="$RUNNER_TEMP/macos-signing-certificate.p12"
+ KEYCHAIN_PATH="$RUNNER_TEMP/app-signing.keychain-db"
+
+ printf "%s" "$MACOS_CERTIFICATE_BASE64" | base64 -D > "$CERTIFICATE_PATH"
+ security create-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"
+ security set-keychain-settings -lut 21600 "$KEYCHAIN_PATH"
+ security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"
+ security import "$CERTIFICATE_PATH" -P "$MACOS_CERTIFICATE_PASSWORD" -A -t cert -f pkcs12 -k "$KEYCHAIN_PATH"
+ security list-keychains -d user -s "$KEYCHAIN_PATH"
+ security default-keychain -s "$KEYCHAIN_PATH"
+ security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"
+ security find-identity -v -p codesigning "$KEYCHAIN_PATH"
- name: Build OSX
if: matrix.platform == 'macos-latest'
- # TODO: get OSX signing working
# Tella-Desktop.app is a folder, while tella.app is the executable inside that folder -- confusing? Yes, unfortunately!
run: |
echo "Removing old .app"
rm -rf "Tella-Desktop.app"
wails build --platform "darwin/universal" --ldflags="-s -w"
+ codesign --force --deep --options runtime --timestamp --entitlements ./build/darwin/entitlements.plist --sign "Developer ID Application: ${MACOS_CODESIGN_NAME} (${APPLE_TEAM_ID})" ./build/bin/Tella-Desktop.app
+ codesign --verify --deep --strict --verbose=2 ./build/bin/Tella-Desktop.app
appdmg ./dmg.json ./build/bin/tella.dmg
+ - name: Notarize and staple macOS DMG
+ if: matrix.platform == 'macos-latest'
+ env:
+ APPLE_ID: ${{ secrets.APPLE_ID }}
+ APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
+ run: |
+ xcrun notarytool submit ./build/bin/tella.dmg \
+ --apple-id "$APPLE_ID" \
+ --password "$APPLE_APP_SPECIFIC_PASSWORD" \
+ --team-id "$APPLE_TEAM_ID" \
+ --wait
+ xcrun stapler staple ./build/bin/tella.dmg
+ xcrun stapler validate ./build/bin/tella.dmg
- name: Build for Windows (on linux!)
if: matrix.platform == 'ubuntu-24.04'
run: |
@@ -68,17 +104,17 @@ jobs:
if: matrix.platform == 'macos-latest'
uses: actions/upload-artifact@v4
with:
- name: wails-binaries-macos
+ name: Tella Desktop macOS
path: build/bin/*
- name: upload artifacts windows
if: matrix.platform == 'ubuntu-24.04'
uses: actions/upload-artifact@v4
with:
- name: wails-binaries-windows
+ name: Tella Desktop Windows
path: build/bin/*
- name: upload artifacts linux
if: matrix.platform == 'ubuntu-latest'
uses: actions/upload-artifact@v4
with:
- name: wails-binaries-linux
+ name: Tella Desktop Linux
path: build/bin/*
diff --git a/README.md b/README.md
index 9381bb3..a014cb6 100644
--- a/README.md
+++ b/README.md
@@ -143,17 +143,21 @@ The application implements the [Tella Nearby Sharing protocol](https://github.co
### macOS Code Signing
-The application is configured for code signing on macOS for distribution outside the App Store:
+The application is configured for code signing and notarization on macOS for distribution outside the App Store:
- Uses Developer ID Application certificate for notarization
- Includes hardened runtime options for security
- Requires valid Apple Developer account for signing
-To build a signed version for macOS:
+The GitHub Actions macOS build expects these repository secrets:
-- Update the identity in wails.json with your Developer ID
-- Ensure you have a valid Developer ID Application certificate
-- Run wails build - the app will be automatically signed during build
+- `MACOS_CERTIFICATE_BASE64` - Base64 encoded `.p12` certificate
+- `MACOS_CERTIFICATE_PASSWORD` - Password for the `.p12` certificate
+- `KEYCHAIN_PASSWORD` - Temporary CI keychain password
+- `APPLE_ID` - Apple ID email with access to the developer team
+- `APPLE_APP_SPECIFIC_PASSWORD` - App-specific password for notarization
+
+The certificate identity is configured in `wails.json` as `Developer ID Application: Horizontal (6ZG9T42688)`.
### Compatibility
diff --git a/build/darwin/Info.dev.plist b/build/darwin/Info.dev.plist
index 04727c2..b37fc48 100644
--- a/build/darwin/Info.dev.plist
+++ b/build/darwin/Info.dev.plist
@@ -8,7 +8,7 @@
CFBundleExecutable
{{.Name}}
CFBundleIdentifier
- com.wails.{{.Name}}
+ org.wearehorizontal.tella-desktop.dev
CFBundleVersion
{{.Info.ProductVersion}}
CFBundleGetInfoString
diff --git a/build/darwin/Info.plist b/build/darwin/Info.plist
index 19cc937..3ae162d 100644
--- a/build/darwin/Info.plist
+++ b/build/darwin/Info.plist
@@ -8,7 +8,7 @@
CFBundleExecutable
{{.Name}}
CFBundleIdentifier
- com.wails.{{.Name}}
+ org.wearehorizontal.tella-desktop
CFBundleVersion
{{.Info.ProductVersion}}
CFBundleGetInfoString
diff --git a/wails.json b/wails.json
index d8ccbb3..cab927b 100644
--- a/wails.json
+++ b/wails.json
@@ -7,8 +7,8 @@
"frontend:dev:watcher": "npm run dev",
"frontend:dev:serverUrl": "auto",
"author": {
- "name": "valbuenag",
- "email": "valbuena52@gmail.com"
+ "name": "Horizontal",
+ "email": "dev@wearehorizontal.org"
},
"buildTags": "sqlite_unlock_notify sqlite_crypt sqlcipher",
"info": {
@@ -20,7 +20,7 @@
"darwin": {
"sign": true,
"codesign": {
- "identity": "Developer ID Application: YOUR_ORG_NAME (YOUR_TEAM_ID)",
+ "identity": "Developer ID Application: Horizontal (6ZG9T42688)",
"entitlements": "build/darwin/entitlements.plist",
"options": [
"--timestamp",