about summary refs log tree commit diff
path: root/pkgs/development
diff options
context:
space:
mode:
authorThiago Kenji Okada <thiagokokada@gmail.com>2023-07-08 13:13:46 +0100
committerGitHub <noreply@github.com>2023-07-08 13:13:46 +0100
commit298ff2f2a4e45f5d58256298a1237038f62710da (patch)
tree85981496a5bbf3eeca7668a6a946a3dbedaeb881 /pkgs/development
parentcdda2aaaa894a45ab0f6d7d83ef5bc4fa6c9a8e5 (diff)
parent37a10c3cb7f0117ef0e0662e2059c5fd0ce6a4ce (diff)
Merge pull request #210067 from devholic/flutter-darwin
flutter: add darwin support
Diffstat (limited to 'pkgs/development')
-rw-r--r--pkgs/development/compilers/flutter/default.nix50
-rw-r--r--pkgs/development/compilers/flutter/engine-artifacts/default.nix80
-rw-r--r--pkgs/development/compilers/flutter/engine-artifacts/hashes.nix88
-rw-r--r--pkgs/development/compilers/flutter/flutter.nix12
-rw-r--r--pkgs/development/compilers/flutter/wrapper.nix13
5 files changed, 221 insertions, 22 deletions
diff --git a/pkgs/development/compilers/flutter/default.nix b/pkgs/development/compilers/flutter/default.nix
index ba2a6f6092aae..95758fb56ab04 100644
--- a/pkgs/development/compilers/flutter/default.nix
+++ b/pkgs/development/compilers/flutter/default.nix
@@ -5,7 +5,7 @@ let
   getPatches = dir:
     let files = builtins.attrNames (builtins.readDir dir);
     in map (f: dir + ("/" + f)) files;
-  mkFlutter = { version, engineVersion, dartVersion, hash, dartHash, patches }:
+  mkFlutter = { version, engineVersion, dartVersion, flutterHash, dartHash, patches }:
     let
       args = {
         inherit version engineVersion patches;
@@ -21,12 +21,34 @@ let
               url = "https://storage.googleapis.com/dart-archive/channels/stable/release/${dartVersion}/sdk/dartsdk-linux-arm64-release.zip";
               sha256 = dartHash.aarch64-linux;
             };
+            "${dartVersion}-x86_64-darwin" = fetchzip {
+              url = "https://storage.googleapis.com/dart-archive/channels/stable/release/${dartVersion}/sdk/dartsdk-macos-x64-release.zip";
+              sha256 = dartHash.x86_64-darwin;
+            };
+            "${dartVersion}-aarch64-darwin" = fetchzip {
+              url = "https://storage.googleapis.com/dart-archive/channels/stable/release/${dartVersion}/sdk/dartsdk-macos-arm64-release.zip";
+              sha256 = dartHash.aarch64-darwin;
+            };
           };
         };
-        src = fetchzip {
-          url = "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${version}-stable.tar.xz";
-          sha256 = hash;
-        };
+        src = {
+          x86_64-linux = fetchzip {
+            url = "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${version}-stable.tar.xz";
+            sha256 = flutterHash.x86_64-linux;
+          };
+          aarch64-linux = fetchzip {
+            url = "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${version}-stable.tar.xz";
+            sha256 = flutterHash.aarch64-linux;
+          };
+          x86_64-darwin = fetchzip {
+            url = "https://storage.googleapis.com/flutter_infra_release/releases/stable/macos/flutter_macos_${version}-stable.zip";
+            sha256 = flutterHash.x86_64-darwin;
+          };
+          aarch64-darwin = fetchzip {
+            url = "https://storage.googleapis.com/flutter_infra_release/releases/stable/macos/flutter_macos_arm64_${version}-stable.zip";
+            sha256 = flutterHash.aarch64-darwin;
+          };
+        }.${stdenv.hostPlatform.system};
       };
     in
     (mkCustomFlutter args).overrideAttrs (prev: next: {
@@ -55,10 +77,17 @@ in
     version = "3.10.5";
     engineVersion = "45f6e009110df4f34ec2cf99f63cf73b71b7a420";
     dartVersion = "3.0.5";
-    hash = "sha256-lLppUQzu+fl81TMYSPD+HA83BqeIg7bXpURyo49NPwI=";
     dartHash = {
       x86_64-linux = "sha256-UVVwPFk0qsKNR4JZMOGSGh1T482MN/8Xp4MZ3SA3C28=";
       aarch64-linux = "sha256-phzaFfrv7qbZOOhPq92q39R6mr5vFeBqEmYDU7e7lZQ=";
+      x86_64-darwin = "sha256-4gJ659bNzs2lfI1LRwFACgu/ttkj+3xIrqLijju+CaI=";
+      aarch64-darwin = "sha256-RJt+muq5IrcAhVLYEgdbVygcY1oB7tnVCN+iqktC+6c=";
+    };
+    flutterHash = rec {
+      x86_64-linux = "sha256-lLppUQzu+fl81TMYSPD+HA83BqeIg7bXpURyo49NPwI=";
+      aarch64-linux = x86_64-linux;
+      x86_64-darwin = "sha256-1ZC5aCoGVBCeTSsu/ZEl1v53lLnzulx8Ya6YXvo4yIY=";
+      aarch64-darwin = "sha256-TCMempLjO47IbP5MAZVHlXXvNaURGo+EbaL0K8e27wU=";
     };
     patches = flutter3Patches;
   };
@@ -67,10 +96,17 @@ in
     version = "3.7.12";
     engineVersion = "1a65d409c7a1438a34d21b60bf30a6fd5db59314";
     dartVersion = "2.19.6";
-    hash = "sha256-5ExDBQXIpoZ5NwS66seY3m9/V8xDiyq/RdzldAyHdEE=";
     dartHash = {
       x86_64-linux = "sha256-4ezRuwhQHVCxZg5WbzU/tBUDvZVpfCo6coDE4K0UzXo=";
       aarch64-linux = "sha256-pYmClIqOo0sRPOkrcF4xQbo0mHlrr1TkhT1fnNyYNck=";
+      x86_64-darwin = "sha256-tuIQhIOX2ub0u99CW/l7nCya9YVNokCZNgbVFqO4ils=";
+      aarch64-darwin = "sha256-Oe8/0ygDN3xf5/2I3N/OBzF0bps7Mg0K2zJKj+E9Nak=";
+    };
+    flutterHash = rec {
+      x86_64-linux = "sha256-5ExDBQXIpoZ5NwS66seY3m9/V8xDiyq/RdzldAyHdEE=";
+      aarch64-linux = x86_64-linux;
+      x86_64-darwin = "sha256-cJF8KB9fNb3hTZShDAPsMmr1neRdIMLvIl/m2tpzwQs=";
+      aarch64-darwin = "sha256-yetEE65UP2Wh9ocx7nClQjYLHO6lIbZPay1+I2tDSM4=";
     };
     patches = flutter3Patches;
   };
diff --git a/pkgs/development/compilers/flutter/engine-artifacts/default.nix b/pkgs/development/compilers/flutter/engine-artifacts/default.nix
index 6f5d6b98d9b8f..249e9217325ba 100644
--- a/pkgs/development/compilers/flutter/engine-artifacts/default.nix
+++ b/pkgs/development/compilers/flutter/engine-artifacts/default.nix
@@ -2,10 +2,11 @@
 , stdenv
 , hostPlatform
 , engineVersion
+, fetchurl
 , fetchzip
 , autoPatchelfHook
-
 , gtk3
+, unzip
 }:
 
 let
@@ -44,6 +45,56 @@ let
             };
           };
 
+        darwin = {
+          "arm64" = {
+            base = [
+              { archive = "artifacts.zip"; }
+              { archive = "font-subset.zip"; }
+            ];
+            variants = lib.genAttrs [ "profile" "release" ]
+              (variant: [
+                { archive = "artifacts.zip"; }
+              ]);
+          };
+          "x64" = {
+            base = [
+              { archive = "FlutterEmbedder.framework.zip"; }
+              { archive = "FlutterMacOS.framework.zip"; }
+              { archive = "artifacts.zip"; }
+              { archive = "font-subset.zip"; }
+              { archive = "gen_snapshot.zip"; }
+            ];
+            variants.profile = [
+              { archive = "FlutterMacOS.framework.zip"; }
+              { archive = "artifacts.zip"; }
+              { archive = "gen_snapshot.zip"; }
+            ];
+            variants.release = [
+              { archive = "FlutterMacOS.dSYM.zip"; }
+              { archive = "FlutterMacOS.framework.zip"; }
+              { archive = "artifacts.zip"; }
+              { archive = "gen_snapshot.zip"; }
+            ];
+          };
+        };
+
+        ios =
+          (lib.genAttrs
+            [ "" ]
+            (arch:
+              {
+                base = [
+                  { archive = "artifacts.zip"; }
+                ];
+                variants.profile = [
+                  { archive = "artifacts.zip"; }
+                ];
+                variants.release = [
+                  { archive = "artifacts.zip"; }
+                  { archive = "Flutter.dSYM.zip"; }
+                ];
+              }));
+
         linux = lib.genAttrs
           [ "arm64" "x64" ]
           (arch:
@@ -85,18 +136,29 @@ let
     let
       artifactDirectory = if platform == null then null else "${platform}${lib.optionalString (variant != null) "-${variant}"}";
       archiveBasename = lib.removeSuffix ".${(lib.last (lib.splitString "." archive))}" archive;
+      overrideUnpackCmd = builtins.elem archive [ "FlutterEmbedder.framework.zip" "FlutterMacOS.framework.zip" ];
     in
     stdenv.mkDerivation ({
       pname = "flutter-artifact${lib.optionalString (platform != null) "-${artifactDirectory}"}-${archiveBasename}";
       version = engineVersion;
 
-      src = fetchzip {
-        url = "https://storage.googleapis.com/flutter_infra_release/flutter/${engineVersion}${lib.optionalString (platform != null) "/${artifactDirectory}"}/${archive}";
-        stripRoot = false;
-        hash = (if artifactDirectory == null then hashes else hashes.${artifactDirectory}).${archive};
-      };
+      nativeBuildInputs = [ unzip ]
+        ++ lib.optionals stdenv.hostPlatform.isLinux [ autoPatchelfHook ];
+
+      src =
+        if overrideUnpackCmd then
+          (fetchurl {
+            url = "https://storage.googleapis.com/flutter_infra_release/flutter/${engineVersion}${lib.optionalString (platform != null) "/${artifactDirectory}"}/${archive}";
+            hash = (if artifactDirectory == null then hashes else hashes.${artifactDirectory}).${archive};
+          }) else
+          (fetchzip {
+            url = "https://storage.googleapis.com/flutter_infra_release/flutter/${engineVersion}${lib.optionalString (platform != null) "/${artifactDirectory}"}/${archive}";
+            stripRoot = false;
+            hash = (if artifactDirectory == null then hashes else hashes.${artifactDirectory}).${archive};
+          });
 
-      nativeBuildInputs = [ autoPatchelfHook ];
+      setSourceRoot = if overrideUnpackCmd then "sourceRoot=`pwd`" else null;
+      unpackCmd = if overrideUnpackCmd then "unzip -o $src -d $out" else null;
 
       installPhase =
         let
@@ -117,13 +179,13 @@ let
             (architecture: variants: {
               base = map
                 (args: mkArtifactDerivation ({
-                  platform = "${os}-${architecture}";
+                  platform = "${os}${lib.optionalString (architecture != "") "-${architecture}"}";
                 } // args))
                 variants.base;
               variants = builtins.mapAttrs
                 (variant: variantArtifacts: map
                   (args: mkArtifactDerivation ({
-                    platform = "${os}-${architecture}";
+                    platform = "${os}${lib.optionalString (architecture != "") "-${architecture}"}";
                     inherit variant;
                   } // args))
                   variantArtifacts)
diff --git a/pkgs/development/compilers/flutter/engine-artifacts/hashes.nix b/pkgs/development/compilers/flutter/engine-artifacts/hashes.nix
index d0749bf09783c..fb5134739f76b 100644
--- a/pkgs/development/compilers/flutter/engine-artifacts/hashes.nix
+++ b/pkgs/development/compilers/flutter/engine-artifacts/hashes.nix
@@ -6,10 +6,12 @@
     android-arm-profile = {
       "artifacts.zip" = "sha256-MErLoGJWXg4yJ6b6c5bqP8Nat6O7eYSfM71mMNAAQf4=";
       "linux-x64.zip" = "sha256-0TZQ05HR7NRqHzeoHZ/sOrjKiSvCpMUH85YXXzV4URg=";
+      "darwin-x64.zip" = "sha256-gOmxGurYyuuGxPnzK+2O1s7d7x514R9MfincibxVTCI=";
     };
     android-arm-release = {
       "artifacts.zip" = "sha256-hU4S4FOqUGokByZ47nzOqQ4A9QFshruqrpJvJUBHUho=";
       "linux-x64.zip" = "sha256-AqNlqjOht+c2sdW5ReoF66ZJWJl1W4vGKbQ3YyderRY=";
+      "darwin-x64.zip" = "sha256-UiJNbIvjYvIX2oFNCz+TurUdhHS8vcl9X6WEkEs5hvU=";
     };
     android-arm64 = {
       "artifacts.zip" = "sha256-ApNg3Uu9gyGNsx7sdpTCz1yADVAI5ZuNHgvgiuH9IpQ=";
@@ -17,10 +19,12 @@
     android-arm64-profile = {
       "artifacts.zip" = "sha256-D/8+WKPIkOaV3PwkCHiJROFlokm4lWWmtPQb93Yqwr0=";
       "linux-x64.zip" = "sha256-S0RHLov6/C22VvGdvZV87Ybaxun8YBrw1gTgNklRcM0=";
+      "darwin-x64.zip" = "sha256-AWivGn0TCVEW+N8g9bpEP1JuKWhrccb+ANQgyLjBjfw=";
     };
     android-arm64-release = {
       "artifacts.zip" = "sha256-OoYqHtwmT+VWJ+G+sMXM5+ux3h1Fnyo9Vj2za9cm5eE=";
       "linux-x64.zip" = "sha256-NuXclg1a+Ofw5AWJ1tajpn2jYEZw6DluWxrFVL8rPfg=";
+      "darwin-x64.zip" = "sha256-/j5sVfyllkhsc9mpdbOqlT7VT1H6nD3Y+mYnWXDh0yI=";
     };
     android-x64 = {
       "artifacts.zip" = "sha256-hrBvnzCj/24h5kat96avlgXi6WhMsos5aPlkgxOYo8Q=";
@@ -28,10 +32,12 @@
     android-x64-profile = {
       "artifacts.zip" = "sha256-xzSj/2ah9aQoosaNGkSWFP3bMNJqRSFc0+78XEBHwzM=";
       "linux-x64.zip" = "sha256-HfBiz1JWlBQ8KEfmf8uDlVzFlDt3+VF2VeY82tsMjHs=";
+      "darwin-x64.zip" = "sha256-J5JJH9GAQaQKahimb09fLC59VchPP15iMHY9bDMfdf8=";
     };
     android-x64-release = {
       "artifacts.zip" = "sha256-TcfMeA+8Uf9yRrYdEIsjip0cKmSUm2Ow1tkoE9803XY=";
       "linux-x64.zip" = "sha256-D6efb6pj9+xjPnJu3O+ZCmwfatBzasuFZEFRntAiU9U=";
+      "darwin-x64.zip" = "sha256-hDftGgKqW6tzH/+jFOYfzxssbS01XtiWEeycJr3QSoc=";
     };
     android-x86 = {
       "artifacts.zip" = "sha256-nN66nIrcbJHq2S4oIT5e2NCv7mS5Kw+HBv3ReHs+d3Y=";
@@ -39,8 +45,46 @@
     android-x86-jit-release = {
       "artifacts.zip" = "sha256-A8F6K78Ykp1rMsUmjD7B9nFFPAubZnqAqgWSzbNCRwk=";
     };
+    darwin-arm64 = {
+      "artifacts.zip" = "sha256-lfkEToKFBBOee7KgOl1z/ZeMQwEBWkmAYb2Hbfk8dfg=";
+      "font-subset.zip" = "sha256-W7GnLvCobED7uyhpURF4T4SL4yZIQmE2JFQVQIxl0NI=";
+    };
+    darwin-arm64-profile = {
+      "artifacts.zip" = "sha256-DfYS+FEqjtq02jFRBqVR3SVWe4LAoPa5MMKWCbvF7mI=";
+    };
+    darwin-arm64-release = {
+      "artifacts.zip" = "sha256-gG/OcCJE3XPO6T8bltMtPxdlYX5HQ/4qYsdHe0OdDaE=";
+    };
+    darwin-x64 = {
+      "FlutterEmbedder.framework.zip" = "sha256-G84GGK6gtR+CYu9S/GhdNTL4KWqgFBp8QdvWOq+IZlk=";
+      "FlutterMacOS.framework.zip" = "sha256-1/txBoXDIs7Gn5zsZ4jYQXK73+iaZV4sRdYKqEBUTxU=";
+      "artifacts.zip" = "sha256-H7Moy6E1eRrOXYYAIgiJHOmstyy3YaCnu8O3IPr9BK8=";
+      "font-subset.zip" = "sha256-VSkG3zZw/4DDInwxPaMXT2B1LXIb0Ejkb2xf5SVrwW4=";
+      "gen_snapshot.zip" = "sha256-Pknv1fUcXGbWzt6So0DgWnvL4b43k51KMWiX1YXd2As=";
+    };
+    darwin-x64-profile = {
+      "FlutterMacOS.framework.zip" = "sha256-3umN1HNX4UA00EFsBnWS0X04QRKlcCnChDYd9L6x1L4=";
+      "artifacts.zip" = "sha256-8Aj2+nTKKeVLEYN+swVlVqRB/3fVSwrb3i1g1JUDsNY=";
+      "gen_snapshot.zip" = "sha256-bi3RqSdOQODpPmY+eBUQPiNeZ/bECoOUx/pOADpTZiA=";
+    };
+    darwin-x64-release = {
+      "FlutterMacOS.dSYM.zip" = "sha256-LfDQuCcBXEV3Jao/sbfIvjn1d2ZfZrWgzNzFE1zE3Rw=";
+      "FlutterMacOS.framework.zip" = "sha256-2xuPPJifdu/kvvtR0viMvbTOXfv8ndtNAhTmef8863o=";
+      "artifacts.zip" = "sha256-3p41zRjvWYCl/Kk/7/0MjV2FS10XEtyX1hYmxTHT8lU=";
+      "gen_snapshot.zip" = "sha256-ExXwj1QO1XQznZ49rW08tibA5BaURShE6pUYDokZfpE=";
+    };
     "flutter_patched_sdk.zip" = "sha256-Pvsjttm5OwpJ/pW4UQXvvEiJYCM5CoZZfVXz5jef37k=";
     "flutter_patched_sdk_product.zip" = "sha256-fhj2uUOrLwrzHrM6RNVpPNize5Qu6mLQDcSzLT2TbRA=";
+    ios = {
+      "artifacts.zip" = "sha256-yqJ4+lNsedRFbe11dBK4KGMX5+Nilj1V0i2E94n7q+0=";
+    };
+    ios-profile = {
+      "artifacts.zip" = "sha256-ZguLM1QoYyg5dXPw3Fl1zSLdbirShV3xZuxl1CfEf50=";
+    };
+    ios-release = {
+      "Flutter.dSYM.zip" = "sha256-Y57wt1y4NIdbRMM1r/d1Dv8bekwO9/9gpLkTEcw7Hfs=";
+      "artifacts.zip" = "sha256-Sm4Pkm1mWu3k5S+aws+kRpth+o3yTBYITg23LhnSViE=";
+    };
     linux-arm64 = {
       "artifacts.zip" = "sha256-xyKVaEFb5gVkVrPzDrOql5BmXGO0FnCSeXOoQ10ZFrw=";
       "font-subset.zip" = "sha256-Ulwb6q2SzB4suMJhAM3zAwWOzlEImlu9Ha+w5u4QqIU=";
@@ -75,10 +119,12 @@
     android-arm-profile = {
       "artifacts.zip" = "sha256-MZK1zaSv9yuZaVDR1dReCM7WRDxKql0yxsPa8WFc1yw=";
       "linux-x64.zip" = "sha256-9OlBv2C6Msj73g624TixbstudCTbdIJ6PzPMsbQENy4=";
+      "darwin-x64.zip" = "sha256-lVJ31F7UMaXQym3touJQ2cN8svKBaWJurDTVZPeMzCo=";
     };
     android-arm-release = {
       "artifacts.zip" = "sha256-tjHckwoxQkkKoyTl6+wBKK40mFDmSDvCPNhBHVA+xxw=";
       "linux-x64.zip" = "sha256-zE9oYkv4WBcbgEdYfYIcdDXX3tnYfCg+3KA3oA03nYA=";
+      "darwin-x64.zip" = "sha256-mCr29gIn808NF4k8kdC7oLTSU6AXq7I/bJF3BBdJlAo=";
     };
     android-arm64 = {
       "artifacts.zip" = "sha256-8W/JrOGhAzHWpM2Jh9vjdkaB6ODmCItqcmF47GqbNQk=";
@@ -86,10 +132,12 @@
     android-arm64-profile = {
       "artifacts.zip" = "sha256-9SGBWp05lxLQTpLuzq8FYSQQOpjo8UL93Pv4YYFD4QE=";
       "linux-x64.zip" = "sha256-5nH2AAxupRIhn8gNH+1V+vSP+qqfx5MS97EC4s3QHe8=";
+      "darwin-x64.zip" = "sha256-kkutEwKcj1wKJREbxbx8+DW53WVbizg6zKIFFVujgAM=";
     };
     android-arm64-release = {
       "artifacts.zip" = "sha256-7O7RBfEo6enZtVNsnt4HH0bex8Xpz9mqCvb2LNLbg3Q=";
       "linux-x64.zip" = "sha256-loucmX4+0R11L1nzewiMTeRZoB6wLK0WasW5W3rIvYU=";
+      "darwin-x64.zip" = "sha256-0bpNQDfIzQqwQpzThLfOXEEEpH/uCJCRF331d0/pzfs=";
     };
     android-x64 = {
       "artifacts.zip" = "sha256-j7AezbyzH07yOR0/W1ttfCjMHMdOlXLQjAsu/ExqmqA=";
@@ -97,10 +145,12 @@
     android-x64-profile = {
       "artifacts.zip" = "sha256-J8cqdcHoj1hpo6zY5R6S9lvkVXp7wvzQlurM7TEUe+k=";
       "linux-x64.zip" = "sha256-YuRHctkDjLZVGQr+m5uM+AxYNLkfqycV4UNcAp7JavE=";
+      "darwin-x64.zip" = "sha256-Mw8C279cVbQHTdIsHhIT5HWe52X8XXbkIDpVcEz1tWc=";
     };
     android-x64-release = {
       "artifacts.zip" = "sha256-uhq3fXcxXjF4/YHSkf6V4wToL9jOUKBm3978j/7xI/s=";
       "linux-x64.zip" = "sha256-iJfatLW7jVcrfNdVx/QOPiyON5ce0tSNGOBx0TILrKE=";
+      "darwin-x64.zip" = "sha256-3P3QZ+jW3Jl6PJvRY9pBHQdhj8UcsHFAjln8q6UlL+A=";
     };
     android-x86 = {
       "artifacts.zip" = "sha256-/xLacCi65hg1gEahty0btrc+NR/jfebSAIt31qwIlZY=";
@@ -108,8 +158,46 @@
     android-x86-jit-release = {
       "artifacts.zip" = "sha256-Ntq0i+sFruDhlyp9VBxBnsNqqGoQeXMeIwfi+BNlr0Q=";
     };
+    darwin-arm64 = {
+      "artifacts.zip" = "sha256-A21Tnn4jC5IzdL3c7n6/q9H6uJ/ofvJ+K9W8PPpAoYM=";
+      "font-subset.zip" = "sha256-NhnUOK1Gn4ekKOf5rDoy4HodzhlS8ylf/MN/6l4Dk18=";
+    };
+    darwin-arm64-profile = {
+      "artifacts.zip" = "sha256-aDWrz3bebC6kZRe2LgunsmFhbxJhmP1bsZv5A/SGF2Y=";
+    };
+    darwin-arm64-release = {
+      "artifacts.zip" = "sha256-F44e39KSX8juojFBV/CSvFES+RQW+gHKDWtfnydqiNo=";
+    };
+    darwin-x64 = {
+      "FlutterEmbedder.framework.zip" = "sha256-+S2unNH8cpfqUiPLTwGUUW00DdNYFDN8KM/O1pMdxQs=";
+      "FlutterMacOS.framework.zip" = "sha256-iCGXzxBhJGR6rWcECRg0W5Qv4I6ePo7UrWIqjQK1bWI=";
+      "artifacts.zip" = "sha256-2Ng0rxVDeMCH3kFHS7rhVd6R8oiJqvfsNDp+rzgtA50=";
+      "font-subset.zip" = "sha256-5IyNNLUT27WUCr61LjnMjmAZEv63ZaF+rl/p2XHFlVU=";
+      "gen_snapshot.zip" = "sha256-zPJaXPdvbQGx79c41XdRrBW/+3aV/INaPtO47+hHdxM=";
+    };
+    darwin-x64-profile = {
+      "FlutterMacOS.framework.zip" = "sha256-PV4sTACDGeLLPz+AchxngWrQypmmUVQ48bQlAfH323w=";
+      "artifacts.zip" = "sha256-LBosuXu9mPh5WT0Mmgu9rX5Nuy+iIGN8Xvi7uVAyFhc=";
+      "gen_snapshot.zip" = "sha256-douXVnavzSGBuld3WhwHagBNK6FEU679puM8/fNGz2I=";
+    };
+    darwin-x64-release = {
+      "FlutterMacOS.dSYM.zip" = "sha256-A8kyc1fmsGemgUVhI46yTC6XNkrXdoPYvwXomHoW6kM=";
+      "FlutterMacOS.framework.zip" = "sha256-dZ/MO9J+zanoGfvPaAinnANte92bQOlh697fd/LvGqA=";
+      "artifacts.zip" = "sha256-T/wxPd1LmstfGHr2Fx6cfhRifaGm6CUlig6cBMcOO5g=";
+      "gen_snapshot.zip" = "sha256-qeZxVp6btr/fUQRf7nOhlnSC03+QTcRaggiVOmPxVuo=";
+    };
     "flutter_patched_sdk.zip" = "sha256-kRRFCqQGBDimqwMiSn4yRMNRfZHt03YJqsKW47IBIvQ=";
     "flutter_patched_sdk_product.zip" = "sha256-BowamIQHPZgfcZbWG7OFrB5GeEwdcA7AdUrF2Y+KIds=";
+    ios = {
+      "artifacts.zip" = "sha256-VoofDPEBUW2jBrXg3Z556uC2UdrD9JCpioZNhX1p/P0=";
+    };
+    ios-profile = {
+      "artifacts.zip" = "sha256-5jDIqk7tWuRxXsAzrjBq9xzQrt/eREmmoEF3zc2xQ5M=";
+    };
+    ios-release = {
+      "Flutter.dSYM.zip" = "sha256-TuDld2LcHshl1mXcuIwfZgWLm1My4RpXUwI2B/QbLRk=";
+      "artifacts.zip" = "sha256-bGuUCKVqNNWWGVccVVKIBmCxTqgu4Q2Kj/Znnl9ZR2Q=";
+    };
     linux-arm64 = {
       "artifacts.zip" = "sha256-jME3ivE+M+ceAt3aGPSeVwPaW8UhwGQOoL5lmRUqrOU=";
       "font-subset.zip" = "sha256-MqavBMXOlx5JX94Oe/8GGuuDNh7A2UkjiOrEhCDW5cc=";
diff --git a/pkgs/development/compilers/flutter/flutter.nix b/pkgs/development/compilers/flutter/flutter.nix
index 59492f81231c5..49dcb4c3658d5 100644
--- a/pkgs/development/compilers/flutter/flutter.nix
+++ b/pkgs/development/compilers/flutter/flutter.nix
@@ -5,6 +5,7 @@
 , src
 , lib
 , stdenv
+, darwin
 , git
 , which
 }:
@@ -18,6 +19,8 @@ let
       outputs = [ "out" "cache" ];
 
       buildInputs = [ git ];
+      nativeBuildInputs = [ ]
+        ++ lib.optionals stdenv.hostPlatform.isDarwin [ darwin.DarwinTools ];
 
       preConfigure = ''
         if [ "$(< bin/internal/engine.version)" != '${engineVersion}' ]; then
@@ -69,8 +72,8 @@ let
 
         # Certain prebuilts should be replaced with Nix-built (or at least Nix-patched) equivalents.
         rm -r \
-          bin/cache/dart-sdk \
-          bin/cache/artifacts/engine
+          $FLUTTER_ROOT/bin/cache/dart-sdk \
+          $FLUTTER_ROOT/bin/cache/artifacts/engine
       '';
 
       installPhase = ''
@@ -84,7 +87,8 @@ let
       '';
 
       doInstallCheck = true;
-      nativeInstallCheckInputs = [ which ];
+      nativeInstallCheckInputs = [ which ]
+        ++ lib.optionals stdenv.hostPlatform.isDarwin [ darwin.DarwinTools ];
       installCheckPhase = ''
         runHook preInstallCheck
 
@@ -112,7 +116,7 @@ let
         '';
         homepage = "https://flutter.dev";
         license = licenses.bsd3;
-        platforms = [ "x86_64-linux" "aarch64-linux" ];
+        platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
         maintainers = with maintainers; [ babariviere ericdallo FlafyDev gilice hacker1024 ];
       };
     };
diff --git a/pkgs/development/compilers/flutter/wrapper.nix b/pkgs/development/compilers/flutter/wrapper.nix
index 50c522fd0e047..5685ddebd7813 100644
--- a/pkgs/development/compilers/flutter/wrapper.nix
+++ b/pkgs/development/compilers/flutter/wrapper.nix
@@ -1,9 +1,12 @@
 { lib
 , stdenv
+, darwin
 , callPackage
 , flutter
 , supportsLinuxDesktop ? stdenv.hostPlatform.isLinux
-, supportsAndroid ? stdenv.hostPlatform.isx86_64
+, supportsAndroid ? (stdenv.hostPlatform.isx86_64 || stdenv.hostPlatform.isDarwin)
+, supportsDarwin ? stdenv.hostPlatform.isDarwin
+, supportsIOS ? stdenv.hostPlatform.isDarwin
 , includedEngineArtifacts ? {
     common = [
       "flutter_patched_sdk"
@@ -12,6 +15,10 @@
     platform = {
       android = lib.optionalAttrs supportsAndroid
         ((lib.genAttrs [ "arm" "arm64" "x64" ] (architecture: [ "profile" "release" ])) // { x86 = [ "jit-release" ]; });
+      darwin = lib.optionalAttrs supportsDarwin
+        ((lib.genAttrs [ "arm64" "x64" ] (architecture: [ "profile" "release" ])));
+      ios = lib.optionalAttrs supportsIOS
+        ((lib.genAttrs [ "" ] (architecture: [ "profile" "release" ])));
       linux = lib.optionalAttrs supportsLinuxDesktop
         (lib.genAttrs ((lib.optional stdenv.hostPlatform.isx86_64 "x64") ++ (lib.optional stdenv.hostPlatform.isAarch64 "arm64"))
           (architecture: [ "debug" "profile" "release" ]));
@@ -158,7 +165,9 @@ let
 in
 (callPackage ./sdk-symlink.nix { }) (runCommandLocal "flutter-wrapped"
 {
-  nativeBuildInputs = [ makeWrapper ];
+  nativeBuildInputs = [
+    makeWrapper
+  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ darwin.DarwinTools ];
 
   passthru = flutter.passthru // {
     inherit (flutter) version;