Develop

Xcode 14 빌드 속도 올리는 방법
언제부턴가 Xcode 14에서 단일 속성만 변경하더라도 증분 빌드 시간이 크게 느려지는 것을 느꼈습니다. 개발 시에는 증분빌드 (Increamental build)를 사용함에도 최근 Xcode14에서는 이마저도 기존에 비하면 체감상 많이 느려진 거 같습니다. 한동안 이로 인한 피로감으로 종종 구글링 하던 차에 눈에 띄게 향상되는 방법을 찾아 공유드립니다. 해결방법 문제를 해결하려면 프로젝트 탐색기 -> 타겟 선택 -> 빌드 세팅 -> "사용자 정의 설정 추가" > SWIFT_USE_INTEGRATED_DRIVER > NO 해당 설정 후 또는 제거한 후 Clean Build를 해주셔야 적용됩니다. 참고: https://forums.swift.org/t/swift-5-7-xcode-14-incremental..
스토리보드, XIB Inspectable에 enum 연동하는 방법
스토리보드, XIB에서 UIButton (또는 그외 컨트롤) 에 @IBInspectable을 연동해서 사용하는 경우가 많은데, IBInspectable 값을 enum 으로 선언해서 연동하는 방법입니다. enum 타입 작성 enum StatusShape:Int { case Rectangle = 0 case Triangle = 1 case Circle = 2 } @Inspectable 작성 // IB: use the adapter @IBInspectable var shapeAdapter:Int { get { return self.shape.rawValue } set( shapeIndex) { self.shape = StatusShape(rawValue: shapeIndex) ?? .Rectangle } } ..
M1 ARM-64 Simulator 지원하지 않는 프레임워크 수정하는 방법
Xcode building for iOS Simulator, but linking in an object file built for iOS, for architecture 'arm64' 아직 M1 맥북을 지원하지 않는 프레임워크를 종종 만나게 되는데요, SPM도 지원하지 않고, XCFrmework 도 지원하지 않는 경우, 어쩔 수 없이 Rosetta 모드로 사용해야 할 수 밖에 없는데요. 관련 해결 방법을 찾아보면 대부분 Build Settings에서 Exclude Architecture 설정에 관한 내용이 대부분이었습니다. Rosetta 모드로 사용하게 될 경우, 시뮬레이터에서 스크롤도 제대로 작동안하거나 잘 죽고 상대적으로 빌드 시간이나 이런 부분도 뭔가 체감적으로 더 늘어나는 듯 한데요. 관련해서 ..
String에 HTML 링크 적용
String에 HTML 링크 적용하는 방법입니다. 기본 제공하는 디텍터를 이용해서 링크를 찾고, 태그로 감싸진 경우에는 예외 처리되었습니다. func wrapLinkText() -> String? { let detector = try? NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue) guard let matches = detector?.matches(in: self, options: [], range: NSRange(location: 0, length: self.utf16.count)), matches.count > 0 else { return self } let validators = [">", "\""] var result..

Xcode 정의로 이동하지 않고 우측 에디터에서 보는 방법
Xcode를 좌, 우 2개로 나누어 쓰는 개발자들이 많은 걸로 알고 있다. 빠른 검색이나 프로젝트 네이게이터에서 왼쪽 오른쪽 선택하는 단축키들은 많이들 알고 있는 듯 하나 현재 편집 중인 창(왼쪽)에서 변수나 함수 등의 선언을 확인하기 위해 Cmd + 마우스 클릭 - 현제 에디터에서 해당 선언 부로 이동 확인 후 다시 돌아가서 작업 보고 싶은 변수나 함수를 프로젝트 검색 후, 검색결과를 Opt+Shift 클릭해서 우측 에디터로 띄우는 방법 보고 싶은 변수나 함수를 Cmd + Shift + O 빠른 검색으로 띄워서 Opt + Shift 클릭 해서 우측 에디터로 띄우는 방법 주위 동료들에게 물어봐도 거의 1번, 그 다음 2번, 3번도 잘 모르는 경우가 많았다. 이것도 불편하다고 느끼던 중 새로운 키를 찾아내..

Xcode Build 실행 시 명확하게 표시하는 방법
Purpose 최근의 Xcode 버전은 빌드를 시작하더라도 상단에 아주 작게 빌드 표시가 되어 빌드를 진행 중인지 아닌 지 구분이 모호할 때가 많다. 더구나 이곳에 인덱싱, 러닝, 등의 여러개의 작업이 동시에 진행 중일 경우, 직관성은 더욱 떨어지게 된다. 이를 해결하기 위해 여러 옵션을 테스트해 본 후, 빌드 명령 시작 시 베젤을 띄우는 방법이 제일 명확하다 판단했다. 주위 동료들도 이 방법에 많은 공감을 보내주어 공유해본다. 빌드 시작 시 직관적인 표시를 위해 Xcode 설정 > Behavior > 왼쪽 사이드바의 Starts 항목을 선택한 후 우측의 세번재 항목 Notify using bezel of system notification 도 선택해 준다. 이후 빌드를 해보면 위와 같은 베젤이 표시되는..
KingFisher에서 SVG 이미지 다운로드하는 방법
Feat 킹피셔를 이용한 이미지 다운로드 함수 작성 URL 경로의 마지막 확장자에 SVG가 있을 경우 SVG를 다운로드 하는 함수 SVGKit 설치 - https://github.com/SVGKit/SVGKit SVGProcessor 작성 import SVGKit import Kingfisher extension UIImageView { func kfSetImage(with urlString: String?) { if urlString?.hasSuffix(".svg") == true { return self.kfSetSVGImage(with: urlString) } if let imageUrl = urlString.map({ App.config.WebResourceURL + $0 })?.url { sel..
SwiftUI 상에서 HTML 출력과 Link, CSS 적용하는 방법
Feature SwfitUI에서 HTML을 출력한다. HTML - 링크 클릭 시, 활성화된 링크를 가져오거나, 핸들러를 제공한다. HTML에 CSS를 적용한다. import SwiftUI import WebKit ///참고 - https://stackoverflow.com/a/59018581/3374327 struct SUIWebView: UIViewRepresentable { @ObservedObject var viewModel: SUIWebViewModel let url: URL? let html: String? let css: String? func makeUIView(context: UIViewRepresentableContext) -> WKWebView { var webView: WKWebVie..
multi-line 문구 localizable.strings 적용 방법
Localizable.Strings에 아래와 같이 작성 후 "Hi, I would like to share the following feedback: " = "Hallo, ich möchte folgendes Feedback geben: "; 소스상 에서 아래와 같이 사용이 가능하다. let localizedMessage = NSLocalizedString(""" Hi, I would like to share the following feedback: """, comment: "")