iOS fastlane 설정하는 법

  ✅ 1. 사전 준비 필수 설치 항목 macOS Xcode (App Store 또는  Apple Developer 에서 설치) Cocoapods  ( sudo gem install cocoapods ) Ruby (macOS에 기본 탑재되어 있음) Node.js / npm React Native CLI ( npm install -g react-native-cli  또는  npx react-native  사용 가능) ✅ 2. Fastlane 설치 1. Fastlane 설치 sudo gem install fastlane -NV -NV 는 설치 로그를 자세히 보여주는 옵션입니다. 문제가 발생하면  brew install fastlane 으로 설치해도 됩니다 (권장:  brew  방식은 시스템 격리 가능). 📌 참고:  brew install fastlane  시, Fastlane이 시스템 Ruby 대신 Homebrew Ruby를 사용합니다. 2. Fastlane 초기화 프로젝트 루트 또는  ios/  디렉토리로 이동하여 실행합니다. cd ios fastlane init 3.  init  옵션 선택 Fastlane은 아래와 같은 질문을 합니다: "What would you like to use fastlane for?" 선택지: 📦  Automate beta distribution to TestFlight 🚀  Automate App Store distribution 🧪  Manual setup 일반적으로  TestFlight 배포  또는  App Store 배포 를 선택합니다. Apple ID 입력 Apple Developer 계정 정보 입력. 앱 식별자 입력 ex)  com.mycompany.myapp Fastlane은  ios/fastlane/ ...

Git 원격 저장소 추가 및 관리

  🔹 1. 원격 저장소 추가하기 원격 저장소를 추가하려면 다음 명령어를 사용하세요: git remote add <원격이름> <원격URL> 예제: git remote add origin https://github.com/user/repo.git 🔹 2. 추가된 원격 저장소 확인 현재 추가된 원격 저장소 목록을 확인하려면: git remote -v 🔹 3. 원격 저장소 변경 (수정) 이미 추가된 원격 저장소의 URL을 변경하려면: git remote set-url origin <새로운URL> 예제: git remote set-url origin https://github.com/newuser/newrepo.git 🔹 4. 원격 저장소 삭제 원격 저장소를 삭제하려면: git remote remove <원격이름> 예제: git remote remove origin 이제 원격 저장소를 추가하고 관리할 수 있습니다! 🚀

iOS 개발자가 리액트 네이티브로 앱을 출시해보고 느낀점

리액트 네이티브 앱 출시 나는 국비 지원 교육을 통해 iOS 개발을 시작한 케이스다. 그런 내가 리액트 네이티브로 앱을 출시하게 된 이유는, iOS 개발이 Xcode를 기반으로 iOS 생태계 내에서  iOS 앱만을 만드는  폐쇄적인 개발 환경이었기 때문이다. 그렇게 iOS에만 집중하다 보니 점점 뭔가 갇혀 있다는 느낌이 들었다. 결국 취업을 하든, 프리랜서로 일하든, 장기적으로 봤을 때  iOS에만 국한되지 않고 개발 영역을 확장할 필요가 있다 는 생각이 들었다. 물론 iOS 개발에 집중하는 것도 좋지만, 안드로이드를 멀리할 이유는 없다고 느꼈다. 나는 다른 개발 분야에도 흥미가 많은 사람이다. 웹 개발도 언젠가는 도전해 보고 싶다는 생각이 있다. 물론 지금 당장은 어렵겠지만 말이다. 그러한 생각들이 쌓이다 보니, iOS 외에  안드로이드 앱도 출시해 보고 싶다 는 욕심이 생겼고, 그 결과  리액트 네이티브 로 앱을 만들어 보기로 결심하게 되었다. 왜 리액트 네이티브인가? "안드로이드 앱을 만들고 싶다면 굳이 리액트 네이티브가 아니어도 되지 않나?"라는 질문이 있을 수 있다. 예를 들면 네이티브 안드로이드 개발에 쓰이는  코틀린 이나, 다른 크로스 플랫폼 프레임워크인  플러터 도 있다. 그럼에도 불구하고 내가 리액트 네이티브를 선택한 이유는,  예전에 HTML, CSS, JavaScript를 아주 잠깐 배운 적이 있기 때문 이다. 그 연장선에서 자연스럽게 리액트를 접하게 되었고, 리액트 네이티브를 사용하는 것이 진입 장벽이 낮게 느껴졌다. 리액트 네이티브로 앱을 만들며 느낀 점 iOS와 안드로이드 앱을 리액트 네이티브로 실제 출시해보면서 몇 가지 장단점을 느꼈다. 버그 및 오류가 많다 iOS 네이티브 개발에 비해 리액트 네이티브에서는 버그가 자주 발생했고, 오류를 찾는 과정도 상대적으로 미흡하다는 느낌을 받았다. 디버깅도 익숙하지 않아 어려움을 느꼈는데, 이건 내 실력 부족일 수도 있지만, ...

환경변수를 열고 값을 입력하고 저장하는 방법

Windows에서 환경변수 설정하기 환경변수 창 열기 시작 메뉴 우클릭 → 시스템 선택 또는 Windows 키 + X 누른 후 '시스템' 선택 '고급 시스템 설정' 클릭 '환경 변수' 버튼 클릭 환경변수 추가/수정 사용자 변수 또는 시스템 변수 섹션에서 '새로 만들기' 클릭 변수 이름과 변수 값 입력 '확인' 버튼 클릭 기존 환경변수 편집 편집할 변수 선택 후 '편집' 클릭 변수 값 수정 후 '확인' 클릭 저장 모든 대화 상자에서 '확인' 버튼을 클릭하여 저장 변경사항을 적용하려면 열려있는 명령 프롬프트나 프로그램 재시작 필요 macOS에서 환경변수 설정하기 터미널 열기 Applications → Utilities → Terminal 실행 임시 환경변수 설정  (현재 세션에만 적용) export 변수이름=값 예: export PATH=$PATH:/새로운/경로 영구 환경변수 설정 쉘 프로필 파일 열기 Bash 셸: nano ~/.bash_profile 또는 nano ~/.bashrc Zsh 셸: nano ~/.zshrc 파일에 환경변수 추가 export 변수이름=값 Ctrl+O를 눌러 저장, Ctrl+X로 나가기 변경사항 적용을 위해 source ~/.bash_profile 또는 source ~/.zshrc 실행 Linux에서 환경변수 설정하기 터미널 열기 임시 환경변수 설정  (현재 세션에만 적용) export 변수이름=값 영구 환경변수 설정 사용자 수준: nano ~/.bashrc 또는 nano ~/.bash_profile 또는 사용 중인 셸 설정 파일 열기 파일 끝에 export 변수이름=값 추가 저장(Ctrl+O)하고 나가기(Ctrl+X) source ~/.bashrc 또는 해당 파일을 실행하여 변경사항 적용 시스템 수준: sudo nano /etc/environment 또는 /etc/profile 열기 변수이름=값 형식으로 추가 저장 후 나...

question,image,options 간의 간격이 너무 커서 가독성이 떨어지는 문제및 각 부분의 충돌 현상 해결

문제의 원인은  아래와 같은 세 제약 조건을 수학적으로 동시에 만족할게 할수가 없었기 때문입니다.   1.이미지뷰까지 20포인트 간격   2.질문 레이블에서 옵션 스택뷰까지 10포인트 간격   3.이미지뷰에서 옵션 스택뷰까지 20포인트 간격 해결방법은: 다음과 같은 제약 조건 변수들을 선언합니다    private var questionToOptionsConstraint: NSLayoutConstraint!  private var questionToImageConstraint: NSLayoutConstraint!  private var imageToOptionsConstraint: NSLayoutConstraint! setupConstraints()  메서드에서 이 제약 조건들을 초기화하되, 아직 활성화하지 않습니다. questionToOptionsConstraint = optionsStackView.topAnchor.constraint(equalTo: questionLabel.bottomAnchor, constant: 10) questionToImageConstraint = imageView.topAnchor.constraint(equalTo: questionLabel.bottomAnchor, constant: 20) imageToOptionsConstraint = optionsStackView.topAnchor.constraint(equalTo: imageView.bottomAnchor, constant: 20) displayQuestion()  메서드에서 이미지 유무에 따라 적절한 제약 조건만 활성화합니다 // 먼저 모든 잠재적 충돌 제약 조건을 비활성화 NSLayoutConstraint.deactivate([     questionToOptionsConstraint,     questionToImageCo...

SQLite를 이용할때 문제의 진행을 각 난이도별로 공유하는 문제 해결법

레벨과 퀴즈 그룹을 기본 키로 설정하여 데이터 충돌 방지 레벨과 퀴즈 그룹을 기본 키로 설정하여 데이터 충돌 방지 문제점 기존에는 레벨과 퀴즈 그룹이 정확히 구별되지 않아 새로운 진행도를 저장할 때 기존 데이터가 덮어씌워지는 문제가 있었습니다. 해결 방법 progress 테이블의 기본 키를 level 과 quizGroup 의 조합으로 설정하여, 레벨별로 진행도를 독립적으로 관리하도록 변경하였습니다. CREATE TABLE IF NOT EXISTS progress ( level TEXT, quizGroup TEXT, lastQuestionIndex INTEGER, PRIMARY KEY (level, quizGroup) ); 데이터 저장 방식 개선 업데이트 시 특정 레벨과 그룹에 대해서만 진행도 변경 saveProgress 메서드에서 WHERE 절에 level 과 quizGroup 을 포함하여 특정 레벨과 그룹에 대해서만 진행도를 변경하도록 설정하였습니다. let updateQuery = "UPDATE progress SET lastQuestionIndex = ? WHERE level = ? AND quizGroup = ?;" 진행도 조회 시 정확한 필터링 적용 let selectQuery = "SELECT lastQuestionIndex FROM progress WHERE level = ? AND quizGroup = ?;" 변경된 데이터가 없으면 새로운 데이터를 삽입하는 UPSERT 패턴 사용 if sqlite3_changes(db) == 0 { insertProgress(level: level, quizGroup: quizGroup, index: index...

왜? iOS로 일본어 능력 평가 앱을 만들려고 하는가?

이미지
iOS 프로젝트 나는 오타쿠고 일본어를 할 줄 안다. 그리고 iOS 국비 지원 교육을 받아서 iOS 개발자를 지망하고 있다. 그럴려면 모름지기 iOS 프로젝트가 필요하다고 생각했다. iOS 프로젝트를 할 때 사람들이 흔히 하는 계산기, 메모장, 그 외 틀에 박힌 프로젝트는 하기가 싫었다. 적어도 내가 흥미 있는 것 그리고 내가 사용할 것 같은 프로젝트를 만들어보고 싶었다. 일본어에 관심이 있고 일본어 능력 평가 시험을 쳐보고 싶다는 생각이 있었다. 그럼 그에 맞는 앱을 만들어서 나부터 사용할 앱을 만들어보자는 생각이 들었다.