Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ios设备在更新17.6.1后闪退 #870

Open
gongml123 opened this issue Sep 4, 2024 · 3 comments
Open

ios设备在更新17.6.1后闪退 #870

gongml123 opened this issue Sep 4, 2024 · 3 comments

Comments

@gongml123
Copy link

在iOS更新了最新系统17.6.1后,点击路由跳转应用就会闪退安卓与之前的版本不会。
我的版本
"@react-navigation/native": "^6.1.18",
"@react -navigation/native-stack": "^6.11.0",
"@react-navigation/stack": "^6.0.11",
"react": "17.0.2",
"react-native": "0.67. 2》,
跳转方式
import { createRef } from 'react';
const navigationRef:any = createRef();

navigationRef?.current?.resetRoot({ index: 0, routes: [{ name: 'Root' }] });
navigationRef?.current?.navigate这些方式都会闪退

@sunnylqm
Copy link

sunnylqm commented Sep 4, 2024

参考下 react-navigation/react-navigation#11549

@gongml123
Copy link
Author

参考下 react-navigation/react-navigation#11549

我也是使用的xcode 15,但是只是在ios最新17.6版本上会闪退。17.5就不会

@ry-krystal
Copy link

这可能是由于 iOS 系统更新导致 React Navigation 相关的 API 和行为出现不兼容问题。你的 React Native 和 React Navigation 版本较老,可能存在一些在新系统中无法适配的情况。

问题排查与解决步骤:

  1. 更新 React Navigation 和 React Native
    你的 React Native 版本是 0.67.2,而最新的 React Native 已经是 0.7x.x。iOS 17 系统可能在底层行为上与这些旧版本的库不兼容。
    解决方案:
    尝试升级 react-native 和 react-navigation 到较新的版本。可以先升级到最新的 React Native 版本,并同步更新 React Navigation 依赖。
    执行以下命令更新 React Navigation 相关的库:
    yarn add @react-navigation/native@latest
    yarn add @react-navigation/native-stack@latest
    yarn add @react-navigation/stack@latest
    yarn add react-native-screens react-native-safe-area-context
    然后升级 React Native,查看官方迁移指南并按照步骤进行版本升级:
    npx react-native upgrade

  2. 检查 navigationRef 的使用
    你提到使用 navigationRef 的 resetRoot 和 navigate 会导致闪退。问题可能与 navigationRef 的实例化或使用方式有关。
    建议修正的写法:
    确保 navigationRef 在应用初始化时被正确传递给 NavigationContainer。
    resetRoot 和 navigate 都是在 navigationRef 的 current 不为 null 的情况下调用。
    示例:
    import { createNavigationContainerRef } from '@react-navigation/native';
    const navigationRef = createNavigationContainerRef();

// 跳转之前检查 navigationRef 是否已初始化
if (navigationRef.isReady()) {
navigationRef.resetRoot({
index: 0,
routes: [{ name: 'Root' }],
});

navigationRef.navigate('SomeScreen');
}
注意:确保在 NavigationContainer 中传递了 navigationRef:

{/* App navigators */}

  1. 检查 resetRoot 使用
    在较新的版本中,resetRoot 方法可以用来重置导航栈。要确保该方法的使用符合 React Navigation 的版本文档,特别是当你使用多个堆栈或复杂的嵌套路由时。
    建议:
    确保 resetRoot 的 routes 数组结构正确,且目标路由的名称正确。
    如果跳转目标的 name 不存在或路由栈定义错误,可能会导致闪退。
    检查一下是否有路由定义如下:
    <Stack.Navigator>
    <Stack.Screen name="Root" component={RootComponent} />
    <Stack.Screen name="SomeScreen" component={SomeComponent} />
    </Stack.Navigator>

  2. 检查崩溃日志
    对于 iOS 闪退,查看 Xcode 的崩溃日志可以帮助确定问题的根源。
    打开 Xcode,连接你的设备。
    在 Xcode 的 “Devices and Simulators” 中,找到你的设备。
    点击应用,然后查看崩溃日志,看看是否有具体的错误信息提示。

  3. 更新 iOS Pod 依赖
    在升级 React Native 和 React Navigation 之后,确保你的 iOS 依赖项已更新。可以通过以下命令更新 iOS 相关依赖:
    cd ios
    pod install --repo-update

  4. 排查特定 iOS 版本的兼容性
    如果升级库后问题依然存在,可能是 iOS 17.6.1 和 React Native 或 React Navigation 存在特定兼容性问题。可以尝试检查是否有关于 iOS 17 相关问题的已知问题和修复。
    检查 React Native 和 React Navigation 的 GitHub Issue 页面,是否有类似的问题报告。
    如果问题没有立即解决,可以考虑降级到 iOS 17 之前的版本以继续开发,等待官方修复。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants