소스 편집기 확장 시도

샘플 추가됨 = > XcodeSourceEditorExtension-Alignment

WWDC 2016에서 Xcode Source Editor Extension, Xcode Editor Extension이 발표되었습니다.
Xcode용 App Extension을 만들 수 있을 것 같습니다.
Mac App StoreAlcatraz에도 게시할 수 있으므로 필요하지 않을 수 있습니다.
여기서 Xcode Source Editor Extension을 확인하면서 시도해 보겠습니다.
⚠️주의: 정보가 적기 때문에 추측이 포함될 수 있습니다.
화면 스냅샷 삭제됨

Xcode Source Editor Extension이란 무엇입니까?


이름과 같이 Source 편집기 부분을 확장한 것 같습니다.
더 광범위하게 확장하고 싶으면 Xcode 편집기 확장을 만들 수 있을까요?
그림으로 보면 이런 느낌인가요?
    +----------------------+
    |                      |     +------------------------+
    |  Xcode               |<--->| Xcode Editor Extension |
    |                      |     +------------------------+
    |  +---------------+   |
    |  |               |   |     +-------------------------------+
    |  | Source Editor |<------->| Xcode Source Editor Extension |
    |  |               |   |     +-------------------------------+
    |  +---------------+   |
    |                      |
    +----------------------+

사전 준비


macOS10.11은 다음 단계를 미리 수행해야 합니다.
  • Xcode-beta 시작 및 additional system component 설치
  • sudo /usr/libexec/xpccachectl
  • macOS 재부팅
  • 항목 만들기


    먼저 Cocoa 응용 프로그램 템플릿으로 프로젝트를 만듭니다.(Empty 템플릿을 사용하면 안 될 것 같음)
    그런 다음 File > New > Target... 또는 +ボタン(Add a target) 에서 생성합니다.
    대상 (응용 프로그램 및 확장) 의 서명을 설정합니다.
    위에서 Extension Schema를 선택하고 실행(Choose an app to run:)에서 Xcode8을 선택한 경우
    편집기 메뉴에 항목이 추가됩니다.
    런닝에 들어가기 전에 조작하면 동작이 잘 안 돼요.집행 후, 우리 숨을 한 번 쉬자.

    생성된 파일 보기


    대상을 만들면 다음과 같은 빠른 파일이 생성됩니다.
  • SourceEditorExtension.swift
  • SourceEditorCommand.swift
  • SourceEditorExtension.swift
    import Foundation
    import XcodeKit
    
    class SourceEditorExtension: NSObject, SourceEditorExtension {
    
        func extensionDidFinishLaunching() {
            // If your extension needs to do any work at launch, implement this optional method.
        }
    
        var commandDefinitions: [[XCSourceEditorCommandDefinitionKey: AnyObject]] {
            // If your extension needs to return a collection of command definitions that differs from those in its Info.plist, implement this optional property getter.
            return []
        }
    }
    
    SourceEditorCommand.swift
    import Foundation
    import XcodeKit
    
    class SourceEditorCommand: NSObject, XCSourceEditorCommand {
    
        func perform(with invocation: XCSourceEditorCommandInvocation, completionHandler: (NSError?) -> Void ) -> Void {
            // Implement your command here, invoking the completion handler when done. Pass it nil on success, and an NSError on failure.
    
            completionHandler(nil)
        }
    
    }
    
    지금 봐야 할 건 4개면 돼.
  • extensionDidFinishLaunching
  • 시작할 때 불렸어요.
  • commandDefinitions
  • 실행할 명령에 대한 정보를 정의합니다.
    info.plist에 적힌 정보를 사용한 것 같아서 정의할 필요가 없습니다.
  • perform
  • 명령 실행이라고 합니다.
    여기다 써서 처리하면 될 것 같은데.
  • XCSourceEditorCommandInvocation
  • 이 작업을 사용하여 Xcode Source 편집기를 방해할 수 있습니다.
    자세한 내용은 정의로만 이동할 수 있습니다.

    견본


    XcodeSourceEditorExtension-Alignment - GitHub
    선택한 대입 문장의 확장을 배열하는 데 사용됩니다.
    정렬이 Xcode 편집기 메뉴에 추가됩니다.

    사용 방법


    Xcode에서 코드를 선택하고 정렬을 선택하십시오.
    // before:
    var hoge = "hoge"
    var foo = "foo"
    var awesome = ""
    
    // after:
    var hoge    = "hoge"
    var foo     = "foo"
    var awesome = ""
    

    메모


    Xcode-beta.앱에는 두 개의 Xcode Source Editor Extension이 있습니다.
    이름
    버튼
    설명
    XCDocumenterExtension.appex⌥⌘/문서 메모를 생성합니다.안에 VVDocumenter가 있는 것 같습니다.
    IDECacheDeleteAppExtension.appex
    Derived Data를 삭제할 수 있습니까?Xcode Editor Extension인 것 같습니다.

    참고 자료


    Xcode


    공식 소개 페이지, 편집기 Extensions의 프로젝트 Mac App Store에 편지를 보낼 수 있다고 적혀 있습니다.

    Release Note


    New in Xcode 8.0 beta - IDE > Source Editor Extensions
    Known Issues in Xcode 8.0 beta - IDE > Source Editor Extensions

    Using and Extending the Xcode Source Editor


    WWDC 2016의 관련 세션입니다.
    24:37부터 데모는 실제로 만들고 시도하는 곳을 볼 수 있다.

    좋은 웹페이지 즐겨찾기