From 8993de908df20ffb239e61de23cc0f048ba14743 Mon Sep 17 00:00:00 2001 From: Benedikt Wagner Date: Thu, 3 Jul 2025 10:29:31 +0200 Subject: [PATCH 1/7] add scrum logo --- .../Image.imageset/Contents.json | 20 ---- .../scrumIcon.symbolset/Contents.json | 12 ++ .../scrumIcon.symbolset/scrum.svg | 103 ++++++++++++++++++ .../Features/Home/Views/HomeView.swift | 4 + 4 files changed, 119 insertions(+), 20 deletions(-) delete mode 100644 CloudMaster/Assets.xcassets/Image.imageset/Contents.json create mode 100644 CloudMaster/Assets.xcassets/scrumIcon.symbolset/Contents.json create mode 100644 CloudMaster/Assets.xcassets/scrumIcon.symbolset/scrum.svg diff --git a/CloudMaster/Assets.xcassets/Image.imageset/Contents.json b/CloudMaster/Assets.xcassets/Image.imageset/Contents.json deleted file mode 100644 index a19a549..0000000 --- a/CloudMaster/Assets.xcassets/Image.imageset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/CloudMaster/Assets.xcassets/scrumIcon.symbolset/Contents.json b/CloudMaster/Assets.xcassets/scrumIcon.symbolset/Contents.json new file mode 100644 index 0000000..e2569af --- /dev/null +++ b/CloudMaster/Assets.xcassets/scrumIcon.symbolset/Contents.json @@ -0,0 +1,12 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + }, + "symbols" : [ + { + "filename" : "scrum.svg", + "idiom" : "universal" + } + ] +} diff --git a/CloudMaster/Assets.xcassets/scrumIcon.symbolset/scrum.svg b/CloudMaster/Assets.xcassets/scrumIcon.symbolset/scrum.svg new file mode 100644 index 0000000..7c18d59 --- /dev/null +++ b/CloudMaster/Assets.xcassets/scrumIcon.symbolset/scrum.svg @@ -0,0 +1,103 @@ + + + + + + + + + + Weight/Scale Variations + Ultralight + Thin + Light + Regular + Medium + Semibold + Bold + Heavy + Black + + + + + + + + + + + Design Variations + Symbols are supported in up to nine weights and three scales. + For optimal layout with text and other symbols, vertically align + symbols with the adjacent text. + + + + + + Margins + Leading and trailing margins on the left and right side of each symbol + can be adjusted by modifying the x-location of the margin guidelines. + Modifications are automatically applied proportionally to all + scales and weights. + + + + Exporting + Symbols should be outlined when exporting to ensure the + design is preserved when submitting to Xcode. + Template v.6.0 + Requires Xcode 16 or greater + Generated from scrum + Typeset at 100.0 points + Small + Medium + Large + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CloudMaster/Features/Home/Views/HomeView.swift b/CloudMaster/Features/Home/Views/HomeView.swift index 080437e..e0fe1a2 100644 --- a/CloudMaster/Features/Home/Views/HomeView.swift +++ b/CloudMaster/Features/Home/Views/HomeView.swift @@ -126,6 +126,8 @@ struct StyledCourseRow: View { return "azureIcon" case .gcp: return "gcpIcon" + case .scrum: + return "scrumIcon" case .other: return "otherIcon" } @@ -141,6 +143,8 @@ struct StyledCourseRow: View { return LinearGradient(gradient: Gradient(colors: [color1, color2]), startPoint: .leading, endPoint: .trailing) case .gcp: return LinearGradient(gradient: Gradient(colors: [.red, .green, .yellow, .blue]), startPoint: .leading, endPoint: .trailing) + case .scrum: + return LinearGradient(gradient: Gradient(colors: [.blue, .teal, .teal]), startPoint: .leading, endPoint: .trailing) case .other: let color1 = Color.purple let color2 = Color.pink From ecf5b1204a3891df0ba9977fd078d3dec4be6e1a Mon Sep 17 00:00:00 2001 From: Benedikt Wagner Date: Thu, 3 Jul 2025 10:29:49 +0200 Subject: [PATCH 2/7] add pspo-1 course --- CloudMaster/Constants/Courses.swift | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/CloudMaster/Constants/Courses.swift b/CloudMaster/Constants/Courses.swift index 905397d..b5656af 100644 --- a/CloudMaster/Constants/Courses.swift +++ b/CloudMaster/Constants/Courses.swift @@ -4,6 +4,7 @@ enum CourseCompany: String, Codable, Hashable, CaseIterable { case aws = "Amazon Web Services" case azure = "Microsoft Azure" case gcp = "Google Cloud Platform" + case scrum = "Scrum Alliance" case other = "Others" } @@ -406,7 +407,7 @@ extension Course { shortName: "PSD-1", description: "Verifies a developer’s understanding of Scrum principles and their ability to work effectively within a Scrum team, focusing on collaborative and incremental software development practices.", - company: .other, + company: .scrum, repositoryURL: "https://github.com/Ditectrev/Professional-Scrum-Developer-I-PSD-I-Practice-Tests-Exams-Questions-Answers", questionURL: @@ -424,7 +425,7 @@ extension Course { shortName: "SM-1", description: "Demonstrates advanced proficiency in facilitating and leading Scrum teams, emphasizing the application of Scrum practices, principles, and techniques to maximize team productivity and efficiency.", - company: .other, + company: .scrum, repositoryURL: "https://github.com/Ditectrev/Professional-Scrum-Master-I-PSM-I-Practice-Tests-Exams-Questions-Answers", questionURL: @@ -442,7 +443,7 @@ extension Course { shortName: "SM-2", description: "Demonstrates advanced proficiency in facilitating and leading Scrum teams, emphasizing the application of Scrum practices, principles, and techniques to maximize team productivity and efficiency.", - company: .other, + company: .scrum, repositoryURL: "https://github.com/Ditectrev/Professional-Scrum-Master-II-PSM-II-Practice-Tests-Exams-Questions-Answers", questionURL: @@ -455,5 +456,23 @@ extension Course { ), lastUpdate: nil ), + Course( + fullName: "Scrum Product Owner I", + shortName: "PSPO-1", + description: + "Validates your knowledge of the Scrum framework, with a focus on the role of the Product Owner.", + company: .scrum, + repositoryURL: + "https://github.com/Ditectrev/Scrum-Product-Owner-PSPO-I-Practice-Tests-Exams-Questions-Answers", + questionURL: + "https://raw.githubusercontent.com/Ditectrev/Scrum-Product-Owner-PSPO-I-Practice-Tests-Exams-Questions-Answers/refs/heads/main/README.md", + url: "https://www.scrum.org/assessments/professional-scrum-product-owner-i-certification", + exam: Exam( + quick: ExamDetail(time: 40, questionCount: 20), + intermediate: ExamDetail(time: 84, questionCount: 42), + real: ExamDetail(time: 120, questionCount: 60) + ), + lastUpdate: nil + ), ] } From 1da57e466548f88c4774893d88732e0136d66472 Mon Sep 17 00:00:00 2001 From: Benedikt Wagner Date: Thu, 3 Jul 2025 10:30:02 +0200 Subject: [PATCH 3/7] improve button paddings --- CloudMaster.xcodeproj/project.pbxproj | 22 +++++-------------- .../WorkspaceSettings.xcsettings | 14 ++++++++++++ .../Training/Views/TrainingView.swift | 3 +++ 3 files changed, 23 insertions(+), 16 deletions(-) create mode 100644 CloudMaster.xcodeproj/project.xcworkspace/xcuserdata/benediktwagner.xcuserdatad/WorkspaceSettings.xcsettings diff --git a/CloudMaster.xcodeproj/project.pbxproj b/CloudMaster.xcodeproj/project.pbxproj index 24bda7b..2dbaa67 100644 --- a/CloudMaster.xcodeproj/project.pbxproj +++ b/CloudMaster.xcodeproj/project.pbxproj @@ -219,13 +219,6 @@ path = Common; sourceTree = ""; }; - 8D8D8AA32C05A27800ACC61C /* ViewModels */ = { - isa = PBXGroup; - children = ( - ); - path = ViewModels; - sourceTree = ""; - }; 8D8D8AA52C05A27800ACC61C /* Views */ = { isa = PBXGroup; children = ( @@ -238,7 +231,6 @@ 8D8D8AA62C05A27800ACC61C /* Course */ = { isa = PBXGroup; children = ( - 8D8D8AA32C05A27800ACC61C /* ViewModels */, 8D8D8AA52C05A27800ACC61C /* Views */, ); path = Course; @@ -268,13 +260,6 @@ path = Models; sourceTree = ""; }; - 8D8D8AAC2C05A27800ACC61C /* ViewModels */ = { - isa = PBXGroup; - children = ( - ); - path = ViewModels; - sourceTree = ""; - }; 8D8D8AB22C05A27800ACC61C /* Views */ = { isa = PBXGroup; children = ( @@ -290,7 +275,6 @@ isa = PBXGroup; children = ( 8D8D8AAB2C05A27800ACC61C /* Models */, - 8D8D8AAC2C05A27800ACC61C /* ViewModels */, 8D8D8AB22C05A27800ACC61C /* Views */, ); path = Exam; @@ -795,6 +779,9 @@ PRODUCT_BUNDLE_IDENTIFIER = com.ditectrev.cloudmasterswift; PRODUCT_NAME = "CloudMaster Swift"; PROVISIONING_PROFILE_SPECIFIER = ""; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OBJC_BRIDGING_HEADER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -831,6 +818,9 @@ PRODUCT_BUNDLE_IDENTIFIER = com.ditectrev.cloudmasterswift; PRODUCT_NAME = "CloudMaster Swift"; PROVISIONING_PROFILE_SPECIFIER = ""; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OBJC_BRIDGING_HEADER = ""; SWIFT_VERSION = 5.0; diff --git a/CloudMaster.xcodeproj/project.xcworkspace/xcuserdata/benediktwagner.xcuserdatad/WorkspaceSettings.xcsettings b/CloudMaster.xcodeproj/project.xcworkspace/xcuserdata/benediktwagner.xcuserdatad/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..bbfef02 --- /dev/null +++ b/CloudMaster.xcodeproj/project.xcworkspace/xcuserdata/benediktwagner.xcuserdatad/WorkspaceSettings.xcsettings @@ -0,0 +1,14 @@ + + + + + BuildLocationStyle + UseAppPreferences + CustomBuildLocationType + RelativeToDerivedData + DerivedDataLocationStyle + Default + ShowSharedSchemesAutomaticallyEnabled + + + diff --git a/CloudMaster/Features/Training/Views/TrainingView.swift b/CloudMaster/Features/Training/Views/TrainingView.swift index d1377b5..cbc0138 100644 --- a/CloudMaster/Features/Training/Views/TrainingView.swift +++ b/CloudMaster/Features/Training/Views/TrainingView.swift @@ -58,6 +58,7 @@ struct TrainingView: View { .background(Color.customSecondary) .foregroundColor(.white) .cornerRadius(10) + .padding(.horizontal, 16) } } @@ -71,6 +72,7 @@ struct TrainingView: View { .background(Color.customPrimary) .foregroundColor(.white) .cornerRadius(10) + .padding(.horizontal, 16) } } else { Button(action: { @@ -82,6 +84,7 @@ struct TrainingView: View { .background(Color.customSecondary) .foregroundColor(.white) .cornerRadius(10) + .padding(.horizontal, 16) } } } From a0806c2f9b8be25665025015a17f0e49f4b73adc Mon Sep 17 00:00:00 2001 From: Benedikt Wagner Date: Thu, 3 Jul 2025 10:30:26 +0200 Subject: [PATCH 4/7] bump version to 1.0.6 --- CloudMaster.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CloudMaster.xcodeproj/project.pbxproj b/CloudMaster.xcodeproj/project.pbxproj index 2dbaa67..e60339b 100644 --- a/CloudMaster.xcodeproj/project.pbxproj +++ b/CloudMaster.xcodeproj/project.pbxproj @@ -775,7 +775,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.5; + MARKETING_VERSION = 1.0.6; PRODUCT_BUNDLE_IDENTIFIER = com.ditectrev.cloudmasterswift; PRODUCT_NAME = "CloudMaster Swift"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -814,7 +814,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.5; + MARKETING_VERSION = 1.0.6; PRODUCT_BUNDLE_IDENTIFIER = com.ditectrev.cloudmasterswift; PRODUCT_NAME = "CloudMaster Swift"; PROVISIONING_PROFILE_SPECIFIER = ""; From 19c1d92bb1b812daebc850418cf69f709472cd27 Mon Sep 17 00:00:00 2001 From: Benedikt Wagner Date: Thu, 3 Jul 2025 10:34:42 +0200 Subject: [PATCH 5/7] bump version to 1.0.7 --- CloudMaster.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CloudMaster.xcodeproj/project.pbxproj b/CloudMaster.xcodeproj/project.pbxproj index 0de2ef9..3f41eae 100644 --- a/CloudMaster.xcodeproj/project.pbxproj +++ b/CloudMaster.xcodeproj/project.pbxproj @@ -775,7 +775,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.6; + MARKETING_VERSION = 1.0.7; PRODUCT_BUNDLE_IDENTIFIER = com.ditectrev.cloudmasterswift; PRODUCT_NAME = "CloudMaster Swift"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -814,7 +814,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.6; + MARKETING_VERSION = 1.0.7; PRODUCT_BUNDLE_IDENTIFIER = com.ditectrev.cloudmasterswift; PRODUCT_NAME = "CloudMaster Swift"; PROVISIONING_PROFILE_SPECIFIER = ""; From 114a7f795c220e4817933086d83270e4210d1c63 Mon Sep 17 00:00:00 2001 From: Benedikt Wagner Date: Thu, 10 Jul 2025 14:30:52 +0200 Subject: [PATCH 6/7] added SOA-C02 course --- CloudMaster/Constants/Courses.swift | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/CloudMaster/Constants/Courses.swift b/CloudMaster/Constants/Courses.swift index 78eef8b..442c465 100644 --- a/CloudMaster/Constants/Courses.swift +++ b/CloudMaster/Constants/Courses.swift @@ -205,6 +205,24 @@ extension Course { ), lastUpdate: nil ), + Course( + fullName: "Certified SysOps-Administrator Associate", + shortName: "SOA-C02", + description: + "Focuses on deploying, managing, and operating scalable, highly available, and secure systems on AWS with an emphasis on monitoring, automation, and performance optimization.", + company: .aws, + repositoryURL: + "https://github.com/Ditectrev/AWS-Certified-SysOps-Administrator-Associate-SOA-C02-Practice-Tests-Exams-Questions-Answers", + questionURL: + "https://raw.githubusercontent.com/Ditectrev/AWS-Certified-SysOps-Administrator-Associate-SOA-C02-Practice-Tests-Exams-Questions-Answers/refs/heads/main/README.md", + url: "https://aws.amazon.com/certification/certified-sysops-admin-associate/", + exam: Exam( + quick: ExamDetail(time: 40, questionCount: 20), + intermediate: ExamDetail(time: 84, questionCount: 49), + real: ExamDetail(time: 120, questionCount: 65) + ), + lastUpdate: nil + ), Course( fullName: "Azure Fundamentals", shortName: "AZ-900", From 985c1209968aeaf8c1078d1f2cbcd744f395db26 Mon Sep 17 00:00:00 2001 From: Benedikt Wagner Date: Thu, 10 Jul 2025 14:35:33 +0200 Subject: [PATCH 7/7] add salesforce data cloud consultant course --- CloudMaster/Constants/Courses.swift | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/CloudMaster/Constants/Courses.swift b/CloudMaster/Constants/Courses.swift index 442c465..0a4ee7e 100644 --- a/CloudMaster/Constants/Courses.swift +++ b/CloudMaster/Constants/Courses.swift @@ -448,6 +448,25 @@ extension Course { ), lastUpdate: nil ), + Course( + fullName: "Salesforce Certified Data Cloud Consultant", + shortName: "Salesforce-DC", + description: + "Focuses on implementing and configuring Salesforce Data Cloud solutions, including data ingestion, identity resolution, segmentation, activation, and compliance management.", + company: .other, + repositoryURL: + "https://github.com/Ditectrev/Salesforce-Certified-Data-Cloud-Consultant", + questionURL: + "https://raw.githubusercontent.com/Ditectrev/Salesforce-Certified-Data-Cloud-Consultant/refs/heads/main/README.md", + url: + "https://trailhead.salesforce.com/en/credentials/datacloudconsultant", + exam: Exam( + quick: ExamDetail(time: 40, questionCount: 20), + intermediate: ExamDetail(time: 84, questionCount: 42), + real: ExamDetail(time: 120, questionCount: 60) + ), + lastUpdate: nil + ), Course( fullName: "Scrum Developer I", shortName: "PSD-1",