SHcommit / LearnMoreSwiftInUdemy

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[Clone/Instagram] 프로필 Scene 구현 | 색다른 시도 & 새롭게 알게된 개념 & 개선해야 할 기능 #7

SHcommit opened this issue · comments

프로필 Scene 구현

구현 영상

강의와는 다르게

  • 로그인된 사용자의 정보를 Firebase DB에서 꺼내와 실시간으로 갱신하도록 추가 구현
  • profileHeader의 프로필, 사용자 이름등 Firestore DB의 데이터를 fetch하는 함수 만듬
  • Firestore Database에 값을 꺼내오거나 저장할 때 Codable타입으로 Model을 새로 구현했다.

개선해야 할 기능

  • 회원가입 실패 시 버퍼링 끊기
  • profile Header의 image를 Storage.storage에서 받아오는데 시간이 많이 걸림. 기능 개선이 필요.. (원래 파이어베이스에서 작은 이미지 받아오는 경우도 느린지 모르겠다,,)

  • ProfileController에서 grid, list bookmark 버튼이있는데 이를 stackview+pageViewController로 추가 구현해보기

새로 알게된 것

컬랙션 헤더를 사용하기 위해서는

  1. 헤더를 등록해야함
    collectionView.register(_:forSupplementaryViewOfKind:withReuseIdentifier:)
  2. DataSource로 Header뷰를 반환하면 됨 collectionView(_:viewForSupplementaryElementOfKind:at:)

이때 얘는 UICollectionReusableView를 반환함으로 HeaderView의 타입은 UICollectionReusableView로 구현하면 된다.

  1. collectionView(_:layout:referenceSizeForHeaderInSection:)

헤더 크기 반환!


CollectionViewDelegateFlowLayout

  • collectionView(_:layout:minimumLineSpacingForSectionAt:)

minimumLineSpacing 경우 아래로 스크롤하는 레이아웃일 때 row간의 최소 간격을 정한다. horizontally의 collectionLayout의 경우 column간 최소 간격을 결정한다.

  • collectionView(_:layout:minimumInteritemSpacingForSectionAt: )

minimumInteritem을 설명하자면 아래로 내리는 collection layout인 경우 cell의 row간 최소 space를 설정할 수 있게 해준다. 옆으로 스크롤하는 collectionLayout인 경우 cell의 column간 최소 space를 설정하게 해준다.

vertical 기준으로 minimumLineSpace는 행 간의 최소 간격, minimumInteritem의 경우 row의 cell간 최소 간격을 지정한다.


cf.

UICollectionViewDelegateFlowLayout
-> collectionView cell의 사이즈 조절

UICollectionViewDelegate
-> cell 선택 관련 메서드


cocoapods 관련

삭제 후 재설치 or 업데이트

  • pod cache clean --all && pod install --repo-update

  • pod update

  • 내가 설치한 cocoapods과정 (iterm을 로제타로 실행)

  • 코코아팟 문제 생겼을 때 삭제하는 방법 참고로 프로젝트에 연결된 Pods, .xcworkspace 등은 삭제해도 된다. 다시 깔면 됨. 중요한건 소스코드다.

마주한 에러

arch -x86_64로 m1 용으로 설치했는데 아래 에러가 계속 발생했다. 음 Target-> Build Settings ->Architectures -> Excluded Architectures 에서 arm64를 추가 해보고 Any ios simulator SDK arm64로 선언해도 여전히 해결이 안됬다.


뭔가 대단히 잘못 되어가고 있다... 원래 내 목적은 firestore에서 저장된 도큐멘트의 필드값 유저 정보를 Codable 타입으로 받아오기 위해서 ... pod FirebaseFirestoreSwift을 추가한 것 뿐인데

마에2

마에1

이 에러들이 계속 발생했다;;;

arch -x86_64로 m1 용으로 설치했는데 아래 에러가 계속 발생했다. 음 Target-> Build Settings ->Architectures -> Excluded Architectures 에서 arm64를 추가 해보고 Any ios simulator SDK arm64로 선언해도 여전히 해결이 안됬다.

(진짜 큰일났다. 2일째 개발은 물론 지금 프로젝트 내 파일까지 잘못 삭제해 버렸다;;)

cocoapods를 삭제하고 재 설치하려고 했는데

t11

이 에러가 발생했다. chmod로 user에게 권한도 줬지만 여전히 이런 에러가 발생했고 위와 같은 에러가 발생햇다.

ㄷ1

ㄷ2

(살려줘..)

지금 gem으로 bundler도 설치가안되고 cocoapods도 설치가 여전히 안되고 있다...

어찌어찌 해서 arch -x86_64 로 코코아 팟을 설치했을 땐

Ignoring ffi-1.15.4 because its extensions are not built. Try: gem pristine ffi --version 1.15.4

이 에러가 발생하면서

마에1

이 에러가 발생했는데 이 에러는 자세한 에러를 알 수 없다고 한다... 퓨ㅠㅠ 이것때매 뭐 잘못 삭제 했다가 프로젝트 안에 파일 일부를 실수로 삭제 해버린 것..

지금 가장 큰 문제는 gem을 통해 설치하려고하면 사용자 권한이 아니라 루트 권한을 요구해서 **(Gem::FilePermissionError)**가 자꾸만 발생했다.

이분의 블로그 글을 통해서 설치해도 마찬가지였는데...

rbenv 최신 버전 3.1.2인가? 그걸로 계속했는데 안됬다. 어떤 다른 분의 글에서는 3.xx버전에선 뭔가가? 설치가 안된다고해서 2.xx버전으로 재 설치했는데 다행히 Gem::FilePermissionError 가 더이상 발생되지 않았다...

그래도 여전히 Command ComplieSwift failed with a nonzero exit code가 발생했다...

결국 해결책은 찾지 못해서 앱을 다시 새로 만들었는데도 위에 에러가 계속 발생했다.

지금 그 이유를 알았다;;;; RESTful API가 아니라 파이어베이스를 사용하기 때문에 파이어베이스 시작 할 때 앱 번들 아이디를 토대로 파이어베이스 plist가 주어지고, AppDelegate에 FirebaseApp.configure()로 등록도 해줘야 하는데 이 부분을 간과했다. 그래서 파이어베이스에 등록된 앱을 삭제하고 다시 새로 만든 번들을 추가해서 다행히 에러가 해결되었다... ㅠㅅㅠ 약 2일간 고생했다..


다음엔 rvm을 써봐야겠다. 결론. 깃헙 커밋을 자주자주 하고 정말 안 될때는 새로 만들어서 소스코드 복붇하기. 파이어베이스 쓸 경우 앱 번들아이디 삭제 후 새로 등록하기