259 Commits

Author SHA1 Message Date
Daco Harkes
aa36db1d29
Native assets support for MacOS and iOS (#130494)
Support for FFI calls with `@Native external` functions through Native assets on MacOS and iOS. This enables bundling native code without any build-system boilerplate code.

For more info see:

* https://github.com/flutter/flutter/issues/129757

### Implementation details for MacOS and iOS.

Dylibs are bundled by (1) making them fat binaries if multiple architectures are targeted, (2) code signing these, and (3) copying them to the frameworks folder. These steps are done manual rather than via CocoaPods. CocoaPods would have done the same steps, but (a) needs the dylibs to be there before the `xcodebuild` invocation (we could trick it, by having a minimal dylib in the place and replace it during the build process, that works), and (b) can't deal with having no dylibs to be bundled (we'd have to bundle a dummy dylib or include some dummy C code in the build file).

The dylibs are build as a new target inside flutter assemble, as that is the moment we know what build-mode and architecture to target.

The mapping from asset id to dylib-path is passed in to every kernel compilation path. The interesting case is hot-restart where the initial kernel file is compiled by the "inner" flutter assemble, while after hot restart the "outer" flutter run compiled kernel file is pushed to the device. Both kernel files need to contain the mapping. The "inner" flutter assemble gets its mapping from the NativeAssets target which builds the native assets. The "outer" flutter run get its mapping from a dry-run invocation. Since this hot restart can be used for multiple target devices (`flutter run -d all`) it contains the mapping for all known targets.

### Example vs template

The PR includes a new template that uses the new native assets in a package and has an app importing that. Separate discussion in: https://github.com/flutter/flutter/issues/131209.

### Tests

This PR adds new tests to cover the various use cases.

* dev/devicelab/bin/tasks/native_assets_ios.dart
  * Runs an example app with native assets in all build modes, doing hot reload and hot restart in debug mode.
* dev/devicelab/bin/tasks/native_assets_ios_simulator.dart
  * Runs an example app with native assets, doing hot reload and hot restart.
* packages/flutter_tools/test/integration.shard/native_assets_test.dart
  * Runs (incl hot reload/hot restart), builds, builds frameworks for iOS, MacOS and flutter-tester.
* packages/flutter_tools/test/general.shard/build_system/targets/native_assets_test.dart
  * Unit tests the new Target in the backend.
* packages/flutter_tools/test/general.shard/ios/native_assets_test.dart
* packages/flutter_tools/test/general.shard/macos/native_assets_test.dart
  * Unit tests the native assets being packaged on a iOS/MacOS build.

It also extends various existing tests:

* dev/devicelab/bin/tasks/module_test_ios.dart
   * Exercises the add2app scenario.
* packages/flutter_tools/test/general.shard/features_test.dart
   * Unit test the new feature flag.
2023-09-10 08:07:13 +00:00
David
80c7dd7245
Fix template app documentation (#131125)
The PR fixes template app documentation
2023-07-27 22:42:16 +00:00
Greg Spencer
2ecf4ae962
Update the counter app to enable Material 3 (#118835)
* Update the counter app to enable Material 3

* Fix tools tests

* Update some wording

* Revert all but useMaterial3

* Update comments
2023-02-02 00:08:11 +00:00
stuartmorgan
f1d157bc29
Add an integration test to plugin template example (#117062)
* Add an integration test to plugin template example

Dart unit tests don't exercise host-side plugin code at all, so the
example tests in the plugin template currently have very little
meaningful coverage. This adds an integration test to the example app
when creating a plugin, so that there's an example of how to actually
test that a complete round-trip plugin call works.

This is done as a separate template that's currently only used by the
plugin template because I don't know what a good example for a
non-plugin case would be that isn't largely just a duplicate of the
widget tests. However, the integration test pre-includes conditionals
around the parts that are plugin-specific so that it can more easily be
expanded to other use cases later (e.g., in
https://github.com/flutter/flutter/issues/68818).

Part of https://github.com/flutter/flutter/issues/82458

* Add integration test to expected dependencies of a plugin app

* Test fixes

* Make an explicit test case
2022-12-15 19:49:14 +00:00
Daco Harkes
c37f255e8b
[tools] Fix plugin_ffi template lint violation (#115356)
Closes: https://github.com/flutter/flutter/issues/115347
2022-11-15 11:50:49 +00:00
Greg Spencer
5259e1bc6d
Add --empty to the flutter create command (#113873) 2022-10-24 21:20:03 +00:00
Kate Lovett
7e12b37111
Deprecate 2018 text theme parameters (#109817) 2022-08-22 20:00:34 +00:00
Loïc Sharma
6026eea9a4
[Windows] Flow version information to the build output (#106145)
Previously developers had to edit their `Runner.rc` file to update their executable's version information. Now, version information will automatically be set from `flutter build`'s arguments or the `pubspec.yaml` file for new projects. 

Addresses https://github.com/flutter/flutter/issues/73652
2022-06-27 10:45:56 -07:00
Jonah Williams
944fcda67f
[flutter_tools] remove UWP tooling (#102174) 2022-04-26 11:19:07 -07:00
Michael Goderbauer
329ceaef66
Use super parameters in templates (#101157) 2022-04-14 13:26:38 -07:00
Ahmed Ashour
2268aebbae
Remove the end period of a URL in project template (#99816) 2022-03-25 16:15:13 -07:00
Michael Goderbauer
8560d914eb
Upgrade to flutter_lints 2.0 (#99881) 2022-03-22 11:00:23 -07:00
Jeff Ward
0aab22807c
First pass at using platform abstraction for plugins (#92672) 2022-03-09 14:10:21 -08:00
Collin Jackson
10fbbafe09
[flutter_tools] Use proper project name in templates (#96373) 2022-02-02 06:50:14 -08:00
Daco Harkes
0e2f51dfd0
FFI plugins (#96225) 2022-01-26 23:44:45 +01:00
Zachary Anderson
65c6e88223
Revert "FFI plugins (#94101)" (#96122)
This reverts commit 5257f0290cb7e11ab4946da6ee15104ceaa815f9.
2022-01-04 08:09:12 -08:00
Daco Harkes
5257f0290c
FFI plugins (#94101)
* Building shared C source code as part of the native build for platforms Android, iOS, Linux desktop, MacOS desktop, and Windows desktop.
* Sample code doing a synchronous FFI call.
* Sample code doing a long running synchronous FFI call on a helper isolate.
* Use of `package:ffigen` to generate the bindings.
2022-01-04 10:14:27 +01:00
Ahmed Ashour
6bfc5824d3
Add .gitignore (#85017) 2021-07-09 10:41:03 -07:00
Filip Hracek
76d5e62f42
Add a more complete app template for Flutter (skeleton) (#83530) 2021-06-28 15:26:04 -07:00
Jenn Magder
0de6bd41ba
Migrate iOS app deployment target from 8.0 to 9.0 (#85174) 2021-06-24 10:21:05 -07:00
Aneesh Rao
b4148eb599
Add maskable icons to improve lighthouse score (#83182) 2021-06-10 13:49:06 -07:00
Yegor
e6cc3cd84d
use old Edge-compatible JavaScript in index.html (#83732) 2021-06-01 20:45:58 -07:00
Balvinder Singh Gambhir
4a33813b35
[flutter_tools] added base-href command in web (#80519) 2021-05-19 12:39:02 -07:00
James Clarke
a34713fb96
Update Windows flutter create template (#82598) 2021-05-14 19:10:07 -07:00
Michael Goderbauer
7837d3eae1
Upgrade to stable flutter_lints 1.0.0 (#82365) 2021-05-12 17:14:03 -07:00
Michael Goderbauer
532a79c857
Integrate package:flutter_lints into templates (#81417) 2021-05-10 16:19:04 -07:00
stuartmorgan
27d1e5892f
Minor cleanup to Linux application template format (#81561) 2021-05-07 09:49:03 -07:00
Matej Knopp
858123dced
Remove RunLoop from Windows template (#79969) 2021-04-27 14:50:42 -07:00
Jonah Williams
d9638d25d7
migrate from jcenter to mavencentral (#80908) 2021-04-21 21:41:07 -07:00
Pierre-Louis
ee875af067
Add Android keystore files to project gitignore (#80663) 2021-04-19 20:34:03 -07:00
Emmanuel Garcia
42f21fd780
Standardize how Java8 is set in gradle files (#80600) 2021-04-19 20:19:03 -07:00
Michael Thomsen
2cdd51900c
Enable null safety by default in templates (#78619) 2021-03-30 10:16:05 +02:00
Marcus Tomlinson
01c772cc8d
Revert "Add libblkid / liblzma / libgcrypt as an explicit dependancy on Linux" (#78415)
* Revert "Add libgcrypt as an explicit dependancy on Linux"

This reverts commit bf65b3d03ccdc1dd21c09f34d600d72b0636a784.

* libblkid & liblzma not explicitly required either
2021-03-18 09:14:44 -07:00
Jonah Williams
2584afd7ec
[flutter_tools] scaffolding for Windows UWP template (#78067) 2021-03-16 13:43:04 -07:00
Ahmed Saleh
740504d3e6
Refactor: use one subprojects property (#77942) 2021-03-12 16:28:03 -08:00
Marcus Tomlinson
82675474ea
Add libgcrypt as an explicit dependancy on Linux (#77926) 2021-03-12 07:50:03 -08:00
Andre
3dca866f06
Fix typo in Windows template (#77405) 2021-03-05 14:09:04 -08:00
John Ryan
c5d1600843
Fix typo in web template (#77011) 2021-03-04 15:24:03 -08:00
Jenn Magder
d099ae60f0
Add ephemeral iOS directory to put future generated files (#76830) 2021-02-25 18:16:03 -08:00
Hidenori Matsubayashi
4cc0ab2d19
[flutter_tools] Add ARM64 Linux host and cross-building option support (#61221) 2021-02-12 14:25:30 -08:00
Yegor
e7953b3be4
[web] new service worker loading mechanism (#75535) 2021-02-11 09:16:21 -08:00
Robert Ancell
09adc359b8
Make Linux apps non-unique by default. (#74959)
This stops them attempting to own a D-Bus name, which may not be possible if the
app is sandboxed (e.g. in a Snap). It's also probably what most developers would
expect is the correct behaviour by default.
2021-02-02 11:34:40 +13:00
Michael Goderbauer
63267e9016
Make flutter create --smaple null-safe (#74844) 2021-01-27 14:44:03 -08:00
Niklas Schulze
afe790775b
[flutter_tools] copy flutter_texture_registrar.h header on Windows (#61098) 2021-01-15 16:20:57 -05:00
Dan Field
6a32859eb9
Revert integration_test in flutter create template (#74068)
* Revert "Add integration_test template to create template (#70240)"

This reverts commit d047d108ebb08f1a26f19e0d8966d99a1dd49b73.

* test
2021-01-15 13:13:46 -08:00
Jenn Magder
45d71e25ab
Build iOS apps using Swift Packages (#73508) 2021-01-07 15:59:09 -08:00
Jenn Magder
74d58105d1
Revert "Build iOS apps using Swift Packages (#72761)" (#73437)
This reverts commit 28db5a0faef116cdad40efcb996d1118f32e828a.
2021-01-06 15:04:16 -08:00
Jenn Magder
28db5a0fae
Build iOS apps using Swift Packages (#72761) 2021-01-06 13:54:53 -08:00
J-P Nurmi
f2536da16f
[flutter_tools] Let CMake handle escaping (#70026) 2020-12-21 16:04:04 -08:00
Jenn Magder
d6857bc026
Build/copy macOS frameworks to built products instead of ephemeral directory (#72378) 2020-12-17 14:47:05 -08:00