2013-12-16 10 views
1

현재 작업중인 앱에 이상한 동작이 있습니다. Xcode, iTunes 또는 TestFlightApp를 통해 테스트 빌드를 설치할 때마다 응용 프로그램이 정상적으로 시작되어 잘 실행됩니다. 문제는 수동으로 앱을 종료하고 다시 시작하면 발생합니다. 그런 다음 시작 이미지가 표시되고 앱이 가장 멀리 이동합니다. 잠시 동안 멈추고 OS는 그 이후에 전체 프로세스를 지 웁니다. 오류 로그에는 상태 정보가 포함되어있어 유용한 정보가 포함되어 있지 않습니다. 응용 프로그램 특정 정보 :에 시작하지 못했습니다. 또한 주최자의 콘솔 로그 다음'Application'을 (를) 실행하지 못했습니다.

  • 주의 사항 : COM : 위치 아이콘이 현재 상태 '비활성'
  • 경고에 있어야합니다. . 시간 내에 실행하지 못했습니다.
  • 경고 : MyApp의 강제 종료 보고서 [7956] ...
  • 경고 : 충돌보고가 완료되었습니다.
  • 주의 사항 : (UIKitApplication : COM [0x6a86]..) 종료 함 : 처치 : 9
  • 주의 사항 : (UIKitApplication :.. com [0x6a86]) 스로틀의 부활 : 윌 시작 2,147,483,625 초
  • 경고 : 응용 프로그램 'UIKitApplication : com. . 문제를 연구 9

이미 보냈어요 하루 종일 : 처치 : [0x6a86] '비정상적 신호 9 을 종료. 그냥 명확히하기 - UIApplication 델리게이트 메서드 (applicationDidBecomeActive, didFinishLaunchingWithOptions 등)에서 동기 작업이나 많은 양의 작업이 수행되지 않습니다. 내가 알아 차린 것은 실행 중에 URL 요청이 수행되지 않으면 문제가 단순히 발생하지 않는다는 것입니다. 즉, 앱이 그 전에 죽은 후에 정상적으로 실행됩니다. 문제는 iOS 7에서 발생하지만 앱은 iOS 5와 6도 지원합니다. 모든 요청이 수행되는 방법 기본적입니다

[NSURLConnection sendAsynchronousRequest:request 
             queue:[NSOperationQueue currentQueue] 
          completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){if (nil == error) {         
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ 
             (...)//creating ppError 
             if (nil == ppError) { 
              result = parsing(json, &ppError); 

              if (nil != ppError) { 
               result = nil; 
              } 
             } 
             dispatch_async(dispatch_get_current_queue(), ^{ 
              if (PPServiceReturnedInvalidTokenErrorCode == ppError.code) { 
              (...)//do some parsing stuff 

               [[NSNotificationCenter defaultCenter] postNotificationName:PPRequestManagerUserAuthenticationTokenDidExprireNotification 
                            object:self 
                           userInfo:userInfo]; 
              } 
              completion(result, ppError); 
             }); 
            }); 
           } 
           else { 
            completion(nil, ppError); 
           } 
          }]; 

그래서 모든 것이 올바른지 생각하고 아직 내가이 코드를 언급하는 경우 설명 된 문제가 단순히 사라 사실이다.

어떤 제안이나 아이디어라도 감사하겠습니다. 고맙습니다!

+0

악기를 사용하여 앱이하는 일과 코드에서 많은 시간을 소비하는 곳을 확인하십시오. 보통 이것은 주 스레드가 차단되어 있고 시작시 응답 성을 얻기 위해 앱이 약 10 초 이상 걸리는 경우에 발생합니다.완료 핸들러의 – Kerni

+0

, 두 번째 dispatch_async()는 현재 큐로 디스패치 했습니까? 그게 아무 것도하지 않기 때문에 정의에 따라 이미 현재 큐에 있습니다. –

+1

@PatrickGoley 현재 큐의'dispatch_async'는 적어도 다음 runloop에 코드를 셔플합니다. 그래서 그것은 "무언가"를합니다. 이 셔플의 부작용 중 하나는 현재 런 루프가 끝나고 SpringBoard에 앱이 제 시간에 출시되었음을 알리는 것입니다. –

답변

0

마지막으로 문제를 해결할 수있었습니다. 문제는 사용되지 않았지만 프로젝트의 일부인 HTTP 연결 설정을위한 제 3 자 프레임 워크였습니다. 자체 스레드를 시작하고 때로는 충돌을 초래하는 작업을 때때로 실행하고있었습니다.

크래시의 원인을 파악하는 것은 까다로운 일 이었지만 Xcode 5의 주최자는 훌륭한 작업을 수행했습니다. 연결된 장치가 생성하고 운 좋게 스택 추적이 비밀을 밝혀내는 기호화 된 충돌 로그를 사용했습니다.

잘못된 빌드 구성이 OS의 이유 또는 버그라고 생각했습니다. 어쨌든, 도와 줘서 고마워! 누군가가 비슷한 문제를 겪고 있다면 도움이 될 것입니다.

관련 문제