// GetSimulator ... func GetSimulator(simulatorPlatform, simulatorDevice, simulatorOsVersion string) (models.SimInfoModel, error) { cmd := exec.Command("xcrun", "simctl", "list") outBytes, err := cmd.CombinedOutput() if err != nil { return models.SimInfoModel{}, err } simctlListOut := string(outBytes) allSimIDsGroupedBySimVersion := collectAllSimIDs(simctlListOut) // // map desired inputs simulatorPlatformSplit := strings.Split(simulatorPlatform, " Simulator") if len(simulatorPlatformSplit) == 0 { return models.SimInfoModel{}, fmt.Errorf("failed to parse simulator platform (%s)", simulatorPlatform) } if simulatorDevice == "iPad" { log.Warn("Given device (%s) is deprecated, using (iPad 2)...", simulatorDevice) simulatorDevice = "iPad 2" } desiredPlatform := simulatorPlatformSplit[0] desiredOsVersion := "" if simulatorOsVersion == "latest" { latestOsVersion, err := getLatestOsVersion(desiredPlatform, simulatorDevice, allSimIDsGroupedBySimVersion) if err != nil { return models.SimInfoModel{}, fmt.Errorf("failed to get latest os version, error: %s", err) } desiredOsVersion = latestOsVersion } else { desiredOsVersion = fmt.Sprintf("%s %s", desiredPlatform, simulatorOsVersion) } // // find desired simulator simInfoList, found := allSimIDsGroupedBySimVersion[desiredOsVersion] if !found { return models.SimInfoModel{}, fmt.Errorf("no simulator found for desired os: %s", desiredOsVersion) } for _, simInfo := range simInfoList { if simInfo.Name == simulatorDevice { return simInfo, nil } } return models.SimInfoModel{}, fmt.Errorf("%s - %s - %s not found", simulatorPlatform, simulatorDevice, simulatorOsVersion) }
// GetXcodeVersion ... func GetXcodeVersion() (models.XcodebuildVersionModel, error) { cmd := exec.Command("xcodebuild", "-version") outBytes, err := cmd.CombinedOutput() outStr := string(outBytes) if err != nil { return models.XcodebuildVersionModel{}, fmt.Errorf("xcodebuild -version failed, err: %s, details: %s", err, outStr) } split := strings.Split(outStr, "\n") if len(split) == 0 { return models.XcodebuildVersionModel{}, fmt.Errorf("failed to parse xcodebuild version output (%s)", outStr) } xcodebuildVersion := split[0] buildVersion := split[1] split = strings.Split(xcodebuildVersion, " ") if len(split) != 2 { return models.XcodebuildVersionModel{}, fmt.Errorf("failed to parse xcodebuild version output (%s)", outStr) } version := split[1] split = strings.Split(version, ".") majorVersionStr := split[0] majorVersion, err := strconv.ParseInt(majorVersionStr, 10, 32) if err != nil { return models.XcodebuildVersionModel{}, fmt.Errorf("failed to parse xcodebuild version output (%s), error: %s", outStr, err) } return models.XcodebuildVersionModel{ Version: xcodebuildVersion, BuildVersion: buildVersion, MajorVersion: majorVersion, }, nil }
func getXcodeDeveloperDirPath() (string, error) { cmd := exec.Command("xcode-select", "--print-path") outBytes, err := cmd.CombinedOutput() outStr := string(outBytes) return strings.TrimSpace(outStr), err }