diff --git a/cookiecutter.json b/cookiecutter.json
index c8698eb..8fc8547 100644
--- a/cookiecutter.json
+++ b/cookiecutter.json
@@ -5,14 +5,20 @@
"project_name_slug": "",
"project_description": "",
"product_name": "{{ cookiecutter.project_name }}",
- "org_name": "com.flet",
+ "org_name": "{{ cookiecutter.org_name if 'org_name' in cookiecutter else cookiecutter.bundle_id.rsplit('.', 1)[0] if 'bundle_id' in cookiecutter else 'com.flet' }}",
"company_name": "Your Company",
"copyright": "Copyright (c) 2023 Your Company",
"flutter": null,
"sep": "/",
- "kotlin_dir": "{{ cookiecutter.org_name.replace('.', cookiecutter.sep) }}{{ cookiecutter.sep }}{{ cookiecutter.project_name }}{{ cookiecutter.sep }}",
"hide_loading_animation": true,
- "team_id": "",
+ "bundle_id": "{{ cookiecutter.bundle_id if 'bundle_id' in cookiecutter else cookiecutter.org_name + '.' + cookiecutter.project_name }}",
+ "ios_provisioning_profile": "",
+ "ios_export_method": "",
+ "ios_signing_certificate": "",
+ "ios_export_options": {},
+ "ios_team_id": "",
+ "package_name": "{{ cookiecutter.bundle_id.rsplit('.', 1)[-1].replace('-', '_') if 'bundle_id' in cookiecutter else cookiecutter.project_name }}",
+ "kotlin_dir": "{{ cookiecutter.org_name.replace('.', cookiecutter.sep) }}{{ cookiecutter.sep }}{{ cookiecutter.package_name }}{{ cookiecutter.sep }}",
"base_url": "/",
"route_url_strategy": "path",
"web_renderer": "canvaskit",
diff --git a/{{cookiecutter.out_dir}}/.vars b/{{cookiecutter.out_dir}}/.vars
new file mode 100644
index 0000000..f281c74
--- /dev/null
+++ b/{{cookiecutter.out_dir}}/.vars
@@ -0,0 +1,3 @@
+{% for key, value in cookiecutter.items() -%}
+{{ key }}: {{ value }}
+{% endfor %}
\ No newline at end of file
diff --git a/{{cookiecutter.out_dir}}/android/app/build.gradle b/{{cookiecutter.out_dir}}/android/app/build.gradle
index 9203e8e..7ac30b3 100644
--- a/{{cookiecutter.out_dir}}/android/app/build.gradle
+++ b/{{cookiecutter.out_dir}}/android/app/build.gradle
@@ -50,7 +50,7 @@ android {
}
defaultConfig {
- applicationId "{{ cookiecutter.org_name }}.{{ cookiecutter.project_name }}"
+ applicationId "{{ cookiecutter.bundle_id }}"
minSdkVersion flutter.minSdkVersion
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()
diff --git a/{{cookiecutter.out_dir}}/android/app/src/main/kotlin/{{ cookiecutter.kotlin_dir }}/MainActivity.kt b/{{cookiecutter.out_dir}}/android/app/src/main/kotlin/{{ cookiecutter.kotlin_dir }}/MainActivity.kt
index 475f684..aa1cf92 100644
--- a/{{cookiecutter.out_dir}}/android/app/src/main/kotlin/{{ cookiecutter.kotlin_dir }}/MainActivity.kt
+++ b/{{cookiecutter.out_dir}}/android/app/src/main/kotlin/{{ cookiecutter.kotlin_dir }}/MainActivity.kt
@@ -1,4 +1,4 @@
-package {{ cookiecutter.org_name }}.{{ cookiecutter.project_name }}
+package {{ cookiecutter.org_name }}.{{ cookiecutter.package_name }}
import io.flutter.embedding.android.FlutterActivity
diff --git a/{{cookiecutter.out_dir}}/ios/Runner.xcodeproj/project.pbxproj b/{{cookiecutter.out_dir}}/ios/Runner.xcodeproj/project.pbxproj
index f960c3f..bf800f6 100644
--- a/{{cookiecutter.out_dir}}/ios/Runner.xcodeproj/project.pbxproj
+++ b/{{cookiecutter.out_dir}}/ios/Runner.xcodeproj/project.pbxproj
@@ -360,9 +360,16 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
-{% if cookiecutter.team_id %}
- DEVELOPMENT_TEAM = {{ cookiecutter.team_id }};
+{% if cookiecutter.ios_team_id %}
+ DEVELOPMENT_TEAM = "{{ cookiecutter.ios_team_id }}";
+{% endif %}
+{% if cookiecutter.ios_signing_certificate %}
+ CODE_SIGN_IDENTITY = "{{ cookiecutter.ios_signing_certificate }}";
+{% endif %}
+{% if cookiecutter.ios_provisioning_profile %}
+ PROVISIONING_PROFILE_SPECIFIER = "{{ cookiecutter.ios_provisioning_profile }}";
{% endif %}
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
@@ -370,7 +377,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- PRODUCT_BUNDLE_IDENTIFIER = {{ cookiecutter.org_name }}.{{ cookiecutter.project_name_slug }};
+ PRODUCT_BUNDLE_IDENTIFIER = {{ cookiecutter.bundle_id }};
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
@@ -387,7 +394,7 @@
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = {{ cookiecutter.org_name }}.{{ cookiecutter.project_name_slug }}.RunnerTests;
+ PRODUCT_BUNDLE_IDENTIFIER = {{ cookiecutter.bundle_id }}.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -405,7 +412,7 @@
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = {{ cookiecutter.org_name }}.{{ cookiecutter.project_name_slug }}.RunnerTests;
+ PRODUCT_BUNDLE_IDENTIFIER = {{ cookiecutter.bundle_id }}.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
@@ -421,7 +428,7 @@
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = {{ cookiecutter.org_name }}.{{ cookiecutter.project_name_slug }}.RunnerTests;
+ PRODUCT_BUNDLE_IDENTIFIER = {{ cookiecutter.bundle_id }}.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
@@ -541,9 +548,16 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
-{% if cookiecutter.team_id %}
- DEVELOPMENT_TEAM = {{ cookiecutter.team_id }};
+{% if cookiecutter.ios_team_id %}
+ DEVELOPMENT_TEAM = "{{ cookiecutter.ios_team_id }}";
+{% endif %}
+{% if cookiecutter.ios_signing_certificate %}
+ CODE_SIGN_IDENTITY = "{{ cookiecutter.ios_signing_certificate }}";
+{% endif %}
+{% if cookiecutter.ios_provisioning_profile %}
+ PROVISIONING_PROFILE_SPECIFIER = "{{ cookiecutter.ios_provisioning_profile }}";
{% endif %}
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
@@ -551,7 +565,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- PRODUCT_BUNDLE_IDENTIFIER = {{ cookiecutter.org_name }}.{{ cookiecutter.project_name_slug }};
+ PRODUCT_BUNDLE_IDENTIFIER = {{ cookiecutter.bundle_id }};
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -566,9 +580,16 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
-{% if cookiecutter.team_id %}
- DEVELOPMENT_TEAM = {{ cookiecutter.team_id }};
+{% if cookiecutter.ios_team_id %}
+ DEVELOPMENT_TEAM = "{{ cookiecutter.ios_team_id }}";
+{% endif %}
+{% if cookiecutter.ios_signing_certificate %}
+ CODE_SIGN_IDENTITY = "{{ cookiecutter.ios_signing_certificate }}";
+{% endif %}
+{% if cookiecutter.ios_provisioning_profile %}
+ PROVISIONING_PROFILE_SPECIFIER = "{{ cookiecutter.ios_provisioning_profile }}";
{% endif %}
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
@@ -576,7 +597,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- PRODUCT_BUNDLE_IDENTIFIER = {{ cookiecutter.org_name }}.{{ cookiecutter.project_name_slug }};
+ PRODUCT_BUNDLE_IDENTIFIER = {{ cookiecutter.bundle_id }};
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
diff --git a/{{cookiecutter.out_dir}}/ios/Runner/Info.plist b/{{cookiecutter.out_dir}}/ios/Runner/Info.plist
index f223752..7e7c62f 100644
--- a/{{cookiecutter.out_dir}}/ios/Runner/Info.plist
+++ b/{{cookiecutter.out_dir}}/ios/Runner/Info.plist
@@ -67,14 +67,35 @@
-
- {{ k }}
-
-
-
-
-
- {{ v }}
-
+
+ {% macro render_dict(d) -%}
+ {% for key, value in d.items() -%}
+ {{ key }}
+ {% if value is string -%}
+ {{ value }}
+ {% elif value is boolean -%}
+ <{{ "true" if value else "false" }}/>
+ {% elif value is mapping -%}
+
+ {{ render_dict(value) }}
+
+ {% elif value is sequence -%} {# Support for lists/arrays #}
+
+ {% for item in value -%}
+ {% if item is string -%}
+ {{ item }}
+ {% elif item is boolean -%}
+ <{{ "true" if item else "false" }}/>
+ {% elif item is mapping -%}
+
+ {{ render_dict(item) }}
+
+ {% endif -%}
+ {% endfor -%}
+
+ {% endif -%}
+ {% endfor -%}
+ {% endmacro -%}
+ {{ render_dict(cookiecutter.options.info_plist) }}
\ No newline at end of file
diff --git a/{{cookiecutter.out_dir}}/ios/exportOptions.plist b/{{cookiecutter.out_dir}}/ios/exportOptions.plist
new file mode 100644
index 0000000..9ae38f0
--- /dev/null
+++ b/{{cookiecutter.out_dir}}/ios/exportOptions.plist
@@ -0,0 +1,53 @@
+
+
+
+
+ method
+ {{ cookiecutter.ios_export_method }}
+ provisioningProfiles
+
+ {{ cookiecutter.bundle_id }}
+ {{ cookiecutter.ios_provisioning_profile }}
+
+
+ {% if cookiecutter.ios_team_id %}
+ teamID
+ {{ cookiecutter.ios_team_id }}
+ {% endif %}
+
+ {% if cookiecutter.ios_signing_certificate %}
+ signingCertificate
+ {{ cookiecutter.ios_signing_certificate }}
+ {% endif %}
+
+ {% macro render_dict(d) -%}
+ {% for key, value in d.items() -%}
+ {{ key }}
+ {% if value is string -%}
+ {{ value }}
+ {% elif value is boolean -%}
+ <{{ "true" if value else "false" }}/>
+ {% elif value is mapping -%}
+
+ {{ render_dict(value) }}
+
+ {% elif value is sequence -%} {# Support for lists/arrays #}
+
+ {% for item in value -%}
+ {% if item is string -%}
+ {{ item }}
+ {% elif item is boolean -%}
+ <{{ "true" if item else "false" }}/>
+ {% elif item is mapping -%}
+
+ {{ render_dict(item) }}
+
+ {% endif -%}
+ {% endfor -%}
+
+ {% endif -%}
+ {% endfor -%}
+ {% endmacro -%}
+ {{ render_dict(cookiecutter.ios_export_options) }}
+
+
\ No newline at end of file
diff --git a/{{cookiecutter.out_dir}}/linux/CMakeLists.txt b/{{cookiecutter.out_dir}}/linux/CMakeLists.txt
index 1bc35a9..7fd9a43 100644
--- a/{{cookiecutter.out_dir}}/linux/CMakeLists.txt
+++ b/{{cookiecutter.out_dir}}/linux/CMakeLists.txt
@@ -7,7 +7,7 @@ project(runner LANGUAGES CXX)
set(BINARY_NAME "{{ cookiecutter.project_name }}")
# The unique GTK application identifier for this application. See:
# https://wiki.gnome.org/HowDoI/ChooseApplicationID
-set(APPLICATION_ID "{{ cookiecutter.org_name }}.{{ cookiecutter.project_name }}")
+set(APPLICATION_ID "{{ cookiecutter.bundle_id }}")
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
# versions of CMake.
diff --git a/{{cookiecutter.out_dir}}/macos/Runner.xcodeproj/project.pbxproj b/{{cookiecutter.out_dir}}/macos/Runner.xcodeproj/project.pbxproj
index 45c4d7f..a044226 100644
--- a/{{cookiecutter.out_dir}}/macos/Runner.xcodeproj/project.pbxproj
+++ b/{{cookiecutter.out_dir}}/macos/Runner.xcodeproj/project.pbxproj
@@ -384,7 +384,7 @@
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = {{ cookiecutter.org_name }}.{{ cookiecutter.project_name_slug }}.RunnerTests;
+ PRODUCT_BUNDLE_IDENTIFIER = {{ cookiecutter.bundle_id }}.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/{{ cookiecutter.project_name }}.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/{{ cookiecutter.project_name }}";
@@ -398,7 +398,7 @@
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = {{ cookiecutter.org_name }}.{{ cookiecutter.project_name_slug }}.RunnerTests;
+ PRODUCT_BUNDLE_IDENTIFIER = {{ cookiecutter.bundle_id }}.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/{{ cookiecutter.project_name }}.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/{{ cookiecutter.project_name }}";
@@ -412,7 +412,7 @@
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = {{ cookiecutter.org_name }}.{{ cookiecutter.project_name_slug }}.RunnerTests;
+ PRODUCT_BUNDLE_IDENTIFIER = {{ cookiecutter.bundle_id }}.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/{{ cookiecutter.project_name }}.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/{{ cookiecutter.project_name }}";
diff --git a/{{cookiecutter.out_dir}}/macos/Runner/Configs/AppInfo.xcconfig b/{{cookiecutter.out_dir}}/macos/Runner/Configs/AppInfo.xcconfig
index e90e552..673a8f3 100644
--- a/{{cookiecutter.out_dir}}/macos/Runner/Configs/AppInfo.xcconfig
+++ b/{{cookiecutter.out_dir}}/macos/Runner/Configs/AppInfo.xcconfig
@@ -8,7 +8,7 @@
PRODUCT_NAME = {{ cookiecutter.product_name }}
// The application's bundle identifier
-PRODUCT_BUNDLE_IDENTIFIER = {{ cookiecutter.org_name }}.{{ cookiecutter.project_name_slug }}
+PRODUCT_BUNDLE_IDENTIFIER = {{ cookiecutter.bundle_id }}
// The copyright displayed in application information
PRODUCT_COPYRIGHT = {{ cookiecutter.copyright }}. All rights reserved.
diff --git a/{{cookiecutter.out_dir}}/macos/Runner/Info.plist b/{{cookiecutter.out_dir}}/macos/Runner/Info.plist
index 7e273e2..a87e6be 100644
--- a/{{cookiecutter.out_dir}}/macos/Runner/Info.plist
+++ b/{{cookiecutter.out_dir}}/macos/Runner/Info.plist
@@ -28,14 +28,35 @@
MainMenu
NSPrincipalClass
NSApplication
-
- {{ k }}
-
-
-
-
-
- {{ v }}
-
+
+ {% macro render_dict(d) -%}
+ {% for key, value in d.items() -%}
+ {{ key }}
+ {% if value is string -%}
+ {{ value }}
+ {% elif value is boolean -%}
+ <{{ "true" if value else "false" }}/>
+ {% elif value is mapping -%}
+
+ {{ render_dict(value) }}
+
+ {% elif value is sequence -%} {# Support for lists/arrays #}
+
+ {% for item in value -%}
+ {% if item is string -%}
+ {{ item }}
+ {% elif item is boolean -%}
+ <{{ "true" if item else "false" }}/>
+ {% elif item is mapping -%}
+
+ {{ render_dict(item) }}
+
+ {% endif -%}
+ {% endfor -%}
+
+ {% endif -%}
+ {% endfor -%}
+ {% endmacro -%}
+ {{ render_dict(cookiecutter.options.info_plist) }}
\ No newline at end of file
diff --git a/{{cookiecutter.out_dir}}/pubspec.yaml b/{{cookiecutter.out_dir}}/pubspec.yaml
index fd81986..1b24125 100644
--- a/{{cookiecutter.out_dir}}/pubspec.yaml
+++ b/{{cookiecutter.out_dir}}/pubspec.yaml
@@ -28,6 +28,12 @@ dependency_overrides:
# ref: main
# url: https://github.com/flet-dev/flet.git
+ serious_python:
+ git:
+ url: https://github.com/flet-dev/serious-python.git
+ ref: main
+ path: src/serious_python
+
wakelock_plus: ^1.2.10
web: ^1.0.0
window_manager: ^0.4.3
diff --git a/{{cookiecutter.out_dir}}/web/python-worker.js b/{{cookiecutter.out_dir}}/web/python-worker.js
index 463c036..81a7ba0 100644
--- a/{{cookiecutter.out_dir}}/web/python-worker.js
+++ b/{{cookiecutter.out_dir}}/web/python-worker.js
@@ -1,4 +1,4 @@
-importScripts("https://cdn.jsdelivr.net/pyodide/v0.26.2/full/pyodide.js");
+importScripts("https://cdn.jsdelivr.net/pyodide/v0.27.2/full/pyodide.js");
self.pythonModuleName = null;
self.initialized = false;