使用HTML(Web)开发iOS/iPhone/iPad应用

许多人想开发自己的iOS App吧?iOS App有几种开发的方法。一种是“正规”的方法,就是Xcode+ObjC。但是这样既得学习ObjC语言,又得搭建Xcode开发环境。都弄完了,把App放到自己的iPhone/iPad上运行,还是一件很难的事呢!

不过,Safari浏览器提供了一个功能,就是把网页添加到桌面上,当成一个独立的App运行。有了这个功能,就太好了!我们可以直接用Web语言(HTML+CSS+JS)开发iOS App,非常简单。

一、环境搭建

1.安装Linux环境

为了用Web编写App,我们首先需要运行一个Web服务。这一步有两种方法。

第一种:找一台服务器/电脑,在上面运行Web服务。这种方法可以,但是需要一台公网IP的服务器(否则在外网无法访问自己的App)。不过,这种方法可以给别人“安装”你的App。本文不使用这种方法。

第二种:在iPad上运行Web服务。这种方法无需公网IP,但是只能自己使用自己的App。本文使用这种方法。

iOS不允许App访问底层,因此不能直接在iOS上运行Web服务,尽管iOS是基于Linux实现的。但是我们可以首先安装Linux环境,再在Linux环境中安装Web服务。

怎么安装Linux环境呢?

其实只需要在App Store中安装一个叫iSH的应用就行了。

安装完了,打开应用,你将得到一个Linux Shell。

2.安装一些工具

iSH支持apk软件包管理器。我们可以使用以下命令安装软件包:

apk add 软件包名

我们安装一下今天要用的软件:

apk add vim python3

注意安装软件包的时候,要保持App打开,否则可能安装失败。

3.启动Web服务

你可能问:安装python3干嘛?不是用Web开发吗?

其实,今天我们要用python3自带的Simple HTTP服务。

首先新建一个目录,作为Web服务的根目录:

mkdir www
cd www

然后用Python3启动HTTP服务:

python3 -m http.server 80

python3会用当前目录作为网站的根目录。80就是端口号。

为什么不用Nginx/Apache?

iSH是基于Alpine Linux实现的。Alpine Linux是一种体积较小的Linux系统,因此功能不太全。如果在iSH上运行Nginx,将会访问不了。Apache我没试过。但是开发一些小型的应用,就不需要那么强大的Web服务器了。

4.稳定运行

Python3不太稳定。有些时候,你会发现Web服务器报错退出了。

为了让它稳定,有一个很简单的方法:直接加while true循环,这样它自动退出之后就自动重新启动了。

while true; do python3 -m http.server 80 > /dev/null 2> /dev/null; done &

由于http.server会自动输出接收到的HTTP请求,所以为了防止它输出,在命令后面加了一个 > /dev/null 2> /dev/null。为了让它后台运行,不影响终端,在命令后面加了一个&。

5.开机自启

如果你关闭了iSH App (在终端输入了exit命令,或者按了两下主屏幕按钮然后把iSH关掉,或者重启了iPhone/iPad),再打开,Web服务器将不会运行。为了让它长期运行,需要让它开机自启(即打开iSH时自动运行)。

怎么做呢?

其实只需要编辑/etc/profile文件:

vim /etc/profile

在末尾添加这三行代码:

cd /root/www
while true; do python3 -m http.server 80 > /dev/null 2> /dev/null; done &
cd ~

/etc/profile里的命令会开机自动运行。

修改完成后,输入exit,iSH会自动退出。再重新打开App,Web服务器会自动运行。

6.后台运行

如果你的iPhone/iPad打开了其它应用,那么30秒之后,将无法连接Web服务器。这是因为,当你打开其它App时,iOS会把iSH放到后台。iOS杀后台杀得很厉害,当iSH在后台运行30秒之后,就会被iOS挂起。

怎么办?

还是修改/etc/profile,在末尾添加一行代码:

cat /dev/location > /dev/null &

然后输入exit,再重新打开iSH。

iSH会向你申请获取位置的权限。一定要选“始终允许”!(如果没有这个选项,请在设置->隐私->位置里设置为“始终允许”)

这样就可以后台运行了。

cat /dev/location是什么意思?

/dev/location是iSH自带的一个设备文件,表示当前的地理位置。如果运行 cat /dev/location,会输出纬度和经度。

为什么这样能实现后台运行?

因为如果有一个应用不断地获取位置,iOS会允许它后台运行。

猜你喜欢

转载自blog.csdn.net/nnKevi/article/details/128491667