본문 바로가기

IT

(126)
맥 카탈리나 코코아팟 오류 MacOS Catalina CocoaPod Error macOS Catalina로 업데이트한 뒤에 개발하던 프로젝트에 새로운 코코아팟 라이브러리를 설치하려고 팟파일에 라이브러리 추가하고 터미널 열어서 pod install 쳐보니 아래와 같은 오류 메시지와 함께 동작을 하지 않았습니다. /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby: bad interpreter: No such file or directory 제 맥 버전은 macOS Catalina 10.15 입니다. 해결책은 터미널을 열어서 아래 명령어를 실행시켜주면 끝입니다! sudo gem install -n /usr/local/bin cocoapods 이렇게 입력으로 해주면..
SwiftUI 튜토리얼 1-1 뷰의 생성과 조합 SwiftUI Essentials - Creating and Combining Views SwiftUI 튜토리얼 1 드디어 swiftUI를 좀 보려고 합니다. swiftUI에 대해서 듣고 가장 먼저 떠올랐던 건 예전 iPhone 3gs 모델이 한국에 처음 들어올 때 나왔던 TV광고가 떠올랐습니다. 비 개발자들이 한 명씩 나와서 자기가 만든 앱을 소개하곤 들어가는 간단한 내용이었습니다. 자세히는 기억 안 나지만 기억을 더듬어보면 사람이 나와서 "상사 뺨 때리는 앱을 만들었는데 손맛이 나름 있더라고요 앱스토어에서 만나보세요" 대충 뭐 이런 말 하고 사라집니다. 이게 바로 코앞이구나 생각했습니다. 애플이 앱스토어를 만든 궁극적인 목적은 프로그래머가 아니어도 앱을 쉽게 만들어서 너도 나도 올릴 수 있게 하는 것..
SwiftUI - UIHostingController UIHostingController란 우선 애플 도큐먼트 먼저 보겠습니다. 공식 문서 먼저 보는 습관을 들이는 게 좋으니까요! https://developer.apple.com/documentation/swiftui/uihostingcontroller 들어가 보시면 아무것도 없습니다. 공식 문서 먼저 보는 습관이 좋다는 말을 다시 넣어둡니다. swiftUI의 view(contentView)를 나타내며 UIViewController를 상속받고 있어서 swiftUI를 사용하지 않는 기존 프로젝트들의 UIVIewController들과도 호환이 가능합니다. UIViewController에서 UIHostingController 사용하는 법을 보겠습니다. swiftUI를 사용하지 않는 프로젝트를 엽니다. story..
SwiftUI 시작하기 SwiftUI 시작하기 원문 : https://developer.apple.com/kr/xcode/swiftui/ 애플 개발자 싸이트에 있는글을 그대로 복사해왔습니다. 문제시 삭제하겠습니다. 더 우수한 앱. 더 적은 코드. SwiftUI는 Swift의 성능을 바탕으로 모든 Apple 플랫폼에서 사용자 인터페이스를 구축할 수 있는 혁신적이고 간소화된 방법입니다. 단 하나의 도구 구성 및 API를 통해 모든 Apple 기기에서 사용할 수 있는 사용자 인터페이스를 구축합니다. 읽기 쉽고 작성하기 편한 선언적 Swift 구문을 통해 SwiftUI는 새로운 Xcode 디자인 도구와 매끄럽게 연동되면서 코드와 디자인이 완벽하게 동기화되도록 합니다. 또한 유동적 글자 크기 조절, 다크 모드, 현지화 및 손쉬운 사용을..
Realm 사용법 Realm을 사용하는 프로젝트를 다뤄야 하는 일이 생겨서 Realm 사용법에 대해 공부할 겸 포스팅을 하겠습니다. 저는 SQLite를 백억년전쯤에 사용하고 그 뒤로 로컬 DB를 정말 오랜만에 다뤄봅니다. 그래서 Realm 사용법을 검색해보면서 처음에 계속 모델을 만드는 내용만 나오는 것에 대해 의아해했습니다. 테이블 정의는 어떻게 해?? 그래서 데이터들은 어떻게 읽어온다는 것인가?? 알고 보니 쿼리문으로 테이블에 데이터를 읽어오던 기존의 DB와는 전혀 다른 방식인 것을 알았습니다. 기존에 쓰던 대부분의 데이터베이스는 가져온 데이터를 바로 애플리케이션에서 사용을 할 수 없고, 애플리케이션에서 사용이 가능하도록 가공을 하는 과정이 필요했습니다. 이 가공을 하는 과정에서 잘못하면 코드가 굉장히 복잡해질 수도 ..
Multiple commands produce Error 해결법 외부 라이브러리를 포함한 프로젝트를 다운로드 받았을때 종종 Multiple commands produced 에러를 보실 수 있습니다. 같은 파일명이 생겨서 나는 에러라고 합니다 해결법은 아래와 같습니다. 오류 문구 뒤에 오류를 발생시키는 파일의 경로와 그 경로 끝에 해당 파일 이름(FILE NAME 자리)이 명시되어있을 겁니다. Multiple commands produce '/Users/~~~~~/FILE NAME': 1) Target 'TARAGET NAME' (project 'PROJECT NAME') has complie command with input '/Users/~~~/FILE NAME' 타켓 화면에서 FILE NAME에 나와있던 해당 파일을 선택후 삭제 버튼(-)을 눌러서 삭제해주신후 클..
[swift] throw, do-catch, rethrows, defer [swift 기초문법] - throw, do-catch, rethrows, defer throw throw 키워드를 쓰면 함수, 메서드, 이니셜라이저는 오류를 던질 수 있습니다. throws 키워드를 사용한 함수는 동작 도중 오류가 발생하면 호출한 코드에 오류를 알릴 수 있습니다. 같은 이름의 throw가 명시되지 않은 함수와 구분됩니다. throw를 포함한 메서드, 이니셜라이저는 메서드, 이니셜라이저로 재정의 될 수 없습니다. 반대의 경우는 가능합니다 (throw가 없는 함수가 있는 함수로 재정의) enum ErrorReason: Error { case none case invalid } func vend() throws { var testError: Int? = nil guard let test = ..
[swift] Binding, Tuple, Where [swift 기초문법] - 값 바인딩(Binding), Where 절 값 바인딩 패턴(Value-Binding Pattern)이란 변수 또는 상수의 이름에 매치된 값을 할당하는 것입니다. 크게는 식별자 바인딩과 옵셔널 바인딩을 들 수 있습니다. 식별자 바인딩은 튜플로 예시를 들어보겠습니다. let sampleTuple = ("sample", 77) switch sampleTuple { case let (category, number) : print("Category is \(category), Number is \(number)") // Category is sample, Number is 77 } 옵셔널 바인딩 예 let optionalValue: Int? = 0 if let realValue = op..