1. 첫 번째 학습 내용: 의존성 관리도구

  • iOS 환경에서 활용할 수 있는 의존성 관리도구의 종류에는 무엇무엇이 있을까?

    • 각각의 의존성 관리도구의 장단점도 알아봅시다
  • 의존성 관리도구와 Git을 함께 사용할 때 주의할 점은?

  • 활동학습 내용

    ✔️의존성 관리도구란?

    • 애플리케이션 기능을 개발하기 위해 외부 라이브러리를 사용할 때 프로젝트와 해당 라이브러리의 상관관계를 용이하게 관리해주는 도구. 명령어 한 줄 혹은 클릭 몇 번으로 프로젝트에 적절히 포팅하여 삽입해주는 역할 등을 한다. → 시간 절약, 안정성 보장

    • ex) JS - yarn, npm

    • ex) Python - pip, pyenvs

      ✔️iOS 환경에서 활용할 수 있는 의존성 관리도구의 종류 및 장단점

    • 코코아팟(Cocoapods)

      • 라이브러리가 엄청많다! (7만개 이상의 라이브러리 보유, 300만개 이상의 애플리케이션에서 활용)
      • Dynamic, Static 라이브러리를 모두 지원
      • Podfile에 사용할 라이브러리만 명시해주면 자유롭게 프로젝트에서 사용할 수 있음 → 사용 쉬움
      • 의존성을 자동관리해줌 및 관계파악 용이
      • 라이브러리 install, update하는 시간이 오래걸림
      • 프로젝트 빌드시 모든 팟 라이브러리가 함께 빌드됨 → 빌드시간 증가
      • gem을 이용해서 설치
      • 라이브러리만 추가 가능
    • 카르타고(Carthage)

      • Github Star가 코코아팟 보다 많음!
      • 바이너리 프레임워크 기반의 의존성을 구축 → XCFramework : iOS의 새로운 패키징 프레임 워크 형식.사용자에게 여러 프레임워크 변형을 배포하기 위한 Bundle Formet
        WWDC 2019 - Binary Frameworks in Swift
      • Dynamic, Static 라이브러리를 모두 지원
      • 코코아팟과 다르게 프로젝트 파일이나 빌드 설정을 자동으로 수정하지않음
      • 코코아팟과 다르게 빌드시점에 모든 라이브러리가 빌드되지 않음 → 빌드 속도 빠름. (클린 빌드 해보면 체감)
      • 의존성이 추가될 때마다 작업해줘야 해서 번거로움
      • 인기많은 라이브러리가 아니면 카르타고를 지원하지 않을 수도 있음
      • brew를 이용해서 설치
      • 프레임워크도 추가 가능
    • 스위프트 패키지 매니저(SPM: Swift Package Manager)
      - 애플의 의존성 관리 도구 → Xcode에서 스위프트 패키지 매니저를 공식적으로 지원(Xcode 11부터)
      - Dynamic, Static 라이브러리를 모두 지원
      - 동적 라이브러리 : 완성된 프로그램을 실행할 때 포함시키는 동적 라이브러리
      - 정적 라이브러리 : 프로그램을 컴파일하는 과정에서 포함시키는 오브젝트 파일들의 모임
      - http://blog.xoul.kr/2015/06/14/cocoaseeds.html
      - 의존성을 자동관리해줌 및 관계파악 용이
      - 스위프트 언어에 built-in → 별다른 설치가 필요없음, Xcode Project 파일이 꼭 필요한 것이 아니므로 리눅스에서도 사용할 수 있음
      - Package.swift 파일 이외에 수행할 설정이 없음
      - Xcode의 GUI 환경에서 관리가 가능
      - 아직은 지원하지 않는 라이브러리가 많음
      - 해결되지 않은 이슈가 매우 많음

      ✔️의존성 관리도구와 Git을 함께 사용할 때 주의할 점

    • 코드가 무거워지고, 복잡해지는 경우 → git ignore에 추가 → pull할 때 install (ex $ pod install)

    • 협업시 도구의 종류와 버전을 명시해야 함

    • https://willowtreeapps.com/ideas/how-to-fix-unexpected-podfile-lock-diffs-after-pod-install

      Reference

      https://yagom.net/courses/open-source-library/

      https://green1229.tistory.com/61

      http://minsone.github.io/ios/mac/ios-wwdc-2019-binary-frameworks-in-swift-little-summary-and-translate

      https://zeddios.tistory.com/654

      2. 두 번째 학습 내용: Instance Method - enumerated(), max(), sorted()

Instance Method

enumerated()

Returns a sequence of pairs (n, x), where n represents a consecutive integer starting at zero and x represents an element of the sequence.

for (n, c) in "Swift".enumerated() {
    print("\(n): '\(c)'")
}
// Prints "0: 'S'"
// Prints "1: 'w'"
// Prints "2: 'i'"
// Prints "3: 'f'"
// Prints "4: 't'"

Instance Method

max()

Returns the maximum element in the sequence.

let heights = [67.5, 65.7, 64.3, 61.1, 58.5, 60.3, 64.9]
let greatestHeight = heights.max()
print(greatestHeight)
// Prints "Optional(67.5)"

Instance Method

sorted()

Returns the elements of the sequence, sorted.

let numbers = [5, 3, 2, 4, 1]
let sortedNumbers = numbers.sorted()
print(sortedNumbers)
// Prints [1, 2, 3, 4, 5]

문제점/고민한점 → 해결방안

  • 지난번 올라프 조언

    컨테이너 뷰컨에서 네트워크 요청할 것

    테이블뷰, 컬렉션뷰는 이벤트를 전달해주는 역할만 하기

    네트워크는 최대한 적게 요청하는게 좋음!
    셀에서 바로 데이타 불러오는건 안 좋음

    매번 셀 만들때마다 불러오니까.

    일단은 하나의 뷰컨에

    두개의 테이블뷰 컬렉션뷰 놔도 되고

    세그먼트에 따라 보여주고 말고를 결정해주면 됨

    컨테이너뷰 컨트롤러도 어려운 개념임 ^.ㅠ

    컨테이너뷰 컨트롤러의 좋은 점

    로직을 분리할 수 있음

    e.g. 테이블뷰 컨트롤러는 테이블뷰만 가지고 있음

    로직을 짤줄 알아야지

    나누는건 그 다음 일임

    뷰컨 하나에다 다 때려박아도 되니까

    네트워크 흐름을 이해해보고

    중복되는 부분이 어딘지 확인해보고

    베스트는

    컬렉션뷰 하나를 쓰고

    셀을 바꾸든가

    레이아웃을 바꾸든가 하는 방법

    올라프 질문

    Q. 저 데이터가 제대로 들어갔다 그 시점을 childviewcontroller는 어떻게 알지?

    downloadToGetData

    시점이 잘 맞으면 데이타가 전달이 되겠지만

    안 맞으면 데이타가 전달이 안됨

    —> 하나의 뷰컨에 때려박기 !!!

컨테이너뷰 컨트롤러를 안쓰면

그럼 리스트 화면이랑 그리드 화면이랑 어떻게 나눠주지...? 흠 🤔

  • 베스트는 컬렉션뷰 하나를 쓰고 셀을 바꾸든가 레이아웃을 바꾸든가 하는 방법

How ???

  • 일단은 하나의 뷰컨에

두개의 테이블뷰 컬렉션뷰 놔도 되고

세그먼트에 따라 보여주고 말고를 결정해주면 됨

하나의 뷰컨에 두개의 뷰를 놔둔다는 개념이 아직 와닿지가 않음...

흠...

일단 만들어놓고 보면 되나 ...?

profile
iOS Developer

0개의 댓글