Skip to content

Commit 66f2406

Browse files
authored
filterLatestProfiles (#59)
* filterLatestProfiles * latest profile test
1 parent e43cab3 commit 66f2406

File tree

2 files changed

+85
-0
lines changed

2 files changed

+85
-0
lines changed

cmd/common.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,33 @@ func collectIpaExportSelectableCodeSignGroups(archive xcarchive.IosArchive, inst
115115
return codeSignGroups, nil
116116
}
117117

118+
func filterLatestProfiles(profiles []profileutil.ProvisioningProfileInfoModel) []profileutil.ProvisioningProfileInfoModel {
119+
profilesByBundleIDAndName := map[string][]profileutil.ProvisioningProfileInfoModel{}
120+
for _, profile := range profiles {
121+
bundleID := profile.BundleID
122+
name := profile.Name
123+
bundleIDAndName := bundleID + name
124+
profs, ok := profilesByBundleIDAndName[bundleIDAndName]
125+
if !ok {
126+
profs = []profileutil.ProvisioningProfileInfoModel{}
127+
}
128+
profs = append(profs, profile)
129+
profilesByBundleIDAndName[bundleIDAndName] = profs
130+
}
131+
132+
filteredProfiles := []profileutil.ProvisioningProfileInfoModel{}
133+
for _, profiles := range profilesByBundleIDAndName {
134+
var latestProfile *profileutil.ProvisioningProfileInfoModel
135+
for _, profile := range profiles {
136+
if latestProfile == nil || profile.ExpirationDate.After(latestProfile.ExpirationDate) {
137+
latestProfile = &profile
138+
}
139+
}
140+
filteredProfiles = append(filteredProfiles, *latestProfile)
141+
}
142+
return filteredProfiles
143+
}
144+
118145
func collectIpaExportCodeSignGroups(archive xcarchive.IosArchive, installedCertificates []certificateutil.CertificateInfoModel, installedProfiles []profileutil.ProvisioningProfileInfoModel) ([]export.IosCodeSignGroup, error) {
119146
iosCodeSignGroups := []export.IosCodeSignGroup{}
120147

@@ -230,6 +257,7 @@ func collectIpaExportCodeSignGroups(archive xcarchive.IosArchive, installedCerti
230257

231258
selectedBundleIDProfileMap := map[string]profileutil.ProvisioningProfileInfoModel{}
232259
for bundleID, profiles := range bundleIDProfilesMap {
260+
profiles = filterLatestProfiles(profiles)
233261
profileOptions := []string{}
234262
for _, profile := range profiles {
235263
profileOption := fmt.Sprintf("%s (%s)", profile.Name, profile.UUID)

cmd/common_test.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package cmd
2+
3+
import (
4+
"testing"
5+
"time"
6+
7+
"github.com/stretchr/testify/require"
8+
9+
"github.com/bitrise-tools/go-xcode/profileutil"
10+
)
11+
12+
func createTime(t *testing.T, timeStr string) time.Time {
13+
date, err := time.Parse("2006.01.02", timeStr)
14+
require.NoError(t, err)
15+
return date
16+
}
17+
18+
func timeToString(date time.Time) string {
19+
return date.Format("2006.01.02")
20+
}
21+
22+
func Test_filterLatestProfiles(t *testing.T) {
23+
profiles := []profileutil.ProvisioningProfileInfoModel{
24+
{
25+
Name: "Profile 1",
26+
BundleID: "*",
27+
ExpirationDate: createTime(t, "2017.11.01"),
28+
},
29+
{
30+
Name: "Profile 1",
31+
BundleID: "*",
32+
ExpirationDate: createTime(t, "2017.12.01"),
33+
},
34+
{
35+
Name: "Profile 2",
36+
BundleID: "io.bitrise",
37+
ExpirationDate: createTime(t, "2017.10.01"),
38+
},
39+
}
40+
41+
filtered := filterLatestProfiles(profiles)
42+
require.Equal(t, 2, len(filtered))
43+
44+
desiredProfileExpireMap := map[string]bool{
45+
"2017.12.01": false,
46+
"2017.10.01": false,
47+
}
48+
for _, profile := range filtered {
49+
expire := timeToString(profile.ExpirationDate)
50+
if _, ok := desiredProfileExpireMap[expire]; ok {
51+
desiredProfileExpireMap[expire] = true
52+
}
53+
}
54+
for _, found := range desiredProfileExpireMap {
55+
require.True(t, found)
56+
}
57+
}

0 commit comments

Comments
 (0)