首页 > 解决方案 > 存储共享 Safari 凭据时出现 SecAddSharedWebCredential 静默错误 - 应用审核失败

问题描述

由于登录屏幕挂起,我的应用程序未通过审核。当用户登录时,应用程序收到成功的响应后,它会尝试存储或更新用户共享的 Web 凭据。

该应用程序已被苹果审查并拒绝,他们说该应用程序在屏幕上加载微调器时挂起,由于处理超时、成功、不成功或无法识别的 http 响应代码,我无法重现并且不应该出现这种状态。

@IBAction func pressedLogin(_ sender: UIButton) {
    OurCustomSpinner.sharedInstance.showSpinner()
    let loginOperation = LoginOperation(email: emailTextField.text!, password: passwordTextField.text!)

    loginOperation.success = { userItem in
        DispatchQueue.main.sync {
            // Try to store credentials, we don't care if it succeeds or fails, user should still go to next screen
            SecAddSharedWebCredential("midrive.com" as CFString, self.emailTextField.text! as CFString, self.passwordTextField.text! as CFString, { (error) in
                // Store user object (would crash if it failed)

                DispatchQueue.main.sync {
                    // Spinner hidden here - line never reached
                    OurCustomSpinner.sharedInstance.hideSpinner()
                    // Take user to next screen
                }
            })
        }
    }

    loginOperation.failure = { error in
        DispatchQueue.main.sync {
            // Spinner hidden here - line never reached
            OurCustomSpinner.sharedInstance.hideSpinner()
            self.presentError(message: error.localizedDescription)
        }
    }

    NetworkQueue.shared.addOperation(op: loginOperation)
}

由于应用程序永远不会到达隐藏微调器的地方,我只能认为 Web 请求成功(因此没有超时错误),并且SecAddSharedWebCredential以某种方式静默失败,可能是由于用于应用程序审查的设备上的安全配置。

以前有没有人遇到过这种情况,或者是否有人知道是否存在阻止共享 Web 凭据的安全选项?它在本地工作并正确预填充/更新密码,并适用于我们的 testflight 用户。

只是为了更新这个,我重新提交了这个没有这SecAddSharedWebCredential条线,它第一次通过了审查。

标签: iosswiftsecuritysecsharedcredentials

解决方案


推荐阅读