發表文章

Flutter 動態配置多環境 - iOS Scheme 配置

圖片
iOS app 同樣也有區分 app 名稱和套件名稱的需求,但現在嘗試帶 --flavor 參數建置 iOS 版 app 的時候,會得到以下訊息: 字面上的意思是沒有設定自訂 Scheme,稍後要移至 Xcode 進行建立 Scheme 的程序。 建立自訂 Scheme 在 VS Code 對著 ios 資料夾按右鍵,在選單中點擊 Open in Xcode。 在 Android Studio 是在選單中點擊 Flutter -> Open iOS module in Xcode。   出現 Xcode 後,點擊目標選擇器,在出現的選單中點擊 New Scheme…   Target 要選擇 Runner,Name 要輸入與 EnvName 相符的數值,本例為「dev」。並以相同方式建立 beta 的 Scheme。 接著點擊 Manage Schemes… 對著預設的 Runner 按下 Return(Enter) 鍵,重新命名為「prod」。完成每個 Scheme 的建立。   再次嘗試建置 Flutter app ,仍然出現錯誤訊息。 大意是要在 Debug 模式執行 prod 組態,預期會有名為 Debug-prod 的建置設定,但是現在沒有。 建立 Xcode 建置設定 點擊專案檔 -> PROJECT 下的 Runner -> Info 標籤。 在 Configurations 建立所需的設定 Flutter iOS 模組預設存在這 3 種設定: Debug Release Profile 這是對應 Flutter 支援的建置模式,稍後會以這些設定,延伸出本範例需要的設定檔。 更詳細的說明,可見〈 Flutter 的构建模式选择 〉。 按下+按鈕,點擊 Duplicate "Debug" Configuration 選項。在複製出來的項目中,重新命名為「Debug-dev」。其中 Debug 是 Flutter 支援的建置模式之一,dev 是本範例自訂的組態。 以同樣的方式建立「Release-dev」、「Profile-dev」,成果如附圖。   以同樣的方式處理 beta 組態,成果如附圖。   最後將預設的設定名稱,重新命名為 prod 適用的資訊,成果如附圖,完成設定檔

Flutter 動態配置多環境 - Android Gradle 配置

圖片
接著要實作更進一步的版本切換機制。 為每個版本,設定各別的 app 名稱和套件名稱。 在 Gradle 新增組態   在 VSCode 對著 android 資料夾點擊右鍵,在選單中點擊 Open in Android Studio。 在 Android Studio 是在選單中點擊 Flutter -> Open Android module in Android Studio。 在 android/app/build.gradle 的 android 區塊內新增以下程式: android { //.... flavorDimensions "app" productFlavors { prod { dimension "app" resValue "string", "app_name", "Build Flavor" applicationId = "com.dispy.buildflavor" } beta { dimension "app" resValue "string", "app_name", "Build Flavor Beta" applicationId = "com.dispy.buildflavor.beta" } dev { dimension "app" resValue "string", "app_name", "Build Flavor Dev" applicationId = "com.dispy.buildflavor.dev" } } }   本例支援 prod、beta、d

Flutter 讓 app 程式與 WebView 網頁互動

圖片
  在開發行動應用程式時,有時候會利用 WebView 連線到特定的網頁。如果遇到需要 app 端的程式和網頁端互相溝通的話,就可以利用「Javascript bridge」這種概念。它是實作一個介面,讓 app 程式可以呼叫網頁的 Javascript 程式,以此類推。 Android 和 iOS (原生)已有行之有年的做法,Flutter 也可以做到。 建立 Flutter 程式 這裡預期讀者已有基本的 Flutter 觀念,講解大致的流程: 新建 Flutter 專案 匯入 webview_flutter 3.0.4 在主程式中使用 WebView import 'dart:convert' ; import 'package:flutter/material.dart' ; import 'package:flutter/services.dart' ; import 'package:webview_flutter/webview_flutter.dart' ; void main () {   runApp ( const MyApp ()); } class MyApp extends StatelessWidget {   const MyApp ({ Key ? key }) : super ( key : key );   @ override   Widget build ( BuildContext context ) {     return MaterialApp (       title : 'Flutter Demo' ,       theme : ThemeData (         primarySwatch : Colors . blue ,       ),       home : const MyHomePage ( title : 'Flutter Demo Home Page' ),     );   } } class MyHomePage extends StatefulWidget {   const MyHomePage ({ Key ? key , required

Azure 實用技巧:成本估算、預防誤刪

圖片
經營網路服務,開銷是重要的考量。Azure 也備有成本管理工具可以協助用戶掌握自己的開銷。 成本預估 在首面點擊訂用帳戶進到管理介面。   在第一個頁面,就能看到這個訂用帳戶需負擔的花費。   點擊左側的「成本分析」可以檢視更詳細的資訊。 以本人使用的狀況,是虛擬機器和儲存體的開銷占大多數。 預算 這邊也有預算管理工具可以預防費用超出預期。 點擊左側的成本警示,接著點擊「新增」新增預算。   在這個畫面輸入名稱和金額(預算),注意使用的幣值。 接著在下一個頁面,輸入警示條件、電子郵件地址和通知的語言。 這裡我是設定達預算的 100% (500 元)時發出警示。 輸入完畢後,點擊「建立」新算預算。   回到成本分析,圖表會出現預算警示。 鎖定 另一個實用的工具,就是預防誤刪的鎖定功能。 進到某一個網路資源,點擊左側的「鎖定」進入鎖定頁面。 點擊畫面左上角的「新增」,輸入名稱和鎖定類型,這裡選擇「刪除」防止用戶誤刪。也可以選擇「唯讀」防止用戶更動參數。 點擊「確定」新增鎖定規則。   接著嘗試刪除這個資源......   就會收到無法刪除的提示。 用同樣的方式設定資源群組,這樣群組內的資源都會受到鎖定,避免誤刪。

Azure 實用技巧:Insights、警示

圖片
Azure 有許多的工具協助用戶管理各種資源。 Application Insights 能夠更清楚地知道網路應用程式使用的資源,像是處理器的使用率和反應時間等等。掌握這些資料,就能擬訂應用程式改進的方向,提供更好的服務品質。 以之前建立的網路應用程式為例,點擊管理介面左側的 Application Insights,然後依照畫面上的指示啟用這項服務,保留預設值,按下「套用」。   接著會被引導到 Insights 的管理介面,也可以在首頁找到。  在概觀頁就有一些可查看運作情形的數據。   在即時計畫頁,可以看到即時的運作情形。 但不需要被短期的數字迷惑,觀察長期趨勢即可。 警示 為網路資源建立警示規則,可以在設備處於特定狀態時,發送電子郵件通知。可藉此訊息得知程式有無正常運作。 以下以虛擬機器為例。 在機擬機器的管理介面,點擊左側的「警訊」,再點擊 Enable 按鈕啟動服務。    在右側的視窗可以編輯想要監測的項目和數值,和通知方式。 按下「啟用」等候設定完畢後即可使用。   再次來到警訊介面,就會看到警示列表。目前還沒有資料。    點擊「警示規則」可查看已設定的所有規則。 點擊其中一個規則,可以編輯條件和警示嚴重性等資訊。  以百分比 CPU 為例,可以點擊「新增條件」新增其他的條件。依照說明,如果有多個條件的話,必須符合所有條件才會觸發警示。 也可以調整現有的條件,點擊其中一個條件,彈出調整視窗。   將這個條件調整成 CPU 使用率為 70% 以上時,發出警示。 按「完成」套用設定。   本例在虛擬機器安裝 Floding@home 示範大量使用資源的情形。   預設是在 5 分鐘內,連續 1 分鐘符合條件,就會發送通知。   並且會記載滿足條件時的相關參數。(本例是當 CPU 使用率達 80% 時) 本人實測條件變更生效後,會收到第一次符合條件的通知,在這之後即使 CPU 使用率一直處於指定的使用率之上,也不會一值收到通知。 也可以在警訊介面瀏覽之前發佈的警示。