Cocoapod 활용해서 firebase 사용하기
TableView와 .xib File 사용하기
App life cycle(AppDelegate.swift), SecneDelegate.swift, ViewController Life cycle 생명주기
시작 뷰 컨트롤러를 표시하지 않았기 때문
Is Initial View Controller에 체크해주기
(root view controller 설정)
Timer를 사용했고,
charIndex를 활용해 각각의 문자가 나오는 시간을 0.1씩 증가시켜줬다.
titleLabel.text = ""
var charIndex = 0.0
let titleText = "⚡️FlashChat"
for letter in titleText {
Timer.scheduledTimer(withTimeInterval: 0.1 * charIndex, repeats: false) { (timer) in
self.titleLabel.text?.append(letter)
}
charIndex += 1
}
Third Party Libraries에 접근하기 위한 Package Dependency Manager 패키지 의존성 매니저 중 하나
사용하고 있는 pod을 업데이트 시키고 싶으면
터미널에서 아래와 같이 입력하기만 하면 된다
> pod update
https://cocoapods.org/
CLTypingLabel
라이브러리 사용해보기
https://www.youtube.com/watch?v=iEAjvNRdZa0&feature=youtu.be
manually 라이브러리를 가져와서 추가하면 업데이트 관리가 어렵다 -> 코코아팟 사용하자
prompt sign 깜빡거리는 커서
맥에서 zsh을 기본으로 사용하는데 업데이트를 하려면 chsh -s /bin/zsh
를 입력하면 된다
$ sudo gem install cocoapods
$ pod setup --verbose //마스터 브랜치에서 풀 해오기
$ pod --version
terminal에서 cd입력하고 xcodeproj의 부모폴더를 드래그한다(경로 자동 입력)
$ pod init
$ open Podfile -a Xcode
Podfile 우클릭> 다음으로 열기> 기타> Xcode(항상 체크)
Podfile은 루비파일
1: ios 9.0이상에서 작동
2: pod 'CLTypingLabel' 사용할 pod 추가
$ pod install
그 이후에는 .xcworkspace를 사용한다
use_frameworks! 를 쓰면 dynamic framework 임을 나타냅니다.
use_frameworks!를 안쓰면 static library 임을 나타냅니다.
static library (정적 라이브러리)는 컴파일 시에 라이브러리 코드가 실행파일에 연결됩니다.
즉 라이브러리 코드가 실행 파일에 복사되어, 실행파일에 라이브러리 코드가 포함되어있는 상태로 컴파일 되는 것입니다.
반면 dynamic framework (동적 라이브러리) 는 런타임 시에 라이브러리 코드가 실행파일에 연결됩니다.
실행파일에는 호출할 라이브러리의 정보만 포함되고 실제 라이브러리 코드는 복사되지 않습니다.
command B 빌드하면 오류가 뜨는데
깃에 들어가서
풀리퀘스트를 보고 코드를 변경해준다 Closed> Files changed
깃에서 release버전을 확인하면 0.4.0이 최신 버전으로 Swift 4, 5 버전을 지원한다
그런데 Podfile.lock파일을 Xcode로 열어보니 0.3.0버전이다
왜why?
they required a higher minimum deployment target
깃에서 podspec을 살펴보면
플랫폼 10.0 이상을 요구하고 있다
Podfile에서 platform을 수정해주고
pod 'CLTypingLabel', '~> 0.4.0'
터미널에서 pod install을 리턴하면
[!] CocoaPods could not find compatible versions for pod "CLTypingLabel":
In Podfile:
CLTypingLabel (~> 0.4.0)
Specs satisfying the `CLTypingLabel (~> 0.4.0)` dependency were found, but they required a higher minimum deployment target`
깃에서 CLTypingLabel.podspec 파일을 보니...
s.platform = :ios, '10.0'
10이상이어야 한다
팟파일 수정하기
platform :ios, '13.0'
$ pod install
Installing CLTypingLabel 0.4.0 (was 0.3.0)
제대로 동작한다
import UIKit
import CLTypingLabel //💥요기
class WelcomeViewController: UIViewController {
@IBOutlet weak var titleLabel: CLTypingLabel! //💥요기
override func viewDidLoad() {
super.viewDidLoad()
titleLabel.text = "⚡️FlashChat" //💥요기
}
}
구글에서 특정 키워드 위주로 검색하고 싶으면 키워드에 쌍따옴표를 적어준다 "키워드"
Position Independent Executable
Disable -pie for Pods
Podfile에서
pod 'CLTypingLabel', '~> 0.4.0'
지우기
터미널에서 pod install
코코아팟 사용하고 swift package manager 사용하면 오류 안나는데
반대는 오류가 난다
File> Swift Packages > Add Package Dependency >
https://github.com/hackiftekhar/IQKeyboardManager
version: Up to Next Major
메이저 버전까지 업데이트하기를 권장한다
마이너 버전이랑 스위프트 언어랑 맞지 않을 수도 있다
https://github.com/hackiftekhar/IQKeyboardManager/wiki/Properties-&-Functions
//AppDelegate.swift
import IQKeyboardManagerSwift
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
IQKeyboardManager.shared.enable = true
IQKeyboardManager.shared.enableAutoToolbar = false
IQKeyboardManager.shared.shouldResignOnTouchOutside = true
return true
}
첫번째 뷰컨트롤러에서만 내비게이션바 안보이게 만들기
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.isNavigationBarHidden = true
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.isNavigationBarHidden = false
}
DispatchQueue.main.async {
self.tableView.reloadData() //테이블 다시 로드하기
//새로운 메시지를 입력하면 가장 아래로 스크롤하기
let indexPath = IndexPath(row: self.messages.count-1, section: 0)
self.tableView.scrollToRow(at: indexPath, at: .top, animated: true)
}
우선 nib에 상대방의 이미지를 추가해줬다
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let message = messages[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: K.cellIdentifier, for: indexPath) as! MessageCell
//로그인한 currentUser와 sender가 일치하면 Me 이미지만 보이게 하기
if message.sender == Auth.auth().currentUser?.email {
cell.leftImageView.isHidden = true
cell.rightImageView.isHidden = false
cell.messageBubble.backgroundColor = UIColor(named: K.BrandColors.lightPurple)
cell.label.textColor = UIColor(named: K.BrandColors.purple)
} else {
cell.leftImageView.isHidden = false
cell.rightImageView.isHidden = true
cell.messageBubble.backgroundColor = UIColor(named: K.BrandColors.purple)
cell.label.textColor = UIColor(named: K.BrandColors.lightPurple)
}
cell.label?.text = message.body
return cell
}
https://velog.io/@altmshfkgudtjr/SwiftUI-ScenePhase