我在 ChatGPT 上的樣子
最近 ChatGPT Image 2.0 發佈,我好奇它進化到哪個境界,於是我就問它我在 ChatGPT 上的樣子,透過我過去使用 ChatGPT 的行為與內容,用圖片與文字描繪出來。
(繼續閱讀…)
最近 ChatGPT Image 2.0 發佈,我好奇它進化到哪個境界,於是我就問它我在 ChatGPT 上的樣子,透過我過去使用 ChatGPT 的行為與內容,用圖片與文字描繪出來。
(繼續閱讀…)由於在整合國際牌的推播套件,搞了一星期遇卡關,iOS 測試沒問題,Android 取得裝置 Token 噴錯,最後發現是 Debug 包和 Release 包的問題,然後大陸工程師 10/1-10/9 假期中⋯⋯剛好趁這時候來徹底角解兩者差異。🥸
絕大部分時刻我都是包 Release 版本,而在上海的夥伴則是包 Debug 版本,在測試時發現兩包有不同反應,後來追問題才曉得套件有 Release/Debug 差異。
flutter build apk --flavor dev --release
flutter build apk --flavor dev --debug
在 Flutter 開發中,Debug 與 Release 版本扮演著不同的角色,開發者需要了解兩者差異,才能在開發與上架流程中正確選擇。
.
Debug 版本主要用於開發與測試。它啟用了 Flutter 的 Hot Reload 與 Hot Restart,讓開發者能快速驗證修改結果。程式碼使用 JIT(Just-In-Time)編譯,啟動較慢、效能較低,但換來靈活的除錯體驗。Debug 版本通常包含完整的日誌輸出、Debug Banner,以及可以透過 DevTools 檢查 widget tree、記憶體與效能。它使用系統提供的 debug key 簽名,因此無法上架商店。
相對地,Release 版本則是提供給最終用戶的正式包。Flutter 在這個模式下會使用 AOT(Ahead-Of-Time)編譯,將 Dart 程式轉換為原生機器碼,大幅提升效能與啟動速度。Release 版本會進行最佳化,例如代碼壓縮與資源精簡,App 體積更小、更流暢。它不支援 Hot Reload,也不允許連接 DevTools,日誌輸出也會受到限制。最重要的是,Release 版本需要使用正式的 keystore 簽名,才能提交到 Google Play。
簡而言之,Debug 版本適合開發與測試,強調靈活性;Release 版本則面向使用者,追求效能與穩定性。開發者必須在不同階段切換模式,才能兼顧效率與品質。
(繼續閱讀…)最近需要整合中國可比較順利收到遠端推播的平台極光,我們決定使用最新的 Apple 推播通知(APNs)認證機制。
先前已有在文章:Apple 推播通知服務憑證更新研究過,了解舊的 p12 憑證與新的 p8 金鑰之差異,有更好的方法就與時俱進吧!
.
.p12 憑證.p12 檔案(包含憑證與私鑰)。.p12 是針對「單一 App」產生的,每個 App 要推播就得有自己的憑證。.p12,到期還得逐一更新。.p8 金鑰.p8 私鑰檔案來取代傳統憑證。.p8 金鑰可以同時支援多個 App,不需要為每個 App 建立不同檔案。.p8 金鑰。.p12 → 舊式、以「App」為單位的憑證,會過期,需要管理多份。.p8 → 新式、以「帳號」為單位的金鑰,不會過期,維護更簡單。原本 App Team 包含我僅有兩位開發者,我負責領導開發忙得不可開交。去年 Q4,親自招募兩位新人進駐,我終於可以有空閒時間做 Flutter App 的 CICD。🙂
2019 年在港商工作時,已有建置 iOS CICD 流程經驗,所以首選 Jenkins 來作為持續整合工具,節省研究時間,稍微比較其他工具後,認為 Jenkins 相關套件外掛多,未來有需有可以擴充。另因 Jenkins 有直覺的操作介面,使得無論是工程人員或是團隊其他成員,都能迅速上手。
註:
簡單比喻
我將 Shell Scrip 流程圖解如下:
.
(繼續閱讀…)從開發 Flutter App 開始,我除了要使用 iOS 模擬器外,還要召喚 Android 模擬器,兩平台護衛協助我研發與測試。😀
通常我都使用預設狀態的模擬器,一般來說不太會有問題。然而對於不熟 Android 模擬器的我,遇到比較棘手的像是模擬器空間不足,使得我無法安裝 APK 檔。
.
(繼續閱讀…)平常寫 Flutter App,我都會稱第三方套件為 Package,隱約曉得 Package 又可細分有無跟平台相依的套件。後來去了解後,才知道原來是有區分為 Package 與 Plugin。
翻成中文:
.
(繼續閱讀…)SDL (Simple DirectMedia Layer) 和 FFmpeg (Fast Forward mepg) 是兩個獨立的函式庫,可以結合使用以實現視訊播放。
(繼續閱讀…)透過 Flutter 框架開發的 App (含 iOS 與 Android) 已經上線,開始要追蹤用戶使用時,是否有發生不預期的狀況。
如同開發原生 iOS App 那樣,我將 Firebase Crashlytics 導入 Flutter App 中,一旦有任何崩潰、例外狀況,就會被記錄且上傳到 Firebase,讓我每天能明確掌握 App 使用狀況,並在適當時機修正並釋出新版本。🙃

這是我開啟記錄「例外」事件功能後,在 Firebase 上所搜集統計的資料。在沒有開啟此功能前是一片祥和,幾乎沒有「崩潰」事件。然而我為了優化 App 各種不預期的使用狀況,便有需要去了解會有哪些「例外」事件。🤔
(繼續閱讀…)想要實現 SDL 和 FFmpeg 非同步方式播放影片,涉及到在一個單獨的線程中解碼影片幀,並在主線程中更新 SDL 視窗。之後做到同時播放影片,還能偵測滑鼠點擊事件。
(繼續閱讀…)
HappyMan・迴響