[[439486]]宝马会棋牌
在 iOS 15 公开推出后, 咱们开首从用户端收到响应论述:在绽开咱们的应用圭臬(Cookpad) 时他们被难熬其妙的反复退出到登录页。相配令东说念主骇怪的是,这并不是咱们在测试 iOS 15 beta 版的时刻发现的问题。
淌若你是来找竖立方法的,那就平直向下疗养到论断,但淌若你思了解更多对于咱们若何调试这个特定问题,那就开首吧。
复现响应的问题用户论述中的具体信息有限,咱们独一知说念的是:从 iOS 15 开首,用户绽开圭臬后会发现我方依然退出登录。
咱们莫得视频,也莫得具体的能力来重现这个问题,是以我发奋尝试以多样步地启动应用圭臬,但愿能亲眼看到它。我试注重新装配应用圭臬,我试着在有汇聚相连和莫得汇聚相连的情况下启动,我试着强制退出,经由30分钟的发奋,我遗弃了,我开首回话用户说我没找到具体问题。
皇冠hg86a
直到我再次解锁手机,莫得作念任何操作,就启动了 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:
皇冠客服飞机:@seo3687https://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
宝马会棋牌