OpenSource


카카오톡, 인스타그램 같은 우리가 자주 사용하는 앱의 설정에 들어가면, 오픈소스 라이선스라는 항목을 볼 수 있는데요, 앱을 개발하면서 사용한 외부라이브러리를 볼 수 있습니다. 개발에서 공유문화로 소스코드를 많이 공유하지만, 저작권에 유의하며 사용합시다~

Dependency Manager


외부라이브러리를 프로젝트에서 사용하기 위해서 dependency manager를 사용합니다. 종류와 특징을 알아볼게요

CocoaPods

  • SPM이 나오기 전부터, 가장 많이 사용해서 거의 100% 지원합니다
  • 터미널을 활용해서 podfile을 생성하고 적용시키는 과정이 ![]
    필요해요
  • 빌드 속도는 떨어지는 편입니다

Carthage

  • 코코아팟보다 빌드속도가 빠른편이예요
  • 하지만 지원하는 오픈소스가 적습니다

Swift Package Manager

  • 써드파티가 아닌 xcode 자체에 내장된 기능입니다
  • 사용법이 가장 간편합니다

Manually

  • 코드파일을 수동으로 추가하는 방법이라 dependency manager는 아니지만 이런 방법도 존재합니다.

깃허브에서 특정라이브러리를 만든 개발자가 지원하는 방식으로만 설치할 수 있어요. 깃허브 리드미의 intallation 부분을 확인해봅시다!

version


  • spm에서 패키지를 추가하면, 다음과 같이 dependency rule을 설정하는데요, version에 대해 알아봅시다.

3.1.2라는 버전이 있을 때

  • 각 자리는 major.minor.patch를 의미해요

major

  • 대형 기능의 업데이트
    minor
  • 소소한 기능의 업데이트
    patch
  • 버그 수정

알아두면 커뮤니케이션 할 때 유용해요!

Kingfisher


이미지 라이브러리로 많이 사용하는 kingfisher의 특징에 대해 알아봅시다.

  • asset에 저장된 이미지, 시스템 이미지 뿐만 아니라 웹상의 url 주소로도 이미지를 가져올 수 있게 해줍니다
  • 이미지가 뜨기 전에 나타나는 placeholder image를 설정할 수 있어요
  • 캐싱 기능을 제공해서, 한번 로딩된 이미지의 로딩속도가 빠릅니다
  • 사용법은 cheat sheet를 보면서 학습해보아요~

https VS http


친구와 협업할 때 배포한 서버가 http라 애플과 연동이 안되서 힘들었던 적이 있는데요, 이유가 무엇인지 알아봅시다!
https는 http에 보안기술이 적용되었다는 차이가 있어요. 그래서 애플에서는 http로 통신을 할 경우 무조건 block을 합니다.

그럼에도 안전하고 생각한 http와 통신을 하려면 어떻게 할까요?

ATS(App Transport Security Setting)을 설정해줍니다.
다음과 같이 plist에 추가해주고 Allow Arbitary Loads 속성을 YES로 설정해줍니다.

Xcode 프로젝트 파일이동


드래그앤드롭방식으로 임의로 다른 프로젝트에서 파일을 가져오거나, 파일을 제대로 삭제하지 않고 git을 사용했을 때 파일이 빨갛게 뜨고 에러가 나는 경우가 있는데요 파일을 안전하게 가지고 오는 법을 알아봅시다.


파일을 드래그앤 드롭하면 다음과 같은 팝업이 나타나는데요, 여기서 설정은 파일을 참조해서 가지고 올래? 복사해서 가지고 올래?의 차이로 이해하시면 됩니다.

Copy items if needed를 체크하지 않으면 참조해서 가져오기 때문에, 파일 정보를 보면 원본의 경로가 저장된 것을 알 수 있고, 원본 파일이 삭제되거나 remote로 저장을 할 때 문제가 발생합니다.
따라서
1. copy items if needed체크
2. create groups
3. add to target을
체크해서 안전하게 파일을 가져옵시다!

저장된 파일은 target의 build phases에서 확인할 수 있는데요

기계어로 번역이 필요한 파일과 asset파일들이 별도로 관리되고 있는것을 확인할 수 있습니다ㅏ

개발자들이 프로젝트 폴더링을 할때 소스코드관련 파일은 Sources폴더에, Asset같은 파일들은 Resources폴더에 저장했었는데 저런 이유가 있었네요!

<Todo:>

Enum


rawValue
**CaseIterable

Transition


View LifeCycle


viewDidLoad()
viewWillAppear()
viewDidAppear()
viewWillDisappear()
viewDidDisappear()

viewIsAppearing()

profile
Divide and Conquer

0개의 댓글