diff --git a/Sources/SwiftMvvm/SwiftMvvm.xcodeproj/project.pbxproj b/Sources/SwiftMvvm/SwiftMvvm.xcodeproj/project.pbxproj new file mode 100644 index 0000000..68ec149 --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm.xcodeproj/project.pbxproj @@ -0,0 +1,738 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + EC1A52622A1CE12900F8CC93 /* SwiftMvvmApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1A52612A1CE12900F8CC93 /* SwiftMvvmApp.swift */; }; + EC1A52642A1CE12900F8CC93 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1A52632A1CE12900F8CC93 /* ContentView.swift */; }; + EC1A52662A1CE12A00F8CC93 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EC1A52652A1CE12A00F8CC93 /* Assets.xcassets */; }; + EC1A52692A1CE12A00F8CC93 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EC1A52682A1CE12A00F8CC93 /* Preview Assets.xcassets */; }; + EC1A52732A1CE12A00F8CC93 /* SwiftMvvmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1A52722A1CE12A00F8CC93 /* SwiftMvvmTests.swift */; }; + EC1A527D2A1CE12A00F8CC93 /* SwiftMvvmUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1A527C2A1CE12A00F8CC93 /* SwiftMvvmUITests.swift */; }; + EC1A527F2A1CE12A00F8CC93 /* SwiftMvvmUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1A527E2A1CE12A00F8CC93 /* SwiftMvvmUITestsLaunchTests.swift */; }; + EC1A528C2A1CE77F00F8CC93 /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1A528B2A1CE77F00F8CC93 /* HomeView.swift */; }; + EC2E21F42A25E9FA00DED570 /* MatiereUniq.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC2E21F32A25E9FA00DED570 /* MatiereUniq.swift */; }; + EC2E21F82A25FCAA00DED570 /* stbmat.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC2E21F72A25FCAA00DED570 /* stbmat.swift */; }; + EC369C212A325FB5005EE7C8 /* Note.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC369C202A325FB5005EE7C8 /* Note.swift */; }; + EC47F9D62A34C50C00CA3A3F /* DataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC47F9D52A34C50C00CA3A3F /* DataManager.swift */; }; + EC47F9D82A34C62000CA3A3F /* Manager.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC47F9D72A34C62000CA3A3F /* Manager.swift */; }; + EC47F9DA2A34C73B00CA3A3F /* Stub.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC47F9D92A34C73B00CA3A3F /* Stub.swift */; }; + EC47F9DC2A34D36200CA3A3F /* EditableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC47F9DB2A34D36200CA3A3F /* EditableView.swift */; }; + EC47F9E02A34F00C00CA3A3F /* MatiereEditView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC47F9DF2A34F00C00CA3A3F /* MatiereEditView.swift */; }; + EC47F9E22A35E89400CA3A3F /* UeeVm.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC47F9E12A35E89400CA3A3F /* UeeVm.swift */; }; + EC47F9E42A35EF1800CA3A3F /* ArrayExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC47F9E32A35EF1800CA3A3F /* ArrayExtension.swift */; }; + EC47F9E62A3633DA00CA3A3F /* ManagerVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC47F9E52A3633DA00CA3A3F /* ManagerVM.swift */; }; + EC7725432A1F80980075CBBF /* BlocView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC7725422A1F80980075CBBF /* BlocView.swift */; }; + EC7725452A1F814A0075CBBF /* UeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC7725442A1F814A0075CBBF /* UeView.swift */; }; + EC7725492A1F8DFE0075CBBF /* MatiereView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC7725482A1F8DFE0075CBBF /* MatiereView.swift */; }; + EC77254B2A1F8E770075CBBF /* VuePrincipale.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC77254A2A1F8E770075CBBF /* VuePrincipale.swift */; }; + EC77254D2A1F8EE90075CBBF /* ListUe.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC77254C2A1F8EE90075CBBF /* ListUe.swift */; }; + EC7725542A1F90CF0075CBBF /* BlocModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC7725532A1F90CF0075CBBF /* BlocModel.swift */; }; + EC7725562A1F90FD0075CBBF /* UE.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC7725552A1F90FD0075CBBF /* UE.swift */; }; + EC7725582A1F91300075CBBF /* Matiere.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC7725572A1F91300075CBBF /* Matiere.swift */; }; + EC77255B2A1F92EC0075CBBF /* Maquette.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC77255A2A1F92EC0075CBBF /* Maquette.swift */; }; + EC7725652A2095620075CBBF /* StructBlocs.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC7725642A2095620075CBBF /* StructBlocs.swift */; }; + EC9D96622A334F9A00513D62 /* StubData.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC9D96612A334F9A00513D62 /* StubData.swift */; }; + EC9D96642A33519800513D62 /* StubMat.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC9D96632A33519800513D62 /* StubMat.swift */; }; + ECF5E2722A23102800A2E9CA /* BlocVm.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECF5E2712A23102800A2E9CA /* BlocVm.swift */; }; + ECF5E2762A23104800A2E9CA /* MatiereVm.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECF5E2752A23104800A2E9CA /* MatiereVm.swift */; }; + ECF5E27A2A23177500A2E9CA /* UeStruct.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECF5E2792A23177500A2E9CA /* UeStruct.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + EC1A526F2A1CE12A00F8CC93 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EC1A52562A1CE12900F8CC93 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EC1A525D2A1CE12900F8CC93; + remoteInfo = SwiftMvvm; + }; + EC1A52792A1CE12A00F8CC93 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EC1A52562A1CE12900F8CC93 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EC1A525D2A1CE12900F8CC93; + remoteInfo = SwiftMvvm; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + EC1A525E2A1CE12900F8CC93 /* SwiftMvvm.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwiftMvvm.app; sourceTree = BUILT_PRODUCTS_DIR; }; + EC1A52612A1CE12900F8CC93 /* SwiftMvvmApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftMvvmApp.swift; sourceTree = ""; }; + EC1A52632A1CE12900F8CC93 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + EC1A52652A1CE12A00F8CC93 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + EC1A52682A1CE12A00F8CC93 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + EC1A526E2A1CE12A00F8CC93 /* SwiftMvvmTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwiftMvvmTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + EC1A52722A1CE12A00F8CC93 /* SwiftMvvmTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftMvvmTests.swift; sourceTree = ""; }; + EC1A52782A1CE12A00F8CC93 /* SwiftMvvmUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwiftMvvmUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + EC1A527C2A1CE12A00F8CC93 /* SwiftMvvmUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftMvvmUITests.swift; sourceTree = ""; }; + EC1A527E2A1CE12A00F8CC93 /* SwiftMvvmUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftMvvmUITestsLaunchTests.swift; sourceTree = ""; }; + EC1A528B2A1CE77F00F8CC93 /* HomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeView.swift; sourceTree = ""; }; + EC2E21F32A25E9FA00DED570 /* MatiereUniq.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MatiereUniq.swift; sourceTree = ""; }; + EC2E21F72A25FCAA00DED570 /* stbmat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = stbmat.swift; sourceTree = ""; }; + EC369C202A325FB5005EE7C8 /* Note.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Note.swift; sourceTree = ""; }; + EC47F9D52A34C50C00CA3A3F /* DataManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataManager.swift; sourceTree = ""; }; + EC47F9D72A34C62000CA3A3F /* Manager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Manager.swift; sourceTree = ""; }; + EC47F9D92A34C73B00CA3A3F /* Stub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Stub.swift; sourceTree = ""; }; + EC47F9DB2A34D36200CA3A3F /* EditableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditableView.swift; sourceTree = ""; }; + EC47F9DF2A34F00C00CA3A3F /* MatiereEditView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MatiereEditView.swift; sourceTree = ""; }; + EC47F9E12A35E89400CA3A3F /* UeeVm.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UeeVm.swift; sourceTree = ""; }; + EC47F9E32A35EF1800CA3A3F /* ArrayExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArrayExtension.swift; sourceTree = ""; }; + EC47F9E52A3633DA00CA3A3F /* ManagerVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagerVM.swift; sourceTree = ""; }; + EC7725422A1F80980075CBBF /* BlocView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlocView.swift; sourceTree = ""; }; + EC7725442A1F814A0075CBBF /* UeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UeView.swift; sourceTree = ""; }; + EC7725482A1F8DFE0075CBBF /* MatiereView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MatiereView.swift; sourceTree = ""; }; + EC77254A2A1F8E770075CBBF /* VuePrincipale.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VuePrincipale.swift; sourceTree = ""; }; + EC77254C2A1F8EE90075CBBF /* ListUe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListUe.swift; sourceTree = ""; }; + EC7725532A1F90CF0075CBBF /* BlocModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlocModel.swift; sourceTree = ""; }; + EC7725552A1F90FD0075CBBF /* UE.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UE.swift; sourceTree = ""; }; + EC7725572A1F91300075CBBF /* Matiere.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Matiere.swift; sourceTree = ""; }; + EC77255A2A1F92EC0075CBBF /* Maquette.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Maquette.swift; sourceTree = ""; }; + EC7725642A2095620075CBBF /* StructBlocs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StructBlocs.swift; sourceTree = ""; }; + EC9D96612A334F9A00513D62 /* StubData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StubData.swift; sourceTree = ""; }; + EC9D96632A33519800513D62 /* StubMat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StubMat.swift; sourceTree = ""; }; + ECF5E2712A23102800A2E9CA /* BlocVm.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlocVm.swift; sourceTree = ""; }; + ECF5E2752A23104800A2E9CA /* MatiereVm.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MatiereVm.swift; sourceTree = ""; }; + ECF5E2792A23177500A2E9CA /* UeStruct.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UeStruct.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + EC1A525B2A1CE12900F8CC93 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC1A526B2A1CE12A00F8CC93 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC1A52752A1CE12A00F8CC93 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + EC1A52552A1CE12900F8CC93 = { + isa = PBXGroup; + children = ( + EC1A52602A1CE12900F8CC93 /* SwiftMvvm */, + EC1A52712A1CE12A00F8CC93 /* SwiftMvvmTests */, + EC1A527B2A1CE12A00F8CC93 /* SwiftMvvmUITests */, + EC1A525F2A1CE12900F8CC93 /* Products */, + ); + sourceTree = ""; + }; + EC1A525F2A1CE12900F8CC93 /* Products */ = { + isa = PBXGroup; + children = ( + EC1A525E2A1CE12900F8CC93 /* SwiftMvvm.app */, + EC1A526E2A1CE12A00F8CC93 /* SwiftMvvmTests.xctest */, + EC1A52782A1CE12A00F8CC93 /* SwiftMvvmUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + EC1A52602A1CE12900F8CC93 /* SwiftMvvm */ = { + isa = PBXGroup; + children = ( + EC47F9D42A34C4F800CA3A3F /* Manager */, + EC9D96602A334F8900513D62 /* Stub */, + EC7725632A2094CD0075CBBF /* Structs */, + EC77255C2A1F93AB0075CBBF /* ViewModel */, + EC7725592A1F91530075CBBF /* Vue */, + EC7725522A1F90AD0075CBBF /* Model */, + EC1A52612A1CE12900F8CC93 /* SwiftMvvmApp.swift */, + EC1A52632A1CE12900F8CC93 /* ContentView.swift */, + EC1A52652A1CE12A00F8CC93 /* Assets.xcassets */, + EC1A52672A1CE12A00F8CC93 /* Preview Content */, + ); + path = SwiftMvvm; + sourceTree = ""; + }; + EC1A52672A1CE12A00F8CC93 /* Preview Content */ = { + isa = PBXGroup; + children = ( + EC1A52682A1CE12A00F8CC93 /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; + EC1A52712A1CE12A00F8CC93 /* SwiftMvvmTests */ = { + isa = PBXGroup; + children = ( + EC1A52722A1CE12A00F8CC93 /* SwiftMvvmTests.swift */, + ); + path = SwiftMvvmTests; + sourceTree = ""; + }; + EC1A527B2A1CE12A00F8CC93 /* SwiftMvvmUITests */ = { + isa = PBXGroup; + children = ( + EC1A527C2A1CE12A00F8CC93 /* SwiftMvvmUITests.swift */, + EC1A527E2A1CE12A00F8CC93 /* SwiftMvvmUITestsLaunchTests.swift */, + ); + path = SwiftMvvmUITests; + sourceTree = ""; + }; + EC47F9D42A34C4F800CA3A3F /* Manager */ = { + isa = PBXGroup; + children = ( + EC47F9D52A34C50C00CA3A3F /* DataManager.swift */, + EC47F9D72A34C62000CA3A3F /* Manager.swift */, + EC47F9D92A34C73B00CA3A3F /* Stub.swift */, + ); + path = Manager; + sourceTree = ""; + }; + EC7725522A1F90AD0075CBBF /* Model */ = { + isa = PBXGroup; + children = ( + EC7725532A1F90CF0075CBBF /* BlocModel.swift */, + EC7725552A1F90FD0075CBBF /* UE.swift */, + EC7725572A1F91300075CBBF /* Matiere.swift */, + EC77255A2A1F92EC0075CBBF /* Maquette.swift */, + ); + path = Model; + sourceTree = ""; + }; + EC7725592A1F91530075CBBF /* Vue */ = { + isa = PBXGroup; + children = ( + EC77254A2A1F8E770075CBBF /* VuePrincipale.swift */, + EC77254C2A1F8EE90075CBBF /* ListUe.swift */, + EC7725482A1F8DFE0075CBBF /* MatiereView.swift */, + EC1A528B2A1CE77F00F8CC93 /* HomeView.swift */, + EC7725442A1F814A0075CBBF /* UeView.swift */, + EC7725422A1F80980075CBBF /* BlocView.swift */, + EC2E21F32A25E9FA00DED570 /* MatiereUniq.swift */, + EC2E21F72A25FCAA00DED570 /* stbmat.swift */, + EC369C202A325FB5005EE7C8 /* Note.swift */, + EC47F9DB2A34D36200CA3A3F /* EditableView.swift */, + EC47F9DF2A34F00C00CA3A3F /* MatiereEditView.swift */, + ); + path = Vue; + sourceTree = ""; + }; + EC77255C2A1F93AB0075CBBF /* ViewModel */ = { + isa = PBXGroup; + children = ( + ECF5E2712A23102800A2E9CA /* BlocVm.swift */, + ECF5E2752A23104800A2E9CA /* MatiereVm.swift */, + EC47F9E12A35E89400CA3A3F /* UeeVm.swift */, + EC47F9E32A35EF1800CA3A3F /* ArrayExtension.swift */, + EC47F9E52A3633DA00CA3A3F /* ManagerVM.swift */, + ); + path = ViewModel; + sourceTree = ""; + }; + EC7725632A2094CD0075CBBF /* Structs */ = { + isa = PBXGroup; + children = ( + EC7725642A2095620075CBBF /* StructBlocs.swift */, + ECF5E2792A23177500A2E9CA /* UeStruct.swift */, + ); + path = Structs; + sourceTree = ""; + }; + EC9D96602A334F8900513D62 /* Stub */ = { + isa = PBXGroup; + children = ( + EC9D96612A334F9A00513D62 /* StubData.swift */, + EC9D96632A33519800513D62 /* StubMat.swift */, + ); + path = Stub; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + EC1A525D2A1CE12900F8CC93 /* SwiftMvvm */ = { + isa = PBXNativeTarget; + buildConfigurationList = EC1A52822A1CE12A00F8CC93 /* Build configuration list for PBXNativeTarget "SwiftMvvm" */; + buildPhases = ( + EC1A525A2A1CE12900F8CC93 /* Sources */, + EC1A525B2A1CE12900F8CC93 /* Frameworks */, + EC1A525C2A1CE12900F8CC93 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SwiftMvvm; + productName = SwiftMvvm; + productReference = EC1A525E2A1CE12900F8CC93 /* SwiftMvvm.app */; + productType = "com.apple.product-type.application"; + }; + EC1A526D2A1CE12A00F8CC93 /* SwiftMvvmTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = EC1A52852A1CE12A00F8CC93 /* Build configuration list for PBXNativeTarget "SwiftMvvmTests" */; + buildPhases = ( + EC1A526A2A1CE12A00F8CC93 /* Sources */, + EC1A526B2A1CE12A00F8CC93 /* Frameworks */, + EC1A526C2A1CE12A00F8CC93 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + EC1A52702A1CE12A00F8CC93 /* PBXTargetDependency */, + ); + name = SwiftMvvmTests; + productName = SwiftMvvmTests; + productReference = EC1A526E2A1CE12A00F8CC93 /* SwiftMvvmTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + EC1A52772A1CE12A00F8CC93 /* SwiftMvvmUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = EC1A52882A1CE12A00F8CC93 /* Build configuration list for PBXNativeTarget "SwiftMvvmUITests" */; + buildPhases = ( + EC1A52742A1CE12A00F8CC93 /* Sources */, + EC1A52752A1CE12A00F8CC93 /* Frameworks */, + EC1A52762A1CE12A00F8CC93 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + EC1A527A2A1CE12A00F8CC93 /* PBXTargetDependency */, + ); + name = SwiftMvvmUITests; + productName = SwiftMvvmUITests; + productReference = EC1A52782A1CE12A00F8CC93 /* SwiftMvvmUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + EC1A52562A1CE12900F8CC93 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1410; + LastUpgradeCheck = 1410; + TargetAttributes = { + EC1A525D2A1CE12900F8CC93 = { + CreatedOnToolsVersion = 14.1; + }; + EC1A526D2A1CE12A00F8CC93 = { + CreatedOnToolsVersion = 14.1; + TestTargetID = EC1A525D2A1CE12900F8CC93; + }; + EC1A52772A1CE12A00F8CC93 = { + CreatedOnToolsVersion = 14.1; + TestTargetID = EC1A525D2A1CE12900F8CC93; + }; + }; + }; + buildConfigurationList = EC1A52592A1CE12900F8CC93 /* Build configuration list for PBXProject "SwiftMvvm" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = EC1A52552A1CE12900F8CC93; + productRefGroup = EC1A525F2A1CE12900F8CC93 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + EC1A525D2A1CE12900F8CC93 /* SwiftMvvm */, + EC1A526D2A1CE12A00F8CC93 /* SwiftMvvmTests */, + EC1A52772A1CE12A00F8CC93 /* SwiftMvvmUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + EC1A525C2A1CE12900F8CC93 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EC1A52692A1CE12A00F8CC93 /* Preview Assets.xcassets in Resources */, + EC1A52662A1CE12A00F8CC93 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC1A526C2A1CE12A00F8CC93 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC1A52762A1CE12A00F8CC93 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + EC1A525A2A1CE12900F8CC93 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EC7725432A1F80980075CBBF /* BlocView.swift in Sources */, + EC77254D2A1F8EE90075CBBF /* ListUe.swift in Sources */, + EC47F9E22A35E89400CA3A3F /* UeeVm.swift in Sources */, + EC369C212A325FB5005EE7C8 /* Note.swift in Sources */, + ECF5E2722A23102800A2E9CA /* BlocVm.swift in Sources */, + EC47F9D62A34C50C00CA3A3F /* DataManager.swift in Sources */, + EC47F9DC2A34D36200CA3A3F /* EditableView.swift in Sources */, + EC1A528C2A1CE77F00F8CC93 /* HomeView.swift in Sources */, + EC1A52642A1CE12900F8CC93 /* ContentView.swift in Sources */, + EC7725562A1F90FD0075CBBF /* UE.swift in Sources */, + EC2E21F82A25FCAA00DED570 /* stbmat.swift in Sources */, + EC7725542A1F90CF0075CBBF /* BlocModel.swift in Sources */, + EC7725452A1F814A0075CBBF /* UeView.swift in Sources */, + EC9D96642A33519800513D62 /* StubMat.swift in Sources */, + EC77255B2A1F92EC0075CBBF /* Maquette.swift in Sources */, + EC47F9D82A34C62000CA3A3F /* Manager.swift in Sources */, + EC2E21F42A25E9FA00DED570 /* MatiereUniq.swift in Sources */, + EC77254B2A1F8E770075CBBF /* VuePrincipale.swift in Sources */, + ECF5E27A2A23177500A2E9CA /* UeStruct.swift in Sources */, + EC7725652A2095620075CBBF /* StructBlocs.swift in Sources */, + EC1A52622A1CE12900F8CC93 /* SwiftMvvmApp.swift in Sources */, + EC47F9E62A3633DA00CA3A3F /* ManagerVM.swift in Sources */, + EC7725492A1F8DFE0075CBBF /* MatiereView.swift in Sources */, + EC7725582A1F91300075CBBF /* Matiere.swift in Sources */, + EC47F9E02A34F00C00CA3A3F /* MatiereEditView.swift in Sources */, + EC47F9E42A35EF1800CA3A3F /* ArrayExtension.swift in Sources */, + ECF5E2762A23104800A2E9CA /* MatiereVm.swift in Sources */, + EC9D96622A334F9A00513D62 /* StubData.swift in Sources */, + EC47F9DA2A34C73B00CA3A3F /* Stub.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC1A526A2A1CE12A00F8CC93 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EC1A52732A1CE12A00F8CC93 /* SwiftMvvmTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC1A52742A1CE12A00F8CC93 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EC1A527F2A1CE12A00F8CC93 /* SwiftMvvmUITestsLaunchTests.swift in Sources */, + EC1A527D2A1CE12A00F8CC93 /* SwiftMvvmUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + EC1A52702A1CE12A00F8CC93 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = EC1A525D2A1CE12900F8CC93 /* SwiftMvvm */; + targetProxy = EC1A526F2A1CE12A00F8CC93 /* PBXContainerItemProxy */; + }; + EC1A527A2A1CE12A00F8CC93 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = EC1A525D2A1CE12900F8CC93 /* SwiftMvvm */; + targetProxy = EC1A52792A1CE12A00F8CC93 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + EC1A52802A1CE12A00F8CC93 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.1; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + EC1A52812A1CE12A00F8CC93 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.1; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + EC1A52832A1CE12A00F8CC93 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"SwiftMvvm/Preview Content\""; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = fr.uca.iut.SwiftMvvm; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + EC1A52842A1CE12A00F8CC93 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"SwiftMvvm/Preview Content\""; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = fr.uca.iut.SwiftMvvm; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + EC1A52862A1CE12A00F8CC93 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.1; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = fr.uca.iut.SwiftMvvmTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SwiftMvvm.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/SwiftMvvm"; + }; + name = Debug; + }; + EC1A52872A1CE12A00F8CC93 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.1; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = fr.uca.iut.SwiftMvvmTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SwiftMvvm.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/SwiftMvvm"; + }; + name = Release; + }; + EC1A52892A1CE12A00F8CC93 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = fr.uca.iut.SwiftMvvmUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = SwiftMvvm; + }; + name = Debug; + }; + EC1A528A2A1CE12A00F8CC93 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = fr.uca.iut.SwiftMvvmUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = SwiftMvvm; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + EC1A52592A1CE12900F8CC93 /* Build configuration list for PBXProject "SwiftMvvm" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC1A52802A1CE12A00F8CC93 /* Debug */, + EC1A52812A1CE12A00F8CC93 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EC1A52822A1CE12A00F8CC93 /* Build configuration list for PBXNativeTarget "SwiftMvvm" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC1A52832A1CE12A00F8CC93 /* Debug */, + EC1A52842A1CE12A00F8CC93 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EC1A52852A1CE12A00F8CC93 /* Build configuration list for PBXNativeTarget "SwiftMvvmTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC1A52862A1CE12A00F8CC93 /* Debug */, + EC1A52872A1CE12A00F8CC93 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EC1A52882A1CE12A00F8CC93 /* Build configuration list for PBXNativeTarget "SwiftMvvmUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC1A52892A1CE12A00F8CC93 /* Debug */, + EC1A528A2A1CE12A00F8CC93 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = EC1A52562A1CE12900F8CC93 /* Project object */; +} diff --git a/Sources/SwiftMvvm/SwiftMvvm.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Sources/SwiftMvvm/SwiftMvvm.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Sources/SwiftMvvm/SwiftMvvm.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Sources/SwiftMvvm/SwiftMvvm.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Sources/SwiftMvvm/SwiftMvvm/Assets.xcassets/AccentColor.colorset/Contents.json b/Sources/SwiftMvvm/SwiftMvvm/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Sources/SwiftMvvm/SwiftMvvm/Assets.xcassets/AppIcon.appiconset/Contents.json b/Sources/SwiftMvvm/SwiftMvvm/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..13613e3 --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Sources/SwiftMvvm/SwiftMvvm/Assets.xcassets/Contents.json b/Sources/SwiftMvvm/SwiftMvvm/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Sources/SwiftMvvm/SwiftMvvm/ContentView.swift b/Sources/SwiftMvvm/SwiftMvvm/ContentView.swift new file mode 100644 index 0000000..4a8d751 --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/ContentView.swift @@ -0,0 +1,26 @@ +// +// ContentView.swift +// SwiftMvvm +// +// Created by etudiant on 23/05/2023. +// + +import SwiftUI + +struct ContentView: View { + var body: some View { + VStack { + Image(systemName: "globe") + .imageScale(.large) + .foregroundColor(.accentColor) + Text("Hello, world!") + } + .padding() + } +} + +struct ContentView_Previews: PreviewProvider { + static var previews: some View { + ContentView() + } +} diff --git a/Sources/SwiftMvvm/SwiftMvvm/Manager/DataManager.swift b/Sources/SwiftMvvm/SwiftMvvm/Manager/DataManager.swift new file mode 100644 index 0000000..f7e048b --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Manager/DataManager.swift @@ -0,0 +1,14 @@ +// +// DataManage.swift +// SwiftMvvm +// +// Created by etudiant on 10/06/2023. +// + + +import Foundation + +public protocol DataManager { + func loadUes() -> [UE] + func save(ues: [UE]) +} diff --git a/Sources/SwiftMvvm/SwiftMvvm/Manager/Manager.swift b/Sources/SwiftMvvm/SwiftMvvm/Manager/Manager.swift new file mode 100644 index 0000000..703f831 --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Manager/Manager.swift @@ -0,0 +1,29 @@ +// +// Manager.swift +// SwiftMvvm +// +// Created by etudiant on 10/06/2023. +// + +import Foundation + + +public struct Manager { + let dataManager: DataManager + public var ues: [UE] = [] + + public init(withDataManager dataManager: DataManager){ + self.dataManager = dataManager + } + + public mutating func loadUes() { + self.ues.removeAll() + for ue in self.dataManager.loadUes() { + self.ues.append(ue) + } + } + + public func saveUes() { + self.dataManager.save(ues:self.ues) + } +} diff --git a/Sources/SwiftMvvm/SwiftMvvm/Manager/Stub.swift b/Sources/SwiftMvvm/SwiftMvvm/Manager/Stub.swift new file mode 100644 index 0000000..30c49dc --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Manager/Stub.swift @@ -0,0 +1,77 @@ +// +// Stub.swift +// SwiftMvvm +// +// Created by etudiant on 10/06/2023. +// + +import Foundation + +public struct Stub : DataManager { + + public init(){} + + public func loadUes() -> [UE] { + + var ues: [UE] = [] + + + /* UE 1 : Génie Logiciel (coeff. 6) */ + ues.append(UE(id: UUID(), coefficient: 6, moyenne: 0.0, nom: "Systèmes et réseaux ", + listeMatiere: [ + Matiere(id: UUID(), nom: "Internet des Objets", coefficient: 4, note: 0.0), + Matiere(id: UUID(), nom: "Réseaux", coefficient: 4, note: 0.0), + Matiere(id: UUID(), nom: "Services Mobiles", coefficient: 4, note: 0.0), + Matiere(id: UUID(), nom: "Système ", coefficient: 5, note: 0.0), + ])) + ues.append(UE(id: UUID(), coefficient: 6, moyenne: 0.0, nom: "Génie Logiciel", + listeMatiere: [ + Matiere(id: UUID(), nom: "Processus de développement", coefficient: 4, note: 0.0), + Matiere(id: UUID(), nom: "Programmation Objets", coefficient: 9, note: 0.0), + Matiere(id: UUID(), nom: "Qualité de développpement", coefficient: 5, note: 0.0), + Matiere(id: UUID(), nom: "Remise à niveau objets", coefficient: 4, note: 0.0), + ])) + ues.append(UE(id: UUID(), coefficient: 6, moyenne: 0.0, nom: "Insertion Professionnelle ", + listeMatiere: [ + Matiere(id: UUID(), nom: "Anglais", coefficient: 5, note: 0.0), + Matiere(id: UUID(), nom: "Economie", coefficient: 4, note: 0.0), + Matiere(id: UUID(), nom: "Gestion", coefficient: 3, note: 0.0), + Matiere(id: UUID(), nom: "Communication", coefficient: 4, note: 0.0), + ])) + ues.append(UE(id: UUID(), coefficient: 9, moyenne: 0.0, nom: "Technologies Mobiles 1 ", + listeMatiere: [ + Matiere(id: UUID(), nom: "Android ", coefficient: 6, note: 0.0), + Matiere(id: UUID(), nom: "Architecture de projets C# .NET", coefficient: 5, note: 0.0), + Matiere(id: UUID(), nom: "C++", coefficient: 4, note: 0.0), + Matiere(id: UUID(), nom: "Swift", coefficient: 5, note: 0.0), + ])) + ues.append(UE(id: UUID(), coefficient: 9, moyenne: 0.0, nom: "Technologies Mobiles 2 ", + listeMatiere: [ + Matiere(id: UUID(), nom: "Architecture de projets C# .NET ", coefficient: 4, note: 0.0), + Matiere(id: UUID(), nom: "Client/Serveur", coefficient: 4, note: 0.0), + Matiere(id: UUID(), nom: "iOS ", coefficient: 5, note: 0.0), + Matiere(id: UUID(), nom: "Multiplateformes ", coefficient: 3, note: 0.0), + Matiere(id: UUID(), nom: "QT Quick ", coefficient: 5, note: 0.0), + Matiere(id: UUID(), nom: "Xamarin ", coefficient: 5, note: 0.0), + ])) + ues.append(UE(id: UUID(), coefficient: 9, moyenne: 0.0, nom: "Projet ", + listeMatiere: [ + Matiere(id: UUID(), nom: "Projet ", coefficient: 1, note: 0.0), + + ])) + ues.append(UE(id: UUID(), coefficient: 15, moyenne: 0.0, nom: "Stage ", + listeMatiere: [ + Matiere(id: UUID(), nom: "Stage ", coefficient: 1, note: 0.0), + + ])) + + + + + + return ues + } + + public func save(ues: [UE]) { + } +} diff --git a/Sources/SwiftMvvm/SwiftMvvm/Model/BlocModel.swift b/Sources/SwiftMvvm/SwiftMvvm/Model/BlocModel.swift new file mode 100644 index 0000000..35e2a19 --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Model/BlocModel.swift @@ -0,0 +1,30 @@ +// +// BlocModel.swift +// SwiftMvvm +// +// Created by etudiant on 25/05/2023. +// + +import Foundation +struct BlocModel: Identifiable ,Equatable { + static func == (lhs: BlocModel, rhs: BlocModel) -> Bool { + lhs.id == rhs.id + } + let id = UUID() + var Nombloc: String + var Moyenneg: Double + var listeUE: [UE] + public init(Nombloc: String, Moyenneg: Double, listeUE: [UE]) { + self.Nombloc = Nombloc + self.Moyenneg = Moyenneg + self.listeUE = listeUE + } + //a modifier l calcul de la moyenne + // func MoyenneBloc(bloc: BlocModel) -> Double { + // let sumOfMoyennes = bloc.listeUE.reduce(into: 0.0) { $0 + $1.MoyenneUE } + // let numberOfUEs = Double(bloc.listeUE.count) + // return sumOfMoyennes / numberOfUEs + // } + + +} diff --git a/Sources/SwiftMvvm/SwiftMvvm/Model/Maquette.swift b/Sources/SwiftMvvm/SwiftMvvm/Model/Maquette.swift new file mode 100644 index 0000000..698dcdf --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Model/Maquette.swift @@ -0,0 +1,16 @@ +// +// Maquette.swift +// SwiftMvvm +// +// Created by etudiant on 25/05/2023. +// + +import Foundation +struct Maquette { + var listeBloc: [BlocModel] + var listeUE: [UE] + public init( listeBloc: [BlocModel], listeUE: [UE]) { + self.listeBloc = listeBloc + self.listeUE = listeUE + } +} diff --git a/Sources/SwiftMvvm/SwiftMvvm/Model/Matiere.swift b/Sources/SwiftMvvm/SwiftMvvm/Model/Matiere.swift new file mode 100644 index 0000000..f7fa9df --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Model/Matiere.swift @@ -0,0 +1,24 @@ +// +// Matiere.swift +// SwiftMvvm +// +// Created by etudiant on 25/05/2023. +// + +import Foundation +public struct Matiere: Identifiable, Equatable { + + public let id: UUID + public var nom: String + public var coefficient: Double + public var note:Double + + + public init(id: UUID, nom: String, coefficient: Double,note :Double ) { + self.id = id + self.nom = nom + self.coefficient = coefficient + self.note=note + + } +} diff --git a/Sources/SwiftMvvm/SwiftMvvm/Model/UE.swift b/Sources/SwiftMvvm/SwiftMvvm/Model/UE.swift new file mode 100644 index 0000000..2c9b7cd --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Model/UE.swift @@ -0,0 +1,31 @@ +// +// UE.swift +// SwiftMvvm +// +// Created by etudiant on 25/05/2023. +// + +import Foundation +public struct UE: Identifiable,Equatable { + public static func == (lhs: UE, rhs: UE) -> Bool { + lhs.id == rhs.id + } + + public let id: UUID + var coefficient: Double + var moyenne: Double + var nom: String + var listeMatiere: [Matiere] + public init(id: UUID, coefficient: Double, moyenne: Double, nom: String, listeMatiere: [Matiere]) { + self.id = id + self.coefficient = coefficient + self.moyenne = moyenne + self.nom = nom + self.listeMatiere = listeMatiere + } + func calculerMoyenneUE() -> Double { + let sommeDesNotes = listeMatiere.reduce(into: 0) { $0 + $1.note } + let nombreDeMatieres = Double(listeMatiere.count) + return sommeDesNotes / nombreDeMatieres + } +} diff --git a/Sources/SwiftMvvm/SwiftMvvm/Preview Content/Preview Assets.xcassets/Contents.json b/Sources/SwiftMvvm/SwiftMvvm/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Sources/SwiftMvvm/SwiftMvvm/Structs/StructBlocs.swift b/Sources/SwiftMvvm/SwiftMvvm/Structs/StructBlocs.swift new file mode 100644 index 0000000..8013d82 --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Structs/StructBlocs.swift @@ -0,0 +1,26 @@ +// +// StructBlocs.swift +// SwiftMvvm +// +// Created by etudiant on 26/05/2023. +// + +import Foundation +extension BlocModel { + struct Data: Identifiable { + let id = UUID() + var Nombloc: String + var Moyenneg: Double + var listeUE: [UE] + var data: Data { + Data(Nombloc: self.Nombloc, Moyenneg: self.Moyenneg, listeUE: self.listeUE) + } + mutating func update(from data: Data) { + self.Nombloc = data.Nombloc + self.Moyenneg = data.Moyenneg + } + } + +} + + diff --git a/Sources/SwiftMvvm/SwiftMvvm/Structs/UeStruct.swift b/Sources/SwiftMvvm/SwiftMvvm/Structs/UeStruct.swift new file mode 100644 index 0000000..83f88e7 --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Structs/UeStruct.swift @@ -0,0 +1,22 @@ +// +// UeStruct.swift +// SwiftMvvm +// +// Created by etudiant on 28/05/2023. +// + +import Foundation + +extension UE { + struct Data: Identifiable { + let id = UUID() + var coefficient: Double + var moyenne: Double + var nom: String + var listeMatiere: [Matiere] + var data: Data { + Data(coefficient: self.coefficient, moyenne: self.moyenne, nom: self.nom, listeMatiere:self.listeMatiere) + } + } +} + diff --git a/Sources/SwiftMvvm/SwiftMvvm/Stub/StubData.swift b/Sources/SwiftMvvm/SwiftMvvm/Stub/StubData.swift new file mode 100644 index 0000000..30745f8 --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Stub/StubData.swift @@ -0,0 +1,20 @@ +// +// StubData.swift +// SwiftMvvm +// +// Created by etudiant on 09/06/2023. +// + +import Foundation +import SwiftUI + +let stubUES: [UE] = [ + UE(id: UUID(), coefficient: 6, moyenne: 10.5, nom: "UE1 : Génie Logiciel", listeMatiere: []), + UE(id: UUID(), coefficient: 6, moyenne: 12.0, nom: "UE2 : Systèmes et réseaux", listeMatiere: []), + UE(id: UUID(), coefficient: 9, moyenne: 14.5, nom: "Insertion Professionnelle", listeMatiere: []), + UE(id: UUID(), coefficient: 9, moyenne: 9.0, nom: "UE4 : Technologies Mobiles 1", listeMatiere: []), + UE(id: UUID(), coefficient: 9, moyenne: 13.5, nom: "UE5 : Technologies Mobiles 2", listeMatiere: []), + UE(id: UUID(), coefficient: 9, moyenne: 11.0, nom: "UE6 : Projet", listeMatiere: []), + UE(id: UUID(), coefficient: 9, moyenne: 15.0, nom: "UE7 : ÉconoStagemie", listeMatiere: []) +] + diff --git a/Sources/SwiftMvvm/SwiftMvvm/Stub/StubMat.swift b/Sources/SwiftMvvm/SwiftMvvm/Stub/StubMat.swift new file mode 100644 index 0000000..69f7d9f --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Stub/StubMat.swift @@ -0,0 +1,14 @@ +// +// StubMat.swift +// SwiftMvvm +// +// Created by etudiant on 09/06/2023. +// + +import Foundation +import SwiftUI +let stubMatieres: [Matiere] = [ + Matiere(id: UUID(), nom: "Mathématiques", coefficient: 2.0, note: 15.0), + Matiere(id: UUID(), nom: "Physique", coefficient: 1.5, note: 12.0), + Matiere(id: UUID(), nom: "Chimie", coefficient: 1.0, note: 10.5) +] diff --git a/Sources/SwiftMvvm/SwiftMvvm/SwiftMvvmApp.swift b/Sources/SwiftMvvm/SwiftMvvm/SwiftMvvmApp.swift new file mode 100644 index 0000000..77f1cae --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/SwiftMvvmApp.swift @@ -0,0 +1,17 @@ +// +// SwiftMvvmApp.swift +// SwiftMvvm +// +// Created by etudiant on 23/05/2023. +// + +import SwiftUI + +@main +struct SwiftMvvmApp: App { + var body: some Scene { + WindowGroup { + VuePrincipale() + } + } +} diff --git a/Sources/SwiftMvvm/SwiftMvvm/ViewModel/ArrayExtension.swift b/Sources/SwiftMvvm/SwiftMvvm/ViewModel/ArrayExtension.swift new file mode 100644 index 0000000..ae24a9c --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/ViewModel/ArrayExtension.swift @@ -0,0 +1,21 @@ +// +// ArrayExtension.swift +// SwiftMvvm +// +// Created by etudiant on 11/06/2023. +// + +import Foundation + + + +//comparaison de model ,vm +extension Array where Element: Equatable { + func compare(to other: [Element]) -> Bool { + self.count == other.count && self.allSatisfy({ elt in + other.contains { otherElt in + otherElt == elt + } + }) + } +} diff --git a/Sources/SwiftMvvm/SwiftMvvm/ViewModel/BlocVm.swift b/Sources/SwiftMvvm/SwiftMvvm/ViewModel/BlocVm.swift new file mode 100644 index 0000000..590fb7e --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/ViewModel/BlocVm.swift @@ -0,0 +1,76 @@ +// +// BlocVm.swift +// SwiftMvvm +// +// Created by etudiant on 28/05/2023. +// + +// BlocVM.swift + +import Foundation + +/* let id = UUID() + var Nombloc: String + var Moyenneg: Double + var listeUE: [UE]*/ + +class BlocVm : ObservableObject ,Equatable{ + static func == (lhs: BlocVm, rhs: BlocVm) -> Bool { + lhs.id == rhs.id + } + + // dans le model on met à jour les donnes du vue model les proprietes à présenter à la vue + @Published var model: BlocModel = BlocModel(Nombloc: "", Moyenneg: 17, listeUE: []) + { + didSet{ + + if self.model.Nombloc != self.Nombloc { + self.Nombloc = self.model.Nombloc + } + + if self.model.Moyenneg != self.Moyenneg { + self.Moyenneg = self.model.Moyenneg + } + if !self.model.listeUE.compare(to: self.someUeVM.map({$0.model})){ + self.someUeVM = self.model.listeUE.map({UeVm(withModel: $0)}) + } + + } + } + public var id: UUID { model.id } + + @Published + var Nombloc: String = "" { + didSet { + if self.model.Nombloc != self.Nombloc { + self.model.Nombloc = self.Nombloc + } + } + } + @Published + var Moyenneg : Double = 0 { + didSet { + if self.model.Moyenneg != self.Moyenneg { + self.model.Moyenneg = self.Moyenneg + } + } + } + //collection on met a jour le Ue avec l dernier + @Published var someUeVM: [UeVm] = [] { + didSet { + let someModelUe = self.someUeVM.map({$0.model}) + if !self.model.listeUE.compare(to: someModelUe){ + self.model.listeUE = someUeVM.map({$0.model}) + } + } + } + + init(withModel BlocModel: BlocModel) { + model = BlocModel + } + + + +} + + diff --git a/Sources/SwiftMvvm/SwiftMvvm/ViewModel/ManagerVM.swift b/Sources/SwiftMvvm/SwiftMvvm/ViewModel/ManagerVM.swift new file mode 100644 index 0000000..f6277c4 --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/ViewModel/ManagerVM.swift @@ -0,0 +1,21 @@ +// +// ManagerVM.swift +// SwiftMvvm +// +// Created by etudiant on 11/06/2023. +// + +import Foundation + +//pouvoir les utiliser dans la vue +class ManagerVM: ObservableObject { + @Published var blocs: [BlocVm] = [] + + public init(withBeds blocs: [BlocModel]){ + self.blocs = blocs.map({BlocVm(withModel: $0)}) + } + + public init(withBeds blocs: [BlocVm]){ + self.blocs = blocs + } +} diff --git a/Sources/SwiftMvvm/SwiftMvvm/ViewModel/MatiereVm.swift b/Sources/SwiftMvvm/SwiftMvvm/ViewModel/MatiereVm.swift new file mode 100644 index 0000000..d3937ed --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/ViewModel/MatiereVm.swift @@ -0,0 +1,70 @@ +// +// MatiereVm.swift +// SwiftMvvm +// +// Created by etudiant on 28/05/2023. +// + +import Foundation + +class MatiereVm : ObservableObject ,Identifiable { + // dans le model on met à kjour les donnes du vue model les proprietes à présenter à la vue + //on vérifie que someNounourscollection de Nounoursdu modèle est différent du someNounoursVMcollection de NounoursVM + @Published var model: Matiere = Matiere(id: UUID(), nom: "Ma mat", coefficient: 2, note: 12) { + didSet{ + + if self.model.nom != self.nom { + self.nom = self.model.nom + } + + if self.model.coefficient != self.coefficient { + self.coefficient = self.model.coefficient + } + if self.model.note != self.note + { + self.note = self.model.note + } + } + } + /* + public let id: UUID + public var nom: String + public var coefficient: Double + public var note:Double + */ + public var id: UUID { model.id } + + @Published + var nom: String = "" { + didSet { + if self.model.nom != self.nom { + self.model.nom = self.nom + } + } + } + + + @Published + var coefficient : Double = 0 { + didSet { + if self.model.coefficient != self.coefficient { + self.model.coefficient = self.coefficient + } + } + } + @Published + var note : Double = 0 { + didSet { + if self.model.note != self.note { + self.model.note = self.note + } + } + } + + init(withModel Matiere: Matiere) { + model = Matiere + } + + + +} diff --git a/Sources/SwiftMvvm/SwiftMvvm/ViewModel/UeeVm.swift b/Sources/SwiftMvvm/SwiftMvvm/ViewModel/UeeVm.swift new file mode 100644 index 0000000..8f1e23e --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/ViewModel/UeeVm.swift @@ -0,0 +1,83 @@ +// +// UeeVm.swift +// SwiftMvvm +// +// Created by etudiant on 11/06/2023. +// + +import Foundation +/*public let id: UUID + var coefficient: Double + var moyenne: Double + var nom: String + var listeMatiere: [Matiere] + */ +class UeVm : ObservableObject,Equatable , Identifiable { + static func == (lhs: UeVm, rhs: UeVm) -> Bool { + lhs.id == rhs.id + } + + // dans le model on met à jour les donnes du vue model les proprietes à présenter à la vue + @Published var model: UE = UE(id: UUID(), coefficient: 2,moyenne: 10,nom: "", listeMatiere: [] ) { + didSet{ + + if self.model.nom != self.nom { + self.nom = self.model.nom + } + + if self.model.coefficient != self.coefficient { + self.coefficient = self.model.coefficient + } + if self.model.moyenne != self.moyenne + { + self.moyenne = self.model.moyenne + } + if !self.model.listeMatiere.compare(to: self.someMatVM.map({$0.model})){ + self.someMatVM = self.model.listeMatiere.map({MatiereVm(withModel: $0)}) + } + } + } + public var id: UUID { model.id } + + @Published + var nom: String = "" { + didSet { + if self.model.nom != self.nom { + self.model.nom = self.nom + } + } + } + @Published + var coefficient : Double = 0 { + didSet { + if self.model.coefficient != self.coefficient { + self.model.coefficient = self.coefficient + } + } + } + @Published + var moyenne : Double = 0 { + didSet { + if self.model.moyenne != self.moyenne { + self.model.moyenne = self.moyenne + } + } + } + +/* chaque fois que someNounoursVM est modifié, le bloc didSet vérifie si les modèles qu'il contient sont différents de ceux déjà présents dans self.model.someNounours. Si tel est le cas, il met à jour self.model.someNounours avec les nouveaux modèles.*/ + @Published var someMatVM: [MatiereVm] = [] { + didSet { + let someModelMatier = self.someMatVM.map({$0.model}) + if !self.model.listeMatiere.compare(to: someModelMatier){ + self.model.listeMatiere = someMatVM.map({$0.model}) + } + } + } + init(withModel UE: UE) { + model = UE + } + + + +} + diff --git a/Sources/SwiftMvvm/SwiftMvvm/Vue/BlocView.swift b/Sources/SwiftMvvm/SwiftMvvm/Vue/BlocView.swift new file mode 100644 index 0000000..ad31e89 --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Vue/BlocView.swift @@ -0,0 +1,40 @@ +// +// BlocView.swift +// SwiftMvvm +// +// Created by etudiant on 25/05/2023. +// + +import SwiftUI + +struct BlocView: View { + + var body: some View { + VStack(alignment: .leading) { + Label("Blocs", systemImage: "doc.on.doc.fill") + .font(.title) + Text("Vous devez avoir la moyenne à chacun de ces blocs pour avoir votre diplôme.") + HStack { + Label("Total", systemImage: "doc.on.doc.fill") + Spacer() + Label("11.67", systemImage: "graduationcap.circle.fill") + } + HStack { + Label("Total", systemImage: "doc.on.doc.fill") + Spacer() + Label("11.67", systemImage: "graduationcap.circle.fill") + } + } + .padding() + .background(Color("ListItemBackgroundColor")) + .cornerRadius(12) + } + + } + + +struct BlocView_Previews: PreviewProvider { + static var previews: some View { + BlocView() + } +} diff --git a/Sources/SwiftMvvm/SwiftMvvm/Vue/EditableView.swift b/Sources/SwiftMvvm/SwiftMvvm/Vue/EditableView.swift new file mode 100644 index 0000000..1cf159b --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Vue/EditableView.swift @@ -0,0 +1,79 @@ +// +// EditableView.swift +// SwiftMvvm +// +// Created by etudiant on 10/06/2023. +// + +import SwiftUI + + +struct EditableView: View { + @ObservedObject var editableUe:UeVm + @State var isEditing: Bool = false + var body: some View { + NavigationStack{ + Form{ + NavigationLink{ + Form{ + TextField("", text: $editableUe.nom, prompt: Text("enter the name")) + } + .navigationBarTitleDisplayMode(.inline) + .navigationTitle("Name") + } + label: { + HStack{ + Text("Name") + Spacer() + Text(editableUe.nom) + .foregroundColor(.gray) + } + } + NavigationLink{ + Form{ + TextField("", value: $editableUe.coefficient, format: .number, prompt: Text("enter the COEF")) + } + .navigationBarTitleDisplayMode(.inline) + .navigationTitle("enter the COEFt") + } + label: { + HStack{ + Text("enter the COEFt") + Spacer() + Text(String(editableUe.coefficient)) + .foregroundColor(.gray) + } + } + NavigationLink{ + Form{ + TextField("", value: $editableUe.moyenne, format: .number, prompt: Text("enter the NOTE")) + } + .navigationBarTitleDisplayMode(.inline) + .navigationTitle("enter the NOTE") + } + label: { + HStack{ + Text("enter the NOTE") + Spacer() + Text(String(editableUe.moyenne)) + .foregroundColor(.gray) + } + } + // + } + } + } +} + + struct EditableView_Previews: PreviewProvider { + static var previews: some View { + let ueee = Stub().loadUes()[0] + EditableView(editableUe:UeVm(withModel:ueee)) + } + } + + + + + + diff --git a/Sources/SwiftMvvm/SwiftMvvm/Vue/HomeView.swift b/Sources/SwiftMvvm/SwiftMvvm/Vue/HomeView.swift new file mode 100644 index 0000000..0668567 --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Vue/HomeView.swift @@ -0,0 +1,25 @@ +// +// HomeView.swift +// SwiftMvvm +// +// Created by etudiant on 23/05/2023. +// + +import SwiftUI + +struct HomeView: View{ + + var body: some View { + Text("Calculatrice ") + .font(.headline) + .padding(.trailing, 20) + .font(.headline) + .foregroundColor(.blue) + } +} + +struct HomeView_Previews: PreviewProvider { + static var previews: some View { + HomeView() + } +} diff --git a/Sources/SwiftMvvm/SwiftMvvm/Vue/ListUe.swift b/Sources/SwiftMvvm/SwiftMvvm/Vue/ListUe.swift new file mode 100644 index 0000000..068ad0e --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Vue/ListUe.swift @@ -0,0 +1,36 @@ +// +// ListUe.swift +// SwiftMvvm +// +// Created by etudiant on 25/05/2023. +// + +import SwiftUI + +struct ListUe: View { + var body: some View { + NavigationStack { + VStack(alignment: .leading) { + Label("UEs", systemImage: "doc.fill") + .font(.title) + Text("Détails des UEs") + LazyVStack { + HStack { + UeView(blocs: BlocVm(withModel: BlocModel(Nombloc: "HST", Moyenneg: 14, listeUE: []))) + Divider() + } + .padding() + } + .padding() + .background(Color("ListItemBackgroundColor")) + .cornerRadius(12) + } + } + + } + + struct ListUe_Previews: PreviewProvider { + static var previews: some View { + ListUe() + } + }} diff --git a/Sources/SwiftMvvm/SwiftMvvm/Vue/MatiereEditView.swift b/Sources/SwiftMvvm/SwiftMvvm/Vue/MatiereEditView.swift new file mode 100644 index 0000000..79305f3 --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Vue/MatiereEditView.swift @@ -0,0 +1,54 @@ +// +// MatiereEditView.swift +// SwiftMvvm +// +// Created by etudiant on 10/06/2023. +// + +import SwiftUI + +struct MatiereEditView: View { + @Binding var matiere : Matiere + var body: some View { + VStack { + NavigationLink(destination: TextField("", text: $matiere.nom, prompt: Text("enter the name")) + .navigationBarTitleDisplayMode(.inline) + .navigationTitle("Name")) { + HStack { + Text("Nom") + Spacer() + Text(matiere.nom) + .foregroundColor(.gray) + } + } + + NavigationLink(destination: TextField("", value: $matiere.coefficient, format: .number, prompt: Text("enter the count")) + .navigationBarTitleDisplayMode(.inline) + .navigationTitle("Hair count")) { + HStack { + Text("coef") + Spacer() + Text(String(matiere.coefficient)) + .foregroundColor(.gray) + } + } + + NavigationLink(destination: TextField("", value: $matiere.note, format: .number, prompt: Text("enter the note")) + .navigationBarTitleDisplayMode(.inline) + .navigationTitle("note")) { + HStack { + Text("Note") + Spacer() + Text(String(matiere.note)) + .foregroundColor(.gray) + } + } + } + } +} + +struct MatiereEditView_Previews: PreviewProvider { + static var previews: some View { + MatiereEditView(matiere: .constant(Stub().loadUes()[0].listeMatiere[0])) + } +} diff --git a/Sources/SwiftMvvm/SwiftMvvm/Vue/MatiereUniq.swift b/Sources/SwiftMvvm/SwiftMvvm/Vue/MatiereUniq.swift new file mode 100644 index 0000000..1de3c46 --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Vue/MatiereUniq.swift @@ -0,0 +1,73 @@ +// MatiereUniq.swift +// SwiftMvvm +// +// Created by etudiant on 30/05/2023. +// + +import SwiftUI + +struct MatiereUniq: View { + //1 changement avec Vm + @ObservedObject var mat: MatiereVm + @State private var islocked = true + + var body: some View { + VStack(alignment: .leading) { + HStack { + Text(mat.nom) + .font(.title2) + + Spacer() + + Text("\(mat.coefficient)") + .font(.title2) + .padding(.horizontal, 30.0) + } + .padding(.horizontal, 11.0) + + HStack { + Button(action: { + islocked.toggle() + }) { + Image(systemName: islocked ? "lock" : "lock.open") + .resizable() + .frame(width: 20, height: 20) + } + + GeometryReader { geometry in + HStack { + Capsule() + .fill(mat.note < 10 ? .red : .blue) + .frame(height: 20) + .frame(width: CGFloat(mat.note) / 30 * geometry.size.width) + .gesture( + islocked ? DragGesture(minimumDistance: 0).onChanged({_ in }) + : DragGesture(minimumDistance: 23) + .onChanged({ value in + let newNote = value.location.x / geometry.size.width * 20 + mat.note = min(max(newNote, 0), 20) + }) + ) + + Text("\(Double(mat.note))") + + if !islocked { + Image("gouffle") + .resizable() + .frame(width: 20, height: 20) + } + } + } + + Divider() + } + } + } +} + +struct MatiereUniq_Previews: PreviewProvider { + static var previews: some View { + MatiereUniq(mat: MatiereVm(withModel: Matiere(id: UUID(), nom: "JAVA", coefficient: 6, note: 19))) + } +} + diff --git a/Sources/SwiftMvvm/SwiftMvvm/Vue/MatiereView.swift b/Sources/SwiftMvvm/SwiftMvvm/Vue/MatiereView.swift new file mode 100644 index 0000000..574f7ac --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Vue/MatiereView.swift @@ -0,0 +1,60 @@ +import SwiftUI + + +struct MatiereView: View { + @ObservedObject var ue : UeVm + @State var isEditing: Bool = false + var body: some View { + NavigationStack { + ScrollView { + VStack(alignment: .leading) { + + Label("Coefficient :\(ue.coefficient)", systemImage: "xmark.circle.fill") + Label("Détails des notes: ", systemImage: "note.text") + } + VStack { + ForEach(ue.someMatVM) { matiere in + MatiereUniq(mat: matiere) + } + } + .toolbar{ + Button(action: { + self.isEditing.toggle() + }){ + Text("Edit") + } + } + + .sheet(isPresented: $isEditing){ + NavigationStack{ + EditableView(editableUe: ue) + .toolbar{ + ToolbarItem(id: "done", placement: .confirmationAction){ + Button(action: { + self.isEditing.toggle() + }){ + Text("Done") + } + } + ToolbarItem(id: "cancel", placement: .cancellationAction){ + Button(action: { + self.isEditing.toggle() + }){ + Text("Cancel") + } + } + } + .navigationTitle("Edit: \(ue.nom)") + } + } + } + } + } +} + +struct MatiereView_Previews: PreviewProvider { + static var previews: some View { + MatiereView(ue: UeVm(withModel: UE(id: UUID(), coefficient: 2, moyenne: 16, nom: "MAT", listeMatiere: []))) + } +} + diff --git a/Sources/SwiftMvvm/SwiftMvvm/Vue/Note.swift b/Sources/SwiftMvvm/SwiftMvvm/Vue/Note.swift new file mode 100644 index 0000000..a838463 --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Vue/Note.swift @@ -0,0 +1,31 @@ +// +// Note.swift +// SwiftMvvm +// +// Created by etudiant on 08/06/2023. +// + +// +// NoteInfo.swift +// App +// +// Created by BREUIL Yohann on 26/05/2023. +// + +/*import SwiftUI + +struct NoteInfo: View { + var body: some View { + VStack { + + MatiereView(ue: <#UeVm#> ) + Divider() + } + } +} + +struct NoteInfo_Previews: PreviewProvider { + static var previews: some View { + NoteInfo() + } +}*/ diff --git a/Sources/SwiftMvvm/SwiftMvvm/Vue/UeView.swift b/Sources/SwiftMvvm/SwiftMvvm/Vue/UeView.swift new file mode 100644 index 0000000..42788c4 --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Vue/UeView.swift @@ -0,0 +1,45 @@ +import SwiftUI + + +struct UeView: View { + + @ObservedObject var blocs : BlocVm + + var body: some View { + VStack { + ForEach(blocs.someUeVM) { ue in + HStack { + Text(ue.nom) + .font(.subheadline) + .foregroundColor(.primary) + Spacer() + Text("\(ue.coefficient)") + NavigationLink(destination: MatiereView(ue: UeVm(withModel: UE(id: UUID(), coefficient: 4, moyenne: 3, nom: "HST", listeMatiere: [])) )) { + Image(systemName: "square.and.pencil") + } + .foregroundColor(.blue) + } + .padding(.bottom, 10) + HStack { + Capsule() + .fill(ue.moyenne < 10 ? .red : .blue) + .frame(height: 20) + .frame(width: CGFloat(ue.moyenne) * 10) + .background(Color.clear) + Text("\(ue.moyenne)") + } + .padding() + + Divider() + } + } + .padding() + } +} + +struct UeView_Previews: PreviewProvider { + static var previews: some View { + UeView(blocs: BlocVm(withModel: BlocModel(Nombloc: "ANG", Moyenneg: 12, listeUE: []))) + } +} + diff --git a/Sources/SwiftMvvm/SwiftMvvm/Vue/VuePrincipale.swift b/Sources/SwiftMvvm/SwiftMvvm/Vue/VuePrincipale.swift new file mode 100644 index 0000000..e4bd529 --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Vue/VuePrincipale.swift @@ -0,0 +1,27 @@ +// +// VuePrincipale.swift +// SwiftMvvm +// +// Created by etudiant on 25/05/2023. +// + +import SwiftUI + +struct VuePrincipale: View { + var body: some View { + NavigationStack { + ScrollView { + BlocView() + Divider() + ListUe() + } + .navigationTitle("Calculette") + } + } +} + +struct VuePrincipale_Previews: PreviewProvider { + static var previews: some View { + VuePrincipale() + } +} diff --git a/Sources/SwiftMvvm/SwiftMvvm/Vue/stbmat.swift b/Sources/SwiftMvvm/SwiftMvvm/Vue/stbmat.swift new file mode 100644 index 0000000..ce69614 --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvm/Vue/stbmat.swift @@ -0,0 +1,24 @@ +// +// stbmat.swift +// SwiftMvvm +// +// Created by etudiant on 30/05/2023. +// + +/*import SwiftUI + +/*struct stbmat: View { + let matieres: [Matiere] = [ + Matiere(id: UUID(), nom: "Mathématiques", coefficient: 2.0, note: 15.0), + Matiere(id: UUID(), nom: "Physique", coefficient: 1.5, note: 12.0), + Matiere(id: UUID(), nom: "Chimie", coefficient: 1.0, note: 10.5) + ] + + var body: some View { + VStack { + ForEach(matieres) { matiere in + MatiereUniq(mat: matiere) + } + } + } + }*/*/ diff --git a/Sources/SwiftMvvm/SwiftMvvmTests/SwiftMvvmTests.swift b/Sources/SwiftMvvm/SwiftMvvmTests/SwiftMvvmTests.swift new file mode 100644 index 0000000..6d886bf --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvmTests/SwiftMvvmTests.swift @@ -0,0 +1,36 @@ +// +// SwiftMvvmTests.swift +// SwiftMvvmTests +// +// Created by etudiant on 23/05/2023. +// + +import XCTest +@testable import SwiftMvvm + +final class SwiftMvvmTests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + // Any test you write for XCTest can be annotated as throws and async. + // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error. + // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards. + } + + func testPerformanceExample() throws { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/Sources/SwiftMvvm/SwiftMvvmUITests/SwiftMvvmUITests.swift b/Sources/SwiftMvvm/SwiftMvvmUITests/SwiftMvvmUITests.swift new file mode 100644 index 0000000..eb65c5f --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvmUITests/SwiftMvvmUITests.swift @@ -0,0 +1,41 @@ +// +// SwiftMvvmUITests.swift +// SwiftMvvmUITests +// +// Created by etudiant on 23/05/2023. +// + +import XCTest + +final class SwiftMvvmUITests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // UI tests must launch the application that they test. + let app = XCUIApplication() + app.launch() + + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testLaunchPerformance() throws { + if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) { + // This measures how long it takes to launch your application. + measure(metrics: [XCTApplicationLaunchMetric()]) { + XCUIApplication().launch() + } + } + } +} diff --git a/Sources/SwiftMvvm/SwiftMvvmUITests/SwiftMvvmUITestsLaunchTests.swift b/Sources/SwiftMvvm/SwiftMvvmUITests/SwiftMvvmUITestsLaunchTests.swift new file mode 100644 index 0000000..73e31b1 --- /dev/null +++ b/Sources/SwiftMvvm/SwiftMvvmUITests/SwiftMvvmUITestsLaunchTests.swift @@ -0,0 +1,32 @@ +// +// SwiftMvvmUITestsLaunchTests.swift +// SwiftMvvmUITests +// +// Created by etudiant on 23/05/2023. +// + +import XCTest + +final class SwiftMvvmUITestsLaunchTests: XCTestCase { + + override class var runsForEachTargetApplicationUIConfiguration: Bool { + true + } + + override func setUpWithError() throws { + continueAfterFailure = false + } + + func testLaunch() throws { + let app = XCUIApplication() + app.launch() + + // Insert steps here to perform after app launch but before taking a screenshot, + // such as logging into a test account or navigating somewhere in the app + + let attachment = XCTAttachment(screenshot: app.screenshot()) + attachment.name = "Launch Screen" + attachment.lifetime = .keepAlways + add(attachment) + } +}