- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- HTTP
- SWIFT
- 오블완
- swiftUI
- MVC
- 시각화
- barplot
- scheduledTimer
- 딥러닝
- sigmoid
- ReLU
- Request
- rxswift
- 연산자
- cocoapods
- Linux
- r
- Python
- tapply
- Observable
- deeplearning
- decode
- 티스토리챌린지
- struct
- rest api
- 명령어
- ios
- Optional
- substr
- SQL
목록ios (41)
iOS 개발 기록 블로그
Your certificate 'xxxxxxx.cer' is not valid, please check end date and renew it if necessary 인증서 또는 프로비저닝 프로파일이 만료되었을때 배포 또는 'fastlane fetch_cert' 할때 위와 같이 터미널에 에러 발생하는 경우가 있다. 이럴 경우에 아래와 같이 팀원 분들이 있다면 협의하여 기존에 인증서를 모두 제거(nuke)하고 다시 생성하는 과정을 거칩니다. fastlane match nuke developmentfastlane match nuke distribution 삭제할 인증서를 선택하라고 하는데 저는 그냥 모두 삭제하였습니다. 그리고 다시 인증서&프로파일을 생성합니다. fastlane match developmen..
@State, @ObservedObject, @EnvironmentObject 같은 속성 래퍼를 사용한 프로퍼티와일반 프로퍼티(let 또는 var)로 선언되어 사용하는 것들의 차이점은 무엇일까? 🔍 일반 프로퍼티로 선언해서 사용하는 예시public struct MyView: View { ... var someProperty: Bool public init(someProperty: Bool) { self.someProperty = someProperty }이 구조는 SwiftUI에서 뷰 초기화 시 외부에서 값을 전달받고 이후 변경되지 않을 값을 받을 때 사용하는 일반적인 패턴입니다. 💡 왜 @State나 @Binding이 아니라 var인가요? 요약 정리@State내부에서 변경할 로컬 상..
@EnvironmentObject, @ObservedObject, @StateObject는 모두 SwiftUI에서 상태를 공유하거나 관찰할 때 사용하는 **속성 래퍼(property wrapper)**입니다. 각각의 목적과 생성/소유 관계에 따라 다르게 사용되며, 아래와 같은 차이점이 있습니다. 🔹 1. @StateObject 뷰에서 직접 생성하고 소유하는 상태 객체 초기화도 뷰 내부에서 직접 해야 함 (= SomeObject() 형태).소유권(owner): 해당 뷰가 상태를 “소유”함.의도: 해당 뷰가 객체의 라이프사이클을 책임져야 할 때 사용.struct MyView: View { @StateObject var viewModel = MyViewModel() // 여기서 생성 var body:..

WKWebView, 왜 갑자기 메모리 릭이 생기지?WKWebView를 개발하면서 통칭 '브릿지'라고 하는 기능을 담당하는 WKScriptMessageHandler를 사용하여 브릿지를 네이티브에서 추가해주게 됩니다. WKWebView를 사용할 때 WKScriptMessageHandler를 사용해 JavaScript 브릿지를 연결하다 보면, 어느 순간 deinit이 호출되지 않고 VC가 메모리에 남아 있는 걸 발견하게 됩니다. contentController.add(self, name: "myBridge") 위처럼 추가해주고 저 같은 경우에 기존 방식으로 deinit 시점에 아래와 같이 수동으로 제거해주곤 합니다.webView.configuration.userContentController.removeAll..

에러 로그*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Expected dequeued view to be returned to the collection view in preparation for display. When the collection view's data source is asked to provide a view for a given index path, ensure that a single view is dequeued and returned to the collection view. Avoid dequeuing views without a request from the..

SpringSpring은 엔터프라이즈 수준의 애플리케이션을 구축할 수 있는 강력하고 유연한 프레임워크로, 특히 REST API를 구축하는 데에 많이 사용됩니다.또한, iOS와의 연동이 잘 이루어질 수 있도록 HTTP/JSON 기반의 API 설계를 지원하므로 iOS 앱과 함께 사용하는 데에도 매우 유용합니다. 소개Spring FrameworkSpring Framework는 Java 기반의 오픈소스 애플리케이션 프레임워크입니다.주로 웹 애플리케이션과 RESTful API 서버를 구축하는 데에 많이 사용됩니다.Spring은 매우 유연하고 강력하며, IoC (Inversion of Control)와 DI (Dependency Injection)를 기반으로 구성 요소들을 관리합니다. IoC (Inversion o..

RxSwift와 Moya를 사용하여 REST API를 처리하고 있다면,REST API에 대한 이해를 iOS 개발 관점에서 더 심화하는 것이 좋습니다.이를 위해 아래의 주제들을 알아두면 더욱 효과적으로 개발할 수 있습니다. 1. Moya와 REST API의 연계Moya는 네트워크 계층을 관리하는 데 강력한 라이브러리로, REST API를 RxSwift와 결합하여 비동기적인 방식으로 사용할 수 있습니다. 다음은 알아두면 좋은 Moya 활용 관련 지식입니다:Moya의 기본 구조 이해TargetType을 정의하여 API의 엔드포인트를 명확히 관리:enum MyAPI { case fetchUsers case createUser(name: String, email: String)}extension My..
에러 상황final class StepView: UIView { // MARK: - Properties private var isFitnessAuthorized: Bool // MARK: - Initializer override init(frame: CGRect) { super.init(frame: frame) self.setupView() self.bindView() self.isFitnessAuthorized = PermissionManager.getPedometerAuthStatus() } // MARK: - Setup View private func setupView() { ..

navigationBarItems 네비게이션 바 아이템을 여러개 쓰면 아이템끼리 간격을 조절하고 싶을 경우가 있다. 이때 아래와 같이 "imageInsets" 프로퍼티를 조정해서 쓰면 된다. // adjust right navigationBarItems space self.yourButtonName.imageInsets = UIEdgeInsets(top: 0, left: 15, bottom: 0, right: 0) yourButtonName을 왼쪽으로부터 15만큼 떨어지게 한다. Inset() 하면 괄호 안에 숫자만큼 간격을 두는 것. Apple Developer Documentation developer.apple.com
Observable이라는 신문을 구독하고 있는 구독자(Subscriber)이 있다고 생각한다. Subject는 Observable에 흐르는 event를 받아 구독자에게 전달한다고 보면 된다. 종류 Publish Subject Behavior Subject Replay Subject Variable BehaviorRelay PublishSubject let subject = PublishSubject() subject.onNext("Issue 1") subject.subscribe { event in print(event) } subject.onNext("Issue 2") subject.onNext("Issue 3") subject.dispose() //subject.onCompleted() subject..