일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- uitableview
- map
- uiscrollview
- 리펙토링
- 스위프트
- 애니메이션
- swift documentation
- RxCocoa
- clean architecture
- Clean Code
- Xcode
- collectionview
- tableView
- UICollectionView
- HIG
- UITextView
- rxswift
- 리펙터링
- SWIFT
- MVVM
- Refactoring
- 리팩토링
- Observable
- ios
- combine
- swiftUI
- Protocol
- 클린 코드
- Human interface guide
- ribs
- Today
- Total
목록분류 전체보기 (1644)
김종권의 iOS 앱 개발 알아가기
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/60FxB/btqNXcGJBfp/8JXlKdsyZ4QAmNm6g6Z2WK/img.png)
기본개념은 여기 참고 DataModel추가 새로 만들기에서 Data Model추가 완성된 화면 "Add Entity"눌러서 엔터티 추가: 중요한 것은 Data형태의 updateDate를 추가 (이 데이터는 나중에 addData할 때 같은 데이터가 있으면 date만 업데이트하는 용도로 사용 될 것) Entity이름 수정 Codegen을 Menual/None으로 변경: Class Definition으로 두면 오류 발생 "Mutiple commands produce '...' " 생성된 .xcdatamodeld 클릭 > Xcode의 menu바에서 Editor -> "Create NSMagedObject Subclass"선택하여 클래스 생성 두 가지 파일 생성 완료: Person+CoreDataClass, Pe..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/blfXOz/btqNYvR9hZz/h7P8Jk64tKuEpKcPFDqlw1/img.png)
유료계정: 129,000원 Apple 개발자 사이트 접속하여 Account 선택 아래과 같은 화면이 나온다면, Join the Apple Developer Program클릭 Enroll선택 -> 이후 Apple 유료계정 등록 * 비용을 지불하고 Enroll을 '신청'했지만, 계정 pending상태가 된 경우 : developer.apple.com/contact/topic/select 사이트에서 pending 멤버식 및 계정 -> '계정에 접근하기' -> '전화'에서 pending상태라고 문의하면 10분이내로 계정이 활성화
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/NQUhC/btqNWfQgLwC/pjtDZ5TTqkDI84mccEOKrK/img.png)
intrinsic content size란? 본질적인 내용의 크기 (대부분의 View들은 기본적으로 컨텐츠의 크기만큼의 size를 가짐) 예) 보통 storyboard에서 UILabel을 사용할 때, width, height contraint를 따로 지정해주지 않아도 autolayout에 아무 지장을 안주는 경우 존재 예) 런타임에서 UILabel의 텍스트를 변경시켜도 autolayout에 아무 이상 없이 잘 나옴 Storyboard에서 intrinsic size변경 버튼의 크기를 auto layout으로 width와 height를 지정해 놓을 수 있지만, 좋지 않은 방법 custom버튼의 경우 intrinsicContentSize를 override하여 font와 size등의 작업을 더욱 유연하게 할 수..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/5dgcr/btqNYv5EZco/CWBKuRprWpU9pZPbP9kkUk/img.png)
우선 이곳에서 Firebase연동 Firestore란? 클라우드 DB REST API와 같은 것을 쓰고, 데이터를 gRPC이나 웹 소켓과 같이 stream형태로 받고 싶은 경우 사용 DB에 "구독"을 할 수 있는 개념이 있어서, 앱이 DB에 구독을 하고 있을 때 서버에서 DB의 수정이 생기면 자동으로 앱에 데이터를 넘겨주는 시스템 존재 의존성 아래의 3가지 파일은 모두 하나의 프로젝트 또는 하나의 프레임워크에 존재해야함 앱의 구조를 신경쓴다고 해서, 세 가지 프레임 워크가 떨어져 있으면 crash를 발생하고 Firebase에서 내려주는 형태인 GeoPoint형을 사용하지 못하는 버그 존재 pod 'Firebase/Core' pod 'Firebase/Firestore' pod 'FirebaseFiresto..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dlwfnO/btqNVBzuxUY/qpntQLKkrpcYs3PrmOksi1/img.png)
먼저, 여기를 참고하여 Firebase연동 후 시작 DataBase의존성 추가 pod 'Firebase/Database' database 추가 Database 프레임워크 연동 Database.database().reference()로 db접근 // // ViewController.swift // FirebaseTest // // Created by 김종권 on 2020/11/21. // import UIKit import Firebase class ViewController: UIViewController { lazy var rootRef = Database.database().reference() override func viewDidLoad() { super.viewDidLoad() let itemR..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b1vJbO/btqNZM0m8kL/1lPAPehUpjMCFN3H1KqbCK/img.png)
Firebase를 쓰는 이유 REST API를 쓸 때, gRPC와 같이 stream으로 받고 싶은 경우 구독하면서 쓰는 Firestore존재 DB를 쓸 때 따로 서버를 만들지 않고 Firebase/Database를 사용 가능 앱에서 나타나는 오류 분석을 Firebase에 전송: 'Firebase/Crashlytics' 앱 이용자 분석: 'Firebase/Analytics' Xcode에서 Firebase라는 프레임워크가 서버의 Firebase에 연동하는 원리 Firebase에서 앱 번들을 주고 앱을 등록하면, "GoogleService-info.plist"라는 파일을 다운받을 수 있게 해주는데, 이 파일을 프로젝트 안에 포함시켜 놓으면 연동 완료 Firebase에 앱 등록 console.firebase.g..
목표 baseButton을 하나 만들고, 공통적으로 baseButton의 속성을 가지면서 각자의 특색있는 커스텀 버튼 생성 BaseButton 생성 cornerRadius가 4인 Base버튼 클래스 생성 // // MyBaseButton.swift // Test // // Created by 김종권 on 2020/11/20. // import Foundation import UIKit class MyBaseButton: UIButton { override init(frame: CGRect) { super.init(frame: frame) setupView() } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) setupView(..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/neXzL/btqNVByZtCB/KFeW7xh0JU5CVxNkvttkv1/img.png)
UIViewController들을 부모-자식 관계로 이용? A ViewController가 있을 때, A밑에 B ViewController가 존재하게 하는 방법? 자식으로 설정: parent 입장에서 설정 A.addChild(B) A.view.addSubview(B.view) B.didMove(toParent: A) parentVC.addChild(childVC): 특정 ViewController를 현재 ViewController의 자식으로 설정 parentVC.view.addSubview(childView): 추가된 childVC의 View가 보일 수 있도록 맨 앞으로 등장하게 하는 것 childVC.didMove(toParent: parentVC) / willMove : childVC입장에서는 언제 ..