diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index ee4062e..0e43f9e 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,10 +73,23 @@ 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
+# SDK 渠道与各作业的 TargetFramework 对应:
+# - net8.0(Semi.Avalonia.Demo.Desktop / Semi.Avalonia.Demo.Drm)→ DOTNET_SDK_VERSION_NET8
+# - net10.0-android(Semi.Avalonia.Demo.Android)→ DOTNET_SDK_VERSION_NET10
+env:
+ DOTNET_SDK_VERSION_NET8: '8.0.x'
+ DOTNET_SDK_VERSION_NET10: '10.0.x'
+
jobs:
win-x64:
if: ${{inputs.win-x64}}
@@ -76,6 +97,10 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v5
+ - name: Setup dotnet
+ uses: actions/setup-dotnet@v5
+ with:
+ dotnet-version: ${{ env.DOTNET_SDK_VERSION_NET8 }}
- name: Publish win-x64
run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r win-x64 -c Release -o publish --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
- name: Upload a Build Artifact
@@ -92,6 +117,10 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v5
+ - name: Setup dotnet
+ uses: actions/setup-dotnet@v5
+ with:
+ dotnet-version: ${{ env.DOTNET_SDK_VERSION_NET8 }}
- name: Enable Native AOT in .csproj
run: sed -i 's##true#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj
- name: Publish win-x64 AOT
@@ -110,6 +139,10 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v5
+ - name: Setup dotnet
+ uses: actions/setup-dotnet@v5
+ with:
+ dotnet-version: ${{ env.DOTNET_SDK_VERSION_NET8 }}
- name: Publish linux-x64
run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r linux-x64 -c Release -o publish --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
- name: Upload a Build Artifact
@@ -126,6 +159,10 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v5
+ - name: Setup dotnet
+ uses: actions/setup-dotnet@v5
+ with:
+ dotnet-version: ${{ env.DOTNET_SDK_VERSION_NET8 }}
- name: Enable Native AOT in .csproj
run: sed -i 's##true#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj
- name: Publish linux-x64 AOT
@@ -144,6 +181,10 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v5
+ - name: Setup dotnet
+ uses: actions/setup-dotnet@v5
+ with:
+ dotnet-version: ${{ env.DOTNET_SDK_VERSION_NET8 }}
- name: Publish linux-x64 DRM
run: dotnet publish demo/Semi.Avalonia.Demo.Drm -r linux-x64 -c Release -o publish --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
- name: Upload a Build Artifact
@@ -160,6 +201,10 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v5
+ - name: Setup dotnet
+ uses: actions/setup-dotnet@v5
+ with:
+ dotnet-version: ${{ env.DOTNET_SDK_VERSION_NET8 }}
- name: Enable Native AOT in .csproj
run: sed -i 's##true#' demo/Semi.Avalonia.Demo.Drm/Semi.Avalonia.Demo.Drm.csproj
- name: Publish linux-x64 AOT
@@ -178,8 +223,41 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v5
+
+ - name: Setup dotnet
+ uses: actions/setup-dotnet@v5
+ with:
+ dotnet-version: ${{ env.DOTNET_SDK_VERSION_NET8 }}
+
- 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@v4.6.2
with:
@@ -188,12 +266,79 @@ jobs:
publish
!publish/*.pdb
+ - name: Upload macOS DMG
+ uses: actions/upload-artifact@v4.6.2
+ 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@v5
+
+ - name: Setup dotnet
+ uses: actions/setup-dotnet@v5
+ with:
+ dotnet-version: ${{ env.DOTNET_SDK_VERSION_NET8 }}
+
+ - 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@v4.6.2
+ with:
+ name: Semi.Avalonia.Demo.Desktop.osx-x64
+ path: |
+ publish
+ !publish/*.pdb
+
+ - name: Upload macOS DMG (Intel)
+ uses: actions/upload-artifact@v4.6.2
+ 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
steps:
- name: Checkout
uses: actions/checkout@v5
+
+ - name: Setup dotnet
+ uses: actions/setup-dotnet@v5
+ with:
+ dotnet-version: ${{ env.DOTNET_SDK_VERSION_NET8 }}
+
- name: Enable Native AOT in .csproj
run: sed -i '' 's##true#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj
- name: Publish osx-arm64 AOT
@@ -206,12 +351,40 @@ jobs:
publish
!publish/*.pdb
+ osx-x64-aot:
+ if: ${{inputs.osx-x64-aot}}
+ runs-on: macos-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
+
+ - name: Setup dotnet
+ uses: actions/setup-dotnet@v5
+ with:
+ dotnet-version: ${{ env.DOTNET_SDK_VERSION_NET8 }}
+
+ - 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@v4.6.2
+ with:
+ name: Semi.Avalonia.Demo.Desktop.osx-x64.NativeAOT
+ path: |
+ publish
+ !publish/*.pdb
+
android-arm64:
if: ${{inputs.android-arm64 }}
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v5
+ - name: Setup dotnet
+ uses: actions/setup-dotnet@v5
+ with:
+ dotnet-version: ${{ env.DOTNET_SDK_VERSION_NET10 }}
- name: Install Android workload
run: dotnet workload install android
- name: Restore Dependencies
diff --git a/.github/workflows/release-tag.yml b/.github/workflows/release-tag.yml
index e909e8c..9e3d3b7 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 4e50e58..85b6898 100644
--- a/demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj
+++ b/demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj
@@ -1,7 +1,24 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
WinExe
net8.0
+ 1.0.0
enable
true
..\Semi.Avalonia.Demo\Assets\irihi.ico
@@ -29,4 +46,11 @@
+
+
+
+