Test가 Serial하지 않군요!
·
Swift
안녕하세요... 임정현입니다...SwiftTesting 테스트 하다가 병렬 수행이 원인이 되었습니다...그래서 Serial하게 동작하는 방식을 찾고 공유드리고자 합니다.문제 상황파일 시스템을 테스트를 해야하는데… 아니 왜자꾸 뭐 됐다~~ 안됐다~~~ 하는 것이느냐…내 로직은 완벽하다고!!문제 해결그렇습니다파일을 읽고 쓰다 하다보면 이런 일이 발생할 수 있죠…특히 Async환경에서는 더더욱 쉽습니다.그러면 어떻게 해야할까요? 사실 FileManager를 제가 만들때 의도한 것은 여러 스레드에서 병렬적으로 실행되기를 바랬습니다.그래야 UI를 막지 않고, 빠르게 일을 처리할 수 있으니까요.그런데 이는 하나의 파일에 대해 하나의 일을 시켰을 때의 경우입니다.Test처럼 하나의 파일에 대해 여러번 주작하게 되면 ..
Swift의 전역 변수 초기화 시점
·
Swift
반갑습니다 집주인들 팀원 박효준입니다!본편에서는 동시성에 대해 알아보다가 "Swift의 전역 변수 초기화 시점"의 신기한 점을 알게되어 공유드리고자 합니다!그럼 바로 시작하겠습니다~~문제 상황Swift Concurrency를 공부하며 스레드 안전성을 알아보던 중 흥미로운 얘기를 듣게 되었다.let logger = Logger( subsystem: "com.example.apple-samplecode", category: "Root View")위 전역변수 logger 코드는 언제 실행될까 ??전역변수니까 시작 시점에 초기화가 될까 ?답은 아니다. 왜 그런지 알아보자문제 해결C언어와 Objective-C의 전역변수C언어와 Objective-C에서의 전역변수는 시작 시점에 초기화가 되는 게 맞다.그..
XCTest vs Swift Testing
·
Swift
문제 상황Swift 6 도입에 따른, 테스트 프레임워크 결정XCTest vs Swift Testing문제 해결XCTest 장단점4명 모두 경험이 있음비동기 처리하려면 timer 작업 해줘야 함XCTAssert 메소드 너무 많음XCTAssertFalse()XCTAssertNil()XCTAssertLessThan()XCTAssertLessThanOrEqual()...XCTAssertGreaterThanOrEqual()XCTAssertGreaterThan()XCTAssertNotNil()XCTAssertEqual()XCTAssertTrue()Swift Testing 장단점Swift 6.0 도입해야 쓸 수 있음 → 어차피 우린 도입함비동기 처리가 쉽다..?Swift Native 테스트 작업struct와 @를 통..
CALayer를 사용할 때 발생하는 메모리 크래시
·
UIKit
안녕하세요...!이번에도 글을 쓰고 있는 임정현입니다...저희 버튼에는 그림자가 들어가는데 말입니다...이 그림자를 뷰한테 줬다가 뺐어야하는데, 주는 거는 됐는데, 뺐을 때 문제가 생겼습니다...그래서 CALayer[카-레이어]를 쓸 때 저랑 같은 문제를 겪는다면 이 방법을 한번... 츄라이..!문제 상황그림자를 넣는데 CALayer때문에 에러가 계속 났다. 아니, 처음에는 CALayer에러인줄도 몰랐다. 아래 처럼 이상하게 에러가 발생했기 때문이다.문제 해결그래서 왜 발생하지.. 하면서 이것저것 ViewModel이 문젠가.... 컴바인이 문젠가... 하..... 왜지 하다가 CALayer를 딱 지우니까 오류가 안나서 여기서 뭔가 있다는 것을 느꼈다. (문제 발생 5시간만에) 그래서 removeFromS..
협업할 때 인덴션 꿀팁~
·
Xcode
안녕하세요...이번에 글을 쓴 임정현입니다...저는 indent를 2로 맞추어서 생활하고 있는데욤...근데 팀원들은 4로 맞춰서 하더라구욤??디폴트 설정을 매번 바꾸는 것은 좀 그래서 한번 프로젝트 별로 설정 가능한지 찾아봤습니다...문제 상황협업을 하려면 들여쓰기를 맞춰야한다.그런데 내 디폴트 세팅을 팀마다 바꿔주어야한다면? 너무 귀찮겠다~문제 해결찾아보니 프로젝트별로 들여쓰기를 설정할 수 있는 방법이 있었다!!먼저 프로젝트파일을 열고 아래와같이 프로젝트를 선택해준다.그리고나서 인스펙터에서 Text Setting의 Tab/Indent를 원하는 숫자로 설정한다.그렇게하면 아래처럼 디폴트 세팅을 안바꿔도, 프로젝트 내 파일 전체에 인덴션을 적용할 수 있다!PS. 프로젝트 파일내에 아래와 같이 반영된다!배운..
디버깅할 때, print가 아닌 OSLog 사용을 위한 Logger 구현
·
Swift
반갑습니다 집주인들 팀원 박효준입니다!본편에서는 "디버깅할 때, print가 아닌 OSLog 사용을 위한 Logger 구현"이라는 주제로 print()와 os_log()를 비교해보겠습니다 그럼 레쯔고 〰️  문제 상황우리가 평소 디버깅을 위해 흔히 사용하는 print는 간단한 출력에는 유용하지만, 다음과 같은 단점이 있다성능: print는 출력 결과를 처리하는 동안 메인 스레드에서 실행되어 앱 성능에 영향을 줄 수 있다.레벨 구분 없음: print는 메시지를 구분할 방법이 없어, 로그의 중요도(예: 디버그, 정보, 에러 등)를 명확히 알기 어렵다.릴리스 빌드에서의 노출: print는 릴리스 빌드에서도 동작하며, 개발 중 남긴 로그가 사용자에게 노출될 위험이 있다.검색 및 필터링 불편: Xcode의 콘솔에..
멀티 프로젝트 모듈화 환경에서 다른 모듈의 Font를 사용하기
·
Xcode
반갑습니다 집주인들 팀원 박효준입니다 ! 본 편에서는 모듈화가 적용되어 있는 저희 프로젝트에서다른 모듈의 폰트를 사용하고 싶으면 어떻게 하는 지 알아보도록 하겠습니다!!! 그럼 레쯔고 〰️ 문제 상황우리 팀은 Multiple Project를 통한 모듈화를 진행하였다.그리고 앱 내에서 사용되는 폰트는 단 한 가지, “OwnglyphBerry”을 사용하고 있다.Excutable 모듈인 MHApplication 모듈에서 plist에 적용하면 폰트 적용이 잘 되나, 모듈의 역할 상으로 Presentation에서 하는게 맞다.그러나, MHPresentation 모듈에서 폰트를 Plist에 넣고 관리하면 모듈마다 Bundle이 다르기 때문에 MHApplication에서 MHPresentation의 번들을 읽을 수 ..
카메라 및 사진 권한 에러
·
Swift
안녕하세요 ~ 전 기록소의 디자이너 겸 개발자 영현입니다 ~ 저 혼자의 글은 처음인 것 같군여 !! ㅎㅎ 재밌네영소개는 존댓말로 해야할 것 같아서 존대를 썼는데 아래부터는 평서문으로.. 가겠습니다.. ^0^ 문제 상황인터넷 세상에서 나 빼고 모두가 카메라 권한을 AVCaptureDevice.requestAccess(for: .video, completionHandler: (Bool) -> Void) 을 사용하여 확인하고 있었다. (진짜 세상이 나한테 구라치는줄;; like 트루먼쇼..)하지만 내가 쓰기만 하면 아래와 같은 에러가 나왔다.설상가상 위 에러는 디버깅도 힘들고 정확히 어떤 이유에서 나는 에러인지 알기 힘든 메세지라 정말.. 힘들었다..문제 해결결론부터 말하자면 저 에러는 프로젝트를 Swift6..
멀티 프로젝트 모듈화와 SwiftLint 환경에서 빌드 속도 개선
·
Xcode
문제 상황모듈화 + SwiftLint를 적용하고 나서 느낀건데….왠지 모르게 빌드가 너무 느려졌다?!?!?!흥…. 오또카지…문제 해결일단 문제가 어디서 발생하는지를 알아야겠죠?이게 늦어지는 이유가 소스코드에 있지는 않을 것이에요…. (왜냐하면 아무것도 구현을 안했기 때문..ㅎ)이때 처음으로 추론?한게… “아! 의존성 때문에 뭔가 오래걸리는 거 아닐까?”였는데… (결론적으로는 반만 맞았읍니다…) 그래서 모든 의존성을 제거했습니다…ㅎ그랬더니?아주 빨라졌다!!솔직히 린트도 의심스럽긴했는데엄청 빨리 끝나서 바로 의심을 접었답니다!그래서 뭔가 의존관계에 있어서 잘못된게 있다! 싶었습니다.그래서 일단 프레임워크들 하나하나 빌드를 해보았습니다.그런데 모두다 하나같이 느림 ㅠㅠㅠㅠㅠㅠ 프레임워크들도 모두 의존성을 제거..
런타임 시점에 Constraint를 조절하여 애니메이션 구현하기
·
UIKit
반갑습니다 집주인들 팀원 박효준입니다 ! 본 편에서는 플로팅 버튼이 셀을 가려서이에 대한 버튼을 런타임 시점에 Constraint를 조절하여 애니메이션 구현한 내용을 적어보겠습니다! 그럼 레쯔고 〰️  문제 상황홈 화면에서 컬렉션 뷰를 통해 책들을 Flow하게 보여준다.그리고 책을 생성하기 위해서는 우측 하단의 Floating 버튼이 있는데,이 버튼이 마지막 행의 오른쪽 책을 가리기 때문에 유저에서 ux적으로 불편함을 줄 수 있을 것이라 생각했다.이 문제를 해결해 나간 과정을 서술해보겠다.문제 해결아이디어플로팅 버튼은 우측 하단에 계속 띄워진 채 존재한다.마지막 행의 오른쪽 셀이 문제기 때문에 팀원과 논의한 끝에 ‘컬렉션뷰의 맨 아래에 도달하면 버튼을 숨기면 좋겠다’고 결론이 났다.그래서 버튼을 깜빡거리..