터미널로 작업하다가 파일 및 디렉토리 퍼미션 속성을 보다가 @(골뱅이)가 보여서 '엉? 이게 뭐지' 했다.

 

그래서, 검색해봤더니 역시나 궁금해하는 녀석들이 있다.

 

https://unix.stackexchange.com/questions/92071/file-permissions-mode-ending-in-or

 

File Permissions mode ending in @ or +

I was changing file permissions and I noticed that some of the permissions modes ended in @ as in -rw-r--r--@, or a + as in drwxr-x---+. I've looked at the man pages for chmod and chown, and searched

unix.stackexchange.com

추가적인 ACLs 속성이 있다고... 'xattr -l <파일명>' 으로 속성 값을 확인해볼 수 있다.

 

https://www.howtogeek.com/444596/how-to-change-the-default-shell-to-bash-in-macos-catalina/

 

How to Change the Default Shell to Bash on macOS Catalina

With macOS Catalina, Apple is now using Zsh as the default shell. We love Zsh, but the trusty old Bash shell is still included with macOS, and you can quickly switch back to Bash if you prefer.

www.howtogeek.com

 

카탈리나부터 기본이 zsh로 변경되어서 bash를 사용하려면 전환을 해야한다. 레거시로 최신 버전 쓰려면 홈브류나 맥포트에서 업데이트도 해줘야 하는 듯.

 

https://github.com/ReactiveX/RxSwift/blob/master/Documentation/Why.md

 

ReactiveX/RxSwift

Reactive Programming in Swift. Contribute to ReactiveX/RxSwift development by creating an account on GitHub.

github.com

RxSwift 깃헙에 왜 Rx 사용하는 지 나오는데 이걸 설명하는 어떤 아저씨가 직관적이고 한 줄로 아래의 코드를 쓸 수 있다고 이야기 한다.

 

greetingLabel에 두 개의 텍스트를 묶어서 하나의 스트링으로 만들어 뿌려주는 간단한 코드다.

 

1
2
3
Observable.combineLatest(firstName.rx.text, lastName.rx.text) { $0 + " " + $1 }
    .map { "Greetings, \($0)" }
    .bind(to: greetingLabel.rx.text)
cs

 

근데 이거 Objective-C나 그냥 Swift에서도 한 줄로 대충 쓸 수 있다.

 

1
[self.greetingLabel setText:[[NSString alloc] initWithFormat:@"Greetings, %@ %@", firstName.text, lastName.text]];
cs

 

Objective-C 코드도 이렇게 한 줄로 쓰면 되는데, 뭔가 다른 무엇이 있기는 하겠지.

(Objective-C의 경우 이런 형태로 중괄호가 연이어 감싸는 모양으로 한도 끝도 없이 길게 코드를 쓸 수가 있기도하고, 변수명을 읽고 바로 이해할 수 있는 이름으로 하는 것이 직접적으로 이야기하지는 않지만 약간은 룰이어서 보통 코드 길이가 길어진다.)

 

뭔가 내 심사가 배배꼬여서 그런건지 사실 비동기 이벤트 처리 방식으로 원하는 작업을 공정화하여 간단한 코드로 구현한다는 점에 대해서는 별로 할 말이 없기는 한데, 기존에도 혹은 일부분은 오히려 기존이 더 직관적일 수 있지 않나 하는 생각이 든다.

 

아무튼 육개월 넘게 백수로 계속 게임하고 놀다보니 너무 심심해져서 학습도 할 겸 코딩을 좀 다시 해볼까 생각이 든다.

 


케플러 및 루나 버전의 이클립스를 high sierra에서 실행하기 위해서 노력해보았지만 잘 되지 않았다.


실행 시 자바 관련 이슈가 나와서 일단은 레거시 버전들을 1.6부터 설치한 뒤 bash_profile에서 JAVA_HOME을 설정해주었지만 이것 역시 정상적으로 실행되지 않았다.


음...프로젝트를 빌드하기 위해서는 특정 제품의 플러그인 설치가 필요한데, Oxygen이나 Proton에서는 플러그인이 작동하지 않기 때문에 케플러나 루나가 필요한 상황이다.


일단 검색의 결과는 자바 버전 관련된 이슈가 맞는데, JAVA_HOME을 bash_profile이나 jenv로 변경을 해도 시스템에서 참조하는 자바 실행환경은 항상 jdk 9으로 고정이 되어 있다.


결국은 이슈가 해결되지 않아서 ' /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents' 내의 info.plist 파일을 다른 파일명으로 변경했다.


그랬더니 차상위의 JAVA 버전이 시스템에서 참조하는 자바 실행환경으로 자동적으로 설정이 되었다. 흠...


실제 자바 VM의 실행환경은 '/usr/libexec/java_home' 명령어로 확인이 가능한데, 컴파일러의 경로와는 다르게 참조를 하고 있는 것으로 보인다.


아무튼 옥시겐 이전 버전의 이클립스 실행 문제는 자바 9으로 설정된 실행환경문제로 이 옛날 버전의 이클립스를 사용해야만 하는 환경이라면 이와 같이 설정을 꼼수로 변경하는 수 밖에 없는 것 같다.



맥프로에서 빌드된 다른 앱 소스를 좀 읽어보려고, JD-GUI 홈(http://jd.benow.ca/)에서 맥용 파일을 다운받아서 실행해보니 이상하게 실행이 안된다.


검색을 좀 해보니 자신의 맥북 환경에 맞게 설정을 수정할 필요가 있어 보여서 일단 깃헙의 이슈 트랙커의 글을 참고하여 깃에 있는 소스를 새로 빌드해서 설정을 변경해주었다.


아래와 같이 깃허브 레퍼지토리에서 클론을 하거나 다운로드하여 빌드를 진행했다.


$ git clone git@github.com:java-decompiler/jd-gui.git

$ cd jd-gui

$ ./gradlew installOsxDist

$ cd build/install/jd-gui-osx


[출처: https://github.com/java-decompiler/jd-gui/issues/189 ]


위에서 처럼 타겟을 OS X 기반으로 그래들 빌드 후에 생성된 빌드 폴더 내에 실행 바이너리가 생성이 된다.


바로 실행해봤는데 그래도 정상적으로 실행이 안된다.


위에 있는 출처의 이슈를 더 읽어보니 맥에 설치된 자바의 경로를 지정해줄 필요가 있어 보인다.


$ java -version

$ /usr/libexec/java_home -v 1.8


자바의 버전을 확인해보니 1.8이어서 두 번째 줄과 같이 해당 자바의 설치 경로를 확인한 뒤 경로를 복사했다.


JD.GUI 앱을 선택하고, 마우스 우클릭을 통해서 '패키지 내용보기' 선택 후 아래의 파일을 편집기로 연다.


Contents/MacOS/universalJavaApplicationStub.sh



universalJavaApplicationStub.sh 파일을 편집기로 연 뒤에는 아래의 내용과 같이 JDK 설치 경로를 추가해주면 된다. (아래는 나의 경우)


JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home



다시 앱을 실행시키니 정상적으로 실행이 되었다.


생각해보니 따로 빌드할 필요 없이 그냥 맥 버전을 다운로드 받아서 위와 같이 경로만 추가해줘도 잘 실행될 것 같다.


흠...


엇?


분할압축을 해보려고 하니 기본 압축으로는 분할 압축이 안된다.


그럼, 반디집 써야지 하고 확인해보니 bandizip X 프로그램으로는 압축이 안된다.


확인해보니 반디집에서 압축프로그램을 작년에 맥 앱스토어에서 판매하기 시작했다.


https://itunes.apple.com/kr/app/id1265704574


반디집은 꽤나 괜찮은 압축프로그램이므로 하나 사줘도 무방하기는 한데, 무료 앱이 없을까 찾아봤다.


블로그들에서 권장하는 프로그램은 keka라는 프로그램이 있어서 다시 맥 앱스토어에서 검색해보니 이것도 유료.


분할 압축을 지원하는 프로그램들은 대부분 유료 프로그램이고, 미리 써보기 등이 쉽지 않아 보여서 다시 검색 시작.



7z 사이트에 가서 맥용 프로그램 없는 지 확인해보니 keka의 무료 버전이 있다.


맥 앱스토어에서 판매하는 유료 버전과의 차이점은 잘 모르겠는데, 일단 무료 버전이 있어서 다운로드 후 분할 압축을 해본다.


속도가 좀 느리다.


윈도우에서 멀티코어 지원하는 압축 프로그램과 비교하다보니 느린 속도가 바로 느껴졌다.


그래도 원만한 포맷으로 .DS_STORE 파일도 안만들고 분할 압축 및 압축 해제가 가능하니 간단하게는 쓸만하다는 생각이다.


아래의 링크에서 keka를 찾아서 다운로드 후 설치하면 된다.


http://www.7-zip.org/download.html



*. 4기가 분할 압축으로 사용해보니 성능이 생각보다는 좋지 않았다. 반디집을 사용해보면 아마도 비교가 가능하기는 할텐데, 가볍게 사용하는 경우에는 문제가 없지만 60기가 정도를 분할 압축하니 시간도 많이 걸리고 에러도 있었음.

https://support.apple.com/en-us/HT204063



블루투스 이슈가 있어서 라이브러리 폴더의 설정 파일 하나를 삭제했더니 갑자기 와이파이 자체에 x표시가 뜨면서 '설치된 하드웨어가 없다'고 표시된다.

검색해보니 NVRAM을 초기화하는 방법을 통해서 설정을 다시 잡는 것 같다.


확인 방법은 다음과 같다.


1. 맥을 완전히 끈다.

2. 다시 부팅하여 하얀 화면이 되면서 '텅~'하는 부팅음이 들릴 때 <alt + command + P + R > 버튼을 동시에 눌러준다.

3. 다시 '텅~'하는 부팅음이 조금 크게 들리면 누르고 있던 버튼을 모두 떼어 준다.

4. 프로그레시브 바가 진행되면서 부팅이 되면 정상으로 설정이 돌아온다.


정리 잘 된 사이트

https://spin.atomicobject.com/2014/03/23/xcode-keyboard-shortcuts/


키 아이콘


⌘ = Command

⇧ = Shift

⌥ = Option/Alt

⌃ = Control

⇠ ⇢ = Left/Right Arrow Keys

⇡ ⇣ = Up/Down Arrow Keys



아래는 내가 자주 사용하는 단축키임.

프로젝트 진행하면서 최소 8~90%는 모두 사용하는 듯...

일부러 외우려고 하지는 않았지만 xcode를 사용하다보니 저절로 외우게 되었다.


우측창(navigator area) : ⌘ + 1~7

좌측창(utility area) : ⌘ + + ⌥ + 1~6



1. 편집 시 자주 사용하는 단축키


⌘ + /: 한 줄 주석 달기/풀기


⌘ + ⇠ : 선택 줄 맨 처음으로 이동

⌘ + ⇢ : 선택 줄 맨 끝으로 이동

⌥ + ⇠ : 선택 줄 한 단락씩 앞으로 이동

⌥ + ⇢ : 선택 줄 한 단락씩 뒤로 이동

⌥ + ⌘ + ⇠ : 커서가 위치한 편집영역 숨기기

⌥ + ⌘ + ⇢ : 커서가 위치한 편집영역 보이기

⌃ + ⌘ + ⇠ : 이전 편집 위치로 이동

⌃ + ⌘ + ⇢ : 다음 편집 위치로 이동



2. 편집 창 이동


⌃ + ⌘ + ⇡ OR ⇣ : 현재 클래스의 .m / .h 파일 간 이동

⌘ + 변수/형타입 : 해당 변수의 선언, 형타입의 선언으로 이동

⌘ + T : 새로운 탭 열기

⌘ + W : 현재 탭 닫기

⇧ + ⌘ + [ : 이전 탭으로 이동

⇧ + ⌘ + ] : 다음 탭으로 이동



3. 빌드 시 주로 사용하는 단축키


⌘ + R: 프로젝트 실행

⌘ + B: 프로젝트 빌드

⌘ + I: 프로파일

⇧ + ⌘ + B: 정적분석

⇧ + ⌘ + K: 프로젝트 클린

⇧ + ⌘ + <: 스킴 편집



4. 디버깅


F6 : 스텝 오버

F7 : 스텝 인

⌘ + \ : 브레이크 포인트 설정/취소 

⌘ + Y : 브레이크 포인트 활성/비활성

⌃ + ⌘ + Y : 디버거 실행/일시정지



그런데, OS X에 상주하면서 떠있는 프로그램이 있을 경우 동일하게 키가 맵핑되어 해당 프로그램의 단축키가 실행되는 경우가 있다.

이럴 경우는 단축키 배열을 변경해줘야 할 것 같음.

선택한 월의 마지막 날을 구하기라는 것이 똑 떨어졌는데, 오분도 안되어서 너무 싱겁게 끝나버렸다.


해당 월의 캘린더 날짜의 범위(전체 일 수)를 구하면 마지막 날짜를 알 수 있다. 킁!!!



출처 - http://stackoverflow.com/questions/1731322/get-all-days-of-any-month-with-objective-c

참...이런 일도 생긴다.


참 귀찮은 일 중에 하나가 폰이나 태블릿 업데이트를 하면 거기에 맞게 XCode를 업데이트 해야 하는데...

XCode도 OS X의 업데이트까지 요구하니...

뭔가 업데이트를 하면 불편하기가 이만 저만이 아니다.


특히 프로젝트가 길어져서 오픈전까지 웬만하면 업데이트를 잘 안하는데, 이 놈의 디바이스가 바뀔 정도로 프로젝트가 길어지면 수가 없다.


아무튼 업데이트를 하고나서 인터페이스 빌더 파일에 언노운 클래스 이슈가 발생했는데, 

이게 타겟이 깨지거나 빌드 리소스에서 빠져있거나 하는 일들이 발생한다.


흠...귀찮음을 극복한다.



출처 - http://stackoverflow.com/questions/24924966/xcode-6-strange-bug-unknown-class-in-interface-builder-file

+ Recent posts