2017-01-19 2 views
0

API에 대한 HTTP 요청이있을 때마다 내 앱 사용자 중 한 명에게 충돌이 발생합니다. 이는 충돌 추적입니다.API 호출이 실행될 때 앱이 항상 중단됩니다.

Incident Identifier: 512C99DF-D432-4BAC-96DF-B32561A51C9B 
CrashReporter Key: cdee4dd4d00f061439ba8ee6e2fdf4d5a9c4e889 
Hardware Model:  iPhone5,3 
Process:    myapp [312] 
Path:    /private/var/mobile/Containers/Bundle/Application/42EA0E64-28BB-48D0-9CDF-6F58F1823BDF/myapp.app/myapp 
Identifier:   com.myapp.myapp 
Version:    3 (0.1.2) 
Code Type:   ARM (Native) 
Parent Process:  launchd [1] 

Date/Time:   2017-01-18 21:30:47.47 -0500 
Launch Time:   2017-01-18 21:30:41.41 -0500 
OS Version:   iOS 9.1 (13B143) 
Report Version:  105 

Exception Type: EXC_CRASH (SIGABRT) 
Exception Codes: 0x0000000000000000, 0x0000000000000000 
Exception Note: EXC_CORPSE_NOTIFY 
Triggered by Thread: 0 

Filtered syslog: 
None found 

Last Exception Backtrace: 
(0x24dc5856 0x3673adfa 0x24d58bda 0xfe438 0x29188ae8 0x29188c34 0x295ccf7c 0x290b18d8 0x28fda85c 0x28fda68a 0x290b10cc 0x2880a85a 0x2880a6aa 0x2e897586 0x25e85340 0x24d76b54 0x24d88f76 0x24d8868a 0x24d86a9c 0x24cd90d4 0x24cd8ec8 0x2e04eaf4 0x28f622d8 0xa0288 0x36e8886e) 

Global Trace Buffer (reverse chronological seconds): 
2.392224  CFNetwork     0x00000000245e4a91 TCP Conn 0x15d78310 SSL Handshake DONE 
2.598566  CFNetwork     0x00000000245e49cb TCP Conn 0x15d78310 starting SSL negotiation 
2.599330  CFNetwork     0x000000002466479d TCP Conn 0x15d78310 complete. fd: 6, err: 0 
2.600883  CFNetwork     0x000000002466589f TCP Conn 0x15d78310 event 1. err: 0 
3.702969  CFNetwork     0x000000002466591d TCP Conn 0x15d78310 started 
3.710171  CFNetwork     0x00000000246a640f Creating default cookie storage with default identifier 
3.710171  CFNetwork     0x00000000246a63eb Faulting in CFHTTPCookieStorage singleton 
3.710171  CFNetwork     0x00000000246e878b Faulting in NSHTTPCookieStorage singleton 
3.714408  CFNetwork     0x000000002463e141 NSURLSessionTask finished with error - code: -1022 
4.907331  libsystem_trace.dylib  0x00000000370086f9 dyld_image_header_containing_address(0x15e505e9) failed 

그러나이 앱은 다른 모든 사용자에게 적용되며 API 끝점에 완전히 도달 할 수 있습니다. 이것은 즉,이 관련이 있는지 모르고, 또한 React Native 응용 프로그램입니다,하지만 여기에 요청 만드는 코드이다 :이 충돌의 원인이 될 수있는 것을

export default function api(apiName, paramsObj) { 
    return new Promise((resolve, reject) => { 
    let ip = 'xxx.xxx.xx.xxx'; 
    fetch(`http://${ip}/api/${apiName}`, { 
     method: 'POST', 
     headers: { 
     Accept: 'application/json', 
     'Content-Type': 'application/json', 
     }, 
     body: paramsObj ? JSON.stringify(paramsObj) : null 
    }) 
    .then(response => resolve(response.json())) 
    .catch(error => reject(error)); 
    }); 
} 

어떤 생각? 여기

2 엑스 코드에서 symbolicated 충돌 보고서의 스크린 샷 (응용 프로그램입니다

[{"id":"584b7fe3e1e982176d5a5b3c","name":"My University","unlocked":true,"totalUsers":1200,"minimumUsers":1000}] 

편집 :

편집

이는 API의 JSON 응답의 예입니다 이름이 차단됨) :

Symbolicated crash report from Xcode

EDIT 3

추가 테스트 및 디버깅 후 나는 문제가 아니라 가끔 아이폰 5S 실행 8.x를 발생 있다고 판단 어쨌든 다른 질문에 this answer을 보았습니다.이 항목을 응용 프로그램의 진입 점에 추가하면 React Native 개발자 메뉴에서 "Debug JS Remotely"를 클릭하면 실제로 이라는 문제가 해결되었습니다.

const _XHR = GLOBAL.originalXMLHttpRequest ? 
    GLOBAL.originalXMLHttpRequest :   
    GLOBAL.XMLHttpRequest      

XMLHttpRequest = _XHR 

그래서 본질적으로 시뮬레이터 (아이폰 4S, 아이폰 OS 9.3)이 문제가 중지 기본 크롬 반응 디버거에 연결되어 있고 목록 (더 범위를 벗어날 오류)를 채워하지 않습니다이 위의 라인,. 그러나 디버거에서 시뮬레이터의 연결을 끊거나 release 모드로 앱을 실행해도 오류가 계속 발생합니다.

+1

관련 코드도 함께 표시해야합니다. – Raptor

+0

@Raptor 감사합니다! 요청을하는'React Native' 코드를 추가했습니다. –

+1

코드가 정상적으로 보입니다. 그러나 API의 응답은 무엇입니까? 응답이 잘못된 JSON입니까? – Raptor

답변

0

-1022 오류는 http 서버에서 가져 오는 중임을 나타냅니다. 일반 텍스트로드를 허용하려면 https로 이동하거나 앱의 권한을 조정해야합니다.

제 생각 엔 요청이 실패로 끝났기 때문에 빈 응답을 올바르게 감지하지 못하고 JSON으로 구문 분석하지 못하고 충돌이 발생하지만 디코딩 된 역 추적 없이는 확실한.

+0

감사! 'http' 대'https' 유형의 문제라면 이전 버전의 32 비트 iPhones (5 이하)에서만 발생하는 이유는 무엇입니까? –

+1

잘 모르겠다. 일부 메서드가 빈 문자열을 처리하는 방식의 동작 차이 일 수 있습니다. 어느 쪽이든 먼저 백 트레이스를 디코딩하면 문제가 분명해질 것입니다. – dgatwood

+0

크래시 로그의 상징적 인 버전의 스크린 샷을 추가했습니다. 어떤 문제인지 파악할 수 있습니까? 감사!! –

1

RTCPicker (하위 클래스) 유형의 개체가 존재하지 않는 배열에서 항목에 액세스하려고합니다. 5 번째 항목이 배열에 있고 6 번째 항목에 액세스하려고합니다.

이것은 호출 스택이 특정 인덱스에서 NSArray의 항목에서 액세스를 시도하는 예외와 제 3 프레임을 던지고 있음을 보여주는 위쪽 프레임으로 표시됩니다.

예외가 치명적이므로 예외가 발생합니다.

+0

감사합니다! 기본적으로 'RTCPicker'는 100 % 시간이 선택기에 대한 데이터를 반환하는 API 호출에 의해 채워집니다 (반환 된 JSON 배열은 결코 비어 있지 않습니다). 모든 64 비트 장치에서이 크래시가 발생하지 않고 API가 결과를 성공적으로 반환합니다. 그러나 항상 충돌하고 모든 32 비트 장치 (iPhone 4S 및 이전 버전)에서 배열을 채우지 못합니다. 왜 그런 일이 일어날 지 모릅니다. –

+0

@UnknownUser는 아마도 영향을받는 장치에서 디버깅하지 않고도 알 수 없습니다. 시뮬레이터에서 문제를 재현 할 수 있습니까? –

+0

@Pekka 웃 예, 시뮬레이터의 iPhone 4S에서 문제를 재현 할 수 있습니다. –