// CheckIsXcodeCLTInstalled ... func CheckIsXcodeCLTInstalled() error { progInstallPth, err := CheckProgramInstalledPath("xcodebuild") if err != nil { fmt.Println() log.Warn("It seems that the Xcode Command Line Tools are not installed on your system.") log.Infoln("You can install it by running the following command in your Terminal:") log.Infoln("xcode-select --install") log.Warn("Once the installation is finished you should call the bitrise setup again.") return err } xcodeSelectPth, err := bitrise.RunCommandAndReturnStdout("xcode-select", "-p") if err != nil { log.Infoln("") return errors.New("Failed to get Xcode path") } isFullXcodeAvailable := false verStr, err := bitrise.RunCommandAndReturnCombinedStdoutAndStderr("xcodebuild", "-version") if err != nil { // No full Xcode available, only the Command Line Tools // verStr is something like "xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance" isFullXcodeAvailable = false } else { // version OK - full Xcode available // we'll just format it a bit to fit into one line isFullXcodeAvailable = true verStr = strings.Join(strings.Split(verStr, "\n"), " | ") } log.Infoln(" * "+colorstring.Green("[OK]")+" xcodebuild path :", progInstallPth) if !isFullXcodeAvailable { log.Infoln(" version (xcodebuild) :", colorstring.Yellowf("%s", verStr)) } else { log.Infoln(" version (xcodebuild) :", verStr) } log.Infoln(" active Xcode (Command Line Tools) path (xcode-select --print-path) :", xcodeSelectPth) if !isFullXcodeAvailable { log.Warn(colorstring.Yellowf("%s", "No Xcode found, only the Xcode Command Line Tools are available!")) log.Warn(colorstring.Yellowf("%s", "Full Xcode is required to build, test and archive iOS apps!")) } return nil }
func printSummary() { totalStepCount := 0 successStepCount := 0 failedStepCount := 0 failedNotImportantStepCount := 0 skippedStepCount := 0 successStepCount += len(buildRunResults.SuccessSteps) failedStepCount += len(buildRunResults.FailedSteps) failedNotImportantStepCount += len(buildRunResults.FailedNotImportantSteps) skippedStepCount += len(buildRunResults.SkippedSteps) totalStepCount = successStepCount + failedStepCount + failedNotImportantStepCount + skippedStepCount fmt.Println() log.Infoln("==> Summary:") runTime := time.Now().Sub(startTime) log.Info("Total run time: " + bitrise.TimeToFormattedSeconds(runTime, " seconds")) if totalStepCount > 0 { log.Infof("Out of %d steps:", totalStepCount) if successStepCount > 0 { log.Info(colorstring.Greenf(" * %d was successful", successStepCount)) } if failedStepCount > 0 { log.Info(colorstring.Redf(" * %d failed", failedStepCount)) } if failedNotImportantStepCount > 0 { log.Info(colorstring.Yellowf(" * %d failed but was marked as skippable and", failedNotImportantStepCount)) } if skippedStepCount > 0 { log.Info(colorstring.Whitef(" * %d was skipped", skippedStepCount)) } fmt.Println() if failedStepCount > 0 { log.Fatal("FINISHED but a couple of steps failed - Ouch") } else { log.Info("DONE - Congrats!!") if failedNotImportantStepCount > 0 { log.Warn("P.S.: a couple of non imporatant steps failed") } } } }