Successfully reported this slideshow.
Your SlideShare is downloading. ×

LetsSwift(강민규스피커,안정민서포터).pptx

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 69 Ad
Advertisement

More Related Content

Recently uploaded (20)

Advertisement

LetsSwift(강민규스피커,안정민서포터).pptx

  1. 1. 안정민 Supporter iOS 개발에서 알아두면 좋은것들 강민규 Speaker
  2. 2. • IPA 분석과 다른 앱의 IPA 분석 • 개발 환경의 최적화 발표를 통해 기대하는 것
  3. 3. • iOS 개발 전체 과정 • 아카이브 • IPA 설명 및 타 IPA 분석 • 타겟을 줄이는 방법 • 환경 변수로 프로젝트 관리 목차
  4. 4. 안정민 (minsone) 카카오뱅크 iOS 애플리케이션 개 발자
  5. 5. iOS 개발 전체 과정
  6. 6. iOS 개발 전체 과정 - 신규 서비스, 상품 개발 요청 프로젝트 생성
  7. 7. iOS 개발 전체 과정 - 화면 작성 - 아키텍처 설계 - 네트워크 연동 - 라이브러리 추가 - 환경 설정 … 코드 작성
  8. 8. iOS 개발 전체 과정 - 작성한 코드 검증 - 로직 확인 빌드 & 실행
  9. 9. iOS 개발 전체 과정 - 아카이브로 애플리케이션 결과물 생성 - 앱스토어, 사내 등에 배포할 수 있는 결과물 아카이브
  10. 10. iOS 개발 전체 과정 - 아카이브로 애플리케이션 결과물 생성 - 앱스토어, 사내 등에 배포할 수 있는 결과물 아카이브
  11. 11. iOS 개발 전체 과정 - 아카이브로 애플리케이션 결과물 생성 - 앱스토어, 사내 등에 배포할 수 있는 결과물 - xcarchive 패키지 - BCSymbolMaps - dSYMs - IPA - Info.plist … 아카이브
  12. 12. iOS 개발 전체 과정 - ITunesConnect 제출 - 앱 심사 - 앱스토어 노출 - 유저의 앱 설치 - 이슈 트래킹 배포
  13. 13. iOS 개발 전체 과정 프로젝 트 생성, 설 정 코드 작 성 빌드 실행 아카이 브 앱 제출 심사 앱스토 어 배포 앱 설치 실행 이슈 트래킹
  14. 14. iOS 개발 전체 과정 프로젝 트 생성, 설 정 코드 작 성 빌드 실행 아카이 브 앱 제출 심사 앱스토 어 배포 앱 설치 실행 이슈 트래킹
  15. 15. 아카이브
  16. 16. 아카이브 xcarchive - Xcode Archive - 앱스토어에 제출하기 위해 서명된 빌드 결과물
  17. 17. 아카이브 xcarchive - IPA - execute binary - IDA, machoViewer 등으로 분석 가능 - Framework - 라이브러리 종류, 사용방법 확인 가능 - CocoaPods 사용 여부 - Dynamic, Static Library 등 - 리소스 - storyboardc, nib, car, webp, lottie, js, html, mom 등 - Bundle
  18. 18. 아카이브 xcarchive - execute binary - Framework
  19. 19. 아카이브 xcarchive - execute binary - Framework
  20. 20. 아카이브 xcarchive - execute binary - Framework
  21. 21. 아카이브 xcarchive - storyboardc - nib
  22. 22. 아카이브 xcarchive - storyboardc - nib
  23. 23. 아카이브 xcarchive - storyboardc - nib
  24. 24. 아카이브 xcarchive - webp - lottie
  25. 25. 아카이브 xcarchive - webp - lottie
  26. 26. 아카이브 xcarchive - webp - lottie
  27. 27. AppStore에 있는 App 내려받기
  28. 28. AppStore에 있는 App 내려받기 - iMazing
  29. 29. AppStore에 있는 App 내려받기 - Github - majd/ipatool
  30. 30. IPA 살펴보기
  31. 31. 강민규 (KoreaMango) iOS 시작한지 1년이 되어가는 👶 iOS 개발자입니다.
  32. 32. iOS 개발 전체 과정 프로젝 트 생성, 설 정 코드 작 성 빌드 실행 아카이 브 앱 제출 심사 앱스토 어 배포 앱 설치 실행 이슈 트래킹
  33. 33. 타겟을 줄이는 방법
  34. 34. 타겟이 늘어나는 이유
  35. 35. 타겟이 늘어나는 이유 다양한 개발 환경 - 구분하지 않는다면? App - 환경이 바뀔 때 마다 개발자가 직접 서버 URL을 수정해줘야 한다. - Dev인지 Prod인지 헷갈리고 실수를 할 수 있다.
  36. 36. 타겟이 늘어나는 이유 다양한 개발 환경 - 구분한다면? Dev QA PRO D - 개발 환경에 맞게 타겟을 선택만 해주면 서버 URL을 분기처리 해줄 수 있다. - 휴면 에러를 줄여준다.
  37. 37. 타겟이 늘어나는 이유 발생하는 문제점 - 동일한 코드가 프로젝트 파일에 중복되어 저장 - 프로젝트 인덱싱 속도 저하 - 새로운 파일을 추가할 때 타겟을 수동으로 체크하다 보니 실수할 여지가 생긴다 <중복되어 저장되는 xcodeproj 파일 내부>
  38. 38. 타겟을 줄여보자!
  39. 39. 타겟을 줄이는 방법 기존의 개발 환경 방식 - 타겟에 Dev, QA, PROD로 분리되어 있음
  40. 40. 타겟을 줄이는 방법 기존의 개발 환경 방식 - 타겟에 Dev, QA, PROD로 분리되어 있음
  41. 41. 타겟을 줄이는 방법 Configuration 추가하기 - 프로젝트 Info의 Configuration - 원하는 환경을 추가
  42. 42. 타겟을 줄이는 방법 Configuration 추가하기 - 프로젝트 Info의 Configuration - 원하는 환경을 추가
  43. 43. 타겟을 줄이는 방법 Schemes 추가하기 - 상단 Schemes 클릭 - Manage Schemes
  44. 44. 타겟을 줄이는 방법 Schemes 추가하기 - 상단 Schemes 클릭 - Manage Schemes - Dev, QA, PROD Scheme 추가
  45. 45. 타겟을 줄이는 방법 Schemes과 Configuration 연결 - 원하는 스킴을 체크한 다음 - Edit Schemes 클릭
  46. 46. 타겟을 줄이는 방법 Schemes과 Configuration 연결 - 각각의 개발환경에서 Run, Test, Profile, Analyze, Archive 설정 - 알맞은 Configuration이랑 연결
  47. 47. 타겟을 줄이는 방법 XCConfig란? XCConfig Build Setting Text 파일 =
  48. 48. 타겟을 줄이는 방법 XCConfig 생성 50
  49. 49. 타겟을 줄이는 방법 XCConfig 생성 - 우측 상단에 “Configuration” 검색 - Other에 Configuration Settings File 추가
  50. 50. 타겟을 줄이는 방법 XCConfig 생성 - shared.xcconfig에는 config에 맞는 플래그를 추가
  51. 51. 타겟을 줄이는 방법 XCConfig 생성 - 각각의 xcconfig 파일은 shared의 설정을 포함한다.
  52. 52. 타겟을 줄이는 방법 Configuration 과 XCConfig 연결 - Project 파일의 Info에서 - Configuration에 이름에 맞는 XCConfig 연결
  53. 53. 타겟을 줄이는 방법 Configuration 과 XCConfig 연결 - XCConfig가 적용된 모습
  54. 54. 타겟을 줄이는 방법 Configuration 과 XCConfig 연결 - XCConfig에서 작성한 플래그가 Build Setting에 연결된 것을 확인할 수 있음
  55. 55. 타겟을 줄이는 방법 Configuration 과 XCConfig 연결 - XCConfig에서 작성한 플래그가 Build Setting에 연결된 것을 확인할 수 있음
  56. 56. 타겟을 줄이는 방법 DEV - DEV Scheme 에서 실행 - 전처리문으로 분기 처리한 코드
  57. 57. 타겟을 줄이는 방법 QA - QA Scheme 에서 실행 - 전처리문으로 분기 처리한 코드
  58. 58. 타겟을 줄이는 방법 PROD - PROD Scheme 에서 실행 - 전처리문으로 분기 처리한 코드
  59. 59. 환경 변수로 프로젝트 관리 With Tuist
  60. 60. 환경 변수로 프로젝트 관리 Dev 타겟에만 필요한 프레임워크 - App Target은 개발용 프레임워크인 FLEX 제거 - Dev Target은 개발용 프레임워크인 FLEX 포함
  61. 61. 환경 변수로 프로젝트 관리 필요한 타겟만 프로젝트에! - 개발할 때에는 Dev App 타겟만 있으면 됨 - 배포 할때는 App 타겟만 있으면 됨 - 한 프로젝트에 두 개의 타겟이 있을 필요가 없음! Dev App App
  62. 62. 환경 변수로 프로젝트 관리 필요한 타겟만 프로젝트에! Dev App App 제어! - 개발할 때에는 Dev App 타겟만 있으면 됨 - 배포 할때는 App 타겟만 있으면 됨 - 한 프로젝트에 두 개의 타겟이 있을 필요가 없음!
  63. 63. 1 프로젝트 관리 툴 XcodeGen Tuist
  64. 64. 1 프로젝트 관리 툴 XcodeGen Tuist
  65. 65. 환경 변수로 프로젝트 관리 with ProcessInfo Environment - Project.swift에 Key값을 가진 환경 변수 생성 - 환경 변수의 Value가 “App”인지 확인하는 Bool 타입 변수 생성
  66. 66. 환경 변수로 프로젝트 관리 with ProcessInfo Environment - Project를 생성할 때 삼항 연산자로 Target 배열에 들어가는 값을 제어한다. - App일 때는 DevSource, FLEX 제거 - DevApp일 때는 DevSource, FLEX 포함
  67. 67. 환경 변수로 프로젝트 관리 with ProcessInfo Environment
  68. 68. 환경 변수로 프로젝트 관리 with ProcessInfo Environment
  69. 69. 정리 - XCConfig와 Configuration으로 개발 환경을 만들어 타겟을 줄인 다. - Tuist로 환경 변수를 사용해 모듈, 타겟을 제어할 수 있다.

Editor's Notes

  • 안녕하세요 /
    iOS 개발한지 1년이 되어가는 iOS 개발자 강 민규 입니다. /
    정민님의 발표를 이어서 진행해보도록 하겠습니다 /
  • 안녕하세요 /
    iOS 개발한지 1년이 되어가는 iOS 개발자 강 민규 입니다. /
    정민님의 발표를 이어서 진행해보도록 하겠습니다 /
  • 제가 발표할 내용은 / 타겟을 줄이는 방법 /
  • 타겟을 줄이는 방법을 알기전 / 우선 / 타겟이 늘어나는 이유가 무엇이 있을까 /
  • 타겟이 늘어나는 이유를 알아보니/
    다양한 개발 환경을 구분하기 위해서였다./

    개발 환경을 구분하지 않는다면 어떻게 될까요 /
    환경이 바뀔 때마다 매번 서버 URL을 바꿔줘야 한다.
    현재 환경이 Dev인지 Prod인지 헷갈리고 실수를 할 수 있음 /
  • 따라서 타겟을 추가해 개발 환경을 구축하면 /

    개발 환경에 맞게 URL을 분기처리할 수 있고 /

    실수를 줄여준다.
  • 타겟이 늘어나서 발생하는 문제는 무엇일까요 /
    / 대부분의 개발 환경은 동일한 코드를 가짐 /
    동일한 코드가 프로젝트 파일에 중복되어 작성 /
    / 프로젝트 파일도 커지게 된다. / 만개면 어떢함? / 따라서 인덱싱 속도가 느려지게 된다. / 새로운 파일을 추가할 때 타겟을 수동으로 체크하다 보니 실수할 여지가 생긴다 /
    따라서 타겟을 줄여야 최적화된 프로젝트 환경을 만들 수 있다.
  • 그럼 이제 타겟을 줄여서 개발 환경을 분리해봅시다.
  • 기존에는 이렇게 개발 환경이 이렇게 타겟으로 분리되어있다./
    이걸 이제 줄여보도록 합시다.
  • 기존에는 이렇게 개발 환경이 이렇게 타겟으로 분리되어있다./
    이걸 이제 줄여보도록 합시다.
  • 타겟을 줄이기 위해 Configuration을 사용해보겠습니다. /
    Project 파일의 Info에 들어가서 Configuration 영역/
    Dev, QA, Prod, Configuration 추가
  • 타겟을 줄이기 위해 Configuration을 사용해보겠습니다. /
    Project 파일의 Info에 들어가서 Configuration 영역/
    Dev, QA, Prod, Configuration 추가
  • Configuration과 연결해줄 Scheme을 추가해줄것입니다. /
    상단에 Scheme을 클릭하고 / Manage Schemes에 들어갑니다. /
  • Configuration에 맞는 이름으로 아래 하단의 버튼을 통해서 스킴을 추가한다.
  • 스킴을 생성했으니 이제 Configuration과 연결해줘야겠죠?/
    이번에는 Edit Schemes를 통해서 Scheme과 Configuration을 연결해줍니다. /
    Edit Schemes을 누르면 /
  • 이런 창이 뜹니다. /
    여기 Run, Test, Profile, Analyze, Archive 에서 configuration과 연결해주면 됩니다. / 그리고 다른 QA, Prod 스킴도 똑같이 해줍니다.
  • 다음으로 / 환경에 맞는 빌드 세팅을 하기 위해 XCConfig를 사용할 것이다./
    XCConfig 는 타겟 또는 프로젝트에 대한 Build Setting을 작성하는 text 파일이다./
  • 프로젝트에 Build Setting Text 파일인 XCConfig 를 넣을 Config 디렉토리를 만들어주고요/
    파일을 추가을 해서 오른쪽과 같이 각 개발환경에 대한 Build Setting 파일을 만들어 주겠습니다. /
    그리고 공통으로 사용될 빌드 세팅은 shared에 넣기 위해 shared 파일도 만들어주겠습니다.
  • 파일 추가를 누르면 우측 상단에 Configuration을 검색을 하면 됩니다.
    그리고 여기 Other에 Configuration 을 클릭해 추가해줍니다.
  • shared 파일에 공통된 빌드세팅으로
    / 각 환경에 맞게 OTHER_SWIFT_FLAGS 값을 추가하여 분기할 수 있도록 한다.
  • 각 환경의 xcconfig에는 다음과 같이 작성을 합니다./
    include를 통해서 shared xcconfig 파일의 설정을 포함한다.
  • Project 세팅에 들어가서 Configurations에 Xcconfig 파일을 연결해준다.
  • 다음으로 Project 파일을 클릭해 Configurations에 Xcconfig 파일을 연결해줍니다.
  • Xcconfig 파일에서 설정해둔 정보가 Build Setting에 들어간 것을 확인할 수 있다. /
  • Xcconfig 파일에서 설정해둔 정보가 Build Setting에 들어간 것을 확인할 수 있다. /
    이제 전처리문을 사용할 수 있게 되었다.
  • Dev 스킴에서 실행하면 전처리문 DEV Configuration 에 해당하는 코드가 실행된다.
  • QA 스킴에서 실행하면 전처리문 QA에 해당하는 코드가 실행된다.
  • PROD 스킴에서 실행하면 전처리문 PROD에 해당하는 코드가 실행된다./
    서버 URL 같이 개발 환경에 따라 달라지는 코드를 전처리문을 통해서 분기처리를 할 수 있습니다./따라서 개발 환경을 타겟으로 만들지 않아도 configuration 충분히 해결할 수 있게되어 / 결국은 타겟을 줄일 수 있게 되었고 프로젝트 환경을 최적화 시킬 수 있게 됩니다.
  • 개발을 하다보면 특정 환경에서만 필요한 프레임워크가 있다. /flex 는 개발용 프레임워크/ dev 환경에서만 사용되어야 함 / 그런데 프레임 워크를 어떻게 분기처리하냐?/ 빌드 세팅만 제어할 수 있는 XCConfig로는 이것을 제어할 수 없다. /
    / 따라서 개발용 타겟과 배포용 타겟을 분리해서 관리를 해야한다./
    이렇게 되면 타겟이 늘어나게 되니 문제의 상황으로 돌아가게 되는 것이다. /



  • 그러면 타겟을 어떻게 다시 줄이는 방법을 알아보자. /개발할 때에는 Dev App 타겟만 있으면 됨
    / 배포 할때는 App 타겟만 있으면 됨 / 사실상 /
    개발을 할 때는 배포용 타겟이 있을 필요가 없다. / 그래서 사용할 때는 상황에 맞는 하나의 타겟만 프로젝트에 넣으면 된다. / 그러면 두개의 타겟에서 하나의 타겟으로 줄어들게 된다.
  • 그런데 개발 환경에서 프레임워크, 타겟을 동적으로 제어하고 싶다면 어떻게 해야할까 /
  • 바로 프로젝트를 동적으로 제어하는 툴을 사용하면 된다. /
    프로젝트를 동적으로 제어하는 툴인 XCodeGen과 Tuist가 있는데 /
    이 중 Swift 언어 기반인 Tuist를 사용해 프로젝트를 동적으로 제어해보겠습니다./
  • 바로 프로젝트를 동적으로 제어하는 툴을 사용하면 된다. /
    프로젝트를 동적으로 제어하는 툴인 XCodeGen과 Tuist가 있는데 /
    이 중 Swift 언어 기반인 Tuist를 사용해 프로젝트를 동적으로 제어해보겠습니다./
  • Tuist를 사용하면 Project 파일에서 프로젝트를 동적으로 제어할 수 있는데 /
    이 파일에서 /
    TuistDeploy 변수를 만들어서 KEY 값을 가진 환경 변수를 생성해준다. /
    그리고 환경 변수의 값이 App인지 확인하는 Bool 타입 변수 생성
  • 프로젝트 파일의 프로젝트를 생성하는 부분에서 Target 의 값을 매개변수로 넣는 곳에서 제어를 해줄 것이다./
    아까 만들어줬던 isDeploy 변수와 삼항연산자를 사용해서 /
    App일 때는 DevSource와 FLEX를 제거해주고, DevApp일 때는 DevSource와 FLEX를 포함시켜준다. /
    이렇게 환경 변수를 이용해서 타겟, 프레임워크를 제어할 수 있다.
  • 터미널에서 환경 변수에 값 넣어줍니다. / 그럼 일반 App이 나오게 되고 / 개발용 프레임 워크인 FLEX가 포함되지 않는 것을 확인할 수 있습니다.
  • 터미널에서 환경 변수에 값을 안넣어주면 / DevApp이 생성되고 FLEX 프레임워크가 포함되어 생성됩니다.

  • 배포환경을 XCConfig와 Configuration, Schemes으로 간단하게 생성해 타겟의 수를 줄인다.
    프로젝트 동적 제어 툴인 Tuist를 이용해 환경변수로 모듈 또는 타겟을 제어할 수 있다.

×