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

        return variantGroup
    }

    private func getSourceChildren(targetSource: TargetSource, dirPath: Path) throws -> [Path] {

        func getSourceExcludes(dirPath: Path) -> [Path] {
            return targetSource.excludes.map {
                Path.glob("\(dirPath)/\($0)")
                    .map {
                        guard $0.isDirectory else {
                            return [$0]
                        }

                        return (try? $0.recursiveChildren().filter { $0.isFile }) ?? []
                    }
                    .reduce([], +)
            }
            .reduce([], +)
        }

        let defaultExcludedFiles = [".DS_Store"].map { dirPath + Path($0) }

        let rootSourcePath = spec.basePath + targetSource.path

        /*
         Exclude following if mentioned in TargetSource.excludes.

         */

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

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

        return try dirPath.children()
            .filter {
                if $0.isDirectory {
                    let pathChildren = try $0.children()
                        .filter(isNotExcludeFilePath(_:))

                    return !pathChildren.isEmpty
                } else if $0.isFile {
                    return isNotExcludeFilePath($0)
                } else {
                    return false
                }
