Just My Life & My Work

Posts tagged ‘debug’

[Flutter] Debug 包和 Release 包

由於在整合國際牌的推播套件,搞了一星期遇卡關,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 開發中,DebugRelease 版本扮演著不同的角色,開發者需要了解兩者差異,才能在開發與上架流程中正確選擇。

.

Debug 版本主要用於開發與測試。它啟用了 Flutter 的 Hot ReloadHot 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 版本則面向使用者,追求效能與穩定性。開發者必須在不同階段切換模式,才能兼顧效率與品質。

(繼續閱讀…)

[iOS] 建立Log檔案

寫程式與除錯,最簡單來檢查有無錯誤的方式,就是看Log,把想要知道的狀態給「列印」到控制台。

現在的需求是想知道用戶陸續做了什麼動作,我們也能透過Log來得知一二。

(繼續閱讀…)

[iOS] 專案檔案數遞增

本週輪到我第二次「文字探討」,這一次我分享進階除錯技巧,關於XcodeLLDB。首先我表明為何需要學習進階除錯技巧,因為我們公司開發產品,歷時一年五個月專案檔案數遞增有目共睹,我特別透過Git回溯各時期的版本,來指令算出專案有多少個檔案。

檔案數隨著時間呈現性成長!

為何要查詢專案檔案數?這跟編譯時間有很大的關係呀!

(繼續閱讀…)

[iOS] 獲取WebView快取中的圖片

由於原生SDK沒有辦法直接獲取UIWebView中已下載的影像,因為想避免重複請求消耗資源避免減損使用者體驗,於是我找到可立馬使用的第三方套件:RNCachingURLProtocol。​雖然發現還要修改才能使用XD~

套件簡介

Simple offline caching for UIWebView and other NSURLConnection clients

WebView的圖片會使用NSURLProtocol來進行快取Cache,此第三方快取圖片會儲存到指定的文件夾,之後可以讀取此指定文件夾來獲取WebView的快取。

(繼續閱讀…)

[Xcode] 例外中斷點 (Exception Breakpoint)

Xcode中使用Breakpoint來debug是非常平常的事情,優秀的我們都能從Breakpoint來得知上下文狀態,如各個變數值。有時候崩潰(Crash)來得突然,Xcode沒有提供詳細的Crash訊息,像是我這個例子是:存取Empty Array

[Xcode] 例外中斷點 (Exception Breakpoint)2

此時例外中斷點 (Exception Breakpoint)就非常好用!

(繼續閱讀…)

[iOS] 呼叫Web Service除錯

今天來講一下簡單的問題,不知道要怎麼稱呼這一篇,就姑且叫呼叫Web Service除錯吧~

其實就是串API時所發現的奇異問題!使用PostmanChrome呼叫都很成功回傳我要的資料,卻在寫進iOS中卻得到不預期的結果,先前有提到過Basic Authentication,程式傳遞token後,回傳結果表示沒有傳遞token給server,明明就是照先前的code複製貼上修改API Function名稱,這次居然有問題讓我很納悶。

人不是萬能,總得要投降來找救兵,以便跳出框框,看見問題的癥結。還是找我們寫後台的資深工程師幫忙查看,搞了兩小時多,Function名稱換掉也一樣,最後資深工程師發現,原來URL不小心多打一個「/」~

錯:
http://happystudio.notebook.com:5000/api/ecg/?start_date=2017-10-18&end_date=2017-11-17

對:
http://happystudio.notebook.com:5000/api/ecg?start_date=2017-10-18&end_date=2017-11-17

原因:?前多一個/

那為何Postman或Chrome測試沒有問題?因為這兩個工具會自動把沒有「/」,變成有「/」,來符合後台的API格式,然而iOS SDK就沒做這個容錯處理。這要歸類成相容性問題嗎?其實複製URL貼上到Chrome測試,我就有發現網址會跳成有「/」。

花了點時間,算是幫後台debug啦~

[iOS] 編譯錯誤問題

第二次遇到類似的編譯錯誤問題,居然還讓我花些時間debug,只好把握時間記錄下來,這樣就能避免再次浪費時間除錯啦~

iOS 編譯錯誤問題00002

(繼續閱讀…)

關於Access Control Allow Origin

關於Access Control Allow Origin。查了網路,SO裡頭有好多人有同樣的問題,發現最好的解決方式就是透過server來設定response的header。

我使用Chrome來debug,發現正要用的domain會有下列回應,套上先人使用的domain來測試,沒有這樣的回應,所以猜想是server設定的問題囉~

Access Control Allow Origin.png

(繼續閱讀…)

[iOS] 拆掉和包裝套件 (Unarchive and Archive Library)

又到了要套用第三方套件的時候,一般而言都是找最「受歡迎」的GitHub開源套件,因為做得好大家有目共睹,還會給作者一顆星!不過在台灣的市場,要套Beacon SDK就得找台灣廠商,去年旅遊App套一個廠商的Beacon SDK,搞了一陣子的背景偵測有問題,現在購物App也要來套另一個廠商的Beacon SDK,這個廠商製作各種「可串接」套件都有些問題,這次當然也少不了啦XD~

回想三年多前iBeacon被Apple提出來至今,台灣市場總算熱絡了起來,可以回顧一下我先前撰寫的初探iBeacon

(繼續閱讀…)

[iOS] 顯示編譯日期與時間

每次開發後會編譯釋出給專案經理測試,然而有時候會忘記該裝置是舊的版本,因為有太多測試機在公司,拿來拿去也編來編去,測完後隔幾天就不小心拿到舊版本的機子,就很有可能測出不期望的bug出來,這實在耗費時間哪~

compile date time.jpg

現在想把編譯日期和時間顯示在App首頁下方,如此就能很清楚知道該版本的新舊。

(繼續閱讀…)

標籤雲