Getting Started

수킴·2021년 6월 21일
0

TakeHomeProject

목록 보기
1/1
post-thumbnail

프로젝트 준비단계

1. 기능요구서

  • 프로젝트를 시작하는 경우 기능요구서를 작성하거나 주어진다면 읽고 무슨 기술을 사용할지 간략하게 생각해봅니다.

  • 기능요구는 목적이 변경되면 수정 될 수도 있습니다. (작은 단위 → 큰 단위)

  • 기능요구서에 의문이 가는 부분은 질문을 하는 것이 좋습니다.

  • API를 사용하는 경우 어떻게 사용할 지에 대해서 자세히 알아봅니다

    → 통신을 확인하기 위해서 postman 앱을 사용하거나,

    터미널 curl명령어를 통해 확인해봅니다.

    깃허브 RestAPI - User

    # "url": "https://api.github.com/users/octocat"  확인 한 후
    $ curl https://api.github.com/users/sookim-1
    
    {
      "login": "sookim-1",
      "id": 55218398,
      "node_id": "MDQ6VXNlcjU1MjE4Mzk4",
      "avatar_url": "https://avatars.githubusercontent.com/u/55218398?v=4",
      "gravatar_id": "",
      "url": "https://api.github.com/users/sookim-1",
      "html_url": "https://github.com/sookim-1",
      "followers_url": "https://api.github.com/users/sookim-1/followers",
      "following_url": "https://api.github.com/users/sookim-1/following{/other_user}",
      "gists_url": "https://api.github.com/users/sookim-1/gists{/gist_id}",
      "starred_url": "https://api.github.com/users/sookim-1/starred{/owner}{/repo}",
      "subscriptions_url": "https://api.github.com/users/sookim-1/subscriptions",
      "organizations_url": "https://api.github.com/users/sookim-1/orgs",
      "repos_url": "https://api.github.com/users/sookim-1/repos",
      "events_url": "https://api.github.com/users/sookim-1/events{/privacy}",
      "received_events_url": "https://api.github.com/users/sookim-1/received_events",
      "type": "User",
      "site_admin": false,
      "name": "sookim",
      "company": null,
      "blog": "",
      "location": null,
      "email": null,
      "hireable": null,
      "bio": null,
      "twitter_username": null,
      "public_repos": 34,
      "public_gists": 0,
      "followers": 8,
      "following": 13,
      "created_at": "2019-09-12T01:00:30Z",
      "updated_at": "2021-06-20T16:25:27Z"
    }
    
    # 없는 아이디 유저를 입력한 경우 
    $ curl https://api.github.com/users/vdsjvnjsnvjkneksnv
    {
      "message": "Not Found",
      "documentation_url": "https://docs.github.com/rest/reference/users#get-a-user"
    }

2. UI 스케치

  • UI적으로 어떻게 화면에 보여야 좋을지에 대해서도 생각합니다. (사용자의 편리성, 이해가 유용할 지?)

  • 직접 스케치 해서 화면간의 관계를 생각해봅니다.

    예시

    • 테이블 뷰에서 셀들을 사이즈가 큰 형식으로 팔로워들을 나타내면 팔로워수가 많아질 때 알아보기 힘들기 때문에 적당한 크기로 만들어야합니다.
    • 화면들간의 문맥이 연결되어 있는 부분과 연결되어 있지 않는 부분들을 어떻게 분리할지에 대해서 생각해야합니다. (네비게이션 컨트롤러)
  • API 응답으로 받은 정보를 바탕으로 화면을 작성합니다.

3. 스토리보드를 사용하지 않고 코드로 UI작성할 때, 설정

Device Orientation : 기기의 방향 설정

  1. Main.storyboard 파일 삭제

  2. Deployment info → Main Interface탭에서 Main 삭제하고 공백으로 지정

    • 연결을 해제하는 단계
  3. info.plist → Application Scene Manifest → Scene Configuration → Application Session Role → Item 0 → Storyboard Name 탭을 삭제

  4. SceneDelegate.swift에서 window 및 rootViewController 설정

    • 배경색이 지정되어있지 않아서 안보이는 경우가 있습니다. 이런경우 배경색을 systemColor를 사용하면 라이트모드/다크모드에 유동적으로 지정됩니다.
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
            guard let windowScene = (scene as? UIWindowScene) else { return }
            
            window = UIWindow(frame: windowScene.coordinateSpace.bounds)
            window?.windowScene = windowScene
            window?.rootViewController = UIViewController()
    				window?.backgroundColor = .systemBackground
            window?.makeKeyAndVisible()
        }

iOS 13기준으로 AppDelegate의 UILifeCycle → SceneDelegate로 위임

간단한 이유는 멀티윈도우 기능이 생기면서 화면 한개에서 두가지 다른 동작을 동시에 해야하기 때문에 scene이라는 개념이 탄생했습니다.

iOS13이후 UILifeCycle부분은 SceneDelegate로 옮겨졌습니다.

Architecting Your App for Multiple Windows

4. Asset 파일 추가 (앱 아이콘 및 사용할 이미지 지정)

  • 아이콘 크기에 따라 1x, 2x, 3x로 나뉘어집니다.
    • 1x는 현재 21년 기준으로 레티나 디스플레이를 사용하지 않는 디바이스는 현저히 적기 때문에 크게 고려하지 않아도 될 것 같습니다.
  • 이미지 이름 표기방식 ex) icon_20pt@2x.png
  • 라이트모드 / 다크모드 구분해서 사용하는 경우
    • 인스펙터탭에서 Appearances 옵션에서 Any, Dark값을 선택하면 다크모드 이미지를 추가할 수 있습니다.

5. UITabBarController 내부의 UINavigationController들 설정

  • TabBar는 화면 밑부분에 표시되고 문맥이 연결되어있지 않는 섹션을 빠르게 이동할 수 있습니다.
  • Navgaion을 사용하면 계층적인 정보를 확인하기(화면전환) 유용합니다. (stack방식으로 관리)

UITabBarController - 개발자 공식문서

UINavigationController - 개발자 공식문서

  • .appearance () 변형은 모든 UITabBar에 영향을 미친다는 것
  • tag로 tabbarItem객체를 식별할 수 있습니다. (태그가 tabbarItem의 순서를 지정하는 것이아니고 TabbarController.viewControllers의 배열 순서에 따라 결정합니다.)

앱을 실행하는 동안 뷰의 계층구조를 확인하고 싶은 경우

profile
iOS 공부 중 🧑🏻‍💻

0개의 댓글