iOS 다음 키 로 Push 를 디 버 깅 하 는 방법 에 대한 자세 한 설명

5089 단어 iospush디 버 깅
머리말
대만 에 와 서 일 하 는 재 미 있 는 점 은 서로 다른 공사 문화 배경 에서 온 프로그래머 들 과 부 딪 혀 교류 할 수 있 고 언어 습관,교육 환경,사고방식,공사 경험 에 적지 않 은 차이 가 존재 한 다 는 것 이다.대만 에 온 지 반년 이 넘 었 는데 그 동안 저 는 깊 은 느낌 을 받 았 습 니 다.여기 프로그래머 들 은 한 가지 일 을 하 는 효율 을 매우 강조 합 니 다.도 전적인 프로젝트 를 만 났 을 때 초기의 디자인 토론 조정 은 가장 좋 은 경로 로 목표 에 도달 하기 위해 매우 빈번 했다.평소에 프로젝트 를 할 때 각 프로그래머 들 은 자신의 공구 상자 와 작은 발 을 가지 고 각종 장면 에 대응 했다.가장 적은 시간 을 들 여 가장 많은 일 을 하거나 야근 을 하지 않 기 위해 서다.)
잡담 은 그만 두 고 이 글 은 제 가 이전에 APN 을 디 버 깅 하 는 방식 을 여러분 과 공유 합 니 다.
장면:테스트 에서 또 Push 를 받 지 못 하 는 것 을 발견 했다.
테스트 학생 들 은 일정 시간 마다 아이 폰 이 Push 를 받 지 못 하 는 것 을 발견 할 수 있 습 니 다.이것 은 상기 회사 에서 자주 발생 하 는 장면 입 니 다.(대만 지역 에서 많은 회사 들 이 테스트 를 하지 않 은 것 같 습 니 다)마지막 에 디 버 깅 한 원인 이 각각 다 르 지만 매번 에 하 던 일 을 멈 추고 절 차 를 밟 는 것 을 피 할 수 없습니다.데이터 라인 은 핸드폰 과 연결 되 고 uid 를 조회 하 며 가상 네트워크 카드 를 작 동 합 니 다.WireShark 또는 tcpdump 스냅 백 을 실행 하고 server 엔 드 문 제 를 제거 하 며 핸드폰 설정 을 확인 합 니 다.포 지 셔 닝 을 기다 리 는 문 제 는 적어도 10 여 분 이 지 났 고,헛되이 낭비 한 10 여 분 이 지 났 다.상술 한 장면 이 몇 번 발생 한 후에 나 는 간단 한 도 구 를 써 서 대응 했다.
질문:효율 을 어떻게 향상 시 킵 니까?
네트워크 패키지 라 는 절 차 를 가능 한 한 간소화 하고 싶 습 니 다.우선 애플 서버 가 Push 를 보 내지 않 았 는 지 디 버 깅 하고 원 키 로 작업 을 완성 하 는 것 이 좋 습 니 다.각본 으로 한 걸음 한 걸음 실현 하 다.
첫 번 째,테스트 아이 폰 을 연결 하면 자동 으로 uid 가 져 오기
terminal 에서 system proffler 명령 으로 mac 에 연 결 된 usb 장 치 를 가 져 올 수 있 습 니 다.

system_profiler SPUSBDataType
system_proffler 는 현재 시스템 의 소프트 하드웨어 설정 정 보 를 가 져 오 는 명령 입 니 다.man systemproffler 상세 한 사용 방법 보기.위 명령 의 실행 결 과 는 다음 과 같 습 니 다.

usb 로 연 결 된 아이 폰 udid 데이터(Serial Number)를 볼 수 있 습 니 다.sed 로 대상 정 보 를 추출 하면 됩 니 다.

system_profiler SPUSBDataType | sed -n -E 's/Serial Number: (.+)/\1/1p'
나 는 보통 usb 를 통 해 iOS 장 치 를 연결 하기 때문에 첫 번 째 일치 하 는 결과 만 추출 했다.
두 번 째 단 계 는 패 키 지 를 잡기 위해 가상 네트워크 카드 를 만 듭 니 다.
우 리 는 위 에서 추출 한 장치 udid 를 매개 변수 전송 자로 네트워크 카드 명령 을 만 들 기만 하면 됩 니 다.

system_profiler SPUSBDataType | sed -n -E 's/Serial Number: (.+)/\1/1p' | xargs rvictl -s
위 명령 을 실행 하면 다음 출력 을 볼 수 있 습 니 다.

Starting device 198a630825ee39496411dc3e323039f2947fa16f [SUCCEEDED] with interface rvi0
세 번 째 단계,tcpdump 모니터링 가상 네트워크 카드 시작
마찬가지 로,우 리 는 rvictl 명령 이 실 행 된 후에 tcpdump 를 시작 하면 됩 니 다.두 번 째 출력 에서 가상 네트워크 카드 의 id 가 rvi 0 이라는 것 을 알 기 때문에 우 리 는 명령 을 다음 과 같이 수정 할 것 입 니 다.

system_profiler SPUSBDataType | sed -n -E 's/Serial Number: (.+)/\1/1p' | xargs rvictl -s | sudo tcpdump -i rvi0
첫 번 째 sudo tcpdump 에 서 는 관리자 암 호 를 입력 해 야 합 니 다.모든 것 이 정상 이면 다음 과 같은 출력 을 볼 수 있 습 니 다.

tcpdump: WARNING: rvi0: That device doesn't support promiscuous mode
(BIOCPROMISC: Operation not supported on socket)
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on rvi0, link-type PKTAP (Apple DLT_PKTAP), capture size 262144 bytes
네 번 째 단계,매개 변수 조정
비록 우 리 는 패키지 프로 세 스 를 시 작 했 지만,우리 의 목 표 는 push 를 디 버 깅 하 는 것 입 니 다.그래서 우 리 는 APN 에서 온 네트워크 패키지 에 만 관심 이 있 습 니 다.다음은 tcpdump 에 패키지 의 filter 를 추가 하고 간단 한 파 라 메 터 를 설정 해 야 합 니 다.
여기 서 iOS APN 에 대한 이해 가 필요 합 니 다.제 가 분석 한 APN 의 데이터 채널 상황 은 iOS 9 이전에 애플 은 전문 적 인 긴 링크 채널 로 응용 프로그램의 push 를 푸 시 하고 포트 번 호 는 5223 에 고정 되 어 있 습 니 다.iOS 9 부터 애플 은 HTTP 2.0 을 사용 해 통합 적 으로 사용 할 수 있 는 HTTP 2.0 긴 링크 채널 을 새로 만 들 었 다.이 통합 채널 은 Push 만 푸 시 하 는 것 이 아니 기 때문에 가방 을 잡 을 때 이전 5223 채널 보다 많은 가방 을 볼 수 있다.현황 은 애플 이 새 시스템 에서 두 개의 통 로 를 동시에 사 용 했 기 때문에 APN 은 5223 을 걷 기도 하고 HTTP 2.0 을 걷 기도 하 며 전략 이 불분명 하 다.
간단하게 분석 한 후에 목표 가 명확 하 다.우 리 는 포트 에 대해 제한 만 하면 된다.HTTP 2.0 은 HTTPS 를 사용 할 것 입 니 다.포트 는 443 입 니 다.따라서 마지막 명령 은 다음 과 같 습 니 다.

system_profiler SPUSBDataType | sed -n -E 's/Serial Number: (.+)/\1/1p' | xargs rvictl -s | sudo tcpdump -i rvi0 src port 5223 or https
다섯 번 째,바로 시작
우 리 는 매번 한쪽 에 있 는 이 긴 명령 을 두 드 릴 수 없습니다.조작 이 편리 하도록 명령 에 alias 를 추가 하고 편집 할 수 있 습 니 다.bashprofile:

vim ~/.bash_profile
가입 명령 별명:

alias apn="system_profiler SPUSBDataType | sed -n -E 's/Serial Number: (.+)/\1/1p' | xargs rvictl -s | sudo tcpdump -i rvi0 src port 5223 or https"
설정 사용

source ~/.bash_profile
여섯 번 째 단계,성과 검수
다음 에 학생 들 을 테스트 해서 Push 가 받 지 못 하 는 문 제 를 테스트 하고 USB 를 꽂 으 면 저 는 다음 과 같은 것 만 필요 합 니 다.
1 F2 를 누 르 면 Terminal 을 시작 합 니 다.
2 apn 리 턴 입력
빙고 야,이제 커피 한 모금 마 실 수 있어.조용히 가방 봐.
총결산
위의 스 크 립 트 는 작은 도 구 를 결합 해서 이용 하면 시간 과 정력 을 절약 하 는 효 과 를 얻 을 수 있 습 니 다.개발 과정 에서 비슷 한 사례 가 많 습 니 다.일부 도구 나 경로 가 우리 의 개발 효율 을 향상 시 킬 수 있 고 생각 을 많이 하면 얻 을 수 있 습 니 다.여러분 은 평소에 일 할 때 도 도 도 구 를 어떻게 이용 하여 생산력 을 향상 시 킬 수 있 는 지 많이 생각 할 수 있 습 니 다.
FB 가 확실히 잔업 을 하지 않 아 도 되 기 때문에 나 는 여가 시간 이 갑자기 많아 졌 기 때문에 올 해 는 글 을 좀 더 업데이트 할 계획 이다.글 의 중점 은 사고 와 소감 공유 에 두 고 단편 이 잘 소화 되 는 것 을 위주 로 한다.이 글 은 도구 로 효율 을 높이 고 시간 을 절약 하 는 사상 을 공유 하 는 데 목적 을 두 고 있다.
자,이상 이 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기