乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      JSBox 與捷徑在 iOS 13 的重要更新

       看見就非常 2020-01-30

      Matrix 精選

      Matrix 是少數(shù)派的寫作社區(qū),我們主張分享真實(shí)的產(chǎn)品體驗(yàn),有實(shí)用價值的經(jīng)驗(yàn)與思考。我們會不定期挑選 Matrix 最優(yōu)質(zhì)的文章,展示來自用戶的最真實(shí)的體驗(yàn)和觀點(diǎn)。

      文章代表作者個人觀點(diǎn),少數(shù)派僅對標(biāo)題和排版略作修改。


      前言

      快捷指令,是 Apple 收購 Workflow 后為 iOS 設(shè)計(jì)的自動化工具。在中文社區(qū)另有一個更為人所知的名字:捷徑。

      在 iOS 12 上 Apple 發(fā)布了第三方應(yīng)用的捷徑接口,可以提供自定義的操作。但顯然那是一個不成熟的版本:雖然第三方應(yīng)用可以提供操作,卻無法從捷徑獲取參數(shù),也無法返回結(jié)果給下一個操作。

      在當(dāng)時,比較常見的做法是將參數(shù)寫到剪貼板,第三方應(yīng)用讀取剪貼板,再把結(jié)果寫回剪貼板,然后捷徑再讀取剪貼板。這樣復(fù)雜的操作讓第三方應(yīng)用與捷徑的配合成為了雞肋,沒有多少實(shí)用價值。

      在 iOS 13 上 Apple 終于解決了這個問題,JSBox 為此做了諸多改進(jìn),因此我想通過這篇文章來介紹這些改進(jìn)。

      本文的受眾是「快捷指令」用戶和 JSBox 用戶,了解如何更好地將兩個軟件結(jié)合在一起。對于我個人而言,「快捷指令」的強(qiáng)大在于可以快速地組合出一些功能,JSBox 的強(qiáng)大之處在于更靈活、底層、以及能夠?qū)崿F(xiàn)更好的用戶交互。


      所以,這篇文章就來研究一下 JSBox 和「快捷指令」如何取長補(bǔ)短,而不是互相取代。

      JSBox 支持的「快捷指令」操作

      目前在 iOS 13 上面,JSBox 為「快捷指令」提供了三個操作:

      • 運(yùn)行 JavaScript:輸入一段 JavaScript 代碼,執(zhí)行 JavaScript,輸出一個字符串。

      • 運(yùn)行 JSBox 腳本:輸入腳本名稱和一個可選參數(shù),后臺運(yùn)行 JSBox 腳本,輸出一個字符串。

      • 顯示 JSBox 界面:輸入腳本名稱和一個可選參數(shù),顯示 JSBox 定義的用戶界面,不輸出結(jié)果。

      下面,我將使用一些簡單的例子介紹這幾個動作。

      運(yùn)行 JavaScript

      這個操作為「快捷指令」提供了直接運(yùn)行 JavaScript 腳本的能力,在一些比較「高級」的快捷指令里面,你可能看過為了運(yùn)行復(fù)雜邏輯而將 JavaScript 填寫到一個網(wǎng)頁,然后獲取網(wǎng)頁運(yùn)行結(jié)果的做法,像是 這篇文章 里面介紹的那樣。

      我得承認(rèn)這個做法的聰明之處,因?yàn)樵凇缚旖葜噶睢估锩孀鲆恍?fù)雜運(yùn)算是一件很痛苦的事情,尤其是對于一些復(fù)雜的數(shù)學(xué)運(yùn)算和邏輯運(yùn)算?!缚旖葜噶睢共⒉荒苤苯舆\(yùn)行代碼,通過網(wǎng)頁來執(zhí)行是非常巧妙的變通辦法。但這個方法操作成本極高,你需要花費(fèi)巨大的力氣,而僅僅是為了在「快捷指令」里面執(zhí)行一段 JavaScript。

      如果通過 JSBox 提供的這個操作則非常容易,你可以直接構(gòu)造一段 JavaScript 代碼傳遞給 JSBox,然后直接獲得運(yùn)行結(jié)果。代碼同步執(zhí)行會直接將最后的值作為「快捷指令」的輸出,如果需要異步執(zhí)行腳本,可以使用 $intents.finish() 函數(shù)來將結(jié)果輸出到下一個快捷指令操作。

      通過「快捷指令」提供的模板字符串,我們可以輕松地用變量構(gòu)造出 JavaScript,并傳遞給 JSBox 來執(zhí)行:

      運(yùn)行 JavaScript

      由于使用的是 JSBox 內(nèi)置的 JavaScript 引擎(JavaScriptCore),不僅支持最新的語法,還支持 JSBox 提供的接口(文檔)。這樣能做到的事情就多了很多,甚至有些功能是「快捷指令」并未提供的,例如獲取設(shè)備類型、實(shí)現(xiàn)遞歸和復(fù)雜的數(shù)學(xué)計(jì)算:

      運(yùn)行 JavaScript

      此外,在下一個大版本里面,JSBox 將支持運(yùn)行 Node.js,這個能力同樣也會提供給「快捷指令」。

      運(yùn)行 JSBox 腳本

      通過傳入腳本名和參數(shù)來在后臺運(yùn)行 JSBox 腳本。腳本可以通過代碼獲取到「快捷指令」輸入的參數(shù),進(jìn)行一頓操作之后,將結(jié)果輸出給下一個「快捷指令」操作??蛇x的參數(shù)是一個「詞典」類型,在「快捷指令」里面表現(xiàn)為一個鍵值對,而在 JSBox 腳本里面,則可以用 $context.query 獲取到一個 JSON 數(shù)據(jù):

      調(diào)用 JSBox

      腳本運(yùn)行結(jié)束后,通過上面介紹過的 $intents.finish()  函數(shù)將結(jié)果字符串傳遞給下一個操作。

      可以在結(jié)果里面填入一個 JSON 字符串,然后利用「快捷指令」的數(shù)據(jù)自動轉(zhuǎn)換功能將其轉(zhuǎn)換成一個詞典,例如這樣:

      數(shù)據(jù)格式轉(zhuǎn)換

      通過這樣的參數(shù)傳遞,在 iOS 13 的「快捷指令」里面,我們可以將支持「快捷指令」的第三方應(yīng)用都串聯(lián)起來,實(shí)現(xiàn)任意應(yīng)用的互通。

      顯示 JSBox 界面

      JSBox 提供了強(qiáng)大的界面接口,你可以輕松的用 JavaScript 實(shí)現(xiàn)出簡潔、漂亮的用戶界面,而這恰恰是「快捷指令」的一個弱項(xiàng)。

      這個操作大體上和運(yùn)行 JSBox 腳本的動作使用方式一樣,也是通過腳本名和可選參數(shù)來啟動。區(qū)別是在于這個操作是用來顯示一個用戶界面,這個界面是由 JSBox 腳本實(shí)現(xiàn)的。

      例如下面這個例子,用 JSBox 改進(jìn)在「快捷指令」和 Siri 頁面的顯示:

      左:快捷指令,右:JSBox左:快捷指令,右:JSBox

      類似這種在 Siri 界面無法提供良好顯示的「快捷指令」,通過 JSBox 可以更好地顯示:

      左:快捷指令,右:JSBox

      實(shí)現(xiàn)上面兩個例子用的代碼也十分簡單:

      實(shí)現(xiàn)用的代碼

      實(shí)用案例:本地化

      在「快捷指令」里面實(shí)際上是不好做本地化的,不方便為一個標(biāo)簽在不同語言下,提供不同的文本,但通過 JSBox 卻可以輕易做到:

      為「快捷指令」提供本地化文本

      JSBox 通過判斷當(dāng)前設(shè)備的語言,返回給「快捷指令」不同的詞典,然后「快捷指令」就可以通過鍵來讀取本地化后的文本,從而實(shí)現(xiàn)「快捷指令」的本地化。

      實(shí)用案例:數(shù)據(jù)庫

      「快捷指令」沒有提供良好的持久化方案,目前常見的做法是將內(nèi)容編碼成文本后存在 iCloud 云盤,但通過 JSBox 你卻可以在「快捷指令」里面使用數(shù)據(jù)庫:

      寫入數(shù)據(jù)庫讀取數(shù)據(jù)庫

      JSBox 的代碼實(shí)現(xiàn)也很簡單,甚至提供了可視化的數(shù)據(jù)庫查看工具:

      JSBox 代碼和數(shù)據(jù)庫瀏覽工具

      考慮到篇幅限制,這個案例只展示了如何插入和查詢一個簡單的數(shù)據(jù),但實(shí)際上 JSBox 對 SQLite 進(jìn)行了完整的封裝,能做的事情遠(yuǎn)不止于此。

      使用「快捷指令」增強(qiáng) JSBox

      上面的話題基本上是圍繞如何用 JSBox 增強(qiáng)「快捷指令」,而下面我們要討論一個相反的話題:如何用「快捷指令」增強(qiáng) JSBox?!缚旖葜噶睢棺鳛榈谝环絻?nèi)置的應(yīng)用,有很多第三方應(yīng)用無法獲得的超級入口,作為第三方應(yīng)用,JSBox 盡可能地利用了這些接口,從而讓以使用 JSBox 為主的用戶可以更方便。

      「快捷指令」自動化

      其實(shí)在很久以前,JSBox 也提供了類似「快捷指令」自動化的功能,不過受限于第三方應(yīng)用的限制,JSBox 只支持了:定時、定位、打開應(yīng)用等幾個簡單的場景。在觸發(fā)之后,JSBox 會發(fā)一個通知給用戶,點(diǎn)擊之后可以運(yùn)行腳本。

      雖然流程極為類似,但「快捷指令」擁有很多第三方應(yīng)用無法實(shí)現(xiàn)的觸發(fā)器。這里我就以我個人在使用的一個自動化操作為例,連接到 CarPlay 的時候,自動打開 JSBox 執(zhí)行一個腳本(使用 JSBox 的 URL scheme):

      「快捷指令」自動化

      我在 CarPlay 的腳本里面實(shí)現(xiàn)了大量的邏輯,這些邏輯在「快捷指令」里面并非不能實(shí)現(xiàn),只是實(shí)現(xiàn)起來極為復(fù)雜。目前我用的場景還不是很多,但我相信在之后的版本里面,「快捷指令」會提供更多觸發(fā)選項(xiàng),讓自動化更實(shí)用。

      輔助觸控

      在 iOS 系統(tǒng)設(shè)置里的「輔助功能 - 觸控 - 輔助觸控」選項(xiàng)里面,你可以設(shè)置 iPhone 屏幕上的輔助觸控按鈕(通俗講法叫「小圓點(diǎn)」)。我們不在這里討論這個輔助觸控的設(shè)計(jì)意圖是什么,僅聊聊輔助觸控選項(xiàng)可以設(shè)置為「快捷指令」這件事。

      是的,在 iOS 13 里面,輔助觸控的選項(xiàng)不僅可以換成固定的那幾個,還可以設(shè)置成任意的一個「快捷指令」:

      輔助觸控按鈕

      這樣的話你就得到了屏幕漂浮起來的一個按鈕,點(diǎn)擊之后就可以運(yùn)行一個「快捷指令」。如果希望更快,甚至可以將頂層菜單的內(nèi)容刪到只剩下一個,或者是將 3D Touch 的操作設(shè)置成一個「快捷指令」。

      如果希望運(yùn)行的是 JSBox 腳本呢?當(dāng)然是利用上面提到的方法將 JSBox 的「快捷指令」操作塞進(jìn)去啦,類似這樣:

      使用輔助觸控

      這個方案提供了一種極為有趣的交互方式,讓小圓點(diǎn)的功能從理論上變成了無限可能。

      共享表單

      英文原文是 Share Sheet,「快捷指令」里面翻譯成共享表單,指的是 iOS 系統(tǒng)提供的分享界面??赡芎芏嗳艘呀?jīng)注意到了,在 iOS 13 上一個具體的「快捷指令」可以直接成為共享表單的一級選項(xiàng):

      共享表單選項(xiàng)

      類似 JSBox 的第三方應(yīng)用只能把自己的選項(xiàng)納入應(yīng)用圖標(biāo)下的二級選項(xiàng),意味著要多一次點(diǎn)擊。我們可以故技重施,利用「快捷指令」來調(diào)用 JSBox 從而把腳本變成一級選項(xiàng):

      在共享表單使用 JSBox

      添加到主屏幕

      包括 JSBox 在內(nèi)的很多應(yīng)用都提供了將某個功能添加到 iOS 主屏幕的功能,支付寶小程序也有類似的設(shè)計(jì)。這個功能的技術(shù)原理是添加一個網(wǎng)頁書簽到桌面,然后通過 URL Scheme 在網(wǎng)頁上跳轉(zhuǎn)到原生應(yīng)用。

      很不幸的是,在 iOS 13 上面這個功能壞掉了,所有類似的方案都不能正確地跳轉(zhuǎn)(第一次打開書簽?zāi)苷LD(zhuǎn),但是之后的跳轉(zhuǎn)都不會成功)。

      目前我還沒有想到比較好的辦法來為 JSBox 用戶修復(fù)這個問題,這里先提供一個變通辦法:

      • 在「快捷指令」內(nèi)使用 URL scheme 跳轉(zhuǎn)到 JSBox

      • 將這個快捷指令添加到桌面

      添加 JSBox 腳本到桌面

      由于 iOS 13 上面「快捷指令」的桌面圖標(biāo)功能使用起來非???,不需要通過網(wǎng)頁跳轉(zhuǎn)(畢竟是「親兒子」),所以這個做法實(shí)際上并沒有比 iOS 12 效率低,只是添加過程稍微麻煩了一點(diǎn)。

      總結(jié)

      我個人認(rèn)為,去年的「快捷指令」尚不能真正發(fā)揮多個應(yīng)用整合的威力,而從今年開始,輸入輸出參數(shù)的支持讓應(yīng)用互通這件事變得更方便,我們也一定會看到更多有趣的實(shí)現(xiàn)。

      JSBox 作為面向效率而生的應(yīng)用,在之后也會提供更多與「快捷指令」互通的可能性,例如文件操作接口、打開應(yīng)用執(zhí)行等等。

      希望這篇文章對「快捷指令」用戶和 JSBox 用戶能有一定的幫助,如果你有任何的看法或是建議,請通過下方的留言讓我知道,感謝。

      送碼

      在評論區(qū)說說你對于 JSBox 的建議和看法,你對于「快捷指令」+ JSBox 的搭配有沒有不一樣的玩法?開發(fā)者會在評論區(qū)選擇 5 位讀者送出 JSBox 兌換碼一枚。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多