iospython开发工具_使用Python开发iOS程序
們見過使用JS、Lua、Ruby開發(fā)iOS程序的,但是基本沒有見過使用Python開發(fā)iOS程序(軟件)的,這是為什么?關于這個問題,我后面會回答。
那么,怎么用Python開發(fā)iOS程序呢?其實我們最主要解決的就是下面幾件事情:
在iOS App中安裝Python解釋器。
搭建Python和objc通信的橋梁。
如何配置工程并開發(fā)。
如果不使用UIKit這些,那么就要使用OpenGL ES這些了,這種方式,主要是用于開發(fā)游戲的,我們這里不涉及這些。
當然,以下所有內容都是在一臺已經安裝了Xcode的Mac上進行的。
在iOS App中安裝Python解釋器
Python-iOS-support
pybee開源了一個可以嵌入到iOS工程中的Python編譯腳本,具體位置在這:
默認是使用Python 3.4.2,編譯x86_64、i386、ARMv7、ARMv7s、ARM64共5個版本,然后打成一個臃腫包,可選framework或者.a。
如果真的要用于生產環(huán)境的話,只要把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 3.4.x
Python 3.5.x
按照作者的說法,Python版本是可以更換的,但是我嘗試過,我將最新版本的Python 2.7.11放進去,是無法編譯成功的。
有一些人提到了這個問題,但是作者還是建議使用3.4.x或者3.5.x版本,2.7x版本他已經不再支持了。
修改Python版本的地方在:
PYTHON_VERSION=3.4.2
替換為其他版本即可。
編譯
切到Python-iOS-support目錄,設置編譯參數(shù),直接編譯。我們這只需要iOS版本,所以直接make iOS即可。
編譯成功之后,會在build目錄上生成Python.framework和OpenSSL.framework。
如果編譯出問題,或者不想煩這個事情的,可以直接下載編譯好的版本:
搭建Python和objc通信的橋梁
rubicon-objc是一個連接Python和objc的橋梁。
首先,我們需要安裝一下:
pip install rubicon-objc
那么,它有什么用呢,這就有意思了,我們來看一下它是這么寫的。
這塊的內容,前提條件是你要懂點iOS。
#!/usr/bin/python
# -*- coding: utf-8 -*-
from ctypes import cdll
from ctypes import util
from rubicon.objc import ObjCClass, objc_method
# 載入Foundation框架
cdll.LoadLibrary(util.find_library('Foundation'))
# 獲取NSArray類
NSArray = ObjCClass("NSArray")
# 等同于
# NSArray *myArray = [NSArray arrayWithObjects:@"ok", @"ok1", @"ok2", nil]
myArray = NSArray.arrayWithObjects_("ok", "ok1", "ok2", None)
print myArray.count
print myArray.indexOfObject_("ok2")
輸出結果是:
是不是很好玩!
調用objc的方式和以前objc直接的寫法很像,只是有一些需要改變,比如:
方法名不使用:,而是使用_。
多參數(shù)需要使用Python的方式,比如objc里面的方法是:
**objc:**
-(BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;
**Python**
array. writeToURL_atomically_(url, atomically)
不能使用nil,Python里面使用None代替。
等等。
具體用法大家可以自行探究一下。
如何配置工程并開發(fā)
創(chuàng)建工程
Python所需要的工程和直接用Xcode創(chuàng)建的不太一樣,手動改寫的話,還比較麻煩,所以我們直接用模板工具生成。
cookiecutter是一個可以在模板中快速創(chuàng)建工程的一個工具,Python-iOS-template是pybee開源的一個使用Python開發(fā)iOS工程的模板。
首先,我們需要安裝cookiecutter,直接使用pip安裝即可:
pip install cookiecutter
安裝好后,直接使用cookiecutter命令創(chuàng)建工程:
cookiecutter https://github.com/pybee/Python-iOS-template
建好的工程目錄結構如下:
app目錄是放置我們創(chuàng)建的python文件的地方。 app_packages目錄是放三方包的地方,等同于我們在電腦端的site_packages文件夾。
工程里面可以同時存在objc文件和python文件,兩者可以各自運行,并不沖突。
完善工程
Talk is cheap, show me the code.
不得不承認,rubicon-objc幾乎沒有文檔。
我在github上找到一個項目,iOS-Python-Project。這是使用rubicon-objc開發(fā)的一個Python-iOS工程,但是很可惜的是,我這邊運行出錯。
我借鑒了iOS-Python-Project,修改了一個可以運行的工程,有興趣的可以去下載一下。
工程里面并沒有集成Python.framework和OpenSSL.framework,因為這兩個framework太大了,clone下來的時間會很長,所以不如直接在Github上下載編譯好的framework,地址在這邊:
下好了之后,framework一般放置于根目錄下面,相對于我這個demo,那么放置的目錄就是python-iOS/,和apptest.xcodeproj同級。
這個demo運行起來大概是這個樣子:
demo中只修改了rootViewController的背景,然后在上面添加了一個label。
當然,它還能做很多事情,怎么做,我也不知道。
它的文檔太少了,我甚至不知道怎么才能使用CGRect,因為它不是一個類,我無法import進來。
總結
開頭我提到為什么很少有人會使用Python去開發(fā)iOS程序(軟件),我個人認為主要有以下幾個原因:
IDE的支持 – 如果你已經在我的demo上寫了幾行,你會發(fā)現(xiàn),沒有任何objc庫的提示。本來我們objc這門語言就是寫法很長很詳細的,要想直接手寫出整個方法名,那真是X了🐶了。
系統(tǒng)庫 – 一般來說,iOS程序一般至少都要有幾個頁面的,那么UIKit基本就是我們必須的,除非你想使用OpenGL ES畫,或者直接HTML等。而要用到UIKit,肯定要寫一堆是Python但是完全像objc的代碼,因為那方法名就是這么定義的。這樣寫太累了,不如直接用objc寫。
Python解釋器過大 – 我生成的只有ARMv7和ARM64的Python.framework就已經有20M+了,再加上好幾M的OpenSSL.framework,這得多大。即使打到生產包里面,我相信估計也有10M~20M了,相比較而言,lua的解釋器就只有200k。
技術支持 – 連我們上面說到的rubicon都沒有文檔,萬一出事了,找誰解決?社區(qū)上也沒幾個人這么干,提問的話,又有幾個人可以幫助你。Ruby可以用RubyMotion來開發(fā)iOS,但是它還是有一些人用的。
在文章最后,我只想說:
雖然Python不適合開發(fā)iOS程序,但是,很好玩啊。
這就夠了。
我們給App做hotfix的時候,如果不算HTML方案的話,主要有兩種,一種是lua的wax,還有一種是js的JSPatch。
lua寫patch的時候也具有上面的1、2兩個缺點,但是補丁這種東西本來就很短,稍微寫點也無妨。
或許,你可以試試使用Python給你的App做hotfix。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的iospython开发工具_使用Python开发iOS程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java mqtt客户端_MQTT消息队
- 下一篇: websocket python爬虫_p