diff --git a/go.mod b/go.mod index dd98cb2a..390b07ed 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/bitrise-io/go-utils v1.0.14 github.com/bitrise-io/go-utils/v2 v2.0.0-alpha.23 github.com/bitrise-io/go-xcode v1.3.0 - github.com/bitrise-io/go-xcode/v2 v2.0.0-alpha.56 + github.com/bitrise-io/go-xcode/v2 v2.0.0-alpha.57.0.20250515110640-76a2cfe0d18b github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 github.com/stretchr/testify v1.10.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index c62ceafb..e70556ea 100644 --- a/go.sum +++ b/go.sum @@ -13,8 +13,8 @@ github.com/bitrise-io/go-utils/v2 v2.0.0-alpha.23 h1:Dfh4nyZPuEtilBisidejqxBrkx9 github.com/bitrise-io/go-utils/v2 v2.0.0-alpha.23/go.mod h1:3XUplo0dOWc3DqT2XA2SeHToDSg7+j1y1HTHibT2H68= github.com/bitrise-io/go-xcode v1.3.0 h1:QB8Vyr2oZQro/ocs9DJai80rlYL1hU1kwjHqdGslFLo= github.com/bitrise-io/go-xcode v1.3.0/go.mod h1:9OwsvrhZ4A2JxHVoEY7CPcABAKA+OE7FQqFfBfvbFuY= -github.com/bitrise-io/go-xcode/v2 v2.0.0-alpha.56 h1:JSwOStu6HCkT6b7icTQ3x/0OBNPQ8mD7Q6vQt2hG7fg= -github.com/bitrise-io/go-xcode/v2 v2.0.0-alpha.56/go.mod h1:zoLzT5fJE8V2SeYq0D0Z+ZN2FAzERjV3uiqDg5H8Bug= +github.com/bitrise-io/go-xcode/v2 v2.0.0-alpha.57.0.20250515110640-76a2cfe0d18b h1:cnA17k+z1y9M8r7+iHOeBkfL2ha0drt7g/Wh4JhzEtQ= +github.com/bitrise-io/go-xcode/v2 v2.0.0-alpha.57.0.20250515110640-76a2cfe0d18b/go.mod h1:zoLzT5fJE8V2SeYq0D0Z+ZN2FAzERjV3uiqDg5H8Bug= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= diff --git a/step/step.go b/step/step.go index 7e20f940..d870f950 100644 --- a/step/step.go +++ b/step/step.go @@ -7,6 +7,8 @@ import ( "strings" "time" + "howett.net/plist" + "github.com/bitrise-io/go-steputils/v2/stepconf" v1command "github.com/bitrise-io/go-utils/command" v1fileutil "github.com/bitrise-io/go-utils/fileutil" @@ -36,7 +38,6 @@ import ( "github.com/bitrise-io/go-xcode/xcarchive" "github.com/bitrise-io/go-xcode/xcodebuild" "github.com/kballard/go-shellquote" - "howett.net/plist" ) const ( @@ -994,22 +995,29 @@ func (s XcodebuildArchiver) xcodeIPAExport(opts xcodeIPAExportOpts) (xcodeIPAExp s.logger.TPrintf("Opening Xcode project at path: %s.", opts.ProjectPath) - xcodeProj, scheme, configuration, err := OpenArchivableProject(opts.ProjectPath, opts.Scheme, opts.Configuration) - if err != nil { - return out, fmt.Errorf("failed to open project: %s: %s", opts.ProjectPath, err) - } - archiveCodeSignIsXcodeManaged := opts.Archive.IsXcodeManaged() signingStyle := exportoptions.SigningStyleManual if opts.XcodeAuthOptions != nil { signingStyle = exportoptions.SigningStyleAutomatic } - generator := exportoptionsgenerator.New(xcodeProj, scheme, configuration, s.xcodeVersionReader, s.logger) - exportOptions, err := generator.GenerateApplicationExportOptions(exportMethod, opts.ICloudContainerEnvironment, opts.ExportDevelopmentTeam, - opts.UploadBitcode, opts.CompileBitcode, archiveCodeSignIsXcodeManaged, signingStyle, opts.TestFlightInternalTestingOnly) + archiveInfo, err := exportoptionsgenerator.ReadArchiveExportInfo(opts.Archive) if err != nil { - return out, err + return out, fmt.Errorf("failed to read xcarchive: %s", err) + } + + generator := exportoptionsgenerator.New(s.xcodeVersionReader, s.logger) + exportOptions, err := generator.GenerateApplicationExportOptions(exportoptionsgenerator.ExportProductApp, archiveInfo, exportMethod, signingStyle, exportoptionsgenerator.Opts{ + ContainerEnvironment: opts.ICloudContainerEnvironment, + TeamID: opts.ExportDevelopmentTeam, + UploadBitcode: opts.UploadBitcode, + CompileBitcode: opts.CompileBitcode, + ArchivedWithXcodeManagedProfiles: archiveCodeSignIsXcodeManaged, + TestFlightInternalTestingOnly: opts.TestFlightInternalTestingOnly, + ManageVersionAndBuildNumber: false, + }) + if err != nil { + return out, fmt.Errorf("failed to generate xcode export options: %s", err) } s.logger.Println() diff --git a/vendor/github.com/bitrise-io/go-xcode/v2/autocodesign/devportalclient/appstoreconnect/profiles.go b/vendor/github.com/bitrise-io/go-xcode/v2/autocodesign/devportalclient/appstoreconnect/profiles.go index c4ca5c04..fb521756 100644 --- a/vendor/github.com/bitrise-io/go-xcode/v2/autocodesign/devportalclient/appstoreconnect/profiles.go +++ b/vendor/github.com/bitrise-io/go-xcode/v2/autocodesign/devportalclient/appstoreconnect/profiles.go @@ -185,7 +185,7 @@ type ProfileCreateRequestDataRelationshipsDevices struct { type ProfileCreateRequestDataRelationships struct { BundleID ProfileCreateRequestDataRelationshipsBundleID `json:"bundleId"` Certificates ProfileCreateRequestDataRelationshipsCertificates `json:"certificates"` - Devices ProfileCreateRequestDataRelationshipsDevices `json:"devices"` + Devices *ProfileCreateRequestDataRelationshipsDevices `json:"devices,omitempty"` } // ProfileCreateRequestData ... @@ -228,7 +228,7 @@ func NewProfileCreateRequest(profileType ProfileType, name, bundleIDID string, c }) } if len(deviceData) > 0 { - relationships.Devices = ProfileCreateRequestDataRelationshipsDevices{Data: deviceData} + relationships.Devices = &ProfileCreateRequestDataRelationshipsDevices{Data: deviceData} } data := ProfileCreateRequestData{ diff --git a/vendor/github.com/bitrise-io/go-xcode/v2/codesign/archive.go b/vendor/github.com/bitrise-io/go-xcode/v2/codesign/archive.go deleted file mode 100644 index fea3a0b5..00000000 --- a/vendor/github.com/bitrise-io/go-xcode/v2/codesign/archive.go +++ /dev/null @@ -1,37 +0,0 @@ -package codesign - -import ( - "github.com/bitrise-io/go-xcode/v2/autocodesign" - "github.com/bitrise-io/go-xcode/v2/xcarchive" -) - -// Archive ... -type Archive struct { - archive xcarchive.IosArchive -} - -// NewArchive ... -func NewArchive(archive xcarchive.IosArchive) Archive { - return Archive{ - archive: archive, - } -} - -// IsSigningManagedAutomatically ... -func (a Archive) IsSigningManagedAutomatically() (bool, error) { - return a.archive.IsXcodeManaged(), nil -} - -// Platform ... -func (a Archive) Platform() (autocodesign.Platform, error) { - return a.archive.Platform() -} - -// GetAppLayout ... -func (a Archive) GetAppLayout(uiTestTargets bool) (autocodesign.AppLayout, error) { - params, err := a.archive.ReadCodesignParameters() - if err != nil { - return autocodesign.AppLayout{}, err - } - return *params, nil -} diff --git a/vendor/github.com/bitrise-io/go-xcode/v2/codesign/codesign.go b/vendor/github.com/bitrise-io/go-xcode/v2/codesign/codesign.go index 4f1321b1..feaeba58 100644 --- a/vendor/github.com/bitrise-io/go-xcode/v2/codesign/codesign.go +++ b/vendor/github.com/bitrise-io/go-xcode/v2/codesign/codesign.go @@ -11,6 +11,7 @@ import ( "github.com/bitrise-io/go-xcode/v2/autocodesign/devportalclient/appstoreconnect" "github.com/bitrise-io/go-xcode/v2/autocodesign/projectmanager" "github.com/bitrise-io/go-xcode/v2/devportalservice" + "github.com/bitrise-io/go-xcode/v2/xcarchive" ) // AuthType ... @@ -74,7 +75,7 @@ func NewManagerWithArchive( fallbackProfileDownloader autocodesign.ProfileProvider, assetInstaller autocodesign.AssetWriter, localCodeSignAssetManager autocodesign.LocalCodeSignAssetManager, - archive Archive, + archive xcarchive.IosArchive, logger log.Logger, ) Manager { return Manager{ diff --git a/vendor/github.com/bitrise-io/go-xcode/v2/exportoptionsgenerator/archive_info_provider.go b/vendor/github.com/bitrise-io/go-xcode/v2/exportoptionsgenerator/archive_info_provider.go new file mode 100644 index 00000000..54b73f1f --- /dev/null +++ b/vendor/github.com/bitrise-io/go-xcode/v2/exportoptionsgenerator/archive_info_provider.go @@ -0,0 +1,29 @@ +package exportoptionsgenerator + +import ( + "github.com/bitrise-io/go-xcode/xcarchive" +) + +// ExportProduct ... +type ExportProduct string + +const ( + // ExportProductApp ... + ExportProductApp ExportProduct = "app" + // ExportProductAppClip ... + ExportProductAppClip ExportProduct = "app-clip" +) + +// ReadArchiveExportInfo ... +func ReadArchiveExportInfo(archive xcarchive.IosArchive) (ArchiveInfo, error) { + appClipBundleID := "" + if archive.Application.ClipApplication != nil { + appClipBundleID = archive.Application.ClipApplication.BundleIdentifier() + } + + return ArchiveInfo{ + AppBundleID: archive.Application.BundleIdentifier(), + AppClipBundleID: appClipBundleID, + EntitlementsByBundleID: archive.BundleIDEntitlementsMap(), + }, nil +} diff --git a/vendor/github.com/bitrise-io/go-xcode/v2/exportoptionsgenerator/exportoptionsgenerator.go b/vendor/github.com/bitrise-io/go-xcode/v2/exportoptionsgenerator/exportoptionsgenerator.go index 6eff3b9c..feb6bf4a 100644 --- a/vendor/github.com/bitrise-io/go-xcode/v2/exportoptionsgenerator/exportoptionsgenerator.go +++ b/vendor/github.com/bitrise-io/go-xcode/v2/exportoptionsgenerator/exportoptionsgenerator.go @@ -11,9 +11,6 @@ import ( "github.com/bitrise-io/go-xcode/plistutil" "github.com/bitrise-io/go-xcode/profileutil" "github.com/bitrise-io/go-xcode/v2/xcodeversion" - "github.com/bitrise-io/go-xcode/xcodeproject/serialized" - "github.com/bitrise-io/go-xcode/xcodeproject/xcodeproj" - "github.com/bitrise-io/go-xcode/xcodeproject/xcscheme" ) const ( @@ -21,74 +18,94 @@ const ( AppClipProductType = "com.apple.product-type.application.on-demand-install-capable" ) +// Opts contains options for the exportOptions generator. +type Opts struct { + ContainerEnvironment string + TeamID string + UploadBitcode bool + CompileBitcode bool + ArchivedWithXcodeManagedProfiles bool + TestFlightInternalTestingOnly bool + ManageVersionAndBuildNumber bool +} + // ExportOptionsGenerator generates an exportOptions.plist file. type ExportOptionsGenerator struct { - xcodeProj *xcodeproj.XcodeProj - scheme *xcscheme.Scheme - configuration string - xcodeVersionReader xcodeversion.Reader certificateProvider CodesignIdentityProvider profileProvider ProvisioningProfileProvider - targetInfoProvider TargetInfoProvider logger log.Logger } // New constructs a new ExportOptionsGenerator. -func New(xcodeProj *xcodeproj.XcodeProj, scheme *xcscheme.Scheme, configuration string, xcodeVersionReader xcodeversion.Reader, logger log.Logger) ExportOptionsGenerator { - g := ExportOptionsGenerator{ - xcodeProj: xcodeProj, - scheme: scheme, - configuration: configuration, - xcodeVersionReader: xcodeVersionReader, - } - g.certificateProvider = LocalCodesignIdentityProvider{} - g.profileProvider = LocalProvisioningProfileProvider{} - g.targetInfoProvider = XcodebuildTargetInfoProvider{xcodeProj: xcodeProj} - g.logger = logger - return g +func New(xcodeVersionReader xcodeversion.Reader, logger log.Logger) ExportOptionsGenerator { + return ExportOptionsGenerator{ + xcodeVersionReader: xcodeVersionReader, + certificateProvider: LocalCodesignIdentityProvider{}, + profileProvider: LocalProvisioningProfileProvider{}, + logger: logger, + } } // GenerateApplicationExportOptions generates exportOptions for an application export. func (g ExportOptionsGenerator) GenerateApplicationExportOptions( + exportedProduct ExportProduct, + archiveInfo ArchiveInfo, exportMethod exportoptions.Method, - containerEnvironment string, - teamID string, - uploadBitcode bool, - compileBitcode bool, - archivedWithXcodeManagedProfiles bool, codeSigningStyle exportoptions.SigningStyle, - testFlightInternalTestingOnly bool, + opts Opts, ) (exportoptions.ExportOptions, error) { xcodeVersion, err := g.xcodeVersionReader.GetVersion() if err != nil { return nil, fmt.Errorf("failed to get Xcode version: %w", err) } - mainTargetBundleID, entitlementsByBundleID, err := g.applicationTargetsAndEntitlements(exportMethod) - if err != nil { - return nil, err + // BundleIDs appear in the export options plist in: + // - distributionBundleIdentifier: can be the main app or the app Clip bundle ID. + // It is only valid for NON app-store-connect distribution. App Store export includes both app and app-clip in one go, others do not. + // - provisioningProfiles dictionary: + // When distributing an app-clip, its bundle ID needs to be in the provisioningProfiles dictionary, otherwise it needs to be removed. + productToDistributeBundleID := archiveInfo.AppBundleID + if exportedProduct == ExportProductAppClip { + if archiveInfo.AppClipBundleID == "" { + return nil, fmt.Errorf("xcarchive does not contain an App Clip, cannot export an App Clip") + } + + if exportMethod.IsAppStore() { + g.logger.Warnf("Selected app-clip for distribution, but distribution method is the App Store.\n" + + "Exported .app will contain both the app and the app-clip for App Store exports.\n") + } + productToDistributeBundleID = archiveInfo.AppClipBundleID } - iCloudContainerEnvironment, err := determineIcloudContainerEnvironment(containerEnvironment, entitlementsByBundleID, exportMethod, xcodeVersion.Major) + if exportedProduct != ExportProductAppClip { + for bundleID := range archiveInfo.EntitlementsByBundleID { + if bundleID == archiveInfo.AppClipBundleID && !exportMethod.IsAppStore() { + g.logger.Debugf("Filtering out App Clip target, as non App Store distribution is used: %s", bundleID) + delete(archiveInfo.EntitlementsByBundleID, bundleID) + } + } + } + + iCloudContainerEnvironment, err := determineIcloudContainerEnvironment(opts.ContainerEnvironment, archiveInfo.EntitlementsByBundleID, exportMethod, xcodeVersion.Major) if err != nil { return nil, err } - exportOpts := generateBaseExportOptions(exportMethod, xcodeVersion, uploadBitcode, compileBitcode, iCloudContainerEnvironment) + exportOpts := generateBaseExportOptions(exportMethod, xcodeVersion, opts.UploadBitcode, opts.CompileBitcode, iCloudContainerEnvironment) if xcodeVersion.Major >= 12 { - exportOpts = addDistributionBundleIdentifierFromXcode12(exportOpts, mainTargetBundleID) + exportOpts = addDistributionBundleIdentifierFromXcode12(exportOpts, productToDistributeBundleID) } if xcodeVersion.Major >= 13 { - exportOpts = disableManagedBuildNumberFromXcode13(exportOpts) + exportOpts = addManagedBuildNumberFromXcode13(exportOpts, opts.ManageVersionAndBuildNumber) } if codeSigningStyle == exportoptions.SigningStyleAutomatic { - exportOpts = addTeamID(exportOpts, teamID) + exportOpts = addTeamID(exportOpts, opts.TeamID) } else { - codeSignGroup, err := g.determineCodesignGroup(entitlementsByBundleID, exportMethod, teamID, archivedWithXcodeManagedProfiles) + codeSignGroup, err := g.determineCodesignGroup(archiveInfo.EntitlementsByBundleID, exportMethod, opts.TeamID, opts.ArchivedWithXcodeManagedProfiles) if err != nil { return nil, err } @@ -96,53 +113,18 @@ func (g ExportOptionsGenerator) GenerateApplicationExportOptions( return exportOpts, nil } - exportOpts = addManualSigningFields(exportOpts, codeSignGroup, archivedWithXcodeManagedProfiles, g.logger) + exportOpts = addManualSigningFields(exportOpts, codeSignGroup, opts.ArchivedWithXcodeManagedProfiles, g.logger) } if xcodeVersion.Major >= 15 { - if testFlightInternalTestingOnly { - exportOpts = addTestFlightInternalTestingOnly(exportOpts, testFlightInternalTestingOnly) + if opts.TestFlightInternalTestingOnly { + exportOpts = addTestFlightInternalTestingOnly(exportOpts, opts.TestFlightInternalTestingOnly) } } return exportOpts, nil } -func (g ExportOptionsGenerator) applicationTargetsAndEntitlements(exportMethod exportoptions.Method) (string, map[string]plistutil.PlistData, error) { - mainTarget, err := ArchivableApplicationTarget(g.xcodeProj, g.scheme) - if err != nil { - return "", nil, err - } - - dependentTargets := filterApplicationBundleTargets( - g.xcodeProj.DependentTargetsOfTarget(*mainTarget), - exportMethod, - ) - targets := append([]xcodeproj.Target{*mainTarget}, dependentTargets...) - - var mainTargetBundleID string - entitlementsByBundleID := map[string]plistutil.PlistData{} - for i, target := range targets { - bundleID, err := g.targetInfoProvider.TargetBundleID(target.Name, g.configuration) - if err != nil { - return "", nil, fmt.Errorf("failed to get target (%s) bundle id: %s", target.Name, err) - } - - entitlements, err := g.targetInfoProvider.TargetCodeSignEntitlements(target.Name, g.configuration) - if err != nil && !serialized.IsKeyNotFoundError(err) { - return "", nil, fmt.Errorf("failed to get target (%s) bundle id: %s", target.Name, err) - } - - entitlementsByBundleID[bundleID] = plistutil.PlistData(entitlements) - - if i == 0 { - mainTargetBundleID = bundleID - } - } - - return mainTargetBundleID, entitlementsByBundleID, nil -} - // determineCodesignGroup finds the best codesign group (certificate + profiles) // based on the installed Provisioning Profiles and Codesign Certificates. func (g ExportOptionsGenerator) determineCodesignGroup(bundleIDEntitlementsMap map[string]plistutil.PlistData, exportMethod exportoptions.Method, teamID string, xcodeManaged bool) (*export.IosCodeSignGroup, error) { @@ -376,10 +358,10 @@ func addDistributionBundleIdentifierFromXcode12(exportOpts exportoptions.ExportO return nil } -func disableManagedBuildNumberFromXcode13(exportOpts exportoptions.ExportOptions) exportoptions.ExportOptions { +func addManagedBuildNumberFromXcode13(exportOpts exportoptions.ExportOptions, isManageAppVersion bool) exportoptions.ExportOptions { switch options := exportOpts.(type) { case exportoptions.AppStoreOptionsModel: - options.ManageAppVersion = false // Only available for app-store exports + options.ManageAppVersion = isManageAppVersion // Only available for app-store exports return options } diff --git a/vendor/github.com/bitrise-io/go-xcode/v2/exportoptionsgenerator/targets.go b/vendor/github.com/bitrise-io/go-xcode/v2/exportoptionsgenerator/targets.go index b503f9a5..d7d014ee 100644 --- a/vendor/github.com/bitrise-io/go-xcode/v2/exportoptionsgenerator/targets.go +++ b/vendor/github.com/bitrise-io/go-xcode/v2/exportoptionsgenerator/targets.go @@ -3,31 +3,58 @@ package exportoptionsgenerator import ( "fmt" - "github.com/bitrise-io/go-xcode/exportoptions" + "github.com/bitrise-io/go-xcode/plistutil" "github.com/bitrise-io/go-xcode/xcodeproject/serialized" "github.com/bitrise-io/go-xcode/xcodeproject/xcodeproj" "github.com/bitrise-io/go-xcode/xcodeproject/xcscheme" ) -// TargetInfoProvider can determine a target's bundle id and codesign entitlements. -type TargetInfoProvider interface { - TargetBundleID(target, configuration string) (string, error) - TargetCodeSignEntitlements(target, configuration string) (serialized.Object, error) +// ArchiveInfo contains the distribution bundle ID(s) and entitlements of the main target and its dependencies. +type ArchiveInfo struct { + AppBundleID string + AppClipBundleID string + EntitlementsByBundleID map[string]plistutil.PlistData } -// XcodebuildTargetInfoProvider implements TargetInfoProvider. -type XcodebuildTargetInfoProvider struct { - xcodeProj *xcodeproj.XcodeProj -} +// ReadArchiveInfoFromXcodeproject reads the Bundle ID for the given scheme and configuration. +func ReadArchiveInfoFromXcodeproject(xcodeProj *xcodeproj.XcodeProj, scheme *xcscheme.Scheme, configuration string) (ArchiveInfo, error) { + mainTarget, err := ArchivableApplicationTarget(xcodeProj, scheme) + if err != nil { + return ArchiveInfo{}, err + } -// TargetBundleID ... -func (b XcodebuildTargetInfoProvider) TargetBundleID(target, configuration string) (string, error) { - return b.xcodeProj.TargetBundleID(target, configuration) -} + dependentTargets := filterApplicationBundleTargets(xcodeProj.DependentTargetsOfTarget(*mainTarget)) + targets := append([]xcodeproj.Target{*mainTarget}, dependentTargets...) + + mainTargetBundleID := "" + appClipBundleID := "" + entitlementsByBundleID := map[string]plistutil.PlistData{} + for i, target := range targets { + bundleID, err := xcodeProj.TargetBundleID(target.Name, configuration) + if err != nil { + return ArchiveInfo{}, fmt.Errorf("failed to get target (%s) bundle id: %s", target.Name, err) + } -// TargetCodeSignEntitlements ... -func (b XcodebuildTargetInfoProvider) TargetCodeSignEntitlements(target, configuration string) (serialized.Object, error) { - return b.xcodeProj.TargetCodeSignEntitlements(target, configuration) + entitlements, err := xcodeProj.TargetCodeSignEntitlements(target.Name, configuration) + if err != nil && !serialized.IsKeyNotFoundError(err) { + return ArchiveInfo{}, fmt.Errorf("failed to get target (%s) bundle id: %s", target.Name, err) + } + + entitlementsByBundleID[bundleID] = plistutil.PlistData(entitlements) + + if target.IsAppClipProduct() { + appClipBundleID = bundleID + } + if i == 0 { + mainTargetBundleID = bundleID + } + } + + return ArchiveInfo{ + AppBundleID: mainTargetBundleID, + AppClipBundleID: appClipBundleID, + EntitlementsByBundleID: entitlementsByBundleID, + }, nil } // ArchivableApplicationTarget locate archivable app target from a given project and scheme @@ -45,32 +72,14 @@ func ArchivableApplicationTarget(xcodeProj *xcodeproj.XcodeProj, scheme *xcschem return &mainTarget, nil } -func filterApplicationBundleTargets(targets []xcodeproj.Target, exportMethod exportoptions.Method) (filteredTargets []xcodeproj.Target) { - fmt.Printf("Filtering %v application bundle targets", len(targets)) - +func filterApplicationBundleTargets(targets []xcodeproj.Target) (filteredTargets []xcodeproj.Target) { for _, target := range targets { if !target.IsExecutableProduct() { continue } - // App store exports contain App Clip too. App Clip provisioning profile has to be included in export options: - // .. - // provisioningProfiles - // - // io.bundle.id - // Development Application Profile - // io.bundle.id.AppClipID - // Development App Clip Profile - // - // .., - if !exportMethod.IsAppStore() && target.IsAppClipProduct() { - continue - } - filteredTargets = append(filteredTargets, target) } - fmt.Printf("Found %v application bundle targets", len(filteredTargets)) - return } diff --git a/vendor/github.com/bitrise-io/go-xcode/v2/xcarchive/ios.go b/vendor/github.com/bitrise-io/go-xcode/v2/xcarchive/ios.go index 04315507..b854c3c3 100644 --- a/vendor/github.com/bitrise-io/go-xcode/v2/xcarchive/ios.go +++ b/vendor/github.com/bitrise-io/go-xcode/v2/xcarchive/ios.go @@ -21,6 +21,11 @@ func NewIosArchive(path string) (IosArchive, error) { }, err } +// IsSigningManagedAutomatically ... +func (archive IosArchive) IsSigningManagedAutomatically() (bool, error) { + return archive.IsXcodeManaged(), nil +} + // Platform ... func (archive IosArchive) Platform() (autocodesign.Platform, error) { platformName := archive.Application.InfoPlist["DTPlatformName"] @@ -34,11 +39,11 @@ func (archive IosArchive) Platform() (autocodesign.Platform, error) { } } -// ReadCodesignParameters ... -func (archive IosArchive) ReadCodesignParameters() (*autocodesign.AppLayout, error) { +// GetAppLayout ... +func (archive IosArchive) GetAppLayout(_ bool) (autocodesign.AppLayout, error) { platform, err := archive.Platform() if err != nil { - return nil, err + return autocodesign.AppLayout{}, err } bundleIDEntitlementsMap := archive.BundleIDEntitlementsMap() @@ -50,7 +55,7 @@ func (archive IosArchive) ReadCodesignParameters() (*autocodesign.AppLayout, err entitlementsMap[bundleID] = autocodesign.Entitlements(entitlements) } - return &autocodesign.AppLayout{ + return autocodesign.AppLayout{ Platform: platform, EntitlementsByArchivableTargetBundleID: entitlementsMap, UITestTargetBundleIDs: nil, diff --git a/vendor/modules.txt b/vendor/modules.txt index 88b08d6c..69c04660 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -57,7 +57,7 @@ github.com/bitrise-io/go-xcode/xcodeproject/serialized github.com/bitrise-io/go-xcode/xcodeproject/xcodeproj github.com/bitrise-io/go-xcode/xcodeproject/xcscheme github.com/bitrise-io/go-xcode/xcodeproject/xcworkspace -# github.com/bitrise-io/go-xcode/v2 v2.0.0-alpha.56 +# github.com/bitrise-io/go-xcode/v2 v2.0.0-alpha.57.0.20250515110640-76a2cfe0d18b ## explicit; go 1.22 github.com/bitrise-io/go-xcode/v2/autocodesign github.com/bitrise-io/go-xcode/v2/autocodesign/certdownloader