diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 96a65b1..d8eb17b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,8 +2,8 @@ name: Build on: push: - tags: - - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10 + # tags: + # - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10 jobs: @@ -20,21 +20,21 @@ jobs: token: "${{ secrets.GITHUB_TOKEN }}" name: Release ${{ github.ref_name }} - build-wheel: - name: Build wheel - needs: createrelease - runs-on: ubuntu-20.04 - steps: - - uses: actions/checkout@v3 - with: - submodules: recursive - - - name: Build SDist and wheel - run: pipx run build - - - uses: actions/upload-artifact@v3 - with: - path: dist/* + # build-wheel: + # name: Build wheel + # needs: createrelease + # runs-on: ubuntu-20.04 + # steps: + # - uses: actions/checkout@v3 + # with: + # submodules: recursive + + # - name: Build SDist and wheel + # run: pipx run build + + # - uses: actions/upload-artifact@v3 + # with: + # path: dist/* build-binary: name: Build packages @@ -49,26 +49,25 @@ jobs: python -m pip install --upgrade pip pip install wheel pip install -r requirements-build.txt - pyinstaller sticker_convert.spec - cd dist + python compile.py + move sticker-convert.dist sticker-convert Compress-Archive -Path sticker-convert -DestinationPath sticker-convert-windows-x86_64.zip - cd .. move dist\sticker-convert sticker-convert dotnet tool install --global wix wix extension add WixToolset.UI.wixext python .\msicreator\createmsi.py msicreator.json move *.msi dist\sticker-convert-windows-x86_64.msi OUT_FILE_NAME: | - ./dist/sticker-convert-windows-x86_64.zip - ./dist/sticker-convert-windows-x86_64.msi + ./sticker-convert-windows-x86_64.zip + ./sticker-convert-windows-x86_64.msi - os: macos-11 TARGET: macos CMD_BUILD: | python -m pip install --upgrade pip python -m venv venv source ./venv/bin/activate - pip install wheel delocate pyinstaller~=5.13.2 + pip install wheel delocate nuitka pip install -r requirements-src.txt mkdir wheel_arm mkdir wheel_x64 @@ -80,27 +79,10 @@ jobs: mkdir dist cp ./scripts/run_me_first.command ./dist - SC_TARGET_ARCH=x86_64 pyinstaller sticker_convert.spec - cd dist/ - zip -r9 sticker-convert-macos-x86_64.zip sticker-convert.app run_me_first.command - rm -rf ./sticker-convert - rm -rf ./sticker-convert.app - cd ../ - - SC_TARGET_ARCH=arm64 pyinstaller sticker_convert.spec - cd dist/ - zip -r9 sticker-convert-macos-arm64.zip sticker-convert.app run_me_first.command - rm -rf ./sticker-convert - rm -rf ./sticker-convert.app - cd ../ - - SC_TARGET_ARCH=universal2 pyinstaller sticker_convert.spec - cd dist/ + python compile.py + mv ./sticker-convert.dist ./sticker-convert zip -r9 sticker-convert-macos-universal2.zip sticker-convert.app run_me_first.command - OUT_FILE_NAME: | - ./dist/sticker-convert-macos-x86_64.zip - ./dist/sticker-convert-macos-arm64.zip - ./dist/sticker-convert-macos-universal2.zip + OUT_FILE_NAME: ./sticker-convert-macos-universal2.zip - os: ubuntu-20.04 TARGET: linux CMD_BUILD: | @@ -122,9 +104,7 @@ jobs: # Bundling into appimage ARCH=x86_64 ./appimagetool ./AppDir chmod +x sticker-convert-x86_64.AppImage - mkdir dist - mv ./sticker-convert-x86_64.AppImage ./dist/sticker-convert-x86_64.AppImage - OUT_FILE_NAME: ./dist/sticker-convert-x86_64.AppImage + OUT_FILE_NAME: ./sticker-convert-x86_64.AppImage steps: - uses: actions/checkout@v3 with: @@ -148,99 +128,99 @@ jobs: with: files: ${{ matrix.OUT_FILE_NAME }} - build-docker: - name: Build Docker image and push - runs-on: ubuntu-latest - - permissions: - contents: read - packages: write - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Log in to Docker Hub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Login to GitHub Container Registry - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} + # build-docker: + # name: Build Docker image and push + # runs-on: ubuntu-latest + + # permissions: + # contents: read + # packages: write + + # steps: + # - name: Checkout repository + # uses: actions/checkout@v3 + + # - name: Log in to Docker Hub + # uses: docker/login-action@v2 + # with: + # username: ${{ secrets.DOCKER_USERNAME }} + # password: ${{ secrets.DOCKER_PASSWORD }} + + # - name: Login to GitHub Container Registry + # uses: docker/login-action@v2 + # with: + # registry: ghcr.io + # username: ${{ github.actor }} + # password: ${{ secrets.GITHUB_TOKEN }} - - name: Extract metadata (tags, labels) for Docker (min-cli) - id: meta_min_cli - uses: docker/metadata-action@v4 - with: - images: | - ${{ github.repository }} - ghcr.io/${{ github.repository }} - flavor: | - suffix=-min-cli,onlatest=true + # - name: Extract metadata (tags, labels) for Docker (min-cli) + # id: meta_min_cli + # uses: docker/metadata-action@v4 + # with: + # images: | + # ${{ github.repository }} + # ghcr.io/${{ github.repository }} + # flavor: | + # suffix=-min-cli,onlatest=true - - name: Extract metadata (tags, labels) for Docker (min-gui) - id: meta_min_gui - uses: docker/metadata-action@v4 - with: - images: | - ${{ github.repository }} - ghcr.io/${{ github.repository }} - flavor: | - suffix=-min-gui,onlatest=true + # - name: Extract metadata (tags, labels) for Docker (min-gui) + # id: meta_min_gui + # uses: docker/metadata-action@v4 + # with: + # images: | + # ${{ github.repository }} + # ghcr.io/${{ github.repository }} + # flavor: | + # suffix=-min-gui,onlatest=true - - name: Extract metadata (tags, labels) for Docker (full) - id: meta_full - uses: docker/metadata-action@v4 - with: - images: | - ${{ github.repository }} - ghcr.io/${{ github.repository }} + # - name: Extract metadata (tags, labels) for Docker (full) + # id: meta_full + # uses: docker/metadata-action@v4 + # with: + # images: | + # ${{ github.repository }} + # ghcr.io/${{ github.repository }} - - name: Build and push Docker image (min-cli) - uses: docker/build-push-action@v4 - with: - context: . - push: true - tags: ${{ steps.meta_min_cli.outputs.tags }} - labels: ${{ steps.meta_min_cli.outputs.labels }} - target: min-cli + # - name: Build and push Docker image (min-cli) + # uses: docker/build-push-action@v4 + # with: + # context: . + # push: true + # tags: ${{ steps.meta_min_cli.outputs.tags }} + # labels: ${{ steps.meta_min_cli.outputs.labels }} + # target: min-cli - - name: Build and push Docker image (min-gui) - uses: docker/build-push-action@v4 - with: - context: . - push: true - tags: ${{ steps.meta_min_gui.outputs.tags }} - labels: ${{ steps.meta_min_gui.outputs.labels }} - target: min-gui - - - name: Build and push Docker image (full) - uses: docker/build-push-action@v4 - with: - context: . - push: true - tags: ${{ steps.meta_full.outputs.tags }} - labels: ${{ steps.meta_full.outputs.labels }} - target: full + # - name: Build and push Docker image (min-gui) + # uses: docker/build-push-action@v4 + # with: + # context: . + # push: true + # tags: ${{ steps.meta_min_gui.outputs.tags }} + # labels: ${{ steps.meta_min_gui.outputs.labels }} + # target: min-gui + + # - name: Build and push Docker image (full) + # uses: docker/build-push-action@v4 + # with: + # context: . + # push: true + # tags: ${{ steps.meta_full.outputs.tags }} + # labels: ${{ steps.meta_full.outputs.labels }} + # target: full - upload-pypi: - name: Upload to pypi - needs: [build-wheel, build-binary] - runs-on: ubuntu-latest - steps: - - uses: actions/download-artifact@v3 - with: - # unpacks default artifact into dist/ - # if `name: artifact` is omitted, the action will create extra parent dir - name: artifact - path: dist - - - uses: pypa/gh-action-pypi-publish@v1.5.0 - with: - user: __token__ - password: ${{ secrets.PYPI_API_TOKEN }} \ No newline at end of file + # upload-pypi: + # name: Upload to pypi + # needs: [build-wheel, build-binary] + # runs-on: ubuntu-latest + # steps: + # - uses: actions/download-artifact@v3 + # with: + # # unpacks default artifact into dist/ + # # if `name: artifact` is omitted, the action will create extra parent dir + # name: artifact + # path: dist + + # - uses: pypa/gh-action-pypi-publish@v1.5.0 + # with: + # user: __token__ + # password: ${{ secrets.PYPI_API_TOKEN }} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 0bc7dbe..2da5a2e 100755 --- a/.gitignore +++ b/.gitignore @@ -61,6 +61,10 @@ pyvenv.cfg *.wixpdb **/.wix +# Nuitka +**/*.build +**/*.dist + **/stickers_input **/stickers_output scripts/opt-comp-result diff --git a/AppImageBuilder.yml b/AppImageBuilder.yml index 43d1bd6..d44ff72 100644 --- a/AppImageBuilder.yml +++ b/AppImageBuilder.yml @@ -23,7 +23,7 @@ AppDir: icon: sticker-convert version: latest exec: usr/bin/python3.11 - exec_args: "$APPDIR/usr/src/main.py $@" + exec_args: "$APPDIR/usr/src/sticker-convert.py $@" apt: arch: amd64 diff --git a/Dockerfile b/Dockerfile index 77150f5..85dc109 100755 --- a/Dockerfile +++ b/Dockerfile @@ -22,7 +22,7 @@ RUN apt purge -y python3-pip && \ VOLUME ["/app/stickers_input", "/app/stickers_output"] -ENTRYPOINT ["/app/main.py"] +ENTRYPOINT ["/app/sticker-convert.py"] FROM jlesage/baseimage-gui:debian-11-v4 AS base-gui diff --git a/README.md b/README.md index 4bcfc48..eefd87d 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,7 @@ - Upload: The program can create Xcode project for iMessage sticker pack, which could then be compiled and sideloaded using Xcode. ## How to use (GUI) -1. Run `sticker-convert.exe`, `sticker-convert.app` or `python3 src/main.py` +1. Run `sticker-convert.exe`, `sticker-convert.app` or `python3 src/sticker-convert.py` 2. Choose input source. - If you are downloading, enter URL address if you want to download from (If applicable) - If you are using local files, choose input directory. Defaults to a folder named 'stickers_input' in the same directory as the program. Put files you want to convert into that directory @@ -230,7 +230,7 @@ Credentials options: Save Signal and Telegram credentials. ``` -If you are running python script directly, run with `src/main.py` +If you are running python script directly, run with `src/sticker-convert.py` If you installed by pip, run with `sticker-convert` or `python -m sticker_convert` @@ -307,7 +307,7 @@ docker run -d -it --name sticker-convert \ -v /path/to/your/stickers_input:/app/stickers_input \ -v /path/to/your/stickers_output:/app/stickers_output \ laggykiller/sticker-convert:latest \ - python3 /app/main.py --help + python3 /app/sticker-convert.py --help ``` Alternative: Use docker-compose.yml diff --git a/compile.py b/compile.py new file mode 100644 index 0000000..7d05a09 --- /dev/null +++ b/compile.py @@ -0,0 +1,38 @@ +import os +import subprocess + +cmd_list = [ + 'python', + '-m', + 'nuitka', + '--standalone', + '--follow-imports', + '--assume-yes-for-downloads', + '--include-data-dir=src/sticker_convert/ios-message-stickers-template=ios-message-stickers-template', + '--include-data-dir=src/sticker_convert/resources=resources', + '--windows-icon-from-ico=src/sticker_convert/resources/appicon.ico', + '--macos-target-arch=universal', + '--macos-create-app-bundle', + '--macos-app-icon=src/sticker_convert/resources/appicon.icns', + '--enable-plugin=tk-inter', + '--enable-plugin=multiprocessing', + '--include-package-data=signalstickers_client', + '--include-package=av', + '--include-module=av.audio.codeccontext', + '--include-module=av.video.codeccontext', + '--include-package=imageio', + '--user-package-configuration-file=nuitka.config.yml' +] + +cmd_list.append('src/sticker-convert.py') +subprocess.run(cmd_list, shell=True) + +for i in os.listdir('sticker-convert.dist/av.libs'): + file_path = os.path.join('sticker-convert.dist', i) + if os.path.isfile(file_path): + os.remove(file_path) + +for i in os.listdir('test.dist/av.libs'): + file_path = os.path.join('test.dist', i) + if os.path.isfile(file_path): + os.remove(file_path) \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 2e4d8fd..8bef694 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -30,4 +30,4 @@ services: # Your command here if you are using CLI # If you are launching GUI, do not comment out! - # command: /usr/bin/python3 /app/main.py --help \ No newline at end of file + # command: /usr/bin/python3 /app/sticker-convert.py --help \ No newline at end of file diff --git a/docs/COMPILING.md b/docs/COMPILING.md index ac37c84..e4cd2a6 100755 --- a/docs/COMPILING.md +++ b/docs/COMPILING.md @@ -6,18 +6,14 @@ Install python3 from https://www.python.org/ Install the required python modules with `pip3 install -r requirements-build.txt` ## 3. Running the script -Change directory into `sticker_convert` directory and run `python3 ./main.py` +Change directory into `sticker_convert` directory and run `python3 ./sticker-convert.py` -# Compiling -This repository uses `pyinstaller` for compiling. Install with `pip3 install pyinstaller` +# Compiling on Windows and MacOS +This repository uses `nuitka` for compiling. -## Compiling on windows -1. Run `pyinstaller sticker_convert.spec` -2. Compilation result in `dist` directory - -## Compiling on MacOS -1. Run `pyinstaller sticker_convert.spec` -2. Compilation result in `dist` directory +1. Install dependencies with `pip3 install -r requirements-build.txt` +2. Run `python compile.py` +3. Compilation result in `sticker-convert.dist` directory ## Creating AppImage on Linux 1. Use Ubuntu 20.04 (May work on newer version if you change `sourceline` in `AppImageBuilder.yml`) @@ -35,7 +31,7 @@ sudo mv appimage-builder-x86_64.AppImage /usr/local/bin/appimage-builder 1. Install [.NET SDK](https://dotnet.microsoft.com/en-us/download/dotnet) 2. Install [Wix](https://wixtoolset.org/docs/intro/): `dotnet tool install --global wix` 3. `wix extension add WixToolset.UI.wixext` -4. `pyinstaller sticker_convert.spec` +4. `python compile.py` 5. `mv dist\sticker-convert sticker-convert` 6. `python msicreator\createmsi.py msicreator.json` diff --git a/nuitka.config.yml b/nuitka.config.yml new file mode 100644 index 0000000..46fa142 --- /dev/null +++ b/nuitka.config.yml @@ -0,0 +1,6 @@ +- module-name: 'rlottie_python' + dlls: + - from_filenames: + prefixes: + - 'rlottie*' + - 'librlottie*' \ No newline at end of file diff --git a/requirements-build.txt b/requirements-build.txt index c76eebd..2bb2986 100644 --- a/requirements-build.txt +++ b/requirements-build.txt @@ -1,2 +1,2 @@ -r requirements.txt -pyinstaller~=5.13.2 \ No newline at end of file +nuitka~=1.8.3 \ No newline at end of file diff --git a/scripts/startapp.sh b/scripts/startapp.sh index a2d3f0c..513e2e1 100755 --- a/scripts/startapp.sh +++ b/scripts/startapp.sh @@ -1,4 +1,4 @@ #!/bin/sh # For launching docker GUI only. -exec /usr/bin/python3 /app/main.py \ No newline at end of file +exec /usr/bin/python3 /app/sticker-convert.py \ No newline at end of file diff --git a/signalstickers_client/utils/ca/cacert.pem b/signalstickers_client/utils/ca/cacert.pem new file mode 100644 index 0000000..c58e16f --- /dev/null +++ b/signalstickers_client/utils/ca/cacert.pem @@ -0,0 +1,34 @@ +-----BEGIN CERTIFICATE----- +MIIF2zCCA8OgAwIBAgIUAMHz4g60cIDBpPr1gyZ/JDaaPpcwDQYJKoZIhvcNAQEL +BQAwdTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcT +DU1vdW50YWluIFZpZXcxHjAcBgNVBAoTFVNpZ25hbCBNZXNzZW5nZXIsIExMQzEZ +MBcGA1UEAxMQU2lnbmFsIE1lc3NlbmdlcjAeFw0yMjAxMjYwMDQ1NTFaFw0zMjAx +MjQwMDQ1NTBaMHUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYw +FAYDVQQHEw1Nb3VudGFpbiBWaWV3MR4wHAYDVQQKExVTaWduYWwgTWVzc2VuZ2Vy +LCBMTEMxGTAXBgNVBAMTEFNpZ25hbCBNZXNzZW5nZXIwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQDEecifxMHHlDhxbERVdErOhGsLO08PUdNkATjZ1kT5 +1uPf5JPiRbus9F4J/GgBQ4ANSAjIDZuFY0WOvG/i0qvxthpW70ocp8IjkiWTNiA8 +1zQNQdCiWbGDU4B1sLi2o4JgJMweSkQFiyDynqWgHpw+KmvytCzRWnvrrptIfE4G +PxNOsAtXFbVH++8JO42IaKRVlbfpe/lUHbjiYmIpQroZPGPY4Oql8KM3o39ObPnT +o1WoM4moyOOZpU3lV1awftvWBx1sbTBL02sQWfHRxgNVF+Pj0fdDMMFdFJobArrL +VfK2Ua+dYN4pV5XIxzVarSRW73CXqQ+2qloPW/ynpa3gRtYeGWV4jl7eD0PmeHpK +OY78idP4H1jfAv0TAVeKpuB5ZFZ2szcySxrQa8d7FIf0kNJe9gIRjbQ+XrvnN+ZZ +vj6d+8uBJq8LfQaFhlVfI0/aIdggScapR7w8oLpvdflUWqcTLeXVNLVrg15cEDwd +lV8PVscT/KT0bfNzKI80qBq8LyRmauAqP0CDjayYGb2UAabnhefgmRY6aBE5mXxd +byAEzzCS3vDxjeTD8v8nbDq+SD6lJi0i7jgwEfNDhe9XK50baK15Udc8Cr/ZlhGM +jNmWqBd0jIpaZm1rzWA0k4VwXtDwpBXSz8oBFshiXs3FD6jHY2IhOR3ppbyd4qRU +pwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUtfNLxuXWS9DlgGuMUMNnW7yx83EwHwYDVR0jBBgwFoAUtfNLxuXWS9Dl +gGuMUMNnW7yx83EwDQYJKoZIhvcNAQELBQADggIBABUeiryS0qjykBN75aoHO9bV +PrrX+DSJIB9V2YzkFVyh/io65QJMG8naWVGOSpVRwUwhZVKh3JVp/miPgzTGAo7z +hrDIoXc+ih7orAMb19qol/2Ha8OZLa75LojJNRbZoCR5C+gM8C+spMLjFf9k3JVx +dajhtRUcR0zYhwsBS7qZ5Me0d6gRXD0ZiSbadMMxSw6KfKk3ePmPb9gX+MRTS63c +8mLzVYB/3fe/bkpq4RUwzUHvoZf+SUD7NzSQRQQMfvAHlxk11TVNxScYPtxXDyiy +3Cssl9gWrrWqQ/omuHipoH62J7h8KAYbr6oEIq+Czuenc3eCIBGBBfvCpuFOgckA +XXE4MlBasEU0MO66GrTCgMt9bAmSw3TrRP12+ZUFxYNtqWluRU8JWQ4FCCPcz9pg +MRBOgn4lTxDZG+I47OKNuSRjFEP94cdgxd3H/5BK7WHUz1tAGQ4BgepSXgmjzifF +T5FVTDTl3ZnWUVBXiHYtbOBgLiSIkbqGMCLtrBtFIeQ7RRTb3L+IE9R0UB0cJB3A +Xbf1lVkOcmrdu2h8A32aCwtr5S1fBF1unlG7imPmqJfpOMWa8yIF/KWVm29JAPq8 +Lrsybb0z5gg8w7ZblEuB9zOW9M3l60DXuJO6l7g+deV6P96rv2unHS8UlvWiVWDy +9qfgAJizyy3kqM4lOwBH +-----END CERTIFICATE----- diff --git a/src/main.py b/src/sticker-convert.py old mode 100755 new mode 100644 similarity index 100% rename from src/main.py rename to src/sticker-convert.py diff --git a/src/sticker_convert/__main__.py b/src/sticker_convert/__main__.py index 2b755cb..85453b6 100755 --- a/src/sticker_convert/__main__.py +++ b/src/sticker_convert/__main__.py @@ -5,8 +5,10 @@ def main(): import os multiprocessing.freeze_support() - script_path = os.path.split(__file__)[0] - os.chdir(os.path.abspath(script_path)) + script_path = os.path.dirname(__file__) + if not os.path.isdir(script_path): + script_path = os.path.dirname(sys.argv[0]) + os.chdir(script_path) if len(sys.argv) == 1: print('Launching GUI...') from sticker_convert.gui import GUI # type: ignore diff --git a/sticker-convert.exe b/sticker-convert.exe new file mode 100644 index 0000000..e089dd7 Binary files /dev/null and b/sticker-convert.exe differ diff --git a/sticker_convert.spec b/sticker_convert.spec deleted file mode 100755 index db3bbcf..0000000 --- a/sticker_convert.spec +++ /dev/null @@ -1,76 +0,0 @@ -# -*- mode: python ; coding: utf-8 -*- -import os -import sys -import importlib - -block_cipher = None - -datas = [('./src/sticker_convert/resources/*', './resources')] - -# signalstickers_client needs a custom cacert.pem -# https://stackoverflow.com/a/48068640 -proot = os.path.dirname(importlib.import_module('signalstickers_client').__file__) -datas.append((os.path.join(proot, 'utils/ca/cacert.pem'), 'signalstickers_client/utils/ca/')) - -# rlottie_python needs to copy rlottie dll -if sys.platform.startswith('win32') or sys.platform.startswith('cygwin'): - rlottie_dll = 'rlottie.dll' -elif sys.platform.startswith('darwin'): - rlottie_dll = 'librlottie.dylib' -else: - rlottie_dll = 'rlottie.so' -proot = os.path.dirname(importlib.import_module('rlottie_python').__file__) -datas.append((os.path.join(proot, rlottie_dll), 'rlottie_python/')) - -target_arch = os.getenv('SC_TARGET_ARCH') - -a = Analysis( - ['src/sticker_convert/__main__.py'], - pathex=['src/sticker_convert'], - binaries=None, - datas=datas, - hiddenimports=['tkinter', 'Pillow', 'opencv-python'], - hookspath=[], - hooksconfig={}, - runtime_hooks=[], - excludes=[], - win_no_prefer_redirects=False, - win_private_assemblies=False, - cipher=block_cipher, - noarchive=False, -) -pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) - -exe = EXE( - pyz, - a.scripts, - [], - exclude_binaries=True, - name='sticker-convert', - debug=False, - bootloader_ignore_signals=False, - strip=False, - upx=True, - console=True, - disable_windowed_traceback=False, - argv_emulation=False, - target_arch=target_arch, - codesign_identity=None, - entitlements_file=None, - icon='./src/sticker_convert/resources/appicon.ico' -) -coll = COLLECT( - exe, - a.binaries, - a.zipfiles, - a.datas, - Tree('./src/sticker_convert/ios-message-stickers-template', prefix='ios-message-stickers-template'), - strip=False, - upx=True, - upx_exclude=[], - name=f'sticker-convert', -) -app = BUNDLE(coll, - name=f'sticker-convert.app', - icon='./src/sticker_convert/resources/appicon.icns', - bundle_identifier=None)