├── output
├── .DS_Store
├── fmc_output.jpeg
├── fmc_output_0.jpeg
├── fmc_output_1.jpeg
├── fmc_output_2.jpeg
├── fmc_output_3.jpeg
└── fmc_thumbnail.png
├── FillMyCycle
├── Assets.xcassets
│ ├── Contents.json
│ ├── AppIcon.appiconset
│ │ ├── fmc 1.png
│ │ ├── fmc.png
│ │ ├── fmc_ipad_1x.png
│ │ ├── fmc_ipad_2x.png
│ │ ├── fmc_ipad_pro.png
│ │ ├── fmc_ipad_1x (1).png
│ │ ├── fmc_ipad_1x (2).png
│ │ ├── fmc_ipad_spot_1x.png
│ │ ├── fmc_ipad_spot_2x.png
│ │ ├── fmc_iphone_app_2x.png
│ │ ├── fmc_iphone_app_3x.png
│ │ ├── fmc_ipad_setting_2x.png
│ │ ├── fmc_ipad_spot_1x 1.png
│ │ ├── fmc_ipad_spot_1x 3.png
│ │ ├── fmc_ipad_spot_2x 4.png
│ │ ├── fmc_iphone_app_2x 1.png
│ │ ├── fmc_iphone_notif_3x.png
│ │ ├── fmc_ipad_setting_2x 2.png
│ │ ├── fmc_iphone_setting_3x.png
│ │ └── Contents.json
│ └── AccentColor.colorset
│ │ └── Contents.json
├── Preview Content
│ └── Preview Assets.xcassets
│ │ └── Contents.json
├── FillMyCycleApp.swift
├── Models
│ ├── NumbersOnly.swift
│ └── Sheet.swift
├── EvalSheetIndex.swift
├── LabSheetIndex.swift
├── HelpView.swift
├── HomeView.swift
├── ResultView.swift
└── CycleView.swift
├── FillMyCycle.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── project.pbxproj
├── LICENSE
├── README.md
└── .gitignore
/output/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/output/.DS_Store
--------------------------------------------------------------------------------
/output/fmc_output.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/output/fmc_output.jpeg
--------------------------------------------------------------------------------
/output/fmc_output_0.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/output/fmc_output_0.jpeg
--------------------------------------------------------------------------------
/output/fmc_output_1.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/output/fmc_output_1.jpeg
--------------------------------------------------------------------------------
/output/fmc_output_2.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/output/fmc_output_2.jpeg
--------------------------------------------------------------------------------
/output/fmc_output_3.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/output/fmc_output_3.jpeg
--------------------------------------------------------------------------------
/output/fmc_thumbnail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/output/fmc_thumbnail.png
--------------------------------------------------------------------------------
/FillMyCycle/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/FillMyCycle/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc 1.png
--------------------------------------------------------------------------------
/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc.png
--------------------------------------------------------------------------------
/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_1x.png
--------------------------------------------------------------------------------
/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_2x.png
--------------------------------------------------------------------------------
/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_pro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_pro.png
--------------------------------------------------------------------------------
/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_1x (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_1x (1).png
--------------------------------------------------------------------------------
/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_1x (2).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_1x (2).png
--------------------------------------------------------------------------------
/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_spot_1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_spot_1x.png
--------------------------------------------------------------------------------
/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_spot_2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_spot_2x.png
--------------------------------------------------------------------------------
/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_iphone_app_2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_iphone_app_2x.png
--------------------------------------------------------------------------------
/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_iphone_app_3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_iphone_app_3x.png
--------------------------------------------------------------------------------
/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_setting_2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_setting_2x.png
--------------------------------------------------------------------------------
/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_spot_1x 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_spot_1x 1.png
--------------------------------------------------------------------------------
/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_spot_1x 3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_spot_1x 3.png
--------------------------------------------------------------------------------
/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_spot_2x 4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_spot_2x 4.png
--------------------------------------------------------------------------------
/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_iphone_app_2x 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_iphone_app_2x 1.png
--------------------------------------------------------------------------------
/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_iphone_notif_3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_iphone_notif_3x.png
--------------------------------------------------------------------------------
/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_setting_2x 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_ipad_setting_2x 2.png
--------------------------------------------------------------------------------
/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_iphone_setting_3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anamansari062/FillMyCycle/HEAD/FillMyCycle/Assets.xcassets/AppIcon.appiconset/fmc_iphone_setting_3x.png
--------------------------------------------------------------------------------
/FillMyCycle.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/FillMyCycle/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/FillMyCycle.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/FillMyCycle/FillMyCycleApp.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FillMyCycleApp.swift
3 | // FillMyCycle
4 | //
5 | // Created by Anam Ansari on 22/11/22.
6 | //
7 |
8 | import SwiftUI
9 |
10 | @main
11 | struct FillMyCycleApp: App {
12 | var body: some Scene {
13 | WindowGroup {
14 | NavigationView{
15 | HomeView()
16 | }
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/FillMyCycle/Models/NumbersOnly.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NumbersOnly.swift
3 | // FillMyCycle
4 | //
5 | // Created by Anam Ansari on 22/11/22.
6 | //
7 |
8 | import Foundation
9 |
10 | //Makes sure that the value entered is a number
11 | class NumbersOnly: ObservableObject {
12 | @Published var value = "" {
13 | didSet {
14 | let filtered = value.filter { $0.isNumber }
15 |
16 | if value != filtered {
17 | value = filtered
18 | }
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/FillMyCycle/EvalSheetIndex.swift:
--------------------------------------------------------------------------------
1 | //
2 | // EvalSheetIndex.swift
3 | // FillMyCycle
4 | //
5 | // Created by Anam Ansari on 22/11/22.
6 | //
7 |
8 | import SwiftUI
9 |
10 | struct EvalSheetIndex: View {
11 | var rows = ["Cycle", "TK", "TD", "LI", "B", "C", "Total"]
12 |
13 | var body: some View {
14 | HStack {
15 | ForEach(0..<7) { index in
16 | Text(rows[index]).frame(maxWidth: .infinity)
17 | if(index != 6){
18 | Divider()
19 | }
20 | }
21 | }
22 | }
23 | }
24 |
25 | struct EvalSheetIndex_Previews: PreviewProvider {
26 | static var previews: some View {
27 | EvalSheetIndex()
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/FillMyCycle/LabSheetIndex.swift:
--------------------------------------------------------------------------------
1 | //
2 | // LabSheetIndex.swift
3 | // FillMyCycle
4 | //
5 | // Created by Anam Ansari on 22/11/22.
6 | //
7 |
8 | import SwiftUI
9 |
10 | struct LabSheetIndex: View {
11 | var rows = ["Par/ Perf", "E (5)", "VG (4)", "G (3)", "A (2)", "BA (1)"]
12 |
13 | var body: some View {
14 | HStack {
15 | ForEach(0..<6) { index in
16 | Text(rows[index]).frame(maxWidth: .infinity)
17 | if(index != 5){
18 | Divider()
19 | }
20 | }
21 | }
22 | }
23 | }
24 |
25 | struct LabSheetIndex_Previews: PreviewProvider {
26 | static var previews: some View {
27 | LabSheetIndex()
28 | }
29 | }
30 |
31 |
--------------------------------------------------------------------------------
/FillMyCycle/HelpView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // HelpView.swift
3 | // FillMyCycle
4 | //
5 | // Created by Anam Ansari on 22/11/22.
6 | //
7 |
8 | import SwiftUI
9 |
10 | struct HelpView: View {
11 | var body: some View {
12 | List{
13 | Section(){
14 | Text("Enter the cycle numbers, only 10 maximum experiments are allowed.")
15 | Text("Click on Enter Marks.")
16 | Text("Enter respective experiment marks. If you do not enter anything, it will be considered 0. Values above 100 will be considered 100 only.")
17 | Text("Click on Calculate to get the Lab Evaluation Sheet")
18 | }
19 | }
20 | .navigationBarTitle(Text("How to Use"))
21 | .toolbar(){
22 | ToolbarItem(placement: .bottomBar){
23 | Text("[Reach out for Feedbacks](mailto:anamansari062@gmail.com)")
24 | }
25 | }
26 | }
27 | }
28 |
29 | struct HelpView_Previews: PreviewProvider {
30 | static var previews: some View {
31 | NavigationView{
32 | HelpView()
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Anam Ansari
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
Fill My Cycle
2 |
3 |
5 |
6 | Fill My Cycle is an Lab Evaluation Sheet generator. It takes experiments marks and generates the respective evaluation sheet. This app is the IOS Version of [FillMyCycle Android](https://play.google.com/store/apps/details?id=com.sspathare97.fillmycycle)
7 |
8 | ## How to use:
9 | 1. Enter the cycle numbers, only 10 maximum experiments are allowed.
10 | 2. Click on Enter Marks.
11 | 3. Enter respective experiment marks. If you do not enter anything, it will be considered 0. Values above 100 will be considered 100 only.
12 | 4. Click on Calculate to get the Lab Evaluation Sheet
13 |
14 | ## Screenshot
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | ## Demo
23 | [Demo Video](https://youtu.be/8K3t3XawUM4)
24 |
25 | ## Pre-requisites 💻
26 |
27 | Before installation, please make sure you have already installed the following tools:
28 | - [XCode 14.1](https://apps.apple.com/in/app/xcode/id497799835?mt=12)
29 |
30 | some other optional prerequisites if you are interested in contributing.
31 | - [Git](https://git-scm.com/downloads)
32 |
33 | ## Contribution Guidelines 🛠️
34 | 1. Create a new issue or asked to be assigned to one
35 | 2. Fork the project
36 | 3. Clone the project
37 | 4. Create a new branch `git checkout -b new-feature`
38 | 5. Work on the issue
39 | 6. Once all the appropriate changes are done in the files ` git add . `
40 | 7. Add changes to reflect the changes made `git commit -m 'commit message'`
41 | 8. Push to the branch ` git push `
42 | 9. Create a Pull Request with proper description and screenshots/ screen-recording
43 |
44 | ## License 🛡️
45 | FillMyCycle is licensed under the MIT License - see the [`LICENSE`](LICENSE.txt) file for more information.
46 |
47 | ## Support 🙏
48 | Do ⭐️ the project if you like it :)
49 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## User settings
6 | xcuserdata/
7 |
8 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
9 | *.xcscmblueprint
10 | *.xccheckout
11 |
12 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
13 | build/
14 | DerivedData/
15 | *.moved-aside
16 | *.pbxuser
17 | !default.pbxuser
18 | *.mode1v3
19 | !default.mode1v3
20 | *.mode2v3
21 | !default.mode2v3
22 | *.perspectivev3
23 | !default.perspectivev3
24 |
25 | ## Obj-C/Swift specific
26 | *.hmap
27 |
28 | ## App packaging
29 | *.ipa
30 | *.dSYM.zip
31 | *.dSYM
32 |
33 | ## Playgrounds
34 | timeline.xctimeline
35 | playground.xcworkspace
36 |
37 | # Swift Package Manager
38 | #
39 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
40 | # Packages/
41 | # Package.pins
42 | # Package.resolved
43 | # *.xcodeproj
44 | #
45 | # Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
46 | # hence it is not needed unless you have added a package configuration file to your project
47 | # .swiftpm
48 |
49 | .build/
50 |
51 | # CocoaPods
52 | #
53 | # We recommend against adding the Pods directory to your .gitignore. However
54 | # you should judge for yourself, the pros and cons are mentioned at:
55 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
56 | #
57 | # Pods/
58 | #
59 | # Add this line if you want to avoid checking in source code from the Xcode workspace
60 | # *.xcworkspace
61 |
62 | # Carthage
63 | #
64 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
65 | # Carthage/Checkouts
66 |
67 | Carthage/Build/
68 |
69 | # Accio dependency management
70 | Dependencies/
71 | .accio/
72 |
73 | # fastlane
74 | #
75 | # It is recommended to not store the screenshots in the git repo.
76 | # Instead, use fastlane to re-generate the screenshots whenever they are needed.
77 | # For more information about the recommended setup visit:
78 | # https://docs.fastlane.tools/best-practices/source-control/#source-control
79 |
80 | fastlane/report.xml
81 | fastlane/Preview.html
82 | fastlane/screenshots/**/*.png
83 | fastlane/test_output
84 |
85 | # Code Injection
86 | #
87 | # After new code Injection tools there's a generated folder /iOSInjectionProject
88 | # https://github.com/johnno1962/injectionforxcode
89 |
90 | iOSInjectionProject/
91 |
--------------------------------------------------------------------------------
/FillMyCycle/HomeView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // HomeView.swift
3 | // FillMyCycle
4 | //
5 | // Created by Anam Ansari on 22/11/22.
6 | //
7 |
8 | import SwiftUI
9 |
10 | struct HomeView: View {
11 | @State var c1 = 0
12 | @State var c2 = 0
13 |
14 | @ObservedObject var cycle1 = NumbersOnly()
15 | @ObservedObject var cycle2 = NumbersOnly()
16 |
17 | var body: some View {
18 | List{
19 | Section(header: Text("Cycle")){
20 | HStack{
21 | VStack {
22 | Label("Cycle 1", systemImage: "timer")
23 | HStack{
24 | Text("1").frame(maxWidth: .infinity, alignment: .center)
25 | Text("to").frame(maxWidth: .infinity, alignment: .center)
26 | TextField(cycle1.value, text: $cycle1.value)
27 | .multilineTextAlignment(.center)
28 | .keyboardType(.numberPad)
29 | }
30 | }
31 | Divider()
32 | VStack {
33 | Label("Cycle 2", systemImage: "timer")
34 | HStack{
35 | Text(String((Int(cycle1.value) ?? 1) + 1)).frame(maxWidth: .infinity, alignment: .center)
36 | Text("to").frame(maxWidth: .infinity, alignment: .center)
37 | TextField(cycle2.value, text: $cycle2.value).multilineTextAlignment(.center)
38 | .keyboardType(.numberPad)
39 | }
40 | }
41 | }
42 | if(((Int(cycle2.value) ?? 0) > (Int(cycle1.value) ?? 0)) && (Int(cycle2.value) ?? 0) < 11 && (Int(cycle1.value) ?? 0) < 9){
43 | NavigationLink(destination: CycleView(cycle1: $cycle1.value, cycle2: $cycle2.value)){
44 | Text("Enter Marks").frame(maxWidth: .infinity, alignment: .center)
45 | }
46 | }
47 | }
48 |
49 | }
50 | .navigationBarTitle(Text("Fill My Cycle"))
51 | .toolbar(){
52 | ToolbarItem(){
53 | VStack{
54 | NavigationLink(destination: HelpView()){
55 | Text("Help")
56 | }
57 | }
58 | }
59 | ToolbarItem(placement: .bottomBar){
60 | VStack{
61 | Text("Developed by Anam Ansari").font(.footnote)
62 | Text("[@anamansari062](https://linktr.ee/anamansari062)").font(.footnote)
63 | }
64 | }
65 | }
66 | }
67 | }
68 |
69 | struct HomeView_Previews: PreviewProvider {
70 | static var previews: some View {
71 | NavigationView{
72 | HomeView()
73 | }
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/FillMyCycle/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "fmc.png",
5 | "idiom" : "universal",
6 | "platform" : "ios",
7 | "size" : "1024x1024"
8 | },
9 | {
10 | "filename" : "fmc_ipad_spot_1x 3.png",
11 | "idiom" : "iphone",
12 | "scale" : "2x",
13 | "size" : "20x20"
14 | },
15 | {
16 | "filename" : "fmc_iphone_notif_3x.png",
17 | "idiom" : "iphone",
18 | "scale" : "3x",
19 | "size" : "20x20"
20 | },
21 | {
22 | "filename" : "fmc_ipad_setting_2x 2.png",
23 | "idiom" : "iphone",
24 | "scale" : "2x",
25 | "size" : "29x29"
26 | },
27 | {
28 | "filename" : "fmc_iphone_setting_3x.png",
29 | "idiom" : "iphone",
30 | "scale" : "3x",
31 | "size" : "29x29"
32 | },
33 | {
34 | "filename" : "fmc_ipad_spot_2x 4.png",
35 | "idiom" : "iphone",
36 | "scale" : "2x",
37 | "size" : "40x40"
38 | },
39 | {
40 | "filename" : "fmc_iphone_app_2x 1.png",
41 | "idiom" : "iphone",
42 | "scale" : "3x",
43 | "size" : "40x40"
44 | },
45 | {
46 | "filename" : "fmc_iphone_app_2x.png",
47 | "idiom" : "iphone",
48 | "scale" : "2x",
49 | "size" : "60x60"
50 | },
51 | {
52 | "filename" : "fmc_iphone_app_3x.png",
53 | "idiom" : "iphone",
54 | "scale" : "3x",
55 | "size" : "60x60"
56 | },
57 | {
58 | "filename" : "fmc_ipad_1x (2).png",
59 | "idiom" : "ipad",
60 | "scale" : "1x",
61 | "size" : "20x20"
62 | },
63 | {
64 | "filename" : "fmc_ipad_spot_1x 1.png",
65 | "idiom" : "ipad",
66 | "scale" : "2x",
67 | "size" : "20x20"
68 | },
69 | {
70 | "filename" : "fmc_ipad_1x (1).png",
71 | "idiom" : "ipad",
72 | "scale" : "1x",
73 | "size" : "29x29"
74 | },
75 | {
76 | "filename" : "fmc_ipad_setting_2x.png",
77 | "idiom" : "ipad",
78 | "scale" : "2x",
79 | "size" : "29x29"
80 | },
81 | {
82 | "filename" : "fmc_ipad_spot_1x.png",
83 | "idiom" : "ipad",
84 | "scale" : "1x",
85 | "size" : "40x40"
86 | },
87 | {
88 | "filename" : "fmc_ipad_spot_2x.png",
89 | "idiom" : "ipad",
90 | "scale" : "2x",
91 | "size" : "40x40"
92 | },
93 | {
94 | "filename" : "fmc_ipad_1x.png",
95 | "idiom" : "ipad",
96 | "scale" : "1x",
97 | "size" : "76x76"
98 | },
99 | {
100 | "filename" : "fmc_ipad_2x.png",
101 | "idiom" : "ipad",
102 | "scale" : "2x",
103 | "size" : "76x76"
104 | },
105 | {
106 | "filename" : "fmc_ipad_pro.png",
107 | "idiom" : "ipad",
108 | "scale" : "2x",
109 | "size" : "83.5x83.5"
110 | },
111 | {
112 | "filename" : "fmc 1.png",
113 | "idiom" : "ios-marketing",
114 | "scale" : "1x",
115 | "size" : "1024x1024"
116 | }
117 | ],
118 | "info" : {
119 | "author" : "xcode",
120 | "version" : 1
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/FillMyCycle/ResultView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ResultView.swift
3 | // FillMyCycle
4 | //
5 | // Created by Anam Ansari on 22/11/22.
6 | //
7 |
8 | import SwiftUI
9 |
10 | struct ResultView: View {
11 | @StateObject var sheet: Sheet
12 |
13 | var columnsLab = ["TK (30)", "TD (30)", "LI (10)", "B (10)", "C (20)"]
14 | var columnsEval = ["1", "2", "Total", "Average"]
15 |
16 | var body: some View {
17 | List{
18 |
19 | Section(header: Text("Cycle 1")){
20 | // Title row of Cycle 1
21 | LabSheetIndex()
22 | // Other rows of Cycle 1
23 | ForEach(0..<5){i in
24 | HStack {
25 | Text(columnsLab[i]).frame(maxWidth: .infinity)
26 | Divider()
27 | ForEach(0..<5) { index in
28 | if(sheet.cycleT1[i][index] == 1){
29 | Image(systemName: "checkmark").frame(maxWidth: .infinity)
30 | }
31 | else{
32 | Text("").frame(maxWidth: .infinity)
33 | }
34 | if(index != 4){
35 | Divider()
36 | }
37 | }
38 | }
39 | }
40 | }
41 |
42 | Section(header: Text("Cycle 2")){
43 | // Title row for Cycle 2
44 | LabSheetIndex()
45 | // Other rows for Cycle 2
46 | ForEach(0..<5){i in
47 | HStack {
48 | Text(columnsLab[i]).frame(maxWidth: .infinity)
49 | Divider()
50 | ForEach(0..<5) { index in
51 | if(sheet.cycleT2[i][index] == 1){
52 | Image(systemName: "checkmark").frame(maxWidth: .infinity)
53 | }
54 | else{
55 | Text("").frame(maxWidth: .infinity)
56 | }
57 | if(index != 4){
58 | Divider()
59 | }
60 | }
61 | }
62 | }
63 | }
64 |
65 | Section(header: Text("Evaluation Index Sheet")){
66 | // Evaluation Sheet title row
67 | EvalSheetIndex()
68 | // Evaluation Sheet other rows
69 | ForEach(0..<4){i in
70 | HStack {
71 | Text(columnsEval[i]).frame(maxWidth: .infinity)
72 | Divider()
73 | ForEach(0..<6) { index in
74 | Text("\(sheet.evalSheet[i][index])").frame(maxWidth: .infinity)
75 | if(index-5<0){
76 | Divider()
77 | }
78 | }
79 | }
80 | }
81 | }
82 | }
83 |
84 | }
85 | }
86 |
87 | struct ResultView_Previews: PreviewProvider {
88 | static var previews: some View {
89 | ResultView(sheet: Sheet(arr1: ["46", "46"], arr2: ["100", "100"], len1: 2, len2: 2))
90 | }
91 | }
92 |
93 |
--------------------------------------------------------------------------------
/FillMyCycle/Models/Sheet.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Sheet.swift
3 | // FillMyCycle
4 | //
5 | // Created by Anam Ansari on 22/11/22.
6 | //
7 |
8 | import Foundation
9 |
10 | class Sheet: ObservableObject{
11 |
12 | @Published var cycleT1 = [[0, 0, 0, 0, 0],
13 | [0, 0, 0, 0, 0],
14 | [0, 0, 0, 0, 0],
15 | [0, 0, 0, 0, 0],
16 | [0, 0, 0, 0, 0]]
17 |
18 | @Published var cycleT2 = [[0, 0, 0, 0, 0],
19 | [0, 0, 0, 0, 0],
20 | [0, 0, 0, 0, 0],
21 | [0, 0, 0, 0, 0],
22 | [0, 0, 0, 0, 0]]
23 |
24 | @Published var evalSheet = [[0,0,0,0,0,0],
25 | [0,0,0,0,0,0],
26 | [0,0,0,0,0,0],
27 | [0,0,0,0,0,0]]
28 |
29 | @Published private var average1 = 0
30 | @Published private var average2 = 0
31 |
32 | private var c = [6,6,2,2,4]
33 |
34 | private var states = [[0,0,0,0,0],
35 | [0,0,1,0,0],
36 | [0,0,1,1,0],
37 | [1,0,0,0,0],
38 | [1,0,0,1,0],
39 | [1,0,1,1,0],
40 | [1,0,0,1,1],
41 | [1,0,1,1,1],
42 | [1,1,1,1,0],
43 | [1,1,0,1,1]]
44 |
45 | init(arr1: [String], arr2: [String], len1: Int, len2: Int) {
46 | average1 = CalculateAvg(arr: arr1, len: len1)
47 | average2 = CalculateAvg(arr: arr2, len: len1)
48 | cycleT1 = CalculateTicks(avg: average1)
49 | cycleT2 = CalculateTicks(avg: average2)
50 | evalSheet = CalculateEvalSheet(avg1: average1, avg2: average2)
51 | }
52 |
53 | func CalculateAvg(arr: [String], len: Int) -> Int {
54 | var a = 0.0
55 | var avg = 0
56 | for num in arr {
57 | a += Double(num) ?? 0.0
58 | }
59 | a = a / Double(len)
60 | if(a > 100.0){
61 | return 100
62 | }
63 | else if(a < 20.0){
64 | return 20
65 | }
66 |
67 | avg = Int(floor(a))
68 | if(avg%2 == 1){
69 | avg += 1
70 | }
71 |
72 | return avg
73 | }
74 |
75 | func CalculateTicks(avg: Int) -> [[Int]]{
76 | var cycle = [[0, 0, 0, 0, 0],
77 | [0, 0, 0, 0, 0],
78 | [0, 0, 0, 0, 0],
79 | [0, 0, 0, 0, 0],
80 | [0, 0, 0, 0, 0]]
81 |
82 | let mod = (avg%20)/2
83 | let mul = avg/20
84 | for i in 0...4{
85 | cycle[i][5 - (mul + states[mod][i])] = 1
86 | }
87 | return cycle
88 | }
89 |
90 | func CalculateEvalSheet(avg1: Int, avg2: Int) -> [[Int]]{
91 | var evalSheet = [[0,0,0,0,0,0],
92 | [0,0,0,0,0,0],
93 | [0,0,0,0,0,0],
94 | [0,0,0,0,0,0]]
95 |
96 | let mod1 = (avg1%20)/2
97 | let mul1 = avg1/20
98 |
99 | let mod2 = (avg2%20)/2
100 | let mul2 = avg2/20
101 |
102 | var total1 = 0
103 | var total2 = 0
104 |
105 |
106 | for i in 0...4{
107 | evalSheet[0][i] = c[i] * (mul1 + states[mod1][i])
108 | evalSheet[1][i] = c[i] * (mul2 + states[mod2][i])
109 | evalSheet[2][i] = evalSheet[0][i] + evalSheet[1][i]
110 | evalSheet[3][i] = evalSheet[2][i]/2
111 | total1 += evalSheet[0][i]
112 | total2 += evalSheet[1][i]
113 | }
114 |
115 | evalSheet[0][5] = total1
116 | evalSheet[1][5] = total2
117 | evalSheet[2][5] = total1 + total2
118 | evalSheet[3][5] = evalSheet[2][5]/2
119 |
120 | return evalSheet
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/FillMyCycle/CycleView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CycleView.swift
3 | // FillMyCycle
4 | //
5 | // Created by Anam Ansari on 22/11/22.
6 | //
7 |
8 | import SwiftUI
9 |
10 | struct CycleView: View {
11 | @Binding var cycle1: String
12 | @Binding var cycle2: String
13 |
14 | @State private var array1 = ["", "", "", "", "", "", "", ""]
15 | @State private var array2 = ["", "", "", "", "", "", "", "", "", ""]
16 |
17 | @State private var isPresentingResultView = false
18 |
19 | var body: some View {
20 | List{
21 | Section(header: Text("Cycle")){
22 | HStack{
23 | VStack {
24 | Label("Cycle 1", systemImage: "timer")
25 | Spacer()
26 | HStack{
27 | Text("1").frame(maxWidth: .infinity, alignment: .center)
28 | Text("to").frame(maxWidth: .infinity, alignment: .center)
29 | Text(cycle1).frame(maxWidth: .infinity, alignment: .center)
30 | }
31 | }
32 | Divider()
33 | VStack {
34 | Label("Cycle 2", systemImage: "timer")
35 | Spacer()
36 | HStack{
37 | Text(String((Int(cycle1) ?? 0)+1)).frame(maxWidth: .infinity, alignment: .center)
38 | Text("to").frame(maxWidth: .infinity, alignment: .center)
39 | Text(cycle2).frame(maxWidth: .infinity, alignment: .center)
40 | }
41 | }
42 | }
43 | }
44 |
45 | Section(header: Text("Marks")){
46 | HStack{
47 | VStack{
48 | ForEach(0..<(Int(cycle1) ?? 0)){index in
49 | TextField("0", text: $array1[index]).frame(maxWidth: .infinity, alignment: .center).keyboardType(.numberPad)
50 | }
51 | }
52 | Divider()
53 | VStack{
54 | ForEach(0..<((Int(cycle2) ?? 0) - (Int(cycle1) ?? 0))){index in
55 | TextField("0", text: $array2[index]).frame(maxWidth: .infinity, alignment: .center).keyboardType(.numberPad)
56 | }
57 | }
58 | }
59 | Button(action: {
60 | isPresentingResultView = true
61 | }){
62 | Text("Calculate").frame(maxWidth: .infinity, alignment: .center)
63 | }
64 | }
65 | }
66 | .navigationBarTitle(Text("Fill My Cycle"))
67 | .sheet(isPresented: $isPresentingResultView){
68 | NavigationView {
69 | ResultView(sheet: Sheet(arr1: array1, arr2: array2, len1: (Int(cycle1) ?? 0), len2: ((Int(cycle2) ?? 0) - (Int(cycle1) ?? 0))))
70 | .navigationTitle(Text("Lab Evaluation Sheet"))
71 | .toolbar {
72 | ToolbarItem(placement: .confirmationAction) {
73 | Button("Done") {
74 | isPresentingResultView = false
75 | }
76 | }
77 | }
78 | }
79 | }
80 | .toolbar(){
81 | ToolbarItem(){
82 | Button(action: {
83 | array1 = ["", "", "", "", "", "", "", ""]
84 | array2 = ["", "", "", "", "", "", "", "", "", ""]
85 | }){
86 | Text("Reset")
87 | }
88 | }
89 | ToolbarItem(placement: .bottomBar){
90 | VStack{
91 | Text("Developed by Anam Ansari").font(.footnote)
92 | Text("@anamansari062").font(.footnote)
93 | }
94 | }
95 | }
96 | }
97 | }
98 |
99 | struct CycleView_Previews: PreviewProvider {
100 | static var previews: some View {
101 | NavigationView{
102 | CycleView(cycle1: .constant("4"), cycle2: .constant("8"))
103 | }
104 | }
105 | }
106 |
--------------------------------------------------------------------------------
/FillMyCycle.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 56;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 299E6F14292CDEF60068EF94 /* FillMyCycleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 299E6F13292CDEF60068EF94 /* FillMyCycleApp.swift */; };
11 | 299E6F18292CDEF80068EF94 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 299E6F17292CDEF80068EF94 /* Assets.xcassets */; };
12 | 299E6F1B292CDEF80068EF94 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 299E6F1A292CDEF80068EF94 /* Preview Assets.xcassets */; };
13 | 299E6F22292CDFDD0068EF94 /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 299E6F21292CDFDD0068EF94 /* HomeView.swift */; };
14 | 299E6F24292CE01B0068EF94 /* HelpView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 299E6F23292CE01B0068EF94 /* HelpView.swift */; };
15 | 299E6F27292CE0490068EF94 /* NumbersOnly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 299E6F26292CE0490068EF94 /* NumbersOnly.swift */; };
16 | 299E6F29292CE0630068EF94 /* Sheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 299E6F28292CE0630068EF94 /* Sheet.swift */; };
17 | 299E6F2B292CE0820068EF94 /* CycleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 299E6F2A292CE0820068EF94 /* CycleView.swift */; };
18 | 299E6F2D292CE0990068EF94 /* LabSheetIndex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 299E6F2C292CE0990068EF94 /* LabSheetIndex.swift */; };
19 | 299E6F2F292CE0AC0068EF94 /* EvalSheetIndex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 299E6F2E292CE0AC0068EF94 /* EvalSheetIndex.swift */; };
20 | 299E6F31292CE0C00068EF94 /* ResultView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 299E6F30292CE0C00068EF94 /* ResultView.swift */; };
21 | /* End PBXBuildFile section */
22 |
23 | /* Begin PBXFileReference section */
24 | 299E6F10292CDEF60068EF94 /* FillMyCycle.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FillMyCycle.app; sourceTree = BUILT_PRODUCTS_DIR; };
25 | 299E6F13292CDEF60068EF94 /* FillMyCycleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FillMyCycleApp.swift; sourceTree = ""; };
26 | 299E6F17292CDEF80068EF94 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
27 | 299E6F1A292CDEF80068EF94 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
28 | 299E6F21292CDFDD0068EF94 /* HomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeView.swift; sourceTree = ""; };
29 | 299E6F23292CE01B0068EF94 /* HelpView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HelpView.swift; sourceTree = ""; };
30 | 299E6F26292CE0490068EF94 /* NumbersOnly.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NumbersOnly.swift; sourceTree = ""; };
31 | 299E6F28292CE0630068EF94 /* Sheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Sheet.swift; sourceTree = ""; };
32 | 299E6F2A292CE0820068EF94 /* CycleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CycleView.swift; sourceTree = ""; };
33 | 299E6F2C292CE0990068EF94 /* LabSheetIndex.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabSheetIndex.swift; sourceTree = ""; };
34 | 299E6F2E292CE0AC0068EF94 /* EvalSheetIndex.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EvalSheetIndex.swift; sourceTree = ""; };
35 | 299E6F30292CE0C00068EF94 /* ResultView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResultView.swift; sourceTree = ""; };
36 | /* End PBXFileReference section */
37 |
38 | /* Begin PBXFrameworksBuildPhase section */
39 | 299E6F0D292CDEF60068EF94 /* Frameworks */ = {
40 | isa = PBXFrameworksBuildPhase;
41 | buildActionMask = 2147483647;
42 | files = (
43 | );
44 | runOnlyForDeploymentPostprocessing = 0;
45 | };
46 | /* End PBXFrameworksBuildPhase section */
47 |
48 | /* Begin PBXGroup section */
49 | 299E6F07292CDEF60068EF94 = {
50 | isa = PBXGroup;
51 | children = (
52 | 299E6F12292CDEF60068EF94 /* FillMyCycle */,
53 | 299E6F11292CDEF60068EF94 /* Products */,
54 | );
55 | sourceTree = "";
56 | };
57 | 299E6F11292CDEF60068EF94 /* Products */ = {
58 | isa = PBXGroup;
59 | children = (
60 | 299E6F10292CDEF60068EF94 /* FillMyCycle.app */,
61 | );
62 | name = Products;
63 | sourceTree = "";
64 | };
65 | 299E6F12292CDEF60068EF94 /* FillMyCycle */ = {
66 | isa = PBXGroup;
67 | children = (
68 | 299E6F25292CE0390068EF94 /* Models */,
69 | 299E6F13292CDEF60068EF94 /* FillMyCycleApp.swift */,
70 | 299E6F23292CE01B0068EF94 /* HelpView.swift */,
71 | 299E6F17292CDEF80068EF94 /* Assets.xcassets */,
72 | 299E6F19292CDEF80068EF94 /* Preview Content */,
73 | 299E6F21292CDFDD0068EF94 /* HomeView.swift */,
74 | 299E6F2A292CE0820068EF94 /* CycleView.swift */,
75 | 299E6F2C292CE0990068EF94 /* LabSheetIndex.swift */,
76 | 299E6F2E292CE0AC0068EF94 /* EvalSheetIndex.swift */,
77 | 299E6F30292CE0C00068EF94 /* ResultView.swift */,
78 | );
79 | path = FillMyCycle;
80 | sourceTree = "";
81 | };
82 | 299E6F19292CDEF80068EF94 /* Preview Content */ = {
83 | isa = PBXGroup;
84 | children = (
85 | 299E6F1A292CDEF80068EF94 /* Preview Assets.xcassets */,
86 | );
87 | path = "Preview Content";
88 | sourceTree = "";
89 | };
90 | 299E6F25292CE0390068EF94 /* Models */ = {
91 | isa = PBXGroup;
92 | children = (
93 | 299E6F26292CE0490068EF94 /* NumbersOnly.swift */,
94 | 299E6F28292CE0630068EF94 /* Sheet.swift */,
95 | );
96 | path = Models;
97 | sourceTree = "";
98 | };
99 | /* End PBXGroup section */
100 |
101 | /* Begin PBXNativeTarget section */
102 | 299E6F0F292CDEF60068EF94 /* FillMyCycle */ = {
103 | isa = PBXNativeTarget;
104 | buildConfigurationList = 299E6F1E292CDEF80068EF94 /* Build configuration list for PBXNativeTarget "FillMyCycle" */;
105 | buildPhases = (
106 | 299E6F0C292CDEF60068EF94 /* Sources */,
107 | 299E6F0D292CDEF60068EF94 /* Frameworks */,
108 | 299E6F0E292CDEF60068EF94 /* Resources */,
109 | );
110 | buildRules = (
111 | );
112 | dependencies = (
113 | );
114 | name = FillMyCycle;
115 | productName = FillMyCycle;
116 | productReference = 299E6F10292CDEF60068EF94 /* FillMyCycle.app */;
117 | productType = "com.apple.product-type.application";
118 | };
119 | /* End PBXNativeTarget section */
120 |
121 | /* Begin PBXProject section */
122 | 299E6F08292CDEF60068EF94 /* Project object */ = {
123 | isa = PBXProject;
124 | attributes = {
125 | BuildIndependentTargetsInParallel = 1;
126 | LastSwiftUpdateCheck = 1410;
127 | LastUpgradeCheck = 1410;
128 | TargetAttributes = {
129 | 299E6F0F292CDEF60068EF94 = {
130 | CreatedOnToolsVersion = 14.1;
131 | };
132 | };
133 | };
134 | buildConfigurationList = 299E6F0B292CDEF60068EF94 /* Build configuration list for PBXProject "FillMyCycle" */;
135 | compatibilityVersion = "Xcode 14.0";
136 | developmentRegion = en;
137 | hasScannedForEncodings = 0;
138 | knownRegions = (
139 | en,
140 | Base,
141 | );
142 | mainGroup = 299E6F07292CDEF60068EF94;
143 | productRefGroup = 299E6F11292CDEF60068EF94 /* Products */;
144 | projectDirPath = "";
145 | projectRoot = "";
146 | targets = (
147 | 299E6F0F292CDEF60068EF94 /* FillMyCycle */,
148 | );
149 | };
150 | /* End PBXProject section */
151 |
152 | /* Begin PBXResourcesBuildPhase section */
153 | 299E6F0E292CDEF60068EF94 /* Resources */ = {
154 | isa = PBXResourcesBuildPhase;
155 | buildActionMask = 2147483647;
156 | files = (
157 | 299E6F1B292CDEF80068EF94 /* Preview Assets.xcassets in Resources */,
158 | 299E6F18292CDEF80068EF94 /* Assets.xcassets in Resources */,
159 | );
160 | runOnlyForDeploymentPostprocessing = 0;
161 | };
162 | /* End PBXResourcesBuildPhase section */
163 |
164 | /* Begin PBXSourcesBuildPhase section */
165 | 299E6F0C292CDEF60068EF94 /* Sources */ = {
166 | isa = PBXSourcesBuildPhase;
167 | buildActionMask = 2147483647;
168 | files = (
169 | 299E6F2F292CE0AC0068EF94 /* EvalSheetIndex.swift in Sources */,
170 | 299E6F29292CE0630068EF94 /* Sheet.swift in Sources */,
171 | 299E6F31292CE0C00068EF94 /* ResultView.swift in Sources */,
172 | 299E6F14292CDEF60068EF94 /* FillMyCycleApp.swift in Sources */,
173 | 299E6F24292CE01B0068EF94 /* HelpView.swift in Sources */,
174 | 299E6F2B292CE0820068EF94 /* CycleView.swift in Sources */,
175 | 299E6F2D292CE0990068EF94 /* LabSheetIndex.swift in Sources */,
176 | 299E6F27292CE0490068EF94 /* NumbersOnly.swift in Sources */,
177 | 299E6F22292CDFDD0068EF94 /* HomeView.swift in Sources */,
178 | );
179 | runOnlyForDeploymentPostprocessing = 0;
180 | };
181 | /* End PBXSourcesBuildPhase section */
182 |
183 | /* Begin XCBuildConfiguration section */
184 | 299E6F1C292CDEF80068EF94 /* Debug */ = {
185 | isa = XCBuildConfiguration;
186 | buildSettings = {
187 | ALWAYS_SEARCH_USER_PATHS = NO;
188 | CLANG_ANALYZER_NONNULL = YES;
189 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
190 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
191 | CLANG_ENABLE_MODULES = YES;
192 | CLANG_ENABLE_OBJC_ARC = YES;
193 | CLANG_ENABLE_OBJC_WEAK = YES;
194 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
195 | CLANG_WARN_BOOL_CONVERSION = YES;
196 | CLANG_WARN_COMMA = YES;
197 | CLANG_WARN_CONSTANT_CONVERSION = YES;
198 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
199 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
200 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
201 | CLANG_WARN_EMPTY_BODY = YES;
202 | CLANG_WARN_ENUM_CONVERSION = YES;
203 | CLANG_WARN_INFINITE_RECURSION = YES;
204 | CLANG_WARN_INT_CONVERSION = YES;
205 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
206 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
207 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
208 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
209 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
210 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
211 | CLANG_WARN_STRICT_PROTOTYPES = YES;
212 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
213 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
214 | CLANG_WARN_UNREACHABLE_CODE = YES;
215 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
216 | COPY_PHASE_STRIP = NO;
217 | DEBUG_INFORMATION_FORMAT = dwarf;
218 | ENABLE_STRICT_OBJC_MSGSEND = YES;
219 | ENABLE_TESTABILITY = YES;
220 | GCC_C_LANGUAGE_STANDARD = gnu11;
221 | GCC_DYNAMIC_NO_PIC = NO;
222 | GCC_NO_COMMON_BLOCKS = YES;
223 | GCC_OPTIMIZATION_LEVEL = 0;
224 | GCC_PREPROCESSOR_DEFINITIONS = (
225 | "DEBUG=1",
226 | "$(inherited)",
227 | );
228 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
229 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
230 | GCC_WARN_UNDECLARED_SELECTOR = YES;
231 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
232 | GCC_WARN_UNUSED_FUNCTION = YES;
233 | GCC_WARN_UNUSED_VARIABLE = YES;
234 | IPHONEOS_DEPLOYMENT_TARGET = 16.1;
235 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
236 | MTL_FAST_MATH = YES;
237 | ONLY_ACTIVE_ARCH = YES;
238 | SDKROOT = iphoneos;
239 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
240 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
241 | };
242 | name = Debug;
243 | };
244 | 299E6F1D292CDEF80068EF94 /* Release */ = {
245 | isa = XCBuildConfiguration;
246 | buildSettings = {
247 | ALWAYS_SEARCH_USER_PATHS = NO;
248 | CLANG_ANALYZER_NONNULL = YES;
249 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
250 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
251 | CLANG_ENABLE_MODULES = YES;
252 | CLANG_ENABLE_OBJC_ARC = YES;
253 | CLANG_ENABLE_OBJC_WEAK = YES;
254 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
255 | CLANG_WARN_BOOL_CONVERSION = YES;
256 | CLANG_WARN_COMMA = YES;
257 | CLANG_WARN_CONSTANT_CONVERSION = YES;
258 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
259 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
260 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
261 | CLANG_WARN_EMPTY_BODY = YES;
262 | CLANG_WARN_ENUM_CONVERSION = YES;
263 | CLANG_WARN_INFINITE_RECURSION = YES;
264 | CLANG_WARN_INT_CONVERSION = YES;
265 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
266 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
267 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
268 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
269 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
270 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
271 | CLANG_WARN_STRICT_PROTOTYPES = YES;
272 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
273 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
274 | CLANG_WARN_UNREACHABLE_CODE = YES;
275 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
276 | COPY_PHASE_STRIP = NO;
277 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
278 | ENABLE_NS_ASSERTIONS = NO;
279 | ENABLE_STRICT_OBJC_MSGSEND = YES;
280 | GCC_C_LANGUAGE_STANDARD = gnu11;
281 | GCC_NO_COMMON_BLOCKS = YES;
282 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
283 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
284 | GCC_WARN_UNDECLARED_SELECTOR = YES;
285 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
286 | GCC_WARN_UNUSED_FUNCTION = YES;
287 | GCC_WARN_UNUSED_VARIABLE = YES;
288 | IPHONEOS_DEPLOYMENT_TARGET = 16.1;
289 | MTL_ENABLE_DEBUG_INFO = NO;
290 | MTL_FAST_MATH = YES;
291 | SDKROOT = iphoneos;
292 | SWIFT_COMPILATION_MODE = wholemodule;
293 | SWIFT_OPTIMIZATION_LEVEL = "-O";
294 | VALIDATE_PRODUCT = YES;
295 | };
296 | name = Release;
297 | };
298 | 299E6F1F292CDEF80068EF94 /* Debug */ = {
299 | isa = XCBuildConfiguration;
300 | buildSettings = {
301 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
302 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
303 | CODE_SIGN_STYLE = Automatic;
304 | CURRENT_PROJECT_VERSION = 1;
305 | DEVELOPMENT_ASSET_PATHS = "\"FillMyCycle/Preview Content\"";
306 | DEVELOPMENT_TEAM = K75ZLWMD69;
307 | ENABLE_PREVIEWS = YES;
308 | GENERATE_INFOPLIST_FILE = YES;
309 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
310 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
311 | INFOPLIST_KEY_UILaunchScreen_Generation = YES;
312 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
313 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
314 | LD_RUNPATH_SEARCH_PATHS = (
315 | "$(inherited)",
316 | "@executable_path/Frameworks",
317 | );
318 | MARKETING_VERSION = 1.0;
319 | PRODUCT_BUNDLE_IDENTIFIER = com.example.anam.FillMyCycle;
320 | PRODUCT_NAME = "$(TARGET_NAME)";
321 | SWIFT_EMIT_LOC_STRINGS = YES;
322 | SWIFT_VERSION = 5.0;
323 | TARGETED_DEVICE_FAMILY = "1,2";
324 | };
325 | name = Debug;
326 | };
327 | 299E6F20292CDEF80068EF94 /* Release */ = {
328 | isa = XCBuildConfiguration;
329 | buildSettings = {
330 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
331 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
332 | CODE_SIGN_STYLE = Automatic;
333 | CURRENT_PROJECT_VERSION = 1;
334 | DEVELOPMENT_ASSET_PATHS = "\"FillMyCycle/Preview Content\"";
335 | DEVELOPMENT_TEAM = K75ZLWMD69;
336 | ENABLE_PREVIEWS = YES;
337 | GENERATE_INFOPLIST_FILE = YES;
338 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
339 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
340 | INFOPLIST_KEY_UILaunchScreen_Generation = YES;
341 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
342 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
343 | LD_RUNPATH_SEARCH_PATHS = (
344 | "$(inherited)",
345 | "@executable_path/Frameworks",
346 | );
347 | MARKETING_VERSION = 1.0;
348 | PRODUCT_BUNDLE_IDENTIFIER = com.example.anam.FillMyCycle;
349 | PRODUCT_NAME = "$(TARGET_NAME)";
350 | SWIFT_EMIT_LOC_STRINGS = YES;
351 | SWIFT_VERSION = 5.0;
352 | TARGETED_DEVICE_FAMILY = "1,2";
353 | };
354 | name = Release;
355 | };
356 | /* End XCBuildConfiguration section */
357 |
358 | /* Begin XCConfigurationList section */
359 | 299E6F0B292CDEF60068EF94 /* Build configuration list for PBXProject "FillMyCycle" */ = {
360 | isa = XCConfigurationList;
361 | buildConfigurations = (
362 | 299E6F1C292CDEF80068EF94 /* Debug */,
363 | 299E6F1D292CDEF80068EF94 /* Release */,
364 | );
365 | defaultConfigurationIsVisible = 0;
366 | defaultConfigurationName = Release;
367 | };
368 | 299E6F1E292CDEF80068EF94 /* Build configuration list for PBXNativeTarget "FillMyCycle" */ = {
369 | isa = XCConfigurationList;
370 | buildConfigurations = (
371 | 299E6F1F292CDEF80068EF94 /* Debug */,
372 | 299E6F20292CDEF80068EF94 /* Release */,
373 | );
374 | defaultConfigurationIsVisible = 0;
375 | defaultConfigurationName = Release;
376 | };
377 | /* End XCConfigurationList section */
378 | };
379 | rootObject = 299E6F08292CDEF60068EF94 /* Project object */;
380 | }
381 |
--------------------------------------------------------------------------------