Buildozer: Fails to package app on OSX Sierra 10.12.4 (hdiutil: attach failed - image not recognized keka)

Created on 12 May 2017  Â·  10Comments  Â·  Source: kivy/buildozer

Related to #427

Appears to to be a few issues happening here.

1) Fails to find local install of the kivy.app so downloads it
2) Fails to download keka as part of the installation of kivy

I have tried with Kivy as pip package, with Kivy.app in /Applications, with Kivy.app in local dir . and with all 3 at once. buildozer always tries to download Kivy.

I installed buildozer with both
pip install git+http://github.com/kivy/buildozer
and
pip install git+http://github.com/kivy/buildozer@master

I made the simple pong tutorial, and the app runs fine with a pip install of Kivy.

See below for details...

Verify Kivy

➜  pong ls -la /Applications/Kivy.app
total 0
drwxr-xr-x@  3 Matt  staff   102  7 May 22:48 .
drwxrwxr-x+ 83 root  admin  2822 11 May 21:17 ..
drwxr-xr-x@  6 Matt  staff   204  7 May 22:48 Contents
➜  pong ls -la ./Kivy.app
total 0
drwxr-xr-x@ 3 Matt  staff  102  7 May 22:48 .
drwxr-xr-x  6 Matt  staff  204 12 May 11:16 ..
drwxr-xr-x@ 6 Matt  staff  204  7 May 22:48 Contents
➜  pong pip show kivy
Name: Kivy
Version: 1.10.0
Summary: A software library for rapid development of hardware-accelerated multitouch applications.
Home-page: http://kivy.org
Author: Kivy Team and other contributors
Author-email: [email protected]
License: MIT
Location: /usr/local/lib/python2.7/site-packages
Requires: Kivy-Garden, pygments, docutils

Verify python
➜ pong which python /usr/local/bin/python ➜ pong ls -n /usr/local/bin/python lrwxr-xr-x 1 501 80 34 8 May 20:54 /usr/local/bin/python -> ../Cellar/python/2.7.13/bin/python

Verify app runs
➜ pong python main.py Purge log fired. Analysing... Purge finished! [INFO ] [Logger ] Record log in /Users/Matt/.kivy/logs/kivy_17-05-12_1.txt [INFO ] [Kivy ] v1.10.0 [INFO ] [Python ] v2.7.13 (default, May 8 2017, 20:53:00) [GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] [INFO ] [Factory ] 194 symbols loaded [INFO ] [Image ] Providers: img_tex, img_imageio, img_dds, img_sdl2, img_gif (img_pil, img_ffpyplayer ignored) [INFO ] [Text ] Provider: sdl2 [INFO ] [OSC ] using <multiprocessing> for socket [INFO ] [Window ] Provider: sdl2 [INFO ] [GL ] Using the "OpenGL ES 2" graphics system [INFO ] [GL ] Backend used <gl> [INFO ] [GL ] OpenGL version <2.1 NVIDIA-10.16.34 355.10.05.35f05> [INFO ] [GL ] OpenGL vendor <NVIDIA Corporation> [INFO ] [GL ] OpenGL renderer <NVIDIA GeForce GT 650M OpenGL Engine> [INFO ] [GL ] OpenGL parsed version: 2, 1 [INFO ] [GL ] Shading version <1.20> [INFO ] [GL ] Texture max size <16384> [INFO ] [GL ] Texture max units <16> [INFO ] [Window ] auto add sdl2 input provider [INFO ] [Window ] virtual keyboard not allowed, single mode, not docked [INFO ] [Base ] Start application main loop [INFO ] [GL ] NPOT texture support is available [INFO ] [Base ] Leaving application in progress...

Verify buildozer
````
➜ pong buildozer --version

Check configuration tokens

Buildozer 0.33dev
````

Attempt to Package app
````
➜ pong buildozer init
File buildozer.spec created, ready to customize!
➜ pong buildozer osx debug

Check configuration tokens

Ensure build layout

Check configuration tokens

Preparing build

Check requirements for osx

Check if kivy-sdk-packager exists

kivy-sdk-packager does not exist, clone it

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 127 0 127 0 0 341 0 --:--:-- --:--:-- --:--:-- 342
100 195k 100 195k 0 0 184k 0 0:00:01 0:00:01 --:--:-- 1030k
Archive: master.zip
56bd25036d8070b8b0a7bf4770bc94118a2aba79
creating: kivy-sdk-packager-master/
inflating: kivy-sdk-packager-master/.gitignore
inflating: kivy-sdk-packager-master/LICENSE
inflating: kivy-sdk-packager-master/README.md
extracting: kivy-sdk-packager-master/__init__.py
inflating: kivy-sdk-packager-master/appveyor.yml
creating: kivy-sdk-packager-master/linux/
creating: kivy-sdk-packager-master/linux/debian/
inflating: kivy-sdk-packager-master/linux/debian/README.md
creating: kivy-sdk-packager-master/linux/debian/daily/
inflating: kivy-sdk-packager-master/linux/debian/daily/changelog
extracting: kivy-sdk-packager-master/linux/debian/daily/compat
inflating: kivy-sdk-packager-master/linux/debian/daily/control
inflating: kivy-sdk-packager-master/linux/debian/daily/copyright
extracting: kivy-sdk-packager-master/linux/debian/daily/kivy-doc.docs
extracting: kivy-sdk-packager-master/linux/debian/daily/kivy-examples.install
inflating: kivy-sdk-packager-master/linux/debian/daily/kivy-tools.install
inflating: kivy-sdk-packager-master/linux/debian/daily/python-kivy-bin.install
extracting: kivy-sdk-packager-master/linux/debian/daily/python-kivy-common.install
inflating: kivy-sdk-packager-master/linux/debian/daily/python-kivy.install
inflating: kivy-sdk-packager-master/linux/debian/daily/python3-kivy-bin.install
extracting: kivy-sdk-packager-master/linux/debian/daily/python3-kivy-common.install
inflating: kivy-sdk-packager-master/linux/debian/daily/python3-kivy.install
inflating: kivy-sdk-packager-master/linux/debian/daily/rules
creating: kivy-sdk-packager-master/linux/debian/stable/
inflating: kivy-sdk-packager-master/linux/debian/stable/changelog
extracting: kivy-sdk-packager-master/linux/debian/stable/compat
inflating: kivy-sdk-packager-master/linux/debian/stable/control
inflating: kivy-sdk-packager-master/linux/debian/stable/copyright
extracting: kivy-sdk-packager-master/linux/debian/stable/kivy-doc.docs
extracting: kivy-sdk-packager-master/linux/debian/stable/kivy-examples.install
inflating: kivy-sdk-packager-master/linux/debian/stable/kivy-tools.install
inflating: kivy-sdk-packager-master/linux/debian/stable/python-kivy-bin.install
extracting: kivy-sdk-packager-master/linux/debian/stable/python-kivy-common.install
inflating: kivy-sdk-packager-master/linux/debian/stable/python-kivy.install
inflating: kivy-sdk-packager-master/linux/debian/stable/python3-kivy-bin.install
extracting: kivy-sdk-packager-master/linux/debian/stable/python3-kivy-common.install
inflating: kivy-sdk-packager-master/linux/debian/stable/python3-kivy.install
inflating: kivy-sdk-packager-master/linux/debian/stable/rules
creating: kivy-sdk-packager-master/osx/
inflating: kivy-sdk-packager-master/osx/README.md
inflating: kivy-sdk-packager-master/osx/cleanup_app.sh
inflating: kivy-sdk-packager-master/osx/create-osx-bundle.sh
inflating: kivy-sdk-packager-master/osx/create-osx-dmg.sh
creating: kivy-sdk-packager-master/osx/data/
inflating: kivy-sdk-packager-master/osx/data/MakeSymlinks
inflating: kivy-sdk-packager-master/osx/data/background.png
inflating: kivy-sdk-packager-master/osx/data/icon.icns
inflating: kivy-sdk-packager-master/osx/data/link_duplicate.py
inflating: kivy-sdk-packager-master/osx/data/script
inflating: kivy-sdk-packager-master/osx/package_app.py
creating: kivy-sdk-packager-master/win/
inflating: kivy-sdk-packager-master/win/DST Root CA X3.pem
extracting: kivy-sdk-packager-master/win/__init__.py
inflating: kivy-sdk-packager-master/win/angle.py
inflating: kivy-sdk-packager-master/win/common.py
creating: kivy-sdk-packager-master/win/data/
inflating: kivy-sdk-packager-master/win/data/README.txt
inflating: kivy-sdk-packager-master/win/data/kivy-bash.bat
inflating: kivy-sdk-packager-master/win/data/kivy.bat
inflating: kivy-sdk-packager-master/win/data/kivybash.rc
inflating: kivy-sdk-packager-master/win/data/kivyenv.sh
inflating: kivy-sdk-packager-master/win/data/kivywineenv.sh
creating: kivy-sdk-packager-master/win/data/tools/
inflating: kivy-sdk-packager-master/win/data/tools/cython.bat
extracting: kivy-sdk-packager-master/win/data/tools/easy_install.bat
inflating: kivy-sdk-packager-master/win/data/tools/link_msysgit.bat
inflating: kivy-sdk-packager-master/win/data/tools/make-portable-python.py
extracting: kivy-sdk-packager-master/win/data/tools/pip.bat
inflating: kivy-sdk-packager-master/win/data/tools/register-python.py
inflating: kivy-sdk-packager-master/win/dropbox.py
inflating: kivy-sdk-packager-master/win/gdrive.py
inflating: kivy-sdk-packager-master/win/glew.py
inflating: kivy-sdk-packager-master/win/gstreamer.py
inflating: kivy-sdk-packager-master/win/kivy_win_sdk.py
inflating: kivy-sdk-packager-master/win/readme
inflating: kivy-sdk-packager-master/win/sdl2.py

check if Kivy.app exists in local dir

Downloading kivy...

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 178 100 178 0 0 1114 0 --:--:-- --:--:-- --:--:-- 1119
100 69.0M 100 69.0M 0 0 352k 0 0:03:20 0:03:20 --:--:-- 395k

Downloading Keka as dependency (to install Kivy)

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 591 0 591 0 0 1520 0 --:--:-- --:--:-- --:--:-- 1519
hdiutil: attach failed - image not recognized
Traceback (most recent call last):
File "/usr/local/bin/buildozer", line 11, in
load_entry_point('buildozer==0.33.dev0', 'console_scripts', 'buildozer')()
File "/usr/local/lib/python2.7/site-packages/buildozer/scripts/client.py", line 13, in main
Buildozer().run_command(sys.argv[1:])
File "/usr/local/lib/python2.7/site-packages/buildozer/__init__.py", line 1020, in run_command
self.target.run_commands(args)
File "/usr/local/lib/python2.7/site-packages/buildozer/targets/osx.py", line 237, in run_commands
func(args)
File "/usr/local/lib/python2.7/site-packages/buildozer/targets/osx.py", line 250, in cmd_debug
self.buildozer.prepare_for_build()
File "/usr/local/lib/python2.7/site-packages/buildozer/__init__.py", line 172, in prepare_for_build
self.target.check_requirements()
File "/usr/local/lib/python2.7/site-packages/buildozer/targets/osx.py", line 104, in check_requirements
self.ensure_kivyapp()
File "/usr/local/lib/python2.7/site-packages/buildozer/targets/osx.py", line 98, in ensure_kivyapp
self.download_kivy(kivy_app_dir, py_branch)
File "/usr/local/lib/python2.7/site-packages/buildozer/targets/osx.py", line 74, in download_kivy
check_call(('hdiutil', 'attach', 'Keka-1.0.8.dmg'), cwd=cwd)
File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 186, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '('hdiutil', 'attach', 'Keka-1.0.8.dmg')' returned non-zero exit status 1
````

Most helpful comment

I was able to locate the problem and fix the error.

This has been extremely helpful in helping me to get kivy to build in MacOS (via GitHub actions) using buildozer. I'm not sure why this isn't documented on the official documentation, since it's--what--2 years old?

I did find a couple issues

  1. it appears that the syntax has since changed for ./create-osx-bundle.sh -- which now takes the version of kivy followed by the version of python. So change
./create-osx-bundle.sh python3

to this (or similar):

./create-osx-bundle.sh 1.11.1 3.7.3
  1. I found that I had to comment out these two blocks
## Change buildozer to use a python3.7 virtual environment instead of python2.7
#pushd /usr/local/lib/$PYTHON_EXEC_VERSION/site-packages/buildozer
#sed -i '' 's;virtualenv --python=python2.7;virtualenv --python=python3.7;g' __init__.py
#popd
#
## Change the osx target to use python3 to run the package_app.py script.
#pushd /usr/local/lib/$PYTHON_EXEC_VERSION/site-packages/buildozer/targets
#sed -i '' "s;'python', 'package_app.py';'python3', 'package_app.py';g" osx.py
#popd
  1. I had to remove 'python3' from the list of requirements in the buildozer.spec file, else it tries to do a pip3 install python3, which of course fails (not sure why this is the default in the spec file from buildozer init

  2. I had to add a bogus item to requirements.txt, because if 'kivy' is the only item, it throws a fit. I put pip in it, so the requirements.txt file's contents is:

pip
  1. I found that the sed command to drop the decode of utf-8 actually breaks it, and I needed to remove it
#sed -i '' "s;\.decode('utf-8');;g" package_app.py

I'm almost there: currently everything works except the python binary that's shipped with buildozer at myapp.app/Contents/Resources/python. Not sure why, but apparently the python binaries downloaded by buildozer via pyenv change every execution. smh.

All 10 comments

Should be fixed by #505

Issue still persists for me.

It also persists in my case too

@Rusbens1 @iruriksl can you folks please post your logs

@akshayaurora Not fixed. Just found this page when using latest kivy, latest buildozer.

$ python --version
Python 3.6.4 :: Anaconda, Inc.
macOS 10.13.3 (17D47)

$ buildozer osx debug
# Check configuration tokens
# Ensure build layout
# Check configuration tokens
# Preparing build
# Check requirements for osx
# Check if kivy-sdk-packager exists
# kivy-sdk-packager does not exist, clone it
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   127    0   127    0     0    444      0 --:--:-- --:--:-- --:--:--   444
100  193k    0  193k    0     0   255k      0 --:--:-- --:--:-- --:--:--  255k
Archive:  master.zip
1af58fde2b1442369c03dfaf836fccba866a0555
   creating: kivy-sdk-packager-master/
  inflating: kivy-sdk-packager-master/.gitignore  
  inflating: kivy-sdk-packager-master/LICENSE  
  inflating: kivy-sdk-packager-master/README.md  
 extracting: kivy-sdk-packager-master/__init__.py  
  inflating: kivy-sdk-packager-master/appveyor.yml  
   creating: kivy-sdk-packager-master/linux/
   creating: kivy-sdk-packager-master/linux/debian/
  inflating: kivy-sdk-packager-master/linux/debian/README.md  
   creating: kivy-sdk-packager-master/linux/debian/daily/
  inflating: kivy-sdk-packager-master/linux/debian/daily/changelog  
 extracting: kivy-sdk-packager-master/linux/debian/daily/compat  
  inflating: kivy-sdk-packager-master/linux/debian/daily/control  
  inflating: kivy-sdk-packager-master/linux/debian/daily/copyright  
 extracting: kivy-sdk-packager-master/linux/debian/daily/kivy-doc.docs  
 extracting: kivy-sdk-packager-master/linux/debian/daily/kivy-examples.install  
  inflating: kivy-sdk-packager-master/linux/debian/daily/kivy-tools.install  
  inflating: kivy-sdk-packager-master/linux/debian/daily/python-kivy.install  
  inflating: kivy-sdk-packager-master/linux/debian/daily/python3-kivy.install  
  inflating: kivy-sdk-packager-master/linux/debian/daily/rules  
   creating: kivy-sdk-packager-master/linux/debian/stable/
  inflating: kivy-sdk-packager-master/linux/debian/stable/changelog  
 extracting: kivy-sdk-packager-master/linux/debian/stable/compat  
  inflating: kivy-sdk-packager-master/linux/debian/stable/control  
  inflating: kivy-sdk-packager-master/linux/debian/stable/copyright  
 extracting: kivy-sdk-packager-master/linux/debian/stable/kivy-doc.docs  
 extracting: kivy-sdk-packager-master/linux/debian/stable/kivy-examples.install  
  inflating: kivy-sdk-packager-master/linux/debian/stable/kivy-tools.install  
  inflating: kivy-sdk-packager-master/linux/debian/stable/python-kivy-bin.install  
 extracting: kivy-sdk-packager-master/linux/debian/stable/python-kivy-common.install  
  inflating: kivy-sdk-packager-master/linux/debian/stable/python-kivy.install  
  inflating: kivy-sdk-packager-master/linux/debian/stable/python3-kivy-bin.install  
 extracting: kivy-sdk-packager-master/linux/debian/stable/python3-kivy-common.install  
  inflating: kivy-sdk-packager-master/linux/debian/stable/python3-kivy.install  
  inflating: kivy-sdk-packager-master/linux/debian/stable/rules  
   creating: kivy-sdk-packager-master/osx/
  inflating: kivy-sdk-packager-master/osx/README.md  
  inflating: kivy-sdk-packager-master/osx/cleanup_app.sh  
  inflating: kivy-sdk-packager-master/osx/create-osx-bundle.sh  
  inflating: kivy-sdk-packager-master/osx/create-osx-dmg.sh  
   creating: kivy-sdk-packager-master/osx/data/
  inflating: kivy-sdk-packager-master/osx/data/MakeSymlinks  
  inflating: kivy-sdk-packager-master/osx/data/background.png  
  inflating: kivy-sdk-packager-master/osx/data/icon.icns  
  inflating: kivy-sdk-packager-master/osx/data/link_duplicate.py  
  inflating: kivy-sdk-packager-master/osx/data/script  
  inflating: kivy-sdk-packager-master/osx/package_app.py  
   creating: kivy-sdk-packager-master/win/
  inflating: kivy-sdk-packager-master/win/DST Root CA X3.pem  
 extracting: kivy-sdk-packager-master/win/__init__.py  
  inflating: kivy-sdk-packager-master/win/angle.py  
  inflating: kivy-sdk-packager-master/win/common.py  
   creating: kivy-sdk-packager-master/win/data/
  inflating: kivy-sdk-packager-master/win/data/README.txt  
  inflating: kivy-sdk-packager-master/win/data/kivy-bash.bat  
  inflating: kivy-sdk-packager-master/win/data/kivy.bat  
  inflating: kivy-sdk-packager-master/win/data/kivybash.rc  
  inflating: kivy-sdk-packager-master/win/data/kivyenv.sh  
  inflating: kivy-sdk-packager-master/win/data/kivywineenv.sh  
   creating: kivy-sdk-packager-master/win/data/tools/
  inflating: kivy-sdk-packager-master/win/data/tools/cython.bat  
 extracting: kivy-sdk-packager-master/win/data/tools/easy_install.bat  
  inflating: kivy-sdk-packager-master/win/data/tools/link_msysgit.bat  
  inflating: kivy-sdk-packager-master/win/data/tools/make-portable-python.py  
 extracting: kivy-sdk-packager-master/win/data/tools/pip.bat  
  inflating: kivy-sdk-packager-master/win/data/tools/register-python.py  
  inflating: kivy-sdk-packager-master/win/dropbox.py  
  inflating: kivy-sdk-packager-master/win/gdrive.py  
  inflating: kivy-sdk-packager-master/win/glew.py  
  inflating: kivy-sdk-packager-master/win/gstreamer.py  
  inflating: kivy-sdk-packager-master/win/kivy_win_sdk.py  
  inflating: kivy-sdk-packager-master/win/readme  
  inflating: kivy-sdk-packager-master/win/sdl2.py  
# check if Kivy.app exists in local dir
Traceback (most recent call last):
  File "/Users/shawley/anaconda3/bin/buildozer", line 11, in <module>
    load_entry_point('buildozer==0.35.dev0', 'console_scripts', 'buildozer')()
  File "/Users/shawley/anaconda3/lib/python3.6/site-packages/buildozer/scripts/client.py", line 13, in main
    Buildozer().run_command(sys.argv[1:])
  File "/Users/shawley/anaconda3/lib/python3.6/site-packages/buildozer/__init__.py", line 1058, in run_command
    self.target.run_commands(args)
  File "/Users/shawley/anaconda3/lib/python3.6/site-packages/buildozer/targets/osx.py", line 232, in run_commands
    func(args)
  File "/Users/shawley/anaconda3/lib/python3.6/site-packages/buildozer/targets/osx.py", line 245, in cmd_debug
    self.buildozer.prepare_for_build()
  File "/Users/shawley/anaconda3/lib/python3.6/site-packages/buildozer/__init__.py", line 173, in prepare_for_build
    self.target.check_requirements()
  File "/Users/shawley/anaconda3/lib/python3.6/site-packages/buildozer/targets/osx.py", line 99, in check_requirements
    self.ensure_kivyapp()
  File "/Users/shawley/anaconda3/lib/python3.6/site-packages/buildozer/targets/osx.py", line 86, in ensure_kivyapp
    if not int(py_branch) in (2, 3):
ValueError: invalid literal for int() with base 10: '3.6.4'
Scotts-MacBook-Pro-3:sorta shawley$ buildozer osx debug
# Check configuration tokens
# Ensure build layout
# Check configuration tokens
# Preparing build
# Check requirements for osx
# Check if kivy-sdk-packager exists
# kivy-sdk-packager found at /Users/shawley/github/sorta/.buildozer/osx/platform
# check if Kivy.app exists in local dir
# Downloading kivy...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   178  100   178    0     0   1745      0 --:--:-- --:--:-- --:--:--  1745
100   162  100   162    0     0    543      0 --:--:-- --:--:-- --:--:--   543
# Extracting and installing Kivy...
hdiutil: attach failed - image not recognized
Traceback (most recent call last):
  File "/Users/shawley/anaconda3/bin/buildozer", line 11, in <module>
    load_entry_point('buildozer==0.35.dev0', 'console_scripts', 'buildozer')()
  File "/Users/shawley/anaconda3/lib/python3.6/site-packages/buildozer/scripts/client.py", line 13, in main
    Buildozer().run_command(sys.argv[1:])
  File "/Users/shawley/anaconda3/lib/python3.6/site-packages/buildozer/__init__.py", line 1058, in run_command
    self.target.run_commands(args)
  File "/Users/shawley/anaconda3/lib/python3.6/site-packages/buildozer/targets/osx.py", line 232, in run_commands
    func(args)
  File "/Users/shawley/anaconda3/lib/python3.6/site-packages/buildozer/targets/osx.py", line 245, in cmd_debug
    self.buildozer.prepare_for_build()
  File "/Users/shawley/anaconda3/lib/python3.6/site-packages/buildozer/__init__.py", line 173, in prepare_for_build
    self.target.check_requirements()
  File "/Users/shawley/anaconda3/lib/python3.6/site-packages/buildozer/targets/osx.py", line 99, in check_requirements
    self.ensure_kivyapp()
  File "/Users/shawley/anaconda3/lib/python3.6/site-packages/buildozer/targets/osx.py", line 93, in ensure_kivyapp
    self.download_kivy(kivy_app_dir, py_branch)
  File "/Users/shawley/anaconda3/lib/python3.6/site-packages/buildozer/targets/osx.py", line 77, in download_kivy
    check_call(('hdiutil', 'attach', cwd + '/Kivy{}.dmg'.format(py_branch)))
  File "/Users/shawley/anaconda3/lib/python3.6/subprocess.py", line 291, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '('hdiutil', 'attach', '/Users/shawley/github/sorta/.buildozer/osx/platform/kivy-sdk-packager-master/osx/Kivy3.dmg')' returned non-zero exit status 1.

Hi,

I received the same error when I've tried to package a kivy app on macOS Sierra 10.12.6 using buildozer.

Is there any workaround to fix this?

python --version
Python 3.6.2

buildozer --version
# Check configuration tokens
Buildozer 0.34

buildozer -v osx debug
# Check configuration tokens
# Ensure build layout
# Create directory /Volumes/Data/Development/ws/python/BfAndroidServer/.buildozer/osx/platform
# Create directory /Volumes/Data/Development/ws/python/BfAndroidServer/.buildozer/osx/app
# Check configuration tokens
# Preparing build
# Check requirements for osx
# Check if kivy-sdk-packager exists
# kivy-sdk-packager does not exist, clone it
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   127    0   127    0     0    224      0 --:--:-- --:--:-- --:--:--   224
100  193k    0  193k    0     0   140k      0 --:--:--  0:00:01 --:--:--  398k
Archive:  master.zip
7582d96094e5fc3ea3e2991241fbfa667e9791f3
   creating: kivy-sdk-packager-master/
  inflating: kivy-sdk-packager-master/.gitignore  
  inflating: kivy-sdk-packager-master/LICENSE  
  inflating: kivy-sdk-packager-master/README.md  
 extracting: kivy-sdk-packager-master/__init__.py  
  inflating: kivy-sdk-packager-master/appveyor.yml  
   creating: kivy-sdk-packager-master/linux/
   creating: kivy-sdk-packager-master/linux/debian/
  inflating: kivy-sdk-packager-master/linux/debian/README.md  
   creating: kivy-sdk-packager-master/linux/debian/daily/
  inflating: kivy-sdk-packager-master/linux/debian/daily/changelog  
 extracting: kivy-sdk-packager-master/linux/debian/daily/compat  
  inflating: kivy-sdk-packager-master/linux/debian/daily/control  
  inflating: kivy-sdk-packager-master/linux/debian/daily/copyright  
 extracting: kivy-sdk-packager-master/linux/debian/daily/kivy-doc.docs  
 extracting: kivy-sdk-packager-master/linux/debian/daily/kivy-examples.install  
  inflating: kivy-sdk-packager-master/linux/debian/daily/kivy-tools.install  
  inflating: kivy-sdk-packager-master/linux/debian/daily/python-kivy.install  
  inflating: kivy-sdk-packager-master/linux/debian/daily/python3-kivy.install  
  inflating: kivy-sdk-packager-master/linux/debian/daily/rules  
   creating: kivy-sdk-packager-master/linux/debian/stable/
  inflating: kivy-sdk-packager-master/linux/debian/stable/changelog  
 extracting: kivy-sdk-packager-master/linux/debian/stable/compat  
  inflating: kivy-sdk-packager-master/linux/debian/stable/control  
  inflating: kivy-sdk-packager-master/linux/debian/stable/copyright  
 extracting: kivy-sdk-packager-master/linux/debian/stable/kivy-doc.docs  
 extracting: kivy-sdk-packager-master/linux/debian/stable/kivy-examples.install  
  inflating: kivy-sdk-packager-master/linux/debian/stable/kivy-tools.install  
  inflating: kivy-sdk-packager-master/linux/debian/stable/python-kivy-bin.install  
 extracting: kivy-sdk-packager-master/linux/debian/stable/python-kivy-common.install  
  inflating: kivy-sdk-packager-master/linux/debian/stable/python-kivy.install  
  inflating: kivy-sdk-packager-master/linux/debian/stable/python3-kivy-bin.install  
 extracting: kivy-sdk-packager-master/linux/debian/stable/python3-kivy-common.install  
  inflating: kivy-sdk-packager-master/linux/debian/stable/python3-kivy.install  
  inflating: kivy-sdk-packager-master/linux/debian/stable/rules  
   creating: kivy-sdk-packager-master/osx/
  inflating: kivy-sdk-packager-master/osx/README.md  
  inflating: kivy-sdk-packager-master/osx/cleanup_app.sh  
  inflating: kivy-sdk-packager-master/osx/create-osx-bundle.sh  
  inflating: kivy-sdk-packager-master/osx/create-osx-dmg.sh  
   creating: kivy-sdk-packager-master/osx/data/
  inflating: kivy-sdk-packager-master/osx/data/MakeSymlinks  
  inflating: kivy-sdk-packager-master/osx/data/background.png  
  inflating: kivy-sdk-packager-master/osx/data/icon.icns  
  inflating: kivy-sdk-packager-master/osx/data/link_duplicate.py  
  inflating: kivy-sdk-packager-master/osx/data/script  
  inflating: kivy-sdk-packager-master/osx/package_app.py  
   creating: kivy-sdk-packager-master/win/
  inflating: kivy-sdk-packager-master/win/DST Root CA X3.pem  
 extracting: kivy-sdk-packager-master/win/__init__.py  
  inflating: kivy-sdk-packager-master/win/angle.py  
  inflating: kivy-sdk-packager-master/win/common.py  
   creating: kivy-sdk-packager-master/win/data/
  inflating: kivy-sdk-packager-master/win/data/README.txt  
  inflating: kivy-sdk-packager-master/win/data/kivy-bash.bat  
  inflating: kivy-sdk-packager-master/win/data/kivy.bat  
  inflating: kivy-sdk-packager-master/win/data/kivybash.rc  
  inflating: kivy-sdk-packager-master/win/data/kivyenv.sh  
  inflating: kivy-sdk-packager-master/win/data/kivywineenv.sh  
   creating: kivy-sdk-packager-master/win/data/tools/
  inflating: kivy-sdk-packager-master/win/data/tools/cython.bat  
 extracting: kivy-sdk-packager-master/win/data/tools/easy_install.bat  
  inflating: kivy-sdk-packager-master/win/data/tools/link_msysgit.bat  
  inflating: kivy-sdk-packager-master/win/data/tools/make-portable-python.py  
 extracting: kivy-sdk-packager-master/win/data/tools/pip.bat  
  inflating: kivy-sdk-packager-master/win/data/tools/register-python.py  
  inflating: kivy-sdk-packager-master/win/dropbox.py  
  inflating: kivy-sdk-packager-master/win/gdrive.py  
  inflating: kivy-sdk-packager-master/win/glew.py  
  inflating: kivy-sdk-packager-master/win/gstreamer.py  
  inflating: kivy-sdk-packager-master/win/kivy_win_sdk.py  
  inflating: kivy-sdk-packager-master/win/readme  
  inflating: kivy-sdk-packager-master/win/sdl2.py  
# check if Kivy.app exists in local dir
# Downloading kivy...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   178  100   178    0     0    793      0 --:--:-- --:--:-- --:--:--   794
100   162  100   162    0     0    255      0 --:--:-- --:--:-- --:--:--   843
# Extracting and installing Kivy...
hdiutil: attach failed - image not recognized
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.6/bin/buildozer", line 11, in <module>
    load_entry_point('buildozer==0.34', 'console_scripts', 'buildozer')()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/buildozer/scripts/client.py", line 13, in main
    Buildozer().run_command(sys.argv[1:])
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/buildozer/__init__.py", line 1058, in run_command
    self.target.run_commands(args)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/buildozer/targets/osx.py", line 232, in run_commands
    func(args)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/buildozer/targets/osx.py", line 245, in cmd_debug
    self.buildozer.prepare_for_build()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/buildozer/__init__.py", line 173, in prepare_for_build
    self.target.check_requirements()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/buildozer/targets/osx.py", line 99, in check_requirements
    self.ensure_kivyapp()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/buildozer/targets/osx.py", line 93, in ensure_kivyapp
    self.download_kivy(kivy_app_dir, py_branch)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/buildozer/targets/osx.py", line 77, in download_kivy
    check_call(('hdiutil', 'attach', cwd + '/Kivy{}.dmg'.format(py_branch)))
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/subprocess.py", line 291, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '('hdiutil', 'attach', '/Volumes/Data/Development/ws/python/BfAndroidServer/.buildozer/osx/platform/kivy-sdk-packager-master/osx/Kivy3.dmg')' returned non-zero exit status 1.

Hi,

I was able to locate the problem and fix the error.

Considering you are using python3, the main problem is that if buildozer doesn't find a file called Kivy3.app it tries to download a dmg file from http://kivy.org/downloads/1.10.0/Kivy-1.10.0-osx-python3.dmg which obviously does not exist. Thus the downloaded file is invalid and hdiutil ist not able to attach it. And here, the long way of the journey to fix that problem begins :-D

The big hurdle to overcome is to generate your own Kivy3.app inside the temporary directory .buildozer/osx/platform/kivy-sdk-packager-master/osx using the script "create-osx-bundle.sh", modify your buildozer installation to use python3 and fix the local python script package_app.py. Here are the steps to run everything on a fresh installed macOS Sierra 10.12.6. Finally, you got your packaged application as dmg-file. There is place for some optimization to speed up your build, but I leave this as an exercise ;-)

  1. Run this script to create your build environment to package for Android and macOS:

    setup_environment.sh

#!/usr/bin/env bash

# Install homebrew if not installed
which brew > /dev/null && echo "Homebrew is already installed..." || /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

# Install some homebrew packages
brew install python3 wget
# Create a symbolic link for pip
sudo ln -s /usr/local/bin/pip3 /usr/local/bin/pip

# Install JDK 8 for macOS
if [[ $(which java > /dev/null; echo $?) != "0" ]]; then
    pushd ~/Downloads
    wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-macosx-x64.dmg
    hdiutil attach jdk-8u171-macosx-x64.dmg && sudo /usr/sbin/installer -pkg /Volumes/JDK\ 8\ Update\ 171/JDK\ 8\ Update\ 171.pkg -target /
    hdiutil detach /Volumes/JDK\ 8\ Update\ 171/
    rm jdk-8u171-macosx-x64.dmg
    popd
else
    echo "Java is already installed..."
fi

brew install gradle

# Install Android SDK-Tools for macOS
if [[ $(which sdkmanager > /dev/null; echo $?) != "0" ]]; then
    pushd ~/Downloads
    wget https://dl.google.com/android/repository/sdk-tools-darwin-3859397.zip
    unzip sdk-tools-darwin-3859397.zip
    rm sdk-tools-darwin-3859397.zip
    mkdir -p ~/Library/Frameworks/Android && sudo @mv tools ~/Library/Frameworks/Android
    PATH=$PATH:~/Library/Frameworks/Android/tools/bin/ && export PATH
    popd
else
    echo "Android sdkmanager is already installed..."
fi

# Accept all licenses and install Android platform and build tools.
yes | sdkmanager --licenses
sdkmanager "platforms;android-21"
sdkmanager "build-tools;27.0.3"

# Install Crystax NDK 10.3.2 (necessary for python-for-android with python3)
if [ ! -d ~/Library/Frameworks/crystax-ndk-10.3.2 ]; then
    pushd ~/Downloads
    wget https://www.crystax.net/download/crystax-ndk-10.3.2-darwin-x86_64.tar.xz
    tar xf crystax-ndk-10.3.2-darwin-x86_64.tar.xz
    rm crystax-ndk-10.3.2-darwin-x86_64.tar.xz
    sudo mv crystax-ndk-10.3.2 ~/Library/Frameworks
    popd
else
    echo "CrystaX NDK 10.3.2 is already installed..."
fi

# Install cython 0.25.2
pip3 install "cython == 0.25.2"

# Install python-for-android and kivy
pip3 install "python-for-android == 0.6.0"
pip3 install "kivy = 1.10.0"

# Install virtualenv
pip3 install "virtualenv == 16.0.0"

# Install buildozer
pip3 install "buildozer == 0.34"

############################################
# Install stuff for macOS packaging.
############################################

## Install platypus
if [[ $(which platypus > /dev/null; echo $?) != "0" ]]; then
    pushd ~/Downloads
    wget https://www.sveinbjorn.org/files/software/platypus/platypus5.2.zip
    unzip platypus5.2.zip
    rm platypus5.2.zip

    sudo cp Platypus-5.2/Platypus.app/Contents/Resources/platypus_clt /usr/local/bin/
    sudo mv /usr/local/bin/platypus_clt /usr/local/bin/platypus

    sudo mkdir -p /usr/local/share/platypus
    sudo cp Platypus-5.2/Platypus.app/Contents/Resources/ScriptExec /usr/local/share/platypus
    sudo chmod +x /usr/local/share/platypus/ScriptExec
    sudo cp -R Platypus-5.2/Platypus.app/Contents/Resources/MainMenu.nib /usr/local/share/platypus

    rm -Rf Platypus-5.2
    popd
else
    echo "Platypus is already installed..."
fi

## Install GStreamer
if [[ ! -d /Library/Frameworks/GStreamer.framework ]]; then
    pushd ~/Downloads

    # You need both, gstreamer runtime binaries and libs and the development package including the headers.

    wget https://gstreamer.freedesktop.org/data/pkg/osx/1.14.0/gstreamer-1.0-devel-1.14.0-x86_64.pkg
    sudo /usr/sbin/installer -pkg gstreamer-1.0-devel-1.14.0-x86_64.pkg -target /
    rm gstreamer-1.0-devel-1.14.0-x86_64.pkg

    wget https://gstreamer.freedesktop.org/data/pkg/osx/1.14.0/gstreamer-1.0-1.14.0-x86_64.pkg
    sudo /usr/sbin/installer -pkg gstreamer-1.0-1.14.0-x86_64.pkg -target /
    rm gstreamer-1.0-1.14.0-x86_64.pkg

    popd
else
    echo "GStreamer is already installed..."
fi

## Install SDL2 stuff
if [[ ! -d /Library/Frameworks/SDL2.framework ]]; then
    pushd ~/Downloads
    wget https://www.libsdl.org/release/SDL2-2.0.4.dmg
    hdiutil attach SDL2-2.0.4.dmg && sudo cp -R /Volumes/SDL2/SDL2.framework /Library/Frameworks
    hdiutil detach /Volumes/SDL2
    rm SDL2-2.0.4.dmg
    popd
else
    echo "SDL2 is already installed..."
fi

if [[ ! -d /Library/Frameworks/SDL2_image.framework ]]; then
    pushd ~/Downloads
    wget https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.1.dmg
    hdiutil attach SDL2_image-2.0.1.dmg && sudo cp -R /Volumes/SDL2_image/SDL2_image.framework /Library/Frameworks
    hdiutil detach /Volumes/SDL2_image
    rm SDL2_image-2.0.1.dmg
    popd
else
    echo "SDL2_image is already installed..."
fi

if [[ ! -d /Library/Frameworks/SDL2_ttf.framework ]]; then
    pushd ~/Downloads
    wget https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-2.0.14.dmg
    hdiutil attach SDL2_ttf-2.0.14.dmg && sudo cp -R /Volumes/SDL2_ttf/SDL2_ttf.framework /Library/Frameworks
    hdiutil detach /Volumes/SDL2_ttf
    rm SDL2_ttf-2.0.14.dmg
    popd
else
    echo "SDL2_ttf is already installed..."
fi

if [[ ! -d /Library/Frameworks/SDL2_mixer.framework ]]; then
    pushd ~/Downloads
    wget https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.1.dmg
    hdiutil attach SDL2_mixer-2.0.1.dmg && sudo cp -R /Volumes/SDL2_mixer/SDL2_mixer.framework /Library/Frameworks
    hdiutil detach /Volumes/SDL2_mixer
    rm SDL2_mixer-2.0.1.dmg
    popd
else
    echo "SDL2_mixer is already installed..."
fi

## Install libintl.8.dylib
if [[ ! -f /usr/local/lib/libintl.8.dylib ]]; then
    brew install gettext
    sudo ln -s /usr/local/Cellar/gettext/0.19.8.1/lib/libintl.8.dylib /usr/local/lib/
else
    echo "libintl.8.dylib is already installed..."
fi
  1. Run this script inside your project root:

    build_for_osx.sh

#!/usr/bin/env bash

PYTHON_VERSION="3.6.5"
PYTHON_EXEC_VERSION="python3.6"

# Change buildozer to use a python3.6 virtual environment instead of python2.7
pushd /usr/local/lib/$PYTHON_EXEC_VERSION/site-packages/buildozer
sed -i '' 's;virtualenv --python=python2.7;virtualenv --python=python3.6;g' __init__.py
popd

# Change the osx target to use python3 to run the package_app.py script.
pushd /usr/local/lib/$PYTHON_EXEC_VERSION/site-packages/buildozer/targets
sed -i '' "s;'python', 'package_app.py';'python3', 'package_app.py';g" osx.py
popd

# First run fails but is necessary to create the directory .buildozer
buildozer osx debug
if [[ "$?" != 0 ]]; then
    echo "[INFO] First run of buildozer failed as expected."
fi

# Go into the kivy sdk directory to create the file Kivy.app
pushd .buildozer/osx/platform/kivy-sdk-packager-master/osx
rm -Rf Kivy3.dmg
sed -i '' "s;3.5.0;$PYTHON_VERSION;g" create-osx-bundle.sh
sed -i '' "s;python3.5;$PYTHON_EXEC_VERSION;g" create-osx-bundle.sh
sed -i '' "s;rm {};rm -f {};g" create-osx-bundle.sh
./create-osx-bundle.sh python3
# Repair symlink
pushd Kivy.app/Contents/Resources/venv/bin/
rm ./python3
ln -s ../../../Frameworks/python/$PYTHON_VERSION/bin/python3 .
popd

# Go into kivy sdk directory and fix the script package_app.py to use the specified python version.
pushd .buildozer/osx/platform/kivy-sdk-packager-master/osx
sed -i '' "s;3.5.0;$PYTHON_VERSION;g" package_app.py
# Make it python3 compatible by removing decode(...) calls.
sed -i '' "s;\.decode('utf-8');;g" package_app.py
popd

popd

buildozer osx debug

I was able to locate the problem and fix the error.

This has been extremely helpful in helping me to get kivy to build in MacOS (via GitHub actions) using buildozer. I'm not sure why this isn't documented on the official documentation, since it's--what--2 years old?

I did find a couple issues

  1. it appears that the syntax has since changed for ./create-osx-bundle.sh -- which now takes the version of kivy followed by the version of python. So change
./create-osx-bundle.sh python3

to this (or similar):

./create-osx-bundle.sh 1.11.1 3.7.3
  1. I found that I had to comment out these two blocks
## Change buildozer to use a python3.7 virtual environment instead of python2.7
#pushd /usr/local/lib/$PYTHON_EXEC_VERSION/site-packages/buildozer
#sed -i '' 's;virtualenv --python=python2.7;virtualenv --python=python3.7;g' __init__.py
#popd
#
## Change the osx target to use python3 to run the package_app.py script.
#pushd /usr/local/lib/$PYTHON_EXEC_VERSION/site-packages/buildozer/targets
#sed -i '' "s;'python', 'package_app.py';'python3', 'package_app.py';g" osx.py
#popd
  1. I had to remove 'python3' from the list of requirements in the buildozer.spec file, else it tries to do a pip3 install python3, which of course fails (not sure why this is the default in the spec file from buildozer init

  2. I had to add a bogus item to requirements.txt, because if 'kivy' is the only item, it throws a fit. I put pip in it, so the requirements.txt file's contents is:

pip
  1. I found that the sed command to drop the decode of utf-8 actually breaks it, and I needed to remove it
#sed -i '' "s;\.decode('utf-8');;g" package_app.py

I'm almost there: currently everything works except the python binary that's shipped with buildozer at myapp.app/Contents/Resources/python. Not sure why, but apparently the python binaries downloaded by buildozer via pyenv change every execution. smh.

@maltfield @astahlhofen Were you ever able to figure this issue out? I am currently struggling with the same issue and have not been able to get the above strategy to work. Any help would be really appreciated!

I recommend that you just fork this repo. It has build scripts that "just work" to spit-out a self-contained kivy executable app in Linux, Windows, and MacOS:

I ended up abandoning buildzoer (mainly because the python binary it was downloading through the ridiculously complex process described above differs on every execution and therefore wasn't deterministic). I spent days on it, then got PyInstaller working in less than a day.

I built the above-linked repo to make this easier for folks to build apps in kivy without having to setup a build environment and fight with the build tools like I did for about a month.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

zengxianyu picture zengxianyu  Â·  7Comments

martinel21 picture martinel21  Â·  4Comments

Quantenradierer picture Quantenradierer  Â·  7Comments

abdullahrss picture abdullahrss  Â·  5Comments

D3f0 picture D3f0  Â·  3Comments