Git, CocoaPods, Xcode, Shell

[iOS - swift] 2. custom shortcut (커스텀 단축키) 만드는 방법 - Xcode의 import 부분을 정렬하는 단축키 만들기 개념 (Services)

jake-kim 2023. 3. 29. 01:46

1. custom shortcut (커스텀 단축키) 만드는 방법 - 기본 개념 (plistbuddy, defaults, NSUserKeyEquivalents)

2. custom shortcut (커스텀 단축키) 만드는 방법 - Xcode의 import 부분을 정렬하는 단축키 만들기 개념 (Services) <

3. custom shortcut (커스텀 단축키) 만드는 방법 - shell script 입력, 정렬, 출력 (import 정렬 단축기 만들기)

단축키 입력 시 import문이 정렬

커스텀 단축키 만드는 아이디어

  • defaults 명령어를 통해 NSUserKeyEquivalents에 접근하여 Xcode에 키 맵핑을 등록
  • Xcode에서 단축키 입력 시 미리 정의한 shell script가 동작하고 그 shell script를 통해 xcode의 에디터에 반영되도록 구현
  • 목표 - Xcode의 Services 메뉴에 커스텀 단축키를 생성하여 바로 사용해볼 수 있는 형태 (해당 단축키를 입력하면 현재 블록이 칠해진 부분이 미리 정의해둔 shell script가 동작하면서 적용)

커스텀으로 만든 단축키: my custom shortcut

(만약 위 Services 목록이 안보인다면 따로 설정)

  • 시스템 환경설정의 키보드 -> 키보드 단축키 -> 서비스 탭 -> 오른쪽 목록 텍스트 하위에서 키보드 단축키 등록하면 다시 나타남

defaults로 단축키 키 맵핑

  • 키 맵핑 아스키 코드

https://gist.github.com/trusktr/1e5e516df4e8032cbc3d

  • 키 맵핑에 관한 아스키 코드를 다 기억하기 어렵기 때문에 shell script에서 매크로로 등록하여 사용해도 무방
CMD="@"
CTRL="^"
OPT="~"
SHIFT="$"
UP='\U2191'
DOWN='\U2193'
LEFT='\U2190'
RIGHT='\U2192'
TAB='\U21e5'

# for example
"my custom shortcut" = "${CMD}${SHIFT}a" # cmd + shift + a 단축키

커스텀 단축키 생성 방법

  • 아래 그림처럼 Xcode에서 Services 하위에 특정 기능을 넣기 위해서는 로컬의 '~/Library/Services/'에 .workflow 파일이 있어야 생성됨

커스텀으로 만든 단축키: my custom shortcut

  • 초기 세팅은 github에서 받기

(초기 파일)

  • install.sh: Xcode의 services항목에 my custom shortcut 등록하는 스크립트
  • my custom shortcut.workflow
    • info.plist: xcode의 Services 항목에 노출될 단축키 이름을 지정
    • document.wflow: info.plist에서 정한 이름의 단축키를 누르면 어떤 빌드 스크립트가 동작할지 연결하는 역할
      (myCustomShortcut.sh가 동작되게 할것)
.
├── install.sh
├── my custom shortcut.workflow
│   └── Contents
│       ├── Info.plist
│       └── document.wflow
└── myCustomShortcut.sh

구현하기전에 핵심 개념 알기

.
├── install.sh
├── my custom shortcut.workflow
│   └── Contents
│       ├── Info.plist
│       └── document.wflow
└── myCustomShortcut.sh
  • 아래 Services하위에 my custom shourcut이라고 노출되는건 Info.plist에서 설정

  • my custom shortcut 오른쪽에 있는 키 맵핑은 따로 쉘에서 defaults 명령어로 등록해야 활성화됨
  • 위 my custom shortcut을 입력했을때 특정 빌드 스크립트가 동작되게끔 하는 역할은 .wflow에서 등록

구현하기

  • 초기세팅인 github에서 clone 후 root로 이동
  • install.sh 오픈 (각 파일들의 내용들은 아래에서 계속...)
    • 1. ~/Library/Services/ 로 미리 정의한 shortcut.workflow를 복사 붙여넣기
    • 2. 미리 정의한 스크립트가 실행되게끔 .sh파일을 ~/Library/Services/로 복사 붙여넣기
    • 3. 이전 포스팅글에서 알아본대로 defaults 명령어를 사용하여 커스텀 키 맵핑
#!/bin/sh

SERVICE_DIR=~/Library/Services/

# 1. copying automator workflow
echo "copying Service into ~/Library/Services/ ..."
cp -aR ./my\ custom\ shortcut.workflow $SERVICE_DIR

# 2. copying source to the services folder
echo "copying myCustomShortcut.sh into ~/Library/Services/ ..."
cp ./myCustomShortcut.sh $SERVICE_DIR

# 3. add custom shortcut for XCode
echo "add custom shortcut for XCode ..."
defaults write com.apple.dt.Xcode NSUserKeyEquivalents -dict-add "my custom shortcut" "^\$@1"

echo "restart xcode"
killall Xcode
  • shortcut.workflow파일을 열면 안에 Info.plist와 document.workflow가 존재

  • Info.plist를 열고 Xcode에서 Services 항목에 표출될 이름 defaut 키의 값에 입력

Info.plist

  • document.workflow를 열고 "COMMAND_STRING" 키의 값에 실행하고자하는 스크립트를 입력

document.workflow

  • myCustomShortcut.sh 오픈
    • test를 출력하는 쉘
#!/bin/sh

# input
echo "test"
  • 스크립트를 실행하고 ./install.sh, Xcode를 실행하면 단축키가 설정된 것을 확인 가능

커스텀으로 만든 단축키: my custom shortcut

  • 단축키 입력시 아래처럼 test가 입력

해야할 작업 - myCustomShortcut.sh 수정) Xcode에서 특정 블록을 입히고 단축키를 입력하면, 입력으로 해당 스크립트에 들어오기 때문에 문자열 값들을 읽고 -> 정렬하고 -> 아웃풋을 전달하는 작업이 필요

 

(다음 포스팅 글에서 계속...)

 

* 참고

https://github.com/kudinovdenis/Xcode-headers-sorting

https://apple.stackexchange.com/questions/115675/set-services-keyboard-shortcut-via-script-osx

https://gist.github.com/trusktr/1e5e516df4e8032cbc3d