         for localisedDirectory in localisedDirectories {
             let localisationName = localisedDirectory.lastComponentWithoutExtension
             for filePath in try localisedDirectory.children()
-                .filter(isNotExcludeFilePath(_:))
+                .filter(isIncludedPath)
                 .sorted { $0.lastComponent < $1.lastComponent } {
                 // find base localisation variant group
                 // ex: Foo.strings will be added to Foo.strings or Foo.storyboard variant group

        // create variant groups of the base localisation first
        var baseLocalisationVariantGroups: [PBXVariantGroup] = []

        let sourceExcludeFilePaths: Set<Path> = Set(
            getSourceExcludes(targetSource: targetSource)
        )

        func isNotExcludeFilePath(_ path: Path) -> Bool {
            return !path.lastComponent.contains(".DS_Store")
                && !sourceExcludeFilePaths.contains(path)
        }

        if let baseLocalisedDirectory = baseLocalisedDirectory {
            for filePath in try baseLocalisedDirectory.children()
                .filter(isNotExcludeFilePath(_:))
                .sorted() {
                let variantGroup = getVariantGroup(path: filePath, inPath: path)
                groupChildren.append(variantGroup.reference)


    private func getSourceFiles(targetSource: TargetSource, path: Path) throws -> [SourceFile] {

        // generate excluded paths
        targetSourceExcludePaths = getSourceExcludes(targetSource: targetSource)

        let type = targetSource.type ?? (path.isFile || path.extension != nil ? .file : .group)
        let createIntermediateGroups = spec.options.createIntermediateGroups

