iOS 安全性和隱私權功能

本文涵蓋在 iOS 中使用安全性和隱私權,以及它們如何影響 Xamarin.iOS 應用程式。

Apple 對 iOS 10 中的安全性和隱私權進行了多項增強功能,可協助開發人員改善其應用程式的安全性,並確保終端使用者的隱私權。 本文將討論如何在 Xamarin.iOS 應用程式中實作這些功能。

一般增強功能

已對 iOS 10 中的安全性和隱私權進行下列一般變更:

  • Common Data Security Architecture (CDSA) API 已被取代,應該取代為 SecKey API 來產生非對稱密鑰。
  • 新的 NSAllowsArbitraryLoadsInWebContent 金鑰可以新增至應用程式的 Info.plist 檔案,並允許網頁正確載入,而 Apple Transport Security (ATS) 保護仍會針對應用程式的其餘部分啟用。 如需詳細資訊,請參閱我們的 應用程式傳輸安全性 檔。
  • 由於 iOS 10 和 macOS Sierra 中的新剪貼簿可讓使用者在裝置之間複製和貼上,因此 API 已展開,以允許剪貼簿限制為特定裝置,並在指定時間點自動清除時間戳。 此外,命名貼上板不再保存,而且應該取代為共用貼上板容器。
  • 針對所有 SSL/TLS 連線,RC4 對稱加密現在預設為停用。 此外,安全傳輸 API 不再支援 SSLv3,因此建議開發人員儘快停止使用 SHA-1 和 3DES 密碼編譯。

存取私人用戶數據

在 iOS 10 上執行的應用程式(或更新版本)必須藉由在其 Info.plist 檔案中輸入一或多個隱私權密鑰,以靜態方式宣告其存取特定功能或使用者資訊的意圖,以向使用者說明應用程式想要取得存取權的原因。

重要

當系統嘗試存取其中一個受限制的功能或使用者資訊時,無法提供所需密鑰的應用程式將會以無訊息方式終止, 而不會發生錯誤! 如果應用程式在 iOS 10 上意外啟動失敗,請確定已指定所有必要的 Info.plist

下列隱私權相關金鑰可供使用:

  • 隱私權 - Apple Music 使用量描述NSAppleMusicUsageDescription) - 可讓開發人員描述應用程式想要存取使用者媒體媒體櫃的原因。
  • 隱私權 - 藍牙 周邊使用說明NSBluetoothPeripheralUsageDescription) - 允許開發人員描述應用程式想要存取使用者裝置上 藍牙 的原因。
  • 隱私權 - 行事曆使用方式描述NSCalendarsUsageDescription) - 可讓開發人員描述應用程式想要存取使用者行事曆的原因。
  • 隱私權 - 相機 使用量描述NSCameraUsageDescription) - 允許開發人員描述應用程式想要存取裝置相機的原因。
  • 隱私權 - 連絡人使用方式描述NSContactsUsageDescription) - 允許開發人員描述應用程式想要存取使用者連絡人的原因。
  • 隱私權 - 健康情況共用使用描述NSHealthShareUsageDescription) - 允許開發人員描述應用程式想要存取使用者健康情況數據的原因。 如需詳細資訊,請參閱Apple的 HKHealthStore 類別參考
  • 隱私權 - 健康情況更新使用說明NSHealthUpdateUsageDescription) - 可讓開發人員描述應用程式想要編輯使用者健康情況數據的原因。 如需詳細資訊,請參閱Apple的 HKHealthStore 類別參考
  • 隱私權 - HomeKit 使用量描述NSHomeKitUsageDescription) - 可讓開發人員描述應用程式想要存取使用者 HomeKit 設定數據的原因。
  • 隱私權 - 位置永遠使用方式描述NSLocationAlwaysUsageDescription) - 可讓開發人員描述應用程式為何一律能夠存取使用者的位置。
  • [已淘汰] 隱私權 - 位置使用方式描述NSLocationUsageDescription) - 可讓開發人員描述應用程式想要存取使用者位置的原因。 注意:此金鑰已在 iOS 8 中已被取代(且更新版本)。 請改用 NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription
  • 隱私權 - 使用使用方式描述 時的位置 (NSLocationWhenInUseUsageDescription) - 可讓開發人員描述應用程式在執行時想要存取使用者位置的原因。
  • [已淘汰] 隱私權 - 媒體櫃使用說明 - 可讓開發人員描述應用程式想要存取使用者媒體櫃的原因。 注意:此金鑰已在 iOS 8 中已被取代(且更新版本)。 請改用 NSAppleMusicUsageDescription
  • 隱私權 - 麥克風使用方式描述NSMicrophoneUsageDescription) - 允許開發人員描述應用程式想要存取裝置麥克風的原因。
  • 隱私權 - 動作使用描述NSMotionUsageDescription) - 可讓開發人員描述應用程式想要存取裝置加速計的原因。
  • 隱私權 - 相片庫使用說明NSPhotoLibraryUsageDescription) - 可讓開發人員描述應用程式想要存取使用者相片庫的原因。
  • 隱私權 - 提醒使用說明NSRemindersUsageDescription) - 可讓開發人員描述應用程式想要存取使用者提醒的原因。
  • 隱私權 - Siri 使用量描述NSSiriUsageDescription) - 可讓開發人員描述應用程式想要將使用者數據傳送至 Siri 的原因。
  • 隱私權 - 語音辨識使用方式描述NSSpeechRecognitionUsageDescription) - 可讓開發人員描述應用程式想要將使用者數據傳送至 Apple 語音辨識伺服器的原因。
  • 隱私權 - 電視提供者使用說明NSVideoSubscriberAccountUsageDescription) - 可讓開發人員描述應用程式想要存取使用者電視提供者帳戶的原因。

如需使用 Info.plist 金鑰的詳細資訊,請參閱 Apple 的資訊屬性清單金鑰參考

設定隱私權金鑰

採用下列在 iOS 10 上存取 HomeKit 的範例(以及更新版本),開發人員必須將密鑰新增 NSHomeKitUsageDescription 至應用程式的 Info.plist 檔案,並提供字元串,以宣告應用程式為何想要存取使用者的 HomeKit 資料庫。 此字串會在使用者第一次執行應用程式時向使用者顯示:

An example NSHomeKitUsageDescription alert

Xamarin.iOS for Visual Studio 目前不支援從預設 iOS 指令清單編輯器中編輯 Info.plist 隱私權密鑰。 相反地,您必須使用泛型 PList 編輯器,因此請執行下列動作:

  1. 以滑鼠右鍵按兩下 方案總管中的Info.plist檔案,然後選取[開啟...]。

  2. 從程式清單中選取 [ 一般 PList 編輯器 ] 以開啟檔案,然後按兩下 [ 確定]。

    Select the Generic PList Editor

  3. +按兩下編輯器中最後一個資料列上的按鈕,將新專案新增至清單。 這稱為「自定義屬性」,並將 Type 設定為 String ,且值為空值。

  4. 按兩下屬性名稱,隨即會出現下拉式清單。

  5. 從下拉式清單中,選取隱私權密鑰(例如 Privacy - HomeKit 使用量描述):

    Select a Privacy key

  6. 在 [值] 資料列中輸入描述,瞭解應用程式想要存取指定功能或使用者資訊的原因:

    Enter a description

  7. 儲存對檔案所做的變更。

重要

在上述範例中,在 Info.plist 檔案中設定金鑰失敗NSHomeKitUsageDescription會導致應用程式在運行時間以無訊息方式失敗(由系統在運行時間關閉),而不會在 iOS 10 中執行時發生錯誤(或更新版本)。

摘要

本文涵蓋 Apple 在 iOS 10 中所做的安全性和隱私權變更,以及它們如何影響 Xamarin.iOS 應用程式。