精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

解決 iOS 15 上 APP 莫名其妙地退出登錄

移動開發 iOS
在打開我們的應用程序(Cookpad) 時他們被莫名其妙的反復退出到登錄頁。非常令人驚訝的是,這并不是我們在測試 iOS 15 beta 版的時候發現的問題。

[[439486]]

在 iOS 15 公開推出后, 我們開始從用戶端收到反饋報告:在打開我們的應用程序(Cookpad) 時他們被莫名其妙的反復退出到登錄頁。非常令人驚訝的是,這并不是我們在測試 iOS 15 beta 版的時候發現的問題。

如果你是來找修復方法的,那就直接向下滾動到結論,但如果你想了解更多關于我們如何調試這個特定問題,那就開始吧。

復現反饋的問題

用戶報告中的具體信息有限,我們唯一知道的是:從 iOS 15 開始,用戶打開程序后會發現自己已經退出登錄。

我們沒有視頻,也沒有具體的步驟來重現這個問題,所以我努力嘗試以各種方式啟動應用程序,希望能親眼看到它。我試著重新安裝應用程序,我試著在有網絡連接和沒有網絡連接的情況下啟動,我試著強制退出,經過30分鐘的努力,我放棄了,我開始回復用戶說我沒找到具體問題。

直到我再次解鎖手機,沒有做任何操作,就啟動了 Cookpad,我發現APP就像我們的用戶所反饋的那樣,直接退出到了登錄界面!

在那之后,我無法準確的復現該問題,但似乎與暫停使用手機一段時間后再次使用它有關。

縮小問題范圍

我擔心從 Xcode 重新安裝應用程序可能會影響問題的復現,所以在這樣做之前,是時候查看代碼并試圖縮小問題的范圍。根據我們的實現,我想出了三個潛在的原因。

1、UserDefaults 中的數據被清除。

2、一個意外的API調用返回HTTP 401并觸發退出登錄。

3、Keychain 拋出了一個錯誤。

我能夠排除前兩個潛在的原因,這要歸功于我在自己重現該問題后觀察到的一些微妙行為。

  • 登錄界面沒有要求我選擇地區——這表明UserDefaults中的數據沒有問題,因為我們的 "已顯示地區選擇 "偏好設置仍然生效。
  • 主用戶界面沒有顯示,即使是短暫的也沒有——這表明沒有嘗試進行網絡請求,所以 API 是問題原因可能還為時過早。

這就把Keychain留給了我們,指引我進入下一個問題。是什么發生了改變以及為什么它如此難以復現?

是什么發生了改變以及為什么它如此難以復現?

我粗略地看了一下發布說明,在谷歌上快速搜索了一下,我找不到任何東西,所以我不得不繼續挖掘以更好地了解這個問題。

對Keychain數據的訪問是通過 Security[1] 框架提供的,這是一個眾所周知的棘手的問題。雖然有很多第三方庫來包裝這個框架以使事情變得更容易,但我們還是基于一些蘋果的示例代碼來維護我們自己的簡單封裝。

看一下這段代碼,我們調用 SecItemCopyMatching[2] 方法來加載我們的訪問令牌,它返回數據以及描述結果的 OSStatus 代碼。然而,不幸的是,雖然我們的封裝器會將不成功的結果與狀態代碼一起拋出,用于調試,但我們在下一層中卻拋棄了這些信息,只是將錯誤視為 nil。

我們實行了每周一次的發布計劃,多虧了大量的自動化。此時,我們即將發布的下一個截止點(封版)是在第二天。因為我們還沒有完全了解這個問題有多普遍,而且我們也不確定是否能夠在代碼凍結前發布一個修復程序,所以我利用這個機會通過使用Crashlytics(崩潰日志記錄工具) 增加一些額外的非致命性日志來解決缺乏可觀察性的問題。

雖然我們無法改變加載會話的行為,但我們能夠開始記錄錯誤并更好地記錄我們實現的當前行為。

這個結果給了我們一些很好的觀察點,然后我們可以在接下來的幾周內觀察。

在10.58.0和10.59.0版本中,受影響的用戶數量慢慢減少,這是由于我們在努力確定根本原因時引入了一項緩解措施,該措施在10.60.0中得到了修復。

此時,我能夠捕捉到返回的確切錯誤代碼。罪魁禍首是errSecInteractionNotAllowed[3]:

不允許與 Security Server 交互。

這個錯誤告訴我們,我們正試圖在數據不可用的時間點上從Keychain中讀取數據。這通常會發生在你試圖讀取已存儲的數據,并將其可訪問性設置為kSecAttrAccessibleWhenUnlocked[4],而設備仍處于鎖定狀態。

現在這完全說得通了,但唯一的問題是,在 Cookpad 中,我們只在應用啟動時從Keychain中讀取信息,而我的假設是,用戶一定是點擊了應用圖標來啟動應用,因此設備在這時應該總是解鎖的,對嗎?

那么,究竟發生了什么變化呢?即使我能夠重現這個問題,我也100%確定我的手機在我點擊應用圖標的時候是解鎖的,所以我不明白為什么會出現這個Keychain錯誤。

我決心找到原因,用一個調試工具替換了我們的應用程序的實現,該工具將嘗試并記錄其生命周期中不同節點的Keychain讀取。

在能夠復現問題的場景中,我觀察到以下結果:

  • main.swift — 失敗 (errSecInteractionNotAllowed)
  • AppDelegate.init() — 失敗 (errSecInteractionNotAllowed)
  • AppDelegate.applicationProtectedDataDidBecomeAvailable(_:)— 成功
  • AppDelegate.application(_:didFinishLaunchingWithOptions:) — 成功
  • ViewController.viewDidAppear(_:) — 成功

所以這(一半)解釋了它。為了避免在我們的AppDelegate上持有一些隱式解包的可選屬性,我們在init()方法中進行了一些設置,其中一部分涉及從Keychain中讀取訪問令牌。這就是為什么讀取會失敗,以及最終為什么一些用戶會發現自己被登出了。

我在這里學到了重要的一課,即我不應該假設受保護的數據在AppDelegate初始化時是可用的,但說實話,我還是不高興,因為我不明白為什么它不可用。畢竟,我們已經很多年沒有改變過這部分代碼了,而且它在iOS 12、13和14系統中一直運行良好,那么是什么原因呢?

尋找根本原因

我的調試界面很有用,但它缺少了一些有助于回答所有問題的重要信息:時間。

我知道在AppDelegate.application(_:didFinishLaunchingWithOptions:)之前,“受保護的數據” 是不可用的,但它仍然沒有意義,因為為了重現這個問題,我正在執行以下操作:

1、啟動應用程序 2、簡單使用 3、強制退出應用 4、鎖定我的設備并將其放置約 30 分鐘 5、解鎖設備 6、再次啟動應用

每當我在第 6 步中再次啟動應用程序時,我 100% 確定設備已解鎖,因此我堅信我應該能夠從 AppDelegate.init()中的Keychain讀取數據。

直到我看了所有這些步驟的時間,事情才開始變得有點意義。

再次仔細查看時間戳:

  • main.swift — 11:38:47
  • AppDelegate.init() — 11:38:47
  • AppDelegate.application(_:didFinishLaunchingWithOptions:) — 12:03:04
  • ViewController.viewDidAppear(_:) — 12:03:04

在我真正解鎖手機并點擊應用圖標之前的25分鐘,應用程序本身就已經啟動了!

現在,我實際上從未想過有這么大的延遲,實際上是@_saagarjha建議我檢查時間戳,之后,他指給我看這條推特。

Twitter:Apple開發人員文檔的首頁

推特翻譯:有趣的iOS 15優化。Duet 現在試圖先發制人地 "預熱" 第三方應用程序,在你點擊一個應用程序圖標前幾分鐘,通過dyld和預主靜態初始化器運行它們。然后,該應用程序被暫停,隨后的 "啟動"似乎更快。

現在一切都說得通了。我們最初沒有測試到它,因為我們很可能沒有給 iOS 15 beta 版足夠的時間來 "學習" 我們的使用習慣,所以這個問題只在現實世界的場景中再現,即設備認為我很快就要啟動應用程序。我仍然不知道這種預測是如何形成的,但我只想把它歸結為 "Siri智能",然后就到此為止了。

結論

從iOS 15開始,系統可能決定在用戶實際嘗試打開你的應用程序之前對其進行 "預熱",這可能會增加受保護的數據在你認為應該無法使用的時候的被訪問概率。

通過等待application(_:didFinishLaunchingWithOptions:)委托回調來保護自己,如果可能的話,留意UIApplication.isProtectedDataAvailable(或對應委托的回調/通知)并相應處理。

我們仍然發現了非常少的非致命問題,在application(_:didFinishLaunchingWithOptions:)中報告isProtectedDataAvailable為false,在我們可以推遲從鑰匙串閱讀的訪問令牌之外,這將是一個大規模的任務,現在它不值得進行進一步調查。

這是一個相當難調試的bug,而且行為的變化似乎完全沒有記錄,這對我來說真的沒有幫助。如果你也被這個問題所困擾,請考慮復制FB9780579[5]。

我從中學到了很多東西,我希望你也一樣!

更新: 自從發表這篇文章以來,實際上很多人都向我指出了蘋果公司關于預熱行為的相對完善的文檔[6]。然而,其他人也告訴我,他們仍然觀察到與某些場景中記錄的行為不同的行為,因此請謹慎行事。

參考資料

[1]Security:

https://developer.apple.com/documentation/security

[2]SecItemCopyMatching: https:

//developer.apple.com/documentation/security/1398306-secitemcopymatching?language=objc

[3]errSecInteractionNotAllowed:

https://developer.apple.com/documentation/security/errsecinteractionnotallowed?changes=_3

[4]kSecAttrAccessibleWhenUnlocked:

https://developer.apple.com/documentation/security/ksecattraccessiblewhenunlocked

[5]FB9780579: https://openradar.appspot.com/FB9780579

[6]蘋果公司關于預熱行為的相對完善的文檔: https://developer.apple.com/documentation/uikit/app_and_environment/responding_to_the_launch_of_your_app/about_the_app_launch_sequence#3894431

 

責任編輯:姜華 來源: Swift社區
相關推薦

2011-07-13 09:59:55

2022-04-27 10:02:20

MySQL數據庫

2022-05-01 12:35:53

MySQL數據庫日志

2019-05-21 09:54:45

貸款網貸賬戶

2010-02-22 16:44:15

CentOS Mysq

2021-02-14 13:25:46

Windows 10Windows微軟

2010-06-18 14:02:13

2009-10-20 09:57:31

Windows 7系統崩潰

2021-09-13 05:18:36

硬盤應用WizTree

2021-08-11 22:48:07

Windows 10Windows微軟

2010-12-05 19:43:51

2025-09-10 07:20:00

網絡IP無線網絡

2009-07-27 10:25:58

Linux字體配置操作系統

2019-10-10 15:14:35

人工智能機器學習技術

2021-10-25 22:48:53

手機電池中毒

2009-09-03 09:22:22

Linux風格Windows界面

2010-10-27 13:55:01

memoization遞歸JavaScript

2013-06-03 11:28:45

2009-07-10 09:38:50

2021-10-21 22:18:02

微信支付寶安全
點贊
收藏

51CTO技術棧公眾號

久久国产一区| 日韩精品在线观看视频| 一区二区在线观| 在线免费观看日韩视频| 国产精品jizz在线观看美国| 亚洲精品电影网| 亚洲欧美国产日韩综合| 中文字幕资源网在线观看| av不卡在线观看| 国产精品第一页在线| 男的操女的网站| 在线观看欧美理论a影院| 欧美日韩国产综合一区二区| 日韩精品综合在线| fc2在线中文字幕| 成人午夜免费av| 国产精品av网站| 视频一区在线免费观看| xxxwww国产| 懂色aⅴ精品一区二区三区| 亚洲欧美日韩国产一区二区三区| 久久综合入口| www.亚洲天堂.com| 蜜桃视频在线观看一区| 性亚洲最疯狂xxxx高清| 麻豆精品国产免费| 欧美在线色图| 精品夜色国产国偷在线| 香蕉视频1024| 欧美日韩伦理一区二区| 色综合天天天天做夜夜夜夜做| 免费成人进口网站| 国产二区视频在线观看| 成人动漫中文字幕| 91在线色戒在线| 波多野结衣网站| 亚洲欧美卡通另类91av| 久久久久久综合网天天| 日韩欧美综合视频| 久久精品国产亚洲夜色av网站| 日韩精品在线免费观看| 国产伦精品一区二区三区精品 | 欧美与黑人午夜性猛交久久久| av激情在线观看| 五月激情综合| 日韩亚洲欧美中文在线| 亚洲精品成人av久久| 在线观看欧美理论a影院| 日韩不卡中文字幕| 亚洲一区二区乱码| 秋霞在线一区| 日韩精品在线视频美女| 亚洲男人在线天堂| 久久亚州av| 日韩精品在线播放| 李宗瑞91在线正在播放| 伊人春色之综合网| 亚洲人成网7777777国产| 人人妻人人澡人人爽人人精品| 精品女人视频| 亚洲精品乱码久久久久久按摩观| 国产a级片视频| 美腿丝袜亚洲图片| 亚洲精品av在线| 国产毛片毛片毛片毛片毛片毛片| 国产主播性色av福利精品一区| 精品免费国产一区二区三区四区| 国产成人av免费观看| 中文字幕一区二区三区四区久久| 日韩精品一区二区三区中文精品| 超碰人人cao| 国产区精品视频在线观看豆花| 亚洲电影在线看| 亚洲av无码一区二区三区网址 | 日本少妇全体裸体洗澡| 亚洲最黄网站| 日韩免费高清在线观看| 中文字幕第三页| 韩国av一区二区三区| 91福利入口| 天天色综合av| 26uuu精品一区二区| 四虎永久国产精品| √天堂8在线网| 亚洲国产一二三| 日日碰狠狠躁久久躁婷婷| 久久精品资源| 欧美精品一区二区三| www.av欧美| 亚洲先锋影音| 91高清视频免费观看| 中文字幕在线2019| 成人午夜精品一区二区三区| 欧美成人综合一区| 日本视频在线| 亚洲成av人片在www色猫咪| 日韩精品一区中文字幕| 亚洲精品自拍| 日韩精品视频在线| 亚洲xxxx3d动漫| 国产精品老牛| 亚洲aⅴ男人的天堂在线观看| 蜜臀久久99精品久久久| 中日韩免费视频中文字幕| 激情视频小说图片| 亚洲精品在线影院| 911精品国产一区二区在线| 国产草草浮力影院| 色乱码一区二区三区网站| 久久久久久久久网站| 丰满人妻一区二区三区四区| 丁香五精品蜜臀久久久久99网站| 日韩免费av电影| a国产在线视频| 欧美三级乱人伦电影| avtt香蕉久久| 欧美xxx在线观看| 国产精品第二页| 五月婷婷丁香六月| 亚洲美女免费在线| 向日葵污视频在线观看| 网红女主播少妇精品视频| 久久天天躁夜夜躁狠狠躁2022| 国产农村妇女aaaaa视频| 国产成人免费视频精品含羞草妖精| 奇米视频888战线精品播放| 欧美午夜大胆人体| 欧美日产在线观看| 一区二区精品免费| 国产欧美一级| 国产女人水真多18毛片18精品 | 久久久久久久久久av| 中文字幕一区二区免费| 久久久久久久精| 国产精品国产亚洲精品看不卡| 北岛玲精品视频在线观看| 亚洲欧美日韩国产成人| 国产成人无码精品亚洲| 成人免费视频视频在线观看免费| 中文字幕在线乱| 日本一区二区中文字幕| 最新日韩中文字幕| 在线观看免费视频a| 久久久99免费| 成人在线看视频| 亚洲男人都懂第一日本| 91精品国产91久久久久久久久 | 国产成人av一区二区| 少妇高潮流白浆| 婷婷成人av| 日韩中文字幕在线免费观看| 在线观看免费视频一区| 国产精品久久久久久妇女6080| 国产视频一区二区三区在线播放| 天天久久夜夜| 人九九综合九九宗合| 日韩a级作爱片一二三区免费观看| 亚洲成av人在线观看| 第四色在线视频| 国产乱码精品| 日本成人看片网址| 成人做爰视频www| 中文字幕久热精品在线视频| 中文字幕有码无码人妻av蜜桃| 中文成人av在线| 亚洲图片 自拍偷拍| 欧美在线观看天堂一区二区三区| 91传媒免费看| 理论不卡电影大全神| 国产视频精品一区二区三区| 久久久精品毛片| 国产精品久久久久影视| www.污网站| 国内精品久久久久久久影视蜜臀| 国产精品一区视频| 电影一区二区三区| 深夜福利一区二区| 精品久久久免费视频| 午夜精品福利视频网站| 欧美特黄一区二区三区| 男女视频一区二区| 超碰超碰超碰超碰超碰| 青青草原在线亚洲| 国产日韩欧美自拍| 丁香花电影在线观看完整版| 亚洲欧美自拍一区| 一级黄色片免费| 亚洲欧洲美洲综合色网| 美女久久久久久久久| 久久天天综合| 超级碰在线观看| 群体交乱之放荡娇妻一区二区| 国产精品免费网站| 超黄网站在线观看| 中文字幕欧美专区| 欧美亚洲精品在线观看| 在线免费不卡视频| 国产 日韩 欧美 成人| 中文字幕欧美国产| japanese在线观看| 麻豆成人91精品二区三区| r级无码视频在线观看| 欧美亚洲在线日韩| 国产精品一区二区不卡视频| 99精品国自产在线| 97国产精品久久| 国产午夜精品久久久久免费视| 国产丝袜一区视频在线观看| 国产在成人精品线拍偷自揄拍| 亚洲超碰精品一区二区| 三级黄色录像视频| 久久久无码精品亚洲日韩按摩| www.色.com| 蜜臀久久99精品久久久画质超高清| www.日本在线视频| 色999国产精品| 欧美日韩大片一区二区三区| 91亚洲精品视频在线观看| 国产美女精品免费电影| 在线高清av| 久久久久久网址| www在线免费观看视频| 国产亚洲美女精品久久久| 成人在线看片| 韩国中文字幕2020精品| 精品国产免费视频| a级片免费观看| 欧美日韩国产小视频在线观看| 一级aaa毛片| 亚洲激情校园春色| 国产视频精品免费| 国产欧美日韩另类一区| 国产精品无码一区二区三区| 粉嫩av亚洲一区二区图片| 日韩av影视大全| 美洲天堂一区二卡三卡四卡视频| 农村妇女精品一二区| 国产亚洲网站| 亚洲熟妇无码一区二区三区| 国语精品一区| 免费高清一区二区三区| 国模大胆一区二区三区| 免费网站永久免费观看| 欧美在线影院| 一二三四中文字幕| 欧美视频不卡| 日韩极品视频在线观看| 红桃视频亚洲| 日本一区午夜艳熟免费| 亚洲成色精品| 波多野结衣乳巨码无在线| 夜夜精品视频| 成年人网站大全| 人人精品人人爱| 亚洲一级免费观看| 久久av老司机精品网站导航| 日韩精品丝袜在线| 日韩精品乱码久久久久久| 亚洲国产精品一区二区久久恐怖片| 日本午夜在线观看| 亚洲黄色小视频| 日韩和一区二区| 欧美日韩综合视频| 久久久999久久久| 91精品国产综合久久久久| 午夜精品久久久久久久99老熟妇| 日韩欧美国产小视频| 亚洲欧美黄色片| 亚洲黄色片网站| 加勒比一区二区三区在线| 一区二区三区国产在线观看| 午夜视频成人| 欧美韩国理论所午夜片917电影| bl视频在线免费观看| 日本精品视频在线观看| 国产a亚洲精品| 91视频免费进入| 欧美一级全黄| 色噜噜狠狠一区二区三区| 亚洲h色精品| 日日摸日日碰夜夜爽无码| 美女诱惑一区| 中文字幕亚洲影院| 99久久精品免费看| 精品熟妇无码av免费久久| 亚洲美女免费在线| youjizz在线视频| 欧美乱妇15p| 少妇精品视频一区二区| 国产一区二区黑人欧美xxxx| 3d玉蒲团在线观看| 日韩免费精品视频| 久久久国产精品入口麻豆| 精品日韩电影| 亚洲精品91| 欧美日韩激情视频在线观看| 久久www免费人成看片高清| 午夜不卡久久精品无码免费| 欧美高清在线一区| 精品国产免费观看| 91精品欧美一区二区三区综合在 | 久久99国产综合精品免费| 欧美三级电影网| 天天干天天色天天| 久久亚洲欧美日韩精品专区| 69久成人做爰电影| 99国产超薄丝袜足j在线观看 | 久久久久亚洲av无码专区喷水| 亚洲日本免费| 一级片免费在线观看视频| 国产午夜精品久久| 国产一级免费观看| 6080亚洲精品一区二区| 嫩草研究院在线观看| 久久免费少妇高潮久久精品99| 亚洲毛片在线免费| 欧美一二三四五区| 亚洲精品女人| 少妇丰满尤物大尺度写真| 国产精品第五页| 亚洲成人av网址| 精品调教chinesegay| 男女在线视频| 91精品黄色| 久久中文视频| 欧美特级aaa| 欧美国产丝袜视频| 狠狠人妻久久久久久综合| 亚洲第一男人av| 草美女在线观看| 2014国产精品| 午夜片欧美伦| 向日葵污视频在线观看| 国产精品欧美极品| 99re热视频| 亚洲午夜女主播在线直播| 免费成人直播| 茄子视频成人在线观看| 国产亚洲激情| 久久久久久久久久久国产精品| 亚洲第一福利一区| 欧美综合视频在线| 韩国国内大量揄拍精品视频| www.成人网| 国产色一区二区三区| www.久久久久久久久| 日本一级淫片免费放| 精品久久一区二区三区| 黄色美女视频在线观看| 99三级在线| 亚洲成色精品| 亚洲成人av免费在线观看| 色综合天天综合狠狠| 麻豆国产在线播放| 国产精品视频久| 99re6这里只有精品| 亚洲综合激情视频| 亚洲人被黑人高潮完整版| 精品毛片在线观看| 欧美日韩成人在线视频| 97久久亚洲| 女人和拘做爰正片视频| 国产午夜精品一区二区三区四区| 波多野结衣毛片| 久久精品在线视频| 欧美9999| 国产精品后入内射日本在线观看| 91免费小视频| 中文在线a天堂| 超在线视频97| 久久黄色影视| 午夜激情在线观看视频| 亚洲视频免费看| av av片在线看| 欧美一区二区三区…… | 亚洲视频777| 亚洲成人1区| 欧美精品久久久久久久久久久| 91色视频在线| 一级做a爱片性色毛片| 欧美成人免费在线视频| 狼人精品一区二区三区在线| 男人天堂成人在线| 亚洲免费成人av| 天堂91在线| 成人免费看黄网站| 一区二区三区四区五区在线 | 亚洲国产成人av网| 国产视频网址在线| 91精品国产一区二区三区动漫 | 午夜久久久影院| 97超碰人人在线| 国产精品xxxx| 美女网站一区二区| 日本熟女一区二区| 日日骚av一区| 青青草原在线亚洲| 97免费公开视频| 91成人在线免费观看| 亚洲小说区图片区都市|