如何使用 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 条评论
登录 后参与评论

相关文章

来自专栏逢魔安全实验室

DDCTF 2018 逆向 baby_mips Writeup

3035
来自专栏hanlp学习笔记

如何在ubuntu使用hanlp

  以前,我对大部分的处理中文分词都是使用python的结巴分词工具,该分词工具是在线调用API, 关于这个的分词工具的原理介绍,我推荐一个好的博客:

40
来自专栏华仔的技术笔记

智能合约开发工具篇

4317
来自专栏技术墨客

Nodejs学习笔记(1)——安装nodejs

    关于大名鼎鼎的Nodejs是什么就不用再介绍了,他的牛逼之处数都数不完——让javascript称霸全宇宙、将一个只用于前端的编程语言同时可以制霸前后端...

632
来自专栏cloudskyme

JRuby——Java和Ruby的强强联合

什么是JRuby JRuby是一个纯Java实现的Ruby解释器。通过JRuby,你可以在JVM上直接运行Ruby程序,调用Java的类库。很多Java编写的...

3314
来自专栏友弟技术工作室

solidity语言介绍以及开发环境准备

2343
来自专栏hadoop学习笔记

全文检索Solr集成HanLP中文分词

以前发布过HanLP的Lucene插件,后来很多人跟我说其实Solr更流行(反正我是觉得既然Solr是Lucene的子项目,那么稍微改改配置就能支持Solr),...

1253
来自专栏编程坑太多

有哪些程序员特有的习惯?

852
来自专栏程序人生 阅读快乐

Python核心编程(第3版)

《Python核心编程(第3版)》是经典畅销图书《Python核心编程(第二版)》的全新升级版本,总共分为3部分。第1部分为讲解了Python的一些通用应用,包...

492
来自专栏Ryan Miao

Ubuntu安装Java8和Java9

前言 系统:Ubuntu 16.04 软件: Java8, Java9 Tips: Java 9 的代码由于提供了新特性,所以有些代码并不支持向后兼容。也就...

3318

扫码关注云+社区