일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Human interface guide
- Protocol
- clean architecture
- ios
- swift documentation
- uitableview
- combine
- UITextView
- 리펙터링
- 클린 코드
- HIG
- uiscrollview
- 리팩토링
- Refactoring
- Clean Code
- tableView
- RxCocoa
- collectionview
- MVVM
- Observable
- Xcode
- 애니메이션
- 리펙토링
- UICollectionView
- 스위프트
- swiftUI
- SWIFT
- ribs
- rxswift
- map
- Today
- Total
목록iOS 응용 (swift) (680)
김종권의 iOS 앱 개발 알아가기
우선 이곳에서 Firebase연동 Firestore란? 클라우드 DB REST API와 같은 것을 쓰고, 데이터를 gRPC이나 웹 소켓과 같이 stream형태로 받고 싶은 경우 사용 DB에 "구독"을 할 수 있는 개념이 있어서, 앱이 DB에 구독을 하고 있을 때 서버에서 DB의 수정이 생기면 자동으로 앱에 데이터를 넘겨주는 시스템 존재 의존성 아래의 3가지 파일은 모두 하나의 프로젝트 또는 하나의 프레임워크에 존재해야함 앱의 구조를 신경쓴다고 해서, 세 가지 프레임 워크가 떨어져 있으면 crash를 발생하고 Firebase에서 내려주는 형태인 GeoPoint형을 사용하지 못하는 버그 존재 pod 'Firebase/Core' pod 'Firebase/Firestore' pod 'FirebaseFiresto..
먼저, 여기를 참고하여 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..
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(..
클립보드에 저장하기 UIPasteboard.general.string = "저장 할 텍스트" 클립보드에서 저장된 문자열 가져오기 if let storedString = UIPasteboard.general.string { print(storedString) } 예제 코드 // // ViewController.swift // Test // // Created by 김종권 on 2020/11/20. // import UIKit import RxSwift import RxCocoa class ViewController: UIViewController { @IBOutlet weak var btnCode: UIButton! let bag = DisposeBag() override func viewDidLoad()..
Rx를 쓰지 않고 NotificationCenter를 이용한 방법은 여기 참고 NotificationCenter를 쓰는 경우 화면이 background에서 foreground로 변하는 경우 AppDelegate에서 딥링크 처리시, 특정 화면에 event를 주입해주고 알림을 보내는 경우 사용준비 pod file에 아래 정보 입력 후 pod install pod 'RxSwift' pod 'RxCocoa' 기본 구조 (케이스: AppDelegate에서 home에 노티를 보내고 싶은 경우) NotificationCenter를 구별할 수 있는 key 정의 (타입은 NSNotification.Name(_ :String)) // Constants extension NSNotification.Name { static ..
* 키체인을 사용해서 데이터를 저장해도, 디바이스에서 보안 툴을 가지고 키체인에 저장된 문자열들을 모두 알 수 있기 때문에 암호화 하여 저장하고, 복호화하여 읽도록 필요: ios-development.tistory.com/manage/posts/ Kehchain pod 종속성 pod 'KeychainAccess', '4.1.0' Clean Architecture에 의해서, 앱을 Domain과 App영역으로 나눈다면, Keychain의 protocol(Domain영역)과 구현(App영역)을 분리 App영역에서 사용할 때는 Domain영역의 값을, 화면전환 할 때 주입해주는 구조로 구성하여, 추후에 테스트하기 쉽게 구현하는 것이 중요 ex) MVVM구조를 사용한다면, ViewModel에 Dependencie..
방법: CALayer를 가지고 테이블 뷰 색깔로 그려주게 되면, separator가 가려지게끔 하는 원리 CALayer를 이용하여 UIView의 하단에 줄을 긋는 함수 정의 public extension UIView { func addBottomBorderWithColor(color: UIColor) { let border = CALayer() border.backgroundColor = color.cgColor border.frame = CGRect(x: 0, y: self.frame.size.height, width: self.frame.size.width, height: 1) self.layer.addSublayer(border) } func addAboveTheBottomBorderWithColo..