for 0.27.0 iOS packaging improved (#39)
* Override serious_python * Fix yaml * Manual signing and provisioning profile * Introduce bundle_id and project_name * Fix dict checks * exportOptions.plist * Output all vars * Move .vars * Fix expor options template * Format template * Pyodide 0.27.2 * Add teamid * Added "ios_signing_certificate" var * serious_python:main * Fake run script to sign iOS bundle frameworks * Updated sign script * Explicitly sign .py files * Remove custom code signing * Use serious_python:resources branch * return to main * resources branch * Add build_arch for Android * Rename build_arch to target_arch * Fix target_arch def value * Hide target_arch inside options * serious_python:main * .plist to support arrays * Add closing if * fix template * Another template fix * Remove comments * macOS plist to support arrays
This commit is contained in:
parent
c99bd8f120
commit
2043b4a1cb
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
{% for key, value in cookiecutter.items() -%}
|
||||
{{ key }}: {{ value }}
|
||||
{% endfor %}
|
||||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package {{ cookiecutter.org_name }}.{{ cookiecutter.project_name }}
|
||||
package {{ cookiecutter.org_name }}.{{ cookiecutter.package_name }}
|
||||
|
||||
import io.flutter.embedding.android.FlutterActivity
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -67,14 +67,35 @@
|
|||
</dict>
|
||||
</array>
|
||||
<!-- flet: end of deep linking {% endif %} -->
|
||||
<!-- flet: prop {% for k, v in cookiecutter.options.info_plist.items() %} -->
|
||||
<key>{{ k }}</key>
|
||||
<!-- flet: True {% if v == True %} -->
|
||||
<true />
|
||||
<!-- flet: False {% elif v == False %} -->
|
||||
<false />
|
||||
<!-- flet: string value {% else %} -->
|
||||
<string>{{ v }}</string>
|
||||
<!-- flet: end of prop {% endif %} {% endfor %} -->
|
||||
|
||||
{% macro render_dict(d) -%}
|
||||
{% for key, value in d.items() -%}
|
||||
<key>{{ key }}</key>
|
||||
{% if value is string -%}
|
||||
<string>{{ value }}</string>
|
||||
{% elif value is boolean -%}
|
||||
<{{ "true" if value else "false" }}/>
|
||||
{% elif value is mapping -%}
|
||||
<dict>
|
||||
{{ render_dict(value) }}
|
||||
</dict>
|
||||
{% elif value is sequence -%} {# Support for lists/arrays #}
|
||||
<array>
|
||||
{% for item in value -%}
|
||||
{% if item is string -%}
|
||||
<string>{{ item }}</string>
|
||||
{% elif item is boolean -%}
|
||||
<{{ "true" if item else "false" }}/>
|
||||
{% elif item is mapping -%}
|
||||
<dict>
|
||||
{{ render_dict(item) }}
|
||||
</dict>
|
||||
{% endif -%}
|
||||
{% endfor -%}
|
||||
</array>
|
||||
{% endif -%}
|
||||
{% endfor -%}
|
||||
{% endmacro -%}
|
||||
{{ render_dict(cookiecutter.options.info_plist) }}
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>method</key>
|
||||
<string>{{ cookiecutter.ios_export_method }}</string>
|
||||
<key>provisioningProfiles</key>
|
||||
<dict>
|
||||
<key>{{ cookiecutter.bundle_id }}</key>
|
||||
<string>{{ cookiecutter.ios_provisioning_profile }}</string>
|
||||
</dict>
|
||||
|
||||
{% if cookiecutter.ios_team_id %}
|
||||
<key>teamID</key>
|
||||
<string>{{ cookiecutter.ios_team_id }}</string>
|
||||
{% endif %}
|
||||
|
||||
{% if cookiecutter.ios_signing_certificate %}
|
||||
<key>signingCertificate</key>
|
||||
<string>{{ cookiecutter.ios_signing_certificate }}</string>
|
||||
{% endif %}
|
||||
|
||||
{% macro render_dict(d) -%}
|
||||
{% for key, value in d.items() -%}
|
||||
<key>{{ key }}</key>
|
||||
{% if value is string -%}
|
||||
<string>{{ value }}</string>
|
||||
{% elif value is boolean -%}
|
||||
<{{ "true" if value else "false" }}/>
|
||||
{% elif value is mapping -%}
|
||||
<dict>
|
||||
{{ render_dict(value) }}
|
||||
</dict>
|
||||
{% elif value is sequence -%} {# Support for lists/arrays #}
|
||||
<array>
|
||||
{% for item in value -%}
|
||||
{% if item is string -%}
|
||||
<string>{{ item }}</string>
|
||||
{% elif item is boolean -%}
|
||||
<{{ "true" if item else "false" }}/>
|
||||
{% elif item is mapping -%}
|
||||
<dict>
|
||||
{{ render_dict(item) }}
|
||||
</dict>
|
||||
{% endif -%}
|
||||
{% endfor -%}
|
||||
</array>
|
||||
{% endif -%}
|
||||
{% endfor -%}
|
||||
{% endmacro -%}
|
||||
{{ render_dict(cookiecutter.ios_export_options) }}
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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 }}";
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -28,14 +28,35 @@
|
|||
<string>MainMenu</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
<!-- flet: prop {% for k, v in cookiecutter.options.info_plist.items() %} -->
|
||||
<key>{{ k }}</key>
|
||||
<!-- flet: True {% if v == True %} -->
|
||||
<true />
|
||||
<!-- flet: False {% elif v == False %} -->
|
||||
<false />
|
||||
<!-- flet: string value {% else %} -->
|
||||
<string>{{ v }}</string>
|
||||
<!-- flet: end of prop {% endif %} {% endfor %} -->
|
||||
|
||||
{% macro render_dict(d) -%}
|
||||
{% for key, value in d.items() -%}
|
||||
<key>{{ key }}</key>
|
||||
{% if value is string -%}
|
||||
<string>{{ value }}</string>
|
||||
{% elif value is boolean -%}
|
||||
<{{ "true" if value else "false" }}/>
|
||||
{% elif value is mapping -%}
|
||||
<dict>
|
||||
{{ render_dict(value) }}
|
||||
</dict>
|
||||
{% elif value is sequence -%} {# Support for lists/arrays #}
|
||||
<array>
|
||||
{% for item in value -%}
|
||||
{% if item is string -%}
|
||||
<string>{{ item }}</string>
|
||||
{% elif item is boolean -%}
|
||||
<{{ "true" if item else "false" }}/>
|
||||
{% elif item is mapping -%}
|
||||
<dict>
|
||||
{{ render_dict(item) }}
|
||||
</dict>
|
||||
{% endif -%}
|
||||
{% endfor -%}
|
||||
</array>
|
||||
{% endif -%}
|
||||
{% endfor -%}
|
||||
{% endmacro -%}
|
||||
{{ render_dict(cookiecutter.options.info_plist) }}
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue