פרסום משחקי שולחן עבודה של MonoGame ב-Microsoft Store: המדריך המלא ל-MSIX ו-WAP
הבאת משחק אינדי אל ה-Microsoft Store ב-Windows 10 ו-Windows 11 מעניקה למפתחים גישה ישירה למאות מיליוני שחקני מחשב (PC), עדכונים רציפים, אינטגרציה עם Windows Game Bar ואבטחת התקנה בתוך קונטיינר מבודד. עם זאת, כאשר המשחק שלכם בנוי על MonoGame (.NET 8.0 או .NET 9.0 WindowsDX), הבאתו לחנות מציבה אתגר ארכיטקטוני ייחודי: גישור בין קובץ הפעלה שולחני סטנדרטי של Win32 (.exe) לבין מודל האפליקציות המודרני של MSIX / AppX.
ב-Arar Games, עברנו דרך זו מההידור הראשוני ועד להפצה חיה בחנות עם כותרים כמו Paint Trek ו-Blocked: Pixel Panzer. במדריך טכני זה, אנו מפרקים את צינור העבודה המלא: הגדרת הפרויקטים, ניווט באפשרויות הפרסום ב-Visual Studio, שליטה בקובץ Package.appxmanifest, התאמת נכסים גרפיים לכל רזולוציה, פתרון שגיאות ב-Windows App Certification Kit (WACK) והגשת החבילה ל-Microsoft Partner Center.
1. הבסיס הארכיטקטוני: Win32 לעומת MSIX
משחקי MonoGame מסורתיים מהודרים לקובץ הפעלה Win32 רגיל המלווה בספריות .dll של סביבת הריצה ובתיקיית Content/ המכילה נכסים בינאריים מהודרים (טקסטורות .xnb, קבצי שמע .ogg, ספרי ספריטים ושיידרים מהודרים של HLSL).
בעוד ש-Microsoft Store תומכת בהפצת קבצי Win32 חופשיים ללא אריזה, עטיפת המשחק שלכם בתוך פרויקט Windows Application Packaging (WAP) להפקת חבילת MSIX bundle מספקת יתרונות טכניים ותפעוליים משמעותיים:
flowchart TD
subgraph "קוד המשחק"
Shared["ספרייה משותפת Shared\n(ישויות, מערכות, מצבי משחק, מתמטיקה)"]
Desktop["פרויקט דסקטופ (.NET 9.0 WindowsDX)\n(נקודת כניסה Win32 Executable)"]
Shared --> Desktop
end
subgraph "שכבת האריזה (פרויקט WAP)"
WAP["פרויקט אריזה ל-Windows (.wapproj)\n(Microsoft Desktop Bridge)"]
Manifest["Package.appxmanifest\n(זהות, הרשאות, אייקונים)"]
StoreAssoc["Package.StoreAssociation.xml\n(שיוך לחשבון המפתח ב-Partner Center)"]
Desktop --> WAP
Manifest --> WAP
StoreAssoc --> WAP
end
subgraph "פלט והפצה"
WAP -->|יצירת חבילות| Sideload["חבילת התקנה מקומית\n(*.appxbundle + סקריפט התקנה)"]
WAP -->|מצב העלאה לחנות| UploadBundle["חבילת העלאה רשמית לחנות\n(*_bundle.appxupload / *.msixupload)"]
UploadBundle --> MSStore["Microsoft Partner Center\n(חנות מיקרוסופט החיה)"]
end
מדוע לעטוף את MonoGame בפרויקט WAP?
- מחזור חיים מבודד: אפליקציות MSIX רצות בסביבה מבודדת. קבצים ורישומי Registry וירטואליים מוסרים בצורה נקייה לחלוטין בעת הסרת ההתקנה, ללא השארת שאריות במערכת.
- הזרמת ארכיטקטורה ונכסים חכמה: חבילת
.appxuploadבודדת אורזת יחד בינארים עבורx86ו-x64יחד עם חבילות קנה מידה מרובות של DPI (מ-scale-100ועדscale-400). החנות מספקת רק את הארכיטקטורה והקבצים הרלוונטיים למכשיר של השחקן, ומקטינה משמעותית את גודל ההורדה. - טלמטריית קריסות אוטומטית: סמלי הניפוי (PDB) נארזים בקובץ ההעלאה (
.appxsym). אם המשחק נתקל בשגיאה לא מטופלת אצל שחקן, לוח המחוונים ב-Partner Center מציג את ה-Stack Trace המדויק עם שמות הפונקציות ומספרי השורות.
2. מבנה הפרויקט והגדרות
פתרון MonoGame נקי דורש הפרדה ברורה בין לוגיקת המשחק לבין אריזת הפלטפורמה:
SolutionDir/
│
├── YourGame.Shared/ # לוגיקת משחק עיקרית, מערכות, שלבים, ישויות
│ └── YourGame.Shared.csproj
│
├── YourGame.Desktop/ # נקודת כניסה ראשית לדסקטופ (WinExe)
│ ├── Content/ # נכסי MonoGame Content Pipeline (.mgcb -> .xnb)
│ ├── Program.cs
│ └── YourGame.Desktop.csproj
│
└── YourGame.Package/ # פרויקט אריזה (.wapproj)
├── Images/ # לוגואים מותאמים, אריחים, מסך פתיחה
├── Package.appxmanifest # זהות, הרשאות ואלמנטים ויזואליים
├── Package.StoreAssociation.xml
└── YourGame.Package.wapproj
הגדרת קובץ הפרויקט הראשי (.csproj)
וודאו שפרויקט הדסקטופ שלכם מוגדר לתמיכה בריבוי ארכיטקטורות:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net9.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<ApplicationHighDpiMode>PerMonitorV2</ApplicationHighDpiMode>
<Platforms>AnyCPU;x64;x86</Platforms>
</PropertyGroup>
<ItemGroup>
<Content Include="Content\**\*.*">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<PackageReference Include="MonoGame.Framework.WindowsDX" Version="3.8.*" />
<PackageReference Include="MonoGame.Content.Builder.Task" Version="3.8.*" />
</ItemGroup>
</Project>
3. הגדרת המניפסט (Package.appxmanifest)
בתוך פרויקט ה-WAP, קובץ Package.appxmanifest קובע את זהות האפליקציה, ההרשאות ונכסי התצוגה:
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap rescap">
<Applications>
<Application Id="App"
Executable="YourGame.Desktop.exe"
EntryPoint="Windows.FullTrustApplication">
<uap:VisualElements
DisplayName="Your Game Title"
Description="Game Description"
BackgroundColor="transparent"
Square150x150Logo="Images\Square150x150Logo.png"
Square44x44Logo="Images\Square44x44Logo.png">
<uap:DefaultTile ShortName="Your Game" />
<uap:SplashScreen Image="Images\SplashScreen.png" />
</uap:VisualElements>
</Application>
</Applications>
<Capabilities>
<rescap:Capability Name="runFullTrust" />
<Capability Name="internetClient" />
</Capabilities>
</Package>
הערה חשובה: משחקי Win32/MonoGame דורשים את הרשאת
runFullTrustמכיוון שהם רצים כיישומי שולחן עבודה מלאים מחוץ ל-sandbox המצומצם של UWP הישנה.
4. שיוך לחנות (Store Association) ויצירת חבילות
- ב-Visual Studio, לחצו לחצן ימני על פרויקט ה-Package ובחרו:
Publish -> Associate App with the Store... - התחברו לחשבון ה-Microsoft Developer שלכם ובחרו את שם המשחק שהזמנתם מראש ב-Partner Center. שלב זה ייצור אוטומטית את הקובץ
Package.StoreAssociation.xml. - לאחר השיוך, לחצו:
Publish -> Create App Packages... - סמנו Microsoft Store using a new app name (או החשבון המקושר).
- סמנו את הארכיטקטורות
x86ו-x64במצב Release, וסמנו Always עבור יצירת Bundle. - לאחר סיום הבנייה, Visual Studio תפתח את תיקיית
AppPackagesובה קובץ ה-.msixuploadהמוכן להעלאה.
5. בדיקת תאימות באמצעות WACK (Windows App Certification Kit)
לפני ההעלאה, הריצו את ה-WACK המובנה בכלי היצירה:
- הכלי בודק חתימות דיגיטליות, הרשאות מוגבלות וחוסר קריסות באתחול.
- משחקי MonoGame עוברים את כל בדיקות ה-WACK בהצלחה כאשר הם מהודרים במצב Release ונארזים כהלכה.
אודות Arar Games והמשחקים שלנו
גלו את משחקי האינדי שלנו והתחברו לסטודיו:
- 🌐 אתר רשמי (Official Website): https://www.mayhemcorporation.com
🎮 המשחקים שלנו
- Blocked: Pixel Panzer: קרבות טנקים רטרו-ארקייד עם מזג אוויר דינמי ובוסים עוצמתיים.
Google Play (Android & PC) | Microsoft Store (Windows PC) - PaintTrek: חידות צבעים מרהיבות ואקשן צביעת פיקסלים מהיר.
Google Play | Microsoft Store (PC & Xbox) - Space Dodger: התחמקות ממכשולים בחלל במהירות גבוהה לבחינת רפלקסים.
Google Play
📱 עקבו אחרי הסטודיו ברשתות החברתיות
- 🎵 TikTok: https://www.tiktok.com/@arargamesstudio
- 📸 Instagram: https://www.instagram.com/arargamesstudio
- 🐦 X (Twitter): https://x.com/arargamesstudio
- 📺 YouTube: https://www.youtube.com/@koreaaria
- 🧵 Threads: https://www.threads.net/@arargamesstudio
- 📘 Facebook: https://www.facebook.com/arargamesstudio
Hiç yorum yok:
Yorum Gönder