我們開源了一款 SonarQube iOS 程式碼掃描外掛
背景:
我們在公司(好未來)內部開發了一套基於 SonarQube 的靜態程式碼掃描服務,得益於SonarQube開源版本本身的功能,我們可以直接複用支援主流的程式語言,但 SonarQube 的開源版本並不支援 C/C++/ObjectiveC等語言,所以我們嘗試使用其他的工具去解決這個問題,最後我們選擇了 Facebook 的 Infer 來解決這個問題,那麼我們在這個過程中,開發了基於社群版本的 sonar-swift 去支援了 Infer 工具結果匯入。
Infer 工具支援 C/C++/Java 語言,我們目前支援了 Infer 匯入 Objective-C 的掃描結果,再加上原先的 Swiftlint ,就可以 iOS 的掃描了。
同時我們為了回饋社群,也非常願意拿出來和大家分享,所以我們將這個外掛開源,希望能給大家帶來收益。
介紹:
靜態程式碼掃描是一種檢測專案程式碼的方式,能夠在不執行程式碼的情況下對程式碼進行掃描,可以掃描出程式碼的 Bug (例如空指標)、漏洞、壞味道(例如方法內程式碼行數量過多)等,另外可以檢測倉庫的程式碼重複率,註釋率,註釋行,程式碼行數,複雜度等資訊。 靜態程式碼掃描可以在程式碼上線之前執行,並且具有執行成本低等特點,被廣泛應用於 CI 流水線上。
SonarQube 是一個靜態程式碼掃描服務,https://www.sonarqube.org/,支援主流語言的程式碼掃描,其社群版本在 GitHub 開源,地址:https://github.com/SonarSource/sonarqube。但是對於部分語言,社群版本並不支援,例如 Objective-C 和 Swift ,本倉庫希望解決的就是這兩種語言的靜態程式碼掃描分析。
SonarQube 作為一款成熟的程式碼掃描服務,對外提供了外掛功能,支援將第三方的掃描工具的結果匯入到SonarQube展示,本倉庫基於https://github.com/Idean/sonar-swift二次開發,在原先功能的基礎上新增了 Facebook Infer 掃描結果的匯入。
本倉庫作為 SonarQube 的iOS程式碼掃描外掛,支援 Objective-C 語言和 Swift 語言,支援匯入 SwiftLint、Infer、OCLint、Lizard、Fauxpas 工具的掃描分析結果。
倉庫地址:sonar-swift
截圖
支援的工具介紹
Infer
Infer 是由Facebook公司推出的靜態程式碼掃描工具,支援 C/C++/Java 語言的掃描。
連結:https://github.com/facebook/infer
Swiftlint
Swiftlint 是檢查 Swift 程式碼風格和規定的靜態程式碼分析工具,基本上以 GitHub's Swift 程式碼風格指南為基礎,報告的問題支援在 XCode 上展示,並且可以生成報告檔案,我們將讀取生成的報告檔案,然後上傳到 SonarQube 中。
連結:https://github.com/realm/SwiftLint
lizard
lizard 可以分析出 Objective-C 語言的圈複雜度,生成 xml 檔案,匯入到 SonarQube 的結果中。
連結:https://github.com/terryyin/lizard
OCLint
OCLint 是一個針對於 C/C++/Objective-C 語言的靜態程式碼分析工具,它與Infer不同的是,它更偏向於對程式碼規範一類問題的掃描,所以我們將 OCLint 部分的問題歸類到壞味道
上面;
連結:https://github.com/oclint/oclint
Fauxpas
Faux Pas 是一款商業軟體,支援對 Objective-C 語言進行掃描分析。
下載
https://github.com/tal-tech/sonar-swift/releases
安裝
將 jar 檔案放置到 SonarQube 的安裝目錄下的extensions/plugins/
目錄下,然後重啟 SonarQube
使用方式
參考以下指令碼使用
- build 構建 iOS 應用程式,並將 log 記錄輸出到檔案
- 使用 xcpretty 將log日誌輸出為 json 格式
- 執行 infer 分析,配置並忽略第三方的程式碼目錄,匯入剛剛的 json 編譯日誌
- 執行 swiftlint ,並將結果輸出到檔案
- 使用 lizard 以 xml 格式輸出
- 執行 SonarScanner ,並填寫報告路徑
參考執行指令碼
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
lizard --xml > lizard-report.xml
sonar-scanner -Dsonar.host.url=http://sonarqube -Dsonar.projectKey=app -Dsonar.sources=. -Dsonar.swift.swiftlint.report=swiftlint.txt -Dsonar.swift.lizard.report=lizard-report.xml -Dsonar.swift.infer.report=infer-out/report.json
要求
掃描時必須在 macOS 作業系統上執行。
公司介紹:
好未來(NYSE:TAL)(學而思)是一個以智慧教育和開放平臺為主體,以素質教育和課外輔導為載體,在全球範圍內服務公辦教育,助力民辦教育,探索未來教育新模式的科技教育公司。
目前好未來主要業務涉及智慧教育、教育開放平臺,K12課外教育及海外留學等,旗下擁有多個教育品牌。業務與投資雙輪驅動,目前已披露的投資專案包括學科網、喜馬拉雅等。2014年啟動未來之星專案,打造網際網路教育行業的創業者平臺,提供孵化、培訓、投資三位一體的服務。截至2020年5月底,好未來在全國有4萬多名員工,教學點覆蓋90個城市。
相關文章
- SonarQube學習(三)- 專案程式碼掃描
- WordPress外掛掃描工具plecost
- SonarQube學習(六)- SonarQube之掃描報告解析
- 持續整合工具之jenkins+sonarqube做程式碼掃描Jenkins
- sonar-scanner掃描程式碼出錯 SonarQube svn: E170001
- iOS開發之掃描二維碼iOS
- iOS專案冗餘資源掃描指令碼iOS指令碼
- 小白讀iOS冗餘資源掃描指令碼iOS指令碼
- iOS二維碼掃描iOS
- 嘿,我造了個程式碼高亮的外掛
- iOS 使用CIDetector掃描相簿二維碼、原生掃描iOSIDE
- iOS中二維碼掃描iOS
- iOS 掃描二維碼/條形碼iOS
- IOS 使用 ZbarSDK 二維碼掃描iOS
- ChatGPT 開源了第一款外掛,都來學習一下原始碼吧!ChatGPT原始碼
- iOS開發-原生二維碼的掃描和生成iOS
- 我釋出的第二個Flutter外掛-Flutter二維碼掃描(支援檔案、url、記憶體、相機)Flutter記憶體
- 使用OClint進行iOS專案的靜態程式碼掃描iOS
- ios打包 蒲公英生成二維碼掃描下載iOS
- .net持續整合sonarqube篇之 sonarqube與jenkins整合(外掛模式)Jenkins模式
- 我為 VS Code 開發了一個 Deno 外掛
- 分享一款免費開源的線上文件管理外掛
- SonarQube系列-透過配置掃描分析範圍,聚焦關鍵問題
- 使用ScanCode掃描開源專案的license
- 我們自研的 Ice 規則引擎開源了
- APIKiller--一款甲方掃描【神】器API
- 微信小程式掃描普通二維碼開啟小程式的方法微信小程式
- 一款檢測程式碼中TODO的eslint外掛EsLint
- 基於laravel的octobercms 掃描登入外掛 oc-plugin-scanloginLaravelPlugin
- 03 . Jenkins構建之程式碼掃描Jenkins
- 當我們說外掛系統的時候,我們在說什麼
- 我談網路掃描–之二
- Flutter外掛開發---iOS篇FlutteriOS
- iOS開發必備外掛iOS
- iOS 掃描二維碼(ZBarSDK)遇到的坑~解決方法iOS
- 我們開源了超過二十萬使用者的“套餐助手”小程式
- W13Scan 漏洞掃描器之XSS外掛模組編寫示例
- Spring Boot 實戰:我們的第一款開源軟體Spring Boot