์๊ตฌ ์ฌํญ: ์ ํธ๋ฅผ ์ด๊ธฐ ์ ์ ์ด ์ฒดํฌ๋ฆฌ์คํธ๋ฅผ ์ดํด๋ณด์ธ์.
@sentry/browser
@sentry/node
raven-js
raven-node
_(๋
ธ๋์ฉ ๋ ์ด๋ธ)_"raven-js": "3.27.0",
์ค์นํ ์ฝ๋
.config(dsnToUse, {
release: "WSVue-" + AppConst.application.version + "-" + AppConst.application.bundleVersion,
environment: bootstrapAppService.getEnvironment(),
ignoreErrors: content.ignoreErrorsList,
tags: {appversion: appInfo.applicationVersion},
dataCallback: function (data) {
// do something to data
data.extra.localStorageData = getLocalStorageData();
return data;
}
})
.addPlugin(RavenVue, Vue)
.install();
์น ์ฌ์ดํธ ํ๊ฒฝ์์๋ ํ๋ฅญํ๊ฒ ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ Capacitor๋ฅผ ์ฌ์ฉํ๋ ํ์ด๋ธ๋ฆฌ๋ ์ฑ๊ณผ ๋์ผํ ์ฝ๋๋ฒ ์ด์ค๊ฐ ์์ต๋๋ค.
์ปคํจ์ํฐ: https://capacitor.ionicframework.com/
๊ธฐ๋ก๋ ์ค๋ฅ ์ ๋ณด์ ์ค์ ์คํ ์ ๋ณด๊ฐ ์์ต๋๋ค.
๊ธฐ๋ก๋ ์ค๋ฅ ๋ฐ์ดํฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
{
"project": "181355",
"logger": "javascript",
"platform": "javascript",
"request": {
"headers": {
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16B91"
},
"url": "capacitor://localhost#/app/developer"
},
"exception": {
"values": [
{
"type": "Error",
"value": "Forcing error fooboo tester",
"stacktrace": {
"frames": [
{
"filename": "[native code]",
"lineno": null,
"colno": null,
"function": "Promise",
"in_app": true
},
{
"filename": "[native code]",
"lineno": null,
"colno": null,
"function": "initializePromise",
"in_app": true
},
{
"filename": "[native code]",
"lineno": null,
"colno": null,
"function": "Promise",
"in_app": true
},
{
"filename": "[native code]",
"lineno": null,
"colno": null,
"function": "initializePromise",
"in_app": true
},
{
"filename": "[native code]",
"lineno": null,
"colno": null,
"function": "forceError",
"in_app": true
}
]
}
}
],
"mechanism": {
"type": "generic",
"handled": true
}
},
"transaction": "[native code]",
"trimHeadFrames": 0,
"extra": {
"message": "Forcing error fooboo tester",
"code": "Forcing error fooboo tester.",
"emailTried": "Forcing error fooboo. tester",
"name": "Forcing error fooboo tester.",
"session:duration": 66618
},
"tags": {
"appversion": "4.4.6"
},
"breadcrumbs": {
"values": [
{
"timestamp": 1549015935.474,
"message": "Input: enableInputBlurring",
"level": "debug",
"category": "console"
},
{
"timestamp": 1549015935.474,
"message": "Input: enableScrollPadding",
"level": "debug",
"category": "console"
},
{
"timestamp": 1549015935.481,
"type": "http",
"category": "xhr",
"data": {
"method": "GET",
"url": "static/json/airports.json",
"status_code": 200
}
},
{
"timestamp": 1549015935.745,
"type": "http",
"category": "xhr",
"data": {
"method": "GET",
"url": "static/json/wx.json",
"status_code": 200
}
},
{
"timestamp": 1549015935.759,
"message": "checkUserAuthenticated",
"level": "log",
"category": "console"
},
{
"timestamp": 1549015935.783,
"message": "checkUserAuthenticated:Refreshing session",
"level": "log",
"category": "console"
},
{
"timestamp": 1549015937.922,
"type": "http",
"category": "fetch",
"data": {
"method": "POST",
"url": "https://cognito-idp.us-east-1.amazonaws.com/",
"status_code": 200
}
},
{
"timestamp": 1549015938.318,
"type": "http",
"category": "fetch",
"data": {
"method": "POST",
"url": "https://cognito-idp.us-east-1.amazonaws.com/",
"status_code": 200
}
},
{
"timestamp": 1549015939.911,
"type": "http",
"category": "xhr",
"data": {
"method": "POST",
"url": "https://cognito-identity.us-east-1.amazonaws.com/",
"status_code": 200
}
}
]
},
"user": {
"email": "********@gmail.com"
},
"environment": "DEV:CORDOVA:TFXC",
"release": "WSVue-4.4.6-0.19.02.01.04.07",
"event_id": "f137e408f8114bdcbc013be0b04f1f6a"
}
์ผํธ๋ฆฌ์์ ์คํ ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
@kamilogorek๋ , ์ด ์ผ์ ๋์์ฃผ์๊ฒ ์ต๋๊น?
์คํ ํ๋ ์์ ํ์ผ ์ด๋ฆ์ด ์๋ชป ํ์๋จ
{
"filename": "[native code]",
"lineno": null,
"colno": null,
"function": "forceError",
"in_app": true
}
์ํ ์ค๋ฅ ์ฝ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. Raven.js๋ ์ค๋ฅ ์ ๋ณด๋ฅผ ์ป์ง ๋ชปํฉ๋๋ค.
์ค๋ฅ ์์ฒด์์ ์ ์ ํ ํ๋ ์ ์ ๋ณด๋ฅผ ์ถ์ถํ๋ ๊ฒ์ TraceKit์ ์ฑ ์์ ๋๋ค. โ https://github.com/getsentry/sentry-javascript/blob/master/packages/raven-js/vendor/TraceKit/tracekit.js
ํ์ง๋ง ์๋ก์ด @sentry/browser
SDK์์ ์ผ๋ถ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ์ผ๋ฏ๋ก ๋ ์ด์์ ์กฐ์ฌ๋ฅผ ์ํํ๊ธฐ ์ ์ ๋จผ์ ์๋ํด ๋ณผ ์ ์์ต๋๋ค.
@kamilogorek
@sentry/browser๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๋๋น ์ ธ์ Raven์ผ๋ก ์ฎ๊ฒผ์ต๋๋ค.
์๋๋ ์ฑ์ด capacitor + Ionic 4 + VueJS + @sentry/browser๋ฅผ ์ฌ์ฉํ์ฌ Hybrid ์ฑ์ผ๋ก ์คํ๋ ๋์ ๋ชจ์ต์ ๋๋ค.
์๋๋ @sentry/browser๋ฅผ ์ฌ์ฉํ ๋ ๊ธฐ๋ก๋๋ ์ค๋ฅ ๋งํฌ์ ๋๋ค.
https://sentry.io/share/issue/d0c7e9529ac94dba9c4b7b04e16361ba/
์ฝ์์ ์ด๋ ๊ฒ ์๊ฒผ์ต๋๋ค
์ผํธ๋ฆฌ ์ค์
Sentry.init({
release: "WSVue-" + AppConst.application.version + "-" + AppConst.application.bundleVersion,
dsn: "https://[email protected]/181356",
transport: Sentry.Transports.FetchTransport,
integrations: [new Sentry.Integrations.Vue({Vue})],
environment: "DEVTEST",
beforeSend: function (exception) {
return exception;
}
});
์คํ์ค์ธ ์ดํ๋ฆฌ์ผ์ด์
์ด ์น์ฌ์ดํธ๋ก ์คํ๋ ๋ ๋ณด๊ธฐ์๋ ์๋ฆ๋ต์ง๋ง
์๋๋ ์ฑ์ด ์น์ฌ์ดํธ๋ก ์คํ๋ ๋ ๊ธฐ๋ก๋๋ ๋์ผํ ์ค๋ฅ์
๋๋ค.
https://sentry.io/share/issue/4133deab3fc240f2bc85c680fae922a0/
๋๋ Capacitor๋ Ionic 4 tbh๋ฅผ ์ฌ์ฉํ ์ ์ด ์์ต๋๋ค. ์ด๊ฒ์ ๋๋ฒ๊น ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฅ ์์ ์ฌํ ์ฌ๋ก๋ฅผ ์ ๊ณตํ ์ ์์ต๋๊น? ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ธ ์๊ฐ์ด ์ถฉ๋ถํ์ง ์์ต๋๋ค.
@kamilogorek ๋ฌธ์ ๊ฐ ์๋๋๋ค ๋ฌธ์ ๋ฅผ ์ฌํํ๊ธฐ ์ํ ํ ์คํธ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์์ต๋๋ค. ์ปคํจ์ํฐ๋ ์ฝ๋ฅด๋๋ฐ์ ์ ํํ ์ ์ฌํฉ๋๋ค. ๋์ผํ ๋๋ฒ๊น ํ๋ก์ธ์ค.
https://github.com/stripathix/ionic-vue
์ค๋ฅ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ค๋ฉด ์ค๋ฅ ํธ๋ฆฌ๊ฑฐ ๋ฒํผ์ ํด๋ฆญํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์์ฉ ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ํด README.md์ ๋จ๊ณ๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ๊ฝค ์ฝ์ต๋๋ค. Cordova ํ๊ฒฝ๊ณผ ๊ฑฐ์ ์ ์ฌํฉ๋๋ค.
ํ์ด๋ธ๋ฆฌ๋ ์ฑ์ ๋๋ฒ๊น ํ๋ ๊ฒ์ Cordova ๋๋ฒ๊น ๊ณผ ์ ํํ ์ ์ฌํฉ๋๋ค. ์๋ฎฌ๋ ์ดํฐ์์ ์ฑ์ ์คํํ ๋ค์ ์ฌํ๋ฆฌ์์ ์๋ฎฌ๋ ์ดํฐ์์ ์คํ๋๋ ์ฑ์ Inspector๋ฅผ ์ฝ๋๋ค.
์๋๋ ์ฑ์ด ํ์ด๋ธ๋ฆฌ๋ ๋ชจ๋ฐ์ผ ์ฑ์ ์คํํ์ ๋ ๊ธฐ๋ก๋ ์ค๋ฅ ๋งํฌ์
๋๋ค.
https://sentry.io/share/issue/a19f3ecd72eb4e6fa216e4146ad91038/
์๋ ํ์ธ์, @kamilogorek ๋น์ ์ ์ด๊ฒ์ ์กฐ์ฌํ ๊ธฐํ๊ฐ ์์๋์?
์๋์, ์์ฆ์ ์ฌ๊ฐ ์๊ฐ์ด ๋ณ๋ก ์์ด์. ์ธ์ ๊ฐ๋ ๊ทธ๊ฒ์ ์กฐ์ฌํ๋ ค๊ณ ํ ๊ฒ์ ๋๋ค, ์ฃ์กํฉ๋๋ค.
@kamilogorek ์ ๋ ์ด ๋ฌธ์ ๋ฅผ ๊ฒช๊ณ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ์กฐ์ฌํ ์ ์๋ ๋ค๋ฅธ ์ฌ๋์ด ์์ต๋๊น?
์ฃ์กํ์ง๋ง ์ง๊ธ์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์๊ฐ์ด ์์ต๋๋ค.
์กฐ์ฌํ๊ณ ์ถ๋ค๋ฉด ๋ค์์ ์ ์ํฉ๋๋ค.
beforeSend
์ฝ๋ฐฑ์ ์ฌ์ฉํ๊ณ ๋ ๋ฒ์งธ ์ธ์ hint
์ด๊ณ hint.originalException
์์ฑ์ด ์๋์ง ํ์ธํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์คํ์ ์กฐ์ฌํ๊ณ ์ ๋ณด๊ฐ ์ ํ ์๋์ง ํ์ธํ์ญ์์ค.computeStackTrace
๋ฉ์๋์ ์ค๋จ์ ์ ์ค์ ํ๊ณ ๊ฑฐ๊ธฐ์์ ๋จ๊ณ๋ณ๋ก error.stack
์ ๋ณด๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒCordova์ ํจ๊ป Ionic Angular v4 ์ฑ์์ @sentry/browser
๋ฅผ ์ฌ์ฉํ๊ณ ์์ค ๋งคํ ์คํ ์ถ์ ๊ณผ ์ ์ฌํ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ด Cordova์ฉ Ionic Web View ๋ฐ iOS์์ ์ฌ์ฉ์ ์ ์ ๊ตฌ์ฑํ์ ์ฌ์ฉ๊ณผ ๊ด๋ จ์ด ์๋ค๊ณ ํ๋จํ์ต๋๋ค(Cordova์ ๊ฒฝ์ฐ ionic://
capacitor://
). ์คํ ์ถ์ ํ๋ ์์ ํ์ผ ์ด๋ฆ์ ์๋ ์ฌ์ฉ์ ์ง์ ์ฒด๊ณ๋ ์์ถ ํด์ ์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
ionic://
์์ http://
๋ก ํ์ผ ์ด๋ฆ ์คํค๋ง๋ฅผ ๋ค์ ์์ฑํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์์ฑํ ๋ค์ ์์๋๋ก ์๋ํ์ต๋๋ค. ๋ค์์ ์ ๊ฑฐ๋ ๋ฒ์ ์
๋๋ค.
beforeSend = (event: Event) => {
const exceptionValue = event.exception && event.exception.values && event.exception.values[0];
// Approach taken from Sentry's React Native SDK.
// See https://github.com/getsentry/sentry/issues/4719#issuecomment-333836573
const stacktrace = event.stacktrace || (exceptionValue && exceptionValue.stacktrace);
if (stacktrace) {
stacktrace.frames.forEach(frame => {
if (frame.filename !== "[native code]") {
// The iOS webview uses a custom URL scheme for serving the web app.
// See https://github.com/ionic-team/cordova-plugin-ionic-webview#iosscheme
// The full URL with that scheme will be used for filenames in the stacktrace.
// The URL begins with "ionic://localhost/".
// The custom "ionic" scheme in the URL creates issues for source-mapped stacktraces.
// Replacing "ionic" with "http" in the stackframe filename will enable source-mapped stacktraces.
frame.filename = frame.filename.replace(/^ionic/, "http");
}
});
}
return event;
}
๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค!
@KevinKelchen : ์ด๊ฒ์ ์๋ชป๋ ํ์ผ ์ด๋ฆ์ ํด๊ฒฐํ์ง๋ง ์ ์๋์ง ์์ lineno
๋ฐ colno
๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํฉ๋๊น? @stripathix ์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋ ์์ iOS ์น ์ฑ์ ์ปคํจ์ํฐ ๋ด๋ถ์์ ์คํํ ๋ ์ ์๋์ง ์์ ํ๋ ์์ ๊ฐ์ต๋๋ค. ์์:
๋
๋์๊ฒ๋ ์ ๋ณด๊ฐ ๋๋ฝ๋ ๊ฒ์ด ์๋๋ผ ์ ์ฒด ํ๋ ์ ์ด ๋๋ฝ๋ ๊ฒ ๊ฐ์ต๋๋ค.
@kamilogorek : originalException์ ์ด๊ณผ ์ค ์ ๋ณด๊ฐ ์๋์ง ํ์ธํ ์ ์์ต๋๋ค. ์๋๋ฅผ ์ฐธ์กฐํ์ธ์.
tracekit ๋๋ฒ๊น ์ ์์ํ๋ ๋ฐฉ๋ฒ์กฐ์ฐจ ๋ชจ๋ฅด์ง๋ง ์์์ ๋๊ตฐ๊ฐ๊ฐ ๋ถ๋ช ํ ๋ฐ๊ฒฌํ ๊ฒ์ด ์์ ์ ์์ต๋๋ค.
@silviogutierrez ์ด๊ฒ์ ๋๋ฒ๊น ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์์ ์ฌํ์ด ์์ต๋๊น? ์ด์์ ์ผ๋ก๋ col/line์ด ๋๋ฝ๋ ํ๋ ์์ด ์๋ ๊ธฐ๋ณธ ์ฝ๋ฅด๋๋ฐ ์ฑ์ ๋๋ค.
@kamilogorek : ํ๋๋ก ํฉ์น๋ ค๊ณ ํ๊ฒ ์ง๋ง ์ค์ ๋ก ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. ๊ทธ๊ฒ์ ๋งค์ฐ ๊ฐ๋จํ๋ฉฐ ์ ํํ ์์ํ๋ ์์น์ ๋๋ค.
๋ฐ๋ก ์ฌ๊ธฐ: https://github.com/getsentry/sentry-javascript/blob/master/packages/browser/src/tracekit.ts
gecko
๋ฐ chrome
๋ณ์๋ ๋ชจ๋ ์ปคํจ์ํฐ ํ๋ ์์ ๋ํ ์ ๊ท์ ํ
์คํธ๋ฅผ ์ํด ๋น์ด ์์ต๋๋ค. ์ฆ, iOS์์ ์คํํ ๋ ์ปคํจ์ํฐ์ ํ๋ ์์ capacitor://localhost/foo/bar
์ด๊ณ Android์์๋ http://localhost
์
๋๋ค. ๋ฐ๋ผ์ Tracekit์ ์ ๊ท์๊ณผ ์ผ์นํ๋ [native code]
ํ๋ ์์ ์ ์ธํ iOS์ ๋ชจ๋ ํ๋ ์์ ์ญ์ ํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ์๋๋ก์ด๋์์ ์ ์๋ํ๋ค๊ณ ์์ํ ๊ฒ์
๋๋ค.
gecko
๋ณ์๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด ์ด (๋์ฐํ) sed ๋ช
๋ น์ ์คํํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค.
sed -i "s/moz-extension/moz-extension|capacitor/" node_modules/@sentry/browser/esm/tracekit.js
์ปคํจ์ํฐ ํ๋กํ ์ฝ์ ์ถ๊ฐํ๋ ค๋ฉด Tracekit์ ๋ํ PR์ ์ด์ด์ผ ํฉ๋๊น? chrome
regex๋ ์ข ๋ ์ ์ฐํ๋ฉฐ ์ด๋ฏธ ์ฌ๋ฌ ํ๋กํ ์ฝ์ ๋ํ regex์ ์ผ๋ถ๋ก [-a-z]
๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. gecko
์์๋ ์๋ํด ๋ณผ๊น์?
@silviogutierrez - ์ฌ๊ธฐ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ํ์ํ ๊ฒฝ์ฐ ์์ ์ฌํญ์ผ๋ก PR์ ์์ฑํ๊ฑฐ๋ ๋ก์ปฌ์์ ํ ์คํธํ ์๋ ์์ต๋๋ค.
๋ด ์์ ์ด ์๋ํ์ต๋๋ค. ๋ถํํ๋ ์ /ํ๋ก ์์ ๋ณต์ ์ ์ฅ์๋ฅผ ๋ง๋ค ์๊ฐ์ด ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์ ์ ๋์ ์์ ํ๋ก๊ทธ๋จ์ ์ฑ๊ณต์ ์ผ๋ก ์ฌ์ฉํ์ต๋๋ค.
๋ ๊ฐ์ง ์ง๋ฌธ์ด ๋จ์ ์์ต๋๋ค.
๊ทธ๊ฒ๋ค์ ์ข์ ์ง๋ฌธ์ด๊ณ , ๋๋ ๋ ๋ค์ ๋ํด ์์ฃผ ์ข์ ๋๋ต์ ๊ฐ์ง๊ณ ์์ง ์์ต๋๋ค.
์ ๊ท์์ผ๋ก ์์๋ธ ๊ฒ ๊ฐ์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ์ ์ฒด Cordova / Ionic / Capacitor ์ฌ์ฉ์ ์ ์ ๊ตฌ์ฑํ์ ์ผ๋ถ์ผ ๋ฟ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฑ์์ CORS ์ฌ์ ๋นํ์ ํผํ๊ธฐ ์ํด SSL ๊ณ ์ ์ ๋ต๊ณผ๋ ๊ด๋ จ์ด ์๋ ๊ฒ ๊ฐ์ง๋ง ํ์คํ์ง ์์ต๋๋ค.
@kamilogorek - ๋๋ ๋น์ ์ด ์ฌํ์ ์ํด ๋ฌด์์ ์ํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ ๊ฐ ์๊ฐํ๋ ๋ฒ ์คํธ ์ท์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
https://github.com/toddtarsi/cordova-create-react-app
์ด ์ ์ฅ์๋ฅผ ๋ถ๊ธฐํ๊ณ Sentry๋ฅผ ์ถ๊ฐํ๊ณ React ์ค๋ฅ ๊ฒฝ๊ณ๋ฅผ ์ถ๊ฐํ๊ณ ์ถฉ๋ ๋ฒํผ์ ์ถ๊ฐํ์ต๋๋ค. Cordova ์คํ ์ง์นจ์ด ์์ต๋๋ค. ํ๋ Cordova์์ ์ค์ ๋ก ์ป์ ์ ์๋ ๊ฒ๊ณผ ๊ฐ์ ๊ธฐ์ค์ ์ ๋๋ค. ์ด๊ฒ์ด ๋น์ ์ด ์ฐพ๊ณ ์๋ ๊ฒ์ธ์ง ์๋ ค์ฃผ์ญ์์ค.
@kamilogorek @silviogutierrez - ์๊ฒ ์ต๋๋ค. ์ฌ๊ธฐ์์ ๋ถํ์ ๋๋์ต๋๋ค. ๋๋ ์ด ๋ฌธ์ ์ ๋ถ๋ด์ด Gecko/safari ์ธก์์ ์์ธํ๊ฒ ๋ํ ์ค๋ฅ ๊ตฌํ์ผ๋ก ๊ท๊ฒฐ๋๋ค๋ ๊ฒฐ๋ก ์ ๋๋ฌํ์ต๋๋ค. ์ธ๋ด์ฌ์ ๊ฐ๊ณ ๋์์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
@toddtarsi ์๊ฐ์ด ๋ถ์กฑํด์ ์ฃ์กํ์ง๋ง ์๋ ค์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ์ข ๋ฃํ๋๋ก ํ๊ณ ์์ ๋กญ๊ฒ ping์ ๋ณด๋ด๊ฑฐ๋ ํ์ํ ๊ฒฝ์ฐ ์ ๋ฌธ์ ๋ฅผ ์ฝ๋๋ค. ๊ฐ์ฌ ํด์!
@kamilogorek ๋ ์ด @toddtarsi ์๊ฒ ์ ์ํ ๋๋ก ์ ๋ฌธ์ ๋ฅผ ๋ง๋ค๊ฑฐ๋ ์ด ๋ฌธ์ ๋ฅผ ์ธ๊ธํ๋ PR์ ์ ์ถํ์๊ฒ ์ต๋๊น?
์์ @silviogutierrez ์ ์๊ฒฌ(https://github.com/getsentry/sentry-javascript/issues/1863#issuecomment-563364652)์์ ์ง์ ํ๋ฏ์ด ์ด๊ฒ์ sentry-javascript์ ์กฐ์ ๋ tracekit ๋ฒ์ ์ ํน์ ํ ๋ฌธ์ ์ด๋ฉฐ ์ฝ๊ฒ ์ด ํ๋ก์ ํธ์์ ์์ ๋์์ต๋๋ค(https://github.com/getsentry/sentry-javascript/blob/master/packages/browser/src/tracekit.ts#L49).
๋ฌธ์ : gecko regex๊ฐ capacitor:// url ์ฒด๊ณ๋ฅผ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ Capacitor ์ฑ์ iOS์์ ๋งคํ ๊ฐ๋ฅํ ์คํ ์ถ์ ์ ๋ณด๋ด์ง ์์ต๋๋ค.
์๋ฃจ์
: gecko regex์ capacitor url ์คํค๋ง๋ฅผ ์ถ๊ฐํ์ญ์์ค.
ํ๋ก์ ํธ๋ฅผ ํฌํฌํ๊ณ ๋ด ์ฉ๋๋ก ๋ณ๊ฒฝํ๋ ค๊ณ ํฉ๋๋ค. ํ ์์ฒญ์ ์ ์ถํ๋ ค๋ฉด ์ ์๊ฒ ์๋ ค์ฃผ์ธ์!
@kamilogorek @mrlowe pull ์์ฒญ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น? https://github.com/mrlowe/sentry-javascript/commit/3a09f918e0cbadfdbc1c11d6d779d4718d597fb0? https://github.com/getsentry/sentry/issues/13169 ๋ฌธ์ ์์ ๋ ผ์๋ ์ปคํจ์ํฐ ์ง์์ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
@seanwu1105 ๋์๊ฒ์ ์๋ฌด๊ฒ๋. ํ์ฌ ํ๋ก๋์ ํ๊ฒฝ์์ ์คํ ์ค์ด๋ฉฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์์ต๋๋ค.
@mrlowe ๋ค์ ๋ฆด๋ฆฌ์ค์์ ๋ชจ๋ ์ฌ๋์ด ํด๋น ๋ณ๊ฒฝ ์ฌํญ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ณดํ ๊ณํ์ด ์์ต๋๊น? ์ฐ๋ฆฌ๋ iOS์ ํ์ด๋ธ๋ฆฌ๋ ์ฑ์์ ์ปคํจ์ํฐ๋ฅผ ์ฌ์ฉํ ๋ ๋์ผํ ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์์ผ๋ฉฐ ์ด ์์ https://github.com/mrlowe/sentry-javascript/commit/3a09f918e0cbadfdbc1c11d6d779d4718d597fb0 ๊ฐ ์ฐ๋ฆฌ์๊ฒ ํจ๊ณผ์ ์ ๋๋ค. ๊ฐ์ฌ ํด์!
@albertinad @kamilogorek ์ผ๋ก๋ถํฐ ์๋ฌด ๋๋ต๋ ๋ฃ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ PR์ ์์ฑํ๊ณ ์ด ๋ฌธ์ ๋ฅผ ์ฐธ์กฐํ๊ฒ ์ต๋๋ค. ๊ทธ๊ฒ์ด ์ ํ๋์ง ์์ผ๋ฉด ์ฐ๋ฆฌ๋ ์๋ก์ด ๋ฌธ์ ๋ฅผ ๋ง๋ค ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
@mrlowe ๋ต๋ณ์ด ๋ฆ์ด ์ฃ์กํฉ๋๋ค. ์ด๋ฏธ ๋ง๊ฐ๋ ๋ฌธ์ ์์ ์ธ๊ธ์ ๋์น๊ธฐ ๋๋ฌด ์ฝ์ต๋๋ค. PR์ ๊ณ์ ์ฃผ์ํ๊ฒ ์ต๋๋ค, ๊ฐ์ฌํฉ๋๋ค!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@seanwu1105 ๋์๊ฒ์ ์๋ฌด๊ฒ๋. ํ์ฌ ํ๋ก๋์ ํ๊ฒฝ์์ ์คํ ์ค์ด๋ฉฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์์ต๋๋ค.