如何使用 PHPickerViewController 取得 PHAsset

PHPickerViewController 是系統內建的一個照片選取工具,透過 PHPickerConfiguration 設定它,然後從它的 delegate function func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) 取得用戶選取的結果。看起來非常簡單直覺,直到我踩了坑...

繼續閱讀 ➜

Bitwarden 密碼管理工具

現代人離不開網路,所以我們會擁有許多不同的帳號和密碼。如果使用相同的密碼,一旦其中一個帳號被盜用,所有帳號都可能受到威脅;如果使用不同的密碼,又不可能全部都記住,尤其是每個網站對密碼的強度要求都不一樣。如果你想要一個方便又安全的解決方案,那麼我會推薦 Bitwarden

繼續閱讀 ➜

UIScrollView and AutoLayout

以前的作法

在以前要用 Auto Layout 來設置 UIScrollView 的 sub views 並不是一件讓人愉快的事情,雖然不複雜,但步驟就是有點麻煩。因為 scroll view 自身的特性,所以必須設定它本身的位置與尺寸,然後設定 sub views 的位置與尺寸,最後算出 contentSize 的尺寸。總結來說大概分成以下幾步:

  1. 設定 UIScrollView 本身的位置與尺寸
  2. 建立一個 contentView 並加到 UIScrollView 的 sub view
  3. 設定 contentView 的位置,通常是四邊都貼齊 UIScrollView
  4. 可以滾動的 sub views 都加到 contentView,然後用 auto layout 設定這些 sub views 的位置與尺寸
  5. 如果設定無誤的話,contentView 就可算出正確的尺寸,這就是 UIScrollViewcontentSize

最讓人困惑且忽略的就是第三點,因為它很不自然,但在 UIScrollView 卻又是必須的。另外就是第四點,一定要有明確的位置跟尺寸,這樣才有辦法算出 contentSizeUIScrollView 使用。

現在的作法

從 iOS 11 開始,UIScrollView 多了 frameLayoutGuidecontentLayoutGuide 這兩個方便的屬性,讓我們不必再用不自然的方式去設定 content 的 auto layout。

  1. 可以使用舊有的方式或是使用 frameLayoutGuide 設定 UIScrollView 本身的位置與尺寸
  2. 不需要額外的 contentView 了,直接把內容加到 sub view
  3. 這些 sub views 與 contentLayoutGuide 建立 auto layout constraints

整個設定流程變得自然許多,也更不容易出錯。現在我們只要確定 sub views 有設好明確的位置與尺寸,讓系統能夠算出 contentSize 即可。

必備的 Google Chrome Extension

我用的瀏覽器主要是 Chromium based,從早期愛用的 Google Chrome,到現在改用 VivaldiBrave BrowserSidekick。有時還會用 WebKit based 而且支援 Chrome/Firefox 套件的 Orion Browser

每次換工作都是一次整理工作環境的機會,我的瀏覽器也藉此重裝,雖然每次的工作都不完全一樣,但我發現有些 extension 是不管在之前還是現在的工作、不管是公司還是家裏都會安裝的。以下就是我必備的幾個 extension:

繼續閱讀 ➜

我的 Mac 設定

工程師都會有自己習慣的電腦設定,我自然也不例外。本文記錄了我自己的環境建置,方便以後換電腦或換工作時可以快速 setup,也歡迎有需要的人拿去修改或留言推薦你喜歡的工具。

繼續閱讀 ➜

如何讓 Xcode 支援 GitHub Private Repo

我們的 codebase 有用到放在 GitHub private repo 的 Swift package,為了讓 Xcode 能夠存取 private repo,必須讓 Xcode 認得 SSH key 才行。

因為 Xcode 只支援 RSA / DSA / ECDSA 這三種演算法的 SSH key,但 GitHub 不支援 RSA 跟 DSA 了,所以我們只剩下 ECDSA 可以用。

如果當時按照 GitHub 的文件建立 SSH key,它很有可能是 ED25519,這個演算法 Xcode 認不得,所以我們要新增一個新的 SSH key。

繼續閱讀 ➜

簡介 iOS Native 與 Web 的互動方式

有的時候一些跨平台共用的頁面會使用網頁的方式打造,在 iOS 的世界裡我們可以使用 WKWebView 呈現網頁內容,除了單純的呈現之外,彼此的互動也是不可或缺的一環。這篇文章將會簡單介紹該如何達成網頁與 iOS 原生程式碼之間的雙向溝通。

繼續閱讀 ➜

必備的 Visual Studio Code 套件

Visual Studio Code 是我預設的文字編輯器,它跨平台、執行速度快、開啟大檔案沒問題、擴充套件眾多,是我選擇用它的主要原因。底下列出一些對我幫助很大的擴充套件:

繼續閱讀 ➜