教程 4 - 更新您的應用程式

在上一個教程中,我們將應用程式打包為本機應用程式。如果您正在處理現實世界的應用程序,這不會是故事的結局 - 您可能會進行一些測試,發現問題,並需要進行一些更改。即使您的應用程式非常完美,您最終也會希望發布經過改進的應用程式的第 2 版。

那麼 - 當您更改程式碼時如何更新已安裝的應用程式?

更新應用程式程式碼

目前,當您按下按鈕時,我們的應用程式會列印到控制台。然而,GUI 應用程式不應該真正使用控制台進行輸出。他們需要使用對話框與使用者進行交流。

讓我們新增一個對話框來打招呼,而不是寫入控制台。修改``say_hello``回調,使其看起來像這樣:

def say_hello(self, widget):
    self.main_window.info_dialog(
        f"Hello, {self.name_input.value}",
        "Hi there!",
    )

這會指示 Toga 在按下按鈕時開啟模式對話方塊。

如果執行``briefcase dev``,輸入名稱,然後按按鈕,您將看到新的對話方塊:

Hello World 教學 4 對話框,在 macOS 上

但是,如果執行``briefcase run``,則不會出現該對話方塊。

為什麼是這樣?好吧,briefcase dev 通過就地運行您的代碼來運行- 它嘗試為您的代碼生成盡可能真實的運行時環境,但它不提供或使用任何平台基礎設施來將您的代碼包裝為應用程式.打包應用程式的過程的一部分涉及將程式碼複製到應用程式包中 - 目前,您的應用程式中仍然包含舊程式碼。

因此 - 我們需要告訴公文包更新您的應用程序,複製新版本的代碼。我們*可以*透過刪除舊平台目錄並從頭開始來做到這一點。但是,Briefcase 提供了一種更簡單的方法 - 您可以更新現有捆綁應用程式的程式碼:

(beeware-venv) $ briefcase update

[helloworld] Updating application code...
Installing src/helloworld... done

[helloworld] Removing unneeded app content...
Removing unneeded app bundle content... done

[helloworld] Application updated.

如果Briefcase找不到鷹架模板,它會自動呼叫``create``來產生一個新的鷹架。

現在我們已經更新了安裝程式碼,然後我們可以運行``briefcase build``來重新編譯應用程序,運行``briefcase run``來運行更新後的應用程序,以及運行``briefcase package``來重新打包應用程式用於分發。

(macOS 用戶,請記住,如 教學 3 所述,對於本教程,我們建議使用``–adhoc-sign``標誌運行``briefcase package``,以避免設置代碼簽名身份的複雜性,並使教程盡可能簡單。)

一步更新並運行

如果您快速迭代程式碼更改,您可能需要更改程式碼、更新應用程序,然後立即重新執行您的應用程式。對於大多數目的,開發人員模式(briefcase dev)將是進行這種快速迭代的最簡單方法;但是,如果您正在測試應用程式如何作為本機二進位檔案運行,或者尋找僅在應用程式處於打包形式時才會出現的錯誤,則可能需要重複調用``briefcase run``。為了簡化更新和執行捆綁應用程式的過程,Briefcase 有一個快捷方式來支援這種使用模式 - run 命令上的``-u``(或``–update``)選項。

讓我們嘗試進行另一個更改。您可能已經注意到,如果您不在文字輸入方塊中鍵入姓名,則對話方塊將顯示 「Hello,」。讓我們再次修改 say_hello 函數來處理這種邊緣情況。

在檔案頂部的匯入和``class HelloWorld``定義之間,新增實用程式方法以根據已提供的名稱值產生適當的問候語:

def greeting(name):
    if name:
        return f"Hello, {name}"
    else:
        return "Hello, stranger"

然後,修改``say_hello``回調以使用這個新的實用方法:

def say_hello(self, widget):
    self.main_window.info_dialog(
        greeting(self.name_input.value),
        "Hi there!",
    )

在開發模式下運行您的應用程式(使用``briefcase dev``)以確認新邏輯有效;然後使用一個命令更新、建置和運行應用程式:

(beeware-venv) $ briefcase run -u

[helloworld] Updating application code...
Installing src/helloworld... done

[helloworld] Removing unneeded app content...
Removing unneeded app bundle content... done

[helloworld] Application updated.

[helloworld] Building application...
...

[helloworld] Built build/helloworld/macos/app/Hello World.app

[helloworld] Starting app...

package 命令也接受``-u``參數,因此如果您對應用程式程式碼進行了更改並希望立即重新打包,則可以運行``briefcase package -u``。

下一步

現在,我們已經將應用程式打包以便在桌面平台上分發,並且我們已經能夠更新應用程式中的程式碼。

但行動裝置呢?在 教程 5 中,我們會將應用程式轉換為行動應用程序,並將其部署到裝置模擬器和手機上。