如何使用 Python 开发 iOS 程序?

作者:陶海军

常见支持开发 iOS 的第三方语言

  • Js 语言
  • Lua 语言
  • Ruby 语言(RubyMotion)

怎么用 Python 开发 iOS 程序

其实我们最主要解决的就是下面几件事情:

  • 在 iOS App 中安装 Python 解释器
  • 搭建 Python 和 objc 通信的桥梁(rubicon)
  • 如何配置工程并开发

在 iOS App 中安装 Python 解释器

Python-iOS-support

pybee 开源了一个可以嵌入到 iOS 工程中的 Python 编译脚本,具体位置在这:

https://github.com/pybee/Python-iOS-support

默认是使用 Python 3.4.2, 编译 x86_64、i386、ARMv7、ARMv7s、ARM64 共 5 个版本,然后打成一个臃肿包,可选 framework 或者.a

如果真的要用于生产环境的话,只要把 Makefile 中的

TARGETS-iOS=iphonesimulator.x86_64 iphonesimulator.i386 iphoneos.armv7 iphoneos.armv7s iphoneos.arm64

修改: TARGETS-iOS=iphoneos.armv7 iphoneos.arm64

我们只需要支持 ARMv7 和 ARM64 即可,ARMv7s 可以兼容 ARMv7,所以可以让包小一些。

Python 解释器编译

cd 到 Python-iOS-support 目录,设置编译参数,直接编译。我们这只需要 iOS 版本,所以直接 make iOS 即可。

Python 解释器framework

如果编译出问题,可以直接下载编译好的版本:

https://github.com/pybee/Python-iOS-support/releases

搭建 Python 和 objc 通信的桥梁

rubicon-objc 是一个连接 Python 和 objc 的桥梁。

首先,我们需要安装一下:

打开 mac 终端运行下面命令 pip install rubicon-objc

Python 写 iOS 语法

1)调用 objc 的方式和以前 objc 直接的写法很像.

2)方法名不使用:,而是使用_ 如:OC 代码:[label setText:@"xxx title"]

Python 代码:label.setText_("xxx title")

3)不能使用 nil,Python 里面使用 None 代替 如:myArray = NSArray.arrayWithObjects_("ok", "ok1", "ok2", None)

Python 可支持 iOS 插件功能

1、iOS 内嵌 lua wax 可实现 app 下发插件能力。

2、iOS 内嵌 jsPatch 可实现 app 下发插件能力。

3、iOS 如果内嵌 Python 解释器与 rubicon 通信框架,利用 OC runtime 同样可以下发 python 文件来实现下发插件能力。

Python 开发 iOS 总结

1、没有 Oc 语法高亮 IDE 的支持 ,OC 系统库方法名较长开发者必须熟记各名方法名,这无疑给开发增加难度。

2、Python 解释器过大生成的只有 ARMv7 和 ARM64 的 Python.framework 就已经有 20M 了;相比较而言,lua 的解释器就只有 200k。

3、技术支持 rubicon 没有任何官方文档;开者过程出现一些 rubicon 框架自身的 BUG,无人解决。

一个可以编译执行的 demo

运行结果如下:

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏陈本布衣

布衣之路(一):VMware虚拟机+CentOS系统安装

前言:布衣博主乃苦逼的Java程序猿一枚,虽然工作中不会涉及系统运维,但是开发的项目总还是要部署到服务器做一些负载均衡、系统兼容性测试、系统集成等等骚操作,而...

3106
来自专栏北京马哥教育

Linux 下各文件夹的结构说明及用途介绍

/home:用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示。

760
来自专栏hotqin888的专栏

EngineerCMS开发ONLYOFFICE文档协作的权限管理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

603
来自专栏伦少的博客

Redis Cluster 安装配置

转载请务必注明原创地址为:http://dongkelun.com/2018/01/09/redisClusterDeployment/

3888
来自专栏IT笔记

Linux下JProfiler 9安装部署及使用

JProfiler[1] 是一个商业授权的Java剖析工具,由EJ技术有限公司,针对的Java EE和Java SE应用程序开发的。 它把CPU、执行绪和内存的...

3979
来自专栏james大数据架构

0基础搭建Hadoop大数据处理-环境

   由于Hadoop需要运行在Linux环境中,而且是分布式的,因此个人学习只能装虚拟机,本文都以VMware Workstation为准,安装CentOS7...

1857
来自专栏ytkah

修改dedecms面包屑导航的首页链接关键字

  dedecms面包屑导航默认是"主页>分类>二级分类>",我们知道链接的锚文字对排名有一定影响,这时可以考虑将“主页”改成具体的关键字,那么如何修改dede...

2615
来自专栏北京马哥教育

把docker镜像当作桌面系统来用

博主一直都很喜欢思考怎样管理装在自己电脑上的桌面系统,这篇算是前作能当主力,能入虚拟机,还能随时打包带走,Linux就是这么强大的后续探索吧。

710
来自专栏一“技”之长

自己动手设计一款iOS自动构建发布工具 原

    本篇博客就是基于上面的想法,给大家介绍编写一个简洁的自动化工具的具体步骤与核心要点。在编写本博客时,我也基于这样的想法开发了一款Mac上的iOS自动构建...

612
来自专栏Web项目聚集地

Linux养成计划(一)

这篇文章介绍关于Linux系统的安装以及网络配置,关于虚拟机配置中网络的三个模式区别进行详细讲解。学习Linux对于后端开发人员是很有必要的,结合实际开发,Li...

732

扫码关注云+社区