@@ -145,7 +145,7 @@ type AssetWriter interface {
145145
146146// PrepareCodesigning selects a suitable code signing strategy based on the step and project configuration,
147147// then downloads code signing assets (profiles, certificates) and registers test devices if needed
148- func (m * Manager ) PrepareCodesigning () (* devportalservice.APIKeyConnection , error ) {
148+ func (m * Manager ) PrepareCodesigning () (* devportalservice.APIKeyConnection , map [autocodesign. DistributionType ]autocodesign. AppCodesignAssets , error ) {
149149 strategy , reason , err := m .selectCodeSigningStrategy (m .appleAuthCredentials )
150150 if err != nil {
151151 m .logger .Warnf ("%s" , err )
@@ -161,41 +161,42 @@ func (m *Manager) PrepareCodesigning() (*devportalservice.APIKeyConnection, erro
161161 m .logger .TInfof ("Downloading certificates..." )
162162 certificates , err := m .downloadCertificates ()
163163 if err != nil {
164- return nil , err
164+ return nil , nil , err
165165 }
166166
167167 if err := m .validateCertificatesForXcodeManagedSigning (certificates ); err != nil {
168- return nil , err
168+ return nil , nil , err
169169 }
170170
171171 m .logger .Println ()
172172 m .logger .TInfof ("Installing certificates..." )
173173 if err := m .installCertificates (certificates ); err != nil {
174- return nil , err
174+ return nil , nil , err
175175 }
176176
177177 needsTestDevices := autocodesign .DistributionTypeRequiresDeviceList ([]autocodesign.DistributionType {m .opts .ExportMethod })
178178 if needsTestDevices && m .opts .RegisterTestDevices && len (m .bitriseTestDevices ) != 0 {
179179 if err := m .registerTestDevices (m .appleAuthCredentials , m .bitriseTestDevices ); err != nil {
180- return nil , err
180+ return nil , nil , err
181181 }
182182 }
183183
184- return m .appleAuthCredentials .APIKey , nil
184+ return m .appleAuthCredentials .APIKey , nil , nil
185185 }
186186 case codeSigningBitriseAPIKey , codeSigningBitriseAppleID :
187187 {
188188 m .logger .Println ()
189189 m .logger .Infof ("Code signing asset management by Bitrise" )
190190 m .logger .Printf ("Reason: %s" , reason )
191- if err := m .prepareCodeSigningWithBitrise (m .appleAuthCredentials , m .bitriseTestDevices ); err != nil {
192- return nil , err
191+ codesigningAssets , err := m .prepareCodeSigningWithBitrise (m .appleAuthCredentials , m .bitriseTestDevices )
192+ if err != nil {
193+ return nil , nil , err
193194 }
194195
195- return nil , nil
196+ return nil , codesigningAssets , nil
196197 }
197198 default :
198- return nil , fmt .Errorf ("unknown code sign strategy" )
199+ return nil , nil , fmt .Errorf ("unknown code sign strategy" )
199200 }
200201}
201202
@@ -375,24 +376,24 @@ func (m *Manager) registerTestDevices(credentials devportalservice.Credentials,
375376 return nil
376377}
377378
378- func (m * Manager ) prepareCodeSigningWithBitrise (credentials devportalservice.Credentials , testDevices []devportalservice.TestDevice ) error {
379+ func (m * Manager ) prepareCodeSigningWithBitrise (credentials devportalservice.Credentials , testDevices []devportalservice.TestDevice ) ( map [autocodesign. DistributionType ]autocodesign. AppCodesignAssets , error ) {
379380 fmt .Println ()
380381 m .logger .TDebugf ("Analyzing project" )
381382 appLayout , err := m .detailsProvider .GetAppLayout (m .opts .SignUITests )
382383 if err != nil {
383- return err
384+ return nil , err
384385 }
385386
386387 fmt .Println ()
387388 m .logger .TDebugf ("Downloading certificates" )
388389 certs , err := m .downloadCertificates ()
389390 if err != nil {
390- return err
391+ return nil , err
391392 }
392393
393394 typeToLocalCerts , err := autocodesign .GetValidLocalCertificates (certs )
394395 if err != nil {
395- return err
396+ return nil , err
396397 }
397398
398399 var testDevicesToRegister []devportalservice.TestDevice
@@ -403,7 +404,7 @@ func (m *Manager) prepareCodeSigningWithBitrise(credentials devportalservice.Cre
403404 codesignAssetsByDistributionType , autoCodesignErr := m .prepareAutomaticAssets (credentials , appLayout , typeToLocalCerts , testDevicesToRegister )
404405 if autoCodesignErr != nil {
405406 if ! m .fallbackProfileDownloader .IsAvailable () {
406- return autoCodesignErr
407+ return nil , autoCodesignErr
407408 }
408409
409410 m .logger .Println ()
@@ -415,17 +416,17 @@ func (m *Manager) prepareCodeSigningWithBitrise(credentials devportalservice.Cre
415416 if err != nil {
416417 m .logger .Println ()
417418 m .logger .Warnf ("Manual code signing failed: %s" , err )
418- return autoCodesignErr
419+ return nil , autoCodesignErr
419420 }
420421 }
421422
422423 if m .assetWriter != nil {
423424 if err := m .assetWriter .ForceCodesignAssets (m .opts .ExportMethod , codesignAssetsByDistributionType ); err != nil {
424- return fmt .Errorf ("failed to force codesign settings: %s" , err )
425+ return nil , fmt .Errorf ("failed to force codesign settings: %s" , err )
425426 }
426427 }
427428
428- return nil
429+ return codesignAssetsByDistributionType , nil
429430}
430431
431432func (m * Manager ) prepareAutomaticAssets (credentials devportalservice.Credentials , appLayout autocodesign.AppLayout , typeToLocalCerts autocodesign.LocalCertificates , testDevicesToRegister []devportalservice.TestDevice ) (map [autocodesign.DistributionType ]autocodesign.AppCodesignAssets , error ) {
@@ -517,7 +518,37 @@ func (m *Manager) createCodeSignAssetMap(appLayout autocodesign.AppLayout, certi
517518 }
518519 }
519520
520- // TODO: UI test targets are not supported yet
521+ if len (appLayout .UITestTargetBundleIDs ) > 0 && m .opts .ExportMethod == autocodesign .Development {
522+ // Capabilities are not supported for UITest targets.
523+ // Xcode managed signing uses Wildcard Provisioning Profiles for UITest target signing.
524+
525+ uiTestTargetBundleIDEntitlementsMap := map [string ]plistutil.PlistData {}
526+ for _ , bundleID := range appLayout .UITestTargetBundleIDs {
527+ // UITest targets do not have entitlements, so we use an empty plist.
528+ uiTestTargetBundleIDEntitlementsMap [bundleID ] = plistutil.PlistData {}
529+ }
530+
531+ uiTestSigningAssets , err := provider .DetermineCodesignGroup (certificates , profiles , nil , uiTestTargetBundleIDEntitlementsMap , exportoptions .Method (autocodesign .Development ), m .opts .TeamID , true )
532+ if err != nil || uiTestSigningAssets == nil {
533+ if err == nil {
534+ err = errors .New ("no signing assets found for UITest targets" )
535+ }
536+ return nil , fmt .Errorf ("failed to determine codesign group for UITest targets: %w" , err )
537+ }
538+
539+ bundleIDProfileInfoMap := uiTestSigningAssets .BundleIDProfileMap ()
540+ bundleIDProfileMap := map [string ]autocodesign.Profile {}
541+ for bundleID , profileInfo := range bundleIDProfileInfoMap {
542+ signingProfile , err := m .profileConverter .ProfileInfoToProfile (profileInfo )
543+ if err != nil {
544+ return nil , fmt .Errorf ("failed to convert profile info: %w" , err )
545+ }
546+ bundleIDProfileMap [bundleID ] = signingProfile
547+ }
548+
549+ developmentAssets := assetsByDistributionType [autocodesign .Development ]
550+ developmentAssets .UITestTargetProfilesByBundleID = bundleIDProfileMap
551+ }
521552
522553 return assetsByDistributionType , nil
523554
0 commit comments