当前位置: 首页 > 知识库问答 >
问题:

iOS应用程序商店应用程序在登录过程中崩溃(未开发)

璩正志
2023-03-14

这可能是因为UserDefaults在一段时间后会被重置,也可能是因为我经常更新操作系统,但一段时间后我的iOS应用程序的发布版本会在我的登录屏幕上崩溃,很可能是在那里我检查保存的凭据(在UserDefaults中)。重新安装应用程序可以解决这个问题。控制台返回大量:

不支持在主线程外使用UIKit视图自定义API。-SetAlignStoKeyboard:发送到<_UIAlertControllerView:0x125B2D070;帧=(0 0;414 896);层= >

并且我的系统日志显示此线程上存在错误:

异常类型:EXC_CRASH(SIGABRT)异常代码:0x00000000000000000000000000000000000000000000异常注意:EXC_CORPSE_NOTIFY由线程触发:4

应用程序特定信息:已调用abort()

线程4名称:调度队列:com.apple.nsurlsession-委派线程4崩溃:0 libsystem_kernel.dylib 0x00000001bfb4e414 0x1bfb26000+164884 1 libsystem_pthread.dylib 0x00000001dd6a8b50 0x1dd6a6000+11088 2 libsystem_c.dylib 0x000000019b027b74 0x19afb1000+486260 3 libc++abi.dylib 0x00000001a6d1acf8 0x1a6d07000+81144 4 libc++abi.dylib 0x00000001a6d0be4c

下面是我用来检查保存的凭据的一些代码。在后端API中,我看不到任何登录尝试。如果有帮助的话,我可以在它崩溃之前看到这个viewcontroller。不确定这是否排除了ViewDidLoad。

override func viewDidLoad() {
    super.viewDidLoad()
    addLoadingSpinner()
    bLogIn.titleLabel?.font = UIFont.setToVoiceLight()
    self.tfCustomerID.delegate = self
    self.tfUsername.delegate = self
    self.tfPassword.delegate = self
    tfUsername.keyboardType = .default
    tfPassword.textContentType = .password
    setupUI()
    if UserDefaults.standard.string(forKey: UserDefaultsKeys.session) != nil
        && UserDefaults.standard.string(forKey: UserDefaultsKeys.savedCred) == "True" {
        login_session = UserDefaults.standard.string(forKey: UserDefaultsKeys.session)!
        check_session()
    }
    else if UserDefaults.standard.string(forKey: UserDefaultsKeys.savedCred) == "True" &&
            UserDefaults.standard.string(forKey: UserDefaultsKeys.usesBiometrics) == "True" {
        promptTouchOrFaceID()
    }
    removeLoadingSpinner()
}

override func viewWillAppear(_ animated: Bool) {
    AppDelegate.AppUtility.lockOrientation(UIInterfaceOrientationMask.portrait, andRotateTo:
                                            UIInterfaceOrientation.portrait)
    cbSave.isChecked = UserDefaults.standard.string(forKey: UserDefaultsKeys.savedCred) == "True"
    addObservers()
}

func check_session() {
    UserDefaults.standard.set(login_session, forKey: "session")
    UserInfo.access_token = UserDefaults.standard.string(forKey: "session")!

    var request = URLRequest(url: NSURL(string: checksession_url)! as URL)
    request.httpMethod = .GET
    request.addValues(...)
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode == 200 {
            //VERIFIED THAT NEVER GETTING TO API
            DispatchQueue.main.async {
                ...
            }
        } else {
            self.promptTouchOrFaceID()
            UserDefaults.standard.set(nil, forKey: UserDefaultsKeys.session)
        }
    }
    task.resume()
}

下面是我的生物识别提示代码:

func promptTouchOrFaceID() {
    //create context for touch auth
    let authenticationContext = LAContext()
    var error: NSError?
    authenticationContext.localizedFallbackTitle = ""
    let biometricType = authenticationContext.biometricType
    //check if the device has a fingerprint sensor, exit if not
    guard authenticationContext.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics,
                                                  error: &error) else {
        let title = "Error"
        var message = ""
        switch biometricType {
        case .faceID:
            message = "This device does not have a FaceID sensor or the sensor is not enabled."
        case .touchID:
            message = "This device does not have a TouchID sensor or the sensor is not enabled."
        case .none:
            message = "This device does not have any sensors to use TouchID or FaceID"
        }

        AlertService.showAlert(on: self, title: title, message: message)
        UserDefaults.standard.set("False", forKey: UserDefaultsKeys.usesBiometrics)
        removeLoadingSpinner()
        return
    }
    authenticationContext.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics,
                                         localizedReason: "Please use your fingerprint to authenticate.",
                                         reply: { [unowned self] (success, error) -> Void in
                                            if (success) {
                                                //fingerprint recognized, set this possible and go to view controller
                                                OperationQueue.main.addOperation({ () -> Void in
                                                    self.fillInUserDetails()
                                                    self.login_now(
                                                        username:self.tfUsername.text!,
                                                        password: self.userDefaults.string(forKey: UserDefaultsKeys.password)!,
                                                        customer: self.tfCustomerID.text!)
                                                })
                                            }
                                         })

     }

共有1个答案

何玺
2023-03-14

只是一个疯狂的镜头,但是在您的plist文件中是否有nsfaceidusagedescription键。我记得几个月前有过这样的问题。

 类似资料:
  • 我是新的Android。我试图将FB登录与我的Android应用程序集成。我已经按照developers.facebook.com的所有说明进行了集成。然而,当我试图运行我的应用程序时,它会在发布时崩溃。 请注意,我的AndroidManifest.xml中已经有Facebook应用程序ID、元数据标签和android活动标签。 布局如下: 以下是my LoginActivity的代码片段: 以下

  • 问题内容: 当我尝试访问Flask应用程序时,该应用程序崩溃了。 这类似于this或this。但是,我的设置似乎正确。 flask.cli.NoAppException:提供的文件/路径(服务器)似乎不存在。请确认路径正确。如果应用不在PYTHONPATH上,请确保扩展名为.py 我的环境变量设置正确。 我的服务器文件是y目录中没有任何文件。 我不记得对代码进行任何特殊更改。该错误可能来自哪里?

  • 在以前的代码上,谁医生帮了我 现在,android应用程序在我的手机上运行时崩溃了,这是错误日志 第一个问题是在我用相机扫描二维码后,它不能显示在二维码的结果进入 第二个问题是,我从存储器中选择了一个QRcode图像,然后点击确认,它崩溃了 下面是我认为的问题 类型不匹配:推断的类型是Uri?但乌里是意料之中的 冗余SAM构造函数 'onRequestPermissionsResult(Int,数

  • 预先列入登记表工作完善。注册后,它甚至显示我已登录。但当我尝试使用我在注册表中输入的相同凭证登录时。它不允许我登录。我认为问题出在中间件上,因为当我输入错误的用户名/密码时,会显示错误,即无效凭据。但不是有效的,它只是重定向到登录页面没有任何错误。我使用的是laravel 5.0,所有文件都是由laravel提供的

  • 我正在Eclipse中创建一个应用程序,现在我想在我的项目中使用appcompat库。我已经成功地导入了这个库,当我用AppCompatActivity扩展一些活动时,它工作得很好。问题是,当我运行应用程序时,我的应用程序启动由AppCompActivty扩展的活动。应用程序崩溃。Log Cat正在显示NoClassDefFoundError:请为我指引正确的方向。谢谢

  • 我正在创建我的第一个Firebase应用程序。它的要求之一是在网络不可用时运行。Firebase指南指出: 启用磁盘持久性允许我们的应用程序即使在重新启动应用程序后也保持其所有状态。我们只需一行代码就可以实现磁盘持久性。FirebaseDatabase。getInstance()。setPersistenceEnabled(true);启用磁盘持久性后,我们的同步数据和写入将在应用程序重新启动时持