Skip to content

Commit 2a95061

Browse files
Require C++20 for the Windows plugin and Logcat crash fix (flet-dev#190)
* Add zipDirectoryPosix to create POSIX-compliant archives Introduces the zipDirectoryPosix method to ensure archive entries use POSIX-style paths. Updates archive creation to use this method for better cross-platform compatibility. * Await async calls in package file encoding Changed calls to encoder.addFile and encoder.close to be awaited, ensuring proper handling of asynchronous file operations during package creation. * Pin flet version in CI and update dependencies CI workflow now pins the flet dependency to version 0.28.3 for all platforms. Updated .gitignore for macOS build artifacts, enabled GPU validation in Xcode scheme, and added secure restorable state support in AppDelegate. Dependency versions were updated in pubspec.lock and Podfile.lock, including upgrades to serious_python packages and other transitive dependencies. * Enforce C++20 standard for plugin build Added target_compile_features to require C++20 for the plugin. This ensures the code is compiled with C++20 features and compatibility. * Normalize WINDIR path for bundled DLLs in CMake Replaces backslashes with forward slashes in the WINDIR environment variable and updates DLL paths to use the normalized variable. This ensures consistent path formatting for bundled system libraries. * Set argtypes and restype for __android_log_write Configured ctypes argument and return types for liblog.__android_log_write to ensure correct interaction with the native Android logging library. * Bump version to 0.9.9 and update changelogs Release 0.9.9 for all serious_python packages. Adds zipDirectoryPosix for POSIX-compliant app archives on Windows, enforces C++20 standard for plugin build, normalizes WINDIR path for bundled DLLs in CMake, and fixes Logcat logging crash on some Android devices. Updates pubspecs and build files to reflect the new version.
1 parent 68b5e84 commit 2a95061

File tree

26 files changed

+191
-88
lines changed

26 files changed

+191
-88
lines changed

.github/workflows/ci.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ jobs:
3232
- name: Run tests
3333
working-directory: "src/serious_python/example/flet_example"
3434
run: |
35-
dart run serious_python:main package app/src --platform Darwin --requirements flet
35+
dart run serious_python:main package app/src --platform Darwin --requirements flet==0.28.3
3636
flutter test integration_test --device-id macos
3737
3838
ios:
@@ -62,7 +62,7 @@ jobs:
6262
- name: Run tests
6363
working-directory: "src/serious_python/example/flet_example"
6464
run: |
65-
dart run serious_python:main package app/src --platform iOS --requirements flet
65+
dart run serious_python:main package app/src --platform iOS --requirements flet==0.28.3
6666
flutter test integration_test --device-id ${{ steps.simulator.outputs.udid }}
6767
6868
android:
@@ -115,7 +115,7 @@ jobs:
115115
pre-emulator-launch-script: |
116116
sdkmanager --list_installed
117117
script: |
118-
cd src/serious_python/example/flet_example && dart run serious_python:main package app/src --platform Android --requirements flet
118+
cd src/serious_python/example/flet_example && dart run serious_python:main package app/src --platform Android --requirements flet==0.28.3
119119
cd src/serious_python/example/flet_example && flutter test integration_test --device-id emulator-${{ env.EMULATOR_PORT }}
120120
121121
windows:
@@ -134,7 +134,7 @@ jobs:
134134
- name: Run tests
135135
working-directory: "src/serious_python/example/flet_example"
136136
run: |
137-
dart run serious_python:main package app/src --platform Windows --requirements flet
137+
dart run serious_python:main package app/src --platform Windows --requirements flet==0.28.3
138138
flutter test integration_test -d windows
139139
140140
linux:
@@ -205,7 +205,7 @@ jobs:
205205
working-directory: src/serious_python/example/flet_example
206206
run: |
207207
flutter pub get
208-
dart run serious_python:main package app/src --platform Linux --requirements flet
208+
dart run serious_python:main package app/src --platform Linux --requirements flet==0.28.3
209209
xvfb-run flutter test integration_test -d linux
210210
211211
publish:

src/serious_python/CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
## 0.9.9
2+
3+
* Add zipDirectoryPosix to create POSIX-compliant app archives on Windows.
4+
* Enforce C++20 standard for `serious_python` plugin build.
5+
* Fix: Normalize `WINDIR` path for bundled DLLs in CMake.
6+
* Fix Logcat logging crash on some Android devices.
7+
18
## 0.9.8
29

310
* Fix logging on Android.

src/serious_python/bin/package_command.dart

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -432,8 +432,7 @@ class PackageCommand extends Command {
432432
// create archive
433433
stdout.writeln(
434434
"Creating app archive at ${dest.path} from a temp directory");
435-
final encoder = ZipFileEncoder();
436-
await encoder.zipDirectory(tempDir, filename: dest.path);
435+
await zipDirectoryPosix(tempDir, dest);
437436

438437
// create hash file
439438
stdout.writeln("Writing app archive hash to ${dest.path}.hash");
@@ -517,6 +516,21 @@ class PackageCommand extends Command {
517516
return proc.exitCode;
518517
}
519518

519+
Future<void> zipDirectoryPosix(Directory source, File dest) async {
520+
final encoder = ZipFileEncoder();
521+
encoder.create(dest.path);
522+
await for (final entity
523+
in source.list(recursive: true, followLinks: false)) {
524+
if (entity is! File) {
525+
continue;
526+
}
527+
final relativePath = path.relative(entity.path, from: source.path);
528+
final posixPath = path.posix.joinAll(path.split(relativePath));
529+
await encoder.addFile(entity, posixPath);
530+
}
531+
await encoder.close();
532+
}
533+
520534
Future<int> runPython(List<String> args,
521535
{Map<String, String>? environment}) async {
522536
if (_pythonDir == null) {

src/serious_python/example/flask_example/pubspec.lock

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ packages:
55
dependency: transitive
66
description:
77
name: archive
8-
sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d
8+
sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd"
99
url: "https://pub.dev"
1010
source: hosted
11-
version: "3.6.1"
11+
version: "4.0.7"
1212
args:
1313
dependency: transitive
1414
description:
@@ -21,10 +21,10 @@ packages:
2121
dependency: transitive
2222
description:
2323
name: async
24-
sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
24+
sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
2525
url: "https://pub.dev"
2626
source: hosted
27-
version: "2.13.0"
27+
version: "2.12.0"
2828
boolean_selector:
2929
dependency: transitive
3030
description:
@@ -77,10 +77,10 @@ packages:
7777
dependency: transitive
7878
description:
7979
name: fake_async
80-
sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
80+
sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
8181
url: "https://pub.dev"
8282
source: hosted
83-
version: "1.3.3"
83+
version: "1.3.2"
8484
ffi:
8585
dependency: transitive
8686
description:
@@ -143,10 +143,10 @@ packages:
143143
dependency: transitive
144144
description:
145145
name: leak_tracker
146-
sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
146+
sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
147147
url: "https://pub.dev"
148148
source: hosted
149-
version: "10.0.9"
149+
version: "10.0.8"
150150
leak_tracker_flutter_testing:
151151
dependency: transitive
152152
description:
@@ -275,48 +275,56 @@ packages:
275275
url: "https://pub.dev"
276276
source: hosted
277277
version: "2.1.8"
278+
posix:
279+
dependency: transitive
280+
description:
281+
name: posix
282+
sha256: "6323a5b0fa688b6a010df4905a56b00181479e6d10534cecfecede2aa55add61"
283+
url: "https://pub.dev"
284+
source: hosted
285+
version: "6.0.3"
278286
serious_python:
279287
dependency: "direct main"
280288
description:
281289
path: "../.."
282290
relative: true
283291
source: path
284-
version: "0.9.3"
292+
version: "0.9.9"
285293
serious_python_android:
286294
dependency: transitive
287295
description:
288296
path: "../../../serious_python_android"
289297
relative: true
290298
source: path
291-
version: "0.9.3"
299+
version: "0.9.9"
292300
serious_python_darwin:
293301
dependency: transitive
294302
description:
295303
path: "../../../serious_python_darwin"
296304
relative: true
297305
source: path
298-
version: "0.9.3"
306+
version: "0.9.9"
299307
serious_python_linux:
300308
dependency: transitive
301309
description:
302310
path: "../../../serious_python_linux"
303311
relative: true
304312
source: path
305-
version: "0.9.3"
313+
version: "0.9.9"
306314
serious_python_platform_interface:
307315
dependency: transitive
308316
description:
309317
path: "../../../serious_python_platform_interface"
310318
relative: true
311319
source: path
312-
version: "0.9.3"
320+
version: "0.9.9"
313321
serious_python_windows:
314322
dependency: transitive
315323
description:
316324
path: "../../../serious_python_windows"
317325
relative: true
318326
source: path
319-
version: "0.9.3"
327+
version: "0.9.9"
320328
shelf:
321329
dependency: transitive
322330
description:
@@ -406,10 +414,10 @@ packages:
406414
dependency: transitive
407415
description:
408416
name: vm_service
409-
sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
417+
sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
410418
url: "https://pub.dev"
411419
source: hosted
412-
version: "15.0.0"
420+
version: "14.3.1"
413421
web:
414422
dependency: transitive
415423
description:

src/serious_python/example/flet_example/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@
55
*.swp
66
.DS_Store
77
.atom/
8+
.build/
89
.buildlog/
910
.history
1011
.svn/
12+
.swiftpm/
1113
migrate_working_dir/
1214

1315
# IntelliJ related
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
43f8a7b00e44a09647dda36299259976950ba7259c5060de20677c449690fc73
1+
2ce2f5ff38bcf342e42fb77b2bc8e4262d90d73d5bc3284055242c6313cbe5c0

src/serious_python/example/flet_example/macos/Podfile.lock

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
PODS:
2+
- device_info_plus (0.0.1):
3+
- FlutterMacOS
4+
- file_picker (0.0.1):
5+
- FlutterMacOS
26
- FlutterMacOS (1.0.0)
37
- package_info_plus (0.0.1):
48
- FlutterMacOS
59
- path_provider_foundation (0.0.1):
610
- Flutter
711
- FlutterMacOS
8-
- screen_retriever (0.0.1):
12+
- screen_retriever_macos (0.0.1):
913
- FlutterMacOS
10-
- serious_python_darwin (0.8.0):
14+
- serious_python_darwin (0.9.8):
1115
- Flutter
1216
- FlutterMacOS
1317
- shared_preferences_foundation (0.0.1):
@@ -21,25 +25,31 @@ PODS:
2125
- FlutterMacOS
2226

2327
DEPENDENCIES:
28+
- device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`)
29+
- file_picker (from `Flutter/ephemeral/.symlinks/plugins/file_picker/macos`)
2430
- FlutterMacOS (from `Flutter/ephemeral`)
2531
- package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`)
2632
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
27-
- screen_retriever (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos`)
33+
- screen_retriever_macos (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever_macos/macos`)
2834
- serious_python_darwin (from `Flutter/ephemeral/.symlinks/plugins/serious_python_darwin/darwin`)
2935
- shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
3036
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
3137
- window_manager (from `Flutter/ephemeral/.symlinks/plugins/window_manager/macos`)
3238
- window_to_front (from `Flutter/ephemeral/.symlinks/plugins/window_to_front/macos`)
3339

3440
EXTERNAL SOURCES:
41+
device_info_plus:
42+
:path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos
43+
file_picker:
44+
:path: Flutter/ephemeral/.symlinks/plugins/file_picker/macos
3545
FlutterMacOS:
3646
:path: Flutter/ephemeral
3747
package_info_plus:
3848
:path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos
3949
path_provider_foundation:
4050
:path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
41-
screen_retriever:
42-
:path: Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos
51+
screen_retriever_macos:
52+
:path: Flutter/ephemeral/.symlinks/plugins/screen_retriever_macos/macos
4353
serious_python_darwin:
4454
:path: Flutter/ephemeral/.symlinks/plugins/serious_python_darwin/darwin
4555
shared_preferences_foundation:
@@ -52,15 +62,17 @@ EXTERNAL SOURCES:
5262
:path: Flutter/ephemeral/.symlinks/plugins/window_to_front/macos
5363

5464
SPEC CHECKSUMS:
65+
device_info_plus: 4fb280989f669696856f8b129e4a5e3cd6c48f76
66+
file_picker: 7584aae6fa07a041af2b36a2655122d42f578c1a
5567
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
56-
package_info_plus: fa739dd842b393193c5ca93c26798dff6e3d0e0c
57-
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
58-
screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38
59-
serious_python_darwin: 351e50099cb9e34f344f75af29b1d36d3c0922f2
60-
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
61-
url_launcher_macos: c82c93949963e55b228a30115bd219499a6fe404
62-
window_manager: 3a1844359a6295ab1e47659b1a777e36773cd6e8
63-
window_to_front: 4cdc24ddd8461ad1a55fa06286d6a79d8b29e8d8
68+
package_info_plus: a8a591e70e87ce97ce5d21b2594f69cea9e0312f
69+
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
70+
screen_retriever_macos: 452e51764a9e1cdb74b3c541238795849f21557f
71+
serious_python_darwin: d8fa26f4b226e433b51fdb0259c60b3ec9c48527
72+
shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
73+
url_launcher_macos: 0fba8ddabfc33ce0a9afe7c5fef5aab3d8d2d673
74+
window_manager: 1d01fa7ac65a6e6f83b965471b1a7fdd3f06166c
75+
window_to_front: 9e76fd432e36700a197dac86a0011e49c89abe0a
6476

6577
PODFILE CHECKSUM: 9ebaf0ce3d369aaa26a9ea0e159195ed94724cf3
6678

src/serious_python/example/flet_example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
ignoresPersistentStateOnLaunch = "NO"
6060
debugDocumentVersioning = "YES"
6161
debugServiceExtension = "internal"
62+
enableGPUValidationMode = "1"
6263
allowLocationSimulation = "YES">
6364
<BuildableProductRunnable
6465
runnableDebuggingMode = "0">

src/serious_python/example/flet_example/macos/Runner/AppDelegate.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate {
66
override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
77
return true
88
}
9+
10+
override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool {
11+
return true
12+
}
913
}

0 commit comments

Comments
 (0)