[實踐]Sonar Xcode8兼容

全部文章目錄:http://my.oschina.net/ChenTF/blog/677112git

本篇文章地址: https://my.oschina.net/ChenTF/blog/806565github

若是對您有幫助還請 "贊" 一下哈, 有問題可留言或加QQ羣:323276186objective-c

1. 背景

在Xcode8升級後, 原有的xctool已不支持Xcode8, 需改用xcodebuild + xcpretty 來替代xctool環節。本文是對具體修復內容與實踐進行分享。以前如何設置看個人這篇文章: [實踐]iOS Sonar集成流程詳解shell

2. 主要替代環節

Clean 環節 :json

原: runCommand /dev/stdout $xctoolCmdPrefix -scheme "$appScheme" cleanxcode

新: xcodebuild clean服務器

Build 環節 :app

原: runCommand /dev/stdout $xctoolCmdPrefix -scheme "$appScheme" -reporter json-compilation-database:compile_commands.json build

新: 指定證書與描述文件版本(run-sonar_V2.sh)
xcodebuild -workspace "${workspaceFile}" -scheme "${appScheme}" CODE_SIGN_IDENTITY="${codesign}" PROVISIONING_PROFILE="${profilename}" ONLY_ACTIVE_ARCH=NO -configuration Release  build | tee xcodebuild.log | xcpretty -r json-compilation-database --output compile_commands.json

新: 模擬器版本(run-sonar_V2.1.sh)
xcodebuild -workspace "${workspaceFile}" -scheme "${appScheme}" -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6' ONLY_ACTIVE_ARCH=NO -configuration Release  build | tee xcodebuild.log | xcpretty -r json-compilation-database --output compile_commands.json

3. 修復步驟

本人將run-sonar_V2.sh修改, 造成了最新的腳步, 內部將xctool部分已修改爲xcodebuild+xcpretty環節, 因Xcode8最新版須要制定證書與描述文件, 因此在sonar-project.properties中新增了sonar.objectivec.codesign與sonar.objectivec.profilename參數.iphone

  • 安裝xcpretty
  • 更新oclint到0.11版本
  • 將run-sonar_V2.sh與sonar-project.properties拷貝到項目的根目錄下, 修改sonar-project.properties參數
  • 修改sonar服務器的規則(看4.6)
  • 運行出結果

接入須要的文件網站

4. Xcode8兼容時遇到的問題

4.1. xcodebuild 提示Build Fail。提示"Set the provisioning profile value to "Automatic" in the build settings editor, or switch to manual signing in the project editor."

經過腳原本更改Auto爲Manual:

sed -i "" "s%\ProvisioningStyle.*%\ProvisioningStyle = Manual;%g" "${projectFile}/project.pbxproj"

##4.2. xcpretty 提示 ":in `===': invalid byte sequence in US-ASCII (ArgumentError)" 設置本地環境: export LC_ALL="en_US.UTF-8"

4.3. 安裝xcpretty出錯"Operation not permitted"

用最高的root用戶權限安裝竟然還提示這個錯誤!! 查了下發現是在OS X10.11後, 即便是管理員帳戶也不能修改/usr/bin目錄. 修復辦法:

方法一: 安裝到/usr/local/bin目錄下

$ sudo gem install -n /usr/local/bin xcpretty --version 0.2.3

方法二: 在Recovery模式下安裝

  • 重啓電腦
  • 按住Command+R進入Recovery模式
  • 打開Terminal
  • gem install xcpretty --version 0.2.3

4.4. oclint分析錯誤報」too many errors emitted, stopping now」

是由於項目中錯誤太多, 超過了oclint的默認上限, 因此oclint中止了工做.

設置-max-priority-1 -max-priority-2 -max-priority-3的值, 提升上限,

例:oclint-json-compilation-database -- -max-priority-1 10000 -max-priority-2 10000 -max-priority-3 10000 -rc LONG_LINE=150 -report-type pmd -o oclint.xml

4.5. oclint生成的數據內容爲空, 或者生不成制定的文件

將oclint升級到0.11版本以上, oclint0.10.3版本分析Xcode8工程分析不出來.

4.6. 執行sonar-runner時提示」The rule ‘XXX’ does not exist」

在oclint的0.11版本, 新增了些規則, 須要更新sonar服務器上對應的規則列表.

路徑:sonar-objective-c-master-2/sonar-objective-c-plugin/src/main/resources/org/sonar/plugins/objectivec下的profile-oclint.xml與rules-oclint.xml這兩個文件。 本人已將最新的規則列表進行整理, 直接替換便可.

接入須要的文件

4.7 項目中設置了錯誤的TeamID,用腳本設置的正確TeamID不起做用

在腳本中設置

sed -i "" "s%\DevelopmentTeam.*%\ %g" "${projectFile}/project.pbxproj"
sed -i "" "s%\DEVELOPMENT_TEAM.*%\ %g" "${projectFile}/project.pbxproj"

4.8 關於選擇模擬器調試

有朋友實踐使用模擬器也能跑出結果, 同時也就不須要制定證書與描述文件了。這確實是一種更方便的方法, 將xcodebuild build的命令中添加以下設置, 並刪掉證書與描述文件便可。 感謝倫, WillkYang同窗.

-sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6'

4.9 xcpretty提示command not found

在Jenkins所在機器上經過Terminal能執行xcpretty命令, 但在Jenkins網站上執行提示command not found. 是環境問題.

解決方案: 在Execute shell的第一行加入環境設置就可, 例子

PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

本篇文章地址: https://my.oschina.net/ChenTF/blog/806565

歡迎轉載, 請註明出處.

相關文章
相關標籤/搜索