我似乎想不通。有人能帮我解决这个问题吗?我正在使用CodePush上传我的应用程序,我希望Sentry处理我的错误,因为appcenter的诊断不太好。
我在我的应用程序的根组件中有这个。。。
if (process.env.NODE_ENV === 'production') {
Sentry.config('****',{
deactivateStacktraceMerging: false
}).install();
codePush.getUpdateMetadata().then((update) => {
if (update) {
Sentry.setVersion(update.appVersion + '-codepush:' + update.label);
}
});
}
我有一个部署包脚本,它将部署到代码推送,并运行在他们的文档中找到的哨兵命令
appcenter codepush release-react -a account/project --output-dir ./build && export SENTRY_PROPERTIES=./ios/sentry.properties && sentry-cli react-native appcenter account/project ios ./build/codePush
每次我捕捉到错误或已经捕捉到错误时,我都缺乏关于引发错误的文件的实际信息,当我展开它时,我会看到顶部的There was 1 error encountered while processing this event
,上面写着Source code was not found for app:///main.jsbundle
我觉得这一定是哨兵没有正确连接到代码推送来获取我的源地图的原因吗?
经过一些尝试和失败(因为Sentry文档具有误导性(后,终于获得了适用于iOS和Android的源地图:
MY_APP_NAME="e.g. Sentry account/project"
MY_BUNDLE_ID="e.g. com.company.superapp"
MY_APP_ENV="e.g. development, staging or production"
NATIVE_VERSION="e.g. 1.2.3"
PLATFORM="e.g. ios or android"
# Build and release to appcenter
appcenter codepush release-react
-a "$MY_APP_NAME"
-d "$MY_APP_ENV"
-m -t "$NATIVE_VERSION"
--sourcemap-output
--output-dir "./build/$PLATFORM"
export SENTRY_PROPERTIES="./$PLATFORM/sentry.properties"
# Get label and name of latest release
LABEL=$(appcenter codepush deployment history $MY_APP_ENV -a $MY_APP_NAME --output json | jq '.[-1][0]' -r)
RELEASE_NAME="$MY_BUNDLE_ID@$NATIVE_VERSION+codepush:$LABEL"
# Upload sourcemap
sentry-cli react-native appcenter
"$MY_APP_NAME" "$PLATFORM" "./build/$PLATFORM/CodePush"
--deployment "$MY_APP_ENV"
--release-name "$RELEASE_NAME"
--dist "$LABEL"
在app.ts(或类似程序(中执行此初始化:
Sentry.init({...});
codePush.getUpdateMetadata().then(update => {
if (update) {
if (MY_APP_ENV === 'production')) {
Sentry.setRelease(
`${MY_BUNDLE_ID}@${update.appVersion}+codepush:${update.label}`,
);
} else {
Sentry.setRelease(
`${MY_BUNDLE_ID}.${MY_APP_ENV}@${update.appVersion}+codepush:${update.label}`,
);
}
Sentry.setDist(update.label);
}
});
环境:
appcenter version: 2.7.3
@sentry/react-native: 2.5.1
通过CLI上传源映射时,需要使用release
和dist
选项调用Sentry.init
,并传递与标志相同的值。
根据哨兵文件
如果你想将Sentry与CodePush一起使用,你必须将release和dist传递给Sentry.init。我们的建议是将它们存储在app.json中,或者你可以只使用package.json。这些值需要对你的代码库的每个版本都是唯一的,并且与源地图上的版本完全匹配,否则它们可能不会被符号化。
例如:
Sentry.init({
dsn: YOUR_DSN,
release: '1.0',
dist: 'v1',
});
然后当你想上传你的源地图时:
export SENTRY_PROPERTIES=./ios/sentry.properties
sentry-cli react-native appcenter
account/project
ios ./build/codePush
--release-name "1.0"
--dist "v1"
您的release
和dist
可以是任意字符串,但Sentry建议使用以下格式:
${BUNDLE_ID}@${APP_VERSION}+codepush:${DIST}
我遇到了同样的问题-所有内容都被上传到Sentry并附加到Release中,但Issues显示了这个警告。
对我来说,问题是捆绑包ID在应用程序和Sentry Release中不同,同步解决了这个问题。