離開 PC,在 iPad Pro 上也能編程了?

尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️

加入LINE好友

論基於 iPad Pro 平台編碼的可行性。

離開 PC,在 iPad Pro 上也能編程瞭?

作者 | Andrew Brookins

譯者 | 彎月

責編 | 屠敏

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文件,也可以在應用本身的文件系統中下載插件。用Vim編寫的插件應該都能正常工作。還要注意,因為它是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,還可以使用osa給自己發送文本消息。這樣一切都在掌控之中了。蘋果復活了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的開發工具。它挺好用,盡管沒有像桌面瀏覽器那樣健壯的Java調試功能。但是除了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和Java雲架構工程師@IBM。

print_r(‘點個好看吧!’);

‘點個好看吧!’);

NSLog(@”點個好看吧!”);

“點個好看吧!”);

“點個好看吧!”);

print(“點個好看吧!”);

printf(“點個好看吧! “);

cout << “點個好看吧!”<< endl;

“點個好看吧!”);

“點個好看吧!”);

“點個好看吧!”);

alert(“點個好看吧!”)

echo “點個好看吧!”

About 尋夢園
尋夢園是台灣最大的聊天室及交友社群網站。 致力於發展能夠讓會員們彼此互動、盡情分享自我的平台。 擁有數百間不同的聊天室 ,讓您隨時隨地都能找到志同道合的好友!