Skip to content
Snippets Groups Projects

Organizing Package.swift

Merged Bruno Muniz requested to merge refactor/package-swift into development
+ 721
1068
// swift-tools-version:5.6
import PackageDescription
// MARK: - Helpers
struct Feature {
var product: Product
var targets: [Target]
var targetDependency: Target.Dependency
static func library(
name: String,
dependencies: [Target.Dependency] = [],
testDependencies: [Target.Dependency] = [],
swiftSettings: [SwiftSetting] = [
.unsafeFlags(
[
"-Xfrontend",
"-debug-time-function-bodies",
"-Xfrontend",
"-debug-time-expression-type-checking",
],
.when(configuration: .debug)
)
]
) -> Feature {
.init(
product: .library(name: name, targets: [name]),
targets: [
.target(
name: name,
dependencies: dependencies,
swiftSettings: swiftSettings
),
.testTarget(
name: "\(name)Tests",
dependencies: [.target(name: name)] + testDependencies,
swiftSettings: swiftSettings
),
],
targetDependency: .target(name: name)
)
}
}
struct Dependency {
var packageDependency: Package.Dependency
var targetDependency: Target.Dependency
static func local(
path: String,
name: String,
package: String
) -> Dependency {
.init(
packageDependency: .package(path: path),
targetDependency: .product(name: name, package: package)
)
}
static func external(
url: String,
version: Range<Version>,
name: String,
package: String
) -> Dependency {
.init(
packageDependency: .package(url: url, version),
targetDependency: .product(name: name, package: package)
)
}
}
// MARK: - Manifest
extension Dependency {
static let all: [Dependency] = [
.retry,
.quick,
.shout,
.nimble,
.snapkit,
.firebase,
.chatLayout,
.googleDrive,
.googleSignIn,
.fileProvider,
.swiftyBeaver,
.swiftyDropbox,
.differenceKit,
.swiftProtobuf,
.clientDatabase,
.keychainAccess,
.swiftCustomDump,
.combineSchedulers,
.xcTestDynamicOverlay,
.scrollViewController,
.composableArchitecture
]
static let keychainAccess = Dependency.external(
url: "https://github.com/kishikawakatsumi/KeychainAccess.git",
version: .upToNextMajor(from: "4.2.2"),
name: "KeychainAccess",
package: "KeychainAccess"
)
static let combineSchedulers = Dependency.external(
url: "https://github.com/pointfreeco/combine-schedulers",
version: .upToNextMajor(from: "0.5.0"),
name: "CombineSchedulers",
package: "CombineSchedulers"
)
static let quick = Dependency.external(
url: "https://github.com/Quick/Quick",
version: .upToNextMajor(from: "3.0.0"),
name: "Quick",
package: "Quick"
)
static let nimble = Dependency.external(
url: "https://github.com/Quick/Nimble",
version: .upToNextMajor(from: "9.0.0"),
name: "Nimble",
package: "Nimble"
)
static let snapkit = Dependency.external(
url: "https://github.com/SnapKit/SnapKit",
version: .upToNextMajor(from: "5.0.1"),
name: "SnapKit",
package: "SnapKit"
)
static let retry = Dependency.external(
url: "https://github.com/icanzilb/Retry.git",
version: .upToNextMajor(from: "0.6.3"),
name: "Retry",
package: "Retry"
)
static let chatLayout = Dependency.external(
url: "https://github.com/ekazaev/ChatLayout",
version: .upToNextMajor(from: "1.1.14"),
name: "ChatLayout",
package: "ChatLayout"
)
static let differenceKit = Dependency.external(
url: "https://github.com/ra1028/DifferenceKit",
version: .upToNextMajor(from: "1.2.0"),
name: "DifferenceKit",
package: "DifferenceKit"
)
static let swiftProtobuf = Dependency.external(
url: "https://github.com/apple/swift-protobuf",
version: .upToNextMajor(from: "1.14.0"),
name: "SwiftProtobuf",
package: "SwiftProtobuf"
)
static let googleSignIn = Dependency.external(
url: "https://github.com/google/GoogleSignIn-iOS",
version: .upToNextMajor(from: "6.1.0"),
name: "GoogleSignIn-iOS",
package: "GoogleSignIn-iOS"
)
static let swiftyDropbox = Dependency.external(
url: "https://github.com/dropbox/SwiftyDropbox.git",
version: .upToNextMajor(from: "8.2.1"),
name: "SwiftyDropbox",
package: "SwiftyDropbox"
)
static let fileProvider = Dependency.external(
url: "https://github.com/amosavian/FileProvider.git",
version: .upToNextMajor(from: "0.26.0"),
name: "FileProvider",
package: "FileProvider"
)
static let swiftyBeaver = Dependency.external(
url: "https://github.com/SwiftyBeaver/SwiftyBeaver.git",
version: .upToNextMajor(from: "1.9.5"),
name: "SwiftyBeaver",
package: "SwiftyBeaver"
)
static let scrollViewController = Dependency.external(
url: "https://github.com/darrarski/ScrollViewController",
version: .upToNextMajor(from: "1.2.0"),
name: "ScrollViewController",
package: "ScrollViewController"
)
static let swiftCustomDump = Dependency.external(
url: "https://github.com/pointfreeco/swift-custom-dump.git",
version: .upToNextMajor(from: "0.5.0"),
name: "SwiftCustomDump",
package: "SwiftCustomDump"
)
static let xcTestDynamicOverlay = Dependency.external(
url: "https://github.com/pointfreeco/xctest-dynamic-overlay.git",
version: .upToNextMajor(from: "0.3.3"),
name: "XCTestDynamicOverlay",
package: "xctest-dynamic-overlay"
)
static let composableArchitecture = Dependency.external(
url: "https://github.com/pointfreeco/swift-composable-architecture.git",
version: .upToNextMajor(from: "0.32.0"),
name: "ComposableArchitecture",
package: "swift-composable-architecture"
)
static let shout = Dependency.external(
url: "https://github.com/darrarski/Shout.git",
version: .upToNextMajor(from: ""), // revision: df5a662293f0ac15eeb4f2fd3ffd0c07b73d0de0
name: "Shout",
package: "Shout"
)
static let firebase = Dependency.external(
url: "https://github.com/firebase/firebase-ios-sdk.git",
version: .upToNextMajor(from: "8.10.0"),
name: "Firebase",
package: "Firebase"
)
static let clientDatabase = Dependency.external(
url: "https://git.xx.network/elixxir/client-ios-db.git",
version: .upToNextMajor(from: "1.0.8"),
name: "",
package: ""
)
static let googleDrive = Dependency.external(
url: "https://github.com/google/google-api-objectivec-client-for-rest",
version: .upToNextMajor(from: "1.6.0"),
name: "GoogleDrive",
package: "GoogleDrive"
)
}
extension Feature {
static let all: [Feature] = [
.app
]
static let app = Feature.library(
name: "App",
dependencies: [
Feature.scan.targetDependency,
Feature.chat.targetDependency,
Feature.menu.targetDependency,
Feature.push.targetDependency,
Feature.sftp.targetDependency,
Feature.toast.targetDependency,
Feature.crash.targetDependency,
Feature.backup.targetDependency,
Feature.search.targetDependency,
Feature.launch.targetDependency,
Feature.icloud.targetDependency,
Feature.dropbox.targetDependency,
Feature.contact.targetDependency,
Feature.restore.targetDependency,
Feature.profile.targetDependency,
Feature.chatList.targetDependency,
Feature.settings.targetDependency,
Feature.requests.targetDependency,
Feature.keychain.targetDependency,
Feature.voxophone.targetDependency,
Feature.onboarding.targetDependency,
Feature.googleDrive.targetDependency,
Feature.contactList.targetDependency,
Feature.permissions.targetDependency
]
)
static let permissions = Feature.library(
name: "Permissions",
dependencies: [
Feature.theme.targetDependency,
Feature.shared.targetDependency,
Feature.dependencyInjection.targetDependency
]
)
}
let package = Package(
name: "client-ios",
defaultLocalization: "en",
platforms: [.iOS(.v14)],
products: Feature.all.map(\.product),
dependencies: Dependency.all.map(\.packageDependency),
targets: Feature.all.flatMap(\.targets)
platforms: [
.iOS(.v14),
],
products: [
.library(name: "App", targets: ["App"]),
.library(name: "HUD", targets: ["HUD"]),
.library(name: "Theme", targets: ["Theme"]),
.library(name: "Shared", targets: ["Shared"]),
.library(name: "Models", targets: ["Models"]),
.library(name: "XXLogger", targets: ["XXLogger"]),
.library(name: "Defaults", targets: ["Defaults"]),
.library(name: "Keychain", targets: ["Keychain"]),
.library(name: "Voxophone", targets: ["Voxophone"]),
.library(name: "Countries", targets: ["Countries"]),
.library(name: "InputField", targets: ["InputField"]),
.library(name: "TestHelpers", targets: ["TestHelpers"]),
.library(name: "ScanFeature", targets: ["ScanFeature"]),
.library(name: "Permissions", targets: ["Permissions"]),
.library(name: "MenuFeature", targets: ["MenuFeature"]),
.library(name: "Integration", targets: ["Integration"]),
.library(name: "ChatFeature", targets: ["ChatFeature"]),
.library(name: "PushFeature", targets: ["PushFeature"]),
.library(name: "SFTPFeature", targets: ["SFTPFeature"]),
.library(name: "CrashService", targets: ["CrashService"]),
.library(name: "Presentation", targets: ["Presentation"]),
.library(name: "ToastFeature", targets: ["ToastFeature"]),
.library(name: "BackupFeature", targets: ["BackupFeature"]),
.library(name: "LaunchFeature", targets: ["LaunchFeature"]),
.library(name: "iCloudFeature", targets: ["iCloudFeature"]),
.library(name: "SearchFeature", targets: ["SearchFeature"]),
.library(name: "DrawerFeature", targets: ["DrawerFeature"]),
.library(name: "CollectionView", targets: ["CollectionView"]),
.library(name: "RestoreFeature", targets: ["RestoreFeature"]),
.library(name: "CrashReporting", targets: ["CrashReporting"]),
.library(name: "ProfileFeature", targets: ["ProfileFeature"]),
.library(name: "ContactFeature", targets: ["ContactFeature"]),
.library(name: "NetworkMonitor", targets: ["NetworkMonitor"]),
.library(name: "DropboxFeature", targets: ["DropboxFeature"]),
.library(name: "VersionChecking", targets: ["VersionChecking"]),
.library(name: "SettingsFeature", targets: ["SettingsFeature"]),
.library(name: "ChatListFeature", targets: ["ChatListFeature"]),
.library(name: "RequestsFeature", targets: ["RequestsFeature"]),
.library(name: "ChatInputFeature", targets: ["ChatInputFeature"]),
.library(name: "OnboardingFeature", targets: ["OnboardingFeature"]),
.library(name: "GoogleDriveFeature", targets: ["GoogleDriveFeature"]),
.library(name: "ContactListFeature", targets: ["ContactListFeature"]),
.library(name: "DependencyInjection", targets: ["DependencyInjection"]),
],
dependencies: [
.package(
url: "https://github.com/Quick/Quick",
.upToNextMajor(from: "3.0.0")
),
.package(
url: "https://github.com/Quick/Nimble",
.upToNextMajor(from: "9.0.0")
),
.package(
url: "https://github.com/SnapKit/SnapKit",
.upToNextMajor(from: "5.0.1")
),
.package(
url: "https://github.com/icanzilb/Retry.git",
.upToNextMajor(from: "0.6.3")
),
.package(
url: "https://github.com/ekazaev/ChatLayout",
.upToNextMajor(from: "1.1.14")
),
.package(
url: "https://github.com/ra1028/DifferenceKit",
.upToNextMajor(from: "1.2.0")
),
.package(
url: "https://github.com/apple/swift-protobuf",
.upToNextMajor(from: "1.14.0")
),
.package(
url: "https://github.com/google/GoogleSignIn-iOS",
.upToNextMajor(from: "6.1.0")
),
.package(
url: "https://github.com/dropbox/SwiftyDropbox.git",
.upToNextMajor(from: "8.2.1")
),
.package(
url: "https://github.com/amosavian/FileProvider.git",
.upToNextMajor(from: "0.26.0")
),
.package(
url: "https://github.com/SwiftyBeaver/SwiftyBeaver.git",
.upToNextMajor(from: "1.9.5")
),
.package(
url: "https://github.com/darrarski/ScrollViewController",
.upToNextMajor(from: "1.2.0")
),
.package(
url: "https://github.com/pointfreeco/combine-schedulers",
.upToNextMajor(from: "0.5.0")
),
.package(
url: "https://github.com/kishikawakatsumi/KeychainAccess",
.upToNextMajor(from: "4.2.1")
),
.package(
url: "https://github.com/google/google-api-objectivec-client-for-rest",
.upToNextMajor(from: "1.6.0")
),
.package(
url: "https://git.xx.network/elixxir/client-ios-db.git",
.upToNextMajor(from: "1.0.8")
),
.package(
url: "https://github.com/firebase/firebase-ios-sdk.git",
.upToNextMajor(from: "8.10.0")
),
.package(
url: "https://github.com/darrarski/Shout.git",
revision: "df5a662293f0ac15eeb4f2fd3ffd0c07b73d0de0"
),
.package(
url: "https://github.com/pointfreeco/swift-composable-architecture.git",
.upToNextMajor(from: "0.32.0")
),
.package(
url: "https://github.com/pointfreeco/swift-custom-dump.git",
.upToNextMajor(from: "0.5.0")
),
.package(
url: "https://github.com/pointfreeco/xctest-dynamic-overlay.git",
.upToNextMajor(from: "0.3.3")
),
],
targets: [
.target(
name: "App",
dependencies: [
.target(name: "Keychain"),
.target(name: "Voxophone"),
.target(name: "Permissions"),
.target(name: "ScanFeature"),
.target(name: "ChatFeature"),
.target(name: "MenuFeature"),
.target(name: "PushFeature"),
.target(name: "SFTPFeature"),
.target(name: "ToastFeature"),
.target(name: "CrashService"),
.target(name: "BackupFeature"),
.target(name: "SearchFeature"),
.target(name: "LaunchFeature"),
.target(name: "iCloudFeature"),
.target(name: "DropboxFeature"),
.target(name: "ContactFeature"),
.target(name: "RestoreFeature"),
.target(name: "ProfileFeature"),
.target(name: "CrashReporting"),
.target(name: "ChatListFeature"),
.target(name: "SettingsFeature"),
.target(name: "RequestsFeature"),
.target(name: "OnboardingFeature"),
.target(name: "GoogleDriveFeature"),
.target(name: "ContactListFeature"),
]
),
.testTarget(
name: "AppTests",
dependencies: [
.target(name: "App"),
]
),
.target(
name: "CrashReporting"
),
.target(
name: "NetworkMonitor"
),
.target(
name: "VersionChecking"
),
.target(
name: "DependencyInjection"
),
.testTarget(
name: "DependencyInjectionTests",
dependencies: [
.target(name: "DependencyInjection"),
]
),
.target(
name: "InputField",
dependencies: [
.target(name: "Shared"),
]
),
.binaryTarget(
name: "Bindings",
path: "XCFrameworks/Bindings.xcframework"
),
.target(
name: "Permissions",
dependencies: [
.target(name: "Theme"),
.target(name: "Shared"),
.target(name: "DependencyInjection"),
]
),
.target(
name: "PushFeature",
dependencies: [
.target(name: "Models"),
.target(name: "Defaults"),
.target(name: "Integration"),
.target(name: "DependencyInjection"),
]
),
.target(
name: "TestHelpers",
dependencies: [
.target(name: "Models"),
.target(name: "Presentation"),
]
),
.target(
name: "Keychain",
dependencies: [
.product(name: "KeychainAccess", package: "KeychainAccess"),
]
),
.target(
name: "Voxophone",
dependencies: [
.target(name: "Shared"),
]
),
.target(
name: "Models",
dependencies: [
.product(name: "DifferenceKit", package: "DifferenceKit"),
.product(name: "SwiftProtobuf", package: "swift-protobuf"),
]
),
.target(
name: "Defaults",
dependencies: [
.target(name: "DependencyInjection"),
]
),
.target(
name: "ToastFeature",
dependencies: [
.target(name: "Shared"),
]
),
.target(
name: "CrashService",
dependencies: [
.target(name: "CrashReporting"),
.product(name: "FirebaseCrashlytics", package: "firebase-ios-sdk"),
]
),
.target(
name: "SFTPFeature",
dependencies: [
.target(name: "HUD"),
.target(name: "Models"),
.target(name: "Shared"),
.target(name: "Keychain"),
.target(name: "InputField"),
.target(name: "Presentation"),
.target(name: "DependencyInjection"),
.product(name: "Shout", package: "Shout"),
]
),
.target(
name: "GoogleDriveFeature",
dependencies: [
.product(name: "GoogleSignIn", package: "GoogleSignIn-iOS"),
.product(name: "GoogleAPIClientForREST_Drive", package: "google-api-objectivec-client-for-rest"),
],
resources: [
.process("Resources"),
]
),
.target(
name: "iCloudFeature",
dependencies: [
.product(name: "FilesProvider", package: "FileProvider"),
]
),
.target(
name: "DropboxFeature",
dependencies: [
.product(name: "SwiftyDropbox", package: "SwiftyDropbox"),
],
resources: [
.process("Resources"),
]
),
.target(
name: "Countries",
dependencies: [
.target(name: "Theme"),
.target(name: "Shared"),
.target(name: "DependencyInjection"),
],
resources: [
.process("Resources"),
]
),
.target(
name: "Theme",
dependencies: [
.target(name: "Defaults"),
.target(name: "DependencyInjection"),
]
),
.testTarget(
name: "ThemeTests",
dependencies: [
.target(name: "Theme"),
.product(name: "Quick", package: "Quick"),
.product(name: "Nimble", package: "Nimble"),
]
),
.target(
name: "DrawerFeature",
dependencies: [
.target(name: "Shared"),
.target(name: "InputField"),
.product(name: "ScrollViewController", package: "ScrollViewController"),
]
),
.target(
name: "HUD",
dependencies: [
.target(name: "Theme"),
.target(name: "Shared"),
.product(name: "SnapKit", package: "SnapKit"),
]
),
.target(
name: "XXLogger",
dependencies: [
.product(name: "SwiftyBeaver", package: "SwiftyBeaver"),
]
),
.target(
name: "Shared",
dependencies: [
.product(name: "SnapKit", package: "SnapKit"),
.product(name: "ChatLayout", package: "ChatLayout"),
.product(name: "DifferenceKit", package: "DifferenceKit"),
],
exclude: [
"swiftgen.yml",
],
resources: [
.process("Resources"),
]
),
.target(
name: "Integration",
dependencies: [
.target(name: "Shared"),
.target(name: "Bindings"),
.target(name: "XXLogger"),
.target(name: "Keychain"),
.target(name: "ToastFeature"),
.target(name: "BackupFeature"),
.target(name: "CrashReporting"),
.target(name: "NetworkMonitor"),
.target(name: "DependencyInjection"),
.product(name: "Retry", package: "Retry"),
.product(name: "XXDatabase", package: "client-ios-db"),
.product(name: "XXLegacyDatabaseMigrator", package: "client-ios-db"),
],
resources: [
.process("Resources"),
]
),
.target(
name: "Presentation",
dependencies: [
.target(name: "Theme"),
.target(name: "Shared"),
.product(name: "SnapKit", package: "SnapKit"),
]
),
.testTarget(
name: "PresentationTests",
dependencies: [
.target(name: "Presentation"),
.product(name: "Quick", package: "Quick"),
.product(name: "Nimble", package: "Nimble"),
]
),
.target(
name: "ChatInputFeature",
dependencies: [
.target(name: "Voxophone"),
.product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
]
),
.target(
name: "RestoreFeature",
dependencies: [
.target(name: "HUD"),
.target(name: "Shared"),
.target(name: "SFTPFeature"),
.target(name: "Integration"),
.target(name: "Presentation"),
.target(name: "iCloudFeature"),
.target(name: "DropboxFeature"),
.target(name: "GoogleDriveFeature"),
.target(name: "DependencyInjection"),
]
),
.target(
name: "ContactFeature",
dependencies: [
.target(name: "Shared"),
.target(name: "InputField"),
.target(name: "ChatFeature"),
.target(name: "Presentation"),
.product(name: "CombineSchedulers", package: "combine-schedulers"),
.product(name: "ScrollViewController", package: "ScrollViewController"),
]
),
.testTarget(
name: "ContactFeatureTests",
dependencies: [
.target(name: "TestHelpers"),
.target(name: "ContactFeature"),
.product(name: "Quick", package: "Quick"),
.product(name: "Nimble", package: "Nimble"),
]
),
.target(
name: "ChatFeature",
dependencies: [
.target(name: "HUD"),
.target(name: "Theme"),
.target(name: "Shared"),
.target(name: "Defaults"),
.target(name: "Keychain"),
.target(name: "Voxophone"),
.target(name: "Integration"),
.target(name: "Permissions"),
.target(name: "Presentation"),
.target(name: "DrawerFeature"),
.target(name: "ChatInputFeature"),
.target(name: "DependencyInjection"),
.product(name: "ChatLayout", package: "ChatLayout"),
.product(name: "DifferenceKit", package: "DifferenceKit"),
.product(name: "ScrollViewController", package: "ScrollViewController"),
]
),
.testTarget(
name: "ChatFeatureTests",
dependencies: [
.target(name: "ChatFeature"),
.target(name: "TestHelpers"),
.product(name: "Quick", package: "Quick"),
.product(name: "Nimble", package: "Nimble"),
]
),
.target(
name: "SearchFeature",
dependencies: [
.target(name: "HUD"),
.target(name: "Shared"),
.target(name: "Countries"),
.target(name: "Integration"),
.target(name: "Presentation"),
.target(name: "ContactFeature"),
.target(name: "DependencyInjection"),
]
),
.testTarget(
name: "SearchFeatureTests",
dependencies: [
.target(name: "TestHelpers"),
.target(name: "SearchFeature"),
.product(name: "Quick", package: "Quick"),
.product(name: "Nimble", package: "Nimble"),
]
),
.target(
name: "LaunchFeature",
dependencies: [
.target(name: "HUD"),
.target(name: "Theme"),
.target(name: "Shared"),
.target(name: "Defaults"),
.target(name: "PushFeature"),
.target(name: "Integration"),
.target(name: "Permissions"),
.target(name: "DropboxFeature"),
.target(name: "VersionChecking"),
.target(name: "DependencyInjection"),
]
),
.target(
name: "RequestsFeature",
dependencies: [
.target(name: "Theme"),
.target(name: "Shared"),
.target(name: "Integration"),
.target(name: "ToastFeature"),
.target(name: "ContactFeature"),
.target(name: "DependencyInjection"),
.product(name: "DifferenceKit", package: "DifferenceKit"),
]
),
.testTarget(
name: "RequestsFeatureTests",
dependencies: [
.target(name: "TestHelpers"),
.target(name: "RequestsFeature"),
.product(name: "Quick", package: "Quick"),
.product(name: "Nimble", package: "Nimble"),
]
),
.target(
name: "ProfileFeature",
dependencies: [
.target(name: "HUD"),
.target(name: "Theme"),
.target(name: "Shared"),
.target(name: "Keychain"),
.target(name: "Defaults"),
.target(name: "Countries"),
.target(name: "InputField"),
.target(name: "MenuFeature"),
.target(name: "Permissions"),
.target(name: "Integration"),
.target(name: "Presentation"),
.target(name: "DrawerFeature"),
.target(name: "DependencyInjection"),
.product(name: "CombineSchedulers", package: "combine-schedulers"),
.product(name: "ScrollViewController", package: "ScrollViewController"),
]
),
.testTarget(
name: "ProfileFeatureTests",
dependencies: [
.target(name: "TestHelpers"),
.target(name: "ProfileFeature"),
.product(name: "Quick", package: "Quick"),
.product(name: "Nimble", package: "Nimble"),
]
),
.target(
name: "ChatListFeature",
dependencies: [
.target(name: "Theme"),
.target(name: "Shared"),
.target(name: "Defaults"),
.target(name: "MenuFeature"),
.target(name: "ChatFeature"),
.target(name: "ProfileFeature"),
.target(name: "SettingsFeature"),
.target(name: "ContactListFeature"),
.target(name: "DependencyInjection"),
.product(name: "DifferenceKit", package: "DifferenceKit"),
]
),
.testTarget(
name: "ChatListFeatureTests",
dependencies: [
.target(name: "TestHelpers"),
.target(name: "ChatListFeature"),
.product(name: "Quick", package: "Quick"),
.product(name: "Nimble", package: "Nimble"),
]
),
.target(
name: "OnboardingFeature",
dependencies: [
.target(name: "HUD"),
.target(name: "Shared"),
.target(name: "Defaults"),
.target(name: "Keychain"),
.target(name: "Countries"),
.target(name: "InputField"),
.target(name: "Permissions"),
.target(name: "PushFeature"),
.target(name: "Integration"),
.target(name: "Presentation"),
.target(name: "DrawerFeature"),
.target(name: "VersionChecking"),
.target(name: "DependencyInjection"),
.product(name: "CombineSchedulers", package: "combine-schedulers"),
.product(name: "ScrollViewController", package: "ScrollViewController"),
]
),
.testTarget(
name: "OnboardingFeatureTests",
dependencies: [
.target(name: "TestHelpers"),
.target(name: "OnboardingFeature"),
.product(name: "Quick", package: "Quick"),
.product(name: "Nimble", package: "Nimble"),
]
),
.target(
name: "MenuFeature",
dependencies: [
.target(name: "Theme"),
.target(name: "Shared"),
.target(name: "Defaults"),
.target(name: "Integration"),
.target(name: "Presentation"),
.target(name: "DependencyInjection"),
]
),
.target(
name: "BackupFeature",
dependencies: [
.target(name: "HUD"),
.target(name: "Shared"),
.target(name: "Models"),
.target(name: "InputField"),
.target(name: "SFTPFeature"),
.target(name: "Presentation"),
.target(name: "iCloudFeature"),
.target(name: "DrawerFeature"),
.target(name: "DropboxFeature"),
.target(name: "GoogleDriveFeature"),
.target(name: "DependencyInjection"),
]
),
.target(
name: "ScanFeature",
dependencies: [
.target(name: "Theme"),
.target(name: "Shared"),
.target(name: "Countries"),
.target(name: "Permissions"),
.target(name: "Integration"),
.target(name: "Presentation"),
.target(name: "ContactFeature"),
.target(name: "DependencyInjection"),
.product(name: "SnapKit", package: "SnapKit"),
]
),
.testTarget(
name: "ScanFeatureTests",
dependencies: [
.target(name: "ScanFeature"),
.target(name: "TestHelpers"),
.product(name: "Quick", package: "Quick"),
.product(name: "Nimble", package: "Nimble"),
]
),
.target(
name: "ContactListFeature",
dependencies: [
.target(name: "Theme"),
.target(name: "Shared"),
.target(name: "Integration"),
.target(name: "Presentation"),
.target(name: "ContactFeature"),
.target(name: "DependencyInjection"),
.product(name: "DifferenceKit", package: "DifferenceKit"),
]
),
.testTarget(
name: "ContactListFeatureTests",
dependencies: [
.target(name: "TestHelpers"),
.target(name: "ContactListFeature"),
.product(name: "Quick", package: "Quick"),
.product(name: "Nimble", package: "Nimble"),
]
),
.target(
name: "SettingsFeature",
dependencies: [
.target(name: "HUD"),
.target(name: "Theme"),
.target(name: "Shared"),
.target(name: "Defaults"),
.target(name: "Keychain"),
.target(name: "InputField"),
.target(name: "PushFeature"),
.target(name: "Permissions"),
.target(name: "MenuFeature"),
.target(name: "Integration"),
.target(name: "Presentation"),
.target(name: "DrawerFeature"),
.target(name: "DependencyInjection"),
.product(name: "CombineSchedulers", package: "combine-schedulers"),
.product(name: "ScrollViewController", package: "ScrollViewController"),
]
),
.testTarget(
name: "SettingsFeatureTests",
dependencies: [
.target(name: "TestHelpers"),
.target(name: "SettingsFeature"),
.product(name: "Quick", package: "Quick"),
.product(name: "Nimble", package: "Nimble"),
]
),
.target(
name: "CollectionView",
dependencies: [
.product(name: "ChatLayout", package: "ChatLayout"),
.product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"),
]
),
.testTarget(
name: "CollectionViewTests",
dependencies: [
.target(name: "CollectionView"),
.product(name: "CustomDump", package: "swift-custom-dump"),
]
),
]
)
// .target(name: "CrashReporting"),
// .target(name: "NetworkMonitor"),
// .target(name: "VersionChecking"),
// .target(name: "DependencyInjection"),
// .target(name: "InputField", dependencies: ["Shared"]),
//
//
// // MARK: - PushFeature
//
// .target(
// name: "PushFeature",
// dependencies: [
// "Models",
// "Defaults",
// "Integration",
// "DependencyInjection"
// ]
// ),
//
// // MARK: - TestHelpers
//
// .target(
// name: "TestHelpers",
// dependencies: [
// "Models",
// "Presentation"
// ]
// ),
//
// // MARK: - Keychain
//
// .target(
// name: "Keychain",
// dependencies: [
// .product(
// name: "KeychainAccess",
// package: "KeychainAccess"
// )
// ]
// ),
//
// // MARK: - Voxophone
//
// .target(
// name: "Voxophone",
// dependencies: [
// "Shared"
// ]
// ),
//
// // MARK: - Models
//
// .target(
// name: "Models",
// dependencies: [
// .product(
// name: "DifferenceKit",
// package: "DifferenceKit"
// ),
// .product(
// name: "SwiftProtobuf",
// package: "swift-protobuf"
// )
// ]
// ),
//
// // MARK: - Defaults
//
// .target(
// name: "Defaults",
// dependencies: [
// "DependencyInjection"
// ]
// ),
//
// // MARK: - ToastFeature
//
// .target(
// name: "ToastFeature",
// dependencies: [
// "Shared"
// ]
// ),
//
// // MARK: - CrashService
//
// .target(
// name: "CrashService",
// dependencies: [
// "CrashReporting",
// .product(
// name: "FirebaseCrashlytics",
// package: "firebase-ios-sdk"
// )
// ]
// ),
//
// // MARK: - SFTPFeature
//
// .target(
// name: "SFTPFeature",
// dependencies: [
// "HUD",
// "Models",
// "Shared",
// "Keychain",
// "InputField",
// "Presentation",
// "DependencyInjection",
// .product(
// name: "Shout",
// package: "Shout"
// )
// ]
// ),
//
// // MARK: - GoogleDriveFeature
//
// .target(
// name: "GoogleDriveFeature",
// dependencies: [
// .product(
// name: "GoogleSignIn",
// package: "GoogleSignIn-iOS"
// ),
// .product(
// name: "GoogleAPIClientForREST_Drive",
// package: "google-api-objectivec-client-for-rest"
// )
// ],
// resources: [.process("Resources")]
// ),
//
// // MARK: - iCloudFeature
//
// .target(
// name: "iCloudFeature",
// dependencies: [
// .product(
// name: "FilesProvider",
// package: "FileProvider"
// )
// ]
// ),
//
// // MARK: - DropboxFeature
//
// .target(
// name: "DropboxFeature",
// dependencies: [
// .product(
// name: "SwiftyDropbox",
// package: "SwiftyDropbox"
// )
// ],
// resources: [.process("Resources")]
// ),
//
// // MARK: - Countries
//
// .target(
// name: "Countries",
// dependencies: [
// "Theme",
// "Shared",
// "DependencyInjection"
// ],
// resources: [.process("Resources")]
// ),
//
// // MARK: - Theme
//
// .target(
// name: "Theme",
// dependencies: [
// "Defaults",
// "DependencyInjection"
// ]
// ),
//
// // MARK: - DrawerFeature
//
// .target(
// name: "DrawerFeature",
// dependencies: [
// "Shared",
// "InputField",
// .product(
// name: "ScrollViewController",
// package: "ScrollViewController"
// )
// ]
// ),
//
// // MARK: - HUD
//
// .target(
// name: "HUD",
// dependencies: [
// "Theme",
// "Shared",
// .product(
// name: "SnapKit",
// package: "SnapKit"
// )
// ]
// ),
//
// // MARK: - XXLogger
//
// .target(
// name: "XXLogger",
// dependencies: [
// .product(
// name: "SwiftyBeaver",
// package: "SwiftyBeaver"
// )
// ]
// ),
//
// // MARK: - Shared
//
// .target(
// name: "Shared",
// dependencies: [
// .product(
// name: "SnapKit",
// package: "SnapKit"
// ),
// .product(
// name: "ChatLayout",
// package: "ChatLayout"
// ),
// .product(
// name: "DifferenceKit",
// package: "DifferenceKit"
// )
// ],
// exclude: ["swiftgen.yml"],
// resources: [.process("Resources")]
// ),
//
// // MARK: - Integration
//
// .target(
// name: "Integration",
// dependencies: [
// "Shared",
// "Bindings",
// "XXLogger",
// "Keychain",
// "ToastFeature",
// "BackupFeature",
// "CrashReporting",
// "NetworkMonitor",
// "DependencyInjection",
// .product(
// name: "Retry",
// package: "Retry"
// ),
// .product(
// name: "XXDatabase",
// package: "client-ios-db"
// ),
// .product(
// name: "XXLegacyDatabaseMigrator",
// package: "client-ios-db"
// )
// ],
// resources: [.process("Resources")]
// ),
//
// // MARK: - Presentation
//
// .target(
// name: "Presentation",
// dependencies: [
// "Theme",
// "Shared",
// .product(
// name: "SnapKit",
// package: "SnapKit"
// )
// ]
// ),
//
// // MARK: - ChatInputFeature
//
// .target(
// name: "ChatInputFeature",
// dependencies: [
// "Voxophone",
// .product(
// name: "ComposableArchitecture",
// package: "swift-composable-architecture"
// )
// ]
// ),
//
// // MARK: - RestoreFeature
//
// .target(
// name: "RestoreFeature",
// dependencies: [
// "HUD",
// "Shared",
// "SFTPFeature",
// "Integration",
// "Presentation",
// "iCloudFeature",
// "DropboxFeature",
// "GoogleDriveFeature",
// "DependencyInjection"
// ]
// ),
//
// // MARK: - ContactFeature
//
// .target(
// name: "ContactFeature",
// dependencies: [
// "Shared",
// "InputField",
// "ChatFeature",
// "Presentation",
// .product(
// name: "CombineSchedulers",
// package: "combine-schedulers"
// ),
// .product(
// name: "ScrollViewController",
// package: "ScrollViewController"
// )
// ]
// ),
//
// // MARK: - ChatFeature
//
// .target(
// name: "ChatFeature",
// dependencies: [
// "HUD",
// "Theme",
// "Shared",
// "Defaults",
// "Keychain",
// "Voxophone",
// "Integration",
// "Permissions",
// "Presentation",
// "DrawerFeature",
// "ChatInputFeature",
// "DependencyInjection",
// .product(
// name: "ChatLayout",
// package: "ChatLayout"
// ),
// .product(
// name: "DifferenceKit",
// package: "DifferenceKit"
// ),
// .product(
// name: "ScrollViewController",
// package: "ScrollViewController"
// )
// ]
// ),
//
// // MARK: - SearchFeature
//
// .target(
// name: "SearchFeature",
// dependencies: [
// "HUD",
// "Shared",
// "Countries",
// "Integration",
// "Presentation",
// "ContactFeature",
// "DependencyInjection"
// ]
// ),
//
// // MARK: - LaunchFeature
//
// .target(
// name: "LaunchFeature",
// dependencies: [
// "HUD",
// "Theme",
// "Shared",
// "Defaults",
// "PushFeature",
// "Integration",
// "Permissions",
// "DropboxFeature",
// "VersionChecking",
// "DependencyInjection"
// ]
// ),
//
// // MARK: - RequestsFeature
//
// .target(
// name: "RequestsFeature",
// dependencies: [
// "Theme",
// "Shared",
// "Integration",
// "ToastFeature",
// "ContactFeature",
// "DependencyInjection",
// .product(
// name: "DifferenceKit",
// package: "DifferenceKit"
// )
// ]
// ),
//
// // MARK: - ProfileFeature
//
// .target(
// name: "ProfileFeature",
// dependencies: [
// "HUD",
// "Theme",
// "Shared",
// "Keychain",
// "Defaults",
// "Countries",
// "InputField",
// "MenuFeature",
// "Permissions",
// "Integration",
// "Presentation",
// "DrawerFeature",
// "DependencyInjection",
// .product(
// name: "CombineSchedulers",
// package: "combine-schedulers"
// ),
// .product(
// name: "ScrollViewController",
// package: "ScrollViewController"
// )
// ]
// ),
//
// // MARK: - ChatListFeature
//
// .target(
// name: "ChatListFeature",
// dependencies: [
// "Theme",
// "Shared",
// "Defaults",
// "MenuFeature",
// "ChatFeature",
// "ProfileFeature",
// "SettingsFeature",
// "ContactListFeature",
// "DependencyInjection",
// .product(
// name: "DifferenceKit",
// package: "DifferenceKit"
// )
// ]
// ),
//
// // MARK: - OnboardingFeature
//
// .target(
// name: "OnboardingFeature",
// dependencies: [
// "HUD",
// "Shared",
// "Defaults",
// "Keychain",
// "Countries",
// "InputField",
// "Permissions",
// "PushFeature",
// "Integration",
// "Presentation",
// "DrawerFeature",
// "VersionChecking",
// "DependencyInjection",
// .product(
// name: "CombineSchedulers",
// package: "combine-schedulers"
// ),
// .product(
// name: "ScrollViewController",
// package: "ScrollViewController"
// )
// ]
// ),
//
// // MARK: - MenuFeature
//
// .target(
// name: "MenuFeature",
// dependencies: [
// "Theme",
// "Shared",
// "Defaults",
// "Integration",
// "Presentation",
// "DependencyInjection"
// ]
// ),
//
// // MARK: - BackupFeature
//
// .target(
// name: "BackupFeature",
// dependencies: [
// "HUD",
// "Shared",
// "Models",
// "InputField",
// "SFTPFeature",
// "Presentation",
// "iCloudFeature",
// "DrawerFeature",
// "DropboxFeature",
// "GoogleDriveFeature",
// "DependencyInjection"
// ]
// ),
//
// // MARK: - ScanFeature
//
// .target(
// name: "ScanFeature",
// dependencies: [
// "Theme",
// "Shared",
// "Countries",
// "Permissions",
// "Integration",
// "Presentation",
// "ContactFeature",
// "DependencyInjection",
// .product(
// name: "SnapKit",
// package: "SnapKit"
// )
// ]
// ),
//
// // MARK: - ContactListFeature
//
// .target(
// name: "ContactListFeature",
// dependencies: [
// "Theme",
// "Shared",
// "Integration",
// "Presentation",
// "ContactFeature",
// "DependencyInjection",
// .product(
// name: "DifferenceKit",
// package: "DifferenceKit"
// )
// ]
// ),
//
// // MARK: - SettingsFeature
//
// .target(
// name: "SettingsFeature",
// dependencies: [
// "HUD",
// "Theme",
// "Shared",
// "Defaults",
// "Keychain",
// "InputField",
// "PushFeature",
// "Permissions",
// "MenuFeature",
// "Integration",
// "Presentation",
// "DrawerFeature",
// "DependencyInjection",
// .product(
// name: "CombineSchedulers",
// package: "combine-schedulers"
// ),
// .product(
// name: "ScrollViewController",
// package: "ScrollViewController"
// )
// ]
// ),
//
// // MARK: - DependencyInjectionTests
//
// .testTarget(
// name: "DependencyInjectionTests",
// dependencies: ["DependencyInjection"]
// ),
//
// // MARK: - AppTests
//
// .testTarget(
// name: "AppTests",
// dependencies: ["App"]
// ),
//
// // MARK: - ProfileFeatureTests
//
// .testTarget(
// name: "ProfileFeatureTests",
// dependencies: [
// "TestHelpers",
// "ProfileFeature",
// .product(name: "Quick", package: "Quick"),
// .product(name: "Nimble", package: "Nimble")
// ]
// ),
//
// // MARK: - ContactFeatureTests
//
// .testTarget(
// name: "ContactFeatureTests",
// dependencies: [
// "TestHelpers",
// "ContactFeature",
// .product(name: "Quick", package: "Quick"),
// .product(name: "Nimble", package: "Nimble")
// ]
// ),
//
// // MARK: - SearchFeatureTests
//
// .testTarget(
// name: "SearchFeatureTests",
// dependencies: [
// "TestHelpers",
// "SearchFeature",
// .product(name: "Quick", package: "Quick"),
// .product(name: "Nimble", package: "Nimble")
// ]
// ),
//
// // MARK: - RequestsFeatureTests
//
// .testTarget(
// name: "RequestsFeatureTests",
// dependencies: [
// "TestHelpers",
// "RequestsFeature",
// .product(name: "Quick", package: "Quick"),
// .product(name: "Nimble", package: "Nimble")
// ]
// ),
//
// // MARK: - SettingsFeatureTests
//
// .testTarget(
// name: "SettingsFeatureTests",
// dependencies: [
// "TestHelpers",
// "SettingsFeature",
// .product(name: "Quick", package: "Quick"),
// .product(name: "Nimble", package: "Nimble")
// ]
// ),
//
// // MARK: - SettingsFeatureTests
//
// .testTarget(
// name: "ChatListFeatureTests",
// dependencies: [
// "TestHelpers",
// "ChatListFeature",
// .product(name: "Quick", package: "Quick"),
// .product(name: "Nimble", package: "Nimble")
// ]
// ),
//
// // MARK: - ContactListFeatureTests
//
// .testTarget(
// name: "ContactListFeatureTests",
// dependencies: [
// "TestHelpers",
// "ContactListFeature",
// .product(name: "Quick", package: "Quick"),
// .product(name: "Nimble", package: "Nimble")
// ]
// ),
//
// // MARK: - OnboardingFeatureTests
//
// .testTarget(
// name: "OnboardingFeatureTests",
// dependencies: [
// "TestHelpers",
// "OnboardingFeature",
// .product(name: "Quick", package: "Quick"),
// .product(name: "Nimble", package: "Nimble")
// ]
// ),
//
// // MARK: - PresentationTests
//
// .testTarget(
// name: "PresentationTests",
// dependencies: [
// "Presentation",
// .product(name: "Quick", package: "Quick"),
// .product(name: "Nimble", package: "Nimble")
// ]
// ),
//
// // MARK: - ThemeTests
//
// .testTarget(
// name: "ThemeTests",
// dependencies: [
// "Theme",
// .product(name: "Quick", package: "Quick"),
// .product(name: "Nimble", package: "Nimble")
// ]
// ),
//
// // MARK: - ChatFeatureTests
//
// .testTarget(
// name: "ChatFeatureTests",
// dependencies: [
// "ChatFeature",
// "TestHelpers",
// .product(name: "Quick", package: "Quick"),
// .product(name: "Nimble", package: "Nimble")
// ]
// ),
//
// // MARK: - ScanFeatureTests
//
// .testTarget(
// name: "ScanFeatureTests",
// dependencies: [
// "TestHelpers",
// "ScanFeature",
// .product(name: "Quick", package: "Quick"),
// .product(name: "Nimble", package: "Nimble")
// ]
// ),
//
// // MARK: - CollectionView
//
// .target(
// name: "CollectionView",
// dependencies: [
// .product(name: "ChatLayout", package: "ChatLayout"),
// .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"),
// ]
// ),
// .testTarget(
// name: "CollectionViewTests",
// dependencies: [
// .target(name: "CollectionView"),
// .product(name: "CustomDump", package: "swift-custom-dump"),
// ]
// ),
// ]
//)
Loading