Xamarin Mac 寫了一個小 App 後的心得整理

  • 143
  • 0

Xamarin Mac 一個出了很久的東西,最近剛好有機會,寫了一個小 App 嘗試,記錄一下心得

Xamarin Mac 研究心得

基礎知識

微軟官方 Xamarin.Mac 文件網站:https://docs.microsoft.com/zh-tw/xamarin/mac/

開發環境

  • 開發工具:VisualStudio for Mac
    • 僅能在 Mac 上,使用 VisualStudio for Mac 來開發
  • 開發的作業系統最低需求:10.13
  • Xamarin.Mac App 的執行的最低需求:10.7
  • 開發步驟看文件初步看起來應該就跟原生開發 Mac 接近
  • Xamarin.Mac Sample Code : https://github.com/xamarin/mac-samples
  • Xamarin.Mac API Reference : https://docs.microsoft.com/en-us/dotnet/api/?view=xamarin-mac-sdk-14
  • Xamarin.Mac 基本上應該就跟 Mac 上面能用的東西是一對一的
    • 媒體播放的 AVAudioPlayer, AVAudoiSession 都有對應的
      • 也可以用 Plugin.MediaManager 或者 LibVLCSharp

開發筆記

  1. Keyboard Mapping 不一樣,可以設定為 VS (Windows) or Mac 原生,但是 Mac 原生的差滿多,要去一一找,目前設定是 VS (Windows)
    1. 還是沒找到一些本來在 VS 有的像 ctrl + j 的快速鍵要怎麼較出來
  2. Debug 的經驗有點奇妙,預設發生 Exception 是不會跳的,要去 Breakpoints 視窗裡面新增一個例外觸發的條件
  3. 既有公司寫好的 .NET Libray  Project 幾乎可以無痛轉移,尤其用 .NET Standard 的,更是
  4. UI 編輯是回到 Xcode 使用 UI  Builder,但是 VS 會去監控那個 UI 的檔案 (Storyboard),編輯完切換回去 VS 會自動偵測後產生對應的程式碼
    1. XCode 在綁定 UI 的方式有兩種,一種是用 Outlet (產生一個對應的物件,好比說一個 Button 就可以在 code 裡面多一個 Button 的成員變數), 一種是用 Action (產生一個執行的 method,就是在 Code 裡面會產生一個 method )
    2. 使用 Action 的話,似乎不支援 async,因為 Action 會採用 partial method 的方式達成,兩個 method 宣告不一致不行
  5. Mac 的 MVC 的 ViewController 感覺根本就是  View 的 CodeBehind 而不是真的 Controller
    1. 實際上開發的話,可以考慮多一層真的 Controller
  6. 從設定可以簡單切換到英文版 IDE
  7. File 不給路徑的會建立在 App 應用程式的封裝內,不會直接看到實體的檔案,但雖然在封裝內一樣都可以讀寫
    1. 可以用 Environment.GetFolderPath & Environment.SpecialFolder 來取得 (.NET Standard)
    2. 有結合路徑的需求,可以用 Path.Combine,會有更好的跨平台相容性!(因為路徑的分隔符號不一樣)
  8. 有些東西不一定要用原生的 class 去寫,可以用 .NET Standard ,寫起來會更順暢
    1. 像 File IO 等等
      1. 也許有 效能 考量的話可以再調整
    2. 像我用的套件(可以參考裡面的 SourceCode)
  9. CollectionView 依照微軟的文件操作上花了些功夫,發現是微軟文件漏掉一些步驟,實際使用上是沒問題的
  10. 拉 Seque 是要從 ViewController 的文字按下 Ctrl 拖到另外一個 ViewController 上,不是在 Designer 的介面上拉
  11. Debug 的 step over 有點不太一樣,疑似按下去也會進去到更底層的 sourceCode 而不是真的 step over
  12. 取得媒體檔案資訊,可以不用真的要去播放他,可以用 cocoa 內建的讀取檔案 meta 的 class 去讀取.
    1. Reference:https://stackoverflow.com/questions/5219379/how-to-get-the-duration-of-an-audio-file-in-ios
  13. 使用 TableView 比起用更彈性的 CollectionView 輕鬆愉快
    1. TableView 裡面的 Column 和 Cell 的 Identifier 不可以一樣
    2. Cell 的 Identifier 可以重複
    3. TableViewDelegate 裡面的 GetViewForItem 寫的時候,要把 "建立" 和 "給值" 分開來寫,否則編輯後呼叫 TableView.ReloadData 就會發現畫面出現很恐怖的事情 XD 原因就是同一個地方本來不需要被建立 Item 的又被重新建立了一次
  14. NSSlider 在會一直更新 Position 又想讓使用者執行 Seek 的動作的時候,記得要去 UI Builder 裡面把 continuous 的屬性打勾,否則會一直被 Position 更新位置回去,就是會讓用戶的 Seek 行為失效

總結心得

    Xamarin Mac 在開發上的確是滿乏人問津的,用 Google 就知道了,能夠下 Xamarin Mac 搜尋到的東西絕大部分都還是 iOS 或 Android 的,除此之外微軟文件也是 2266 的。這個套件應該推出很多年了但看起來主力還是放在 iOS / Android 多。希望未來的 MAUI 可以改進 XD
    開發上最主要會遇到的瓶頸應該是跟使用 Xamarin.Android or Xamarin.iOS 去開發會遇到的狀況一樣,就是每個平台特性的用法,包含 UI 控制項上,其餘單純只有 code 的地方能夠沿用既有 .NET Code 真的是滿輕鬆愉快的。

    至於問我有沒有覺得可以拿來開發產品,我是覺得有的!!就只是要習慣一下 VS for Mac 還有那些快速鍵 囧 ,那些快速鍵找不到真的是會拖慢開發速度的 XD (還有 Mac 本身的快速鍵跟 Windows 不一樣也是會拖慢,然後兩個作業系統切換來切換去,手都會錯亂按錯 Orz)
    然後最好能夠先熟悉一下 Mac 的開發模式,像我邊做邊學有地方就容易卡住。

    大概就這樣啦~ 有什麼好奇想問的可以流言(咦~有這個功能嗎?XD)


工商服務時間:

https://www.accupass.com/organizer/detail/1910170752158115281580
如果有對 Xamarin Forms 有興趣的朋友,這邊有 Xamarin Class 開設的課程喔~ 可以參考看看~