提问人:Megha Pradeetha 提问时间:9/21/2023 更新时间:10/18/2023 访问量:2976
仅在 iOS 17 设备下方遇到错误“线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x0)”
ERROR encountered only below iOS 17 devices "Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)"
问:
我刚刚将我的 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)
}
}
答:
解决方案是升级 Pods 项目上的所有库,包括从版本到更高版本。
由于某些原因,XCode 15 会将所有版本降级到 9.0 或 11.0,这将导致您的项目混乱和这样的奇怪错误。Flutter
IOS Deployment Target 11.0
12.0
XCode 15 在这里,我遇到了类似的错误,我发现是在 TARGET'S RUNNER 中将最低部署目标更改为比 IOS 11.x 更高的版本(我已更改为 iOS 13.0),单独更改每个库对我不起作用,可能是因为 Xcode 在构建应用程序时将这些库降级到较低版本(idk 为什么这样工作)。
不确定这是否也会对您有所帮助,但我遇到了完全相同的错误(使用 XCode 15),我通过确保“Pods”选项卡(见屏幕截图)中每个依赖项的“iOS 部署目标”与我在“运行器”选项卡中声明的目标相匹配来解决它。
也就是说,在 Runner 中,我将“iOS 部署目标”设置为 iOS 12,但在 Pods 中的依赖项中,它是 iOS 11。
将所有内容更新到iOS 12,并且有效。
希望它有所帮助,我无法提供更多专业知识,我对 iOS 开发完全不熟悉
评论
我在 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 =)
评论