18. iOS 打包

优质
小牛编辑
131浏览
2023-12-01

特别注意

目前还只能用 Python 2.7 来针对 iOS 平台打包应用程序。 Python 3.3 以上的支持还在开发中。

The overall process for creating a package for IOS can be explained in 4 steps:

总体上创建一个 iOS 应用程序需要四步:
(译者注:对,你没有看错,官方文档就是写的 4 steps,所以我特地留下了上面这行原文,可见估计 Kivy 的开发者们也没太注意这点小错误吧。。。)

  1. 针对 iOS 编译 Python 和 需要的模块;
  2. 创建一个 Xcode 项目,链接你的源代码;
  3. 进行定制修改。

预先准备

首先要安装一些依赖包,比如 cython,autotools 等等。Kivy 的开发者推荐你使用 Homebrew 来安装这些依赖包:

  1. brew install autoconf automake libtool pkg-config
  2. brew link libtool
  3. sudo easy_install pip
  4. sudo pip install cython==0.23

更多细节参考 IOS Prerequisites。一定要在下一步开始之前保证依赖关系都满足了。

编译发布版

Open a terminal, and type:

打开终端,输入下面的命令:

  1. git clone git://github.com/kivy/kivy-ios
  2. cd kivy-ios
  3. ./toolchain.py build kivy

Python 发型版中大部分内容都会被打包到 python27.zip 这个文件中。如果遇到了问题,可以参考谷歌论坛用户组 或者 kivy-ios 项目页面

创建一个 Xcode 项目

在进行下一步之前,要保证你的程序运行起点是一个名为 main.py 的文件。

Kivy 官方提供了一个脚本,可以创建一个初始的 Xcode 项目。在下面的代码样例中,把 Touchtracer 这个换成你的项目名字。名字一定不能有空格或者其他非法字符。(译者注:吐槽一下,那什么算是非法字符倒是说说啊。)

  1. ./toolchain.py create <title> <app_directory>
  2. ./toolchain.py create Touchtracer ~/code/kivy/examples/demo/touchtracer

特别注意

上面这一步中,应用程序的路径一定要用完整路径。

接下来会有一个名字为<title>-ios 的目录被创建,里面就是 Xcode 项目了。可以打开这个项目:

  1. open touchtracer-ios/touchtracer.xcodeproj

然后点击 Play 运行,就可以了。

特别注意

每次点击 Play 的时候, 你的应用目录都会同步到<title>-ios/YourApp 这个目录。不要直接对这个目录进行修改。

更新 Xcode 项目project

举个例子,加入你要在你的项目中添加 numpy,但在之前创建这个 Xcode 项目的时候没有编译进去。那首先就构建 numpy :

  1. ./toolchain.py build numpy

然后更新一下你的 Xcode 项目:

  1. ./toolchain.py update touchtracer-ios

这样所有相关的链接库、框架就都被添加到你的 Xcode 项目里去了。

定制修改

有很多方法能对你的应用进行修改和设置。可以参考 kivy-ios 的文档来查看更详细的信息。

已知的问题

目前关于 iOS 打包的所有已知问题都可以在 Kivy-iOS 的 GitHub issues 页面 查看到。如果你遇到的问题不在其中,请创建一个新的 issue,Kivy 开发者会尽快跟进处理。

已知的问题中绝大部分都太技术性了,没必要在这里写了,其中一个重要的问题是目前没办法移除一些链接库(比如 SDL_Mixer) ,因为 Kivy 项目需要这些链接库。在后续的版本中, Kivy 开发者会解决掉这些问题。

FAQ

" class="reference-link">程序异常退出¶

默认情况下,所有控制台和文件中的 print 语句都被忽视了。如果你运行程序的时候碰到异常状况了,可以激活 log 日志功能,在 main.m 文件中把下面这一行去掉注释:

  1. putenv("KIVY_NO_CONSOLELOG=1");

然后你就可以在 Xcode 控制台中看到 Kivy 的日志了。

渣果公司怎样才能接受一个 Python APP?

Kivy 开发者将所有链接库的 app 二进制文件合并成了一个名为 libpython 的二进制文件。这就意味着所有二进制模块都会提前价值,所以不会有动态加载。

是否已经向渣果的 App store 提交过 Kivy 应用?

是,例如下面的就是:

更详细的列表可以参考 Kivy wiki.