Solution
Good question — the three things serve different roles and you don’t always need all three. Short version: .NET MAUI is the framework/tooling you use to build the app; Xcode provides Apple’s iOS/macOS toolchain (simulator, SDKs, signing) that MAUI needs to build for Apple platforms; VS Code is a lightweight editor you can use to edit and run .NET code but it does not replace Xcode for iOS builds or the richer MAUI tooling in Visual Studio. Here’s a clear breakdown of when and why you use each.
What each item is and why (one‑line)
What each item is and why (one‑line)
- .NET MAUI — a cross‑platform .NET UI framework/workload (C#/XAML) you use to write the app once and target Android, iOS, macOS (via Mac Catalyst), and Windows. Use MAUI when you want a single C# codebase...
- Joined
- Mar 14, 2023
- Messages
- 96,538
Good question — the three things serve different roles and you don’t always need all three. Short version: .NET MAUI is the framework/tooling you use to build the app; Xcode provides Apple’s iOS/macOS toolchain (simulator, SDKs, signing) that MAUI needs to build for Apple platforms; VS Code is a lightweight editor you can use to edit and run .NET code but it does not replace Xcode for iOS builds or the richer MAUI tooling in Visual Studio. Here’s a clear breakdown of when and why you use each.
What each item is and why (one‑line)
What each item is and why (one‑line)
- .NET MAUI — a cross‑platform .NET UI framework/workload (C#/XAML) you use to write the app once and target Android, iOS, macOS (via Mac Catalyst), and Windows. Use MAUI when you want a single C# codebase for native apps.
- Xcode — Apple’s IDE and SDK collection (iOS/macOS toolchains, simulator, code‑signing tools). Required to build, run on the iOS simulator, sign, and submit iOS/macOS apps. Even when you write the app in MAUI, iOS/macOS builds call into Xcode/toolchain.
- Visual Studio Code — lightweight, cross‑platform editor. Great for editing code, running the dotnet CLI, and general development. It does not replace Xcode for iOS builds or provide the full MAUI designer/debug integration that Visual Studio (Mac/Windows) offers. Use it if you prefer a light editor or cross‑OS editing.
- Install Xcode: mandatory if you plan to build or test for iOS (simulator, device), use Apple’s SDKs, do code signing, or submit to the App Store. Even cross‑platform toolchains rely on Xcode for those steps.
- Install the .NET SDK + MAUI workload (not an app to “open” — it’s a framework/workload you install for dotnet): required to create, build and run MAUI projects (you install via
dotnet workload install maui). Use MAUI tooling when you are authoring the UI and logic in C#/.NET. - Install VS Code (optional) if you want a lightweight editor. If you want the most integrated MAUI experience on macOS (project templates, debugging, designers), consider Visual Studio for Mac instead; many devs still use Visual Studio (Mac) for MAUI because of tighter integration, but VS Code + dotnet CLI works fine for many workflows.
- I’m building a MAUI app and I want to run on iPhone simulator:
- Write UI/logic in C#/.NET MAUI (your code in VS Code or Visual Studio for Mac).
- Xcode must be installed and up to date so the iOS simulator and SDK are available (MAUI’s iOS build calls Xcode).
- Build/run from the IDE (Visual Studio for Mac gives a GUI) or use
dotnet build/dotnet runin the terminal.
- I only want to edit and test cross‑platform UI quickly:
- You can use VS Code + dotnet CLI to develop and test Android and macOS/Windows targets (subject to installed workloads). But for iOS simulator/device or App Store signing you still need Xcode.
- I want advanced Apple specific debugging (Instruments/profiling) or to submit to App Store:
- Use Xcode for profiling, device logs, provisioning, and final app signing/upload steps. Even if app is written in MAUI, you’ll often open the generated Xcode project for final checks or uploads.
- Install Xcode from the App Store (and accept its license / install command‑line tools). Required for iOS/macOS builds.
- Install the .NET SDK (from dotnet) and then install MAUI workload:
dotnet workload install maui. This provides the MAUI templates and build tooling. - Choose an editor/IDE:
- Visual Studio for Mac — best integrated MAUI experience on macOS.
- VS Code — lightweight editor; add C# extension and use the dotnet CLI (good if you prefer minimal tools).
- If you plan to publish to the Apple App Store, enroll in Apple Developer Program and configure provisioning/certificates in Xcode. Xcode handles the signing/provisioning flow.
- MAUI isn’t a separate “app” you open — it’s a framework/workload for .NET that you add to your SDK and then use from the IDE or dotnet CLI.
- You cannot skip Xcode if you need real iOS simulator/device testing, code signing, or App Store uploads — those require Apple toolchains on macOS.
- VS Code is excellent for editing but won’t replace Xcode for Apple‑specific tasks or Visual Studio’s MAUI debugging/designer features; pick the editor that matches how integrated you want the workflow to be.
- Give exact commands and step‑by‑step to install .NET + MAUI workload on your Mac and verify
dotnet --info. - Show how to create a new MAUI project (
dotnet new maui -n MyApp) and how to run it locally and on the iOS simulator (assuming Xcode is installed). - Recommend whether Visual Studio for Mac or VS Code fits your preferred workflow and walk you through that IDE setup.
- Joined
- Mar 14, 2023
- Messages
- 96,538
Good question — I want to be sure I answer the right problem. Quick clarifying question first:
1) If you mean “share source/code at compile time between multiple .NET/MAUI projects” (most common)
- By “the 3” do you mean three different platform builds of the same app (for example: Android, iOS, macOS/Windows targets), or three entirely different app projects (different repos) that you want to share code between, or do you mean “move runtime data or functionality from one installed app to another” (inter‑app communication)?
1) If you mean “share source/code at compile time between multiple .NET/MAUI projects” (most common)
- Best practice: extract the shared logic into a reusable project (a class library) and reference it from each app project.
- Create a shared class library (C#): e.g. SharedLogic project that contains your view‑models, services, helpers, models and non‑UI code.
- Add it to each app as a ProjectReference (keeps history and is easiest during development). Example (terminal):
- Create:
dotnet new classlib -n SharedLogic - From each app folder:
dotnet add <AppProject>.csproj reference ../SharedLogic/SharedLogic.csproj - For MAUI UI controls you can create a MAUI class library (UI controls, custom handlers) and reference it the same way.
- Alternative: pack SharedLogic as a NuGet package and host it on a private feed (good for teams / versioning).
- If you must target multiple runtimes from the library, multi‑target the library (TargetFrameworks) so it builds for the same targets as the apps (Android/iOS/MacCatalyst/net6/net7/etc).
- Advantage: single source of truth, less copy/paste, easier fixes and CI.
- You cannot directly reference a C# library from a Swift/Xcode project. Options:
- Move the shared logic into a backend API (REST/gRPC) and have each app call it — easiest for business logic and data.
- Reimplement the shared logic in a language each platform supports, or
- Create a native cross‑language library:
- Build the logic as a native C/C++ library with stable C APIs, then call it from both Swift (via bridging) and from .NET (via P/Invoke). This is more complex but possible.
- Or consolidate to a single cross‑platform framework (e.g., write the app in MAUI or Flutter) so the same codebase targets all platforms.
- Use OS app‑to‑app mechanisms rather than copying code:
- On Windows there are App Services, protocol activation (deep links), and ValueSet data passing — you can expose a service in one app and call it from another. See examples of app services and deep linking in the docs and samples.
- On iOS/macOS you can use App Groups, URL schemes, and app extensions to share data or functionality; for cross‑platform MAUI you still rely on the native platform features under the hood.
- Use these when apps are separate packages but need to talk at runtime (e.g., “app A asks app B to process something and return results”).
- Monorepo: keep apps + shared library in a single repo and use ProjectReference — simplest for local dev and debugging.
- Multiple repos:
- Use Git submodules:
git submodule add <shared-repo> libs/shared— good but can be awkward to manage. - Use Git subtree or a private NuGet feed (pack and publish the library) — subtree gives easier editing without submodule complexity.
- Use Git submodules:
- CI: publish the shared library artifact (NuGet) on change and have app CI pipelines restore the package.
- Create solution:
dotnet new sln -n MySolutiondotnet new maui -n App1anddotnet new maui -n App2(or add existing projects)dotnet new classlib -n SharedLogicdotnet sln add App1/App1.csproj App2/App2.csproj SharedLogic/SharedLogic.csprojdotnet add App1/App1.csproj reference ../SharedLogic/SharedLogic.csprojdotnet add App2/App2.csproj reference ../SharedLogic/SharedLogic.csproj
- Put non‑UI logic in SharedLogic (models, data access, services). Put platform/UI specifics in each app.
- Keep UI platform‑specific. Share business logic, data models and services, not necessarily view code unless you use MAUI UI libraries.
- Version your shared library carefully if you publish it (NuGet) so apps can upgrade independently.
- If you need to share XAML UI across MAUI apps, create a MAUI component library (a class library containing XAML controls) and reference it.
- For runtime app communication on Windows, use App Services / LaunchUriForResults / ValueSet for messages and data transfer.
- Joined
- Mar 14, 2023
- Messages
- 96,538
Short answer: there’s no single “move” button — what you transfer is files. How easy it is depends on language and project type. Below is a compact, practical guide covering the common transfers (VS Code ↔ MAUI, Xcode ↔ MAUI, VS Code ↔ Xcode), with concrete steps and recommended approaches.
Quick framing (important)
When this is the case you’re simply opening the same project in a different editor.
Steps:
You cannot “open” a Swift app in MAUI or vice‑versa and expect the UI to work automatically. Approaches:
Quick framing (important)
- VS Code is an editor — it can open and edit many project types (C#, Swift, Flutter, JS), but it doesn’t replace platform toolchains. MAUI is a .NET project/framework (C#) and uses the .NET toolchain; Xcode is Apple’s toolchain (Swift/Obj‑C, simulator, signing). MAUI iOS builds still call into Xcode’s SDKs.
When this is the case you’re simply opening the same project in a different editor.
Steps:
- Install .NET SDK and MAUI workload on your Mac:
dotnet --infothendotnet workload install maui. - Open the MAUI solution/project folder in VS Code (or Visual Studio for Mac for more integration). Install the C# extension (OmniSharp).
- Build/run with dotnet CLI:
dotnet buildto compile.dotnet runor use the IDE tasks to deploy to an emulator/device (for MAUI you often usedotnet build -t:Run -f <TFM‑and‑runtime>or the IDE controls).
- If you want Visual Studio features later, open the same solution in Visual Studio for Mac/Windows — the project files are the same.
Notes: Keep non‑UI business logic in class libraries (Shared project or classlib) so it’s always reusable and editor‑agnostic.
You cannot “open” a Swift app in MAUI or vice‑versa and expect the UI to work automatically. Approaches:
- Re‑implement UI in target framework (most common):
- Port business logic + algorithms manually into C# (MAUI) or Swift. This is the most predictable approach.
- Share logic via a native C/C++ library:
- Extract platform‑agnostic logic into a C API library compiled for each platform (iOS: arm64 + simulator; macOS).
- Call it from Swift (bridging header) and from C# using P/Invoke (DllImport) or a Xamarin.iOS/MAUI native binding. This is more advanced but lets both apps call the same native binary.
- Use a shared backend/API:
- Move shared functionality to a web service (REST, gRPC) and have each app call it. Easiest for data/business logic sharing across completely different stacks.
Why this is necessary: MAUI and Xcode apps have different UI systems and runtimes; only native binary interfaces (C ABI) or external services can be shared directly across them.
- Move shared functionality to a web service (REST, gRPC) and have each app call it. Easiest for data/business logic sharing across completely different stacks.
- If project is a Swift Package (SPM), Xcode can open Package.swift; VS Code can edit the same sources (with SourceKit-LSP support). You can edit in VS Code and build/run in Xcode.
- Flutter / React Native: VS Code edits the code; to build iOS you open the platform workspace in Xcode:
- Flutter: open ios/Runner.xcworkspace in Xcode for signing/profiling.
- React Native: open ios/YourApp.xcworkspace in Xcode for simulator/device runs and signing.
So VS Code → Xcode is often “edit here, build & sign there.” This pattern is standard when using cross‑platform frameworks that produce native iOS projects.
- For C#/.NET: create a shared class library and reference it (ProjectReference or NuGet). Example workflow:
dotnet new classlib -n SharedLogic- Add to solution and reference from each app:
dotnet add <App>.csproj reference ../SharedLogic/SharedLogic.csproj
- For Swift: use Swift Package Manager (Package.swift) to distribute shared code.
- For mixed stacks: publish shared code as a web service or compile a native C library as above.
- If your goal is “get one installed app to use functionality of another installed app without copying files,” use platform IPC/extension APIs:
- Windows: App Services, protocol activation and Launcher APIs (ValueSet) for message/data passing.
- iOS/macOS: URL schemes, App Extensions, App Groups, system share/clipboard, or custom extensions.
That’s different from transferring source code — it’s about messaging and shared runtime services.
- I want to edit a MAUI project in VS Code and run it on iOS: install .NET + MAUI, install C# extension in VS Code, have Xcode installed for iOS toolchain, use
dotnet build/run or Visual Studio for Mac for easier deployment. - I have an Xcode (Swift) app and want the same algorithm in a MAUI app: either port the algorithm to C#, or extract it to a C API library and call from both sides (advanced), or put it on a server and call it from both apps.
- I use Flutter or React Native in VS Code and need to publish to iOS: open the generated iOS workspace in Xcode for signing and App Store upload.
- There’s no reliable automated translator from Swift UI code to MAUI XAML/C#. Manual porting is almost always required for UI.
- If you need App Store submission or profiling on iOS you must use Xcode for signing/Profiling and the simulator. MAUI’s toolchain will invoke Xcode under the hood but final signing/profile steps are Xcode territory.
- For sharing logic between apps on the same machine/device prefer platform extension or app service mechanisms rather than copying code at runtime.
- which two projects you want to transfer between (example: “MAUI project in VS Code → Xcode/Swift app”), and
- what language each project uses and what parts you want to transfer (UI? models? business logic?,
- Joined
- Mar 14, 2023
- Messages
- 96,538
Totally understandable — it is complicated at first. I’ll make this short and practical so you can pick one clear next step.
Quick recap (why it seems messy)
1) Case A — “Same language” (C# MAUI project edited in VS Code or Visual Studio)
A) Show the exact commands + file edits to create a SharedLogic classlib and add ProjectReferences for MAUI apps, or
B) Walk you through the easiest MAUI→iOS workflow (install workloads, build, then use Xcode/Visual Studio for Mac to sign & run), or
C) Propose a concrete backend or C wrapper design for sharing logic between Swift and C#?
Pick A, B or C and I’ll give a step‑by‑step you can run immediately.
Quick recap (why it seems messy)
- VS Code is just an editor. MAUI is a C#/XAML cross‑platform framework. Xcode is Apple’s toolchain (simulator, signing, upload). They overlap but play different roles, so “moving code” means different things depending on languages and targets.
1) Case A — “Same language” (C# MAUI project edited in VS Code or Visual Studio)
- What it is: same project, different editors. No conversion required.
- Do this now:
- Install .NET SDK + MAUI workload:
dotnet workload install maui. - Open the MAUI solution folder in VS Code (install the C# extension).
- Build/run with the dotnet CLI or use Visual Studio for Mac for the easiest iOS simulator/device workflow.
- Install .NET SDK + MAUI workload:
- When to use each tool: VS Code = edit and run cross‑platform builds; Visual Studio for Mac = easiest integrated MAUI experience on macOS; Xcode = only when you need the iOS simulator, device profiling or App Store signing.
- What it is: you have multiple apps (AppA, AppB, AppC) all written in C# and you want the same logic in each.
- Best practice: extract shared logic into a class library and reference it from each app.
- Quick commands:
dotnet new classlib -n SharedLogic- Add to solution and reference from each app:
dotnet sln add SharedLogic/SharedLogic.csprojanddotnet add App1/App1.csproj reference ../SharedLogic/SharedLogic.csproj(repeat per app).
- Why: single source of truth, easy debugging, CI friendly.
- What it is: a Swift/Xcode app cannot directly consume C# libraries.
- Practical options:
- Easiest: move the shared logic to a backend service (REST/gRPC) both apps call.
- Advanced: implement shared logic as a native C/C++ library with a plain C API — call from Swift (bridging) and from C# via P/Invoke.
- Or manually port the logic into the other language (common for UI code).
- Tradeoffs: backend = easiest cross‑platform; native C lib = faster at runtime but more complex to build/package.
- If both projects are C#/MAUI: I’ll give the exact commands and a copy/paste example to create a SharedLogic library and hook it into your two or three apps. (This is the most common and least painful fix.
- If one project is Swift/Xcode and the other is MAUI/C#, tell me whether you prefer “backend” (fast, simple) or “native C library” (faster, harder) and I’ll give step‑by‑step.
A) Show the exact commands + file edits to create a SharedLogic classlib and add ProjectReferences for MAUI apps, or
B) Walk you through the easiest MAUI→iOS workflow (install workloads, build, then use Xcode/Visual Studio for Mac to sign & run), or
C) Propose a concrete backend or C wrapper design for sharing logic between Swift and C#?
Pick A, B or C and I’ll give a step‑by‑step you can run immediately.
DcS79c
Member
- Joined
- Dec 5, 2025
- Messages
- 8
- Thread Author
-
- #9
You keep referring to Visual Studio for Mac. That was discontinued on 8/31/24. So, I guess that I'd need to use VS Code.
I've looked at your explanations & I have no idea what you are referring to.
Backends, shared class library, extract the shared logic into a reusable project (a class library) and reference it from each app project, & on & on & on.
It's way too complicated for me. I'm not a patient person. I'd quickly get tired of seeing error messages & want to throw my computer out the door.
Besides, I don't want to learn how to use XCODE & VS Code.
So, thank you for your help, but I've ruled out the option of using .NET for cross-platform apps.
I've looked at your explanations & I have no idea what you are referring to.
Backends, shared class library, extract the shared logic into a reusable project (a class library) and reference it from each app project, & on & on & on.
It's way too complicated for me. I'm not a patient person. I'd quickly get tired of seeing error messages & want to throw my computer out the door.
Besides, I don't want to learn how to use XCODE & VS Code.
So, thank you for your help, but I've ruled out the option of using .NET for cross-platform apps.
- Joined
- Mar 14, 2023
- Messages
- 96,538
Totally fine — and totally understandable. You made a practical call: .NET/MAUI can get fairly noisy and has more moving parts. If you don’t want to deal with a long stack of toolchain errors, there are much simpler routes that get you running and shipping cross‑platform apps faster.
Below are three clear, low‑friction alternatives (ranked by how quickly you’ll see working results) plus very short starter steps for each. Tell me which one you want and I’ll give exact commands/files and walk you through it step‑by‑step.
Option 1 — Easiest, fastest: Build a Web App or PWA (HTML/CSS/JS)
Below are three clear, low‑friction alternatives (ranked by how quickly you’ll see working results) plus very short starter steps for each. Tell me which one you want and I’ll give exact commands/files and walk you through it step‑by‑step.
Option 1 — Easiest, fastest: Build a Web App or PWA (HTML/CSS/JS)
- Pros: Immediate feedback (open a file in a browser), no heavy toolchain, host anywhere (GitHub Pages, Netlify) and it runs on desktop/mobile browsers (no App Store).
- Cons: Not a “native” app (but PWAs can behave like apps on many platforms).
- Starter steps (5 minutes):
- Create a folder, add index.html with "Hello world".
- Open index.html in your browser to see it.
- When ready to publish, create a GitHub repo, push your folder, enable GitHub Pages (or drag to Netlify).
- If you want, I’ll give a ready‑to‑copy index.html and show Git/GitHub steps.
- Pros: Use JavaScript (fast to learn if you know web JS), develop in VS Code, live reload on your phone with the Expo Go app — no Xcode required for development, and Expo cloud builds can produce signed iOS apps so you don’t need a Mac for final builds if you use their service.
- Cons: Native features sometimes require extra config; large apps can need more setup.
- Starter steps (quick):
- Install Node.js (if needed).
- Install Expo CLI:
npm install -g expo-cli. expo init myapp→ choose template,cd myapp,expo start.- Scan the QR with Expo Go on your phone and test.
- I can walk you through installing Node + Expo and running the first project.
- Pros: Single codebase for iOS/Android/web/desktop, excellent hot reload and documentation, VS Code has great Flutter support. Many beginners find the Flutter tooling friendlier than MAUI.
- Cons: To produce final iOS builds you still need Xcode (or use cloud CI), but for day‑to‑day development you can work a long way in VS Code.
- Starter steps (quick):
- Download & install the Flutter SDK and add it to PATH.
- Run
flutter doctor(fix any suggested items). flutter create my_app→cd my_app→code .→flutter run(or use VS Code “Run” with the Flutter extension).
- I’ll give exact download links and commands if you want.
- A = Quick web/PWA starter (fastest, minimal errors), or
- B = Expo (React Native) starter (mobile feel, little setup, no Xcode required for dev), or
- C = Flutter + VS Code starter (native look, good cross‑platform, slightly more setup)
DcS79c
Member
- Joined
- Dec 5, 2025
- Messages
- 8
- Thread Author
-
- #11
I have an Android phone. I've never had an iPhone. I've wondered about creating iOS or Android apps.
I've wondered about Flutter & React. I'll check them out. I spend hours on YouTube!
HMM, a Web app & I don't have to pay Apple $99/year & go thru the hassle of posting the app to the Apple store! Or the Google store!
So, a web app I can distribute by giving a copy of the HTML file to a friend. All he/she has to do is double click the file, correct?
Thank you!
I've wondered about Flutter & React. I'll check them out. I spend hours on YouTube!
HMM, a Web app & I don't have to pay Apple $99/year & go thru the hassle of posting the app to the Apple store! Or the Google store!
So, a web app I can distribute by giving a copy of the HTML file to a friend. All he/she has to do is double click the file, correct?
Thank you!
- Joined
- Mar 14, 2023
- Messages
- 96,538
Short answer: Yes — for a simple static page (just HTML + CSS + images) your friend can double‑click index.html and it will open in their browser. But there are important caveats depending on what your page does. Below is a very short, practical guide so you know what will and won’t work and the easiest ways to share.
1) What definitely works by double‑clicking index.html
1) What definitely works by double‑clicking index.html
- Plain HTML and CSS pages and images.
- Inline JavaScript that manipulates the current page (DOM), e.g. simple buttons, forms, text updates.
- This is the fastest, no‑install route: zip the folder (index.html + assets) and send it — friend unzips and double‑clicks index.html.
- fetch/ajax to load other files (some browsers block fetch from file:// or treat CORS differently).
- ES module imports with relative URLs (browsers sometimes require HTTP to load modules reliably).
- Service workers, Web App Manifests, and many PWA features — these require the page to be served over HTTPS or localhost, so they won’t install or behave offline when opened via file://.
- Any server‑side features (databases, server APIs) — those always require a web server.
- Create a folder (MyApp).
- Put a file named index.html inside. Example minimal content you can copy/paste:
<!doctype html>
<html>
<head><meta charset="utf-8"><title>My Simple App</title></head>
<body>
<h1>Hello — double‑click this file!</h1>
<button id="btn">Click me</button>
<script>
document.getElementById('btn').addEventListener('click', => alert('It works!');
</script>
</body>
</html> - Zip the MyApp folder and send it. Friend unzips and double‑clicks index.html to open in their browser.
- Host it (free) so links, modules and service workers work and you can update easily. Two very easy free hosts:
- GitHub Pages — free and simple if you can create a GitHub account.
- Netlify — drag‑and‑drop deploy in the browser for simple sites.
Hosting solves file:// limitations (modules, fetch, PWAs, HTTPS). If you want, I’ll give the exact 5‑step GitHub Pages commands.
- Make your site a PWA (web app manifest + service worker) and host it over HTTPS. Chrome on Android will show “Add to Home screen” so your site behaves like an app (no App Store fee). Note: iOS supports only a subset of PWA features. Service workers and install prompts require hosting (not file://). See earlier discussion on web vs native app tradeoffs.
- Don’t rely on double‑click. Use a simple local server for development:
- If you (or a friend) have Python: run
python -m http.server 8000in the folder and open http://localhost:8000. - Or use VS Code “Live Server” extension (one click) to serve the folder.
- If you (or a friend) have Python: run
- Local server gives the same behavior as hosting and avoids file:// restrictions.
- If you just want to show something quickly to friends: zip and double‑click is fine. Keep everything relative (images in subfolders) and avoid fetch/module/service worker use.
- If you want a slightly polished, shareable URL that you can update and that supports installable PWA features: I’ll walk you through hosting on GitHub Pages (free) — takes ~10 minutes.
- If your long‑term plan is mobile apps later, starting with a hosted web app or PWA is the easiest way to learn and distribute without App Store fees.
- I can give a ready‑to‑copy index.html file (a tiny web app) and show how to zip/share it, or
- Show 5 quick steps to publish the same folder on GitHub Pages so your friend can open a URL, or
- Show how to make it an installable PWA (adds a few files; I’ll provide them).
Similar threads
- Featured
- Article
- Replies
- 0
- Views
- 33
- Featured
- Article
- Replies
- 0
- Views
- 33
- Featured
- Article
- Replies
- 0
- Views
- 321
- Featured
- Article
- Replies
- 0
- Views
- 20
- Featured
- Article
- Replies
- 0
- Views
- 21