[iOS] Making a StoreApp

- 13 mins

Jack’s CardGameApp

  1. https://github.com/somedd/swift-storeapp/tree/somedd

  2. Contents To Learn

- 패키지 관리
- 네트워크 프로그래밍 담당 모델 만들기
- 병렬처리를 위한 개념과 이해
- 연결성 확인을 위한 방법
- GCD 다양한 큐에 대한 활용
  1. 개발 경험 (AutoLayout)
- 수퍼뷰를 기준으로 좌우상하 제약 조건
- 자기를 기준으로 높이와 폭
- 상하좌우 다른 뷰를 기준으로 상대적인 위치
- 다른 뷰를 기준으로 비율 유지
- 인터페이스 빌더에서 frame과 제약 사항 관계
- 다양한 화면 대응 경험

- Step1 (상품 목록)

요구사항

실행화면

screemsh_step1

- Step2 ( AutoLayout 적용 )

요구사항

실행화면

screemsh_step2

AutoLayout

Priority & isActive

- Step3 ( Custom Section 헤더 적용 )

요구사항

실행화면

screemsh_step3

- Step4 ( Cocoapods )

요구사항

실행화면

screemsh_step4-1 screemsh_step4-2

학습꺼리

- Step5 ( Network 프로그래밍 )

요구사항

학습꺼리

1. 네트워크의 역사

- 네트워크란? 정보를 옮기는 것.
- 예전에는 전화국이 있었음. (Telephone excahange -> Bule-box 등등)
- IETF라는 기관이 생김. 네트워크 관련 약자들을 다 표준화 시킴.

2. iOS Networking

- Application 하위로 3개의 API를 사용할 수 있음.
  - Foundation,  CFNetwork, Core OS(Darwin)

  - 고려해야될 사항
    - Packet Problems : 기존 유선의 네트워킹에선 Circuit(하나의 회로)단위였다면, 무선 통신은 Packet단위로 통신되기에 발생되는 문제들.
    - latenct : 응답을 요청하면, 받는데까지 걸린 시간
    - security
    - Service Discovery : 서비스랑 어드레스랑 매칭하는 것들. Ex) DNS - nslookup 주소

  - Core OS(Darwin)
    - Run loop integration : OS에 요청했던 데이터를 주기적으로 계속 물어봐야 된다.

3. APIs for HTTP / HTTPs

  - NSURLConnection(iOS 10부터 없어짐) -> NSURLSession
    - Wait for response에 보통 데이터의 길이를 넘겨준다.
  - NSNetService
  - NSURLStream

4. NSURLSession

- 4가지 종류가 있음.
  1. Singleton shared Session : 요청이 끝났을 때, 어떻게 할 건지 클로져로 쓸 수 있게만 하는 것.
  2. Default Session : 설정을 줄 수 있는 세션, 보통 이 세션을 가장 많이 쓴다.
  3. Ephemeral Session : 사파리나 크롬에서 개인정보보호 모드를 사용할 때, 사용.
  4. Background Session : App이 Background를 들어가도 사용할 수 있는 Session (주로 파일 업로드 or 다운로드)

- Session의 Task들 (주로 dataTask를 가장 많이 쓴다.)
  - completionHandler안에서 response가 없으면 error가 있고, error가 없으면, response가 있다.

ALAMOFIRE

-  Chainable Request / Response Methods
- URL / JSON / plist Parameter Encoding
- Upload File / Data / Stream / MultipartFormData
- Download File using Request or Resume Data
- Authentication with URLCredential
- HTTP Response Validation
- Upload and Download Progress Closures with Progress
- cURL Command Output
- Dynamically Adapt and Retry Requests
- TLS Certificate and Public Key Pinning
- Network Reachability
- Comprehensive Unit and Integration Test Coverage

- Step6 ( 병렬처리 )

요구사항

실행화면

screemsh_step6

- Step7 ( 상품 상세화면 전환 )

요구사항

  1. 상품 상세 화면(View) 구현
    • ViewController 를 Navigation Controller로 embed
    • cell을 선택하면 상품 상세 화면을 보이도록 새로운 뷰 컨트롤러를 구현
    • 상세 화면 디자인은 NextStep 참고
  2. 상세화면 VC - View 연결 및
    • 상세 화면(DetailViewController)으로 선택한 cell의 detail_hash 값을 전달하세요.
    • http://crong.codesquad.kr:8080/woowa/detail/{detail_hash} URL 형식으로 요청하고 받은 JSON 데이터를 Decode 하는 네트워크 담당 모델 객체를 만드세요.
      • URL 예시 http://crong.codesquad.kr:8080/woowa/detail/H9881 또는 http://crong.codesquad.kr:8080/woowa/detail/HDF4C
    • 상세 화면을 표시하기 전에 네트워크 담당 모델 객체에서 데이터를 받아서 화면 정보를 채워서 표시하세요.
      • self.view 커스텀 클래스를 UIScrollView로 지정하고 하위 뷰들은 self.view.contentView 에 추가하세요.
      • ScrollView ContentSize에 대해 찾아보고, 전체 콘텐츠 높이를 계산해서 스크롤되도록 값을 지정하세요.
      • 상단 ScrollView 에 thumb_images 항목의 이미지들을 Page 형태로 추가하세요. 좌우로 페이지 넘기듯이 넘어가도록 만드세요.
      • 설명 아래부분에는 제품 상세 설명을 위해서 detail_section 항목의 이미지들을 코드로 이어서 붙이세요.
  3. 주문 동작 구현(Network)
    • 상세 화면에 대한 Delegate 프로토콜과 프로토콜을 채택하는 속성을 추가하세요.
      • 상세 화면에서 결과를 전달하기 위한 Delegate 프로토콜을 선언하세요.
      • 프로토콜에는 주문을 완료했을 때 호출할 메소드를 선언하세요.
      • ViewController에는 프로토콜을 채택하고 위의 메소드를 구현하세요.
    • [주문하기] 버튼을 누르면 델리게이트 객체에 주문 완료 메소드를 호출합니다.
      • 프로토콜 채택한 객체는 슬랙으로 “누가-얼마짜리-메뉴” 주문을 POST 요청으로 보내는 기능을 네트워크 모델에 추가하세요.
      • 주문을 완료하고 나면 창을 닫고 이전 화면으로 돌아가도록 작성하세요.
      • 슬랙 incoming hook URL https://hooks.slack.com/services/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

학습꺼리

HTTP

UIScrollView 관련 헤맸던 부분

실행화면

screemsh_step7_4 screemsh_step7_5

- Step8 ( 연결성 확인 Reachability )

요구사항

학습꺼리

Reachability

실행화면

screemsh_step8_1 screemsh_step8_2

참고

rss facebook twitter github youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora