Package: kivy-ios
Kivy for iOSThis toolchain is designed to compile the necessary libraries for iOS to run
your application and manage the creation of the Xcode project.We do not provide any binary distributions of this toolchain.
You do need to compile it at least once before creating your Xcode project.The toolchain supports:iPhone Simulator (x86_64)iPhone / iOS (arm64)These recipes are not ported to the new toolchain yet:lxmlInstallation & requirementsBefore we start, we strongly advise using a Python virtual environment to install Python packages.python3 -m venv venv
  . venv/bin/activateInstallKivy for iOS from PyPIwith pip like any Python package.pip3 install kivy-iosAdditionally, you would need a few system dependencies and configuration.Xcode 13 or above, with an iOS SDK and command line tools installed:xcode-select --installUsing brew, you can install the following dependencies:brew install autoconf automake libtool pkg-config
brew link libtoolUsing the toolchainAny Python extensions or C/C++ library must be compiled: you need to have what
we call arecipeto compile it. For example, Python, libffi, SDL2, SDL_image,
freetype... all the dependencies, compilation, and packaging instructions are
contained in arecipe.You can list the available recipes and their versions with:$ toolchain recipes
audiostream  master
click        7.1.2
cymunk       master
ffmpeg       n4.3.1
ffpyplayer   v3.2
flask        1.1.2
freetype     2.5.5
hostlibffi   3.2.1
hostopenssl  1.1.1g
hostpython3  3.7.1
ios          master
itsdangerous 1.1.0
jinja2       2.11.2
kivy         1.10.1
libffi       3.2.1
libjpeg      v9a
libpng       1.6.26
markupsafe   1.1.1
moodstocks   4.1.5
numpy        1.16.4
openssl      1.1.1g
photolibrary master
pillow       6.1.0
plyer        master
pycrypto     2.6.1
pykka        1.2.1
pyobjus      master
python3      3.7.1
pyyaml       3.11
sdl2         2.0.8
sdl2_image   2.0.0
sdl2_mixer   2.0.0
sdl2_ttf     2.0.12
werkzeug     1.0.1Then, start the compilation with:$ toolchain build python3 kivyYou can build recipes at the same time by adding them as parameters:$ toolchain build python3 openssl kivyRecipe builds can be removed via the clean command e.g.:$ toolchain clean opensslYou can install package that don't require compilation with pip::$ toolchain pip install plyerThe Kivy recipe depends on several others, like the sdl* and python recipes.
These may, in turn, depend on others e.g. sdl2_ttf depends on freetype, etc.
You can think of it as follows: the kivy recipe will compile everything
necessary for a minimal working version of Kivy.Don't grab a coffee, just do dinner. Compiling all the libraries for the first
time, 2x over (remember, 2 archs, x86_64, arm64) will take time.For a complete list of available commands, type:$ toolchainCreate the Xcode projectThetoolchain.pycan create the initial Xcode project for you::$ toolchain create <title> <app_directory>
$ toolchain create Touchtracer ~/code/kivy/examples/demo/touchtracerYour app directory must contain a main.py. A directory named<title>-ioswill be created, with an Xcode project in it.
You can open the Xcode project using::$ open touchtracer-ios/touchtracer.xcodeprojThen click onPlay, and enjoy.Did you know?Every time you pressPlay, your application directory will be synced to
the<title>-ios/YourAppdirectory. Don't make changes in the -ios
directory directly.Configuring your AppYou can configure and customize your app in various ways:Set the icon and launch images in XCode. Note that XCode requires that you
specify these assets per device or/and iOS version.When you first build your XCode project, a 'main.m' file is created in your
XCode project folder. This file configures your environment variables and
controls your application startup. You can edit this file to customize your
launch environment.Kivy uses SDL, and as soon as the application starts the SDL main, the launch
image will disappear. To prevent that, you need to have 2 files namedDefault.pngandDefault-Landscape.pngand put them
in theResourcesfolder in Xcode (not in your application folder)Did you know?If you wish to restrict your app's orientation, you should do this via
the 'export_orientation' function in 'main.m'. The XCode orientation
settings should be set to support all.Using recipesRecipes are used to install and compile any libraries you may need to use. These
recipes follow the same format as those used by thePython-for-Androidsister project.
Please refer to therecipe documentationthere for more detail.Reducing the application sizeIf you would like to reduce the size of your distributed app, there are a few
things you can do to achieve this:Minimize thebuild/pythonX/lib/pythonXX.zip: this contains all the python
modules. You can edit the zip file and remove all the files you'll not use
(reduce encodings, remove xml, email...)Go to the settingspanel>build, search for"strip"options, and
triple-check that they are all set toNO. Stripping does not work with
Python dynamic modules and will remove needed symbols.By default, the iOS package compiles binaries for all processor
architectures, namely x86_64 and arm64 as per the guidelines from
Apple. You can reduce the size of your ipa significantly by removing the
x86_64 architecture as they are used only for the emulator.The procedure is to first compile/build all the host recipes as is:toolchain build hostpython3Then build all the rest of the recipes using --arch=arm64
arguments as follows:toolchain build python3 kivy --arch=arm64Note that these packages will not run in the iOS emulators, so use them
only for deployment.Usagetoolchain <command> [<args>]

Available commands:
    build         Build a recipe (compile a library for the required target
                    architecture)
    clean         Clean the build of the specified recipe
    distclean     Clean the build and the result
    recipes       List all the available recipes
    status        List all the recipes and their build status

Xcode:
    create        Create a new xcode project
    update        Update an existing xcode project (frameworks, libraries..)
    launchimage   Create Launch images for your xcode project
    icon          Create Icons for your xcode project
    pip           Install a pip dependency into the distribution
    pip3          Install a pip dependency into the python 3 distributionDevelopmentAlternatively, it's also possible to clone the repository and use all the
described commands in the above sections.
Clone and install it to your local virtual environment:git clone https://github.com/kivy/kivy-ios.git
cd kivy-ios/
python3 -m venv venv
. venv/bin/activate
pip install -e .Then use thetoolchain.pyscript:python toolchain.py --helpFAQFatal error: "stdio.h" file not foundYou need to install the Command line tools:xcode-select --installError: SDK "iphonesimulator" cannot be locatedXcode path is not set up correctly. Run the following command to fix this:sudo xcode-select --switch <YOUR_XCODEAPP_PATH>(Change<YOUR_XCODEAPP_PATH>to the path that reflects your XCode installation, usually is/Applications/Xcode.app)Bitcode is partially supported now (Xcode setting ENABLE_BITCODE can be set to Yes).Supported recipes: python3, kivy, sdl2, sdl2_image, sdl2_mixer, and libffiYou don't have permissions to runIt is due to invalid archs, search for them and check it. Maybe you
targetted a simulator but have only arm64. Maybe you want to target
your iPad but it is only x86_64.Why does the python multiprocess/subprocess module not work?The iOS application model does not currently support multi-processing in a
cross-platform compatible way. The application design focuses on minimizing
processor usage (to minimize power consumption) and promotes analternative concurrency model.If you need to make use of multiple processes, you should consider usingPyObjusto leverage native iOS
functionals for this.SupportIf you need assistance, you can ask for help on our mailing list:User Group :https://groups.google.com/group/kivy-usersEmail      :kivy-users@googlegroups.comWe also have a Discord channel:Server     :https://chat.kivy.orgChannel    : #supportContributingWe love pull requests and discussing novel ideas. Check out ourcontribution guideand
feel free to improve Kivy for iOS.The following mailing list and IRC channel are used exclusively for
discussions about developing the Kivy framework and its sister projects:Dev Group :https://groups.google.com/group/kivy-devEmail     :kivy-dev@googlegroups.comDiscord channel:Server     :https://chat.kivy.orgChannel    : #devLicenseKivy for iOS is released under the terms of the MIT License. Please refer to the
LICENSE file.BackersThank you to all our backers! 🙏 [Become a backer]SponsorsSupport this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]