From 822fa7e09fd0ef83e0cefe15a1f8329ac757d1f1 Mon Sep 17 00:00:00 2001 From: LaszloP <7979773+lpusok@users.noreply.github.com> Date: Thu, 5 Mar 2026 17:45:19 +0100 Subject: [PATCH 1/3] Added certificateutil as-is --- certificateutil/filter.go | 58 +++++++++++ certificateutil/filter_test.go | 113 +++++++++++++++++++++ certificateutil/info_model.go | 119 ++++++++++++++++++++++ certificateutil/test_util.go | 78 ++++++++++++++ certificateutil/util.go | 179 +++++++++++++++++++++++++++++++++ 5 files changed, 547 insertions(+) create mode 100644 certificateutil/filter.go create mode 100644 certificateutil/filter_test.go create mode 100644 certificateutil/info_model.go create mode 100644 certificateutil/test_util.go create mode 100644 certificateutil/util.go diff --git a/certificateutil/filter.go b/certificateutil/filter.go new file mode 100644 index 00000000..5baa1daa --- /dev/null +++ b/certificateutil/filter.go @@ -0,0 +1,58 @@ +package certificateutil + +import "sort" + +// FilterCertificateInfoModelsByFilterFunc ... +func FilterCertificateInfoModelsByFilterFunc(certificates []CertificateInfoModel, filterFunc func(certificate CertificateInfoModel) bool) []CertificateInfoModel { + filteredCertificates := []CertificateInfoModel{} + + for _, certificate := range certificates { + if filterFunc(certificate) { + filteredCertificates = append(filteredCertificates, certificate) + } + } + + return filteredCertificates +} + +// ValidCertificateInfo contains the certificate infos filtered as valid, invalid and duplicated common name certificates +type ValidCertificateInfo struct { + ValidCertificates, + InvalidCertificates, + DuplicatedCertificates []CertificateInfoModel +} + +// FilterValidCertificateInfos filters out invalid and duplicated common name certificaates +func FilterValidCertificateInfos(certificateInfos []CertificateInfoModel) ValidCertificateInfo { + var invalidCertificates []CertificateInfoModel + nameToCerts := map[string][]CertificateInfoModel{} + for _, certificateInfo := range certificateInfos { + if certificateInfo.CheckValidity() != nil { + invalidCertificates = append(invalidCertificates, certificateInfo) + continue + } + + nameToCerts[certificateInfo.CommonName] = append(nameToCerts[certificateInfo.CommonName], certificateInfo) + } + + var validCertificates, duplicatedCertificates []CertificateInfoModel + for _, certs := range nameToCerts { + if len(certs) == 0 { + continue + } + + sort.Slice(certs, func(i, j int) bool { + return certs[i].EndDate.After(certs[j].EndDate) + }) + validCertificates = append(validCertificates, certs[0]) + if len(certs) > 1 { + duplicatedCertificates = append(duplicatedCertificates, certs[1:]...) + } + } + + return ValidCertificateInfo{ + ValidCertificates: validCertificates, + InvalidCertificates: invalidCertificates, + DuplicatedCertificates: duplicatedCertificates, + } +} diff --git a/certificateutil/filter_test.go b/certificateutil/filter_test.go new file mode 100644 index 00000000..ad5e6ece --- /dev/null +++ b/certificateutil/filter_test.go @@ -0,0 +1,113 @@ +package certificateutil + +import ( + "reflect" + "strings" + "testing" + "time" + + "github.com/stretchr/testify/require" +) + +func TestFilterCertificateInfoModelsByFilterFunc(t *testing.T) { + filterableCerts := []CertificateInfoModel{ + CertificateInfoModel{TeamID: "my-team-id"}, + CertificateInfoModel{TeamID: "find-this-team-id"}, + CertificateInfoModel{TeamID: "my--another-team-id"}, + CertificateInfoModel{TeamID: "test-team-id", CommonName: "test common name"}, + CertificateInfoModel{TeamID: "test-team-id2", CommonName: "find this common name"}, + } + expectedCertsByTeamID := []CertificateInfoModel{ + CertificateInfoModel{TeamID: "find-this-team-id"}, + } + + foundCerts := FilterCertificateInfoModelsByFilterFunc(filterableCerts, func(cert CertificateInfoModel) bool { return cert.TeamID == "find-this-team-id" }) + require.Equal(t, expectedCertsByTeamID, foundCerts) + + expectedCertsByCommonNameExact := []CertificateInfoModel{ + CertificateInfoModel{TeamID: "test-team-id2", CommonName: "find this common name"}, + } + + foundCerts = FilterCertificateInfoModelsByFilterFunc(filterableCerts, func(cert CertificateInfoModel) bool { return cert.CommonName == "find this common name" }) + require.Equal(t, expectedCertsByCommonNameExact, foundCerts) + + expectedCertsByCommonNameMatch := []CertificateInfoModel{ + CertificateInfoModel{TeamID: "test-team-id", CommonName: "test common name"}, + CertificateInfoModel{TeamID: "test-team-id2", CommonName: "find this common name"}, + } + + foundCerts = FilterCertificateInfoModelsByFilterFunc(filterableCerts, func(cert CertificateInfoModel) bool { return strings.Contains(cert.CommonName, "common name") }) + require.Equal(t, expectedCertsByCommonNameMatch, foundCerts) +} + +func TestFilterValidCertificateInfos(t *testing.T) { + const serial = int64(1234) + const teamID = "MYTEAMID" + const teamName = "BITFALL FEJLESZTO KORLATOLT FELELOSSEGU TARSASAG" + const commonName = "Apple Developer: test" + validExpiry := time.Now().AddDate(1, 0, 0) + earlierValidExpiry := time.Now().AddDate(0, 1, 0) + invalidExpiry := time.Now().AddDate(-1, 0, 0) + + latestValidCert, privateKey, err := GenerateTestCertificate(serial, teamID, teamName, commonName, validExpiry) + if err != nil { + t.Errorf("init: failed to generate certificate, error: %s", err) + } + latestValidCertInfo := NewCertificateInfo(*latestValidCert, privateKey) + t.Logf("Test certificate generated: %s", latestValidCertInfo) + + earlierValidCert, privateKey, err := GenerateTestCertificate(serial, teamID, teamName, commonName, earlierValidExpiry) + if err != nil { + t.Errorf("init: failed to generate certificate, error: %s", err) + } + earlierValidCertInfo := NewCertificateInfo(*earlierValidCert, privateKey) + t.Logf("Test certificate generated: %s", earlierValidCertInfo) + + invalidCert, privateKey, err := GenerateTestCertificate(serial, teamID, teamName, commonName, invalidExpiry) + if err != nil { + t.Errorf("init: failed to generate certificate, error: %s", err) + } + invalidCertInfo := NewCertificateInfo(*invalidCert, privateKey) + t.Logf("Test certificate generated: %s", invalidCertInfo) + + tests := []struct { + name string + certificateInfos []CertificateInfoModel + want ValidCertificateInfo + }{ + { + name: "one valid cert", + certificateInfos: []CertificateInfoModel{latestValidCertInfo}, + want: ValidCertificateInfo{ + ValidCertificates: []CertificateInfoModel{latestValidCertInfo}, + InvalidCertificates: nil, + DuplicatedCertificates: nil, + }, + }, + { + name: "one valid, one invalid cert with same name", + certificateInfos: []CertificateInfoModel{latestValidCertInfo, invalidCertInfo}, + want: ValidCertificateInfo{ + ValidCertificates: []CertificateInfoModel{latestValidCertInfo}, + InvalidCertificates: []CertificateInfoModel{invalidCertInfo}, + DuplicatedCertificates: nil, + }, + }, + { + name: "2 valid, duplicated certs", + certificateInfos: []CertificateInfoModel{latestValidCertInfo, earlierValidCertInfo, invalidCertInfo}, + want: ValidCertificateInfo{ + ValidCertificates: []CertificateInfoModel{latestValidCertInfo}, + InvalidCertificates: []CertificateInfoModel{invalidCertInfo}, + DuplicatedCertificates: []CertificateInfoModel{earlierValidCertInfo}, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := FilterValidCertificateInfos(tt.certificateInfos); !reflect.DeepEqual(got, tt.want) { + t.Errorf("FilterValidCertificateInfos() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/certificateutil/info_model.go b/certificateutil/info_model.go new file mode 100644 index 00000000..0a0a8342 --- /dev/null +++ b/certificateutil/info_model.go @@ -0,0 +1,119 @@ +package certificateutil + +import ( + "crypto/rand" + "crypto/sha1" + "crypto/x509" + "fmt" + "strings" + "time" + + "github.com/bitrise-io/go-pkcs12" +) + +// CertificateInfoModel ... +type CertificateInfoModel struct { + CommonName string + TeamName string + TeamID string + EndDate time.Time + StartDate time.Time + + Serial string + SHA1Fingerprint string + + Certificate x509.Certificate + PrivateKey interface{} +} + +// String ... +func (info CertificateInfoModel) String() string { + team := fmt.Sprintf("%s (%s)", info.TeamName, info.TeamID) + certInfo := fmt.Sprintf("Serial: %s, Name: %s, Team: %s, Expiry: %s", info.Serial, info.CommonName, team, info.EndDate) + + err := info.CheckValidity() + if err != nil { + certInfo = certInfo + fmt.Sprintf(", error: %s", err) + } + + return certInfo +} + +// CheckValidity ... +func CheckValidity(certificate x509.Certificate) error { + timeNow := time.Now() + if !timeNow.After(certificate.NotBefore) { + return fmt.Errorf("Certificate is not yet valid - validity starts at: %s", certificate.NotBefore) + } + if !timeNow.Before(certificate.NotAfter) { + return fmt.Errorf("Certificate is not valid anymore - validity ended at: %s", certificate.NotAfter) + } + return nil +} + +// CheckValidity ... +func (info CertificateInfoModel) CheckValidity() error { + return CheckValidity(info.Certificate) +} + +// EncodeToP12 encodes a CertificateInfoModel in pkcs12 (.p12) format. +func (info CertificateInfoModel) EncodeToP12(passphrase string) ([]byte, error) { + return pkcs12.Encode(rand.Reader, info.PrivateKey, &info.Certificate, nil, passphrase) +} + +// NewCertificateInfo ... +func NewCertificateInfo(certificate x509.Certificate, privateKey interface{}) CertificateInfoModel { + fingerprint := sha1.Sum(certificate.Raw) + fingerprintStr := fmt.Sprintf("%x", fingerprint) + + return CertificateInfoModel{ + CommonName: certificate.Subject.CommonName, + TeamName: strings.Join(certificate.Subject.Organization, " "), + TeamID: strings.Join(certificate.Subject.OrganizationalUnit, " "), + EndDate: certificate.NotAfter, + StartDate: certificate.NotBefore, + Serial: certificate.SerialNumber.String(), + SHA1Fingerprint: fingerprintStr, + + Certificate: certificate, + PrivateKey: privateKey, + } +} + +// InstalledCodesigningCertificateInfos ... +func InstalledCodesigningCertificateInfos() ([]CertificateInfoModel, error) { + certificates, err := InstalledCodesigningCertificates() + if err != nil { + return nil, err + } + + infos := []CertificateInfoModel{} + for _, certificate := range certificates { + if certificate != nil { + infos = append(infos, NewCertificateInfo(*certificate, nil)) + } + } + + return infos, nil +} + +// InstalledInstallerCertificateInfos ... +func InstalledInstallerCertificateInfos() ([]CertificateInfoModel, error) { + certificates, err := InstalledMacAppStoreCertificates() + if err != nil { + return nil, err + } + + infos := []CertificateInfoModel{} + for _, certificate := range certificates { + if certificate != nil { + infos = append(infos, NewCertificateInfo(*certificate, nil)) + } + } + + installerCertificates := FilterCertificateInfoModelsByFilterFunc(infos, func(cert CertificateInfoModel) bool { + return strings.Contains(cert.CommonName, "Installer") + }) + + return installerCertificates, nil +} diff --git a/certificateutil/test_util.go b/certificateutil/test_util.go new file mode 100644 index 00000000..1123373d --- /dev/null +++ b/certificateutil/test_util.go @@ -0,0 +1,78 @@ +package certificateutil + +import ( + "crypto/rand" + "crypto/rsa" + "crypto/x509" + "crypto/x509/pkix" + "math/big" + "time" +) + +// GenerateTestCertificate creates a certificate (signed by a self-signed CA cert) for test purposes +func GenerateTestCertificate(serial int64, teamID, teamName, commonName string, expiry time.Time) (*x509.Certificate, *rsa.PrivateKey, error) { + CAtemplate := &x509.Certificate{ + IsCA: true, + BasicConstraintsValid: true, + SubjectKeyId: []byte{1, 2, 3}, + SerialNumber: big.NewInt(1234), + Subject: pkix.Name{ + Country: []string{"US"}, + Organization: []string{"Pear Worldwide Developer Relations"}, + CommonName: "Pear Worldwide Developer Relations CA", + }, + NotBefore: time.Now(), + NotAfter: time.Now().AddDate(1, 0, 0), + // see http://golang.org/pkg/crypto/x509/#KeyUsage + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth, x509.ExtKeyUsageServerAuth}, + KeyUsage: x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign, + } + + CAprivatekey, err := rsa.GenerateKey(rand.Reader, 2048) + if err != nil { + return nil, nil, err + } + + // Self-signed certificate, parent is the template + CAcertData, err := x509.CreateCertificate(rand.Reader, CAtemplate, CAtemplate, &CAprivatekey.PublicKey, CAprivatekey) + if err != nil { + return nil, nil, err + } + CAcert, err := x509.ParseCertificate(CAcertData) + if err != nil { + return nil, nil, err + } + + template := &x509.Certificate{ + IsCA: true, + BasicConstraintsValid: true, + SerialNumber: big.NewInt(serial), + Subject: pkix.Name{ + Country: []string{"US"}, + Organization: []string{teamName}, + OrganizationalUnit: []string{teamID}, + CommonName: commonName, + }, + NotBefore: time.Now(), + NotAfter: expiry, + // see http://golang.org/pkg/crypto/x509/#KeyUsage + KeyUsage: x509.KeyUsageDigitalSignature, + } + + privatekey, err := rsa.GenerateKey(rand.Reader, 2048) + if err != nil { + return nil, nil, err + } + + certData, err := x509.CreateCertificate(rand.Reader, template, CAcert, &privatekey.PublicKey, CAprivatekey) + if err != nil { + return nil, nil, err + } + + cert, err := x509.ParseCertificate(certData) + if err != nil { + return nil, nil, err + } + + return cert, privatekey, nil +} diff --git a/certificateutil/util.go b/certificateutil/util.go new file mode 100644 index 00000000..50697675 --- /dev/null +++ b/certificateutil/util.go @@ -0,0 +1,179 @@ +package certificateutil + +import ( + "bufio" + "crypto/x509" + "encoding/pem" + "fmt" + "regexp" + "strings" + + "github.com/bitrise-io/go-pkcs12" + "github.com/bitrise-io/go-utils/command" + "github.com/bitrise-io/go-utils/fileutil" + "github.com/pkg/errors" +) + +func commandError(printableCmd string, cmdOut string, cmdErr error) error { + return errors.Wrapf(cmdErr, "%s failed, out: %s", printableCmd, cmdOut) +} + +// CertificatesFromPKCS12Content returns an array of CertificateInfoModel +// Used to parse p12 file containing multiple codesign identities (exported from macOS Keychain) +func CertificatesFromPKCS12Content(content []byte, password string) ([]CertificateInfoModel, error) { + privateKeys, certificates, err := pkcs12.DecodeAll(content, password) + if err != nil { + return nil, err + } + + if len(certificates) != len(privateKeys) { + return nil, errors.New("pkcs12: different number of certificates and private keys found") + } + + if len(certificates) == 0 { + return nil, errors.New("pkcs12: no certificate and private key pair found") + } + + infos := []CertificateInfoModel{} + for i, certificate := range certificates { + if certificate != nil { + infos = append(infos, NewCertificateInfo(*certificate, privateKeys[i])) + } + } + + return infos, nil +} + +// CertificatesFromPKCS12File ... +func CertificatesFromPKCS12File(pkcs12Pth, password string) ([]CertificateInfoModel, error) { + content, err := fileutil.ReadBytesFromFile(pkcs12Pth) + if err != nil { + return nil, err + } + + return CertificatesFromPKCS12Content(content, password) +} + +// CertificateFromDERContent ... +func CertificateFromDERContent(content []byte) (*x509.Certificate, error) { + return x509.ParseCertificate(content) +} + +// CeritifcateFromPemContent ... +func CeritifcateFromPemContent(content []byte) (*x509.Certificate, error) { + block, _ := pem.Decode(content) + if block == nil || block.Bytes == nil || len(block.Bytes) == 0 { + return nil, fmt.Errorf("failed to parse profile from: %s", string(content)) + } + return CertificateFromDERContent(block.Bytes) +} + +func installedCodesigningCertificateNamesFromOutput(out string) ([]string, error) { + pettern := `^[0-9]+\) (?P.*) "(?P.*)"` + re := regexp.MustCompile(pettern) + + certificateNameMap := map[string]bool{} + scanner := bufio.NewScanner(strings.NewReader(out)) + for scanner.Scan() { + line := strings.TrimSpace(scanner.Text()) + if matches := re.FindStringSubmatch(line); len(matches) == 3 { + name := matches[2] + certificateNameMap[name] = true + } + } + if err := scanner.Err(); err != nil { + return nil, err + } + + names := []string{} + for name := range certificateNameMap { + names = append(names, name) + } + return names, nil +} + +// InstalledCodesigningCertificateNames ... +func InstalledCodesigningCertificateNames() ([]string, error) { + cmd := command.New("security", "find-identity", "-v", "-p", "codesigning") + out, err := cmd.RunAndReturnTrimmedCombinedOutput() + if err != nil { + return nil, commandError(cmd.PrintableCommandArgs(), out, err) + } + return installedCodesigningCertificateNamesFromOutput(out) +} + +// InstalledMacAppStoreCertificateNames ... +func InstalledMacAppStoreCertificateNames() ([]string, error) { + cmd := command.New("security", "find-identity", "-v", "-p", "macappstore") + out, err := cmd.RunAndReturnTrimmedCombinedOutput() + if err != nil { + return nil, commandError(cmd.PrintableCommandArgs(), out, err) + } + return installedCodesigningCertificateNamesFromOutput(out) +} + +func normalizeFindCertificateOut(out string) ([]string, error) { + certificateContents := []string{} + pattern := `(?s)(-----BEGIN CERTIFICATE-----.*?-----END CERTIFICATE-----)` + matches := regexp.MustCompile(pattern).FindAllString(out, -1) + if len(matches) == 0 { + return nil, fmt.Errorf("no certificates found in: %s", out) + } + + for _, certificateContent := range matches { + if !strings.HasPrefix(certificateContent, "\n") { + certificateContent = "\n" + certificateContent + } + if !strings.HasSuffix(certificateContent, "\n") { + certificateContent = certificateContent + "\n" + } + certificateContents = append(certificateContents, certificateContent) + } + + return certificateContents, nil +} + +// InstalledCodesigningCertificates ... +func InstalledCodesigningCertificates() ([]*x509.Certificate, error) { + certificateNames, err := InstalledCodesigningCertificateNames() + if err != nil { + return nil, err + } + return getInstalledCertificatesByNameSlice(certificateNames) +} + +// InstalledMacAppStoreCertificates ... +func InstalledMacAppStoreCertificates() ([]*x509.Certificate, error) { + certificateNames, err := InstalledMacAppStoreCertificateNames() + if err != nil { + return nil, err + } + return getInstalledCertificatesByNameSlice(certificateNames) +} + +func getInstalledCertificatesByNameSlice(certificateNames []string) ([]*x509.Certificate, error) { + certificates := []*x509.Certificate{} + for _, name := range certificateNames { + cmd := command.New("security", "find-certificate", "-c", name, "-p", "-a") + out, err := cmd.RunAndReturnTrimmedCombinedOutput() + if err != nil { + return nil, commandError(cmd.PrintableCommandArgs(), out, err) + } + + normalizedOuts, err := normalizeFindCertificateOut(out) + if err != nil { + return nil, err + } + + for _, normalizedOut := range normalizedOuts { + certificate, err := CeritifcateFromPemContent([]byte(normalizedOut)) + if err != nil { + return nil, err + } + + certificates = append(certificates, certificate) + } + } + + return certificates, nil +} From bdb6262796fa370432fc7fc2e9041cf2d210ffc4 Mon Sep 17 00:00:00 2001 From: LaszloP <7979773+lpusok@users.noreply.github.com> Date: Thu, 5 Mar 2026 19:04:00 +0100 Subject: [PATCH 2/3] Replaced usages --- autocodesign/autocodesign.go | 2 +- autocodesign/autocodesign_test.go | 2 +- autocodesign/certdownloader/certdownloader.go | 2 +- .../certdownloader/certdownloader_test.go | 2 +- autocodesign/certificates.go | 2 +- autocodesign/certificates_test.go | 2 +- autocodesign/codesignasset/writer.go | 2 +- .../appstoreconnectclient/certificates.go | 2 +- .../devportalclient/spaceship/certificates.go | 2 +- autocodesign/keychain/keychain.go | 2 +- autocodesign/keychain/keychain_test.go | 2 +- .../localcodesignasset_test.go | 2 +- .../localcodesignasset/profilelookup_test.go | 2 +- autocodesign/mock_AssetWriter.go | 2 +- autocodesign/mock_CertificateProvider.go | 2 +- autocodesign/utils_test.go | 2 +- certificateutil/v1_adapter.go | 13 +++++++++ codesign/codesign.go | 6 ++-- codesign/codesign_test.go | 2 +- exportoptionsgenerator/certificates.go | 2 +- .../codesign_group_provider.go | 9 +++--- .../exportoptionsgenerator_test.go | 2 +- .../internal/codesigngroup/codesigngroup.go | 4 +-- .../codesigngroup/codesigngroup_test.go | 4 +-- .../internal/codesigngroup/filter.go | 4 +-- .../internal/codesigngroup/ios.go | 4 +-- .../internal/codesigngroup/printer_test.go | 4 +-- go.mod | 6 ++-- profileutil/info_model.go | 2 +- profileutil/plist_data.go | 2 +- profileutil/profile_printer.go | 2 +- profileutil/v1_adapter.go | 28 +++++++++++++++++-- 32 files changed, 81 insertions(+), 45 deletions(-) create mode 100644 certificateutil/v1_adapter.go diff --git a/autocodesign/autocodesign.go b/autocodesign/autocodesign.go index 3b021b67..e2d3b3c2 100644 --- a/autocodesign/autocodesign.go +++ b/autocodesign/autocodesign.go @@ -11,8 +11,8 @@ import ( "github.com/bitrise-io/go-utils/v2/log" "github.com/bitrise-io/go-utils/v2/retry" - "github.com/bitrise-io/go-xcode/certificateutil" "github.com/bitrise-io/go-xcode/v2/autocodesign/devportalclient/appstoreconnect" + "github.com/bitrise-io/go-xcode/v2/certificateutil" "github.com/bitrise-io/go-xcode/v2/devportalservice" "github.com/bitrise-io/go-xcode/v2/profileutil" "github.com/bitrise-io/go-xcode/xcodeproject/serialized" diff --git a/autocodesign/autocodesign_test.go b/autocodesign/autocodesign_test.go index ab9b2ef4..bcc03086 100644 --- a/autocodesign/autocodesign_test.go +++ b/autocodesign/autocodesign_test.go @@ -7,9 +7,9 @@ import ( "github.com/bitrise-io/go-utils/v2/log" "github.com/bitrise-io/go-utils/v2/retry" - "github.com/bitrise-io/go-xcode/certificateutil" "github.com/bitrise-io/go-xcode/v2/autocodesign/devportalclient/appstoreconnect" devportaltime "github.com/bitrise-io/go-xcode/v2/autocodesign/devportalclient/time" + "github.com/bitrise-io/go-xcode/v2/certificateutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" diff --git a/autocodesign/certdownloader/certdownloader.go b/autocodesign/certdownloader/certdownloader.go index 9ad47eb6..c65481c2 100644 --- a/autocodesign/certdownloader/certdownloader.go +++ b/autocodesign/certdownloader/certdownloader.go @@ -12,8 +12,8 @@ import ( "github.com/bitrise-io/go-utils/v2/fileutil" "github.com/bitrise-io/go-utils/v2/log" "github.com/bitrise-io/go-utils/v2/pathutil" - "github.com/bitrise-io/go-xcode/certificateutil" "github.com/bitrise-io/go-xcode/v2/autocodesign" + "github.com/bitrise-io/go-xcode/v2/certificateutil" ) // CertificateAndPassphrase contains a p12 file URL and passphrase diff --git a/autocodesign/certdownloader/certdownloader_test.go b/autocodesign/certdownloader/certdownloader_test.go index d5650e80..3af43deb 100644 --- a/autocodesign/certdownloader/certdownloader_test.go +++ b/autocodesign/certdownloader/certdownloader_test.go @@ -8,7 +8,7 @@ import ( "time" "github.com/bitrise-io/go-utils/v2/log" - "github.com/bitrise-io/go-xcode/certificateutil" + "github.com/bitrise-io/go-xcode/v2/certificateutil" "github.com/stretchr/testify/assert" ) diff --git a/autocodesign/certificates.go b/autocodesign/certificates.go index 09af0431..c57a2710 100644 --- a/autocodesign/certificates.go +++ b/autocodesign/certificates.go @@ -5,8 +5,8 @@ import ( "strings" "github.com/bitrise-io/go-utils/log" - "github.com/bitrise-io/go-xcode/certificateutil" "github.com/bitrise-io/go-xcode/v2/autocodesign/devportalclient/appstoreconnect" + "github.com/bitrise-io/go-xcode/v2/certificateutil" ) func selectCertificatesAndDistributionTypes(certificateSource DevPortalClient, typeToLocalCerts LocalCertificates, distribution DistributionType, signUITestTargets bool, verboseLog bool) (map[appstoreconnect.CertificateType][]Certificate, []DistributionType, error) { diff --git a/autocodesign/certificates_test.go b/autocodesign/certificates_test.go index 5e0af9e0..1ca137f9 100644 --- a/autocodesign/certificates_test.go +++ b/autocodesign/certificates_test.go @@ -8,8 +8,8 @@ import ( "time" "github.com/bitrise-io/go-utils/log" - "github.com/bitrise-io/go-xcode/certificateutil" "github.com/bitrise-io/go-xcode/v2/autocodesign/devportalclient/appstoreconnect" + "github.com/bitrise-io/go-xcode/v2/certificateutil" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" ) diff --git a/autocodesign/codesignasset/writer.go b/autocodesign/codesignasset/writer.go index 906c5b5e..eee8d929 100644 --- a/autocodesign/codesignasset/writer.go +++ b/autocodesign/codesignasset/writer.go @@ -8,10 +8,10 @@ import ( "github.com/bitrise-io/go-utils/log" "github.com/bitrise-io/go-utils/pathutil" - "github.com/bitrise-io/go-xcode/certificateutil" "github.com/bitrise-io/go-xcode/v2/autocodesign" "github.com/bitrise-io/go-xcode/v2/autocodesign/devportalclient/appstoreconnect" "github.com/bitrise-io/go-xcode/v2/autocodesign/keychain" + "github.com/bitrise-io/go-xcode/v2/certificateutil" ) const ( diff --git a/autocodesign/devportalclient/appstoreconnectclient/certificates.go b/autocodesign/devportalclient/appstoreconnectclient/certificates.go index 394aa334..fcd3c401 100644 --- a/autocodesign/devportalclient/appstoreconnectclient/certificates.go +++ b/autocodesign/devportalclient/appstoreconnectclient/certificates.go @@ -7,9 +7,9 @@ import ( "math/big" "github.com/bitrise-io/go-utils/log" - "github.com/bitrise-io/go-xcode/certificateutil" "github.com/bitrise-io/go-xcode/v2/autocodesign" "github.com/bitrise-io/go-xcode/v2/autocodesign/devportalclient/appstoreconnect" + "github.com/bitrise-io/go-xcode/v2/certificateutil" ) // CertificateSource ... diff --git a/autocodesign/devportalclient/spaceship/certificates.go b/autocodesign/devportalclient/spaceship/certificates.go index a15d9f05..73d1d3d8 100644 --- a/autocodesign/devportalclient/spaceship/certificates.go +++ b/autocodesign/devportalclient/spaceship/certificates.go @@ -6,9 +6,9 @@ import ( "fmt" "math/big" - "github.com/bitrise-io/go-xcode/certificateutil" "github.com/bitrise-io/go-xcode/v2/autocodesign" "github.com/bitrise-io/go-xcode/v2/autocodesign/devportalclient/appstoreconnect" + "github.com/bitrise-io/go-xcode/v2/certificateutil" ) // CertificateSource ... diff --git a/autocodesign/keychain/keychain.go b/autocodesign/keychain/keychain.go index 63cd8ce0..e8dad26e 100644 --- a/autocodesign/keychain/keychain.go +++ b/autocodesign/keychain/keychain.go @@ -11,7 +11,7 @@ import ( "github.com/bitrise-io/go-utils/fileutil" "github.com/bitrise-io/go-utils/pathutil" "github.com/bitrise-io/go-utils/v2/command" - "github.com/bitrise-io/go-xcode/certificateutil" + "github.com/bitrise-io/go-xcode/v2/certificateutil" "github.com/hashicorp/go-version" ) diff --git a/autocodesign/keychain/keychain_test.go b/autocodesign/keychain/keychain_test.go index 1928e552..0c5547fb 100644 --- a/autocodesign/keychain/keychain_test.go +++ b/autocodesign/keychain/keychain_test.go @@ -9,7 +9,7 @@ import ( "github.com/bitrise-io/go-steputils/v2/stepconf" "github.com/bitrise-io/go-utils/v2/command" "github.com/bitrise-io/go-utils/v2/env" - "github.com/bitrise-io/go-xcode/certificateutil" + "github.com/bitrise-io/go-xcode/v2/certificateutil" ) func TestCreateKeychain(t *testing.T) { diff --git a/autocodesign/localcodesignasset/localcodesignasset_test.go b/autocodesign/localcodesignasset/localcodesignasset_test.go index 6775587c..10bc25dc 100644 --- a/autocodesign/localcodesignasset/localcodesignasset_test.go +++ b/autocodesign/localcodesignasset/localcodesignasset_test.go @@ -6,11 +6,11 @@ import ( devportaltime "github.com/bitrise-io/go-xcode/v2/autocodesign/devportalclient/time" - "github.com/bitrise-io/go-xcode/certificateutil" "github.com/bitrise-io/go-xcode/exportoptions" "github.com/bitrise-io/go-xcode/v2/autocodesign" "github.com/bitrise-io/go-xcode/v2/autocodesign/devportalclient/appstoreconnect" "github.com/bitrise-io/go-xcode/v2/autocodesign/localcodesignasset/mocks" + "github.com/bitrise-io/go-xcode/v2/certificateutil" "github.com/bitrise-io/go-xcode/v2/profileutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" diff --git a/autocodesign/localcodesignasset/profilelookup_test.go b/autocodesign/localcodesignasset/profilelookup_test.go index d76571ce..83e3aaa9 100644 --- a/autocodesign/localcodesignasset/profilelookup_test.go +++ b/autocodesign/localcodesignasset/profilelookup_test.go @@ -3,9 +3,9 @@ package localcodesignasset import ( "testing" - "github.com/bitrise-io/go-xcode/certificateutil" "github.com/bitrise-io/go-xcode/exportoptions" "github.com/bitrise-io/go-xcode/v2/autocodesign" + "github.com/bitrise-io/go-xcode/v2/certificateutil" "github.com/bitrise-io/go-xcode/v2/profileutil" "github.com/stretchr/testify/assert" ) diff --git a/autocodesign/mock_AssetWriter.go b/autocodesign/mock_AssetWriter.go index d95af49f..c70f19fd 100644 --- a/autocodesign/mock_AssetWriter.go +++ b/autocodesign/mock_AssetWriter.go @@ -3,7 +3,7 @@ package autocodesign import ( - certificateutil "github.com/bitrise-io/go-xcode/certificateutil" + certificateutil "github.com/bitrise-io/go-xcode/v2/certificateutil" mock "github.com/stretchr/testify/mock" ) diff --git a/autocodesign/mock_CertificateProvider.go b/autocodesign/mock_CertificateProvider.go index 3f67bf73..b6d9347a 100644 --- a/autocodesign/mock_CertificateProvider.go +++ b/autocodesign/mock_CertificateProvider.go @@ -3,7 +3,7 @@ package autocodesign import ( - certificateutil "github.com/bitrise-io/go-xcode/certificateutil" + certificateutil "github.com/bitrise-io/go-xcode/v2/certificateutil" mock "github.com/stretchr/testify/mock" ) diff --git a/autocodesign/utils_test.go b/autocodesign/utils_test.go index 55a54949..59126157 100644 --- a/autocodesign/utils_test.go +++ b/autocodesign/utils_test.go @@ -3,9 +3,9 @@ package autocodesign import ( "testing" - "github.com/bitrise-io/go-xcode/certificateutil" "github.com/bitrise-io/go-xcode/v2/autocodesign/devportalclient/appstoreconnect" "github.com/bitrise-io/go-xcode/v2/autocodesign/devportalclient/time" + "github.com/bitrise-io/go-xcode/v2/certificateutil" "github.com/stretchr/testify/assert" ) diff --git a/certificateutil/v1_adapter.go b/certificateutil/v1_adapter.go new file mode 100644 index 00000000..abd93753 --- /dev/null +++ b/certificateutil/v1_adapter.go @@ -0,0 +1,13 @@ +package certificateutil + +import ( + v1certificate "github.com/bitrise-io/go-xcode/certificateutil" +) + +func V2Certificate(cert CertificateInfoModel) v1certificate.CertificateInfoModel { + return v1certificate.CertificateInfoModel(cert) +} + +func V1Certificate(cert v1certificate.CertificateInfoModel) CertificateInfoModel { + return CertificateInfoModel(cert) +} diff --git a/codesign/codesign.go b/codesign/codesign.go index 92bb0d18..2bccaab8 100644 --- a/codesign/codesign.go +++ b/codesign/codesign.go @@ -7,13 +7,13 @@ import ( "github.com/bitrise-io/go-utils/v2/log" "github.com/bitrise-io/go-utils/v2/retry" - "github.com/bitrise-io/go-xcode/certificateutil" "github.com/bitrise-io/go-xcode/exportoptions" "github.com/bitrise-io/go-xcode/v2/autocodesign" "github.com/bitrise-io/go-xcode/v2/autocodesign/devportalclient" "github.com/bitrise-io/go-xcode/v2/autocodesign/devportalclient/appstoreconnect" "github.com/bitrise-io/go-xcode/v2/autocodesign/localcodesignasset" "github.com/bitrise-io/go-xcode/v2/autocodesign/projectmanager" + "github.com/bitrise-io/go-xcode/v2/certificateutil" "github.com/bitrise-io/go-xcode/v2/devportalservice" "github.com/bitrise-io/go-xcode/v2/exportoptionsgenerator" "github.com/bitrise-io/go-xcode/v2/plistutil" @@ -509,7 +509,7 @@ func (m *Manager) createCodeSignAssetMap(appLayout autocodesign.AppLayout, certi bundleIDProfileInfoMap := signingAssets.BundleIDProfileMap() bundleIDProfileMap := map[string]autocodesign.Profile{} for bundleID, profileInfo := range bundleIDProfileInfoMap { - signingProfile, err := m.profileConverter.ProfileInfoToProfile(profileutil.V2Profile(profileInfo)) + signingProfile, err := m.profileConverter.ProfileInfoToProfile(profileInfo) if err != nil { return nil, fmt.Errorf("failed to convert profile info: %w", err) } @@ -543,7 +543,7 @@ func (m *Manager) createCodeSignAssetMap(appLayout autocodesign.AppLayout, certi bundleIDProfileInfoMap := uiTestSigningAssets.BundleIDProfileMap() bundleIDProfileMap := map[string]autocodesign.Profile{} for bundleID, profileInfo := range bundleIDProfileInfoMap { - signingProfile, err := m.profileConverter.ProfileInfoToProfile(profileutil.V2Profile(profileInfo)) + signingProfile, err := m.profileConverter.ProfileInfoToProfile(profileInfo) if err != nil { return nil, fmt.Errorf("failed to convert profile info: %w", err) } diff --git a/codesign/codesign_test.go b/codesign/codesign_test.go index 8ea557cf..7772b8d9 100644 --- a/codesign/codesign_test.go +++ b/codesign/codesign_test.go @@ -10,11 +10,11 @@ import ( "github.com/bitrise-io/go-steputils/v2/stepconf" "github.com/bitrise-io/go-utils/v2/log" - "github.com/bitrise-io/go-xcode/certificateutil" "github.com/bitrise-io/go-xcode/exportoptions" "github.com/bitrise-io/go-xcode/v2/autocodesign" "github.com/bitrise-io/go-xcode/v2/autocodesign/localcodesignasset" localcodesignassetMocks "github.com/bitrise-io/go-xcode/v2/autocodesign/localcodesignasset/mocks" + "github.com/bitrise-io/go-xcode/v2/certificateutil" "github.com/bitrise-io/go-xcode/v2/codesign/mocks" "github.com/bitrise-io/go-xcode/v2/devportalservice" "github.com/bitrise-io/go-xcode/v2/profileutil" diff --git a/exportoptionsgenerator/certificates.go b/exportoptionsgenerator/certificates.go index d916ce54..5b277e14 100644 --- a/exportoptionsgenerator/certificates.go +++ b/exportoptionsgenerator/certificates.go @@ -1,6 +1,6 @@ package exportoptionsgenerator -import "github.com/bitrise-io/go-xcode/certificateutil" +import "github.com/bitrise-io/go-xcode/v2/certificateutil" // CodesignIdentityProvider can list certificate infos. type CodesignIdentityProvider interface { diff --git a/exportoptionsgenerator/codesign_group_provider.go b/exportoptionsgenerator/codesign_group_provider.go index 737fcffe..a8410fe9 100644 --- a/exportoptionsgenerator/codesign_group_provider.go +++ b/exportoptionsgenerator/codesign_group_provider.go @@ -2,9 +2,8 @@ package exportoptionsgenerator import ( "github.com/bitrise-io/go-utils/v2/log" - "github.com/bitrise-io/go-xcode/certificateutil" "github.com/bitrise-io/go-xcode/exportoptions" - profileutilv1 "github.com/bitrise-io/go-xcode/profileutil" + "github.com/bitrise-io/go-xcode/v2/certificateutil" codesigngroup "github.com/bitrise-io/go-xcode/v2/exportoptionsgenerator/internal/codesigngroup" "github.com/bitrise-io/go-xcode/v2/plistutil" "github.com/bitrise-io/go-xcode/v2/profileutil" @@ -56,7 +55,7 @@ func (g codeSignGroupProvider) DetermineCodesignGroup(certificates []certificate g.logger.Println() g.logger.Printf("Resolving code signing groups...") - codeSignGroups := codesigngroup.BuildFilterableList(certificates, profileutil.V1Profiles(profiles), bundleIDs) + codeSignGroups := codesigngroup.BuildFilterableList(certificates, profiles, bundleIDs) if len(codeSignGroups) == 0 { g.logger.Errorf("Failed to find code signing groups for specified export method (%s)", exportMethod) } @@ -67,7 +66,7 @@ func (g codeSignGroupProvider) DetermineCodesignGroup(certificates []certificate if len(bundleIDEntitlementsMap) > 0 { g.logger.Printf("Filtering code signing groups for target capabilities") - codeSignGroups = codesigngroup.Filter(codeSignGroups, codesigngroup.CreateEntitlementsSelectableCodeSignGroupFilter(convertToV1PlistData(bundleIDEntitlementsMap))) + codeSignGroups = codesigngroup.Filter(codeSignGroups, codesigngroup.CreateEntitlementsSelectableCodeSignGroupFilter(bundleIDEntitlementsMap)) g.logger.Debugf("\nGroups after filtering for target capabilities:") g.logger.Debugf("%s", g.printer.ListToDebugString(codeSignGroups)) @@ -115,7 +114,7 @@ func (g codeSignGroupProvider) DetermineCodesignGroup(certificates []certificate var iosCodeSignGroups []codesigngroup.Ios for _, selectable := range codeSignGroups { - bundleIDProfileMap := map[string]profileutilv1.ProvisioningProfileInfoModel{} + bundleIDProfileMap := map[string]profileutil.ProvisioningProfileInfoModel{} for bundleID, profiles := range selectable.BundleIDProfilesMap { if len(profiles) > 0 { bundleIDProfileMap[bundleID] = profiles[0] diff --git a/exportoptionsgenerator/exportoptionsgenerator_test.go b/exportoptionsgenerator/exportoptionsgenerator_test.go index bbf2ca22..dfec96a1 100644 --- a/exportoptionsgenerator/exportoptionsgenerator_test.go +++ b/exportoptionsgenerator/exportoptionsgenerator_test.go @@ -5,8 +5,8 @@ import ( "testing" "github.com/bitrise-io/go-utils/v2/log" - "github.com/bitrise-io/go-xcode/certificateutil" "github.com/bitrise-io/go-xcode/exportoptions" + "github.com/bitrise-io/go-xcode/v2/certificateutil" "github.com/bitrise-io/go-xcode/v2/exportoptionsgenerator/mocks" "github.com/bitrise-io/go-xcode/v2/plistutil" "github.com/bitrise-io/go-xcode/v2/profileutil" diff --git a/exportoptionsgenerator/internal/codesigngroup/codesigngroup.go b/exportoptionsgenerator/internal/codesigngroup/codesigngroup.go index 0160805a..03e51c6d 100644 --- a/exportoptionsgenerator/internal/codesigngroup/codesigngroup.go +++ b/exportoptionsgenerator/internal/codesigngroup/codesigngroup.go @@ -3,8 +3,8 @@ package codesigngroup import ( "slices" - "github.com/bitrise-io/go-xcode/certificateutil" - "github.com/bitrise-io/go-xcode/profileutil" + "github.com/bitrise-io/go-xcode/v2/certificateutil" + "github.com/bitrise-io/go-xcode/v2/profileutil" "github.com/ryanuber/go-glob" ) diff --git a/exportoptionsgenerator/internal/codesigngroup/codesigngroup_test.go b/exportoptionsgenerator/internal/codesigngroup/codesigngroup_test.go index 49d82d15..0433bfbe 100644 --- a/exportoptionsgenerator/internal/codesigngroup/codesigngroup_test.go +++ b/exportoptionsgenerator/internal/codesigngroup/codesigngroup_test.go @@ -3,10 +3,10 @@ package codesigngroup_test import ( "testing" - "github.com/bitrise-io/go-xcode/certificateutil" "github.com/bitrise-io/go-xcode/exportoptions" - "github.com/bitrise-io/go-xcode/profileutil" + "github.com/bitrise-io/go-xcode/v2/certificateutil" "github.com/bitrise-io/go-xcode/v2/exportoptionsgenerator/internal/codesigngroup" + "github.com/bitrise-io/go-xcode/v2/profileutil" "github.com/stretchr/testify/require" ) diff --git a/exportoptionsgenerator/internal/codesigngroup/filter.go b/exportoptionsgenerator/internal/codesigngroup/filter.go index fcab8133..e13c90f6 100644 --- a/exportoptionsgenerator/internal/codesigngroup/filter.go +++ b/exportoptionsgenerator/internal/codesigngroup/filter.go @@ -2,8 +2,8 @@ package codesigngroup import ( "github.com/bitrise-io/go-xcode/exportoptions" - "github.com/bitrise-io/go-xcode/plistutil" - "github.com/bitrise-io/go-xcode/profileutil" + "github.com/bitrise-io/go-xcode/v2/plistutil" + "github.com/bitrise-io/go-xcode/v2/profileutil" ) // SelectableCodeSignGroupFilter ... diff --git a/exportoptionsgenerator/internal/codesigngroup/ios.go b/exportoptionsgenerator/internal/codesigngroup/ios.go index 1aa5c4f5..9c8dc4d8 100644 --- a/exportoptionsgenerator/internal/codesigngroup/ios.go +++ b/exportoptionsgenerator/internal/codesigngroup/ios.go @@ -1,8 +1,8 @@ package codesigngroup import ( - "github.com/bitrise-io/go-xcode/certificateutil" - "github.com/bitrise-io/go-xcode/profileutil" + "github.com/bitrise-io/go-xcode/v2/certificateutil" + "github.com/bitrise-io/go-xcode/v2/profileutil" ) // Ios ... diff --git a/exportoptionsgenerator/internal/codesigngroup/printer_test.go b/exportoptionsgenerator/internal/codesigngroup/printer_test.go index 0e152cc1..a566ef6a 100644 --- a/exportoptionsgenerator/internal/codesigngroup/printer_test.go +++ b/exportoptionsgenerator/internal/codesigngroup/printer_test.go @@ -4,9 +4,9 @@ import ( "testing" "github.com/bitrise-io/go-utils/v2/log" - "github.com/bitrise-io/go-xcode/certificateutil" - "github.com/bitrise-io/go-xcode/profileutil" + "github.com/bitrise-io/go-xcode/v2/certificateutil" "github.com/bitrise-io/go-xcode/v2/exportoptionsgenerator/internal/codesigngroup" + "github.com/bitrise-io/go-xcode/v2/profileutil" "github.com/stretchr/testify/require" ) diff --git a/go.mod b/go.mod index 333a1299..04bbfb79 100644 --- a/go.mod +++ b/go.mod @@ -7,17 +7,20 @@ toolchain go1.23.2 require ( cloud.google.com/go/secretmanager v1.14.3 cloud.google.com/go/storage v1.50.0 + github.com/bitrise-io/go-pkcs12 v0.0.0-20230815095624-feb898696e02 github.com/bitrise-io/go-plist v0.0.0-20210301100253-4b1a112ccd10 github.com/bitrise-io/go-steputils v1.0.5 github.com/bitrise-io/go-steputils/v2 v2.0.0-alpha.43 github.com/bitrise-io/go-utils v1.0.13 github.com/bitrise-io/go-utils/v2 v2.0.0-alpha.31 github.com/bitrise-io/go-xcode v1.3.1 + github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa github.com/globocom/go-buffer/v2 v2.0.0 github.com/golang-jwt/jwt/v4 v4.5.0 github.com/google/go-querystring v1.1.0 github.com/hashicorp/go-retryablehttp v0.7.7 github.com/hashicorp/go-version v1.6.0 + github.com/pkg/errors v0.9.1 github.com/ryanuber/go-glob v1.0.0 github.com/stretchr/testify v1.10.0 golang.org/x/oauth2 v0.24.0 @@ -36,14 +39,12 @@ require ( github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1 // indirect - github.com/bitrise-io/go-pkcs12 v0.0.0-20230815095624-feb898696e02 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/envoyproxy/go-control-plane/envoy v1.32.3 // indirect github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/gofrs/uuid/v5 v5.2.0 // indirect @@ -54,7 +55,6 @@ require ( github.com/googleapis/gax-go/v2 v2.14.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/pkg/errors v0.9.1 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/stretchr/objx v0.5.2 // indirect diff --git a/profileutil/info_model.go b/profileutil/info_model.go index a34dc761..85a9a176 100644 --- a/profileutil/info_model.go +++ b/profileutil/info_model.go @@ -5,8 +5,8 @@ import ( "time" "github.com/bitrise-io/go-plist" - "github.com/bitrise-io/go-xcode/certificateutil" "github.com/bitrise-io/go-xcode/exportoptions" + "github.com/bitrise-io/go-xcode/v2/certificateutil" "github.com/bitrise-io/go-xcode/v2/plistutil" "github.com/fullsailor/pkcs7" ) diff --git a/profileutil/plist_data.go b/profileutil/plist_data.go index 0fd3e4e8..3fc1a5c6 100644 --- a/profileutil/plist_data.go +++ b/profileutil/plist_data.go @@ -5,8 +5,8 @@ import ( "strings" "time" - "github.com/bitrise-io/go-xcode/certificateutil" "github.com/bitrise-io/go-xcode/exportoptions" + "github.com/bitrise-io/go-xcode/v2/certificateutil" "github.com/bitrise-io/go-xcode/v2/plistutil" ) diff --git a/profileutil/profile_printer.go b/profileutil/profile_printer.go index c959e82e..6cc74ea1 100644 --- a/profileutil/profile_printer.go +++ b/profileutil/profile_printer.go @@ -5,7 +5,7 @@ import ( "fmt" "github.com/bitrise-io/go-utils/v2/log" - "github.com/bitrise-io/go-xcode/certificateutil" + "github.com/bitrise-io/go-xcode/v2/certificateutil" "github.com/bitrise-io/go-xcode/v2/plistutil" ) diff --git a/profileutil/v1_adapter.go b/profileutil/v1_adapter.go index 5a4d3f79..ddedb65c 100644 --- a/profileutil/v1_adapter.go +++ b/profileutil/v1_adapter.go @@ -1,7 +1,9 @@ package profileutil import ( + certificateutilv1 "github.com/bitrise-io/go-xcode/certificateutil" profileutilv1 "github.com/bitrise-io/go-xcode/profileutil" + "github.com/bitrise-io/go-xcode/v2/certificateutil" ) // V2Profile ... @@ -14,7 +16,7 @@ func V2Profile(model profileutilv1.ProvisioningProfileInfoModel) ProvisioningPro BundleID: model.BundleID, ExportType: model.ExportType, ProvisionedDevices: copySlice(model.ProvisionedDevices), - DeveloperCertificates: copySlice(model.DeveloperCertificates), + DeveloperCertificates: copyV1Certs(model.DeveloperCertificates), CreationDate: model.CreationDate, ExpirationDate: model.ExpirationDate, Entitlements: copyMap(model.Entitlements), @@ -42,7 +44,7 @@ func V1Profile(model ProvisioningProfileInfoModel) profileutilv1.ProvisioningPro BundleID: model.BundleID, ExportType: model.ExportType, ProvisionedDevices: copySlice(model.ProvisionedDevices), - DeveloperCertificates: copySlice(model.DeveloperCertificates), + DeveloperCertificates: copyV2Certs(model.DeveloperCertificates), CreationDate: model.CreationDate, ExpirationDate: model.ExpirationDate, Entitlements: copyMap(model.Entitlements), @@ -70,3 +72,25 @@ func copyMap[K comparable, V any](src map[K]V) map[K]V { } return dst } + +func copyV1Certs(src []certificateutilv1.CertificateInfoModel) []certificateutil.CertificateInfoModel { + if src == nil { + return nil + } + dst := make([]certificateutil.CertificateInfoModel, len(src)) + for i, cert := range src { + dst[i] = certificateutil.CertificateInfoModel(cert) + } + return dst +} + +func copyV2Certs(src []certificateutil.CertificateInfoModel) []certificateutilv1.CertificateInfoModel { + if src == nil { + return nil + } + dst := make([]certificateutilv1.CertificateInfoModel, len(src)) + for i, cert := range src { + dst[i] = certificateutilv1.CertificateInfoModel(cert) + } + return dst +} From f1897ad61507f2ab4330119c27d80c82a6ea4002 Mon Sep 17 00:00:00 2001 From: LaszloP <7979773+lpusok@users.noreply.github.com> Date: Thu, 5 Mar 2026 19:06:51 +0100 Subject: [PATCH 3/3] removed unused converters --- certificateutil/v1_adapter.go | 13 ------------- exportoptionsgenerator/plistconverter.go | 15 --------------- 2 files changed, 28 deletions(-) delete mode 100644 certificateutil/v1_adapter.go delete mode 100644 exportoptionsgenerator/plistconverter.go diff --git a/certificateutil/v1_adapter.go b/certificateutil/v1_adapter.go deleted file mode 100644 index abd93753..00000000 --- a/certificateutil/v1_adapter.go +++ /dev/null @@ -1,13 +0,0 @@ -package certificateutil - -import ( - v1certificate "github.com/bitrise-io/go-xcode/certificateutil" -) - -func V2Certificate(cert CertificateInfoModel) v1certificate.CertificateInfoModel { - return v1certificate.CertificateInfoModel(cert) -} - -func V1Certificate(cert v1certificate.CertificateInfoModel) CertificateInfoModel { - return CertificateInfoModel(cert) -} diff --git a/exportoptionsgenerator/plistconverter.go b/exportoptionsgenerator/plistconverter.go deleted file mode 100644 index cacc358a..00000000 --- a/exportoptionsgenerator/plistconverter.go +++ /dev/null @@ -1,15 +0,0 @@ -package exportoptionsgenerator - -import ( - plistutilv1 "github.com/bitrise-io/go-xcode/plistutil" - "github.com/bitrise-io/go-xcode/v2/plistutil" -) - -// TODO: remove this function when export package is migrated to v2 and uses plistutil/v2 -func convertToV1PlistData(bundleIDEntitlementsMap map[string]plistutil.PlistData) map[string]plistutilv1.PlistData { - converted := map[string]plistutilv1.PlistData{} - for bundleID, entitlements := range bundleIDEntitlementsMap { - converted[bundleID] = plistutilv1.PlistData(entitlements) - } - return converted -}