정적 코드 스캔은 프로젝트 코드를 감지하는 방법입니다. 코드를 실행하지 않고도 코드를 스캔 할 수 있습니다. 코드 버그 (예 : NULL 포인터), 취약성, 나쁜 맛 (예 : 방법의 너무 많은 코드 줄 등) 등을 스캔 할 수 있습니다. 또한 반복 속도, 주석 속도, 댓글 줄, 코드 줄, 복잡성 및 기타 정보를 감지 할 수 있습니다. 코드가 온라인으로 진행되기 전에 정적 코드 스캔을 실행할 수 있으며 실행 비용이 낮으며 CI 파이프 라인에서 널리 사용됩니다.
Sonarqube는 정적 코드 스캔 서비스 인 https://www.sonarqube.org/이며 주류 언어로 된 코드 스캔을 지원합니다. 커뮤니티 버전은 github의 오픈 소스, 주소 : https://github.com/sonarsource/sonarqube입니다. 그러나 일부 언어의 경우 커뮤니티 버전은 Objective-C 및 Swift와 같은이를 지원하지 않습니다. 이 저장소가 해결하고자하는 것은이 두 언어의 정적 코드 스캔 분석입니다.
Sonarqube는 성숙한 코드 스캐닝 서비스로서 외부 세계에 플러그인 기능을 제공하여 타사 스캐닝 도구를 Sonarqube로 가져 오도록 지원합니다. 이 저장소는 https://github.com/idean/sonar-swift의 2 차 개발을 기반으로합니다. 원래 기능을 기반으로 Facebook Lent Scan 결과의 가져 오기를 추가했습니다.
이 저장소는 Sonarqube의 iOS 코드 스캔 플러그인입니다. 대상 C 및 Swift 언어를 지원하며 SwiftLint, Infer, Oclint, Lizard 및 Fauxpas 도구의 스캔 및 분석 결과 가져 오기를 지원합니다.



버전 1.6 이후 Sonarqube 7.9의 최소 요구 사항
우리는 다른 동료들에게 회사 내 기존의 추론 규칙을 검토하도록 초대하고 참조를 스캔하기위한 몇 가지 규칙을 걸러 냈습니다.
Fell은 C/C ++/Java/Objective-C 언어로 스캔을 지원하는 Facebook에서 시작한 정적 코드 스캔 도구입니다.
링크 : https://github.com/facebook/infer
SwiftLint는 Swift 코드 스타일 및 규정을 확인하는 정적 코드 분석 도구입니다. 기본적으로 Github의 신속한 코드 스타일 안내서를 기반으로보고 된 문제는 Xcode에서 지원되며 보고서 파일을 생성 할 수 있습니다. 생성 된 보고서 파일을 읽고 Sonarqube에 업로드합니다.
링크 : https://github.com/realm/swiftlint
Lizard는 Objective-C 언어의 원 복잡성을 분석하고 XML 파일을 생성하여 Sonarqube의 결과로 가져올 수 있습니다.
링크 : https://github.com/terryyin/lizard
OCLINT는 C/C ++/Objective-C 언어를위한 정적 코드 분석 도구입니다. LETER와 달리 코드 사양과 같은 문제를 스캔하는 것을 선호하므로 OCLINT 부분의 문제를坏味道으로 분류합니다.
링크 : https://github.com/oclint/oclint
Faux PAS는 Objective-C 언어의 스캔 및 분석을 지원하는 상용 소프트웨어입니다.
링크 : http://fauxpasapp.com/
https://github.com/tal-tech/sonar-swift/releases
Sonarqube 설치 디렉토리의 extensions/plugins/ 디렉토리에 JAR 파일을 배치 한 다음 Sonarqube를 다시 시작하십시오.
사용하려면 다음 스크립트를 참조하십시오
xcodebuild 및 출력 로그를 파일로 실행하십시오xcodebuild clean build -workspace app.xcworkspace -scheme scheme -destination ' generic/platform=iOS ' COMPILER_INDEX_STORE_ENABLE=NO | tee xcodebuild.log > /dev/null
xcpretty -r json-compilation-database -o compile_commands.json < xcodebuild.log > /dev/null
# --skip-analysis-in-path 是忽略扫描目录
infer run --skip-analysis-in-path Pods --compilation-database compile_commands.json
# 可选,如果有 swift 语言使用
# swiftlint lint > swiftlint.txt
# 可选,Java 语言
# infer run -- ./gradlew build
# 在命令后添加 -Dsonar.java.infer.report=infer-out/report.json
# 可选,如果想计算 复杂度 使用
# lizard --xml > lizard-report.xml
# 在命令后添加 -Dsonar.swift.lizard.report=lizard-report.xml
sonar-scanner -Dsonar.host.url=http://sonarqube -Dsonar.projectKey=app -Dsonar.sources=. -Dsonar.swift.swiftlint.report=swiftlint.txt -Dsonar.swift.infer.report=infer-out/report.json
# oclint example
-Dsonar.swift.oclint.report=oclint_report.xml스캔하는 동안 MACOS 운영 체제에서 실행해야합니다.
코드를 스캔하여 WeChat 그룹을 입력 할 수 있습니다.
사용자는 #9에 회사 이름을 등록 할 수 있습니다 (사용자 참조 만)