All checks were successful
CI / Build (Linux) (pull_request) Successful in 23s
Change version from 1.0.0 to 9.0.0 to align with .NET 9 / MAUI 9.0.x versioning convention. Update all package references, templates, and documentation. Change copyright holder from "MarketAlly LLC" to "MarketAlly Pte Ltd" across all files. Update CHANGELOG to document version realignment and mark 1.0.0 as deprecated. Update release notes to reflect 541 passing tests (up from 217) and include native resource leak fixes, SafeHandle wrappers, and performance benchmarks.
308 lines
7.4 KiB
Markdown
308 lines
7.4 KiB
Markdown
# Frequently Asked Questions
|
|
|
|
## Visual Studio Integration
|
|
|
|
### How do I add Linux support to my existing MAUI project?
|
|
|
|
Unlike Android, iOS, and Windows which appear in Visual Studio's platform dropdown, Linux requires manual configuration since it's a community platform.
|
|
|
|
**Step 1: Add the NuGet Package**
|
|
|
|
```bash
|
|
dotnet add package OpenMaui.Controls.Linux
|
|
```
|
|
|
|
Or in Visual Studio: Right-click project → Manage NuGet Packages → Search "OpenMaui.Controls.Linux"
|
|
|
|
**Step 2: Create a Linux Startup Project**
|
|
|
|
Create a new folder called `Platforms/Linux` in your project and add a `Program.cs`:
|
|
|
|
```csharp
|
|
using OpenMaui.Platform.Linux;
|
|
|
|
namespace MyApp.Platforms.Linux;
|
|
|
|
public class Program
|
|
{
|
|
public static void Main(string[] args)
|
|
{
|
|
var app = new LinuxApplication();
|
|
app.MainPage = new MainPage(); // Your existing MainPage
|
|
app.Run();
|
|
}
|
|
}
|
|
```
|
|
|
|
**Step 3: Add a Linux Build Configuration**
|
|
|
|
Add to your `.csproj`:
|
|
|
|
```xml
|
|
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)'=='Debug|net9.0'">
|
|
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
|
|
</PropertyGroup>
|
|
```
|
|
|
|
Or create a separate `MyApp.Linux.csproj` that references your shared code.
|
|
|
|
---
|
|
|
|
### Why doesn't Linux appear in Visual Studio's platform dropdown?
|
|
|
|
Visual Studio's MAUI tooling only shows platforms officially supported by Microsoft (.NET MAUI team). Linux is a community-supported platform through OpenMaui.
|
|
|
|
**Workarounds:**
|
|
|
|
1. **Use a separate Linux project** - Create a dedicated `MyApp.Linux` console project
|
|
2. **Use VS Code** - Better cross-platform support with command-line builds
|
|
3. **Use JetBrains Rider** - Excellent Linux and cross-platform support
|
|
4. **Command line** - `dotnet build -r linux-x64` works from any IDE
|
|
|
|
---
|
|
|
|
### How do I build for Linux from Visual Studio on Windows?
|
|
|
|
**Option A: Command Line (Recommended)**
|
|
|
|
Open Terminal in VS and run:
|
|
```bash
|
|
dotnet build -c Release -r linux-x64
|
|
dotnet publish -c Release -r linux-x64 --self-contained
|
|
```
|
|
|
|
**Option B: Custom Build Profile**
|
|
|
|
1. Right-click solution → Properties → Configuration Manager
|
|
2. Create a new configuration called "Linux"
|
|
3. Edit project properties to set RuntimeIdentifier for this configuration
|
|
|
|
**Option C: WSL Integration**
|
|
|
|
If you have WSL (Windows Subsystem for Linux) installed:
|
|
```bash
|
|
wsl dotnet build
|
|
wsl dotnet run
|
|
```
|
|
|
|
---
|
|
|
|
### How do I debug Linux apps from Windows?
|
|
|
|
**Option 1: Remote Debugging**
|
|
|
|
1. Install `vsdbg` on your Linux machine
|
|
2. Configure remote debugging in VS/VS Code
|
|
3. Attach to the running process
|
|
|
|
**Option 2: WSL (Recommended for development)**
|
|
|
|
1. Install WSL 2 with Ubuntu
|
|
2. Install .NET SDK in WSL
|
|
3. Run your app in WSL with X11 forwarding:
|
|
```bash
|
|
export DISPLAY=:0
|
|
dotnet run
|
|
```
|
|
4. Use WSLg (Windows 11) for native GUI support
|
|
|
|
**Option 3: Virtual Machine**
|
|
|
|
1. Set up a Linux VM (VMware, VirtualBox, Hyper-V)
|
|
2. Share your project folder
|
|
3. Build and run inside the VM
|
|
|
|
---
|
|
|
|
## Project Structure
|
|
|
|
### What's the recommended project structure for cross-platform MAUI with Linux?
|
|
|
|
```
|
|
MyApp/
|
|
├── MyApp.sln
|
|
├── MyApp/ # Shared MAUI project
|
|
│ ├── MyApp.csproj
|
|
│ ├── App.xaml
|
|
│ ├── MainPage.xaml
|
|
│ ├── Platforms/
|
|
│ │ ├── Android/
|
|
│ │ ├── iOS/
|
|
│ │ ├── Windows/
|
|
│ │ └── Linux/ # Add this folder
|
|
│ │ └── Program.cs
|
|
│ └── ...
|
|
└── MyApp.Linux/ # Optional: Separate Linux project
|
|
├── MyApp.Linux.csproj
|
|
└── Program.cs
|
|
```
|
|
|
|
### Should I use a separate project or add Linux to my existing project?
|
|
|
|
**Add to existing project** if:
|
|
- You want a single codebase
|
|
- Your MAUI code is mostly XAML-based
|
|
- You're comfortable with conditional compilation
|
|
|
|
**Use a separate project** if:
|
|
- You want cleaner separation
|
|
- You need Linux-specific features
|
|
- You want independent build/deploy cycles
|
|
- Your team includes Linux specialists
|
|
|
|
---
|
|
|
|
## Build & Deploy
|
|
|
|
### How do I create a Linux executable?
|
|
|
|
```bash
|
|
# Self-contained (includes .NET runtime)
|
|
dotnet publish -c Release -r linux-x64 --self-contained -o ./publish
|
|
|
|
# Framework-dependent (smaller, requires .NET on target)
|
|
dotnet publish -c Release -r linux-x64 --no-self-contained -o ./publish
|
|
```
|
|
|
|
For ARM64 (Raspberry Pi, etc.):
|
|
```bash
|
|
dotnet publish -c Release -r linux-arm64 --self-contained -o ./publish
|
|
```
|
|
|
|
### How do I create a .deb or .rpm package?
|
|
|
|
We recommend using packaging tools:
|
|
|
|
**For .deb (Debian/Ubuntu):**
|
|
```bash
|
|
dotnet tool install -g dotnet-deb
|
|
dotnet deb -c Release -r linux-x64
|
|
```
|
|
|
|
**For .rpm (Fedora/RHEL):**
|
|
```bash
|
|
dotnet tool install -g dotnet-rpm
|
|
dotnet rpm -c Release -r linux-x64
|
|
```
|
|
|
|
**For AppImage (Universal):**
|
|
Use [AppImageKit](https://appimage.org/) with your published output.
|
|
|
|
**For Flatpak:**
|
|
Create a flatpak manifest and build with `flatpak-builder`.
|
|
|
|
---
|
|
|
|
## Common Issues
|
|
|
|
### "SkiaSharp native library not found"
|
|
|
|
Install the required native libraries:
|
|
|
|
**Ubuntu/Debian:**
|
|
```bash
|
|
sudo apt-get install libfontconfig1 libfreetype6
|
|
```
|
|
|
|
**Fedora:**
|
|
```bash
|
|
sudo dnf install fontconfig freetype
|
|
```
|
|
|
|
### "Cannot open display" or "No display server"
|
|
|
|
Ensure X11 or Wayland is running:
|
|
```bash
|
|
echo $DISPLAY # Should show :0 or similar
|
|
echo $WAYLAND_DISPLAY # For Wayland
|
|
```
|
|
|
|
For headless/SSH sessions:
|
|
```bash
|
|
export DISPLAY=:0 # If X11 is running
|
|
```
|
|
|
|
### "libX11.so not found"
|
|
|
|
Install X11 development libraries:
|
|
|
|
**Ubuntu/Debian:**
|
|
```bash
|
|
sudo apt-get install libx11-6 libx11-dev
|
|
```
|
|
|
|
### App runs but window doesn't appear
|
|
|
|
Check if you're running under Wayland without XWayland:
|
|
```bash
|
|
# Force X11 mode
|
|
export GDK_BACKEND=x11
|
|
./MyApp
|
|
```
|
|
|
|
---
|
|
|
|
## IDE Recommendations
|
|
|
|
### What's the best IDE for developing MAUI apps with Linux support?
|
|
|
|
| IDE | Linux Dev | Windows Dev | Pros | Cons |
|
|
|-----|-----------|-------------|------|------|
|
|
| **VS Code** | ⭐⭐⭐ | ⭐⭐⭐ | Cross-platform, lightweight, great C# extension | No visual XAML designer |
|
|
| **JetBrains Rider** | ⭐⭐⭐ | ⭐⭐⭐ | Excellent cross-platform, powerful refactoring | Paid license |
|
|
| **Visual Studio** | ⭐ | ⭐⭐⭐ | Best MAUI tooling on Windows | No native Linux support |
|
|
| **Visual Studio Mac** | ⭐⭐ | N/A | Good MAUI support | macOS only |
|
|
|
|
**Our recommendation:**
|
|
- **Windows developers:** Visual Studio for Android/iOS/Windows, VS Code or command line for Linux builds
|
|
- **Linux developers:** JetBrains Rider or VS Code
|
|
- **Cross-platform teams:** VS Code with standardized build scripts
|
|
|
|
---
|
|
|
|
## Continuous Integration
|
|
|
|
### How do I set up CI/CD for Linux builds?
|
|
|
|
**GitHub Actions example:**
|
|
|
|
```yaml
|
|
jobs:
|
|
build-linux:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-dotnet@v4
|
|
with:
|
|
dotnet-version: '9.0.x'
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y libx11-dev libfontconfig1-dev
|
|
|
|
- name: Build
|
|
run: dotnet build -c Release
|
|
|
|
- name: Publish
|
|
run: dotnet publish -c Release -r linux-x64 --self-contained -o ./publish
|
|
|
|
- name: Upload artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: linux-app
|
|
path: ./publish
|
|
```
|
|
|
|
---
|
|
|
|
## Getting Help
|
|
|
|
- **GitHub Issues:** https://github.com/open-maui/maui-linux/issues
|
|
- **Discussions:** https://github.com/open-maui/maui-linux/discussions
|
|
- **Documentation:** https://github.com/open-maui/maui-linux/tree/main/docs
|
|
|
|
---
|
|
|
|
*Developed by [MarketAlly Pte Ltd](https://marketally.com) • Lead Architect: David H. Friedel Jr.*
|