Skip to content

Commit 5dded42

Browse files
Added testFlightInternalTestingOnly to GenerateApplicationExportOptions method (#258)
* add addTestFlightInternalTestingOnly method * updated GenerateApplicationExportOptions method * updated mod file to point to fork of v1 * 1. Added xcode version check >= 15 2. Added tests * Update go-xcode to version v1.1.2 * Update exportoptionsgenerator_test.go * updated dependencies * Fix missing integration test dependencies --------- Co-authored-by: Krisztián Gödrei <krisztian.godrei@bitrise.io>
1 parent a64afea commit 5dded42

File tree

5 files changed

+146
-77
lines changed

5 files changed

+146
-77
lines changed

exportoptionsgenerator/exportoptionsgenerator.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ func (g ExportOptionsGenerator) GenerateApplicationExportOptions(
5656
archivedWithXcodeManagedProfiles bool,
5757
codeSigningStyle exportoptions.SigningStyle,
5858
xcodeMajorVersion int64,
59+
testFlightInternalTestingOnly bool,
5960
) (exportoptions.ExportOptions, error) {
6061
mainTargetBundleID, entitlementsByBundleID, err := g.applicationTargetsAndEntitlements(exportMethod)
6162
if err != nil {
@@ -91,6 +92,12 @@ func (g ExportOptionsGenerator) GenerateApplicationExportOptions(
9192
exportOpts = addManualSigningFields(exportOpts, codeSignGroup, archivedWithXcodeManagedProfiles, g.logger)
9293
}
9394

95+
if xcodeMajorVersion >= 15 {
96+
if testFlightInternalTestingOnly {
97+
exportOpts = addTestFlightInternalTestingOnly(exportOpts, testFlightInternalTestingOnly)
98+
}
99+
}
100+
94101
return exportOpts, nil
95102
}
96103

@@ -381,6 +388,16 @@ func addTeamID(exportOpts exportoptions.ExportOptions, teamID string) exportopti
381388
return exportOpts
382389
}
383390

391+
func addTestFlightInternalTestingOnly(exportOpts exportoptions.ExportOptions, testFlightInternalTestingOnly bool) exportoptions.ExportOptions {
392+
switch options := exportOpts.(type) {
393+
case exportoptions.AppStoreOptionsModel:
394+
options.TestFlightInternalTestingOnly = testFlightInternalTestingOnly // Only available for app-store exports
395+
return options
396+
}
397+
398+
return exportOpts
399+
}
400+
384401
func addManualSigningFields(exportOpts exportoptions.ExportOptions, codeSignGroup *export.IosCodeSignGroup, archivedWithXcodeManagedProfiles bool, logger log.Logger) exportoptions.ExportOptions {
385402
exportCodeSignStyle := ""
386403
exportProfileMapping := map[string]string{}

exportoptionsgenerator/exportoptionsgenerator_test.go

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -167,13 +167,14 @@ func TestExportOptionsGenerator_GenerateApplicationExportOptions_ForAutomaticSig
167167
logger.EnableDebugLog(true)
168168

169169
tests := []struct {
170-
name string
171-
generatorFactory func() ExportOptionsGenerator
172-
exportMethod exportoptions.Method
173-
containerEnvironment string
174-
xcodeVersion int64
175-
want string
176-
wantErr bool
170+
name string
171+
generatorFactory func() ExportOptionsGenerator
172+
exportMethod exportoptions.Method
173+
containerEnvironment string
174+
xcodeVersion int64
175+
testFlightInternalTestingOnly bool
176+
want string
177+
wantErr bool
177178
}{
178179
{
179180
name: "Default development exportOptions",
@@ -264,13 +265,45 @@ func TestExportOptionsGenerator_GenerateApplicationExportOptions_ForAutomaticSig
264265
<key>teamID</key>
265266
<string>TEAM123</string>
266267
</dict>
268+
</plist>`,
269+
},
270+
{
271+
name: "When exporting for TestFlight internal testing only",
272+
exportMethod: exportoptions.MethodAppStore,
273+
xcodeVersion: 15,
274+
testFlightInternalTestingOnly: true,
275+
generatorFactory: func() ExportOptionsGenerator {
276+
applicationTarget := givenApplicationTarget(nil)
277+
xcodeProj := givenXcodeproj([]xcodeproj.Target{applicationTarget})
278+
scheme := givenScheme(applicationTarget)
279+
280+
g := New(&xcodeProj, &scheme, "", logger)
281+
g.targetInfoProvider = MockTargetInfoProvider{
282+
bundleID: map[string]string{"Application": bundleID},
283+
}
284+
285+
return g
286+
},
287+
want: `<?xml version="1.0" encoding="UTF-8"?>
288+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
289+
<plist version="1.0">
290+
<dict>
291+
<key>manageAppVersionAndBuildNumber</key>
292+
<false/>
293+
<key>method</key>
294+
<string>app-store</string>
295+
<key>teamID</key>
296+
<string>TEAM123</string>
297+
<key>testFlightInternalTestingOnly</key>
298+
<true/>
299+
</dict>
267300
</plist>`,
268301
},
269302
}
270303
for _, tt := range tests {
271304
t.Run(tt.name, func(t *testing.T) {
272305
// Act
273-
gotOpts, err := tt.generatorFactory().GenerateApplicationExportOptions(tt.exportMethod, tt.containerEnvironment, teamID, true, true, false, exportoptions.SigningStyleAutomatic, tt.xcodeVersion)
306+
gotOpts, err := tt.generatorFactory().GenerateApplicationExportOptions(tt.exportMethod, tt.containerEnvironment, teamID, true, true, false, exportoptions.SigningStyleAutomatic, tt.xcodeVersion, tt.testFlightInternalTestingOnly)
274307

275308
// Assert
276309
require.NoError(t, err)
@@ -372,7 +405,7 @@ func TestExportOptionsGenerator_GenerateApplicationExportOptions(t *testing.T) {
372405
}
373406

374407
// Act
375-
gotOpts, err := g.GenerateApplicationExportOptions(tt.exportMethod, "Production", teamID, true, true, false, exportoptions.SigningStyleManual, tt.xcodeVersion)
408+
gotOpts, err := g.GenerateApplicationExportOptions(tt.exportMethod, "Production", teamID, true, true, false, exportoptions.SigningStyleManual, tt.xcodeVersion, true)
376409

377410
// Assert
378411
require.NoError(t, err)
@@ -442,7 +475,7 @@ func TestExportOptionsGenerator_GenerateApplicationExportOptions_WhenNoProfileFo
442475
}
443476

444477
// Act
445-
gotOpts, err := g.GenerateApplicationExportOptions(tt.exportMethod, "Production", teamID, true, true, false, exportoptions.SigningStyleManual, tt.xcodeVersion)
478+
gotOpts, err := g.GenerateApplicationExportOptions(tt.exportMethod, "Production", teamID, true, true, false, exportoptions.SigningStyleManual, tt.xcodeVersion, true)
446479

447480
// Assert
448481
require.NoError(t, err)

go.mod

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,60 @@
11
module github.com/bitrise-io/go-xcode/v2
22

3-
go 1.21
3+
go 1.22
44

55
toolchain go1.23.2
66

77
require (
8-
cloud.google.com/go/secretmanager v1.14.2
9-
cloud.google.com/go/storage v1.48.0
8+
cloud.google.com/go/secretmanager v1.14.3
9+
cloud.google.com/go/storage v1.50.0
1010
github.com/bitrise-io/go-steputils v1.0.5
1111
github.com/bitrise-io/go-steputils/v2 v2.0.0-alpha.18
1212
github.com/bitrise-io/go-utils v1.0.12
1313
github.com/bitrise-io/go-utils/v2 v2.0.0-alpha.23
14-
github.com/bitrise-io/go-xcode v1.1.1
14+
github.com/bitrise-io/go-xcode v1.1.2
1515
github.com/golang-jwt/jwt/v4 v4.5.0
1616
github.com/google/go-querystring v1.1.0
1717
github.com/hashicorp/go-retryablehttp v0.7.7
1818
github.com/hashicorp/go-version v1.6.0
1919
github.com/ryanuber/go-glob v1.0.0
20-
github.com/stretchr/testify v1.9.0
20+
github.com/stretchr/testify v1.10.0
2121
golang.org/x/oauth2 v0.24.0
22-
golang.org/x/text v0.20.0
23-
google.golang.org/api v0.210.0
22+
golang.org/x/text v0.21.0
23+
google.golang.org/api v0.214.0
2424
howett.net/plist v1.0.0
2525
)
2626

2727
require (
2828
cel.dev/expr v0.16.1 // indirect
2929
cloud.google.com/go v0.116.0 // indirect
30-
cloud.google.com/go/auth v0.11.0 // indirect
30+
cloud.google.com/go/auth v0.13.0 // indirect
3131
cloud.google.com/go/auth/oauth2adapt v0.2.6 // indirect
32-
cloud.google.com/go/compute/metadata v0.5.2 // indirect
32+
cloud.google.com/go/compute/metadata v0.6.0 // indirect
3333
cloud.google.com/go/iam v1.2.2 // indirect
3434
cloud.google.com/go/monitoring v1.21.2 // indirect
35-
github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.1 // indirect
35+
github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 // indirect
3636
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1 // indirect
3737
github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1 // indirect
3838
github.com/bitrise-io/go-pkcs12 v0.0.0-20230815095624-feb898696e02 // indirect
3939
github.com/bitrise-io/go-plist v0.0.0-20210301100253-4b1a112ccd10 // indirect
40-
github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect
4140
github.com/cespare/xxhash/v2 v2.3.0 // indirect
4241
github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 // indirect
4342
github.com/davecgh/go-spew v1.1.1 // indirect
44-
github.com/envoyproxy/go-control-plane v0.13.0 // indirect
43+
github.com/envoyproxy/go-control-plane/envoy v1.32.3 // indirect
4544
github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect
4645
github.com/felixge/httpsnoop v1.0.4 // indirect
4746
github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa // indirect
4847
github.com/go-logr/logr v1.4.2 // indirect
4948
github.com/go-logr/stdr v1.2.2 // indirect
5049
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
51-
github.com/google/go-cmp v0.6.0 // indirect
5250
github.com/google/s2a-go v0.1.8 // indirect
5351
github.com/google/uuid v1.6.0 // indirect
5452
github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect
5553
github.com/googleapis/gax-go/v2 v2.14.0 // indirect
5654
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
57-
github.com/kr/pretty v0.3.1 // indirect
5855
github.com/pkg/errors v0.9.1 // indirect
5956
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
6057
github.com/pmezard/go-difflib v1.0.0 // indirect
61-
github.com/rogpeppe/go-internal v1.10.0 // indirect
6258
github.com/stretchr/objx v0.5.2 // indirect
6359
go.opencensus.io v0.24.0 // indirect
6460
go.opentelemetry.io/contrib/detectors/gcp v1.29.0 // indirect
@@ -69,17 +65,16 @@ require (
6965
go.opentelemetry.io/otel/sdk v1.29.0 // indirect
7066
go.opentelemetry.io/otel/sdk/metric v1.29.0 // indirect
7167
go.opentelemetry.io/otel/trace v1.29.0 // indirect
72-
golang.org/x/crypto v0.29.0 // indirect
73-
golang.org/x/net v0.31.0 // indirect
74-
golang.org/x/sync v0.9.0 // indirect
75-
golang.org/x/sys v0.27.0 // indirect
76-
golang.org/x/term v0.26.0 // indirect
68+
golang.org/x/crypto v0.31.0 // indirect
69+
golang.org/x/net v0.33.0 // indirect
70+
golang.org/x/sync v0.10.0 // indirect
71+
golang.org/x/sys v0.28.0 // indirect
72+
golang.org/x/term v0.27.0 // indirect
7773
golang.org/x/time v0.8.0 // indirect
7874
google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 // indirect
79-
google.golang.org/genproto/googleapis/api v0.0.0-20241113202542-65e8d215514f // indirect
80-
google.golang.org/genproto/googleapis/rpc v0.0.0-20241118233622-e639e219e697 // indirect
81-
google.golang.org/grpc v1.67.2 // indirect
82-
google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a // indirect
75+
google.golang.org/genproto/googleapis/api v0.0.0-20241118233622-e639e219e697 // indirect
76+
google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576 // indirect
77+
google.golang.org/grpc v1.67.3 // indirect
8378
google.golang.org/protobuf v1.35.2 // indirect
8479
gopkg.in/yaml.v3 v3.0.1 // indirect
8580
)

0 commit comments

Comments
 (0)