섹션 15: Cocoapod Dependencies, FlashChat 만들기 (복습)
Cocoapod 활용해서 firebase 사용하기
TableView와 .xib File 사용하기
App life cycle(AppDelegate.swift), SecneDelegate.swift, ViewController Life cycle 생명주기
has no entry points 오류
시작 뷰 컨트롤러를 표시하지 않았기 때문
Is Initial View Controller에 체크해주기
(root view controller 설정)
화면전환하기
segue
- 버튼에서 연결
버튼을 클릭한 상태에서 드래그
버튼을 누르면 자동으로 이동된다(unconditional)
모달형식으로 보여지기 때문에 뒤로 갈 수가 없어서 내비게이션 컨트롤러를 추가하는 방식으로 보통 구현함 - 뷰컨트롤러끼리 연결
메인.스토리보드에서 가운데가 네모난 노란색 버튼 클릭 후 컨트롤 키 누르고 드래그
show 선택하기
identifier이름을 설정해주고 수동으로 이동시켜야 한다(conditional)
텍스트에 애니메이션 주기
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
}
cocoa pods
Third Party Libraries에 접근하기 위한 Package Dependency Manager 패키지 의존성 매니저 중 하나
- 다른 패키지 의존성 매니저: Cocoapods, Carthage, Swift Package Manager
- Swift Package Manager 사용법
- File > Swift Packages > Add Package Dependency
- 깃에서 Package.swift에서 스펙 확인 가능
사용하고 있는 pod을 업데이트 시키고 싶으면
터미널에서 아래와 같이 입력하기만 하면 된다
> pod update
https://cocoapods.org/
CLTypingLabel
라이브러리 사용해보기
https://www.youtube.com/watch?v=iEAjvNRdZa0&feature=youtu.be
manually 라이브러리를 가져와서 추가하면 업데이트 관리가 어렵다 -> 코코아팟 사용하자
- 그 외
- Lintel
- Firebase
Terminal에서 설치
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! 뜻
use_frameworks! 를 쓰면 dynamic framework 임을 나타냅니다.
use_frameworks!를 안쓰면 static library 임을 나타냅니다.
static library (정적 라이브러리)는 컴파일 시에 라이브러리 코드가 실행파일에 연결됩니다.
즉 라이브러리 코드가 실행 파일에 복사되어, 실행파일에 라이브러리 코드가 포함되어있는 상태로 컴파일 되는 것입니다.
반면 dynamic framework (동적 라이브러리) 는 런타임 시에 라이브러리 코드가 실행파일에 연결됩니다.
실행파일에는 호출할 라이브러리의 정보만 포함되고 실제 라이브러리 코드는 복사되지 않습니다.
pod 버전 관리
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" //💥요기
}
}
pie
구글에서 특정 키워드 위주로 검색하고 싶으면 키워드에 쌍따옴표를 적어준다 "키워드"
Position Independent Executable
Disable -pie for Pods
삭제
Podfile에서
pod 'CLTypingLabel', '~> 0.4.0'
지우기
터미널에서 pod install
IQKeyboardManagerSwift
코코아팟 사용하고 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파일 모양 변경하기
우선 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
}
영단어
- populate over: 채우다
- cobble: cobble together this essay: 대충 끼워맞춰서 에세이를 만들다
- tedious: 지루한
- typo: 오타
- populate data: 리스트에 데이터를 채우다
- bog-standard: 흔한 (bog: 책)
- cruicible: 쇳물 괴는 곳, 가혹한 시련
- wind down: 긴장을 풀고 쉬다
Author And Source
이 문제에 관하여(섹션 15: Cocoapod Dependencies, FlashChat 만들기 (복습)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@msi753/Section-15-Cocoapod-Dependencies
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Author And Source
이 문제에 관하여(섹션 15: Cocoapod Dependencies, FlashChat 만들기 (복습)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@msi753/Section-15-Cocoapod-Dependencies저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)