Skip to content

Commit 2566ca4

Browse files
authored
Supported platforms (#198)
* Utilise SUPPORTED_PLATFORMS build settings in the SDKFilter * Update pathfilters.go * Test SDK filter on multiplatform app * Utilise SUPPORTED_PLATFORMS if SDKROOT=auto
1 parent f9a47a7 commit 2566ca4

File tree

3 files changed

+683
-8
lines changed

3 files changed

+683
-8
lines changed

pathfilters/pathfilters.go

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package pathfilters
22

33
import (
44
"fmt"
5+
"strings"
56

67
"github.com/bitrise-io/go-utils/pathutil"
78
"github.com/bitrise-io/go-xcode/xcodeproject/xcodeproj"
@@ -73,7 +74,7 @@ var AllowIphoneosSDKFilter = SDKFilter("iphoneos", true)
7374
var AllowMacosxSDKFilter = SDKFilter("macosx", true)
7475

7576
// SDKFilter ...
76-
func SDKFilter(sdk string, allowed bool) pathutil.FilterFunc {
77+
func SDKFilter(expectedSDK string, allowed bool) pathutil.FilterFunc {
7778
return func(pth string) (bool, error) {
7879
found := false
7980

@@ -106,6 +107,7 @@ func SDKFilter(sdk string, allowed bool) pathutil.FilterFunc {
106107
return false, fmt.Errorf("not Xcode project nor workspace file: %s", pth)
107108
}
108109

110+
supportedPlatformsMap := map[string]bool{}
109111
sdkMap := map[string]bool{}
110112
for _, projectFile := range projectFiles {
111113
project, err := xcodeproj.Open(projectFile)
@@ -119,22 +121,39 @@ func SDKFilter(sdk string, allowed bool) pathutil.FilterFunc {
119121
buildConfigurations = append(buildConfigurations, target.BuildConfigurationList.BuildConfigurations...)
120122
}
121123

122-
for _, buildConfiguratioon := range buildConfigurations {
123-
sdk, err := buildConfiguratioon.BuildSettings.String("SDKROOT")
124+
for _, buildConfiguration := range buildConfigurations {
125+
sdk, err := buildConfiguration.BuildSettings.String("SDKROOT")
124126
if err == nil {
125127
sdkMap[sdk] = true
126128
}
129+
130+
if sdk != "auto" {
131+
continue
132+
}
133+
134+
supportedPlatformsValue, err := buildConfiguration.BuildSettings.String("SUPPORTED_PLATFORMS")
135+
if err == nil {
136+
supportedPlatforms := strings.Split(supportedPlatformsValue, " ")
137+
for _, platform := range supportedPlatforms {
138+
supportedPlatformsMap[platform] = true
139+
}
140+
}
127141
}
128142

129143
for projectSDK := range sdkMap {
130-
if projectSDK == sdk {
144+
if projectSDK == expectedSDK {
131145
found = true
132146
break
133147
}
134148
}
135-
}
136149

137-
fmt.Printf("Found %v SDK's from %v project files.", len(sdkMap), len(projectFiles))
150+
for platform := range supportedPlatformsMap {
151+
if platform == expectedSDK {
152+
found = true
153+
break
154+
}
155+
}
156+
}
138157

139158
return (allowed == found), nil
140159
}

pathfilters/pathfilters_test.go

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,13 @@ func TestAllowIphoneosSDKFilter(t *testing.T) {
158158
macosxPbxprojPth := filepath.Join(macosxProject, "project.pbxproj")
159159
require.NoError(t, fileutil.WriteStringToFile(macosxPbxprojPth, testMacOSPbxprojContent))
160160

161-
t.Log("iphoneos sdk")
161+
multiplatformProject := filepath.Join(tmpDir, "multiplatform.xcodeproj")
162+
require.NoError(t, os.MkdirAll(multiplatformProject, 0777))
163+
164+
multiplatformPbxprojPth := filepath.Join(multiplatformProject, "project.pbxproj")
165+
require.NoError(t, fileutil.WriteStringToFile(multiplatformPbxprojPth, testMultiplatformPbxprojContent))
166+
167+
t.Log("iphoneos sdk - iOS app")
162168
{
163169
paths := []string{
164170
iphoneosProject,
@@ -172,7 +178,20 @@ func TestAllowIphoneosSDKFilter(t *testing.T) {
172178
require.Equal(t, expectedFiltered, actualFiltered)
173179
}
174180

175-
t.Log("macosx sdk")
181+
t.Log("iphoneos sdk - multiplatform app")
182+
{
183+
paths := []string{
184+
multiplatformProject,
185+
}
186+
expectedFiltered := []string{
187+
multiplatformProject,
188+
}
189+
actualFiltered, err := pathutil.FilterPaths(paths, AllowIphoneosSDKFilter)
190+
require.NoError(t, err)
191+
require.Equal(t, expectedFiltered, actualFiltered)
192+
}
193+
194+
t.Log("macosx sdk - macOS app")
176195
{
177196
paths := []string{
178197
iphoneosProject,
@@ -185,4 +204,17 @@ func TestAllowIphoneosSDKFilter(t *testing.T) {
185204
require.NoError(t, err)
186205
require.Equal(t, expectedFiltered, actualFiltered)
187206
}
207+
208+
t.Log("macosx sdk - multiplatform app")
209+
{
210+
paths := []string{
211+
multiplatformProject,
212+
}
213+
expectedFiltered := []string{
214+
multiplatformProject,
215+
}
216+
actualFiltered, err := pathutil.FilterPaths(paths, AllowMacosxSDKFilter)
217+
require.NoError(t, err)
218+
require.Equal(t, expectedFiltered, actualFiltered)
219+
}
188220
}

0 commit comments

Comments
 (0)