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 프로젝트를 할 때 사람들이 흔히 하는 계산기, 메모장, 그 외 틀에 박힌 프로젝트는 하기가 싫었다. 적어도 내가 흥미 있는 것 그리고 내가 사용할 것 같은 프로젝트를 만들어보고 싶었다. 일본어에 관심이 있고 일본어 능력 평가 시험을 쳐보고 싶다는 생각이 있었다. 그럼 그에 맞는 앱을 만들어서 나부터 사용할 앱을 만들어보자는 생각이 들었다.

나이가 들어서 비전공자로서 개발자 취준에 대하여

불과 몇년전만 해도 개발자의 취직이 쉽다고 하던 시절이 있었다. 하지만 현재 지금의 상황은 나이든 비전공자가 개발자로 취직하기 쉬운 상황 아니게 되어버렸다.나라는 인간의 전반적 인생을 돌아보면 우유부단함과 타이밍을 잡지 못한다는 것으로 귀결된다.이도저도 아니고 그때 생각하면 좋은 찬스와 기회를 만들수 있었을텐데 라는 생각으로 가득한 삶을 살아오고 있다.앞으로 나는 어떻게 될까? 프로젝트 하고 이력서를 쓰고 코딩테스트 준비를 하는 일상을 보내고 있는 지금 내가 진짜 취업이 될까? 문득 생각하게 된다.이런 생각을 한들 결론이 나지 않는다는 것 알고 있지 만 생각을 하지 않을수가 없다.

Xcode에서 Info.plist 파일을 GitHub에 무시하는 방법

Xcode에서 Info.plist 파일을 GitHub에 무시하는 방법 Xcode에서 Info.plist 파일을 GitHub에 무시하는 방법 Xcode 프로젝트를 GitHub에 올릴 때 Info.plist 파일을 무시하도록 설정하는 방법을 설명합니다. 1. .gitignore 파일 수정 Git이 Info.plist 파일을 무시하도록 설정해야 합니다. ① .gitignore 파일 확인 ls -a 파일이 없으면 생성: touch .gitignore ② .gitignore 파일 수정 # Xcode Info.plist 파일 무시 **/Info.plist 2. 이미 Git에 올라간 Info.plist 삭제 기존에 올라간 파일은 직접 제거해야 합니다. ① Git에서 Info.plist 추적 제거 git rm --cached path/to/Info.plist 예시: git rm --cached MyApp/Info.plist ② 변경 사항 커밋 git commit -m "Ignore Info.plist" git push origin main 3. Xcode에서 Info.plist 관리 Git에서 무시하면 다른 개발자가 프로젝트를 클론할 때 Info.plist 가 빠집니다. 이를 방지하려면 템플릿 파일을 제공합니다. ① Info.plist.template 파일 생성 Info.plist 와 동일한 내용을 가진 Info.plist.template 을 만들어 Git에 올립니다. ② .gitignore 에 템플릿 파일 제외 !**/Info.plist.template ③ 필요 시 Info.plist 생...

GitHub에 올라간 Info.plist 파일 숨기는 방법

GitHub에 올라간 Info.plist 파일 숨기는 방법 GitHub에 올라간 Info.plist 파일 숨기는 방법 1. 현재 Info.plist가 Git에서 추적되고 있는지 확인하기 우선, 터미널에서 프로젝트 폴더로 이동한 뒤, 아래 명령어를 실행하세요. git ls-files | grep Info.plist 이 명령어를 실행했을 때 Info.plist 파일의 경로가 출력된다면, 해당 파일이 현재 Git에서 추적되고 있다는 의미입니다. 예제 출력: ios/ExampleApp/Info.plist 이제 이 파일을 Git 추적에서 제거하고, 앞으로 추적되지 않도록 설정하겠습니다. 2. .gitignore 파일에 Info.plist 추가하기 .gitignore 파일을 수정하여 Info.plist가 Git에 추가되지 않도록 설정합니다. .gitignore 파일 수정 방법 프로젝트 루트 디렉터리에 .gitignore 파일이 있는지 확인하세요. 없다면 새로 생성합니다. (터미널에서 touch .gitignore 실행) .gitignore 파일을 열고 다음 줄을 추가합니다. # Ignore Info.plist ios/ExampleApp/Info.plist ⚠ 중요: ios/ExampleApp/Info.plist 부분은 실제 프로젝트 내 Info.plist 파일의 경로에 맞게 수정하세요. ...

리액트 네이티브에 Warning: Text strings must be rendered within a ‹Text> component.오류 해결법

이미지
리엑트 네이티브에서 Warning: Text strings must be rendered within a <Text> component. 위의 스크린샷과 같은 오류가 생기면 어떻게 해결할까? 일단 뭐가 문제인지 찾아야 되는데 나의 경우는 {/* Headphones Icon */} , {/* Text Below Icon */} 주석 처리한 부분에서 문제가 생겼다. 주석을 제거하고 다시 빌드해보니 정상적으로 작동하는 것을 확인할 수 있었다.

React Native 앱에서 ProGuard 난독화 설정

React Native 앱에서 ProGuard 난독화 설정 가이드 React Native 앱에서 ProGuard 난독화 설정 이 글에서는 ProGuard 를 사용해 React Native 앱의 코드 난독화 작업을 설정하는 방법에 대해 설명합니다. ProGuard는 코드를 압축하고 최적화하며, 읽기 어려운 형태로 난독화하여 앱의 보안을 강화할 수 있습니다. 1. build.gradle 파일 설정 먼저 android/app/build.gradle 파일에 다음 설정을 추가해야 합니다: release { // 실제 배포 환경에서는 자신만의 keystore 파일을 생성해야 합니다. // 자세한 내용은 https://reactnative.dev/docs/signed-apk-android 참고 signingConfig signingConfigs.release minifyEnabled true proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" } signingConfig: 앱 서명을 위한 설정입니다. 실제 배포 시에는 별도의 keystore 파일을 생성해야 합니다. minifyEnabled: 이 옵션을 true 로 설정하면 코드 최적화 및 난독화가 활성화됩니다. proguardFiles: ProGuard 설정 파일의 경로를 지정합니다. 기본 설정 파일과 프로젝트 전용 규칙 파일이 포함됩니다. 2. proguard-rules.pro 파일 설정 난독화 예외 처리를 위해 proguard-rules.pro 파일에 다음 규칙을 추가합니다: # React Native 기본 설정 -keep class com.facebook.react.** { *; } -keep class com.fac...

iOS 국비 지원 교육 후기

이미지
iOS 국비 지원 교육 후기 iOS 국비 지원 교육 후기 1. iOS 국비 지원 교육을 받게 된 계기 저는 원래 맥북을 가지고 있었고, 만들고 싶은 앱이 있어서 iOS 관련 교육을 이미 돈을 내고 받아본 적이 있습니다. 하지만 그 교육이 기대에 비해 크게 도움이 되지 않았습니다. 그러던 중, 멋쟁이 사자처럼 이라는 기관에서 iOS 앱 스쿨을 국비 지원으로 진행한다는 소식을 들었습니다. 더 깊이 있는 공부가 필요하다고 느끼던 차에 좋은 기회라고 생각해 지원서를 제출하게 되었습니다. 2. iOS 국비 지원 합격 과정 국비 지원 교육에 합격하기 위해서는 몇 가지 준비가 필요합니다. 먼저, 자신을 소개하는 영상 을 촬영해 제출해야 합니다. 이 영상의 형식은 자유롭지만, 반드시 얼굴이 제대로 나오도록 해야 합니다. 저는 영상과 함께 자기소개서 와 관련 자료 를 제출했습니다. 특히, 제가 이 교육에서 어떤 앱을 만들고 싶은지 구체적으로 작성했어요: 앱 아이디어와 목표 팀원들과의 협업 방식 제 역할과 팀 내에서 맡게 될 역할 또한, 개인적으로 진행했던 프로젝트는 제 GitHub 프로필 에 업로드했으며, 프로젝트에 대한 설명도 상세히 작성했습니다. 3. iOS 국비 지원 교육의 진행 방식 교육은 5개월간 비대면(온라인) 으로 진행됐습니다. 합격 후, 디스코드 링크가 포함된 메일을 받았고, 여기서 공지사항과 Zoom 초대 링크 등을 확인할 수 있었습니다. 출석 방식 수업은 Zoom을 통해 진행되며, 얼굴을 공개해야 출석으로 인정됩니다. 출결 앱을 설치한 후 QR 코드를 스캔하면 출석이 완료됩니다. 협업과 커뮤니케이션...

리액트 네이티브 개발할 때 자주 쓰이는 명령어와 코드 모음 정리

🔧 기본 빌드 & 실행 명령어 명령어 설명 npx react-native run-android 안드로이드 앱 실행 npx react-native run-ios iOS 앱 실행 (Mac에서만 가능) npx react-native start 메트로 번들러 시작 (개발 서버) npx react-native doctor 환경 설정 검사 및 문제 해결 cd android && ./gradlew clean 안드로이드 빌드 캐시 정리 npx react-native-clean-project 프로젝트 전체 캐시 및 빌드 정리 🔥 디버깅 & 로그 확인 명령어 설명 npx react-native log-android 안드로이드 디바이스 로그 보기 npx react-native log-ios iOS 디바이스 로그 보기 adb reverse tcp:8081 tcp:8081 USB 연결된 디바이스에서 메트로 서버 연결 adb devices 연결된 안드로이드 디바이스 목록 확인 📦 패키지 관리 (npm / yarn) 명령어 설명 npm install <패키지명> 패키지 설치 npm uninstall <패키지명> 패키지 제거 npx react-native link <패키지명> 네이티브 모듈 연결 npm update 모든 패키지 최신 버전으로 업데이트 🚀 릴리즈 빌드 명령어 (Android) 명령어 ...

비주얼 스튜디오 코드 중복 코드 일괄 변경하는 방법

이미지
1.변경하고자 하는 문자열을 드래그  2.드래그된 상태에서 윈도우에서는 Ctrl + Shift + L을 입력 Mac에서는 commad + Shift + L을 입력 3.변경할 문자열로 수정하면 드래그된 문자열들이 일괄 변경

Git rebase Github에 다시 프로젝트 올리기

Git 리베이스(Rebase)와 병합(Merge) 가이드 🚀 Git 리베이스(Rebase)와 병합(Merge) 가이드 1️⃣ 원격 저장소의 최신 변경 사항 가져오기 git fetch origin 2️⃣ 현재 브랜치를 원격 브랜치와 리베이스하기 git rebase origin/main 이 과정에서 충돌(conflict) 이 발생할 수 있습니다. 만약 충돌이 발생하면: 충돌이 난 파일을 수정한 후 아래 명령어로 변경 사항을 반영하세요. git add <충돌 해결한 파일> git rebase --continue 충돌이 너무 복잡하면 리베이스를 취소하고 병합 방식으로 변경 할 수도 있습니다: git rebase --abort git pull origin main --rebase 3️⃣ 변경 사항을 푸시하기 리베이스가 끝났다면 이제 푸시합니다. git push origin main --force-with-lease 🚨 --force-with-lease 는 --force 보다 안전한 옵션입니다. 원격 저장소가 예상치 못하게 변경되지 않은 경우에만 강제 푸시를 실행합니다. ❗ 리베이스 대신 병합(Merge)을 원한다면? 리베이스가 아니라 단순히 병합하고 싶다면 다음 명령어를 사용하세요: git pull origin main git push origin main 이렇게 하면 원격 저장소의 변경 사항을 로컬에 병합한 후 푸시합니다.

챗GPT에게 정확한 답을 얻고 싶다면 이렇게 해보세요.

1) 충분한 근거가 없거나 정보가 불확실한 경우, 절대 임의로 지어내지 말고 "알 수 없습니다" 또는 "잘 모르겠습니다"라고 명시해 주세요.   2) 답변하기 전, 단계별로 가능한 정보를 검증하고, 모호하거나 출처가 불분명한 부분은 "확실하지 않음"이라고 표시하세요.   3) 최종적으로 확실한 정보만 사용하여 간결한 답변을 완성하세요. 만약 추측이 불가피할 경우, "추측입니다"라고 밝혀 주세요.   4) 사용자의 문의가 모호하거나 추가 정보가 필요하다면, 먼저 사용자의 맥락이나 세부 정보를 더 요청하세요.   5) 확인되지 않은 사실을 확신에 차서 단정 짓지 말고, 필요한 경우 근거를 함께 제시하세요.   6) 각 답변마다 출처나 근거가 있는 경우 해당 정보를 명시하고, 가능하면 관련 링크나 참고 자료를 간단히 요약해 알려 주세요.

Gradle이 @react-native/gradle-plugin 디렉토리를 찾지 못해서 발생하는 문제 해결법

1. 의존성 확인 필요한 의존성이 설치되었는지 확인하려면 다음 명령어를 실행하세요: cd /Users/jeaminpark/Downloads/App Name npm install 2. Gradle 캐시 정리 Gradle 캐시를 정리하여 오래된 파일이 빌드에 영향을 주지 않도록 합니다: cd android ./gradlew clean 3. 프로젝트 실행 문제를 수정한 후 프로젝트를 실행합니다: npx react-native run-android

비주얼 스튜디오 코드에서 깃허브에 프로젝트 올리는 법

🚀 Git 기본 설정 가이드 1️⃣ Git 초기화 확인 git init 2️⃣ 원격 저장소 연결 확인 git remote -v 3️⃣ 변경된 파일 스테이징 git add . 4️⃣ 커밋 생성 git commit -m "Initial commit" 5️⃣ 원격 저장소에 푸시 git push -u origin main ⚠️ 문제 해결 만약 main 브랜치가 없다는 에러가 발생하면, 아래 명령어로 해결할 수 있습니다: git branch -M main git push -u origin main