Search code examples
iosobjective-ccocoapodsoclint

How to use cocoapods integrated project with OCLint?


I can build the project and generate OCLint report on a project without cocoapods but when integrated with cocoapods the build for project is successful but the build for OCLint results into errors for the file which are present into cocoapods and build fails.

enter image description here

So how to make build successful for cocoapods with OCLint?

Any help would be appreciated.


Solution

  • Below is the script I am using to generate html file for cocoapods integrated project with OCLint.

    OCLINT_HOME is the path for oclint downloaded folder. I have renamed the folder to oclintrelease.

    OCLINT_HOME=/Users/Dheeraj/Downloads/oclintrelease
    export PATH=$OCLINT_HOME/bin:$PATH
    
    hash oclint &> /dev/null
    if [ $? -eq 1 ]; then
    echo >&2 "oclint not found, analyzing stopped"
    exit 1
    fi
    
    cd ${TARGET_TEMP_DIR}
    
    if [ ! -f compile_commands.json ]; then
    echo "[*] compile_commands.json not found, possibly clean was performed"
    echo "Workspace Path : ${MY_WORKSPACE}"
    echo "[*] starting xcodebuild to rebuild the project.."
    # clean previous output
    
    if [ -f xcodebuild.log ]; then
    rm xcodebuild.log
    echo "Oclint Clean performed"
    fi
    
    cd ${SRCROOT}
    
    xcodebuild clean
    
    #build xcodebuild.log
    xcodebuild ONLY_ACTIVE_ARCH=NO -workspace ${PROJECT_NAME}.xcworkspace -scheme ${PROJECT_NAME} -configuration Debug clean build| tee ${TARGET_TEMP_DIR}/xcodebuild.log
    #xcodebuild <options>| tee ${TARGET_TEMP_DIR}/xcodebuild.log
    
    echo "[*] transforming xcodebuild.log into compile_commands.json..."
    cd ${TARGET_TEMP_DIR}
    #transform it into compile_commands.json
    oclint-xcodebuild
    
    fi
    
    echo "[*] starting analyzing"
    cd ${TARGET_TEMP_DIR}
    
    oclint-json-compilation-database -e /Users/Dheeraj/Desktop/sampleCocoaPods/Pods/ -v oclint_args "-report-type html -o /Users/Dheeraj/NewHTMLREPORT.html" | sed 's/\(.*\.\m\{1,2\}:[0-9]*:[0-9]*:\)/\1 warning:/'
    

    It will exclude all the Pods related files.

    If you want to include Pods file as well then replace last line in script by :

    oclint-json-compilation-database -v oclint_args "-report-type html -o /Users/Dheeraj/NewHTMLREPORT.html" | sed 's/\(.*\.\m\{1,2\}:[0-9]*:[0-9]*:\)/\1 warning:/'
    

    Notes :

    1. Please try first with a short sample Application including cocoapods and once you have generated report for sample application then integrate script into your real application as building with OCLint takes a lot of time to generate the report.
    2. Always clean application and then build with OCLint.

    Link for reference