许多人想开发自己的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会允许它后台运行。

使用HTML(Web)开发iOS/iPhone/iPad应用相关推荐

  1. iOS(iPhone,iPad))开发(Obje…

    原文地址:iOS(iPhone,iPad))开发(Objective-C)开发库常用库索引 作者:子木潇雨 http://www.code4app.com 这网站不错,收集各种 iOS App 开发可 ...

  2. ios(iphone/ipad)开发每日一练【2011-11-14】

    请教一个关于真机测试的问题 疼!向各位老大求解cocos2d 处理动作播放的问题 如何实现新版本的升级提醒啊 UIImagePickerController截图时图片不再截图框中间 self有什么技巧 ...

  3. iOS(iPhone,iPad))开发(Objective-C)开发库常用库索引

    http://www.code4app.com 这网站不错,收集各种 iOS App 开发可以用到的代码示例  http://www.cocoacontrols.com/ 英文版本的lib收集  ht ...

  4. iOS(iPhone/iPad)开发新手必读

    Objective-C 入门 一个简单的可以快速上手的 Objective-C 入门教程. iOS概述 本文对构成iOS的基础特性提供了高层的概述,帮助你了解这个平台. 基于Xcode4开发第一个iP ...

  5. ios(iphone/ipad)开发每日一练【2011-11-2】

    招聘界面UI设计师和IPHONE 程序员 OpenFeint最近是坏了吗? 菜单问题:隐藏菜单中的某一个菜单 写下你的应用被reject的原因吧,帮助后来的人! AsyncSocket 断开再链接会崩 ...

  6. ios(iphone/ipad)开发笔记(1)

    CGContextRefCGContextRef iphone开发刚刚入门 求个师傅 iphone拨号键盘 请问自己如果做sdk OpenGL ES 2.0有没有顶点光照的例子? socket通信哪位 ...

  7. IOS(iphone,ipad,itouch)开发 之 屏幕旋转

    关于IOS开发中屏幕旋转的问题. 看过很多大牛的文章,都写过类似的,这里我只写一下常用的几个函数的具体用法. 首先是 - (BOOL)shouldAutorotateToInterfaceOrient ...

  8. iOS. iphone/iPad中的尺寸、安全区,导航高度、机型判断

    参考:http://www.25xt.com/appsize iphone:=========== http://www.tuyiyi.com/cc/ *************APP图标:20px, ...

  9. ios(iphone/ipad)一个简单的用代码判断当前设备的方法

    直接NSLog(@"current_device:%@",[UIDevice currentDevice].model); 即可看出它输出的是当前设备,所以根据这个字符串可简单的判 ...

最新文章

  1. html的左侧菜单栏,HTML 之 左侧菜单
  2. 多线程编程1 - NSThread
  3. oracle实列关闭,Oracle单实例+ASM启动与关闭
  4. ES5新增对象的属性和方法
  5. [机器学习] XGBoost参数调优完全指南(附Python代码)
  6. Visual Studio 2017迎来F# 4.1
  7. 关于Java中String的问题
  8. 手机蓝绿厂终于转正了,已有“名分”!
  9. python网站开发实例 flask_python-flask框架web服务接口开发实例
  10. VisualRoute for Mac OS 体验
  11. 作为IT男必须会Linux服务器被攻击后如何处理!网友:这个要会!
  12. Ubuntu系统基本操作
  13. 深投控合作之后 国美更具有想象力
  14. SpringBoot 配置文件存放位置及读取顺序
  15. mysql 模糊匹配比自己短潆字符_根据中文字符串查询拼音声母
  16. 群晖外网映射网络盘符访问教程[转]
  17. RV1126RV1109 buildroot 增加QT程序
  18. python程序设计江红答案_python程序设计江红上机答案
  19. Google Maps API –地图类型示例
  20. 在C#中根据HardwareID获取驱动程序信息

热门文章

  1. Vue3-uniapp上传图片到七牛云(身份证信息)
  2. signature=6f778f12ee5c543045f5827af4fb220b,来用百度密语吧!!!
  3. 超详细!动画图解「合并 K 个排序链表」
  4. 三边形面积(海伦公式及拓展)
  5. LINUX 和ubu 分别设置Ip
  6. linux系统命令vi存盘退出的其他方法
  7. OS课设:实现二级文件目录系统
  8. 学习js在线html(富文本)编辑器
  9. Cocos2d-x中设置颜色
  10. JSON字符串转换为JSON对象 互转函数