前言

我一直用着iPhone和iPad。但在我眼中,iOS是一个很不自由的系统,主要原因有几点:

  1. 应用必须从app store下载。

  2. 想要下载的软件在国区的商店没有,需要使用其他区的账号。

  3. iOS会给应用分配一个空间,应用只能访问这块空间中的内容。如果尝试访问外面就会出现permission denied

  4. 可操作性不够。如果不越狱那么能diy的方面很少。

    会iOS编程的除外。

这个偶然看到的软件直接刷新了我对iPad的认知:Code。有了它,即使不会iOS编程也可以干很多事。


探索

进入这个软件后,首先看到的就是熟悉的界面:

在设置里面可以看到,软件内置了Python、Node、Clang等解释器和编译器。

不妨在软件自带的终端验证一下,相应的环境果然是存在的。

那么,接下来尝试以平时的方式运行一下Python代码。嗯,与平时无异。


当我觉得把这个软件当作做算法题的编辑器,顺便运行一下代码就行的时候,接下来这个命令的结果直接让我虎躯一震。

这个软件内的Python竟然也可以使用第三方模块!那么可玩性突然就高起来了。

flask

首先试试flask,看看可不可以开启一个端口,然后浏览器访问。

1
2
3
4
5
6
7
8
9
10
from flask import Flask

app = Flask(__name__)

@app.route("/", methods=["GET"])
def index():
return "<h1>hello world</h1>"

if __name__ == '__main__':
app.run(port=2022, debug=False)

nice,竟然可以!

不过仍然存在两个问题:

  1. 服务端不能开启调试,否则会报错。
  2. iOS的键盘不支持CTRL-C,软件内的终端也关不了,只能退出软件。

爬虫

使用requests爬虫。先下载requests:pip install requests

然后就是是学爬虫的保留节目了(嘴角上扬):

1
2
3
4
5
6
7
8
9
10
11
12
13
import requests
urls=['https://i1.wp.com/kul.mrcong.com/images/2022/06/20/IMIS\
S-Vol.680-Zhang-Si-Yun-Nice-MrCong.com-0{:}.webp'.format(str(i).rjust(2,'0')) for i in range(1,53)]
header={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
}
count=0
for url in urls:
print(url)
res = requests.get(url=url, headers=header)
count+=1
with open('./imgs/{}.png'.format(count), 'wb') as p:
p.write(res.content)

依然存在问题:不支持多线程中线程池的使用。

图像处理

iOS还有一个硬伤就是照片或截屏的占用的空间太大,动不动就5~6M。

首先pip install tinify,然后使用tinify调用tinypng的api实现图像的压缩:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import tinify
import os

# Please reset the root directory Path !
ImageFilePath = "./img"#要压缩的图片的目录
tinify.key = "l7SZ29QJFVz2vstt5cZqcPRhzBwDZjx2"


#获取到本目录中的所有文件
def getFilesAbsolutelyPath(ImageFilePath):
currentfiles = os.listdir(ImageFilePath)
filesVector = []
for file_name in currentfiles:
fullPath = os.path.join(ImageFilePath, file_name)
if os.path.isdir(fullPath):
newfiles = getFilesAbsolutelyPath(fullPath)
filesVector.extend(newfiles)
else:
filesVector.append(fullPath)
return filesVector

filePathVector = getFilesAbsolutelyPath(ImageFilePath)
pngFile = []

#筛选出所有png文件(现在看来这一步可以省略了,直接把这些判定写在上一个函数中,filePathVector就直接筛选出png文件了)
for filename in filePathVector:
flag = filename.find(".jpg") # 根据情况修改后缀名
metaNot = filename.find(".meta")
if flag != -1 and metaNot == -1:
pngFile.append(filename)

print(pngFile)

#对每个png文件进行上传压缩,并下载,上传和下载的过程调用插件即可完成
for filename in pngFile:
print(filename + ' start')
source = tinify.from_file(filename)
source.to_file(filename)
print(filename + ' ok')

压缩后图片的大小还是很感人的:

还是有问题(应该说是麻烦):图片必须放到Code的文件夹中才能处理,不然访问不到。

其他

  1. Python常用的numpy,Jupyter Notebook等都是可以正常使用的。

  2. C++中STL以及C++11的高级用法也是支持的。

  3. node.js和npm应该也可以(不会,但是hexo都可以跑起来,说明没有大问题

  4. 可以在终端使用ssh连接远程服务器,而且支持语法高亮:


总结

有了这个软件,我们可以使用编程语言在iPad上做到很多事:刷题,甚至做一个项目。

虽然很多方面都有些许问题,但是无伤大雅,毕竟这是iPad。