diff --git a/.editorconfig b/.editorconfig
index 2a45ec1..610d722 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -233,6 +233,9 @@ indent_size = 2
[*.json]
indent_size = 2
+[*.{yml,yaml}]
+indent_size = 2
+
# Shell scripts
[*.sh]
end_of_line = lf
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 51e3b14..465c145 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -35,6 +35,14 @@ on:
description: 'macOS arm64 AOT'
default: false
type: boolean
+ osx-x64:
+ description: 'macOS Intel x64'
+ default: false
+ type: boolean
+ osx-x64-aot:
+ description: 'macOS Intel x64 AOT'
+ default: false
+ type: boolean
android-arm64:
description: 'Android arm64'
default: false
@@ -65,6 +73,12 @@ on:
osx-arm64-aot:
type: boolean
default: true
+ osx-x64:
+ type: boolean
+ default: true
+ osx-x64-aot:
+ type: boolean
+ default: true
android-arm64:
type: boolean
default: true
@@ -180,6 +194,33 @@ jobs:
uses: actions/checkout@v6
- name: Publish osx-arm64
run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r osx-arm64 -c Release -o publish --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
+
+ - name: Create .app bundle and DMG (create-dmg)
+ run: |
+ set -euo pipefail
+ APP_DIR="bundle/Semi.Avalonia.Demo.app"
+ MACOS_DIR="${APP_DIR}/Contents/MacOS"
+ mkdir -p "${MACOS_DIR}"
+ cp -R publish/. "${MACOS_DIR}/"
+ chmod +x "${MACOS_DIR}/Semi.Avalonia.Demo.Desktop"
+ cp publish/Info-macOS.plist "${APP_DIR}/Contents/Info.plist"
+ codesign --force --deep --sign - "${APP_DIR}"
+ mkdir -p dmg_stage
+ ditto "${APP_DIR}" "dmg_stage/Semi.Avalonia.Demo.app"
+ brew install create-dmg
+ rm -f Semi.Avalonia.Demo.Desktop.osx-arm64.dmg
+ create-dmg \
+ --volname "Semi Avalonia Demo" \
+ --window-pos 200 120 \
+ --window-size 640 400 \
+ --icon-size 100 \
+ --icon "Semi.Avalonia.Demo.app" 175 185 \
+ --hide-extension "Semi.Avalonia.Demo.app" \
+ --app-drop-link 455 185 \
+ --skip-jenkins \
+ "Semi.Avalonia.Demo.Desktop.osx-arm64.dmg" \
+ "dmg_stage"
+
- name: Upload a Build Artifact
uses: actions/upload-artifact@v7
with:
@@ -188,6 +229,62 @@ jobs:
publish
!publish/*.pdb
+ - name: Upload macOS DMG
+ uses: actions/upload-artifact@v7
+ with:
+ name: Semi.Avalonia.Demo.Desktop.osx-arm64.dmg
+ path: Semi.Avalonia.Demo.Desktop.osx-arm64.dmg
+
+ osx-x64:
+ if: ${{inputs.osx-x64}}
+ runs-on: macos-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+
+ - name: Publish osx-x64
+ run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r osx-x64 -c Release -o publish --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
+
+ - name: Create .app bundle and DMG (create-dmg)
+ run: |
+ set -euo pipefail
+ APP_DIR="bundle/Semi.Avalonia.Demo.app"
+ MACOS_DIR="${APP_DIR}/Contents/MacOS"
+ mkdir -p "${MACOS_DIR}"
+ cp -R publish/. "${MACOS_DIR}/"
+ chmod +x "${MACOS_DIR}/Semi.Avalonia.Demo.Desktop"
+ cp publish/Info-macOS.plist "${APP_DIR}/Contents/Info.plist"
+ codesign --force --deep --sign - "${APP_DIR}"
+ mkdir -p dmg_stage
+ ditto "${APP_DIR}" "dmg_stage/Semi.Avalonia.Demo.app"
+ brew install create-dmg
+ rm -f Semi.Avalonia.Demo.Desktop.osx-x64.dmg
+ create-dmg \
+ --volname "Semi Avalonia Demo" \
+ --window-pos 200 120 \
+ --window-size 640 400 \
+ --icon-size 100 \
+ --icon "Semi.Avalonia.Demo.app" 175 185 \
+ --hide-extension "Semi.Avalonia.Demo.app" \
+ --app-drop-link 455 185 \
+ --skip-jenkins \
+ "Semi.Avalonia.Demo.Desktop.osx-x64.dmg" \
+ "dmg_stage"
+
+ - name: Upload a Build Artifact
+ uses: actions/upload-artifact@v7
+ with:
+ name: Semi.Avalonia.Demo.Desktop.osx-x64
+ path: |
+ publish
+ !publish/*.pdb
+
+ - name: Upload macOS DMG (Intel)
+ uses: actions/upload-artifact@v7
+ with:
+ name: Semi.Avalonia.Demo.Desktop.osx-x64.dmg
+ path: Semi.Avalonia.Demo.Desktop.osx-x64.dmg
+
osx-arm64-aot:
if: ${{inputs.osx-arm64-aot}}
runs-on: macos-latest
@@ -206,6 +303,24 @@ jobs:
publish
!publish/*.pdb
+ osx-x64-aot:
+ if: ${{inputs.osx-x64-aot}}
+ runs-on: macos-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+ - name: Enable Native AOT in .csproj
+ run: sed -i '' 's##true#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj
+ - name: Publish osx-x64 AOT
+ run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r osx-x64 -c Release -o publish
+ - name: Upload a Build Artifact
+ uses: actions/upload-artifact@v7
+ with:
+ name: Semi.Avalonia.Demo.Desktop.osx-x64.NativeAOT
+ path: |
+ publish
+ !publish/*.pdb
+
android-arm64:
if: ${{inputs.android-arm64 }}
runs-on: windows-latest
diff --git a/.github/workflows/release-tag.yml b/.github/workflows/release-tag.yml
index ab103c4..7bda509 100644
--- a/.github/workflows/release-tag.yml
+++ b/.github/workflows/release-tag.yml
@@ -58,6 +58,10 @@ jobs:
zip -rj Semi.Avalonia.Demo.Desktop.osx-arm64.zip Semi.Avalonia.Demo.Desktop.osx-arm64
cd Semi.Avalonia.Demo.Desktop.osx-arm64.NativeAOT
zip -r ../Semi.Avalonia.Demo.Desktop.osx-arm64.NativeAOT.zip .
+ cd "${GITHUB_WORKSPACE}"
+ zip -rj Semi.Avalonia.Demo.Desktop.osx-x64.zip Semi.Avalonia.Demo.Desktop.osx-x64
+ cd Semi.Avalonia.Demo.Desktop.osx-x64.NativeAOT
+ zip -r ../Semi.Avalonia.Demo.Desktop.osx-x64.NativeAOT.zip .
- name: Display structure of zipped files
run: ls -R
@@ -71,4 +75,6 @@ jobs:
files: |
nugets/*.nupkg
android-arm64/*.apk
- *.zip
\ No newline at end of file
+ *.zip
+ Semi.Avalonia.Demo.Desktop.osx-arm64.dmg/Semi.Avalonia.Demo.Desktop.osx-arm64.dmg
+ Semi.Avalonia.Demo.Desktop.osx-x64.dmg/Semi.Avalonia.Demo.Desktop.osx-x64.dmg
\ No newline at end of file
diff --git a/demo/Semi.Avalonia.Demo.Desktop/Info-macOS.plist b/demo/Semi.Avalonia.Demo.Desktop/Info-macOS.plist
new file mode 100644
index 0000000..aadc6f8
--- /dev/null
+++ b/demo/Semi.Avalonia.Demo.Desktop/Info-macOS.plist
@@ -0,0 +1,20 @@
+
+
+
+
+ CFBundleExecutable
+ Semi.Avalonia.Demo.Desktop
+ CFBundleIdentifier
+ org.avaloniaui.SemiAvaloniaDemo
+ CFBundleName
+ Semi Avalonia Demo
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ $(Version)
+ CFBundleVersion
+ $(Version)
+ LSMinimumSystemVersion
+ 10.15
+
+
diff --git a/demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj b/demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj
index 45a0ea5..e87e5f0 100644
--- a/demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj
+++ b/demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj
@@ -1,33 +1,56 @@
-
- WinExe
- net10.0
- enable
- true
- ..\Semi.Avalonia.Demo\Assets\irihi.ico
-
-
-
+
+ WinExe
+ net10.0
+ 1.0.0
+ enable
+ true
+ ..\Semi.Avalonia.Demo\Assets\irihi.ico
+
+
+
-
- true
- true
-
+
+ true
+ true
+
-
- app.manifest
-
+
+ app.manifest
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+