I have the urge to commit my 24' Core 2 Duo iMac to a single Linux operating system, thus giving up the goodness of my beloved Mac OS X. I am not a stranger to Linux, but I am a stranger to running Mac apps on Linux. On my PowerPC I can use SheepShaver to run Classic apps. The Mac-on-Linux project c. Jan 15, 2018 Before we run the apps, we need to publish them, as you would do in production, to get a release build. For Windows, we can follow the same steps for both applications: In Visual Studio, right-click the project file and click Publish, like in the image below; Then, you can pick a folder and click publish. Aug 06, 2013 Linux users who want to run Windows applications without switching operating systems have been able to do so for years with Wine, software that lets apps.
- Create a new project
- Create and run
- macOS-specific support
- Entitlements and the App Sandbox
- Plugin support
- Jun 10, 2005 Welcome to LinuxQuestions.org, a friendly and active Linux Community. You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features.
- Obviously you can't really run Mac or Linux apps on Windows, but can you compile binaries for those platforms using MSVC for example (plugging in additional compilers and tools obviously)? For a serious build system, you don't want one build server per platform so having an automated build server which compiles for all target platforms seems.
- For those who don’t know C# is a Microsoft language and Visual Studio is a Microsoft IDE or Integrated Development Environment. Due to Microsoft’s history of being a very proprietary closed-source company there’s a bit of a perception that you wouldn’t be able to compile Applications written in C# and run them in the Open Source world of Linux but I’m going to show you just how easy.
Desktop support allows you to compile Flutter source codeto a native macOS or Linux desktop app. Flutter’s desktopsupport also extends to plugins—you can install existing plugins that support the macOS or Linux platforms,or you can create your own.
Warning:Work in progress! This page covers desktop support for macOS and Linux, which are available as alpha-quality features in the Flutter dev channel. Windows platform support is still under development.
These platforms still have notable feature gaps, including accessibility support. We strongly recommend that you examine the Desktop shells page in the Flutter wiki to understand known limitations and ongoing work.
Note: To compile a macOS desktop app, you must build the app on a Mac. To compile a Linux desktop app, you must build the app on Linux. If you experience a problem that hasn’t yet been reported, please file an issue and include “desktop:macos” or “desktop:linux” in the title.
Requirements
To create a Flutter app with desktop support, you need thefollowing software:
- Flutter SDK. See theFlutter SDK installation instructions.
- Optional: An IDE that supports Flutter.You can install Android Studio, IntelliJ IDEA,or Visual Studio Code andinstall the Flutter and Dart pluginsto enable language support and tools for refactoring,running, debugging, and reloading your desktop appwithin an editor. See setting up an editorfor more details.
For macOS desktop development,you need the following in addition to the Flutter SDK:
- CocoaPods if you use plugins
For Linux desktop development,you need the following in addition to the Flutter SDK:
Linux installation varies by distro, buton Ubuntu you might use the following command:
Create a new project
You can use the following stepsto create a new project with desktop support.
Set up
At the command line, perform the following commands tomake sure that you have the latest desktop support and thatit’s enabled. If you see “flutter: command not found”,then make sure that you have installed theFlutter SDK and that it’s in your path.
Where _
To ensure that desktop is installed,list the devices available.You should see something like the following(you’ll see either macOS or Linux, not both):
You might also run flutter doctor
to see if there areany unresolved issues. It should look something likethe following on macOS:
On Linux, you might see something like the following:
If flutter doctor
finds problems for a platform you don’tsupport, you can ignore those warnings. You don’t haveto install Android Studio and the Android SDK,for example, if you’re writing a Linux desktop app.
After enabling desktop support, restart your IDE.You should now see macOS (desktop) or linux (desktop) in the device pulldown.
Note: You only need to execute flutter config --enable-<platform>-desktop
once. You can always check the status of your configuration using the no-argument flutter config
command.
Create and run
Creating a new project with desktop support is no differentthan creating a new Flutter project for other platforms.
Once you’ve configured your environment for desktopsupport, you can create and run a desktop app eitherin the IDE or from the command line.
IDE
After you’ve configured your environment to supportdesktop, make sure you restart the IDE if it wasalready running.
Create a new app in your IDE and it automaticallycreates iOS, Android, and desktop versions of your app.(And web, too, if you’ve enabled web support.)From the device pulldown, select macOS (desktop)or linux (desktop) and run your app to see itlaunch on the desktop.
Command line
To create a new app that includes desktop support(in addition to mobile support), run the following commands,substituting myapp
with the name of your project:
To launch your app from the command line,enter one of the following from the topof the package:
Note: If there aren’t any other connected devices, the -d <platform>
tag is optional.
Build a release app
To generate a release build run one of the following commands:
In general, we don’t recommend releasing a desktop app untildesktop support is stable.However, if you’re interested in learning how to publisha Linux app to the Snap Store, seeBuild and release a Linux desktop app.
Add desktop support to an existing app
To add desktop support to an existing project,run the following command in a terminal from theroot project directory:
This adds the necessary files and directories to yourFlutter project.
macOS-specific support
The following information applies only to macOS development.
Entitlements and the App Sandbox
macOS builds are configured by default to be signed,and sandboxed with App Sandbox.This means that if you want to confer specificcapabilities or services on your macOS app,such as the following:
- Accessing the internet
- Capturing movies and images from the built-in camera
- Accessing files
Then you must set up specific entitlements in Xcode.The following section tells you how to do this.
Setting up entitlements
Managing sandbox settings is done in themacos/Runner/*.entitlements
files. When editingthese files, you shouldn’t remove the originalRunner-DebugProfile.entitlements
exceptions(that support incoming network connections and JIT),as they’re necessary for the debug
and profile
modes to function correctly.
If you’re used to managing entitlement files throughthe Xcode capabilities UI, be aware that the capabilitieseditor updates only one of the two files or,in some cases, it creates a whole new entitlementsfile and switches the project to use it for all configurations.Either scenario causes issues. We recommend that youedit the files directly. Unless you have a very specificreason, you should always make identical changes to both files.
If you keep the App Sandbox enabled (which is required if youplan to distribute your app in the App Store), you need to manageentitlements for your application when you add certain pluginsor other native functionality. For instance, using thefile_chooser
plugin requires adding either thecom.apple.security.files.user-selected.read-only
orcom.apple.security.files.user-selected.read-write
entitlement.Another common entitlement is com.apple.security.network.client
,which you must add if you make any network requests.
Important: The com.apple.security.network.server
entitlement, which allows incoming network connections, is enabled by default only for debug
and profile
builds to enable communications between Flutter tools and a running app. If you need to allow incoming network requests in your application, you must add the com.apple.security.network.server
entitlement to Runner-Release.entitlements
as well, otherwise your app will work correctly for debug or profile testing, but will fail with release builds.
For more information on these topics,see App Sandbox and Entitlementson the Apple Developer site.
Hardened runtime
If you choose to distribute your application outsideof the App Store, you need to notarize your applicationfor compatibility with macOS 10.15+.This requires enabling the Hardened Runtime option.Once you have enabled it, you need a valid signingcertificate in order to build.
By default, the entitlements file allows JIT for debug builds but,as with App Sandbox, you may need to manage other entitlements.If you have both App Sandbox and Hardened Runtime enabled,you may need to add multiple entitlements for the same resource.For instance, microphone access would require bothcom.apple.security.device.audio-input
(for Hardened Runtime)and com.apple.security.device.microphone
(for App Sandbox).
For more information on this topic,see Hardened Runtime on the Apple Developer site.
Plugin support
Flutter on the desktop supports using and creating plugins.
To use a plugin that supports desktop,follow the steps for plugins in using packages.Flutter automatically adds the necessary native codeto your project, as with iOS or Android.
We recommend the following plugins, which have beenupdated to work for macOS and Linux desktop apps:
Use the following links to find all packages on pub.devthat support desktop apps. These links lists all packages,not just plugin packages. (Remember that plugin packages,or plugins, provide an interface to platform-specific services.)
Creating a plugin
Linux Compile Command
Federated plugins are a recent addition toFlutter’s plugin support. They allow you toseparate functionality for different platformsinto different packages; so the Androidimplementation can be in one package,and the macOS implementation in another.Desktop plugins are perfectly suitedto be implemented as part of a federatedplugin. For more information, seethe following resources:
- Developing packages and plugins, including theFederated plugins section.
- How to write a Flutter web plugin, part 2,covers the structure of federated plugins andcontains information applicable to desktopplugins.
- Modern Flutter Plugin Development coversrecent enhancements to Flutter’s plugin support.
Samples and codelabs
- Write a Flutter desktop application
- A codelab that walks you through buildinga desktop app (for macOS and Linux) thatintegrates the GitHub GraphQL API with yourFlutter app.
You can run the following samples as desktop apps,as well as download and inspect the source code tolearn more about Flutter desktop support.
- Flutter Gallery running web app, repo
- A samples project hosted on GitHub to help developersevaluate and use Flutter. The Gallery consists of acollection of Material design widgets, behaviors,and vignettes implemented with Flutter.You can clone the project and run Gallery as a desktop appby following the instructions provided in the README.
- Photo Search app
- A sample app built as a desktop application(for both macOS and Linux) that usesthe following desktop-supported plugins:
What’s next
Stay tuned for updates on desktop support!We continue to develop support for macOS,Windows, and Linux.
Watch the Desktop shells page on the Flutter wikifor more information and ongoing updates.
If this isn't the right forum, please tell me.
Don
Single 1.8 G5 and dead Powerbook G3 (Firewire) Mac OS X (10.4.7) Powerbook dual-booted with Linux
Compile Linux On Windows
Posted on