离开 PC,在 iPad Pro 上也能编程了?

论基于 iPad Pro 平台编码的可行性。

作者 |Andrew Brookins

译者 |弯月

责编 | 屠敏

出品 |CSDN(ID:CSDNNews)

2017年我曾提出过一个问题,“你能在iPad上写代码吗?”(https://andrewbrookins.com/tech/can-you-write-code-on-an-ipad/)时至2019年的今天,答案基本上一样:不太可行。不过如今的事态有点意思了。

注:这篇帖子大部分的内容讲的都是Web应用开发。

在iOS上“编程”:Shortcuts应用

iPad依然缺乏任何原生编程的能力。也就是说,没有任何办法访问Unix shell,也无法安装homebrew和C编译器。

iOS 上唯一接近编程的原生功能就是Shortcuts应用,这个应用能将小型任务自动化,并将应用连接到一起。

Shortcuts是流行的Workflow应用的苹果贴牌版本。你可以使用Shortcuts将一系列动作连接到一起,比如打开免打扰模式、播放特定的专辑(我推荐The Algorithm的《Brute Force》),并打开SSH客户端或文本编辑器。

Shortcuts可能对某些人有用,但我不怎么用,它也不是编程!

使用原生iOS文本编辑器编辑文件

但并不是完全没有希望。首先,如果你肯退一步,把iPad Pro看成一个瘦客户端,与服务器配合使用,那还有点可能。有一些很不错的SSH应用,比如Blink。但你不一定需要直接连到服务器上。如果你更喜欢在iPad上原生地进行编辑,并弄一套流程将代码上传到云服务器上,那也是能做到的。我们来看看这两种方式。

你不太可能在iOS上运行代码,除非是Python代码。

如果你是个Python开发者,那么在iPad上直接运行程序还有点可能。Pythonista应用已经从一个纯粹的、致力于iOS自动化的Python文本编辑器成长为一个可定制的Python开发环境,自带了许多主要的库,如NumPy等,自带一个用Python实现的类似bash的shell,还支持插件。

至于Python之外的其他语言,我还没有找到任何能在iOS上用的编译器或解释器。

原生iOS编辑器变得越来越好

现在出现了很多很不错的不带解释器或编译器的文本编辑器。比如GoCoEdit和Textastic提供了许多基本编辑操作之外的功能,比如模糊查找等,已经接近桌面编辑器了。

这些编辑器可以通过Git和Working Copy应用以及苹果自带的Files应用来配合使用,从而产生一些有趣的效果。Working Copy可以检出一个Git代码仓库,并能够使用GoCoEdit之类的应用进行编辑;在编辑器里作出的修改会自动反馈回Working Copy,然后就可以进行提交了。

iOS文本编辑器缺失的功能

但是,没有任何编辑器自身能够提供真正的软件开发需要的体验。我说的是类似于Dreamweaver的体验,而不是像Emacs那种体验。

缺失的重要功能之一就是项目搜索,即给定一个目录或一组目录,允许用户在其中搜索所有文本。如果你使用GoCoEdit或iVim,那么可以利用Working Copy的搜索工具达到类似的效果,该搜索工具能提供该功能,查找文件并从分享菜单中选择“open in GoCoEdit”之类的选项来编辑。Textastic出于某种原因并没有提供功能。总之,这个功能“能用”,但估计你达不到想要但效果。

关于iVim的边注:它现在越来越好了。现在可以支持.vimrc文件,也可以在应用本身的文件系统中下载插件。用Vimscript编写的插件应该都能正常工作。还要注意,因为它是Vim 7,所以没有异步功能。

但是,使用iOS文本编辑器时,就不要考虑Web应用开发中的常见模式了。除非你是用Pythonista,否则iPad上不可能用服务器来运行代码,所以你需要一些机制将文件传到其他地方运行,比如传到服务器上,或者无服务器平台上。2019年有许多方式可以实现这一点,比如通过Pythonista、Zapier、IFTTT或在Shortcuts中使用Siri语音命令。如果你喜欢在iPad上写代码,那你可以花大把的时间来试试这些方式。

这些编辑器也都不提供任何linter或代码格式化功能。iOS的设计导致了在编辑应用之外使用linter或格式化工具只能通过另一个接受文本作为输入且支持linting和格式化的应用进行。否则,编辑器必须提供二进制文件,比如gofmt。对于使用解释语言编写的工具,估计编辑器必须自带整个编程语言,或者模仿Pythonista的做法。

iOS本身的消息传递机制非常酷

如果尝试用iOS做一些重要的事情,做得越多,你就越能体会到它的消息传递机制。iOS上的应用程序不会通过文件或系统调用互相交互,或与操作系统交互,而是所有应用程序都会互相(以及与操作系统)发送消息并接收消息。

因此,你在Files应用中查找文件,但实际上找的并不是一组文件。更像是一个能发送并接收有关文件的消息的地方,该消息可以在iPad上的所有应用中使用,包括iCloud Drive。

任何需要使用文件的应用都添加了更多高级功能,来利用其他应用支持的文件相关的消息操作,所以许多文本文件现在都可以打开另一个应用暴露的目录或文件(这是iOS在2019年的一个“进步”)。这种方式打开的目录通常会出现在应用的侧边栏中,如果这些文件是本地文件,那就可以一直访问。

最终你会觉得这种功能非常好用、非常自然;回到桌面电脑上,你就会觉得缺少一个一致的“分享”按钮。要是iOS上有专业的文本编辑器、编译器、解释器、Web服务器就更好了。

利用SSH连接到真正的计算机上

你也可以使用Blink或其他SSH应用连接到服务器上,执行任何代码,并在服务器上使用Vim或Emacs,那么通常的Web应用的开发方式——编辑文件用动态语言写代码,等待应用服务器加载编辑后的文件,再刷新网页——依然可以使用。

当然,你需要在iOS中刷新网页。我推荐使用iCab,因为它提供许多自定义选项,最值得一提的就是它提供了iOS上最好的键盘快捷键。

2019年,我应该在哪里运行服务器?

如果你需要远程服务器的强大功能和灵活性,以及像Vim这种真正的编辑器,那么现在有更多的选择。

当然,你可以使用Linode、Digital Ocean等VPS。这些很好用,但缺点就是它们在可再生能源方面不太好。

Google使用100%可再生能源,Google Cloud Shell也能为你提供微型服务器,带有持久化的存储,还自带了开发工具,一切都是免费的。Google Cloud Shell应用可以在iOS上原生地打开Cloud Shell会话。但是,向该应用里粘贴代码时要注意!你还需要在iOS浏览器中启动Cloud Shell来进行一些设置,比如字体大小等。而且该应用无法接收键盘按键,至少在屏幕虚拟键盘上不行。

除了使用Cloud Console应用之外,还可以连接到跳板服务器上,使用gcloud命令行工具。可以从终端上使用最近新加的命令 gcloud alpha cloud-shell ssh来连接到Cloud Shell中。GCP的“永久免费”功能包括一个f1-micro实例,可以用作跳板……它也可以直接当作VM使用。

另一种方法是用一台旧的Mac电脑当作服务器,这样可以进行许多有趣的事情,比如在iPad上使用iCloud Drive,还可以使用osascript给自己发送文本消息。这样一切都在掌控之中了。苹果复活了Mac Mini,它可以作为很不错的家用服务器或桌面电脑,与iPad配合使用。(或者可以买一台真正的便携电脑。)

从iOS浏览器中访问开发用的Web服务器

几年前如果你要在远程服务器上开发Web应用程序,你可能需要在能公开访问的端口上运行开发服务器。现在,有个应用能够支持SSH隧道了!

如果想访问应用服务器(如Django的开发服务器),首先你要使用SSH Tunnel应用,建立到服务器(你的计算机)的隧道。先在服务器的/etc/hosts上定义一个“localhost”之外的主机名,指向127.0.0.1。然后依照SSH Tunnel网站上的指南,在你手头的iOS的网络设置中配置正确的代理设置。

在经历一番痛苦的设置后,就能在iOS浏览器中输入你指定的主机名(如old-faithful)和你的应用服务器使用的端口,比如http://old-faithful:4000,来加载应用了。

浏览器开发工具怎么办?

如果需要调试Web应用,那么可以使用一个名为Inspect的开发工具。它挺好用,尽管没有像桌面浏览器那样健壮的JavaScript调试功能。但是除了JS调试器之外,Inspect有大多数你需要的功能:CSS/HTML查看,JS控制台,所以至少能够使用console.log调试。

2018年以前,在iPad上开发Web应用的最大障碍之一就是缺乏像Inspect这种开发工具。使用这些工具就能在iPad上开发Web应用。是不是很不错?我也不知道。可能并没有。

总结

与2017年相比,2019年的iPad和iOS基本上没太大变化,至少在编程方面如此。真正发生变化的是开发者们为那些想在iOS上写代码的人做了越来越多的应用。

考虑到iOS已经12岁了,直到现在才出现能比得上Dreamweaver的文本编辑器,以及几乎没有任何能真正编程的应用,我估计真正实现在iPad上写程序需要等到2037年。

对此,你怎么看?

链接:https://andrewbrookins.com/technology/coding-on-ipad-pro-2019/

作者:Andrew Brookins,Ruby和JavaScript云架构工程师@IBM。

热 文推 荐

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190112A0W9IR00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券