简体   繁体   English

发布到 Testflight 时 React Native Expo 应用程序崩溃

[英]React Native Expo app crashing when published to Testflight

I have a react native Expo app that uses Location permissions.我有一个使用位置权限的 React Native Expo 应用程序。 It works great on my device and on the Simulators so moving to the next step of distribution - TestFlight.它在我的设备和模拟器上运行良好,因此进入分发的下一步 - TestFlight。 When I load the ipa to Testflight and then try to run the app, the app works up to the point that I ask the User for Permission.当我将 ipa 加载到 Testflight 然后尝试运行该应用程序时,该应用程序可以运行到我向用户请求权限的程度。 (So the app loads, authentication works, links to my server and db are all working etc). (因此应用程序加载,身份验证有效,到我的服务器和数据库的链接都有效等)。

At the point where the code requests user location permission, the usual alert "Allow while using app, Allow always, don't Allow" flickers on the screen for a couple of milliseconds then the app crashes and I get the option to share comments to Testflight.在代码请求用户位置权限时,通常的警报“使用应用程序时允许,始终允许,不允许”在屏幕上闪烁几毫秒,然后应用程序崩溃,我可以选择将评论分享给试飞。

The code which asks for permission is here:请求许可的代码在这里:

import * as Location from 'expo-location';
import * as Permissions from 'expo-permissions';
import createDataContext from '../../Context/createDataContext';

const deviceLocationReducer = (state, action) => {
  switch (action.type) {
    case 'get_device_location':
      return action.payload;
    default:
      return state;
  }
};

const getDeviceLocation = dispatch => async () => {
  let deviceLocation = null;
  try {
    // Ask User permission for location
    const { status } = await Permissions.askAsync(Permissions.LOCATION);
    console.log('\n***\nDeviceLocationContext.js: Permission status', status);
    if (status === 'granted') {
      // Permission granted, get user location
      deviceLocation = await Location.getCurrentPositionAsync({});
      console.log('DeviceLocationContext.js: Setting Context', deviceLocation);
    } else {
      console.log(
        'DeviceLocationContext.js: Permission to access location denied'
      );
    }

    dispatch({
      type: 'get_device_location',
      payload: deviceLocation,
    });
  } catch ({ message }) {
    console.log(
      `DeviceLocationContext.js: Get Device Location Error: ${message}`
    );
  }
};

export const { Context, Provider } = createDataContext(
  deviceLocationReducer,
  { getDeviceLocation },
  null
);

app.json here app.json 在这里

{
  "expo": {
    "name": "MyApp",
    "description": "MyApp Description",
    "slug": "client",
    "privacy": "public",
    "sdkVersion": "35.0.0",
    "platforms": ["ios", "android"],
    "version": "0.0.7",
    "orientation": "portrait",
    "icon": "./assets/images/icon.png",
    "splash": {
      "image": "./assets/images/splash.png",
      "resizeMode": "contain",
      "backgroundColor": "#ffffff"
    },
    "updates": {
      "fallbackToCacheTimeout": 0
    },
    "assetBundlePatterns": ["**/*"],
    "ios": {
      "supportsTablet": true,
      "bundleIdentifier": "com.reachout.myapp",
      "icon": "./assets/images/icon.png",
      "infoPlist": {
        "NSCameraUsageDescription": "Please allow access to add your photo.",
        "NSPhotoLibraryUsageDescription": "Please allow access to select an image from your photo library.",
        "NSLocationWhenInUseUsageDescription": "Please allow access to show venues near you"
      },
      "buildNumber": "0.0.7"
    },
    "android": {
      "permissions": [
        "CAMERA",
        "ACCESS_COARSE_LOCATION",
        "ACCESS_FINE_LOCATION"
      ],
      "versionCode": 7,
      "icon": "./assets/images/icon.png"
    }
  }
}

package.json here package.json 在这里

{
  "main": "node_modules/expo/AppEntry.js",
  "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios",
    "web": "expo start --web",
    "eject": "expo eject"
  },
  "dependencies": {
    "@expo/vector-icons": "^10.0.6",
    "axios": "^0.19.0",
    "expo": "^35.0.0",
    "expo-camera": "^7.0.0",
    "expo-constants": "~7.0.0",
    "expo-font": "^7.0.0",
    "expo-image-picker": "~7.0.0",
    "expo-location": "~7.0.0",
    "expo-permissions": "^7.0.0",
    "lodash": "^4.17.15",
    "react": "16.8.3",
    "react-dom": "16.8.3",
    "react-native": "https://github.com/expo/react-native/archive/sdk-35.0.0.tar.gz",
    "react-native-elements": "^1.2.7",
    "react-native-gesture-handler": "^1.3.0",
    "react-native-image-picker": "^1.1.0",
    "react-native-map-clustering": "^3.0.6",
    "react-native-maps": "^0.26.1",
    "react-native-paper": "^3.1.1",
    "react-native-ratings": "^6.5.0",
    "react-native-reanimated": "^1.2.0",
    "react-native-web": "^0.11.7",
    "react-navigation": "^4.0.10",
    "react-navigation-stack": "^1.9.4",
    "react-navigation-tabs": "^2.5.6"
  },
  "devDependencies": {
    "babel-eslint": "^9.0.0",
    "babel-preset-expo": "^7.0.0",
    "eslint": "^5.16.0",
    "eslint-config-airbnb": "^17.1.1",
    "eslint-config-prettier": "^4.3.0",
    "eslint-config-wesbos": "0.0.19",
    "eslint-plugin-html": "^5.0.5",
    "eslint-plugin-import": "^2.18.2",
    "eslint-plugin-jsx-a11y": "^6.2.3",
    "eslint-plugin-prettier": "^3.1.1",
    "eslint-plugin-react": "^7.16.0",
    "eslint-plugin-react-hooks": "^1.7.0",
    "prettier": "^1.19.1"
  },
  "private": true
}

Does anyone have any ideas?有没有人有任何想法? I'm drawing a total blank - I have run the build from expo in both production and dev, I have cleared expo caches, I have deleted the app from my device and loaded again - all to no avail.我完全空白 - 我已经在生产和开发中运行了世博会的构建,我已经清除了世博会缓存,我已经从我的设备中删除了应用程序并再次加载 - 一切都无济于事。

So I have a 'working' app which I cant distribute for testing.所以我有一个“工作”应用程序,我无法分发它进行测试。 Help!!帮助!!

Also - I have no idea how to debug or access the crash data on Testflight for an expo built app - again - any help greatly appreciated.另外 - 我不知道如何在 Testflight 上为世博会构建的应用程序调试或访问崩溃数据 - 再次 - 非常感谢任何帮助。 Thanks.谢谢。

Solved :) - will leave here just in case anyone else has this kind of issue as this one had me stuck for several days and builds.已解决 :) - 会离开这里以防万一其他人遇到这种问题,因为这个问题让我卡住了几天并进行了构建。

My problem was that I was asking for user location in a useEffect hook from a component that also mounted a Mapview.我的问题是我从一个也安装了 Mapview 的组件中要求用户在 useEffect 钩子中的位置。 In the Mapview I had set my provider prop to google .在 Mapview 中,我将provider prop 设置为google

If you do this then you must add a gogleMapApi key in your info plist.如果你这样做,那么你必须在你的信息 plist 中添加一个 gogleMapApi 键。 To be fair to Expo it actually does state this in the MapView documentation but it is right down at the bottom as an aside after the Android documentation.公平地说,Expo 确实在 MapView 文档中说明了这一点,但它在 Android 文档之后作为旁白放在底部。 I realised my problem and the solution from this thread after trawling through my logs for hours and finding that the problem was a google api error, NOT a permission location one.在浏览我的日志几个小时后,我意识到我的问题和这个线程的解决方案,发现问题是谷歌 api 错误,而不是权限位置错误。

[ https://forums.expo.io/t/how-to-set-googlemaps-with-gmsservices-provideapikey/17770][1] [ https://forums.expo.io/t/how-to-set-googlemaps-with-gmsservices-provideapikey/17770][1]

Hope this helps someone!希望这可以帮助某人!

I also faced the problem of not being able to identify the JS error and I wanted to share how one can debug this.我还面临无法识别 JS 错误的问题,我想分享如何调试它。

For iOS, you can build the standalone app with a simulator option and the crash logs are stored here:对于 iOS,您可以使用模拟器选项构建独立应用程序,崩溃日志存储在此处:

~/Library/Logs/DiagnosticReports/

I've written more details on this here.我在这里写了更多细节。

https://medium.com/@tak215/expo-rash-on-standalone-app-only-how-to-debug-29c88c69c821?sk=babf382671e1c8c5bf97a74773d4f4f5 https://medium.com/@tak215/expo-rash-on-standalone-app-only-how-to-debug-29c88c69c821?sk=babf382671e1c8c5bf97a74773d4f4f5

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 React Native 应用程序在 TestFlight Release 上崩溃 - React Native app crashing on TestFlight Release React Native Expo 应用程序仅在 Testflight 中崩溃(!),而不是在 Expo Development Server 上并且仅在使用某些参数导航时 - React Native Expo app crashes only (!) in Testflight, but not on Expo Development Server and only when navigating with certain params 从 Windows 操作系统上传 Expo 本机应用程序到 Testflight - Uploading Expo react native app to Testflight from Windows OS Expo react本机应用程序图像在testflight ios上无法正常工作 - Expo react native app image not work properly on testflight ios React Native / Swift-应用内购买代码在沙箱和testflight中随机崩溃 - React Native / Swift - In App Purchases code crashing randomly in sandbox and testflight "TestFlight React Native Expo 在启动时崩溃" - TestFlight React Native Expo crashes on startup 在TestFlight上测试React Native App - Testing React Native App on TestFlight 使用Testflight分发时,React-Native应用程序呈现不同 - React-Native app is rendered different when distributed with Testflight React Native应用程序立即在iOS TestFlight上崩溃 - React Native app crashes immediately on iOS TestFlight 当应用程序已在 Apple Store 上发布时通过 TestFlight 分发 - Distributing via TestFlight when app already published on Apple Store
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM