[
  {
    "path": ".gitignore",
    "content": ".DS_Store\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n*/*.xcodeproj/xcuserdata/\ntmp/\ntestData/\n\n# CocoaPods\n#\n# We recommend against adding the Pods directory to your .gitignore. However\n# you should judge for yourself, the pros and cons are mentioned at:\n# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control\n#\nPods/\n\n# fastlane files\n\nfastlane/report.xml\nfastlane/test_output/*\n*.app.dSYM.zip\nPreview.html\n\n#Circle CI files\n.bundle/\nvendor/\nreports/\nresources/\nresults.html\nlogs/\ntest-output/\n\n#AppCode files\n.idea/\n\n#Carthage\nCarthage/\n\n#Others\ncompile_time.txt\n"
  },
  {
    "path": "App/App.entitlements",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>com.apple.developer.siri</key>\n\t<true/>\n\t<key>com.apple.security.application-groups</key>\n\t<array>\n\t\t<string>group.com.cassiuspacheco.Swift-CleanArchitecture</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "App/App.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 52;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t6A1DF8A5241E4B54003A584E /* DependencyContainer in Frameworks */ = {isa = PBXBuildFile; productRef = 6A1DF8A4241E4B54003A584E /* DependencyContainer */; };\n\t\t6A2F96D721DEFA1200864087 /* InterfaceBinding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A2F96D621DEFA1200864087 /* InterfaceBinding.swift */; };\n\t\t6A2F96E021DF11AF00864087 /* SiriShortcutCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A2F96DF21DF11AF00864087 /* SiriShortcutCoordinator.swift */; };\n\t\t6A74424C21DEF45900F865FB /* ExtensionIntents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6A74424B21DEF45900F865FB /* ExtensionIntents.framework */; };\n\t\t6A74424D21DEF45900F865FB /* ExtensionIntents.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6A74424B21DEF45900F865FB /* ExtensionIntents.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t6A74424E21DEF45900F865FB /* ExtensionIntents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6A74424B21DEF45900F865FB /* ExtensionIntents.framework */; };\n\t\t6AAAC15720F1164E007D8CB1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6AAAC14520F1164E007D8CB1 /* Assets.xcassets */; };\n\t\t6AAAC15820F1164E007D8CB1 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6AAAC14620F1164E007D8CB1 /* LaunchScreen.storyboard */; };\n\t\t6AAAC15D20F1164E007D8CB1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAAC14D20F1164E007D8CB1 /* AppDelegate.swift */; };\n\t\t6AAD2E1A240FD669000E6B9A /* RxTest in Frameworks */ = {isa = PBXBuildFile; productRef = 6AAD2E19240FD669000E6B9A /* RxTest */; };\n\t\t6AAD2E1C240FD669000E6B9A /* RxRelay in Frameworks */ = {isa = PBXBuildFile; productRef = 6AAD2E1B240FD669000E6B9A /* RxRelay */; };\n\t\t6AAD2E1E240FD669000E6B9A /* RxCocoa in Frameworks */ = {isa = PBXBuildFile; productRef = 6AAD2E1D240FD669000E6B9A /* RxCocoa */; };\n\t\t6AAD2E20240FD669000E6B9A /* RxBlocking in Frameworks */ = {isa = PBXBuildFile; productRef = 6AAD2E1F240FD669000E6B9A /* RxBlocking */; };\n\t\t6AAD2E22240FD999000E6B9A /* Entities in Frameworks */ = {isa = PBXBuildFile; productRef = 6AAD2E21240FD999000E6B9A /* Entities */; };\n\t\t6AAD2E24240FD9EF000E6B9A /* Data in Frameworks */ = {isa = PBXBuildFile; productRef = 6AAD2E23240FD9EF000E6B9A /* Data */; };\n\t\t6AAD2E26240FDAE1000E6B9A /* Domain in Frameworks */ = {isa = PBXBuildFile; productRef = 6AAD2E25240FDAE1000E6B9A /* Domain */; };\n\t\t6AAD2E28240FDBBC000E6B9A /* NetworkServices in Frameworks */ = {isa = PBXBuildFile; productRef = 6AAD2E27240FDBBC000E6B9A /* NetworkServices */; };\n\t\t6AAD2E2A240FDBC0000E6B9A /* Persistence in Frameworks */ = {isa = PBXBuildFile; productRef = 6AAD2E29240FDBC0000E6B9A /* Persistence */; };\n\t\t6AAD2E2C240FDBF6000E6B9A /* Data in Frameworks */ = {isa = PBXBuildFile; productRef = 6AAD2E2B240FDBF6000E6B9A /* Data */; };\n\t\t6AAD2E2E240FDBF6000E6B9A /* Entities in Frameworks */ = {isa = PBXBuildFile; productRef = 6AAD2E2D240FDBF6000E6B9A /* Entities */; };\n\t\t6AAD2E30240FDBF6000E6B9A /* NetworkServices in Frameworks */ = {isa = PBXBuildFile; productRef = 6AAD2E2F240FDBF6000E6B9A /* NetworkServices */; };\n\t\t6AAD2E32240FDBF6000E6B9A /* Persistence in Frameworks */ = {isa = PBXBuildFile; productRef = 6AAD2E31240FDBF6000E6B9A /* Persistence */; };\n\t\t6AAD2E34240FDBF6000E6B9A /* RxSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 6AAD2E33240FDBF6000E6B9A /* RxSwift */; };\n\t\t6AAD2E36240FE320000E6B9A /* RxSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 6AAD2E35240FE320000E6B9A /* RxSwift */; };\n\t\t6AAD2E3D240FE5C5000E6B9A /* InterfaceBinding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A3934F221C65BD800B12F8F /* InterfaceBinding.swift */; };\n\t\t6AB1364721081A53004084DC /* AppCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AB1363021081A53004084DC /* AppCoordinator.swift */; };\n\t\t6AB1364821081A53004084DC /* Coordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AB1363121081A53004084DC /* Coordinator.swift */; };\n\t\t6AB1364B21081A53004084DC /* DependencyGraph.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AB1363821081A53004084DC /* DependencyGraph.swift */; };\n\t\t6AB1364C21081A53004084DC /* DetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AB1363C21081A53004084DC /* DetailViewModel.swift */; };\n\t\t6AB1364D21081A53004084DC /* DetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AB1363F21081A53004084DC /* DetailViewController.swift */; };\n\t\t6AB1364E21081A53004084DC /* DetailViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6AB1364021081A53004084DC /* DetailViewController.xib */; };\n\t\t6AB1365321081A6F004084DC /* DetailCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AB1365221081A6F004084DC /* DetailCoordinator.swift */; };\n\t\t6AB1365921081A9C004084DC /* MainViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6AB1365521081A9C004084DC /* MainViewController.xib */; };\n\t\t6AB1365A21081A9C004084DC /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AB1365621081A9C004084DC /* MainViewController.swift */; };\n\t\t6AB1365C21081AB1004084DC /* MainViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AB1365B21081AB1004084DC /* MainViewModel.swift */; };\n\t\t6AB1365E21081B39004084DC /* MainCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AB1365D21081B39004084DC /* MainCoordinator.swift */; };\n\t\t6ACB875820F116DD005A04A7 /* AppTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAAC13320F1164E007D8CB1 /* AppTests.swift */; };\n\t\t6AFDC44721DEDF7E00B9BB46 /* IntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AFDC44621DEDF7E00B9BB46 /* IntentHandler.swift */; };\n\t\t6AFDC44F21DEDF7E00B9BB46 /* IntentsUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6AFDC44E21DEDF7E00B9BB46 /* IntentsUI.framework */; };\n\t\t6AFDC45221DEDF7E00B9BB46 /* IntentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AFDC45121DEDF7E00B9BB46 /* IntentViewController.swift */; };\n\t\t6AFDC45521DEDF7E00B9BB46 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6AFDC45321DEDF7E00B9BB46 /* MainInterface.storyboard */; };\n\t\t6AFDC45921DEDF7E00B9BB46 /* AppIntentsUI.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 6AFDC44D21DEDF7E00B9BB46 /* AppIntentsUI.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\t6AFDC45C21DEDF7E00B9BB46 /* AppIntents.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 6AFDC44421DEDF7E00B9BB46 /* AppIntents.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\t6AFDC48221DEEB4D00B9BB46 /* ExtensionIntents.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AFDC47221DEEB4D00B9BB46 /* ExtensionIntents.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t6AFDC49021DEEC6600B9BB46 /* NSUserActivity+IntentData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AFDC48D21DEEC6600B9BB46 /* NSUserActivity+IntentData.swift */; };\n\t\t6AFDC49121DEEC6600B9BB46 /* CreateProductIntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AFDC48E21DEEC6600B9BB46 /* CreateProductIntentHandler.swift */; };\n\t\t6AFDC49221DEEC6600B9BB46 /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 6AFDC48F21DEEC6600B9BB46 /* Intents.intentdefinition */; };\n\t\t6AFDC49321DEEC6E00B9BB46 /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 6AFDC48F21DEEC6600B9BB46 /* Intents.intentdefinition */; settings = {ATTRIBUTES = (no_codegen, ); }; };\n\t\t6AFDC49421DEEC7200B9BB46 /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 6AFDC48F21DEEC6600B9BB46 /* Intents.intentdefinition */; settings = {ATTRIBUTES = (no_codegen, ); }; };\n\t\t6AFDC49521DEEC7200B9BB46 /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 6AFDC48F21DEEC6600B9BB46 /* Intents.intentdefinition */; settings = {ATTRIBUTES = (no_codegen, ); }; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t6A26FB8220F0E54500CDA761 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6A26FB6520F0E54400CDA761 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 6A26FB6C20F0E54400CDA761;\n\t\t\tremoteInfo = Project;\n\t\t};\n\t\t6AFDC45721DEDF7E00B9BB46 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6A26FB6520F0E54400CDA761 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 6AFDC44C21DEDF7E00B9BB46;\n\t\t\tremoteInfo = AppIntentsUI;\n\t\t};\n\t\t6AFDC45A21DEDF7E00B9BB46 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6A26FB6520F0E54400CDA761 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 6AFDC44321DEDF7E00B9BB46;\n\t\t\tremoteInfo = AppIntents;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t6AFDC46321DEDF7E00B9BB46 /* Embed App Extensions */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 13;\n\t\t\tfiles = (\n\t\t\t\t6AFDC45C21DEDF7E00B9BB46 /* AppIntents.appex in Embed App Extensions */,\n\t\t\t\t6AFDC45921DEDF7E00B9BB46 /* AppIntentsUI.appex in Embed App Extensions */,\n\t\t\t);\n\t\t\tname = \"Embed App Extensions\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6AFDC4A921DEF2AD00B9BB46 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\t6A74424D21DEF45900F865FB /* ExtensionIntents.framework in Embed Frameworks */,\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t6A2F96D621DEFA1200864087 /* InterfaceBinding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterfaceBinding.swift; sourceTree = \"<group>\"; };\n\t\t6A2F96D821DEFE4500864087 /* AppIntents.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = AppIntents.entitlements; sourceTree = \"<group>\"; };\n\t\t6A2F96DE21DF0E1F00864087 /* AppIntentsUI.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = AppIntentsUI.entitlements; sourceTree = \"<group>\"; };\n\t\t6A2F96DF21DF11AF00864087 /* SiriShortcutCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SiriShortcutCoordinator.swift; sourceTree = \"<group>\"; };\n\t\t6A3934F221C65BD800B12F8F /* InterfaceBinding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InterfaceBinding.swift; sourceTree = \"<group>\"; };\n\t\t6A74424B21DEF45900F865FB /* ExtensionIntents.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ExtensionIntents.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t6AAAC12320F11572007D8CB1 /* App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t6AAAC13320F1164E007D8CB1 /* AppTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppTests.swift; sourceTree = \"<group>\"; };\n\t\t6AAAC13420F1164E007D8CB1 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t6AAAC14520F1164E007D8CB1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t6AAAC14720F1164E007D8CB1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t6AAAC14D20F1164E007D8CB1 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t6AAAC14E20F1164E007D8CB1 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t6AAD2E3E240FE98F000E6B9A /* AppTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AppTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t6AB1363021081A53004084DC /* AppCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppCoordinator.swift; sourceTree = \"<group>\"; };\n\t\t6AB1363121081A53004084DC /* Coordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Coordinator.swift; sourceTree = \"<group>\"; };\n\t\t6AB1363821081A53004084DC /* DependencyGraph.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DependencyGraph.swift; sourceTree = \"<group>\"; };\n\t\t6AB1363C21081A53004084DC /* DetailViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DetailViewModel.swift; sourceTree = \"<group>\"; };\n\t\t6AB1363F21081A53004084DC /* DetailViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DetailViewController.swift; sourceTree = \"<group>\"; };\n\t\t6AB1364021081A53004084DC /* DetailViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DetailViewController.xib; sourceTree = \"<group>\"; };\n\t\t6AB1365221081A6F004084DC /* DetailCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailCoordinator.swift; sourceTree = \"<group>\"; };\n\t\t6AB1365521081A9C004084DC /* MainViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainViewController.xib; sourceTree = \"<group>\"; };\n\t\t6AB1365621081A9C004084DC /* MainViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = \"<group>\"; };\n\t\t6AB1365B21081AB1004084DC /* MainViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewModel.swift; sourceTree = \"<group>\"; };\n\t\t6AB1365D21081B39004084DC /* MainCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainCoordinator.swift; sourceTree = \"<group>\"; };\n\t\t6AFDC44421DEDF7E00B9BB46 /* AppIntents.appex */ = {isa = PBXFileReference; explicitFileType = \"wrapper.app-extension\"; includeInIndex = 0; path = AppIntents.appex; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t6AFDC44621DEDF7E00B9BB46 /* IntentHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntentHandler.swift; sourceTree = \"<group>\"; };\n\t\t6AFDC44821DEDF7E00B9BB46 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t6AFDC44D21DEDF7E00B9BB46 /* AppIntentsUI.appex */ = {isa = PBXFileReference; explicitFileType = \"wrapper.app-extension\"; includeInIndex = 0; path = AppIntentsUI.appex; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t6AFDC44E21DEDF7E00B9BB46 /* IntentsUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IntentsUI.framework; path = System/Library/Frameworks/IntentsUI.framework; sourceTree = SDKROOT; };\n\t\t6AFDC45121DEDF7E00B9BB46 /* IntentViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntentViewController.swift; sourceTree = \"<group>\"; };\n\t\t6AFDC45421DEDF7E00B9BB46 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = \"<group>\"; };\n\t\t6AFDC45621DEDF7E00B9BB46 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t6AFDC46A21DEE86D00B9BB46 /* App.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = App.entitlements; sourceTree = \"<group>\"; };\n\t\t6AFDC47221DEEB4D00B9BB46 /* ExtensionIntents.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ExtensionIntents.h; sourceTree = \"<group>\"; };\n\t\t6AFDC47321DEEB4D00B9BB46 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t6AFDC48D21DEEC6600B9BB46 /* NSUserActivity+IntentData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"NSUserActivity+IntentData.swift\"; sourceTree = \"<group>\"; };\n\t\t6AFDC48E21DEEC6600B9BB46 /* CreateProductIntentHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreateProductIntentHandler.swift; sourceTree = \"<group>\"; };\n\t\t6AFDC48F21DEEC6600B9BB46 /* Intents.intentdefinition */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.intentdefinition; path = Intents.intentdefinition; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t6A26FB6A20F0E54400CDA761 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6A74424C21DEF45900F865FB /* ExtensionIntents.framework in Frameworks */,\n\t\t\t\t6AAD2E1E240FD669000E6B9A /* RxCocoa in Frameworks */,\n\t\t\t\t6AAD2E36240FE320000E6B9A /* RxSwift in Frameworks */,\n\t\t\t\t6AAD2E1C240FD669000E6B9A /* RxRelay in Frameworks */,\n\t\t\t\t6AAD2E22240FD999000E6B9A /* Entities in Frameworks */,\n\t\t\t\t6A1DF8A5241E4B54003A584E /* DependencyContainer in Frameworks */,\n\t\t\t\t6AAD2E2A240FDBC0000E6B9A /* Persistence in Frameworks */,\n\t\t\t\t6AAD2E26240FDAE1000E6B9A /* Domain in Frameworks */,\n\t\t\t\t6AAD2E28240FDBBC000E6B9A /* NetworkServices in Frameworks */,\n\t\t\t\t6AAD2E24240FD9EF000E6B9A /* Data in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6A26FB7E20F0E54500CDA761 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6AAD2E1A240FD669000E6B9A /* RxTest in Frameworks */,\n\t\t\t\t6AAD2E20240FD669000E6B9A /* RxBlocking in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6AFDC44121DEDF7E00B9BB46 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6A74424E21DEF45900F865FB /* ExtensionIntents.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6AFDC44A21DEDF7E00B9BB46 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6AFDC44F21DEDF7E00B9BB46 /* IntentsUI.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6AFDC46D21DEEB4D00B9BB46 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6AAD2E2E240FDBF6000E6B9A /* Entities in Frameworks */,\n\t\t\t\t6AAD2E34240FDBF6000E6B9A /* RxSwift in Frameworks */,\n\t\t\t\t6AAD2E2C240FDBF6000E6B9A /* Data in Frameworks */,\n\t\t\t\t6AAD2E30240FDBF6000E6B9A /* NetworkServices in Frameworks */,\n\t\t\t\t6AAD2E32240FDBF6000E6B9A /* Persistence in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t6A26FB6420F0E54400CDA761 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6AAAC13520F1164E007D8CB1 /* App */,\n\t\t\t\t6AFDC44521DEDF7E00B9BB46 /* AppIntents */,\n\t\t\t\t6AFDC45021DEDF7E00B9BB46 /* AppIntentsUI */,\n\t\t\t\t6AAAC13220F1164E007D8CB1 /* AppTests */,\n\t\t\t\t6AFDC47121DEEB4D00B9BB46 /* ExtensionIntents */,\n\t\t\t\t6A3934D921C6539D00B12F8F /* Frameworks */,\n\t\t\t\t6AAAC12320F11572007D8CB1 /* App.app */,\n\t\t\t\t6AFDC44421DEDF7E00B9BB46 /* AppIntents.appex */,\n\t\t\t\t6AFDC44D21DEDF7E00B9BB46 /* AppIntentsUI.appex */,\n\t\t\t\t6A74424B21DEF45900F865FB /* ExtensionIntents.framework */,\n\t\t\t\t6AAD2E3E240FE98F000E6B9A /* AppTests.xctest */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6A3934D921C6539D00B12F8F /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6AFDC44E21DEDF7E00B9BB46 /* IntentsUI.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6AAAC13220F1164E007D8CB1 /* AppTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6AAAC13320F1164E007D8CB1 /* AppTests.swift */,\n\t\t\t\t6AAAC13420F1164E007D8CB1 /* Info.plist */,\n\t\t\t);\n\t\t\tname = AppTests;\n\t\t\tpath = ../AppTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6AAAC13520F1164E007D8CB1 /* App */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6AFDC46A21DEE86D00B9BB46 /* App.entitlements */,\n\t\t\t\t6AB1362F21081A53004084DC /* AppCoordinator */,\n\t\t\t\t6AB1363921081A53004084DC /* Features */,\n\t\t\t\t6AB1363221081A53004084DC /* Plugins */,\n\t\t\t\t6AAAC14520F1164E007D8CB1 /* Assets.xcassets */,\n\t\t\t\t6AAAC14620F1164E007D8CB1 /* LaunchScreen.storyboard */,\n\t\t\t\t6AAAC14D20F1164E007D8CB1 /* AppDelegate.swift */,\n\t\t\t\t6AAAC14E20F1164E007D8CB1 /* Info.plist */,\n\t\t\t);\n\t\t\tname = App;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6AB1362F21081A53004084DC /* AppCoordinator */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6AB1363021081A53004084DC /* AppCoordinator.swift */,\n\t\t\t\t6AB1363121081A53004084DC /* Coordinator.swift */,\n\t\t\t\t6A2F96DF21DF11AF00864087 /* SiriShortcutCoordinator.swift */,\n\t\t\t);\n\t\t\tpath = AppCoordinator;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6AB1363221081A53004084DC /* Plugins */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6AB1363721081A53004084DC /* Dependency Injection */,\n\t\t\t);\n\t\t\tpath = Plugins;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6AB1363721081A53004084DC /* Dependency Injection */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6AB1363821081A53004084DC /* DependencyGraph.swift */,\n\t\t\t\t6A3934F221C65BD800B12F8F /* InterfaceBinding.swift */,\n\t\t\t);\n\t\t\tpath = \"Dependency Injection\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6AB1363921081A53004084DC /* Features */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6AB1363A21081A53004084DC /* Detail */,\n\t\t\t\t6AB1364121081A53004084DC /* Main */,\n\t\t\t);\n\t\t\tpath = Features;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6AB1363A21081A53004084DC /* Detail */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6AB1363D21081A53004084DC /* Coordinator */,\n\t\t\t\t6AB1363E21081A53004084DC /* ViewControllers */,\n\t\t\t\t6AB1363B21081A53004084DC /* ViewModel */,\n\t\t\t);\n\t\t\tpath = Detail;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6AB1363B21081A53004084DC /* ViewModel */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6AB1363C21081A53004084DC /* DetailViewModel.swift */,\n\t\t\t);\n\t\t\tpath = ViewModel;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6AB1363D21081A53004084DC /* Coordinator */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6AB1365221081A6F004084DC /* DetailCoordinator.swift */,\n\t\t\t);\n\t\t\tpath = Coordinator;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6AB1363E21081A53004084DC /* ViewControllers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6AB1363F21081A53004084DC /* DetailViewController.swift */,\n\t\t\t\t6AB1364021081A53004084DC /* DetailViewController.xib */,\n\t\t\t);\n\t\t\tpath = ViewControllers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6AB1364121081A53004084DC /* Main */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6AB1365721081A9C004084DC /* Coordinator */,\n\t\t\t\t6AB1365421081A9C004084DC /* ViewControllers */,\n\t\t\t\t6AB1365821081A9C004084DC /* ViewModel */,\n\t\t\t);\n\t\t\tpath = Main;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6AB1365421081A9C004084DC /* ViewControllers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6AB1365521081A9C004084DC /* MainViewController.xib */,\n\t\t\t\t6AB1365621081A9C004084DC /* MainViewController.swift */,\n\t\t\t);\n\t\t\tpath = ViewControllers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6AB1365721081A9C004084DC /* Coordinator */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6AB1365D21081B39004084DC /* MainCoordinator.swift */,\n\t\t\t);\n\t\t\tpath = Coordinator;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6AB1365821081A9C004084DC /* ViewModel */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6AB1365B21081AB1004084DC /* MainViewModel.swift */,\n\t\t\t);\n\t\t\tpath = ViewModel;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6AFDC44521DEDF7E00B9BB46 /* AppIntents */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6A2F96D821DEFE4500864087 /* AppIntents.entitlements */,\n\t\t\t\t6AFDC44621DEDF7E00B9BB46 /* IntentHandler.swift */,\n\t\t\t\t6AFDC44821DEDF7E00B9BB46 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = AppIntents;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6AFDC45021DEDF7E00B9BB46 /* AppIntentsUI */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6A2F96DE21DF0E1F00864087 /* AppIntentsUI.entitlements */,\n\t\t\t\t6AFDC45121DEDF7E00B9BB46 /* IntentViewController.swift */,\n\t\t\t\t6AFDC45321DEDF7E00B9BB46 /* MainInterface.storyboard */,\n\t\t\t\t6AFDC45621DEDF7E00B9BB46 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = AppIntentsUI;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6AFDC47121DEEB4D00B9BB46 /* ExtensionIntents */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6AFDC47221DEEB4D00B9BB46 /* ExtensionIntents.h */,\n\t\t\t\t6AFDC48F21DEEC6600B9BB46 /* Intents.intentdefinition */,\n\t\t\t\t6AFDC47321DEEB4D00B9BB46 /* Info.plist */,\n\t\t\t\t6AFDC48E21DEEC6600B9BB46 /* CreateProductIntentHandler.swift */,\n\t\t\t\t6A2F96D621DEFA1200864087 /* InterfaceBinding.swift */,\n\t\t\t\t6AFDC48D21DEEC6600B9BB46 /* NSUserActivity+IntentData.swift */,\n\t\t\t);\n\t\t\tpath = ExtensionIntents;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t6AFDC46B21DEEB4D00B9BB46 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6AFDC48221DEEB4D00B9BB46 /* ExtensionIntents.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\t6A26FB6C20F0E54400CDA761 /* App */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 6A26FB8A20F0E54500CDA761 /* Build configuration list for PBXNativeTarget \"App\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t6A26FB6920F0E54400CDA761 /* Sources */,\n\t\t\t\t6A26FB6A20F0E54400CDA761 /* Frameworks */,\n\t\t\t\t6A26FB6B20F0E54400CDA761 /* Resources */,\n\t\t\t\t6AFDC46321DEDF7E00B9BB46 /* Embed App Extensions */,\n\t\t\t\t6AFDC4A921DEF2AD00B9BB46 /* Embed Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t6AFDC45821DEDF7E00B9BB46 /* PBXTargetDependency */,\n\t\t\t\t6AFDC45B21DEDF7E00B9BB46 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = App;\n\t\t\tpackageProductDependencies = (\n\t\t\t\t6AAD2E1B240FD669000E6B9A /* RxRelay */,\n\t\t\t\t6AAD2E1D240FD669000E6B9A /* RxCocoa */,\n\t\t\t\t6AAD2E21240FD999000E6B9A /* Entities */,\n\t\t\t\t6AAD2E23240FD9EF000E6B9A /* Data */,\n\t\t\t\t6AAD2E25240FDAE1000E6B9A /* Domain */,\n\t\t\t\t6AAD2E27240FDBBC000E6B9A /* NetworkServices */,\n\t\t\t\t6AAD2E29240FDBC0000E6B9A /* Persistence */,\n\t\t\t\t6AAD2E35240FE320000E6B9A /* RxSwift */,\n\t\t\t\t6A1DF8A4241E4B54003A584E /* DependencyContainer */,\n\t\t\t);\n\t\t\tproductName = Project;\n\t\t\tproductReference = 6AAAC12320F11572007D8CB1 /* App.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t6A26FB8020F0E54500CDA761 /* AppTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 6A26FB8D20F0E54500CDA761 /* Build configuration list for PBXNativeTarget \"AppTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t6A26FB7D20F0E54500CDA761 /* Sources */,\n\t\t\t\t6A26FB7E20F0E54500CDA761 /* Frameworks */,\n\t\t\t\t6A26FB7F20F0E54500CDA761 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t6A26FB8320F0E54500CDA761 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = AppTests;\n\t\t\tpackageProductDependencies = (\n\t\t\t\t6AAD2E19240FD669000E6B9A /* RxTest */,\n\t\t\t\t6AAD2E1F240FD669000E6B9A /* RxBlocking */,\n\t\t\t);\n\t\t\tproductName = ProjectTests;\n\t\t\tproductReference = 6AAD2E3E240FE98F000E6B9A /* AppTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t6AFDC44321DEDF7E00B9BB46 /* AppIntents */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 6AFDC46021DEDF7E00B9BB46 /* Build configuration list for PBXNativeTarget \"AppIntents\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t6AFDC44021DEDF7E00B9BB46 /* Sources */,\n\t\t\t\t6AFDC44121DEDF7E00B9BB46 /* Frameworks */,\n\t\t\t\t6AFDC44221DEDF7E00B9BB46 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = AppIntents;\n\t\t\tproductName = AppIntents;\n\t\t\tproductReference = 6AFDC44421DEDF7E00B9BB46 /* AppIntents.appex */;\n\t\t\tproductType = \"com.apple.product-type.app-extension\";\n\t\t};\n\t\t6AFDC44C21DEDF7E00B9BB46 /* AppIntentsUI */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 6AFDC45D21DEDF7E00B9BB46 /* Build configuration list for PBXNativeTarget \"AppIntentsUI\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t6AFDC44921DEDF7E00B9BB46 /* Sources */,\n\t\t\t\t6AFDC44A21DEDF7E00B9BB46 /* Frameworks */,\n\t\t\t\t6AFDC44B21DEDF7E00B9BB46 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = AppIntentsUI;\n\t\t\tproductName = AppIntentsUI;\n\t\t\tproductReference = 6AFDC44D21DEDF7E00B9BB46 /* AppIntentsUI.appex */;\n\t\t\tproductType = \"com.apple.product-type.app-extension\";\n\t\t};\n\t\t6AFDC46F21DEEB4D00B9BB46 /* ExtensionIntents */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 6AFDC48721DEEB4D00B9BB46 /* Build configuration list for PBXNativeTarget \"ExtensionIntents\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t6AFDC46B21DEEB4D00B9BB46 /* Headers */,\n\t\t\t\t6AFDC46C21DEEB4D00B9BB46 /* Sources */,\n\t\t\t\t6AFDC46D21DEEB4D00B9BB46 /* Frameworks */,\n\t\t\t\t6AFDC46E21DEEB4D00B9BB46 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = ExtensionIntents;\n\t\t\tpackageProductDependencies = (\n\t\t\t\t6AAD2E2B240FDBF6000E6B9A /* Data */,\n\t\t\t\t6AAD2E2D240FDBF6000E6B9A /* Entities */,\n\t\t\t\t6AAD2E2F240FDBF6000E6B9A /* NetworkServices */,\n\t\t\t\t6AAD2E31240FDBF6000E6B9A /* Persistence */,\n\t\t\t\t6AAD2E33240FDBF6000E6B9A /* RxSwift */,\n\t\t\t);\n\t\t\tproductName = ExtensionIntents;\n\t\t\tproductReference = 6A74424B21DEF45900F865FB /* ExtensionIntents.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t6A26FB6520F0E54400CDA761 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 1010;\n\t\t\t\tLastUpgradeCheck = 1010;\n\t\t\t\tORGANIZATIONNAME = \"Cassius Pacheco\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t6A26FB6C20F0E54400CDA761 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1130;\n\t\t\t\t\t\tSystemCapabilities = {\n\t\t\t\t\t\t\tcom.apple.ApplicationGroups.iOS = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.Siri = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t\t\t6A26FB8020F0E54500CDA761 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1130;\n\t\t\t\t\t};\n\t\t\t\t\t6AFDC44321DEDF7E00B9BB46 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 10.1;\n\t\t\t\t\t\tLastSwiftMigration = 1130;\n\t\t\t\t\t\tSystemCapabilities = {\n\t\t\t\t\t\t\tcom.apple.ApplicationGroups.iOS = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t\t\t6AFDC44C21DEDF7E00B9BB46 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 10.1;\n\t\t\t\t\t\tLastSwiftMigration = 1130;\n\t\t\t\t\t\tSystemCapabilities = {\n\t\t\t\t\t\t\tcom.apple.ApplicationGroups.iOS = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t\t\t6AFDC46F21DEEB4D00B9BB46 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 10.1;\n\t\t\t\t\t\tLastSwiftMigration = 1130;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 6A26FB6820F0E54400CDA761 /* Build configuration list for PBXProject \"App\" */;\n\t\t\tcompatibilityVersion = \"Xcode 9.3\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 6A26FB6420F0E54400CDA761;\n\t\t\tpackageReferences = (\n\t\t\t\t6AAD2E16240FD669000E6B9A /* XCRemoteSwiftPackageReference \"RxSwift\" */,\n\t\t\t\t6A1DF8A3241E4B53003A584E /* XCRemoteSwiftPackageReference \"DependencyContainer\" */,\n\t\t\t);\n\t\t\tproductRefGroup = 6A26FB6420F0E54400CDA761;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t6A26FB6C20F0E54400CDA761 /* App */,\n\t\t\t\t6A26FB8020F0E54500CDA761 /* AppTests */,\n\t\t\t\t6AFDC44321DEDF7E00B9BB46 /* AppIntents */,\n\t\t\t\t6AFDC44C21DEDF7E00B9BB46 /* AppIntentsUI */,\n\t\t\t\t6AFDC46F21DEEB4D00B9BB46 /* ExtensionIntents */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t6A26FB6B20F0E54400CDA761 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6AAAC15820F1164E007D8CB1 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t6AB1364E21081A53004084DC /* DetailViewController.xib in Resources */,\n\t\t\t\t6AAAC15720F1164E007D8CB1 /* Assets.xcassets in Resources */,\n\t\t\t\t6AB1365921081A9C004084DC /* MainViewController.xib in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6A26FB7F20F0E54500CDA761 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6AFDC44221DEDF7E00B9BB46 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6AFDC44B21DEDF7E00B9BB46 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6AFDC45521DEDF7E00B9BB46 /* MainInterface.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6AFDC46E21DEEB4D00B9BB46 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t6A26FB6920F0E54400CDA761 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6AB1364721081A53004084DC /* AppCoordinator.swift in Sources */,\n\t\t\t\t6AB1365E21081B39004084DC /* MainCoordinator.swift in Sources */,\n\t\t\t\t6AB1364C21081A53004084DC /* DetailViewModel.swift in Sources */,\n\t\t\t\t6A2F96E021DF11AF00864087 /* SiriShortcutCoordinator.swift in Sources */,\n\t\t\t\t6AB1365321081A6F004084DC /* DetailCoordinator.swift in Sources */,\n\t\t\t\t6AAD2E3D240FE5C5000E6B9A /* InterfaceBinding.swift in Sources */,\n\t\t\t\t6AB1364B21081A53004084DC /* DependencyGraph.swift in Sources */,\n\t\t\t\t6AFDC49321DEEC6E00B9BB46 /* Intents.intentdefinition in Sources */,\n\t\t\t\t6AAAC15D20F1164E007D8CB1 /* AppDelegate.swift in Sources */,\n\t\t\t\t6AB1364821081A53004084DC /* Coordinator.swift in Sources */,\n\t\t\t\t6AB1364D21081A53004084DC /* DetailViewController.swift in Sources */,\n\t\t\t\t6AB1365A21081A9C004084DC /* MainViewController.swift in Sources */,\n\t\t\t\t6AB1365C21081AB1004084DC /* MainViewModel.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6A26FB7D20F0E54500CDA761 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6ACB875820F116DD005A04A7 /* AppTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6AFDC44021DEDF7E00B9BB46 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6AFDC49421DEEC7200B9BB46 /* Intents.intentdefinition in Sources */,\n\t\t\t\t6AFDC44721DEDF7E00B9BB46 /* IntentHandler.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6AFDC44921DEDF7E00B9BB46 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6AFDC49521DEEC7200B9BB46 /* Intents.intentdefinition in Sources */,\n\t\t\t\t6AFDC45221DEDF7E00B9BB46 /* IntentViewController.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6AFDC46C21DEEB4D00B9BB46 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6AFDC49221DEEC6600B9BB46 /* Intents.intentdefinition in Sources */,\n\t\t\t\t6A2F96D721DEFA1200864087 /* InterfaceBinding.swift in Sources */,\n\t\t\t\t6AFDC49121DEEC6600B9BB46 /* CreateProductIntentHandler.swift in Sources */,\n\t\t\t\t6AFDC49021DEEC6600B9BB46 /* NSUserActivity+IntentData.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t6A26FB8320F0E54500CDA761 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 6A26FB6C20F0E54400CDA761 /* App */;\n\t\t\ttargetProxy = 6A26FB8220F0E54500CDA761 /* PBXContainerItemProxy */;\n\t\t};\n\t\t6AFDC45821DEDF7E00B9BB46 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 6AFDC44C21DEDF7E00B9BB46 /* AppIntentsUI */;\n\t\t\ttargetProxy = 6AFDC45721DEDF7E00B9BB46 /* PBXContainerItemProxy */;\n\t\t};\n\t\t6AFDC45B21DEDF7E00B9BB46 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 6AFDC44321DEDF7E00B9BB46 /* AppIntents */;\n\t\t\ttargetProxy = 6AFDC45A21DEDF7E00B9BB46 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t6AAAC14620F1164E007D8CB1 /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t6AAAC14720F1164E007D8CB1 /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6AFDC45321DEDF7E00B9BB46 /* MainInterface.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t6AFDC45421DEDF7E00B9BB46 /* Base */,\n\t\t\t);\n\t\t\tname = MainInterface.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t6A26FB8820F0E54500CDA761 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t6A26FB8920F0E54500CDA761 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t6A26FB8B20F0E54500CDA761 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = App.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 2LT888MY4H;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tINFOPLIST_FILE = \"$(SRCROOT)/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.cassiuspacheco.App;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t6A26FB8C20F0E54500CDA761 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = App.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 2LT888MY4H;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tINFOPLIST_FILE = \"$(SRCROOT)/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.cassiuspacheco.App;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t6A26FB8E20F0E54500CDA761 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tCODE_SIGN_STYLE = Manual;\n\t\t\t\tDEVELOPMENT_TEAM = 2LT888MY4H;\n\t\t\t\tINFOPLIST_FILE = \"$(SRCROOT)/../AppTests/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.cassiuspacheco.AppTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t6A26FB8F20F0E54500CDA761 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tCODE_SIGN_STYLE = Manual;\n\t\t\t\tDEVELOPMENT_TEAM = 2LT888MY4H;\n\t\t\t\tINFOPLIST_FILE = \"$(SRCROOT)/../AppTests/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.cassiuspacheco.AppTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t6AFDC45E21DEDF7E00B9BB46 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = AppIntentsUI/AppIntentsUI.entitlements;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 2LT888MY4H;\n\t\t\t\tINFOPLIST_FILE = AppIntentsUI/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.cassiuspacheco.App.AppIntentsUI;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t6AFDC45F21DEDF7E00B9BB46 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = AppIntentsUI/AppIntentsUI.entitlements;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 2LT888MY4H;\n\t\t\t\tINFOPLIST_FILE = AppIntentsUI/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.cassiuspacheco.App.AppIntentsUI;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t6AFDC46121DEDF7E00B9BB46 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = AppIntents/AppIntents.entitlements;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 2LT888MY4H;\n\t\t\t\tINFOPLIST_FILE = AppIntents/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.cassiuspacheco.App.AppIntents;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t6AFDC46221DEDF7E00B9BB46 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = AppIntents/AppIntents.entitlements;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 2LT888MY4H;\n\t\t\t\tINFOPLIST_FILE = AppIntents/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.cassiuspacheco.App.AppIntents;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t6AFDC48821DEEB4D00B9BB46 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = YES;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDEVELOPMENT_TEAM = 2LT888MY4H;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tINFOPLIST_FILE = ExtensionIntents/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.cassiuspacheco.ExtensionIntents;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME:c99extidentifier)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t6AFDC48921DEEB4D00B9BB46 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = YES;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDEVELOPMENT_TEAM = 2LT888MY4H;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tINFOPLIST_FILE = ExtensionIntents/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.cassiuspacheco.ExtensionIntents;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME:c99extidentifier)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t6A26FB6820F0E54400CDA761 /* Build configuration list for PBXProject \"App\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t6A26FB8820F0E54500CDA761 /* Debug */,\n\t\t\t\t6A26FB8920F0E54500CDA761 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t6A26FB8A20F0E54500CDA761 /* Build configuration list for PBXNativeTarget \"App\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t6A26FB8B20F0E54500CDA761 /* Debug */,\n\t\t\t\t6A26FB8C20F0E54500CDA761 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t6A26FB8D20F0E54500CDA761 /* Build configuration list for PBXNativeTarget \"AppTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t6A26FB8E20F0E54500CDA761 /* Debug */,\n\t\t\t\t6A26FB8F20F0E54500CDA761 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t6AFDC45D21DEDF7E00B9BB46 /* Build configuration list for PBXNativeTarget \"AppIntentsUI\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t6AFDC45E21DEDF7E00B9BB46 /* Debug */,\n\t\t\t\t6AFDC45F21DEDF7E00B9BB46 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t6AFDC46021DEDF7E00B9BB46 /* Build configuration list for PBXNativeTarget \"AppIntents\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t6AFDC46121DEDF7E00B9BB46 /* Debug */,\n\t\t\t\t6AFDC46221DEDF7E00B9BB46 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t6AFDC48721DEEB4D00B9BB46 /* Build configuration list for PBXNativeTarget \"ExtensionIntents\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t6AFDC48821DEEB4D00B9BB46 /* Debug */,\n\t\t\t\t6AFDC48921DEEB4D00B9BB46 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\n/* Begin XCRemoteSwiftPackageReference section */\n\t\t6A1DF8A3241E4B53003A584E /* XCRemoteSwiftPackageReference \"DependencyContainer\" */ = {\n\t\t\tisa = XCRemoteSwiftPackageReference;\n\t\t\trepositoryURL = \"https://github.com/CassiusPacheco/DependencyContainer\";\n\t\t\trequirement = {\n\t\t\t\tkind = exactVersion;\n\t\t\t\tversion = 0.1.0;\n\t\t\t};\n\t\t};\n\t\t6AAD2E16240FD669000E6B9A /* XCRemoteSwiftPackageReference \"RxSwift\" */ = {\n\t\t\tisa = XCRemoteSwiftPackageReference;\n\t\t\trepositoryURL = \"https://github.com/ReactiveX/RxSwift\";\n\t\t\trequirement = {\n\t\t\t\tkind = exactVersion;\n\t\t\t\tversion = 5.1.0;\n\t\t\t};\n\t\t};\n/* End XCRemoteSwiftPackageReference section */\n\n/* Begin XCSwiftPackageProductDependency section */\n\t\t6A1DF8A4241E4B54003A584E /* DependencyContainer */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = 6A1DF8A3241E4B53003A584E /* XCRemoteSwiftPackageReference \"DependencyContainer\" */;\n\t\t\tproductName = DependencyContainer;\n\t\t};\n\t\t6AAD2E19240FD669000E6B9A /* RxTest */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = 6AAD2E16240FD669000E6B9A /* XCRemoteSwiftPackageReference \"RxSwift\" */;\n\t\t\tproductName = RxTest;\n\t\t};\n\t\t6AAD2E1B240FD669000E6B9A /* RxRelay */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = 6AAD2E16240FD669000E6B9A /* XCRemoteSwiftPackageReference \"RxSwift\" */;\n\t\t\tproductName = RxRelay;\n\t\t};\n\t\t6AAD2E1D240FD669000E6B9A /* RxCocoa */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = 6AAD2E16240FD669000E6B9A /* XCRemoteSwiftPackageReference \"RxSwift\" */;\n\t\t\tproductName = RxCocoa;\n\t\t};\n\t\t6AAD2E1F240FD669000E6B9A /* RxBlocking */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = 6AAD2E16240FD669000E6B9A /* XCRemoteSwiftPackageReference \"RxSwift\" */;\n\t\t\tproductName = RxBlocking;\n\t\t};\n\t\t6AAD2E21240FD999000E6B9A /* Entities */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = Entities;\n\t\t};\n\t\t6AAD2E23240FD9EF000E6B9A /* Data */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = Data;\n\t\t};\n\t\t6AAD2E25240FDAE1000E6B9A /* Domain */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = Domain;\n\t\t};\n\t\t6AAD2E27240FDBBC000E6B9A /* NetworkServices */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = NetworkServices;\n\t\t};\n\t\t6AAD2E29240FDBC0000E6B9A /* Persistence */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = Persistence;\n\t\t};\n\t\t6AAD2E2B240FDBF6000E6B9A /* Data */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = Data;\n\t\t};\n\t\t6AAD2E2D240FDBF6000E6B9A /* Entities */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = Entities;\n\t\t};\n\t\t6AAD2E2F240FDBF6000E6B9A /* NetworkServices */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = NetworkServices;\n\t\t};\n\t\t6AAD2E31240FDBF6000E6B9A /* Persistence */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = Persistence;\n\t\t};\n\t\t6AAD2E33240FDBF6000E6B9A /* RxSwift */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = 6AAD2E16240FD669000E6B9A /* XCRemoteSwiftPackageReference \"RxSwift\" */;\n\t\t\tproductName = RxSwift;\n\t\t};\n\t\t6AAD2E35240FE320000E6B9A /* RxSwift */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = 6AAD2E16240FD669000E6B9A /* XCRemoteSwiftPackageReference \"RxSwift\" */;\n\t\t\tproductName = RxSwift;\n\t\t};\n/* End XCSwiftPackageProductDependency section */\n\t};\n\trootObject = 6A26FB6520F0E54400CDA761 /* Project object */;\n}\n"
  },
  {
    "path": "App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:Project.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "App/App.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "App/App.xcodeproj/xcshareddata/xcschemes/App.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1130\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"6A26FB6C20F0E54400CDA761\"\n               BuildableName = \"App.app\"\n               BlueprintName = \"App\"\n               ReferencedContainer = \"container:App.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"6A26FB6C20F0E54400CDA761\"\n            BuildableName = \"App.app\"\n            BlueprintName = \"App\"\n            ReferencedContainer = \"container:App.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"6A26FB8020F0E54500CDA761\"\n               BuildableName = \"AppTests.xctest\"\n               BlueprintName = \"AppTests\"\n               ReferencedContainer = \"container:App.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"6A26FB6C20F0E54400CDA761\"\n            BuildableName = \"App.app\"\n            BlueprintName = \"App\"\n            ReferencedContainer = \"container:App.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"6A26FB6C20F0E54400CDA761\"\n            BuildableName = \"App.app\"\n            BlueprintName = \"App\"\n            ReferencedContainer = \"container:App.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "App/App.xcodeproj/xcshareddata/xcschemes/AppIntents.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1130\"\n   wasCreatedForAppExtension = \"YES\"\n   version = \"2.0\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"6AFDC44321DEDF7E00B9BB46\"\n               BuildableName = \"AppIntents.appex\"\n               BlueprintName = \"AppIntents\"\n               ReferencedContainer = \"container:App.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"6A26FB6C20F0E54400CDA761\"\n               BuildableName = \"App.app\"\n               BlueprintName = \"App\"\n               ReferencedContainer = \"container:App.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"\"\n      selectedLauncherIdentifier = \"Xcode.IDEFoundation.Launcher.PosixSpawn\"\n      launchStyle = \"0\"\n      askForAppToLaunch = \"Yes\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\"\n      launchAutomaticallySubstyle = \"2\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"6A26FB6C20F0E54400CDA761\"\n            BuildableName = \"App.app\"\n            BlueprintName = \"App\"\n            ReferencedContainer = \"container:App.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      launchAutomaticallySubstyle = \"2\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"6A26FB6C20F0E54400CDA761\"\n            BuildableName = \"App.app\"\n            BlueprintName = \"App\"\n            ReferencedContainer = \"container:App.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "App/App.xcodeproj/xcshareddata/xcschemes/AppIntentsUI.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1130\"\n   wasCreatedForAppExtension = \"YES\"\n   version = \"2.0\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"6AFDC44C21DEDF7E00B9BB46\"\n               BuildableName = \"AppIntentsUI.appex\"\n               BlueprintName = \"AppIntentsUI\"\n               ReferencedContainer = \"container:App.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"6A26FB6C20F0E54400CDA761\"\n               BuildableName = \"App.app\"\n               BlueprintName = \"App\"\n               ReferencedContainer = \"container:App.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"\"\n      selectedLauncherIdentifier = \"Xcode.IDEFoundation.Launcher.PosixSpawn\"\n      launchStyle = \"0\"\n      askForAppToLaunch = \"Yes\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\"\n      launchAutomaticallySubstyle = \"2\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"6A26FB6C20F0E54400CDA761\"\n            BuildableName = \"App.app\"\n            BlueprintName = \"App\"\n            ReferencedContainer = \"container:App.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      launchAutomaticallySubstyle = \"2\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"6A26FB6C20F0E54400CDA761\"\n            BuildableName = \"App.app\"\n            BlueprintName = \"App\"\n            ReferencedContainer = \"container:App.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "App/AppCoordinator/AppCoordinator.swift",
    "content": "//\n//  AppCoordinator.swift\n//  Project\n//\n//  Created by Cassius Pacheco on 8/7/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport Foundation\nimport UIKit\nimport DependencyContainer\n\nprotocol AppCoordinatorInterface: Coordinator {\n    var siriShortcutCoordinator: SiriShortcutCoordinatorInterface { get }\n    var window: UIWindow! { get set }\n\n    func pushDetailViewController()\n}\n\nenum AppChild {\n    case main\n}\n\nclass AppCoordinator: AppCoordinatorInterface {\n    private(set) lazy var siriShortcutCoordinator: SiriShortcutCoordinatorInterface = SiriShortcutCoordinator(navigationController: navigationController)\n    private(set) var navigationController: UINavigationController!\n    private let container: DependencyContainer\n    var children = [AppChild: Coordinator]()\n    var window: UIWindow!\n    \n    init(container: DependencyContainer) {\n        self.container = container\n    }\n    \n    func start() {\n        // The rootVC needs to be initialised manually\n        let mainCoordinator = container.resolve(MainCoordinatorInterface.self)\n        var viewModel = container.resolve(MainViewModelInterface.self)\n        viewModel.coordinator = mainCoordinator\n        children[.main] = mainCoordinator\n        \n        let mainViewController = MainViewController(viewModel: viewModel)\n        navigationController = UINavigationController(rootViewController: mainViewController)\n        mainCoordinator.navigationController = navigationController\n        \n        window.rootViewController = navigationController\n        window.makeKeyAndVisible()\n    }\n\n    func pushDetailViewController() {\n        let isDetailVisible = navigationController.viewControllers.contains(where: { controller -> Bool in\n            return controller is DetailViewController\n        })\n\n        guard let mainCoordinator = children[.main] as? MainCoordinatorInterface, !isDetailVisible else { return }\n        mainCoordinator.pushDetailViewController()\n    }\n}\n"
  },
  {
    "path": "App/AppCoordinator/Coordinator.swift",
    "content": "//\n//  Coordinator.swift\n//  Project\n//\n//  Created by Cassius Pacheco on 8/7/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport Foundation\nimport UIKit\n\nprotocol Coordinator {\n    func start()\n}\n"
  },
  {
    "path": "App/AppCoordinator/SiriShortcutCoordinator.swift",
    "content": "//\n//  SiriShortcutCoordinator.swift\n//  App\n//\n//  Created by Cassius Pacheco on 4/1/19.\n//  Copyright © 2019 Cassius Pacheco. All rights reserved.\n//\n\nimport Foundation\nimport IntentsUI\nimport os.log\n\n// This coordinator is a bit different of the others because an instance of this coordinator will be kept in the AppCoordinator\n// to handle all SiriShortcuts presentation/dismissal methods and also handle the Shortcut button delegate calls.\nprotocol SiriShortcutCoordinatorInterface: Coordinator, INUIAddVoiceShortcutButtonDelegate {}\n\nfinal class SiriShortcutCoordinator: NSObject, SiriShortcutCoordinatorInterface {\n    let navigationController: UINavigationController\n\n    init(navigationController: UINavigationController) {\n        self.navigationController = navigationController\n    }\n\n    func start() {}\n}\n\nextension SiriShortcutCoordinator: INUIAddVoiceShortcutButtonDelegate {\n    func present(_ addVoiceShortcutViewController: INUIAddVoiceShortcutViewController, for addVoiceShortcutButton: INUIAddVoiceShortcutButton) {\n        addVoiceShortcutViewController.delegate = self\n        navigationController.present(addVoiceShortcutViewController, animated: true, completion: nil)\n    }\n\n    func present(_ editVoiceShortcutViewController: INUIEditVoiceShortcutViewController, for addVoiceShortcutButton: INUIAddVoiceShortcutButton) {\n        editVoiceShortcutViewController.delegate = self\n        navigationController.present(editVoiceShortcutViewController, animated: true, completion: nil)\n    }\n}\n\nextension SiriShortcutCoordinator: INUIAddVoiceShortcutViewControllerDelegate {\n    func addVoiceShortcutViewController(_ controller: INUIAddVoiceShortcutViewController, didFinishWith voiceShortcut: INVoiceShortcut?, error: Error?) {\n        if let error = error as NSError? {\n            os_log(\"Error adding voice shortcut: %@\", log: OSLog.default, type: .error, error)\n        }\n\n        controller.dismiss(animated: true, completion: nil)\n    }\n\n    func addVoiceShortcutViewControllerDidCancel(_ controller: INUIAddVoiceShortcutViewController) {\n        controller.dismiss(animated: true, completion: nil)\n    }\n}\n\nextension SiriShortcutCoordinator: INUIEditVoiceShortcutViewControllerDelegate {\n    func editVoiceShortcutViewController(_ controller: INUIEditVoiceShortcutViewController, didUpdate voiceShortcut: INVoiceShortcut?, error: Error?) {\n        if let error = error as NSError? {\n            os_log(\"Error adding voice shortcut: %@\", log: OSLog.default, type: .error, error)\n        }\n\n        controller.dismiss(animated: true, completion: nil)\n    }\n\n    func editVoiceShortcutViewController(_ controller: INUIEditVoiceShortcutViewController, didDeleteVoiceShortcutWithIdentifier deletedVoiceShortcutIdentifier: UUID) {\n        controller.dismiss(animated: true, completion: nil)\n    }\n\n    func editVoiceShortcutViewControllerDidCancel(_ controller: INUIEditVoiceShortcutViewController) {\n        controller.dismiss(animated: true, completion: nil)\n    }\n}\n"
  },
  {
    "path": "App/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  Project\n//\n//  Created by Cassius Pacheco on 7/7/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport UIKit\nimport DependencyContainer\nimport ExtensionIntents\nimport os.log\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n    private lazy var dependencyGraph = DependencyGraph(container: DependencyContainer())\n\n    var window: UIWindow?\n    \n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n    \n        let mainWindow = UIWindow(frame: UIScreen.main.bounds)\n        self.window = mainWindow\n        \n        dependencyGraph.setupWithMainWindow(mainWindow)\n        \n        var coordinator = dependencyGraph.container.resolve(AppCoordinatorInterface.self)\n        coordinator.window = window\n        coordinator.start()\n        \n        return true\n    }\n\n    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {\n        guard userActivity.activityType == NSUserActivity.createProductActivityType ||\n            userActivity.activityType == NSStringFromClass(CreateProductIntent.self) else { return false }\n        \n        let coordinator = dependencyGraph.container.resolve(AppCoordinatorInterface.self)\n        coordinator.pushDetailViewController()\n        return true\n    }\n}\n\n"
  },
  {
    "path": "App/AppIntents/AppIntents.entitlements",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>com.apple.security.application-groups</key>\n\t<array>\n\t\t<string>group.com.cassiuspacheco.Swift-CleanArchitecture</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "App/AppIntents/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>AppIntents</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>XPC!</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>NSExtension</key>\n\t<dict>\n\t\t<key>NSExtensionAttributes</key>\n\t\t<dict>\n\t\t\t<key>IntentsRestrictedWhileLocked</key>\n\t\t\t<array/>\n\t\t\t<key>IntentsRestrictedWhileProtectedDataUnavailable</key>\n\t\t\t<array/>\n\t\t\t<key>IntentsSupported</key>\n\t\t\t<array>\n\t\t\t\t<string>CreateProductIntent</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<key>NSExtensionPointIdentifier</key>\n\t\t<string>com.apple.intents-service</string>\n\t\t<key>NSExtensionPrincipalClass</key>\n\t\t<string>$(PRODUCT_MODULE_NAME).IntentHandler</string>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "App/AppIntents/IntentHandler.swift",
    "content": "//\n//  IntentHandler.swift\n//  AppIntents\n//\n//  Created by Cassius Pacheco on 4/1/19.\n//  Copyright © 2019 Cassius Pacheco. All rights reserved.\n//\n\nimport Intents\nimport ExtensionIntents\n\nclass IntentHandler: INExtension {\n    override func handler(for intent: INIntent) -> Any {\n        guard intent is CreateProductIntent else { fatalError(\"Unhandled intent type: \\(intent)\") }\n        return CreateProductIntentHandler()\n    }\n}\n"
  },
  {
    "path": "App/AppIntentsUI/AppIntentsUI.entitlements",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>com.apple.security.application-groups</key>\n\t<array>\n\t\t<string>group.com.cassiuspacheco.Swift-CleanArchitecture</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "App/AppIntentsUI/Base.lproj/MainInterface.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"13122.16\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"ObA-dk-sSI\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13104.12\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Intent View Controller-->\n        <scene sceneID=\"7MM-of-jgj\">\n            <objects>\n                <viewController id=\"ObA-dk-sSI\" customClass=\"IntentViewController\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"zMn-AG-sqS\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"150\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <viewLayoutGuide key=\"safeArea\" id=\"4PN-XC-lEE\"/>\n                    </view>\n                    <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n                    <size key=\"freeformSize\" width=\"320\" height=\"150\"/>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"X47-rx-isc\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "App/AppIntentsUI/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>AppIntentsUI</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>XPC!</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>NSExtension</key>\n\t<dict>\n\t\t<key>NSExtensionAttributes</key>\n\t\t<dict>\n\t\t\t<key>IntentsSupported</key>\n\t\t\t<array>\n\t\t\t\t<string>CreateProductIntent</string>\n\t\t\t\t<string>INSendMessageIntent</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<key>NSExtensionMainStoryboard</key>\n\t\t<string>MainInterface</string>\n\t\t<key>NSExtensionPointIdentifier</key>\n\t\t<string>com.apple.intents-ui-service</string>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "App/AppIntentsUI/IntentViewController.swift",
    "content": "//\n//  IntentViewController.swift\n//  AppIntentsUI\n//\n//  Created by Cassius Pacheco on 4/1/19.\n//  Copyright © 2019 Cassius Pacheco. All rights reserved.\n//\n\nimport IntentsUI\n\n// As an example, this extension's Info.plist has been configured to handle interactions for INSendMessageIntent.\n// You will want to replace this or add other intents as appropriate.\n// The intents whose interactions you wish to handle must be declared in the extension's Info.plist.\n\n// You can test this example integration by saying things to Siri like:\n// \"Send a message using <myApp>\"\n\nclass IntentViewController: UIViewController, INUIHostedViewControlling {\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        // Do any additional setup after loading the view.\n    }\n        \n    // MARK: - INUIHostedViewControlling\n    \n    // Prepare your view controller for the interaction to handle.\n    func configureView(for parameters: Set<INParameter>, of interaction: INInteraction, interactiveBehavior: INUIInteractiveBehavior, context: INUIHostedViewContext, completion: @escaping (Bool, Set<INParameter>, CGSize) -> Void) {\n        // Do configuration here, including preparing views and calculating a desired size for presentation.\n        completion(true, parameters, self.desiredSize)\n    }\n    \n    var desiredSize: CGSize {\n        return self.extensionContext!.hostedViewMaximumAllowedSize\n    }\n    \n}\n"
  },
  {
    "path": "App/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"83.5x83.5\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ios-marketing\",\n      \"size\" : \"1024x1024\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "App/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "App/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"13122.16\" systemVersion=\"17A277\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13104.12\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <viewLayoutGuide key=\"safeArea\" id=\"6Tk-OE-BBY\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "App/ExtensionIntents/CreateProductIntentHandler.swift",
    "content": "//\n//  CreateProductIntentHandler.swift\n//  ExtensionIntents\n//\n//  Created by Cassius Pacheco on 4/1/19.\n//  Copyright © 2019 Cassius Pacheco. All rights reserved.\n//\n\nimport Foundation\nimport Entities\nimport Data\nimport Persistence\nimport NetworkServices\n\npublic final class CreateProductIntentHandler: NSObject, CreateProductIntentHandling {\n    public func handle(intent: CreateProductIntent, completion: @escaping (CreateProductIntentResponse) -> Void) {\n        guard let productName = intent.name else {\n            completion(CreateProductIntentResponse(code: .failure, userActivity: nil))\n            return\n        }\n\n        let product = Product(name: productName)\n        let persistence = Persistence(defaults: UserDefaults(suiteName: Persistence.appGroup)!)\n        let productRepository = ProductRepository(cache: persistence, service: ProductService())\n        productRepository.create(product)\n\n        let userActivity = NSUserActivity(activityType: NSUserActivity.createProductActivityType)\n        userActivity.addUserInfoEntries(from: [NSUserActivity.ActivityKeys.productName.rawValue: product.name])\n\n        let response = CreateProductIntentResponse.success(name: productName)\n        response.userActivity = userActivity\n        completion(response)\n    }\n}\n"
  },
  {
    "path": "App/ExtensionIntents/ExtensionIntents.h",
    "content": "//\n//  ExtensionIntents.h\n//  ExtensionIntents\n//\n//  Created by Cassius Pacheco on 4/1/19.\n//  Copyright © 2019 Cassius Pacheco. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n//! Project version number for ExtensionIntents.\nFOUNDATION_EXPORT double ExtensionIntentsVersionNumber;\n\n//! Project version string for ExtensionIntents.\nFOUNDATION_EXPORT const unsigned char ExtensionIntentsVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <ExtensionIntents/PublicHeader.h>\n\n\n"
  },
  {
    "path": "App/ExtensionIntents/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "App/ExtensionIntents/Intents.intentdefinition",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>INEnums</key>\n\t<array/>\n\t<key>INIntentDefinitionModelVersion</key>\n\t<string>1.0</string>\n\t<key>INIntentDefinitionSystemVersion</key>\n\t<string>18C54</string>\n\t<key>INIntentDefinitionToolsBuildVersion</key>\n\t<string>10B61</string>\n\t<key>INIntentDefinitionToolsVersion</key>\n\t<string>10.1</string>\n\t<key>INIntents</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>INIntentCategory</key>\n\t\t\t<string>create</string>\n\t\t\t<key>INIntentDescription</key>\n\t\t\t<string>Create a product</string>\n\t\t\t<key>INIntentDescriptionID</key>\n\t\t\t<string>SDCFif</string>\n\t\t\t<key>INIntentLastParameterTag</key>\n\t\t\t<integer>1</integer>\n\t\t\t<key>INIntentName</key>\n\t\t\t<string>CreateProduct</string>\n\t\t\t<key>INIntentParameterCombinations</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>INIntentParameterCombinationIsPrimary</key>\n\t\t\t\t\t<false/>\n\t\t\t\t\t<key>INIntentParameterCombinationSubtitle</key>\n\t\t\t\t\t<string></string>\n\t\t\t\t\t<key>INIntentParameterCombinationSubtitleID</key>\n\t\t\t\t\t<string>83xzAk</string>\n\t\t\t\t\t<key>INIntentParameterCombinationSupportsBackgroundExecution</key>\n\t\t\t\t\t<true/>\n\t\t\t\t\t<key>INIntentParameterCombinationTitle</key>\n\t\t\t\t\t<string>Create product ${name}</string>\n\t\t\t\t\t<key>INIntentParameterCombinationTitleID</key>\n\t\t\t\t\t<string>22je0c</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<key>INIntentParameters</key>\n\t\t\t<array>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>INIntentParameterDisplayPriority</key>\n\t\t\t\t\t<integer>1</integer>\n\t\t\t\t\t<key>INIntentParameterName</key>\n\t\t\t\t\t<string>name</string>\n\t\t\t\t\t<key>INIntentParameterSupportsMultipleValues</key>\n\t\t\t\t\t<false/>\n\t\t\t\t\t<key>INIntentParameterTag</key>\n\t\t\t\t\t<integer>1</integer>\n\t\t\t\t\t<key>INIntentParameterType</key>\n\t\t\t\t\t<string>String</string>\n\t\t\t\t</dict>\n\t\t\t</array>\n\t\t\t<key>INIntentResponse</key>\n\t\t\t<dict>\n\t\t\t\t<key>INIntentResponseCodes</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>INIntentResponseCodeFormatString</key>\n\t\t\t\t\t\t<string></string>\n\t\t\t\t\t\t<key>INIntentResponseCodeFormatStringID</key>\n\t\t\t\t\t\t<string>k1fRYc</string>\n\t\t\t\t\t\t<key>INIntentResponseCodeName</key>\n\t\t\t\t\t\t<string>failure</string>\n\t\t\t\t\t\t<key>INIntentResponseCodeSuccess</key>\n\t\t\t\t\t\t<false/>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>INIntentResponseCodeFormatString</key>\n\t\t\t\t\t\t<string>${name} has been created.</string>\n\t\t\t\t\t\t<key>INIntentResponseCodeFormatStringID</key>\n\t\t\t\t\t\t<string>bEcv5p</string>\n\t\t\t\t\t\t<key>INIntentResponseCodeName</key>\n\t\t\t\t\t\t<string>success</string>\n\t\t\t\t\t\t<key>INIntentResponseCodeSuccess</key>\n\t\t\t\t\t\t<true/>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t\t<key>INIntentResponseLastParameterTag</key>\n\t\t\t\t<integer>1</integer>\n\t\t\t\t<key>INIntentResponseParameters</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>INIntentResponseParameterDisplayPriority</key>\n\t\t\t\t\t\t<integer>1</integer>\n\t\t\t\t\t\t<key>INIntentResponseParameterName</key>\n\t\t\t\t\t\t<string>name</string>\n\t\t\t\t\t\t<key>INIntentResponseParameterSupportsMultipleValues</key>\n\t\t\t\t\t\t<false/>\n\t\t\t\t\t\t<key>INIntentResponseParameterTag</key>\n\t\t\t\t\t\t<integer>1</integer>\n\t\t\t\t\t\t<key>INIntentResponseParameterType</key>\n\t\t\t\t\t\t<string>String</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>INIntentRestrictions</key>\n\t\t\t<integer>0</integer>\n\t\t\t<key>INIntentTitle</key>\n\t\t\t<string>Create Product</string>\n\t\t\t<key>INIntentTitleID</key>\n\t\t\t<string>WZoO6d</string>\n\t\t\t<key>INIntentType</key>\n\t\t\t<string>Custom</string>\n\t\t\t<key>INIntentUserConfirmationRequired</key>\n\t\t\t<false/>\n\t\t\t<key>INIntentVerb</key>\n\t\t\t<string>Create</string>\n\t\t</dict>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "App/ExtensionIntents/InterfaceBinding.swift",
    "content": "//\n//  InterfaceBinding.swift\n//  ExtensionIntents\n//\n//  Created by Cassius Pacheco on 4/1/19.\n//  Copyright © 2019 Cassius Pacheco. All rights reserved.\n//\n\nimport Foundation\nimport Data\nimport Persistence\nimport NetworkServices\n\n// This is a separated file from App's because this usage is much simpler.\n// Note that the usage of the DependencyContainer framework is optional for\n// this framework since it shouldn't do much and shouldn't perform many operations.\nextension Persistence: CacheInterface {}\n\nextension UserDefaults: UserDefaultsInterface {}\n\nextension ProductService: ProductServiceInterface {}\n"
  },
  {
    "path": "App/ExtensionIntents/NSUserActivity+IntentData.swift",
    "content": "//\n//  NSUserActivity+IntentData.swift\n//  ExtensionIntents\n//\n//  Created by Cassius Pacheco on 4/1/19.\n//  Copyright © 2019 Cassius Pacheco. All rights reserved.\n//\n\nimport Foundation\nimport MobileCoreServices\n\n#if canImport(CoreSpotlight)\nimport CoreSpotlight\nimport UIKit\n#endif\n\nextension NSUserActivity {\n    public enum ActivityKeys: String {\n        case productName\n    }\n\n    public static let createProductActivityType = \"com.cassiuspacheco.ExtensionIntents.createProduct\"\n\n    public static var createProductActivity: NSUserActivity {\n        let userActivity = NSUserActivity(activityType: NSUserActivity.createProductActivityType)\n\n        userActivity.title = \"Create a product\"\n        userActivity.isEligibleForPrediction = true\n\n        #if canImport(CoreSpotlight)\n        let attributes = CSSearchableItemAttributeSet(itemContentType: kUTTypeContent as String)\n\n        attributes.keywords = [\"Create\", \"Product\"]\n        attributes.displayName = \"Create a product\"\n        attributes.contentDescription = \"Create a product\"\n\n        userActivity.contentAttributeSet = attributes\n        #endif\n\n        userActivity.suggestedInvocationPhrase = \"Create a product\"\n        return userActivity\n    }\n}\n"
  },
  {
    "path": "App/Features/Detail/Coordinator/DetailCoordinator.swift",
    "content": "//\n//  DetailCoordinator.swift\n//  App\n//\n//  Created by Cassius Pacheco on 25/7/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport UIKit\nimport Foundation\nimport DependencyContainer\n\nprotocol DetailCoordinatorInterface: Coordinator, DetailCoordinatorDelegate {\n    var navigationController: UINavigationController? { get set }\n}\n\nfinal class DetailCoordinator: DetailCoordinatorInterface {\n    let container: DependencyContainer\n    var navigationController: UINavigationController?\n    \n    init(container: DependencyContainer) {\n        self.container = container\n    }\n    \n    func start() {\n        var viewModel = container.resolve(DetailViewModelInterface.self)\n        let viewController = DetailViewController(viewModel: viewModel)\n        viewModel.coordinator = self\n        \n        if let navigation = navigationController {\n            navigation.pushViewController(viewController, animated: true)\n        } else {\n            // You can either handle the dismissal here or forward the event to the viewModel\n            // or even handle the button creation in the viewController itself.\n            let dismissButton = UIBarButtonItem(title: \"Dismiss\", style: .plain, target: self, action: #selector(dismissButtonTapped))\n            let navigation = UINavigationController(rootViewController: viewController)\n            viewController.navigationItem.leftBarButtonItem = dismissButton\n            navigationController = navigation\n            \n            let window = container.resolve(UIWindow.self)\n            window.rootViewController?.present(navigation, animated: true)\n        }\n    }\n    \n    @objc\n    private func dismissButtonTapped() {\n        navigationController?.dismiss(animated: true)\n    }\n}\n\nextension DetailCoordinator {\n    // MARK: - DetailCoordinatorDelegate methods\n\n    var siriShortcutCoordinator: SiriShortcutCoordinatorInterface {\n        return container.resolve(AppCoordinatorInterface.self).siriShortcutCoordinator\n    }\n}\n"
  },
  {
    "path": "App/Features/Detail/ViewControllers/DetailViewController.swift",
    "content": "//\n//  DetailViewController.swift\n//  DependencyContainer\n//\n//  Created by Cassius Pacheco on 7/7/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport Foundation\nimport UIKit\nimport IntentsUI\nimport ExtensionIntents\n\nfinal class DetailViewController: UIViewController {\n    @IBOutlet\n    private var textField: UITextField!\n    private var viewModel: DetailViewModelInterface\n    \n    // MARK: - Init methods\n    \n    init(viewModel: DetailViewModelInterface) {\n        self.viewModel = viewModel\n        super.init(nibName: nil, bundle: nil)\n        self.viewModel.delegate = self\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    deinit {\n        print(\"DetailViewController has been deallocated\")\n    }\n    \n    // MARK: - View life cycle\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        createAddToSiriButton()\n        textField.addTarget(self, action: #selector(textFieldCharacterDidChange), for: .editingChanged)\n    }\n    \n    // MARK: - Action\n\n    @IBAction\n    private func createButtonTouchUpInside() {\n        viewModel.createButtonTouchUpInside()\n    }\n    \n    @IBAction\n    private func printAllButtonTouchUpInside() {\n        viewModel.printAllButtonTouchUpInside()\n    }\n    \n    @objc\n    private func textFieldCharacterDidChange() {\n        viewModel.textFieldInput = textField.text ?? \"\"\n    }\n\n    private func createAddToSiriButton() {\n        // Note that this is a useless intent. The idea is just to show the concept working.\n        let intent = CreateProductIntent()\n        intent.name = \"Test\"\n        let shortcutButton = INUIAddVoiceShortcutButton(style: .whiteOutline)\n        shortcutButton.shortcut = INShortcut(intent: intent)\n        shortcutButton.delegate = viewModel.shortcutButtonDelegate\n\n        navigationItem.setRightBarButton(UIBarButtonItem(customView: shortcutButton), animated: true)\n    }\n}\n\nextension DetailViewController: DetailViewModelDelegate {\n    func productCreated() {\n        textField.text = nil\n    }\n}\n"
  },
  {
    "path": "App/Features/Detail/ViewControllers/DetailViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"14109\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"14088\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"DetailViewController\" customModule=\"Project\" customModuleProvider=\"target\">\n            <connections>\n                <outlet property=\"textField\" destination=\"fhz-2D-nZ2\" id=\"dap-n7-8me\"/>\n                <outlet property=\"view\" destination=\"iN0-l3-epB\" id=\"Qco-iu-q3T\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"iN0-l3-epB\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <textField opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" placeholder=\"Type in a product name\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"fhz-2D-nZ2\">\n                    <rect key=\"frame\" x=\"16\" y=\"84\" width=\"343\" height=\"30\"/>\n                    <nil key=\"textColor\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                    <textInputTraits key=\"textInputTraits\"/>\n                </textField>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vvn-sp-7JP\">\n                    <rect key=\"frame\" x=\"164\" y=\"146\" width=\"46\" height=\"30\"/>\n                    <state key=\"normal\" title=\"Create\"/>\n                    <connections>\n                        <action selector=\"createButtonTouchUpInside\" destination=\"-1\" eventType=\"touchUpInside\" id=\"Yox-OF-X05\"/>\n                    </connections>\n                </button>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"yt5-nc-PtU\">\n                    <rect key=\"frame\" x=\"161\" y=\"208\" width=\"53\" height=\"30\"/>\n                    <state key=\"normal\" title=\"Print All\"/>\n                    <connections>\n                        <action selector=\"printAllButtonTouchUpInside\" destination=\"-1\" eventType=\"touchUpInside\" id=\"WcN-Wf-9uO\"/>\n                    </connections>\n                </button>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"0.61526150170000005\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n            <constraints>\n                <constraint firstItem=\"vvn-sp-7JP\" firstAttribute=\"centerX\" secondItem=\"vUN-kp-3ea\" secondAttribute=\"centerX\" id=\"701-o0-AcV\"/>\n                <constraint firstItem=\"yt5-nc-PtU\" firstAttribute=\"centerX\" secondItem=\"vUN-kp-3ea\" secondAttribute=\"centerX\" id=\"ANr-eJ-9yO\"/>\n                <constraint firstItem=\"vUN-kp-3ea\" firstAttribute=\"trailing\" secondItem=\"fhz-2D-nZ2\" secondAttribute=\"trailing\" constant=\"16\" id=\"ERL-js-bnf\"/>\n                <constraint firstItem=\"fhz-2D-nZ2\" firstAttribute=\"top\" secondItem=\"vUN-kp-3ea\" secondAttribute=\"top\" constant=\"64\" id=\"FoG-nh-NPA\"/>\n                <constraint firstItem=\"vvn-sp-7JP\" firstAttribute=\"top\" secondItem=\"fhz-2D-nZ2\" secondAttribute=\"bottom\" constant=\"32\" id=\"GvG-0g-KU4\"/>\n                <constraint firstItem=\"fhz-2D-nZ2\" firstAttribute=\"leading\" secondItem=\"vUN-kp-3ea\" secondAttribute=\"leading\" constant=\"16\" id=\"MG8-fU-v4g\"/>\n                <constraint firstItem=\"yt5-nc-PtU\" firstAttribute=\"top\" secondItem=\"vvn-sp-7JP\" secondAttribute=\"bottom\" constant=\"32\" id=\"YzQ-BR-IfX\"/>\n            </constraints>\n            <viewLayoutGuide key=\"safeArea\" id=\"vUN-kp-3ea\"/>\n            <point key=\"canvasLocation\" x=\"33.5\" y=\"53.5\"/>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "App/Features/Detail/ViewModel/DetailViewModel.swift",
    "content": "//\n//  DetailViewModel.swift\n//  Project\n//\n//  Created by Cassius Pacheco on 7/7/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport Foundation\nimport Domain\n\nprotocol DetailCoordinatorDelegate: class {\n    // Define other routes from the detail screen.\n    // for example: func presentCreationConfirmationModal()\n\n    // The Siri Shortcut coordinator should be passed along to be used as the button's delegate.\n    var siriShortcutCoordinator: SiriShortcutCoordinatorInterface { get }\n}\n\nprotocol DetailViewModelInterface {\n    var coordinator: DetailCoordinatorDelegate? { get set }\n    var delegate: DetailViewModelDelegate? { get set }\n    var textFieldInput: String { get set }\n    var shortcutButtonDelegate: SiriShortcutCoordinatorInterface? { get }\n\n    func createButtonTouchUpInside()\n    func printAllButtonTouchUpInside()\n}\n\nprotocol DetailViewModelDelegate: NSObjectProtocol {\n    func productCreated()\n}\n\nfinal class DetailViewModel: DetailViewModelInterface {\n    private let productsUseCase: ProductsUseCaseInterface\n    private let createProductUseCase: CreateProductUseCaseInterface\n    \n    weak var coordinator: DetailCoordinatorDelegate?\n    weak var delegate: DetailViewModelDelegate?\n    \n    var textFieldInput: String = \"\"\n\n    var shortcutButtonDelegate: SiriShortcutCoordinatorInterface? {\n        return coordinator?.siriShortcutCoordinator\n    }\n    \n    init(productsUseCase: ProductsUseCaseInterface, createProductUseCase: CreateProductUseCaseInterface) {\n        self.productsUseCase = productsUseCase\n        self.createProductUseCase = createProductUseCase\n    }\n    \n    func createButtonTouchUpInside() {\n        guard !textFieldInput.isEmpty else { return }\n        createProductUseCase.execute(textFieldInput)\n        delegate?.productCreated()\n    }\n    \n    func printAllButtonTouchUpInside() {\n        print(\"\\n--Printing all:\\n\")\n        \n        productsUseCase.execute().forEach { (product) in\n            print(product.name)\n        }\n        \n        print(\"\\n--\")\n    }\n}\n"
  },
  {
    "path": "App/Features/Main/Coordinator/MainCoordinator.swift",
    "content": "//\n//  MainCoordinator.swift\n//  App\n//\n//  Created by Cassius Pacheco on 25/7/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport UIKit\nimport Foundation\nimport DependencyContainer\n\nprotocol MainCoordinatorInterface: Coordinator, MainCoordinatorDelegate {\n    var navigationController: UINavigationController? { get set }\n}\n\nenum MainChild {\n    case detail\n}\n\nfinal class MainCoordinator: MainCoordinatorInterface {\n    let container: DependencyContainer\n    var children = [MainChild: Coordinator]()\n    var navigationController: UINavigationController?\n    \n    init(container: DependencyContainer) {\n        self.container = container\n    }\n    \n    func start() {\n        // not necessary since this is the initial controller of the app\n    }\n}\n\nextension MainCoordinator {\n    \n    func pushDetailViewController() {\n        // if a `navigationController` isn't assigned to the coordinator it will create\n        // one and present the screen as a modal\n        let detailCoordinator = self.container.resolve(DetailCoordinatorInterface.self)\n        detailCoordinator.navigationController = self.navigationController\n        self.children[.detail] = detailCoordinator\n        detailCoordinator.start()\n    }\n}\n"
  },
  {
    "path": "App/Features/Main/ViewControllers/MainViewController.swift",
    "content": "//\n//  MainViewController.swift\n//  DependencyContainer\n//\n//  Created by Cassius Pacheco on 7/7/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport UIKit\nimport DependencyContainer\n\nfinal class MainViewController: UIViewController {\n    let viewModel: MainViewModelInterface\n    \n    // MARK: - Init methods\n    \n    init(viewModel: MainViewModelInterface) {\n        self.viewModel = viewModel\n        super.init(nibName: nil, bundle: nil)\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    // MARK: - Action methods\n    \n    @IBAction\n    private func detailViewControllerButtonTouchUpInside() {\n        viewModel.detailViewControllerButtonTouchUpInside()\n    }\n}\n"
  },
  {
    "path": "App/Features/Main/ViewControllers/MainViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"14109\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"14088\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"MainViewController\" customModule=\"Project\" customModuleProvider=\"target\">\n            <connections>\n                <outlet property=\"view\" destination=\"iN0-l3-epB\" id=\"Muv-BB-qS3\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"iN0-l3-epB\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Pro-Wp-SMQ\">\n                    <rect key=\"frame\" x=\"148\" y=\"328.5\" width=\"78\" height=\"30\"/>\n                    <state key=\"normal\" title=\"Push Detail\"/>\n                    <connections>\n                        <action selector=\"detailViewControllerButtonTouchUpInside\" destination=\"-1\" eventType=\"touchUpInside\" id=\"45F-BL-1Vt\"/>\n                    </connections>\n                </button>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <constraints>\n                <constraint firstItem=\"Pro-Wp-SMQ\" firstAttribute=\"centerX\" secondItem=\"vUN-kp-3ea\" secondAttribute=\"centerX\" id=\"33w-6C-hGt\"/>\n                <constraint firstItem=\"Pro-Wp-SMQ\" firstAttribute=\"centerY\" secondItem=\"vUN-kp-3ea\" secondAttribute=\"centerY\" id=\"R9v-KN-uye\"/>\n            </constraints>\n            <viewLayoutGuide key=\"safeArea\" id=\"vUN-kp-3ea\"/>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "App/Features/Main/ViewModel/MainViewModel.swift",
    "content": "//\n//  MainViewModel.swift\n//  App\n//\n//  Created by Cassius Pacheco on 25/7/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport Foundation\n\nprotocol MainCoordinatorDelegate: class {\n    func pushDetailViewController()\n}\n\nprotocol MainViewModelInterface {\n    var coordinator: MainCoordinatorDelegate? { get set }\n    func detailViewControllerButtonTouchUpInside()\n}\n\nfinal class MainViewModel: MainViewModelInterface {\n    weak var coordinator: MainCoordinatorDelegate?\n    \n    func detailViewControllerButtonTouchUpInside() {\n        coordinator?.pushDetailViewController()\n    }\n}\n"
  },
  {
    "path": "App/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>NSUserActivityTypes</key>\n\t<array>\n\t\t<string>CreateProductIntent</string>\n\t\t<string>com.cassiuspacheco.ExtensionIntents.createProduct</string>\n\t</array>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "App/Plugins/Dependency Injection/DependencyGraph.swift",
    "content": "//\n//  DependencyGraph.swift\n//  Project\n//\n//  Created by Cassius Pacheco on 7/7/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport UIKit\nimport Foundation\nimport DependencyContainer\nimport Entities\nimport Domain\nimport Data\nimport Persistence\nimport NetworkServices\n\nfinal class DependencyGraph {\n    let container: DependencyContainer\n    \n    init(container: DependencyContainer) {\n        self.container = container\n    }\n    \n    func setupWithMainWindow(_ window: UIWindow) {\n        setupAppDelegate(window)\n        setupCoordinators()\n        setupServices()\n        setupPersistence()\n        setupRepositories()\n        setupUseCases()\n        setupViewModels()\n    }\n    \n    private func setupAppDelegate(_ window: UIWindow) {\n        container.registerSingleton(UIWindow.self) { di in\n            return window\n        }\n    }\n    \n    private func setupCoordinators() {\n        container.registerSingleton(AppCoordinatorInterface.self) { di in\n            return AppCoordinator(container: di)\n        }\n        \n        container.register(MainCoordinatorInterface.self) { di in\n            return MainCoordinator(container: di)\n        }\n        \n        container.register(DetailCoordinatorInterface.self) { di in\n            return DetailCoordinator(container: di)\n        }\n    }\n    \n    private func setupServices() {\n        container.register(ProductServiceInterface.self) { di in\n            return ProductService()\n        }\n    }\n    \n    private func setupPersistence() {\n        container.registerSingleton(CacheInterface.self) { _ in\n            return Persistence(defaults: UserDefaults(suiteName: Persistence.appGroup)!)\n        }\n    }\n    \n    private func setupRepositories() {\n        container.register(ProductRepositoryInterface.self) { di in\n            return ProductRepository(cache: di.resolve(CacheInterface.self),\n                                     service: di.resolve(ProductServiceInterface.self))\n        }\n    }\n    \n    private func setupUseCases() {\n        container.register(ProductsUseCaseInterface.self) { di in\n            return ProductsUseCase(repository: di.resolve(ProductRepositoryInterface.self))\n        }\n        \n        container.register(CreateProductUseCaseInterface.self) { di in\n            return CreateProductUseCase(repository: di.resolve(ProductRepositoryInterface.self))\n        }\n    }\n    \n    private func setupViewModels() {\n        container.register(MainViewModelInterface.self) { _ in\n            return MainViewModel()\n        }\n        \n        container.register(DetailViewModelInterface.self) { di in\n            return DetailViewModel(productsUseCase: di.resolve(ProductsUseCaseInterface.self),\n                                   createProductUseCase: di.resolve(CreateProductUseCaseInterface.self))\n        }\n    }\n}\n"
  },
  {
    "path": "App/Plugins/Dependency Injection/InterfaceBinding.swift",
    "content": "//\n//  InterfaceBinding.swift\n//  App\n//\n//  Created by Cassius Pacheco on 16/12/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport Foundation\nimport Persistence\nimport NetworkServices\nimport Data\nimport ExtensionIntents\n\n// Put all interface binding that are not contained in the `ExtensionIntents` here.\n"
  },
  {
    "path": "AppTests/AppTests.swift",
    "content": "//\n//  AppTests.swift\n//  AppTests\n//\n//  Created by Cassius Pacheco on 7/7/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport XCTest\n@testable import App\n\nclass AppTests: XCTestCase {\n    \n    override func setUp() {\n        super.setUp()\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n    \n    override func tearDown() {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n        super.tearDown()\n    }\n    \n    func testExample() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n    \n    func testPerformanceExample() {\n        // This is an example of a performance test case.\n        self.measure {\n            // Put the code you want to measure the time of here.\n        }\n    }\n    \n}\n"
  },
  {
    "path": "AppTests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Data/.gitignore",
    "content": ".DS_Store\n/.build\n/Packages\n/*.xcodeproj\nxcuserdata/\n"
  },
  {
    "path": "Data/Package.swift",
    "content": "// swift-tools-version:5.1\n// The swift-tools-version declares the minimum version of Swift required to build this package.\n\nimport PackageDescription\n\nlet package = Package(\n    name: \"Data\",\n    products: [\n        .library(\n            name: \"Data\",\n            targets: [\"Data\"]),\n    ],\n    dependencies: [\n        .package(path: \"../Entities\")\n    ],\n    targets: [\n        .target(\n            name: \"Data\",\n            dependencies: [\"Entities\"]),\n        .testTarget(\n            name: \"DataTests\",\n            dependencies: [\"Data\", \"Entities\"]),\n    ]\n)\n"
  },
  {
    "path": "Data/README.md",
    "content": "# Data\n\nA description of this package.\n"
  },
  {
    "path": "Data/Sources/Data/CacheInterface.swift",
    "content": "//\n//  CacheInterface.swift\n//  Data\n//\n//  Created by Cassius Pacheco on 7/7/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport Foundation\n\npublic protocol CacheInterface {\n    func removeValue(for key: String)\n    func save<Value>(_ value: Value?, for key: String)\n    func value<Value>(for key: String) -> Value?\n    func bool(for key: String) -> Bool\n    func saveEncoded<Value: Codable>(_ value: Value?, for key: String)\n    func decodedValue<Value: Codable>(for key: String) -> Value?\n}\n\npublic extension CacheInterface {\n    static var appGroup: String {\n        return \"group.com.cassiuspacheco.Swift-CleanArchitecture\"\n    }\n}\n"
  },
  {
    "path": "Data/Sources/Data/Product/ProductRepository.swift",
    "content": "//\n//  ProductRepository.swift\n//  Data\n//\n//  Created by Cassius Pacheco on 7/7/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport Foundation\nimport Entities\n\npublic protocol ProductRepositoryInterface {\n    var products: [Product] { get }\n    func create(_ product: Product)\n}\n\npublic class ProductRepository: ProductRepositoryInterface {\n    struct keys {\n        static let products = \"products\"\n    }\n    \n    private let cache: CacheInterface\n    private let service: ProductServiceInterface\n    \n    public init(cache: CacheInterface, service: ProductServiceInterface) {\n        self.cache = cache\n        self.service = service\n    }\n    \n    public var products: [Product] {\n        return cache.decodedValue(for: keys.products) ?? []\n    }\n    \n    public func create(_ product: Product) {\n        service.create(product)\n        cache.saveEncoded(products + [product], for: keys.products)\n    }\n}\n"
  },
  {
    "path": "Data/Sources/Data/Product/ProductServiceInterface.swift",
    "content": "//\n//  ProductServiceInterface.swift\n//  Data\n//\n//  Created by Cassius Pacheco on 7/7/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport Foundation\nimport Entities\n\npublic protocol ProductServiceInterface: ServiceInterface {\n    // Some service code to fetch products or something\n    func create(_ product: Product)\n}\n"
  },
  {
    "path": "Data/Sources/Data/ServiceInterface.swift",
    "content": "//\n//  ServiceInterface.swift\n//  Data\n//\n//  Created by Cassius Pacheco on 7/7/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport Foundation\n\npublic protocol ServiceInterface {\n    \n    // Some network base methods\n}\n"
  },
  {
    "path": "Data/Tests/DataTests/DataTests.swift",
    "content": "import XCTest\n@testable import Data\n\nfinal class DataTests: XCTestCase {}\n"
  },
  {
    "path": "Domain/.gitignore",
    "content": ".DS_Store\n/.build\n/Packages\n/*.xcodeproj\nxcuserdata/\n"
  },
  {
    "path": "Domain/Package.swift",
    "content": "// swift-tools-version:5.1\n// The swift-tools-version declares the minimum version of Swift required to build this package.\n\nimport PackageDescription\n\nlet package = Package(\n    name: \"Domain\",\n    products: [\n        .library(\n            name: \"Domain\",\n            targets: [\"Domain\"]),\n    ],\n    dependencies: [\n        .package(path: \"../Entities\"),\n        .package(path: \"../Data\")\n    ],\n    targets: [\n        .target(\n            name: \"Domain\",\n            dependencies: [\"Entities\", \"Data\"]),\n        .testTarget(\n            name: \"DomainTests\",\n            dependencies: [\"Domain\", \"Entities\", \"Data\"]),\n    ]\n)\n"
  },
  {
    "path": "Domain/README.md",
    "content": "# Domain\n\nA description of this package.\n"
  },
  {
    "path": "Domain/Sources/Domain/Product/CreateProductUseCase.swift",
    "content": "//\n//  CreateProductUseCase.swift\n//  Domain\n//\n//  Created by Cassius Pacheco on 7/7/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport Foundation\nimport Entities\nimport Data\n\npublic protocol CreateProductUseCaseInterface {\n    @discardableResult\n    func execute(_ input: String) -> Product\n}\n\npublic class CreateProductUseCase: UseCase<String, Product>, CreateProductUseCaseInterface {\n    private let repository: ProductRepositoryInterface\n    \n    public init(repository: ProductRepositoryInterface) {\n        self.repository = repository\n    }\n    \n    @discardableResult\n    override public func execute(_ input: String) -> Product {\n        let product = Product(name: input)\n        repository.create(product)\n        return product\n    }\n}\n"
  },
  {
    "path": "Domain/Sources/Domain/Product/ProductsUseCase.swift",
    "content": "//\n//  ProductsUseCase.swift\n//  Domain\n//\n//  Created by Cassius Pacheco on 7/7/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport Foundation\nimport Entities\nimport Data\n\npublic protocol ProductsUseCaseInterface {\n    @discardableResult\n    func execute() -> [Product]\n}\n\npublic class ProductsUseCase: VoidUseCase<[Product]>, ProductsUseCaseInterface {\n    private let repository: ProductRepositoryInterface\n    \n    public init(repository: ProductRepositoryInterface) {\n        self.repository = repository\n    }\n    \n    @discardableResult\n    override public func execute() -> [Product] {\n        return repository.products\n    }\n}\n"
  },
  {
    "path": "Domain/Sources/Domain/UseCase.swift",
    "content": "//\n//  UseCase.swift\n//  Tests\n//\n//  Created by Cassius Pacheco on 7/7/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport Foundation\nimport UIKit\n\npublic class VoidUseCase<Output> {\n    \n    @discardableResult\n    public func execute() -> Output {\n        \n        fatalError(\"this should be overridden\")\n    }\n}\n\npublic class UseCase<Input, Output> {\n    \n    @discardableResult\n    public func execute(_ input: Input) -> Output {\n        \n        fatalError(\"this should be overridden\")\n    }\n}\n"
  },
  {
    "path": "Domain/Tests/DomainTests/DomainTests.swift",
    "content": "//\n//  DomainTests.swift\n//  DomainTests\n//\n//  Created by Cassius Pacheco on 7/7/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport XCTest\n@testable import Domain\n\nclass DomainTests: XCTestCase {\n    \n    override func setUp() {\n        super.setUp()\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n    \n    override func tearDown() {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n        super.tearDown()\n    }\n    \n    func testExample() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n    \n    func testPerformanceExample() {\n        // This is an example of a performance test case.\n        self.measure {\n            // Put the code you want to measure the time of here.\n        }\n    }\n    \n}\n"
  },
  {
    "path": "Entities/.gitignore",
    "content": ".DS_Store\n/.build\n/Packages\n/*.xcodeproj\nxcuserdata/\n"
  },
  {
    "path": "Entities/Package.swift",
    "content": "// swift-tools-version:5.1\n// The swift-tools-version declares the minimum version of Swift required to build this package.\n\nimport PackageDescription\n\nlet package = Package(\n    name: \"Entities\",\n    products: [\n        .library(\n            name: \"Entities\",\n            targets: [\"Entities\"]),\n    ],\n    dependencies: [],\n    targets: [\n        .target(\n            name: \"Entities\",\n            dependencies: []),\n        .testTarget(\n            name: \"EntitiesTests\",\n            dependencies: [\"Entities\"]),\n    ]\n)\n"
  },
  {
    "path": "Entities/README.md",
    "content": "# Entities\n\nA description of this package.\n"
  },
  {
    "path": "Entities/Sources/Entities/Product.swift",
    "content": "//\n//  Product.swift\n//  DependencyContainer\n//\n//  Created by Cassius Pacheco on 7/7/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport Foundation\n\npublic struct Product: Codable {\n    public let name: String\n    \n    public init(name: String) {\n        self.name = name\n    }\n}\n"
  },
  {
    "path": "Entities/Tests/EntitiesTests/EntitiesTests.swift",
    "content": "import XCTest\n@testable import Entities\n\nfinal class EntitiesTests: XCTestCase {}\n"
  },
  {
    "path": "Plugins/NetworkServices/.gitignore",
    "content": ".DS_Store\n/.build\n/Packages\n/*.xcodeproj\nxcuserdata/\n"
  },
  {
    "path": "Plugins/NetworkServices/Package.swift",
    "content": "// swift-tools-version:5.1\n// The swift-tools-version declares the minimum version of Swift required to build this package.\n\nimport PackageDescription\n\nlet package = Package(\n    name: \"NetworkServices\",\n    products: [\n        .library(\n            name: \"NetworkServices\",\n            targets: [\"NetworkServices\"]),\n    ],\n    dependencies: [\n    .package(path: \"../../Entities\")\n    ],\n    targets: [\n        .target(\n            name: \"NetworkServices\",\n            dependencies: [\"Entities\"]),\n        .testTarget(\n            name: \"NetworkServicesTests\",\n            dependencies: [\"NetworkServices\", \"Entities\"]),\n    ]\n)\n"
  },
  {
    "path": "Plugins/NetworkServices/README.md",
    "content": "# NetworkServices\n\nA description of this package.\n"
  },
  {
    "path": "Plugins/NetworkServices/Sources/NetworkServices/ProductService.swift",
    "content": "//\n//  ProductService.swift\n//  NetworkServices\n//\n//  Created by Cassius Pacheco on 7/7/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport Foundation\nimport Entities\n\npublic final class ProductService {\n    // implement the methods defined in the protocol in the Data Layer\n    \n    public init() {}\n\n    public func create(_ product: Product) {\n        // hit API to create the product\n    }\n}\n"
  },
  {
    "path": "Plugins/NetworkServices/Tests/NetworkServicesTests/NetworkServicesTests.swift",
    "content": "//\n//  NetworkServicesTests.swift\n//  NetworkServicesTests\n//\n//  Created by Cassius Pacheco on 16/12/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport XCTest\n@testable import NetworkServices\n\nclass NetworkServicesTests: XCTestCase {\n\n    override func setUp() {\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n\n    override func tearDown() {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n    }\n\n    func testExample() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n\n    func testPerformanceExample() {\n        // This is an example of a performance test case.\n        self.measure {\n            // Put the code you want to measure the time of here.\n        }\n    }\n\n}\n"
  },
  {
    "path": "Plugins/Persistence/.gitignore",
    "content": ".DS_Store\n/.build\n/Packages\n/*.xcodeproj\nxcuserdata/\n"
  },
  {
    "path": "Plugins/Persistence/Package.swift",
    "content": "// swift-tools-version:5.1\n// The swift-tools-version declares the minimum version of Swift required to build this package.\n\nimport PackageDescription\n\nlet package = Package(\n    name: \"Persistence\",\n    products: [\n        .library(\n            name: \"Persistence\",\n            targets: [\"Persistence\"]),\n    ],\n    dependencies: [],\n    targets: [\n        .target(\n            name: \"Persistence\",\n            dependencies: []),\n        .testTarget(\n            name: \"PersistenceTests\",\n            dependencies: [\"Persistence\"]),\n    ]\n)\n"
  },
  {
    "path": "Plugins/Persistence/README.md",
    "content": "# Persistence\n\nA description of this package.\n"
  },
  {
    "path": "Plugins/Persistence/Sources/Persistence/Persistence.swift",
    "content": "//\n//  Persistence.swift\n//  Persistence\n//\n//  Created by Cassius Pacheco on 16/12/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport Foundation\n\npublic final class Persistence {\n    private lazy var queue: DispatchQueue = DispatchQueue(label: \"com.cassius.Persistence\", qos: .userInitiated, attributes: .concurrent)\n    private let defaults: UserDefaultsInterface\n    \n    public init(defaults: UserDefaultsInterface) {\n        self.defaults = defaults\n    }\n    \n    public func removeValue(for key: String) {\n        queue.async(flags: .barrier) {\n            self.defaults.removeObject(forKey: key)\n        }\n    }\n    \n    public func save<Value>(_ value: Value?, for key: String) {\n        queue.async(flags: .barrier) {\n            self.defaults.set(value, forKey: key)\n        }\n    }\n    \n    public func value<Value>(for key: String) -> Value? {\n        var value: Value?\n        \n        queue.sync {\n            // This ensures the `Any?` object returned is not `nil`\n            // otherwise casting a nil `Any?` into something else will\n            // return a `.some(nil)` result, which is different of `nil`.\n            if let object = self.defaults.object(forKey: key) {\n                value = object as? Value\n            }\n        }\n        \n        return value\n    }\n    \n    public func bool(for key: String) -> Bool {\n        var value: Bool = false\n        \n        queue.sync {\n            value = self.defaults.bool(forKey: key)\n        }\n        \n        return value\n    }\n    \n    public func saveEncoded<Value: Codable>(_ value: Value?, for key: String) {\n        queue.async(flags: .barrier) {\n            let data = try? JSONEncoder().encode(value)\n            self.defaults.set(data, forKey: key)\n        }\n    }\n    \n    public func decodedValue<Value: Codable>(for key: String) -> Value? {\n        var value: Value?\n        \n        queue.sync {\n            guard let data: Data = self.value(for: key) else { return }\n            value = try? JSONDecoder().decode(Value.self, from: data)\n        }\n        \n        return value\n    }\n}\n"
  },
  {
    "path": "Plugins/Persistence/Sources/Persistence/UserDefaultsInterface.swift",
    "content": "//\n//  UserDefaultsInterface.swift\n//  Persistence\n//\n//  Created by Cassius Pacheco on 16/12/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport Foundation\n\npublic protocol UserDefaultsInterface {\n    func integer(forKey defaultName: String) -> Int\n    func dictionary(forKey defaultName: String) -> [String: Any]?\n    func bool(forKey defaultName: String) -> Bool\n    func string(forKey defaultName: String) -> String?\n    func set(_ value: Any?, forKey defaultName: String)\n    func removeObject(forKey defaultName: String)\n    func object(forKey defaultName: String) -> Any?\n    func dictionaryRepresentation() -> [String: Any]\n    func array(forKey defaultName: String) -> [Any]?\n}\n"
  },
  {
    "path": "Plugins/Persistence/Tests/PersistenceTests/PersistenceTests.swift",
    "content": "//\n//  PersistenceTests.swift\n//  PersistenceTests\n//\n//  Created by Cassius Pacheco on 16/12/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport XCTest\n@testable import Persistence\n\nfinal class PersistenceTests: XCTestCase {\n    struct DummySerializableObject: Codable {\n        let name: String\n        let age: Int\n    }\n    \n    func data(forName name: String, age: Int) -> Data {\n        return try! JSONSerialization.data(withJSONObject: [\"name\": name, \"age\": age], options: [])\n    }\n    \n    func testWriteAndReadFoundationObject() {\n        let object = \"My Object\"\n        let key = \"test\"\n        let defaults = UserDefaultsMock()\n        let persistence = Persistence(defaults: defaults)\n        \n        XCTAssertNil(persistence.value(for: key))\n        \n        persistence.save(object, for: key)\n        \n        XCTAssertEqual(persistence.value(for: key), object)\n    }\n    \n    func testWriteAndReadSerializableObject() {\n        let object = DummySerializableObject(name: \"João\", age: 18)\n        let key = \"test\"\n        let defaults = UserDefaultsMock()\n        let persistence = Persistence(defaults: defaults)\n        \n        var returnedObject: DummySerializableObject? = persistence.decodedValue(for: key)\n        \n        XCTAssertNil(returnedObject)\n        \n        persistence.saveEncoded(object, for: key)\n        \n        returnedObject = persistence.decodedValue(for: key)\n        \n        XCTAssertEqual(returnedObject?.name, object.name)\n        XCTAssertEqual(returnedObject?.age, object.age)\n    }\n    \n    func testWriteAndReadSerializableObjectsArray() {\n        let object1 = DummySerializableObject(name: \"Jana\", age: 18)\n        let object2 = DummySerializableObject(name: \"Marcos\", age: 25)\n        let object3 = DummySerializableObject(name: \"Oprah\", age: 54)\n        let array = [object1, object2, object3]\n        \n        let key = \"test\"\n        let defaults = UserDefaultsMock()\n        let persistence = Persistence(defaults: defaults)\n        \n        var returnedObjects: [DummySerializableObject]? = persistence.decodedValue(for: key)\n        \n        XCTAssertNil(returnedObjects)\n        \n        persistence.saveEncoded(array, for: key)\n        \n        returnedObjects = persistence.decodedValue(for: key)\n        \n        XCTAssertEqual(returnedObjects!.first!.name, object1.name)\n        XCTAssertEqual(returnedObjects!.first!.age, object1.age)\n        \n        XCTAssertEqual(returnedObjects![2].name, object3.name)\n        XCTAssertEqual(returnedObjects![2].age, object3.age)\n    }\n    \n    func testBoolForKey() {\n        let key = \"test\"\n        let defaults = UserDefaultsMock()\n        defaults.mockDictionary[key] = true\n        \n        let persistence = Persistence(defaults: defaults)\n        \n        XCTAssertEqual(defaults.bool(forKey: key), true)\n        \n        persistence.save(false, for: key)\n        \n        XCTAssertEqual(defaults.bool(forKey: key), true)\n        \n        persistence.removeValue(for: key)\n        \n        XCTAssertNil(persistence.value(for: key), \"read value from persistence to ensure the barrier queue has finished removing the value\")\n    }\n    \n    func testRemoveValue() {\n        let key = \"test\"\n        let defaults = UserDefaultsMock()\n        defaults.mockDictionary[key] = \"abc\"\n        \n        let persistence = Persistence(defaults: defaults)\n        \n        XCTAssertEqual(defaults.string(forKey: key), \"abc\")\n        XCTAssertEqual(defaults.object(forKey: key) as? String, \"abc\")\n        \n        persistence.removeValue(for: key)\n        \n        XCTAssertNil(persistence.value(for: key), \"read value from persistence to ensure the barrier queue has finished removing the value\")\n    }\n}\n"
  },
  {
    "path": "Plugins/Persistence/Tests/PersistenceTests/UserDefaultsMock.swift",
    "content": "//\n//  UserDefaultsMock.swift\n//  PersistenceTests\n//\n//  Created by Cassius Pacheco on 16/12/18.\n//  Copyright © 2018 Cassius Pacheco. All rights reserved.\n//\n\nimport Foundation\nimport XCTest\n@testable import Persistence\n\nclass UserDefaultsMock: UserDefaultsInterface {\n    var savedKeys = [String]()\n    var mockDictionary = [String: Any]()\n    \n    func integer(forKey defaultName: String) -> Int {\n        return value(for: defaultName) ?? 0\n    }\n    \n    func dictionary(forKey defaultName: String) -> [String : Any]? {\n        return value(for: defaultName)\n    }\n    \n    func bool(forKey defaultName: String) -> Bool {\n        return value(for: defaultName) ?? false\n    }\n    \n    func string(forKey defaultName: String) -> String? {\n        return value(for: defaultName)\n    }\n    \n    func set(_ value: Any?, forKey defaultName: String) {\n        savedKeys.append(defaultName)\n        mockDictionary[defaultName] = value\n    }\n    \n    func removeObject(forKey defaultName: String) {\n        mockDictionary.removeValue(forKey: defaultName)\n    }\n    \n    func object(forKey defaultName: String) -> Any? {\n        return value(for: defaultName)\n    }\n    \n    func dictionaryRepresentation() -> [String : Any] {\n        return mockDictionary\n    }\n    \n    func array(forKey defaultName: String) -> [Any]? {\n        return value(for: defaultName)\n    }\n    \n    // This wrapper ensures the `Any?` object returned is not `nil`\n    // otherwise casting a nil `Any?` into something else will\n    // return a `.some(nil)` result, which is different of `nil`.\n    private func value<Value>(for key: String) -> Value? {\n        guard let object = mockDictionary[key] else { return nil }\n        return object as? Value\n    }\n}\n"
  },
  {
    "path": "README.md",
    "content": "# The Clean Architecture\n\nThis sample project is inspired on [The Clean Architecture](https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html) by Uncle Bob.\n\nIts main goal is to follow the [SOLID principles](https://en.wikipedia.org/wiki/SOLID) in order to keep the software well organised, testable, easy to maintain and more importantly easy to extend/change.\n\nAs explained in the posts above and in [the book](https://www.amazon.com/Clean-Architecture-Craftsmans-Software-Structure/dp/0134494164), databases, network clients and frameworks are abstracted in the upper layers (Entities, Data and Domain layers) and should not be imported/referenced into them, instead they should be injected in the App level as dependencies through the interfaces exposed by the upper layers.\n\n![graph](\nhttps://8thlight.com/blog/assets/posts/2012-08-13-the-clean-architecture/CleanArchitecture-8d1fe066e8f7fa9c7d8e84c1a6b0e2b74b2c670ff8052828f4a7e73fcbbc698c.jpg)\n\n## Modules\n\nIn this sample app we have the following modules/layers:\n\n### DependencyInjector\n\nFramework responsible for linking the Interfaces to the `Factories`. This should only the referenced/used in the `App Module`.\n\n### Entities\n\nTop level module. This should not have access to any other module in the system and must be the simplest possible.\n\n### Data\n\nResponsible for exposing a few Interfaces for external plugins implementations such as databases, memory caches, network, bluetooth, etc. This should not reference any concrete class related to these. It also contains the `Repositories` which are another abstraction for the use of the plugins mentioned above. This module can only access `Entities` layer, nothing else.\n\n### Domain\n\nThis module exposes `UseCases` to process business logic using the [Command Pattern](https://en.wikipedia.org/wiki/Command_pattern). The use cases must be simple and have only one responsibility. They usually communicate with `Repositories` from the `Data layer` through Interfaces. Ideally `UseCases` would return `DataStructures` instead of `Entities` to the lower layers, since these could contain UI-specific data which isn't part of the `Entities` layer.\n\n### App\n\nIn this layer we have all the code that's specific to the platform of development. In this sample project the platform is iOS, furthermore a concrete implementation of the `CacheInterface` exposed by the `Data layer` was implemented in the `App layer` using `UserDefaults` as the persistence choice, for example.\nThis layer may have `ViewModels`, `Coordinators`, `ViewControllers`, `Views`, third party frameworks and, finally, is also responsible for setting up the dependency graph for the project by linking all the interfaces to their respective concrete classes.\n\n## Tests\n\nEven though I haven't written any tests yet, the whole project is completely testable, since all layers are being isolated by interfaces, as suggested by the SOLID principles.\n\n## Getting Started\n\n### Prerequisites\n- Xcode 11.3.1\n- iOS 12\n- Swift 5.1\n\n### Installing\nThe project uses Swift Package Manager for dependency management. Just open `SwiftCleanArchitecture.xcworkspace`, select the `App` target and run it.\n\nTo check out the legacy example built with Carthage, have a look at this [branch](https://github.com/CassiusPacheco/Swift-CleanArchitecture/tree/carthage).\n"
  },
  {
    "path": "SwiftCleanArchitecture.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <Group\n      location = \"container:\"\n      name = \"Plugins\">\n      <FileRef\n         location = \"group:Plugins/DependencyInjector\">\n      </FileRef>\n      <FileRef\n         location = \"group:Plugins/NetworkServices\">\n      </FileRef>\n      <FileRef\n         location = \"group:Plugins/Persistence\">\n      </FileRef>\n   </Group>\n   <FileRef\n      location = \"group:Entities\">\n   </FileRef>\n   <FileRef\n      location = \"group:Data\">\n   </FileRef>\n   <FileRef\n      location = \"group:Domain\">\n   </FileRef>\n   <FileRef\n      location = \"group:App/App.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "SwiftCleanArchitecture.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "SwiftCleanArchitecture.xcworkspace/xcshareddata/swiftpm/Package.resolved",
    "content": "{\n  \"object\": {\n    \"pins\": [\n      {\n        \"package\": \"DependencyContainer\",\n        \"repositoryURL\": \"https://github.com/CassiusPacheco/DependencyContainer\",\n        \"state\": {\n          \"branch\": null,\n          \"revision\": \"15049d95d20dabca6337c4c63c1ff98f3b776e07\",\n          \"version\": \"0.1.0\"\n        }\n      },\n      {\n        \"package\": \"RxSwift\",\n        \"repositoryURL\": \"https://github.com/ReactiveX/RxSwift\",\n        \"state\": {\n          \"branch\": null,\n          \"revision\": \"c1bd31b397d87a54467af4161dde9d6b27720c19\",\n          \"version\": \"5.1.0\"\n        }\n      }\n    ]\n  },\n  \"version\": 1\n}\n"
  }
]