<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Client on Tarragon</title><link>https://tarrragon.github.io/blog/tags/client/</link><description>Recent content in Client on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Wed, 06 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/client/index.xml" rel="self" type="application/rss+xml"/><item><title>Desktop Client 部署 CI/CD</title><link>https://tarrragon.github.io/blog/ci/desktop-client-deploy/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/ci/desktop-client-deploy/</guid><description>&lt;p>Desktop Client 部署 CI/CD 的核心責任是把可安裝客戶端安全交付到使用者裝置，並維持可更新與可回退能力。它和 web 發布不同，重點在安裝包簽章、公證、更新通道與多平台相容。&lt;/p>
&lt;h2 id="場域定位">場域定位&lt;/h2>
&lt;p>Desktop client 常見於 Flutter Desktop、Electron、Tauri。部署流程通常要分平台建置（macOS、Windows、Linux），並處理安裝體驗、&lt;a href="https://tarrragon.github.io/blog/ci/knowledge-cards/release-channel/" data-link-title="Release Channel" data-link-desc="說明 stable、beta、internal 等發行通道如何控制 artifact 接觸到的使用者範圍">Release Channel&lt;/a> 更新節奏與版本共存。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>面向&lt;/th>
 &lt;th>Desktop client 部署常見責任&lt;/th>
 &lt;th>判讀訊號&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Build&lt;/td>
 &lt;td>platform-specific bundle / installer&lt;/td>
 &lt;td>各平台產物是否可重現&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Signing&lt;/td>
 &lt;td>code signing、notarization、timestamp&lt;/td>
 &lt;td>安裝與啟動是否受信任&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Release&lt;/td>
 &lt;td>channel、staged rollout、notes&lt;/td>
 &lt;td>更新節奏是否可控&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Update&lt;/td>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/ci/knowledge-cards/update-feed/" data-link-title="Update Feed" data-link-desc="說明桌面與客戶端應用如何透過更新來源取得已簽章版本與回復路徑">Update Feed&lt;/a>、delta package&lt;/td>
 &lt;td>升級是否穩定可回復&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Recovery&lt;/td>
 &lt;td>hotfix package、rollback channel&lt;/td>
 &lt;td>失敗時是否可快速回退&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="常見注意事項">常見注意事項&lt;/h2>
&lt;ul>
&lt;li>不同 OS 的簽章與公證流程需分開治理。&lt;/li>
&lt;li>Auto-update 要有版本相容策略與 fallback feed。&lt;/li>
&lt;li>崩潰回報與更新成功率應列為發布後 gate。&lt;/li>
&lt;li>若與 Flutter App 共用程式碼，要明確區分 mobile 與 desktop 的發布管線。&lt;/li>
&lt;/ul>
&lt;h2 id="學習路線">學習路線&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>章節&lt;/th>
 &lt;th>主題&lt;/th>
 &lt;th>核心責任&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="signing-notarization-update-flow/">Desktop client 簽章、公證與自動更新流程&lt;/a>&lt;/td>
 &lt;td>Signing, notarization and update&lt;/td>
 &lt;td>管理安裝包信任鏈、更新通道與回復&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="下一步路由">下一步路由&lt;/h2>
&lt;ul>
&lt;li>Desktop 發布主流程：讀 &lt;a href="signing-notarization-update-flow/">Desktop client 簽章、公證與自動更新流程&lt;/a>。&lt;/li>
&lt;li>行動與客戶端通用觀念：讀 &lt;a href="../app-deploy/">App 部署 CI/CD&lt;/a>。&lt;/li>
&lt;li>簽章治理：讀 &lt;a href="https://tarrragon.github.io/blog/ci/knowledge-cards/app-signing/" data-link-title="App Signing" data-link-desc="說明行動與桌面應用的簽章憑證如何影響發布能力">App Signing&lt;/a> 與 &lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/secret-management/" data-link-title="Secret Management" data-link-desc="說明 token、key、password 與憑證如何保存、輪替與撤銷">Secret Management&lt;/a>。&lt;/li>
&lt;li>失敗處理：讀 &lt;a href="../github-actions-failure-flow/">CI 失敗到修復發布流程&lt;/a>。&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>Desktop Client 部署 CI/CD 的核心責任是把可安裝客戶端安全交付到使用者裝置，並維持可更新與可回退能力。它和 web 發布不同，重點在安裝包簽章、公證、更新通道與多平台相容。</p>
<h2 id="場域定位">場域定位</h2>
<p>Desktop client 常見於 Flutter Desktop、Electron、Tauri。部署流程通常要分平台建置（macOS、Windows、Linux），並處理安裝體驗、<a href="/blog/ci/knowledge-cards/release-channel/" data-link-title="Release Channel" data-link-desc="說明 stable、beta、internal 等發行通道如何控制 artifact 接觸到的使用者範圍">Release Channel</a> 更新節奏與版本共存。</p>
<table>
  <thead>
      <tr>
          <th>面向</th>
          <th>Desktop client 部署常見責任</th>
          <th>判讀訊號</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Build</td>
          <td>platform-specific bundle / installer</td>
          <td>各平台產物是否可重現</td>
      </tr>
      <tr>
          <td>Signing</td>
          <td>code signing、notarization、timestamp</td>
          <td>安裝與啟動是否受信任</td>
      </tr>
      <tr>
          <td>Release</td>
          <td>channel、staged rollout、notes</td>
          <td>更新節奏是否可控</td>
      </tr>
      <tr>
          <td>Update</td>
          <td><a href="/blog/ci/knowledge-cards/update-feed/" data-link-title="Update Feed" data-link-desc="說明桌面與客戶端應用如何透過更新來源取得已簽章版本與回復路徑">Update Feed</a>、delta package</td>
          <td>升級是否穩定可回復</td>
      </tr>
      <tr>
          <td>Recovery</td>
          <td>hotfix package、rollback channel</td>
          <td>失敗時是否可快速回退</td>
      </tr>
  </tbody>
</table>
<h2 id="常見注意事項">常見注意事項</h2>
<ul>
<li>不同 OS 的簽章與公證流程需分開治理。</li>
<li>Auto-update 要有版本相容策略與 fallback feed。</li>
<li>崩潰回報與更新成功率應列為發布後 gate。</li>
<li>若與 Flutter App 共用程式碼，要明確區分 mobile 與 desktop 的發布管線。</li>
</ul>
<h2 id="學習路線">學習路線</h2>
<table>
  <thead>
      <tr>
          <th>章節</th>
          <th>主題</th>
          <th>核心責任</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="signing-notarization-update-flow/">Desktop client 簽章、公證與自動更新流程</a></td>
          <td>Signing, notarization and update</td>
          <td>管理安裝包信任鏈、更新通道與回復</td>
      </tr>
  </tbody>
</table>
<h2 id="下一步路由">下一步路由</h2>
<ul>
<li>Desktop 發布主流程：讀 <a href="signing-notarization-update-flow/">Desktop client 簽章、公證與自動更新流程</a>。</li>
<li>行動與客戶端通用觀念：讀 <a href="../app-deploy/">App 部署 CI/CD</a>。</li>
<li>簽章治理：讀 <a href="/blog/ci/knowledge-cards/app-signing/" data-link-title="App Signing" data-link-desc="說明行動與桌面應用的簽章憑證如何影響發布能力">App Signing</a> 與 <a href="/blog/backend/knowledge-cards/secret-management/" data-link-title="Secret Management" data-link-desc="說明 token、key、password 與憑證如何保存、輪替與撤銷">Secret Management</a>。</li>
<li>失敗處理：讀 <a href="../github-actions-failure-flow/">CI 失敗到修復發布流程</a>。</li>
</ul>
]]></content:encoded></item></channel></rss>