2014-03-13 76 views
3

我想知道當iOS應用程序在Xcode bot上運行單元測試時如何生成gcda文件。在Xcode bot上運行單元測試後生成.gcda文件

我使用this blog來配置Xcode以生成測試覆蓋率文件並使用利用lcov的腳本生成報告。我可以始終在我的開發計算機上創建覆蓋率文件和報告,但是當機器人嘗試相同的過程時,不會顯示任何.gcda文件。當機器人叫__gcov_flush(),我可以看到下面的錯誤日誌中:

profiling:/Library/Server/Xcode/Data/BotRuns/Cache/c0jhd288-c473-c473-2432-f8219hdh98dh89/DerivedData/Build/Intermediates/AppName.build/Debug-iphonesimulator/appName.build/Objects-normal/i386/ClassName.gcda: cannot open 

我知道這是應用程序的gcov的沖洗過程中,因爲我把日誌直接之前和呼叫」

NSLog(@"[application performSelector:@selector(gtm_gcov_flush)]; will be CALLED"); 
[application performSelector:@selector(gtm_gcov_flush)]; 
NSLog(@"[application performSelector:@selector(gtm_gcov_flush)]; was CALLED"); 
後發生

注:gtm_gcov_flush只要求__gcov_flush()沒有別的

搜索「個人資料gcda:無法打開」導致我here,但我已經繼弗洛建議的要求翼上述博客鏈接。可能有一些權限問題,但這似乎不大可能,因爲Xcode是生成gcda文件的。

我已經檢查了/Library/Server/Xcode/Data/BotRuns/,/Users/username/Library/Developer/Xcode/DerivedData//var/_xcstest gcda文件的目錄及其子目錄,並且沒有看到。但是,/Library/Server/Xcode/Data/BotRuns/Cache/c0jhd288-c473-c473-2432-f8219hdh98dh89/DerivedData/Build/Intermediates/AppName.build/Debug-iphonesimulator/appName.build/Objects-normal/i386/中有gcno,o,d和dia文件(應該有gcda文件)。

就像我說的,我在本地運行時沒有問題。腳本XcodeCoverage/getcov正在我的方案的存檔後操作階段被調用。我在我的開發mac上以及通過CI服務器上的Xcode服務使用Xcode 5.0.2。單元測試正在與XCTest框架一起運行。

感謝您的幫助提前!

回答

2

好吧,看起來確實是懷疑的許可問題。我發現,用於使用Xcode的5+代碼覆蓋率報告有很大的參考:

http://www.bubblefoundry.com/blog/2013/11/code-coverage-revisited/

正如上述文章中描述的,有管理的Xcode機器人,_teamserver和_xcstest兩個用戶。 _xctest與_teamserver不具有相同的權限,因此必須將.gcda文件的目標文件夾的權限設置爲允許通過_xctest(即對該文件夾的組訪問權限)進行訪問。我按照文章的建議實施了腳本,但是我的CI服務器在歸檔期間崩潰了。顯然在歸檔時,文件夾引用不存在。所以我更新到:

# Setting these permissions is required to successfully flush 
# test coverage data with __gcov_flush(); 

if [ -d ${OBJECT_FILE_DIR_normal}/i386 ]; then 
    chmod 775 ${OBJECT_FILE_DIR_normal}/i386 
fi 

除了成功生成覆蓋率文件,我也將它們複製到另一個文件夾。我的測試覆蓋率報告是在存檔的操作後階段生成的,我無法在該階段找到訪問這些文件的方法。原因是他們在

/Library/Server/Xcode/Data/BotRuns/Cache/c0jhd288-c473-c473-2432-f8219hdh98dh89/DerivedData/Build/Intermediates/AppName.build/Debug-iphonesimulator/appName.build/Objects-normal/i386/

產生,但存檔在運行:

/Library/Server/Xcode/Data/BotRuns/Cache/c5f4462c-c473-c473-2432-5ac4d0b46nal/DerivedData/Build/Intermediates/ArchiveIntermediates/AppName/BuildProductsPath/Release-iphoneos/

有可能是一個聰明的方式,以後出口的覆蓋率文件的參考目錄,但我我不確定。最後,我不是任何方式的終端超級用戶,所以請隨時提供建議!

只是要注意的,我也引用這些博客通過配置的幫助:

http://matt.vlasach.com/xcode-bots-hosted-git-repositories-and-automated-testflight-builds/

http://qualitycoding.org/xcode-code-coverage/

http://ikennd.ac/blog/2013/10/xcode-bots-common-problems-and-workarounds/