簡體   English   中英

僅禁用模擬器的App Transport Security

[英]Disable App Transport Security for Simulator only

如何在模擬器上運行我的應用程序時禁用App Transport Security(當我在設備上運行應用程序時仍保持啟用狀態,即使在調試模式下)? 有沒有辦法用Swift代碼而不是通過修改Info.plist文件來禁用它?

我問,因為我已經配置了東西(通過下面的代碼片段),以便模擬器連接(通過HTTP)到運行在localhost上的開發服務器,並且設備連接(通過HTTPS)到雲中運行的生產服務器。

#if arch(x86_64) || arch(i386) // simulator
let apiBaseURLString = "http://localhost:3000"
#else                          // device
let apiBaseURLString = "https://api.example.com"
#endif

理想情況下,我希望在模擬器上啟用App Transport Security,並讓模擬器通過HTTPS連接到運行在localhost上的開發服務器。 我有那個工作,但我剛剛更新了Xcode,它破了。

通過讀取Info.plist在編譯時配置App Transport Security。 在運行時更改它實際上對ATS實施沒有任何影響,即使您可以在運行時更改Info.plist( 您不能 )。

我只能想到兩個解決方案:

  1. 模擬器構建配置 - 您可以創建兩個版本的Info.plist,其中一個完全禁用ATS,另一個用於在設備上運行。 然后,您可以創建特定的構建配置以在模擬器上運行。 在Build設置中,選擇禁用ATS的新Info-Simulator.plist。 這樣做的缺點是,您需要在模擬器上運行之前更改構建配置 - 它不會自動使用正確的構建配置來模擬器與設備。

  2. 模擬器沒有不同的ATS設置。 配置ATS以處理模擬器和物理設備。 對於大多數情況,ATS異常有很多選項。 需要本地網絡連接的例外嗎? 查看NSAllowsLocalNetworking 在webview中需要更多靈活性嗎? 嘗試NSAllowsArbitraryLoadsInWebContent

不幸的是,您可以在運行時檢測模擬器,但不能在運行時更改ATS行為。 您需要找到另一種方法,或者重新評估您是否真的需要在模擬器與設備上使用不同的配置。

我認為此代碼應該可以訪問.plist文件,根據此代碼,您可以根據需要進行更改,並為此設置條件。

Bundle.main.object(forInfoDictionaryKey: key_name)

UPDATE

在這里,我發布一張圖片請注意:

在此輸入圖像描述

在這里,您可以獲得以下值:

NSAllowsArbitraryLoads = 1;

通過這個你可以根據你的要求提出一個條件。

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM