iOS 개발 에 pre - commit hook 사용 하기

많은 사람들 이 유닛 테스트 를 작성 하고 지속 적 인 통합 서버 를 실행 하여 pull requests 를 검사 하 며 Danger 와 같은 강력 한 도 구 를 이용 할 수 있 습 니 다.
가장 초기 에 흔히 볼 수 있 는 오 류 를 막 으 려 면 pre - commit hook 을 사용 할 수 있 습 니 다.
주: 원작 자의 친구 Sami Samhuri 가 그의 스 크 립 트 를 개 선 했 고 본문 도 이에 따라 업데이트 되 었 습 니 다.또한 번역문 은 구 조 를 조정 하여 pre - commit 에 대한 간략 한 설명 을 추가 했다.최신 스 크 립 트 는 여기 있 습 니 다.
pre-commit hook
일부 테스트 코드 나 테스트 도 구 는 원 격 창고 에 제출 하지 말 아야 하기 때문에 코드 를 제출 하기 전에 심사 할 필요 가 있다.Git 은 많은 hooks 를 지원 합 니 다. hooks 는 $GIT-DIR/hooks 디 렉 터 리 에 있 는 스 크 립 트 로 특정한 이벤트 에서 실 행 됩 니 다.pre - commt hook 은 제출 하기 전에 실행 되 며 제출 할 코드 에 오류 가 있 는 지 확인 할 수 있 습 니 다.git hooks 에 대한 더 자세 한 설명 을 볼 수 있 습 니 다.
우리 가 막 고 싶 은 건
위치 가 잘못된 보기 (Misplaced Views)
위치 가 잘못된 보 기 를 제출 한 적 이 있 습 니 다. 나중에 복구 하 시 겠 습 니까?
가끔 은 Xcode 가 너무 뜨 겁 고 여러 개의 모니터 (망막 vs 비 망막 문제...) 가 있 으 면 갑자기 물건 을 잘못 놓 기 쉽다.
해 봤 어 요.
인터페이스 builder 파일 내용 을 간단 한 grep 로 스 캔 하면 잘못된 보 기 를 발견 할 수 있 습 니 다.
  • 모드: misplaced = "YES"
  • 파일: Specs. swift. storyboard
  • 집중 테스트 (포커 스 테스트)
    Kiwi 나 Quick 같은 코드 라 이브 러 리 는 집중 테스트 를 할 수 있 고 개발 속 도 를 빠르게 할 수 있어 유용 하 다.
    그러나 이들 은 절대 제출 되 어 서 는 안 된다. 그렇지 않 으 면 본의 아니 게 뭔 가 를 바 꾸 어 다른 모든 테스트 가 비활성화 되 고 심각 한 문 제 를 숨 길 수 있다.
    테스트 파일 에서 fdescribe/fit/fcontext 와 다른 유사 한 것 을 찾 아야 합 니 다:
  • 모델: (fdescribe|fit|fcontext|xdescribe|xit|xcontext)
  • 파일: *Specs.swift
  • 합치다
    우 리 는 임시 저장 (staged) 의 변화 에 위 에 있 는 것 이 포함 되 어 있 는 지 확인 하기 만 하면 됩 니 다. 모든 파일 을 검사 하지 마 세 요. 개발 할 때 귀 찮 기 때 문 입 니 다.
    다행히도 우 리 는 git diff-index -p -M --cached HEADgrep '^+' 을 함께 사용 할 수 있다.
    최종 pre - commit. sh 파일:
    #!/usr/bin/env bash
    set -eu
    
    failed=0
    
    test_pattern='\b(fdescribe|fit|fcontext|xdescribe|xit|xcontext)\b'
    if git diff-index -p -M --cached HEAD -- '*Tests.swift' '*Specs.swift' | grep '^+' | egrep "$test_pattern" >/dev/null 2>&1
    then
      echo "COMMIT REJECTED for fdescribe/fit/fcontext/xdescribe/xit/xcontext." >&2
      echo "Remove focused and disabled tests before committing." >&2
      echo '----' >&2
      git grep -E "$test_pattern" '*Tests.swift' '*Specs.swift'  >&2
      echo '----' >&2
      failed=1
    fi
    
    misplaced_pattern='misplaced="YES"'
    
    if git diff-index -p -M --cached HEAD -- '*.xib' '*.storyboard' | grep '^+' | egrep "$misplaced_pattern" >/dev/null 2>&1
    then
      echo "COMMIT REJECTED for misplaced views. Correct them before committing." >&2
      echo '----' >&2
      git grep -E "$misplaced_pattern" '*.xib' '*.storyboard' >&2
      echo '----' >&2
      failed=1
    fi
    
    exit $failed

    여기 서 최신 스 크 립 트 를 가 져 올 수 있 습 니 다.이 스 크 립 트 는 명령 행 과 macOS git 클 라 이언 트 에서 모두 사용 할 수 있 습 니 다.
    hook 을 팀 에서 동기 화하 도록 합 니 다.
    대부분의 응용 프로그램 은 팀 에서 만 든 것 이기 때문에 우 리 는 모든 git 창고 에 갈고리 (git hook) 를 설치 해 야 한다 고 생각한다.그러나 이것 은 git 의 작업 방식 을 사용 하 는 것 이 아 닙 니 다. 그러면 우 리 는 어떻게 해 야 합 니까?정 답: 심 볼 릭 링크 (symlinks) 를 사용 합 니 다.
    내 가 맡 은 대부분의 프로젝트 는 boottstrap script 과 유사 한 것 이 있 는데, Carthage 를 불 러 오 거나 다른 준 비 를 하 는 데 사용 된다.
    아래 의 간단 한 시작 스 크 립 트 (boottstrap script) 는 창고 에 갈고리 (git hook) 를 설치 하여 팀 전 체 를 동기 화 하 는 것 을 간단 하 게 할 수 있 습 니 다.
    #!/usr/bin/env bash
    # Usage: scripts/bootstrap
    
    set -eu
    
    ln -s ../../scripts/pre-commit.sh .git/hooks/pre-commit
  • 오류 가 있 으 면 셸 을 종료 하고 변 수 를 설정 하지 않 으 면 오류 메 시 지 를 표준 오류 에 기록 합 니 다.
  • git 내부 에 미리 제출 한 갈고리 파일 (internal git pre - commt hook file) 과 창고 에 있 는 스 크 립 트 사이 의 심 볼 릭 링크 를 만 듭 니 다.

  • 이 스 크 립 트 는 pre - commit. sh 와 boottstrap 파일 이 창고 의 Scripts 폴 더 아래 에 있다 고 가정 합 니 다.
    총결산
    사전 제출 고 리 는 흔히 볼 수 있 는 오 류 를 막 기 위해 간단 한 방법 을 제공 해 주 었 다.
  • 한 줄 의 코드 를 팀 의 모든 사람 에 게 설정 할 수 있 습 니 다
  • 전체 팀 에서 동기 화
  • git 추적 변화, PR 에서 볼 수 있 음
  • 스 크 립 트 로 이 루어 집 니 다. 원한 다 면 build phase 로 실행 할 수 있 습 니 다 (저 는 없 지만)
  • 관련 읽 기 React Web 과 네 이 티 브 App 에서 공유 코드 React Native 1 주년 회고 빠 른 배치 Test - Driven Development/Debug 환경
    작가 의 이전 가작 iOS – 더 가 벼 운 AppDelegate – 서비스 디자인 을 위 한 FlowControllers 개선 iOS 응용 구조 Objective - C Runtime 의 동적 방법 분석 실천
    저자 정보łocki 원문 링크:http://merowing.info/2016/08/...번역 계 력 보 숙 운 LeapCloud 팀UX 개발 자: Alex Sun 번역자 소개: iOS 개발 위 챗 공식 번호: MaxLeapyidongyanfa

    좋은 웹페이지 즐겨찾기