仅在 iOS 17 设备下方遇到错误“线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x0)”

ERROR encountered only below iOS 17 devices "Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)"

提问人:Megha Pradeetha 提问时间:9/21/2023 更新时间:10/18/2023 访问量:2976

问:

我刚刚将我的 XCode 更新到版本 15,但遇到了这个错误(仅限 17 以下的 iOS 版本)

Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)

显示此错误的代码 (PathMonitorConectivityProvider.swift):

当我从 XCode 运行代码(iOS 设备版本为 iOS 16.4)时,以下代码中发生异常。

import Foundation
import Network

@available(iOS 12, *)
public class PathMonitorConnectivityProvider: NSObject, ConnectivityProvider {

  private let queue = DispatchQueue.global(qos: .background)

  private var _pathMonitor: NWPathMonitor?

  public var currentConnectivityType: ConnectivityType {
    let path = ensurePathMonitor().currentPath
    // .satisfied means that the network is available
    if path.status == .satisfied {
      if path.usesInterfaceType(.wifi) {
        return .wifi
      } else if path.usesInterfaceType(.cellular) {
        return .cellular
      } else if path.usesInterfaceType(.wiredEthernet) {
        // .wiredEthernet is available in simulator
        // but for consistency it is probably correct to report .wifi
        return .wifi
      } else if path.usesInterfaceType(.other) {
        return .other
      }
    }
    return .none
  }

  public var connectivityUpdateHandler: ConnectivityUpdateHandler?

  override init() {
    super.init()
    _ = ensurePathMonitor()
  }

  public func start() {
    _ = ensurePathMonitor()
  }

  public func stop() {
    _pathMonitor?.cancel()
    _pathMonitor = nil
  }

  @discardableResult
  private func ensurePathMonitor() -> NWPathMonitor {
    if (_pathMonitor == nil) {
      let pathMonitor = NWPathMonitor()
      pathMonitor.start(queue: queue)
      pathMonitor.pathUpdateHandler = pathUpdateHandler
      _pathMonitor = pathMonitor
    }
    return _pathMonitor!
  }

  private func pathUpdateHandler(path: NWPath) {
    connectivityUpdateHandler?(currentConnectivityType)
  }
}

错误的屏幕截图

此外,Flutter 医生结果:

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.13.4, on macOS 13.5.2 22G91 darwin-x64, locale en-LK)
[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.1)
[✓] Xcode - develop for iOS and macOS (Xcode 15.0)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2022.1)
[✓] IntelliJ IDEA Community Edition (version 2022.3.2)
[✓] VS Code (version 1.82.2)
[✓] Connected device (4 available)
[✓] Network resources

• No issues found!

此外,AppDelegate.swift:

import UIKit
import Flutter
import GoogleMaps

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    GMSServices.provideAPIKey("AIzaSyB0SHZK3ngwOu0r26fm3pOrhKumXS7XdHY")
    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}
iOS Swift Flutter Xcode 异常

评论

0赞 Florentin Lupascu 9/21/2023
我有完全相同的错误。我今天安装了 xCode 15,我的 flutter 项目在同一行代码处崩溃了。也许我们应该在 GitHub Connectivity_Plus库的“问题”部分升起一个标志:github.com/fluttercommunity/plus_plugins/labels/......

答:

11赞 Florentin Lupascu 9/21/2023 #1

解决方案是升级 Pods 项目上的所有库,包括从版本到更高版本。 由于某些原因,XCode 15 会将所有版本降级到 9.0 或 11.0,这将导致您的项目混乱和这样的奇怪错误。FlutterIOS Deployment Target 11.012.0

enter image description here

0赞 mzkaoq 9/25/2023 #2

XCode 15 在这里,我遇到了类似的错误,我发现是在 TARGET'S RUNNER 中将最低部署目标更改为比 IOS 11.x 更高的版本(我已更改为 iOS 13.0),单独更改每个库对我不起作用,可能是因为 Xcode 在构建应用程序时将这些库降级到较低版本(idk 为什么这样工作)。

enter image description here

1赞 okariotis 10/5/2023 #3

不确定这是否也会对您有所帮助,但我遇到了完全相同的错误(使用 XCode 15),我通过确保“Pods”选项卡(见屏幕截图)中每个依赖项的“iOS 部署目标”与我在“运行器”选项卡中声明的目标相匹配来解决它。

也就是说,在 Runner 中,我将“iOS 部署目标”设置为 iOS 12,但在 Pods 中的依赖项中,它是 iOS 11。

将所有内容更新到iOS 12,并且有效。

希望它有所帮助,我无法提供更多专业知识,我对 iOS 开发完全不熟悉

截图:Changed those to iOS 12, to match the version I had in my Runner

评论

0赞 Amit Thakur 10/17/2023
这对我有用。非常感谢,但是有了这个修复程序,其他功能是否会中断,我不确定这一点。
6赞 KabaDH 10/18/2023 #4

我在 Xcode 15 中遇到了同样的问题,事实上,将 iOS 部署目标从 11.0 更改为 12.0 为我解决了这个问题。但是,没有必要为每个包手动执行此操作 - 您只需将脚本添加到您的 Podfile 中:

post_install do |installer|
 installer.generated_projects.each do |project|
 project.targets.each do |target|
   target.build_configurations.each do |config|
     config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
   end
 end
end

要更新你的 Pod,请在项目的 ios 文件夹中使用以下命令:

pod cache clean --all
pod deintegrate
rm -f Podfile.lock
pod install --repo-update

PS 准备好明年当我们获得 Xcode 13.0 和 iOS 16 时再次将其更改为 18 =)

评论

1赞 benny 10/25/2023
谢谢!在发现手动更改它们不断被清除后,这成功了(我猜是在构建期间)......我猜因为 Podfile 有这一行,也许它覆盖了我的手动更改。