// FindAndValidateIdentity ... // IMPORTANT: you have to C.CFRelease the returned items (one-by-one)!! // you can use the ReleaseIdentityWithRefList method to do that func FindAndValidateIdentity(identityLabel string, isFullLabelMatch bool) ([]IdentityWithRefModel, error) { foundIdentityRefs, err := FindIdentity(identityLabel, isFullLabelMatch) if err != nil { return nil, fmt.Errorf("Failed to find Identity, error: %s", err) } if len(foundIdentityRefs) < 1 { return nil, nil } // check validity validIdentityRefs := []IdentityWithRefModel{} for _, aIdentityRef := range foundIdentityRefs { cert, err := GetCertificateDataFromIdentityRef(aIdentityRef.KeychainRef) if err != nil { return validIdentityRefs, fmt.Errorf("Failed to read certificate data, error: %s", err) } if err := certutil.CheckCertificateValidity(cert); err != nil { log.Warning(colorstring.Yellowf("Certificate is not valid, skipping: %s", err)) continue } validIdentityRefs = append(validIdentityRefs, aIdentityRef) } return validIdentityRefs, nil }
// PrintInstalledXcodeInfos ... func PrintInstalledXcodeInfos() error { xcodeSelectPth, err := cmdex.RunCommandAndReturnStdout("xcode-select", "--print-path") if err != nil { xcodeSelectPth = "xcode-select --print-path failed to detect the location of activate Xcode Command Line Tools path" } progInstallPth, err := utils.CheckProgramInstalledPath("xcodebuild") if err != nil { return errors.New("xcodebuild is not installed") } isFullXcodeAvailable := false verStr, err := cmdex.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 }