Develop/Swift
스토리보드, 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..
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: "")
UserDefaults 모든 항목 출력, 경로, 리셋
UserDefaults 목록 확인을 위한 코드 해당 경로의 plist 오픈 var path: [AnyObject] = NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true) as [AnyObject] let folder: String = path[0] as! String NSLog("%@/Preferences", folder) 소스 상에서 런타임 시에 UserDefaults를 프린트로 찍는 방법 print(UserDefaults.standard.dictionaryRepresentation()) UserDefaults Reset 필요 시 extension UserDefaults { static func resetDefaul..

Advances in Collection View Layout
iOS는 기본적으로 'UICollectionView' 흐름 레이아웃과 함께 제공되며, 이는 간단한 경우에 유용합니다. 그러나 사용자 정의 레이아웃을 수행하는 것은 매우 복잡하고 상용구 코드가 필요하고 성능 등에 대해 생각해야 합니다. iOS 13 및 macOS 10.15의 새로운 기능: Compositional Layout Compositional Layout은 구성 가능하고 유연하며 빠릅니다. 작은 레이아웃 그룹(라인 기반, 즉 플로우 레이아웃 사용)을 가져와 함께 더 큰 조각으로 구성하여 작동합니다. iOS, tvOS 및 macOS에서 사용 가능(동일한 API): UI/NSCollectionViewCompositionalLayout ⭢ NSCollectionLayoutSection ⭢ NSCollec..

Figma 자동 익스포트 for Xcode, Android Studio
피그마에서는 아직까지 기존의 스케치 > 제플린 환경처럼 폰트, 이미지, 컬러를 개발툴 (AOS, iOS)에서 바로 사용할 수 있도록 익스포트 하는 기능이 제공되고 있지 않다. 물론 이미지를 익스포트 하는 기능은 훌륭하지만,, 컬러셋, 아이콘, 이미지, 타이포그래피에 대해 개발자가 한땀 한땀 각각의 컴포넌트를 직접 개발툴에서 만들거나 옮겨야 하기 때문에 적지 않은 공수와 노력이 든다. 또한 디자인 변경으로 인한 컴포넌트 업데이트 시에도 피그마에서 해당 컴포넌트를 찾아 변경된 값을 확인 후 개발툴에서 직접 수정해야 하므로 관리도 상당히 어렵고 사람이 직접 하므로 실수가 유발 될 수 있다. 이러한 이유로 피그마 커뮤니티 플러그인을 비롯해 유틸리티를 찾던 중 러시아 iOS 개발자가 만든 figma-export ..