[ios] SourceKitService가 종료 됨

“Source Kit Service Terminated”오류가 발생하고 모든 구문 강조 표시 및 코드 완성이 Swift에서 사라지는 Xcode에 문제가 있습니다. 이 문제를 어떻게 해결할 수 있습니까?

다음은 이미지 예입니다.

여기에 이미지 설명을 입력하십시오



답변

내 대답 (Xcode6-Beta7)은 단순히 파생 데이터 폴더를 삭제하는 것이 었습니다.

Preferences > Locations > Derived Data > click the arrow to open in Finder > trash it.

이것이 누군가를 돕기를 바랍니다. 이 충돌이 발생할 수있는 많은 이유가 있습니다.


답변

더 일반적인 목적의 해결책을 찾았을 것입니다. 아래는 Xcode가 SourceKitService Terminated오류 를 일으키지 않도록 권장하는 단계 입니다.


내가 가진 증상 :

  • 새 놀이터를 시작할 때 놀이터와 통신 할 수 없다는 오류가 표시됩니다 ( twitter의이 이미지Error running playground: Failed prepare for communication with playground. 참조) .
  • 놀이터를에서 (으) OS X로 전환하면 iOS다른 오류가 발생합니다 (불행히도 그 오류를 쓰지 않았습니다).
  • iOS 기반 Swift 프로젝트에서 입력을 시작하고 UIKit 특정 클래스에서 코드 완성 / 지능을 사용하려고하면 SourceKitService Terminated이 스레드 에서 문제가 발생합니다.

디버깅 과정 :

  • SourceKitService에 대해 Google을 살펴보면서 시작했습니다.
  • 그런 다음 Xcode를 사용하는 동안 Console.app 모니터링을 시작했습니다. 이것은 몇 가지 오류를 보여주었습니다.
    • IDEPlaygroundDocument: Error encountered running playground
    • com.apple.CoreSimulator.CoreSimulatorService[3952]: The runtime for the selected device is not installed.

이 문제를 해결하기 위해 수행 한 작업

Swift 프로젝트와 관련하여 문제가있는 경우 먼저이 문제를 먼저 시도하십시오. 그래도 문제가 해결되지 않으면 아래의 모든 단계를 시도하십시오.

  1. 프로젝트를 열고 대상의 배포 대상을 <= 7.1로 변경하십시오.

더 길고 참여적인 프로세스. (처음 3 단계는 확실히 도움이되지는 않았지만 여기서 수행 했으므로 여기에 기록하십시오)

  1. 시스템에서 모든 Xcode 사본을 완전히 삭제하십시오.
  2. 컴퓨터를 다시 시작하십시오.
  3. Xcode6-beta 만 다시 설치하십시오.
  4. 운동장 및 / 또는 프로젝트에 여전히 문제가 있는지 확인하십시오.
  5. iOS 시뮬레이터를 엽니 다.
  6. 하드웨어-> 장치-> 장치 관리
  7. 모든 장치를 제거하십시오.
  8. 원하는 모든 장치를 다시 만드십시오. 이름의 끝에 iOS 버전을 추가했습니다.
  9. Xcode와 시뮬레이터를 다시 시작하십시오.
  10. 로 전환이 적어도 놀이터에서 더 이상 던져 문제를 확인하지 OS X로를 iOS.
  11. 프로젝트를 열고 대상의 배포 대상을 <= 7.1로 변경하십시오.

분석

Xcode6에서 시뮬레이터를 올바르게 찾아 연결하지 못하는 문제가있는 것 같습니다. 나는 이것이 왜 그런지 결정할 수 없었지만, 이것은 Swift로 계속 개발할 수있게 해주었습니다. 이것은 시뮬레이터 바이너리 가 이동 한 것처럼 보일 수 있습니다 .


답변

“ModuleCache”를 삭제하면됩니다. 이것은 자동 완성을 위해 Xcode에서 사용하는 일종의 캐시입니다.

터미널에 다음 줄을 복사하여 붙여 넣습니다.

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


답변

입력하자마자 SourceKitService가 시스템에서 충돌합니다.

extension foo {

Xcode 6 베타 6을 사용하고 있으며 빈 파일에 입력하거나 기존 파일에 추가하는 것은 중요하지 않습니다. 소스에 하나의 extension블록이 포함 되면 충돌이 발생합니다.이것은 새로 생성 된 프로젝트에서도 발생합니다.

내 “솔루션”은 현재 작업중인 소스의 확장을 피하는 것입니다. 클래스 블록의 끝과 확장 블록의 시작을 주석 처리합니다. 수업을 마치 자마자 다시 언급합니다.

class MyClass {

    [... my stuff ...]

//}
//
//extension MyClass {

}


답변

touchesMoved-function을 삽입 한 후 내 spritekit 프로젝트에서 발생하기 시작했습니다. 이 함수는 강제 언 래핑을 사용하여 문제를 일으키는 것으로 보입니다.

override func touchesMoved(touches: NSSet!, withEvent event: UIEvent!)

느낌표를 제거하고 강제 래핑 해제를 중지 한 후 SourceKitService의 충돌이 중지되었습니다.

도움이 되었기를 바랍니다!


답변

Apple 개발자 포럼 에서 솔루션 을 찾았 습니다 (로그인이 필요하므로 여기에서도 설명하겠습니다).

TLDR : @protocolObjective-C에서 Swift 브리징 헤더로와 같은 이름을 가져 오지 마십시오 .@interface . 예를 들어 Facebook SDK에는 “FBGraphObject”라는 인터페이스와 프로토콜이 모두 있습니다.

포럼 게시물은 다음과 같습니다.

Facebook SDK를 추가하면 SourceKitService가 중단됩니다. 베타 3을 사용하고 Facebook SDK가 필요한 경우 Facebook SDK의 @protocol FBGraphObject를 리팩터링하고 @protocol FBGraphObjectProtocol과 같은 것으로 이름을 바꾸는 것이 @interface FBGraphObject도 존재하며 분명히 SourceKit 그것을 좋아하지 않습니다.

기능을 유지하기위한 임시 솔루션이므로 프레임 워크 라이브러리를 사용하는 대신 Cocoapods를 사용하거나 Facebook SDK를 직접 구축해야합니다.

당분간, @protocol 및 @interface 선언이 충돌하지 않아야하며 사용중인 타사 라이브러리가 포함되어 있는지 확인해야합니다.

오늘 비용이 들었습니다. 도움이 되길 바랍니다.


에 의해 게시 됨 e.parto2014 7월 10일


답변

프로젝트에 Swift 이외의 다른 이름을 사용하십시오. “Swift”는 예약되어 있습니다.