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 정렬 단축기 만들기)
커스텀 단축키 만드는 아이디어
- defaults 명령어를 통해 NSUserKeyEquivalents에 접근하여 Xcode에 키 맵핑을 등록
- Xcode에서 단축키 입력 시 미리 정의한 shell script가 동작하고 그 shell script를 통해 xcode의 에디터에 반영되도록 구현
- 목표 - Xcode의 Services 메뉴에 커스텀 단축키를 생성하여 바로 사용해볼 수 있는 형태 (해당 단축키를 입력하면 현재 블록이 칠해진 부분이 미리 정의해둔 shell script가 동작하면서 적용)
(만약 위 Services 목록이 안보인다면 따로 설정)
- 시스템 환경설정의 키보드 -> 키보드 단축키 -> 서비스 탭 -> 오른쪽 목록 텍스트 하위에서 키보드 단축키 등록하면 다시 나타남
defaults로 단축키 키 맵핑
- 키 맵핑 아스키 코드
- 키 맵핑에 관한 아스키 코드를 다 기억하기 어렵기 때문에 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 파일이 있어야 생성됨
- 초기 세팅은 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 키의 값에 입력
- document.workflow를 열고 "COMMAND_STRING" 키의 값에 실행하고자하는 스크립트를 입력
- myCustomShortcut.sh 오픈
- test를 출력하는 쉘
#!/bin/sh
# input
echo "test"
- 스크립트를 실행하고 ./install.sh, Xcode를 실행하면 단축키가 설정된 것을 확인 가능
- 단축키 입력시 아래처럼 test가 입력
해야할 작업 - myCustomShortcut.sh 수정) Xcode에서 특정 블록을 입히고 단축키를 입력하면, 입력으로 해당 스크립트에 들어오기 때문에 문자열 값들을 읽고 -> 정렬하고 -> 아웃풋을 전달하는 작업이 필요
(다음 포스팅 글에서 계속...)
* 참고
https://github.com/kudinovdenis/Xcode-headers-sorting
https://apple.stackexchange.com/questions/115675/set-services-keyboard-shortcut-via-script-osx