使用Python開發iOS程式

2021-09-19 08:36:35 字數 4223 閱讀 3026

對,你沒有看錯,就是使用python開發ios程式!

我們見過使用js、lua、ruby開發ios程式的,但是基本沒有見過使用python開發ios程式(軟體)的,這是為什麼?關於這個問題,我後面會回答。

那麼,怎麼用python開發ios程式呢?其實我們最主要解決的就是下面幾件事情:

搭建python和objc通訊的橋梁。

如何配置工程並開發。

如果不使用uikit這些,那麼就要使用opengl es這些了,這種方式,主要是用於開發遊戲的,我們這裡不涉及這些。

當然,以下所有內容都是在一台已經安裝了xcode的mac上進行的。

python-ios-support

pybee開源了乙個可以嵌入到ios工程中的python編譯指令碼,具體位置在這:

預設是使用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版本是可以更換的,但是我嘗試過,我將最新版本的python 2.7.11放進去,是無法編譯成功的。

有一些人提到了這個問題,但是作者還是建議使用3.4.x或者3.5.x版本,2.7x版本他已經不再支援了。

修改python版本的地方在:

python_version=3.4.2
替換為其他版本即可。

編譯切到python-ios-support目錄,設定編譯引數,直接編譯。我們這只需要ios版本,所以直接make ios即可。

編譯成功之後,會在build目錄上生成python.frameworkopenssl.framework

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直接的寫法很像,只是有一些需要改變,比如:

/**objc:**

/- (bool)writetourl:(nsurl *)url atomically:(bool)atomically;

/**python**

/array. writetourl_atomically_(url, atomically)

具體用法大家可以自行**一下。

建立工程

python所需要的工程和直接用xcode建立的不太一樣,手動改寫的話,還比較麻煩,所以我們直接用模板工具生成。

cookiecutter是乙個可以在模板中快速建立工程的乙個工具,python-ios-template是pybee開源的乙個使用python開發ios工程的模板。

首先,我們需要安裝cookiecutter,直接使用pip安裝即可:

pip install cookiecutter
安裝好後,直接使用cookiecutter命令建立工程:

建好的工程目錄結構如下:

工程裡面可以同時存在objc檔案和python檔案,兩者可以各自執行,並不衝突。

完善工程

talk is cheap, show me the code.

不得不承認,rubicon-objc幾乎沒有文件。

我在github上找到乙個專案,ios-python-project。這是使用rubicon-objc開發的乙個python-ios工程,但是很可惜的是,我這邊執行出錯。

這個demo執行起來大概是這個樣子:

demo中只修改了rootviewcontroller的背景,然後在上面新增了乙個label。

當然,它還能做很多事情,怎麼做,我也不知道。

它的文件太少了,我甚至不知道怎麼才能使用cgrect,因為它不是乙個類,我無法import進來。

開頭我提到為什麼很少有人會使用python去開發ios程式(軟體),我個人認為主要有以下幾個原因:

ide的支援 - 如果你已經在我的demo上寫了幾行,你會發現,沒有任何objc庫的提示。本來我們objc這門語言就是寫法很長很詳細的,要想直接手寫出整個方法名,那真是x了?了。

系統庫 - 一般來說,ios程式一般至少都要有幾個頁面的,那麼uikit基本就是我們必須的,除非你想使用opengl es畫,或者直接html等。而要用到uikit,肯定要寫一堆是python但是完全像objc的**,因為那方法名就是這麼定義的。這樣寫太累了,不如直接用objc寫。

python直譯器過大 - 我生成的只有armv7和arm64的python.framework就已經有20m+了,再加上好幾m的openssl.framework,這得多大。即使打到生產包裡面,我相信估計也有10m~20m了,相比較而言,lua的直譯器就只有200k。

技術支援 - 連我們上面說到的rubicon都沒有文件,萬一出事了,找誰解決?社群上也沒幾個人這麼幹,提問的話,又有幾個人可以幫助你。ruby可以用rubymotion來開發ios,但是它還是有一些人用的。

雖然python不適合開發ios程式,但是,很好玩啊。

這就夠了。

lua寫patch的時候也具有上面的1、2兩個缺點,但是補丁這種東西本來就很短,稍微寫點也無妨。

iOS開發 FMDB使用

demo位址 nslog path database fmdatabase alloc initwithpath path id欄位為自增欄位 name char 256位 age char 3位 char 2位 phone char 13位 address char 100位的 if databa...

iOS開發 FMDatabase 使用

id integer primary key autoincrement 設定自增長主鍵 指定資料儲存路徑 fmdatabase 管理資料的類 增 刪 改 查 fmdatabase database fmdatabase alloc initwithpath path open 開啟資料庫 檔案 如...

iOS開發 Git使用

終端建立的流程如下 以在桌面建立工作區為例 初始化操作 cd desktop workspace git init 無論是提交新檔案 還是修改檔案 都要先執行 git add git 中的add是將所有操作新增到緩衝區 配置操作 配置使用者名稱 git config user.name 使用者名稱 ...