[ios] SourceKitService는 CPU를 소비하고 Xcode를 중지합니다.

이것은 베타 문제가 아닙니다. Xcode 6.0.1, 프로덕션 릴리스를 사용 중입니다. 내가 겪고있는 문제는 내가 작업중인 코드를 빌드하거나 실행하려고 할 때 Xcode가 오랜 시간 동안 응답하지 않고 SourceKitService가 CPU의 400 % 이상을 소비한다는 것입니다 (활동 모니터에 따르면). 이 문제는 지난 며칠 동안 새로운 것이지만, 이상하게도 9 월 17 일에 공식적으로 출시 된 이후 Xcode 6.0을 사용하고있었습니다.이 문제에 대한 수정 사항이 포함되기를 바라며 6.0.1로 업그레이드했습니다.

문제가 무엇인지에 대한 아이디어가 있습니까?



답변

오늘 오후 초에 Xcode 6.1.1 (베타가 아닌 공식 출시 버전)에서이 문제가 발생했습니다. 나는 Playground에서 몇 가지 코드를 실행하고 있었고 그 원인이 의심되었습니다. CPU는 거의 100 %로 고정되었고 Xcode는 빌드를 완료 할 수 없었습니다.

그래서 내가 한 일은 다음과 같습니다.

1. SourceKitService를 메인 CPU hog로 보여주는 “Activity Monitor”를 열었습니다.

2. “Activity Monitor”내에서 SourceKitService를 두 번 클릭하고 “Open Files and Ports”섹션을 클릭하면 / Users / myname / Library / Developer / Xcode / DerivedData / ModuleCache / 디렉토리 아래의 파일에서 작동 중임을 알 수 있습니다. 특정 폴더에 대해.

3. 지정된 폴더를 삭제했습니다 (명령 줄에서 rm -rf 사용). 캐시는 Xcode Derived 데이터 폴더의 내용을 안전하게 삭제할 수 있습니까?를 기준으로 재생성됩니다 . .

4. Activity Monitor를 다시 사용하여 SourceKitServer를 강제 종료합니다. Xcode 내에서 SourceKitService가 충돌했다는 너무 친숙한 기호를 보았습니다 (그래서 SourceKitService가 친숙하게 들리는 이유입니다!).

5. 3 단계를 반복합니다.

Mac은 다시 평화 롭습니다. 데이터가 손실되지 않았고 Xcode를 다시 시작할 필요도 없었습니다 (실패했습니다). 결론은 ModuleCache가 SourceKitService를 루프로 가져 오는 것 같고 폴더를 삭제하면 문제가 해결되는 것 같습니다. 이것이 당신에게도 효과가 있기를 바랍니다.

부트 노트 :

그건 그렇고, SourceKitService 문제의 원인은 Swift 클래스에 배열 선언이 너무 길기 때문입니다. 배열에 200 개가 넘는 항목이 있습니다. 30으로 줄였고 오류가 사라졌습니다. 따라서 문제는 사과 코드에서 일종의 스택 오버플로로 인해 발생했을 수 있습니다.


답변

다음과 같은 약 60 개의 요소가있는 배열을 선언했기 때문에 문제가 발생했습니다.

let byteMap = [

["ECG" : (0,12)],
["PPG" : (12,3)],
["ECG" : (15,12)],
["PPG" : (27,3)],
["ECG" : (30,12)]

다음과 같이 유형에 명시 적으로 주석을 추가합니다.

let byteMap : [String: (Int, Int)] = [

["ECG" : (0,12)],
["PPG" : (12,3)],
["ECG" : (15,12)],
["PPG" : (27,3)],
["ECG" : (30,12)],

나는 그것을 멈출 수 있었다. 나는 그것이 긴 배열을 만날 때 루프로 들어가게 만드는 Swift의 유형 추론 및 유형 검사와 관련이 있다고 생각합니다.

이것은 Xcode 6.2에있었습니다. 또한 위에서 설명한대로 ModuleCache를 삭제했으며 이제 모든 것이 좋습니다.


답변

이 문제는 실제 장치를 연결하고 시뮬레이터를 실행하지 않았을 때 10 번, 8 번 발생했습니다.

내 솔루션이 좋은지 확실하지 않지만 시뮬레이터와 실제 장치 간 전환으로 인해 문제가 발생했다고 생각합니다. 이상하게 들릴지 모르지만 캐시 파일 사이에 간섭을 일으키는 것처럼 보였습니다 .

내 문제를 해결 한 이유 :

  • 빌드 폴더 정리 : (Xcode에서)Alt + Shift + Command + K
  • 콘텐츠 및 설정 재설정 : (시뮬레이터에서) Command + Shift + K.
  • 평소보다 조금 더 오래 기다렸고 지속적인 클릭으로 Xcode 과부하

따라서 기본적으로 새 장치에서 실행하기 전에 캐시를 삭제하십시오.

편집하다

장치 연결없이 문제가 발생했습니다. Xcode를 종료하고 다시 열었을 때 문제가 사라졌습니다. 내 생각 에는 새 코드를 가져 오거나 병합 한 후 다시 색인화 문제가 될 수 있습니다.


답변

SourceKitService가 최대 13GB의 메모리를 사용하는 또 다른 문제를 해결했습니다.

나는 String (많은 인수가있는 형식 줄 :

return String(format: "%d,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f", samples.count,sum1.x,sum1.y,sum1.z,sum1.rx,sum1.ry,sum1.rz,sum2.x,sum2.y,sum2.z,sum2.rx,sum2.ry,sum2.rz,sum3.x,sum3.y,sum3.z,sum3.rx,sum3.ry,sum3.rz)

이것으로 교체하면 잘 작동했습니다 (메모리 축적 및 정상적인 CPU 소비 없음)

    var output: String = ""

    output += String(format: "%d,", samples.count)
    output += String(format: "%.3f,%.3f,%.3f,", sum1.x, sum1.y, sum1.z)
    output += String(format: "%.3f,%.3f,%.3f,", sum1.rx, sum1.ry, sum1.rz)
    output += String(format: "%.3f,%.3f,%.3f,", sum2.x, sum2.y, sum2.z)
    output += String(format: "%.3f,%.3f,%.3f,", sum2.rx, sum2.ry, sum2.rz)
    output += String(format: "%.3f,%.3f,%.3f,", sum3.x, sum3.y, sum3.z)
    output += String(format: "%.3f,%.3f,%.3f", sum3.rx, sum3.ry, sum3.rz)

    return output


답변

나는 Xcode 9 에서이 문제를 겪고 있으며 여러 솔루션을 탐색했습니다. 나를 위해 소스 제어를 비활성화 하는 것이 트릭을 수행하는 것처럼 보였습니다.

Xcode -> Preferences -> Source Control -> uncheck "Enable Source Control"

이것이 작동하지 않으면 터미널 에서 renice 명령을 사용하는 것이 좋습니다 . 여기에 더 자세히

소스 제어 비활성화

시도했지만 도움이되지 않은 다른 단계 :

  1. Xcode 닫기-> 파생 데이터 삭제
  2. 사이클링 머신
  3. “깨끗한”프로젝트

답변

나를 위해 그것은 파생 데이터를 삭제하기 위해 노력했습니다. 메뉴에서 ‘제품’을 선택하고 Alt 키를 누른 상태에서 ‘빌드 폴더 정리’를 선택하십시오. 단축키 : Alt + Shift + Command + K


답변

  1. Xcode 종료
  2. 터미널에서 실행 :

rm -rf ~/Library/Developer/Xcode/DerivedData/ModuleCache/*


LNI의 허용 답변과 다음 답변의 차이점에 유의하십시오.

  1. 충돌하는 것보다 충돌하지 않는 것이 항상 낫습니다. 특히 Xcode 프로세스 / 구성 요소와 관련하여.
  2. 저는 Apple 개발자는 아니지만 캐시를 부분적으로 삭제하면 무결성이 손상 될 수 있습니다. 모든 캐시를 정리 한 후 상당한 지연이 발생하지 않았습니다.