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