iOS 32

JENKINS(4) github webhook (2)

저번글에서 로컬에 있는 jenkins 서버를 외부에서 접근 가능하게 했다. 그러면 이제 github으로 가서 webhook에 필요한 토큰과 설정을 해야한다. 1. github access token 생성 개인 깃헙으로 이동하여 profile -> developer setting -> Personal access tokens로 가서 generate new token을 눌러준다 그리고 나서 다음과 같이 설정을 해주고 키를 발급받고, 발급 받은 키는 안전하게 다른 곳에 저장해둔다. 2. github webhook 생성 이제 원하는 프로젝트로 이동하여 webhook을 설정해준다. Add webhook을 누르면 다음과 같은 화면이 나온다. 여기서 payload URL에 ngrok에서 만들어진 url + /gith..

iOS 2023.03.11

JENKINS (3) - github Webhook[ngrok] (1)

저번 글에서는 수동 빌드까지 밖에 하지 못했습니다. 이번 시간에는 github과 연결하여 새로운 푸시 사항이 들어오면 자동적으로 빌드를 하는 Trigger 이벤트에 대하여 알아 보겠습니다. 우선 github의 webhook과 연결하기 위해서는 로컬에서 돌아가는 Jenkins 서버가 외부에서 접근이 가능해야 합니다. 따라서 먼저 이것을 가능케 해주는 ngrok를 먼저 설치합시다. 1. ngrok 설치 ngrok 설치를 위해서는 2가지 방법이 있다. 하나는 공식 홈페이지에서 파일 받아 설치하는 것이다. https://ngrok.com/ ngrok - Online in One Line Zero Trust Add SSO, Mutual TLS, IP Policy, and webhook signature verif..

iOS 2023.03.11

JENKINS(2) - 환경변수 설정

JENKINS에서 CocoaPod, SPM, Carthage, Tuist등을 사용해야 할때 필요하다. 사용하기 위해서는 환경변수 설정이 필요한데 다음과 같이 설정할 수 있다. 우선 Dashboard에서 Jenkins 관리 -> 시스템 설정으로 들어간다 그리고 아래로 내리다 보면 다음과 같이 Global properties에서 Enviroment variables에서 환경변수 설정이 가능하다 필자는 일단 TUIST를 사용해야 하는 상황이라 로컬에서 TUIST가 어디에 저장되어 있는지 알아내야 했다. 그래서 위대하신 chatGPT에게 물어봤다. 겁나 똑똑한거 같다. 일단 jenkins가 Local에서 돌아가는 상황이라 내 맥북 참조가 가능한 것 같은데. 로컬로 안돌릴때는 어떻게 해야할지 아직 잘 모르겠다. ..

iOS 2023.03.11

JENKINS[ERROR] no test bundles available ~

에러 본문 xcodebuild: error: Failed to build workspace SwiftAnimation with scheme SwiftAnimation. Reason: There are no test bundles available to test. Recovery suggestion: Ensure that all package dependencies have resolved and that there are no missing test bundles in the active scheme or test plan. TDD를 적용하지 않았거나. 간단한 프로젝트에서 TestTarget을 만들지 않았을때 발생하는 문제이다. 보통 jenkins 도입 과정을 보면 xcode build 명령어가 다음과 ..

iOS 2023.03.11

JENKINS[ERROR] Couldn`t find any revision to build

JENKINS를 처음 도입하고 바로 빌드를 해보면 높은 확률로 빌드를 실패하면 다음 에러 메시지를 보게 됩니다. ERROR: Couldn`t find any revision to build. Verify the repositry and branch configuration for this job. 굉장히 단순 에러이다. 초기 jenkins 설정에서 github의 브랜치가 "*/ master"로 설정이 되어 있는데. 언어 혁명? 순환?의 개념으로 master/slave는 지양하자는 의미로 github의 master 브랜치가 main으로 변경되었기 때문에 생기는 문제이다. 따라서 jenkins 프로젝트 설정에서 "*/main"으로 바꾸면 올바르게 작동한다. 아니면 단순 오탈자가 있는제 확인해 보면 된다.

iOS 2023.03.11

JENKINS (1) - 첫 CI 경험해보기

개발을 좀 하다 보며 연차가 올라가고 이제 어느정도 자기 domain분야의 지식이 갖춰지면 슬슬 다른게 눈에 더 들어오기 마련입니다. 주로 귀차니즘 혹은 프로젝트의 정합성, 안정성 등을 고려하는 의미로 프로젝트를 좀더 JUICY하게 해주는 외부 Tool들을 찾아보게 되죠. 이러한 계기로 저는 첫번째로 찾아보게 된데 FrameWork를 이용한 Modular Architecture 였습니다. 회사를 다니는 동안에는 일에 치여 개념만 알아보다가 저번 글에서 드디어 TUIST를 이용하는 법에 글을 써보았죠. 이러한 고민에 대한 연장선으로 이번에는 CI/CD 중 CI에 대하여 글을 써볼까 합니다. 우선 CI가 뭔지에 대해부터 알아보겠습니다. CI는 Continuous Integration 즉, 지속적인 통합이라는..

iOS 2023.03.11

Tuist(3) - 환경변수

기능적인 부분들은 전글에서 다 끝마쳤다. 이번글에서는 약간 감초가 같은 것들만 다룰 것이다. 4. 환경 변수를 이용하여 generate하는 방법 여태까지 진행한 단계에서 살짝 아쉬운 감이 있다. 바로 tuist generate를 사용했을때 무조건 Demo들도 같이 빌드 된다는 것이다. Demo앱들은 사실상 개발할때만 필요한 것이기 때문에 배포하려고 할때는 굳이 빌드를 할 필요가 없다. 우리는 이 과정을 위하여 환경 변수를 사용할 것이다. Tuist는 terminal에서 환경변수를 써서 이를 Project.swift에서 사용할 수 있게 되어 있습니다. 환경변수는 TUIST_[이름] 형태로 쓰면 Tuist가 읽을 수 있습니다. 따라서 generate할 당시에 배포를 위한 빌드냐 개발을 위한 빌드냐를 환경변수..

iOS 2023.02.13

Tuist(2) - 기존 프로젝트에 도입하기

전글에서는 Tuist 설치 및 시행방법 그리고 기본적인 Tuist의 구조에 대해서 알아 보았다. 이번글부터는 본격적으로 어떻게 기존 프로젝트에 Tuist를 도입하는지에 대해 글을 써볼 것이다. 3.Tuist Edit 3-1. 현재 프로젝트에 맞게 Tuist 디렉토리 생성하기 본격적으로 Project.swift 파일과 Project+Templates.swift 파일을 추가, 수정 하며 우리가 원하는 프로젝트의 형태로 만들어나갈 것이다. 그전에 일단 불필요한 파일들을 지워서 다음과 같이 만들어놓자. 안에 있는 Config.swift와 Project+Template.swift은 파일을 냅두고 코드들만 싹다 지워놓으면 된다. 그리고 다시 우리가 원하는 최종 형태의 구성물을 확인해보자. 우리의 최종적인 형태는 a..

iOS 2023.02.13

TUIST(1) - 설치,실행,기본구조

예전 회사에 있을때 부터 앱이 커짐에 따라 모듈화의 필요성을 느끼기는 했었다. 내부 서비스인 "Inpose" IOS의 앱의 규모는 cocoapod 제외하고 총 888개의 파일과 147,566의 line수를 가지고 있다. 작성한 프로젝트의 총 라인수는 다음과 같이 구할 수 있다. 터미널로 원하는 프로젝트로 이동하여 다음 명령어를 실행하면 알 수 있다. find . \( -iname \*.swift \) -exec wc -l '{}' \+ 프로젝트가 이것 하나만 있는 것이 아닌 외주로 받고 지속적으로 관리해준 앱 중에서도 이와 같은 규모를 가진것이 2 ~ 3 개 정도 있었다. 이런 프로젝트들은 특성상 개발하는 와중에 요구사항과 디자인이 많이 바뀌기도 하고 출시한 후에도 전면 리뉴얼을 할 만큼 수정사항이 많았..

iOS 2023.02.12

MVVM(6) - ViewModel

5. ViewModel Class? or Struct? MVVM에서 가장 중요시 되는 ViewModel에 대해서 이야기를 해볼까 합니다. MVVM자체가 개념만 있는 상황이다 보니 각 단체에 따라서 ViewModel을 구성하는 방법이 다릅니다. 이 와중에 가장 첫번째로 대두 되는 고민은 ViewModel은 Struct이냐? Class?이냐 일거 같아요. 그럼 어떤것이 더 ViewModel에 어울리냐에 먼저 Struct와 Class가 어떻게 다른지 간략하게 짚어보고 넘어가겠습니다. 5-1.Struct vs Class 애플 개발자들 사이에 "Struct가 Class보다 더 좋다!"라는 이야기가 가끔 나옵니다. 그 이유는 애플 공식 문서에 보면 다음과 같은 말이 나오기 때문입니다. 번역하면 "기본적으로 Stru..

iOS 2023.01.13