전체 글

전체 글

    Xcode 빌드 오류

    .framework: resource fork, Finder information, or similar detritus not allowed 해당 프레임워크 경로로 이동해서 아래와 같이 입력한다. xattr -rc . (https://stackoverflow.com/questions/39652867/code-sign-error-in-macos-high-sierra-xcode-resource-fork-finder-information 참고)

    CoreData 삽질하기

    ManagedObject 만들기 Swift에서 ManagedObject를 만들어서 사용하려 한다. 이렇게 MyManagedObject를 하나 만들고, xcdatamodel에도 추가했다. final class MyManagedObject: NSManagedObject { } 그런데 테스트를 해보니 아래와 같이 entity를 못가져온다;; +entityForName: could not locate an entity named 'AppName.MyManagedObject' in this model. 나는 AppName.ObjectName 으로 가져오고 싶었는데, Swift에서 만들면 뭔가 다르게 적용되나 보다. 그래서 검색해보다가 @objc()로 이름을 지정해주면 된다는 말이 있어서 해봤다. @objc(MyM..

    Swift Protocol Extension

    Swift에서 Protocol 이라는 개념을 소개하면서 많은 사람들이 POP 라는 접근을 반겼다. 나도 Protocol을 통해서 구현을 공유하는 개념이 좋아보여서 적극적으로 사용하고 있다. 그런데 요즘 고민이 드는 점이 있다. Protocol의 내용이 아무것도 없고 extension으로 기능을 부여한 것들이 많아졌기 때문이다. 이런 프로토콜을 사용할 때 가장 먼저 고민되는 것은 네이밍이다. 형용사로 끝나게 이름을 짓는 방안을 많이 사용하고 있다. 예를 들어 특정 ViewController를 띄우는 구현을 공유하는 Protocol 이라면 SomethingPresentable 이라고 이름을 짓는 것이다. protocol SemethingPresentable { } extension SemethingPrese..

    Xcode에서 class의 모든 method에 breakpoint 걸기

    회사에서 코드를 작성하다 보면 모두지 찾을 수 없는 버그들을 만나기 마련이다. 사방에 함수들이 흩어져 있기 때문에 어떤 함수가 호출되는지 따라갈 수 없는 일도 있다. 그런 코드를 만들지 않기 위해서 역할 분리를 잘 해야겠다는 교훈을 느끼기도 한다. 무튼 지금의 버그를 이겨내야 하니 이 클래스 안에 있는 함수들에 모두 breakpoint를 걸어주자. (lldb) breakpoint set -r '\[ClassName .*\]$' 메소드 명에도 걸 수 있다. (lldb) breakpoint set -n ViewDidLoad 이 방법으로 Objc 코드에 있던 사이드 이팩트를 발견할 수 있었다. 보통 의심가는 함수에 하나씩 breakpoint를 걸면서 찾아봤는데, 때로는 이렇게 모든 함수에서 디버깅 하는것이 편..

    UIBarButtonItem에 UIButton 세팅하는 경우 발생하는 오류

    UIBarButtonItem에 UIButton을 customView로 지정하면, UIButton이 isEnabled 속성이 true로 변경된다. 그래서 UIBarButtonItem의 init으로 사용된 UIButton.isEnabled를 저장해뒀다가 다시 원래의 상태로 돌려줘야 한다. 사실 NavigationItem의 enabled navigation button을 사용해서 버튼 활성화 여부를 보여줄 수 있지만, 기존의 레거시를 그대로 사용하기 위한 방안으로 우회해서 가는 길을 선택했다.

    중복코드 제거방법

    한번 만들어진 코드는 서비스가 살아있는 한 계속 유지보수 되어야 한다. 그렇기에 지금 만들기 편한 방식 보다도, 앞으로 관리하기 좋은 코드를 고민해야 한다. 앞으로 관리하기 좋은 코드는 무엇일까? 한 가지의 기능을 변경하고 싶을 때, 한 부분의 코드만 변경하면 되는 코드라고 볼 수 있다. 그렇다면 중복되어 있는 코드는 어떨까? Ctrl+C, Ctrl+V를 통해서 구현하면 그 순간은 빠르다. 기간을 맞추기 위해서 그렇게 했다고 납득하는 순간 많은 중복 코드들이 만들어지고, 나중에 수정할 때 더 많은 시간을 사용하게 된다. 기술부채 중에 하나가 될 것이다. 나름대로 떠오르는 중복 코드 제거 방법을 적어보려 한다. 1. 함수로 분리 하나의 객체 안에 있는 기능이라면 가장 간단하게 함수로 분리하면 된다. 하나의..