관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] 1. Custom Shortcut (커스텀 단축키) 만드는 방법 - 기본 개념 (plistbuddy, defaults, NSUserKeyEquivalents) 본문

iOS 응용 (swift)

[iOS - swift] 1. Custom Shortcut (커스텀 단축키) 만드는 방법 - 기본 개념 (plistbuddy, defaults, NSUserKeyEquivalents)

jake-kim 2023. 3. 28. 01:05

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

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

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

단축키 입력 시 import문이 정렬

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

  • plistbuddy를 사용하면 XCode의 환경설정 파일(com.apple.dt.Xcode.plist)에 단축키 옵션 추가가 가능
    • plistbuddy는 shell로 plist파일을 수정할 수 있는 기능이 있어서 이것을 사용하여 커스텀 단축키 생성
  • plistbuddy를 실행시켜주는 defaults 명령어를 사용하여 간편하게 등록
    • defaults 명령어를 통해 NSUserKeyEquivalents에 접근하여 Xcode에 키 맵핑을 등록
  • Xcode에서 단축키 입력 시 미리 정의한 shell script가 동작하고 그 shell script를 통해 xcode의 에디터에 반영되도록 구현

PlistBuddy란?

  • PlistBuddy는 /usr/libexec 하위에 있고 실행파일(exec)형태로 존재
% file /usr/libexec/PlistBuddy

/usr/libexec/PlistBuddy (for architecture x86_64):	Mach-O 64-bit executable x86_64
/usr/libexec/PlistBuddy (for architecture arm64e):	Mach-O 64-bit executable arm64e
  • 실행파일이므로 어떤 기능을 추가할때 shell에서 아래처럼 접근하여 사용
    • -c는 커맨드라인이라는 옵션
% /usr/libexec/plistbuddy -c [some command...]
  • 이 PlistBuddy에 접근해서 직접 원하는 작업을 설정해도 되지만, defaults라는 Xcode에서 제공해주는 명령어를 사용하면 쉽게 작업이 가능

defaults 명령어와 사용하여 단축키 맵핑

  • defaults 명령어를 사용하여 NSUserKeyEquivalents라는 key-value 맵핑 딕셔너리 저장소에 접근하여 커스텀
    • NSUserKeyEquivalents는 macOS에서 제공하는 키맵핑 테이블
% defaults write com.apple.dt.Xcode NSUserKeyEquivalents -dict-add "shortcut name" "shortcut"
  • 위 명령어에서 argument 중 하나인 "shortcut"에 들어갈 맵핑 표

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

  • NSUserKeyEquivalents의 내용을 보려면 defaults read 커맨드 라인을 사용
% defaults read com.apple.dt.Xcode NSUserKeyEquivalents

{
    "Sort Lines" = "@^s";
}
  • 명령어 확인은 defaults
$ defaults

  read                                 shows all defaults
  read <domain>                        shows defaults for given domain
  read <domain> <key>                  shows defaults for given domain, key

  read-type <domain> <key>             shows the type for the given domain, key

  write <domain> <domain_rep>          writes domain (overwrites existing)
  write <domain> <key> <value>         writes key for domain

  rename <domain> <old_key> <new_key>  renames old_key to new_key

  delete <domain>                      deletes domain
  delete <domain> <key>                deletes key in domain

  import <domain> <path to plist>      writes the plist at path to domain
  import <domain> -                    writes a plist from stdin to domain
  export <domain> <path to plist>      saves domain as a binary plist to path
  export <domain> -                    writes domain as an xml plist to stdout
  domains                              lists all domains
  find <word>                          lists all entries containing word
  help                                 print this help

defaults로 단축키 키 맵핑 시 TIP

  • 키 맵핑에 관한 아스키 코드를 다 기억하기 어렵기 때문에 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의 import 부분을 정렬하는 단축키 만들기)

 

* 참고

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

https://stackoverflow.com/questions/20382159/how-can-i-read-a-custom-keys-value-in-info-plist-and-use-it-in-xcodes-build-se

https://www.marcosantadev.com/manage-plist-files-plistbuddy/

Comments