├── .gitignore ├── Notely.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── xcuserdata │ └── hipporasy.xcuserdatad │ └── xcschemes │ └── xcschememanagement.plist ├── Notely ├── Assets.xcassets │ ├── AccentColor.colorset │ │ └── Contents.json │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── Contents.json │ ├── audio.sample.imageset │ │ ├── Contents.json │ │ ├── Group.png │ │ ├── Group@2x.png │ │ └── Group@3x.png │ ├── new.note.image.imageset │ │ ├── Contents.json │ │ ├── Rectangle.png │ │ ├── Rectangle@2x.png │ │ └── Rectangle@3x.png │ ├── note.image.imageset │ │ ├── Contents.json │ │ ├── Rectangle.png │ │ ├── Rectangle@2x.png │ │ └── Rectangle@3x.png │ ├── profile.imageset │ │ ├── Contents.json │ │ ├── Rectangle.png │ │ ├── Rectangle@2x.png │ │ └── Rectangle@3x.png │ └── splash.imageset │ │ ├── Contents.json │ │ ├── Group.png │ │ ├── Group@2x.png │ │ └── Group@3x.png ├── ContentView.swift ├── Extension │ ├── Color+Extension.swift │ └── Font+Extension.swift ├── Font │ ├── Metropolis-Black.otf │ ├── Metropolis-Bold.otf │ ├── Metropolis-Medium.otf │ ├── Metropolis-Regular.otf │ └── Metropolis-SemiBold.otf ├── HomeView.swift ├── Info.plist ├── Model │ └── Note.swift ├── NoteDetailView.swift ├── NotelyApp.swift └── Preview Content │ └── Preview Assets.xcassets │ └── Contents.json ├── NotelyTests ├── Info.plist └── NotelyTests.swift ├── NotelyUITests ├── Info.plist └── NotelyUITests.swift └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | ## Build generated 3 | build/ 4 | DerivedData/ 5 | 6 | ## Various settings 7 | *.pbxuser 8 | !default.pbxuser 9 | *.mode1v3 10 | !default.mode1v3 11 | *.mode2v3 12 | !default.mode2v3 13 | *.perspectivev3 14 | !default.perspectivev3 15 | xcuserdata/ 16 | 17 | ## Other 18 | *.moved-aside 19 | *.xccheckout 20 | *.xcscmblueprint 21 | 22 | -------------------------------------------------------------------------------- /Notely.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | F743C5E025AB00D9001815C9 /* Metropolis-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = F71E05F925AAED9400F5781E /* Metropolis-Bold.otf */; }; 11 | F78EAEB725A98BAE00377CAF /* NotelyApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = F78EAEB625A98BAE00377CAF /* NotelyApp.swift */; }; 12 | F78EAEB925A98BAE00377CAF /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F78EAEB825A98BAE00377CAF /* ContentView.swift */; }; 13 | F78EAEBB25A98BAF00377CAF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F78EAEBA25A98BAF00377CAF /* Assets.xcassets */; }; 14 | F78EAEBE25A98BAF00377CAF /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F78EAEBD25A98BAF00377CAF /* Preview Assets.xcassets */; }; 15 | F78EAEC925A98BAF00377CAF /* NotelyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F78EAEC825A98BAF00377CAF /* NotelyTests.swift */; }; 16 | F78EAED425A98BAF00377CAF /* NotelyUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F78EAED325A98BAF00377CAF /* NotelyUITests.swift */; }; 17 | F78EAEF025A9959300377CAF /* Metropolis-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = F78EAEEC25A994B800377CAF /* Metropolis-Medium.otf */; }; 18 | F78EAEF425A9959700377CAF /* Metropolis-Black.otf in Resources */ = {isa = PBXBuildFile; fileRef = F78EAEE925A9949D00377CAF /* Metropolis-Black.otf */; }; 19 | F78EAEF825A9959A00377CAF /* Metropolis-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = F78EAEEB25A994AD00377CAF /* Metropolis-Regular.otf */; }; 20 | F78EAEFC25A9959E00377CAF /* Metropolis-SemiBold.otf in Resources */ = {isa = PBXBuildFile; fileRef = F78EAEEA25A994A600377CAF /* Metropolis-SemiBold.otf */; }; 21 | F7D2D64925ACC677005AC744 /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7D2D64825ACC677005AC744 /* HomeView.swift */; }; 22 | F7D2D64F25ACCC93005AC744 /* Note.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7D2D64E25ACCC93005AC744 /* Note.swift */; }; 23 | F7D2D65A25ACCFC6005AC744 /* NoteDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7D2D65925ACCFC6005AC744 /* NoteDetailView.swift */; }; 24 | F7F37B1925AAE1930066B9DB /* Color+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F37B1825AAE1930066B9DB /* Color+Extension.swift */; }; 25 | F7FC9D7525AAE49F00FD126C /* Font+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7FC9D7425AAE49F00FD126C /* Font+Extension.swift */; }; 26 | /* End PBXBuildFile section */ 27 | 28 | /* Begin PBXContainerItemProxy section */ 29 | F78EAEC525A98BAF00377CAF /* PBXContainerItemProxy */ = { 30 | isa = PBXContainerItemProxy; 31 | containerPortal = F78EAEAB25A98BAE00377CAF /* Project object */; 32 | proxyType = 1; 33 | remoteGlobalIDString = F78EAEB225A98BAE00377CAF; 34 | remoteInfo = Notely; 35 | }; 36 | F78EAED025A98BAF00377CAF /* PBXContainerItemProxy */ = { 37 | isa = PBXContainerItemProxy; 38 | containerPortal = F78EAEAB25A98BAE00377CAF /* Project object */; 39 | proxyType = 1; 40 | remoteGlobalIDString = F78EAEB225A98BAE00377CAF; 41 | remoteInfo = Notely; 42 | }; 43 | /* End PBXContainerItemProxy section */ 44 | 45 | /* Begin PBXFileReference section */ 46 | F71E05F925AAED9400F5781E /* Metropolis-Bold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Metropolis-Bold.otf"; sourceTree = ""; }; 47 | F78EAEB325A98BAE00377CAF /* Notely.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Notely.app; sourceTree = BUILT_PRODUCTS_DIR; }; 48 | F78EAEB625A98BAE00377CAF /* NotelyApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotelyApp.swift; sourceTree = ""; }; 49 | F78EAEB825A98BAE00377CAF /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; 50 | F78EAEBA25A98BAF00377CAF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 51 | F78EAEBD25A98BAF00377CAF /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; 52 | F78EAEBF25A98BAF00377CAF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 53 | F78EAEC425A98BAF00377CAF /* NotelyTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NotelyTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 54 | F78EAEC825A98BAF00377CAF /* NotelyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotelyTests.swift; sourceTree = ""; }; 55 | F78EAECA25A98BAF00377CAF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 56 | F78EAECF25A98BAF00377CAF /* NotelyUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NotelyUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 57 | F78EAED325A98BAF00377CAF /* NotelyUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotelyUITests.swift; sourceTree = ""; }; 58 | F78EAED525A98BAF00377CAF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 59 | F78EAEE925A9949D00377CAF /* Metropolis-Black.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Metropolis-Black.otf"; sourceTree = ""; }; 60 | F78EAEEA25A994A600377CAF /* Metropolis-SemiBold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Metropolis-SemiBold.otf"; sourceTree = ""; }; 61 | F78EAEEB25A994AD00377CAF /* Metropolis-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Metropolis-Regular.otf"; sourceTree = ""; }; 62 | F78EAEEC25A994B800377CAF /* Metropolis-Medium.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Metropolis-Medium.otf"; sourceTree = ""; }; 63 | F7D2D64825ACC677005AC744 /* HomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeView.swift; sourceTree = ""; }; 64 | F7D2D64E25ACCC93005AC744 /* Note.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Note.swift; sourceTree = ""; }; 65 | F7D2D65925ACCFC6005AC744 /* NoteDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteDetailView.swift; sourceTree = ""; }; 66 | F7F37B1825AAE1930066B9DB /* Color+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Color+Extension.swift"; sourceTree = ""; }; 67 | F7FC9D7425AAE49F00FD126C /* Font+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Font+Extension.swift"; sourceTree = ""; }; 68 | /* End PBXFileReference section */ 69 | 70 | /* Begin PBXFrameworksBuildPhase section */ 71 | F78EAEB025A98BAE00377CAF /* Frameworks */ = { 72 | isa = PBXFrameworksBuildPhase; 73 | buildActionMask = 2147483647; 74 | files = ( 75 | ); 76 | runOnlyForDeploymentPostprocessing = 0; 77 | }; 78 | F78EAEC125A98BAF00377CAF /* Frameworks */ = { 79 | isa = PBXFrameworksBuildPhase; 80 | buildActionMask = 2147483647; 81 | files = ( 82 | ); 83 | runOnlyForDeploymentPostprocessing = 0; 84 | }; 85 | F78EAECC25A98BAF00377CAF /* Frameworks */ = { 86 | isa = PBXFrameworksBuildPhase; 87 | buildActionMask = 2147483647; 88 | files = ( 89 | ); 90 | runOnlyForDeploymentPostprocessing = 0; 91 | }; 92 | /* End PBXFrameworksBuildPhase section */ 93 | 94 | /* Begin PBXGroup section */ 95 | F78EAEAA25A98BAE00377CAF = { 96 | isa = PBXGroup; 97 | children = ( 98 | F78EAEB525A98BAE00377CAF /* Notely */, 99 | F78EAEC725A98BAF00377CAF /* NotelyTests */, 100 | F78EAED225A98BAF00377CAF /* NotelyUITests */, 101 | F78EAEB425A98BAE00377CAF /* Products */, 102 | ); 103 | sourceTree = ""; 104 | }; 105 | F78EAEB425A98BAE00377CAF /* Products */ = { 106 | isa = PBXGroup; 107 | children = ( 108 | F78EAEB325A98BAE00377CAF /* Notely.app */, 109 | F78EAEC425A98BAF00377CAF /* NotelyTests.xctest */, 110 | F78EAECF25A98BAF00377CAF /* NotelyUITests.xctest */, 111 | ); 112 | name = Products; 113 | sourceTree = ""; 114 | }; 115 | F78EAEB525A98BAE00377CAF /* Notely */ = { 116 | isa = PBXGroup; 117 | children = ( 118 | F7D2D64D25ACCC8C005AC744 /* Model */, 119 | F7F37B1725AAE1880066B9DB /* Extension */, 120 | F78EAEE825A9949500377CAF /* Font */, 121 | F78EAEB625A98BAE00377CAF /* NotelyApp.swift */, 122 | F78EAEB825A98BAE00377CAF /* ContentView.swift */, 123 | F7D2D64825ACC677005AC744 /* HomeView.swift */, 124 | F7D2D65925ACCFC6005AC744 /* NoteDetailView.swift */, 125 | F78EAEBA25A98BAF00377CAF /* Assets.xcassets */, 126 | F78EAEBF25A98BAF00377CAF /* Info.plist */, 127 | F78EAEBC25A98BAF00377CAF /* Preview Content */, 128 | ); 129 | path = Notely; 130 | sourceTree = ""; 131 | }; 132 | F78EAEBC25A98BAF00377CAF /* Preview Content */ = { 133 | isa = PBXGroup; 134 | children = ( 135 | F78EAEBD25A98BAF00377CAF /* Preview Assets.xcassets */, 136 | ); 137 | path = "Preview Content"; 138 | sourceTree = ""; 139 | }; 140 | F78EAEC725A98BAF00377CAF /* NotelyTests */ = { 141 | isa = PBXGroup; 142 | children = ( 143 | F78EAEC825A98BAF00377CAF /* NotelyTests.swift */, 144 | F78EAECA25A98BAF00377CAF /* Info.plist */, 145 | ); 146 | path = NotelyTests; 147 | sourceTree = ""; 148 | }; 149 | F78EAED225A98BAF00377CAF /* NotelyUITests */ = { 150 | isa = PBXGroup; 151 | children = ( 152 | F78EAED325A98BAF00377CAF /* NotelyUITests.swift */, 153 | F78EAED525A98BAF00377CAF /* Info.plist */, 154 | ); 155 | path = NotelyUITests; 156 | sourceTree = ""; 157 | }; 158 | F78EAEE825A9949500377CAF /* Font */ = { 159 | isa = PBXGroup; 160 | children = ( 161 | F71E05F925AAED9400F5781E /* Metropolis-Bold.otf */, 162 | F78EAEEA25A994A600377CAF /* Metropolis-SemiBold.otf */, 163 | F78EAEEB25A994AD00377CAF /* Metropolis-Regular.otf */, 164 | F78EAEE925A9949D00377CAF /* Metropolis-Black.otf */, 165 | F78EAEEC25A994B800377CAF /* Metropolis-Medium.otf */, 166 | ); 167 | path = Font; 168 | sourceTree = ""; 169 | }; 170 | F7D2D64D25ACCC8C005AC744 /* Model */ = { 171 | isa = PBXGroup; 172 | children = ( 173 | F7D2D64E25ACCC93005AC744 /* Note.swift */, 174 | ); 175 | path = Model; 176 | sourceTree = ""; 177 | }; 178 | F7F37B1725AAE1880066B9DB /* Extension */ = { 179 | isa = PBXGroup; 180 | children = ( 181 | F7F37B1825AAE1930066B9DB /* Color+Extension.swift */, 182 | F7FC9D7425AAE49F00FD126C /* Font+Extension.swift */, 183 | ); 184 | path = Extension; 185 | sourceTree = ""; 186 | }; 187 | /* End PBXGroup section */ 188 | 189 | /* Begin PBXNativeTarget section */ 190 | F78EAEB225A98BAE00377CAF /* Notely */ = { 191 | isa = PBXNativeTarget; 192 | buildConfigurationList = F78EAED825A98BAF00377CAF /* Build configuration list for PBXNativeTarget "Notely" */; 193 | buildPhases = ( 194 | F78EAEAF25A98BAE00377CAF /* Sources */, 195 | F78EAEB025A98BAE00377CAF /* Frameworks */, 196 | F78EAEB125A98BAE00377CAF /* Resources */, 197 | ); 198 | buildRules = ( 199 | ); 200 | dependencies = ( 201 | ); 202 | name = Notely; 203 | productName = Notely; 204 | productReference = F78EAEB325A98BAE00377CAF /* Notely.app */; 205 | productType = "com.apple.product-type.application"; 206 | }; 207 | F78EAEC325A98BAF00377CAF /* NotelyTests */ = { 208 | isa = PBXNativeTarget; 209 | buildConfigurationList = F78EAEDB25A98BAF00377CAF /* Build configuration list for PBXNativeTarget "NotelyTests" */; 210 | buildPhases = ( 211 | F78EAEC025A98BAF00377CAF /* Sources */, 212 | F78EAEC125A98BAF00377CAF /* Frameworks */, 213 | F78EAEC225A98BAF00377CAF /* Resources */, 214 | ); 215 | buildRules = ( 216 | ); 217 | dependencies = ( 218 | F78EAEC625A98BAF00377CAF /* PBXTargetDependency */, 219 | ); 220 | name = NotelyTests; 221 | productName = NotelyTests; 222 | productReference = F78EAEC425A98BAF00377CAF /* NotelyTests.xctest */; 223 | productType = "com.apple.product-type.bundle.unit-test"; 224 | }; 225 | F78EAECE25A98BAF00377CAF /* NotelyUITests */ = { 226 | isa = PBXNativeTarget; 227 | buildConfigurationList = F78EAEDE25A98BAF00377CAF /* Build configuration list for PBXNativeTarget "NotelyUITests" */; 228 | buildPhases = ( 229 | F78EAECB25A98BAF00377CAF /* Sources */, 230 | F78EAECC25A98BAF00377CAF /* Frameworks */, 231 | F78EAECD25A98BAF00377CAF /* Resources */, 232 | ); 233 | buildRules = ( 234 | ); 235 | dependencies = ( 236 | F78EAED125A98BAF00377CAF /* PBXTargetDependency */, 237 | ); 238 | name = NotelyUITests; 239 | productName = NotelyUITests; 240 | productReference = F78EAECF25A98BAF00377CAF /* NotelyUITests.xctest */; 241 | productType = "com.apple.product-type.bundle.ui-testing"; 242 | }; 243 | /* End PBXNativeTarget section */ 244 | 245 | /* Begin PBXProject section */ 246 | F78EAEAB25A98BAE00377CAF /* Project object */ = { 247 | isa = PBXProject; 248 | attributes = { 249 | LastSwiftUpdateCheck = 1230; 250 | LastUpgradeCheck = 1230; 251 | TargetAttributes = { 252 | F78EAEB225A98BAE00377CAF = { 253 | CreatedOnToolsVersion = 12.3; 254 | }; 255 | F78EAEC325A98BAF00377CAF = { 256 | CreatedOnToolsVersion = 12.3; 257 | TestTargetID = F78EAEB225A98BAE00377CAF; 258 | }; 259 | F78EAECE25A98BAF00377CAF = { 260 | CreatedOnToolsVersion = 12.3; 261 | TestTargetID = F78EAEB225A98BAE00377CAF; 262 | }; 263 | }; 264 | }; 265 | buildConfigurationList = F78EAEAE25A98BAE00377CAF /* Build configuration list for PBXProject "Notely" */; 266 | compatibilityVersion = "Xcode 9.3"; 267 | developmentRegion = en; 268 | hasScannedForEncodings = 0; 269 | knownRegions = ( 270 | en, 271 | Base, 272 | ); 273 | mainGroup = F78EAEAA25A98BAE00377CAF; 274 | productRefGroup = F78EAEB425A98BAE00377CAF /* Products */; 275 | projectDirPath = ""; 276 | projectRoot = ""; 277 | targets = ( 278 | F78EAEB225A98BAE00377CAF /* Notely */, 279 | F78EAEC325A98BAF00377CAF /* NotelyTests */, 280 | F78EAECE25A98BAF00377CAF /* NotelyUITests */, 281 | ); 282 | }; 283 | /* End PBXProject section */ 284 | 285 | /* Begin PBXResourcesBuildPhase section */ 286 | F78EAEB125A98BAE00377CAF /* Resources */ = { 287 | isa = PBXResourcesBuildPhase; 288 | buildActionMask = 2147483647; 289 | files = ( 290 | F78EAEF825A9959A00377CAF /* Metropolis-Regular.otf in Resources */, 291 | F78EAEBE25A98BAF00377CAF /* Preview Assets.xcassets in Resources */, 292 | F78EAEF025A9959300377CAF /* Metropolis-Medium.otf in Resources */, 293 | F78EAEBB25A98BAF00377CAF /* Assets.xcassets in Resources */, 294 | F78EAEFC25A9959E00377CAF /* Metropolis-SemiBold.otf in Resources */, 295 | F743C5E025AB00D9001815C9 /* Metropolis-Bold.otf in Resources */, 296 | F78EAEF425A9959700377CAF /* Metropolis-Black.otf in Resources */, 297 | ); 298 | runOnlyForDeploymentPostprocessing = 0; 299 | }; 300 | F78EAEC225A98BAF00377CAF /* Resources */ = { 301 | isa = PBXResourcesBuildPhase; 302 | buildActionMask = 2147483647; 303 | files = ( 304 | ); 305 | runOnlyForDeploymentPostprocessing = 0; 306 | }; 307 | F78EAECD25A98BAF00377CAF /* Resources */ = { 308 | isa = PBXResourcesBuildPhase; 309 | buildActionMask = 2147483647; 310 | files = ( 311 | ); 312 | runOnlyForDeploymentPostprocessing = 0; 313 | }; 314 | /* End PBXResourcesBuildPhase section */ 315 | 316 | /* Begin PBXSourcesBuildPhase section */ 317 | F78EAEAF25A98BAE00377CAF /* Sources */ = { 318 | isa = PBXSourcesBuildPhase; 319 | buildActionMask = 2147483647; 320 | files = ( 321 | F78EAEB925A98BAE00377CAF /* ContentView.swift in Sources */, 322 | F7F37B1925AAE1930066B9DB /* Color+Extension.swift in Sources */, 323 | F7FC9D7525AAE49F00FD126C /* Font+Extension.swift in Sources */, 324 | F7D2D64925ACC677005AC744 /* HomeView.swift in Sources */, 325 | F78EAEB725A98BAE00377CAF /* NotelyApp.swift in Sources */, 326 | F7D2D64F25ACCC93005AC744 /* Note.swift in Sources */, 327 | F7D2D65A25ACCFC6005AC744 /* NoteDetailView.swift in Sources */, 328 | ); 329 | runOnlyForDeploymentPostprocessing = 0; 330 | }; 331 | F78EAEC025A98BAF00377CAF /* Sources */ = { 332 | isa = PBXSourcesBuildPhase; 333 | buildActionMask = 2147483647; 334 | files = ( 335 | F78EAEC925A98BAF00377CAF /* NotelyTests.swift in Sources */, 336 | ); 337 | runOnlyForDeploymentPostprocessing = 0; 338 | }; 339 | F78EAECB25A98BAF00377CAF /* Sources */ = { 340 | isa = PBXSourcesBuildPhase; 341 | buildActionMask = 2147483647; 342 | files = ( 343 | F78EAED425A98BAF00377CAF /* NotelyUITests.swift in Sources */, 344 | ); 345 | runOnlyForDeploymentPostprocessing = 0; 346 | }; 347 | /* End PBXSourcesBuildPhase section */ 348 | 349 | /* Begin PBXTargetDependency section */ 350 | F78EAEC625A98BAF00377CAF /* PBXTargetDependency */ = { 351 | isa = PBXTargetDependency; 352 | target = F78EAEB225A98BAE00377CAF /* Notely */; 353 | targetProxy = F78EAEC525A98BAF00377CAF /* PBXContainerItemProxy */; 354 | }; 355 | F78EAED125A98BAF00377CAF /* PBXTargetDependency */ = { 356 | isa = PBXTargetDependency; 357 | target = F78EAEB225A98BAE00377CAF /* Notely */; 358 | targetProxy = F78EAED025A98BAF00377CAF /* PBXContainerItemProxy */; 359 | }; 360 | /* End PBXTargetDependency section */ 361 | 362 | /* Begin XCBuildConfiguration section */ 363 | F78EAED625A98BAF00377CAF /* Debug */ = { 364 | isa = XCBuildConfiguration; 365 | buildSettings = { 366 | ALWAYS_SEARCH_USER_PATHS = NO; 367 | CLANG_ANALYZER_NONNULL = YES; 368 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 369 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 370 | CLANG_CXX_LIBRARY = "libc++"; 371 | CLANG_ENABLE_MODULES = YES; 372 | CLANG_ENABLE_OBJC_ARC = YES; 373 | CLANG_ENABLE_OBJC_WEAK = YES; 374 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 375 | CLANG_WARN_BOOL_CONVERSION = YES; 376 | CLANG_WARN_COMMA = YES; 377 | CLANG_WARN_CONSTANT_CONVERSION = YES; 378 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 379 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 380 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 381 | CLANG_WARN_EMPTY_BODY = YES; 382 | CLANG_WARN_ENUM_CONVERSION = YES; 383 | CLANG_WARN_INFINITE_RECURSION = YES; 384 | CLANG_WARN_INT_CONVERSION = YES; 385 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 386 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 387 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 388 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 389 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 390 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 391 | CLANG_WARN_STRICT_PROTOTYPES = YES; 392 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 393 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 394 | CLANG_WARN_UNREACHABLE_CODE = YES; 395 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 396 | COPY_PHASE_STRIP = NO; 397 | DEBUG_INFORMATION_FORMAT = dwarf; 398 | ENABLE_STRICT_OBJC_MSGSEND = YES; 399 | ENABLE_TESTABILITY = YES; 400 | GCC_C_LANGUAGE_STANDARD = gnu11; 401 | GCC_DYNAMIC_NO_PIC = NO; 402 | GCC_NO_COMMON_BLOCKS = YES; 403 | GCC_OPTIMIZATION_LEVEL = 0; 404 | GCC_PREPROCESSOR_DEFINITIONS = ( 405 | "DEBUG=1", 406 | "$(inherited)", 407 | ); 408 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 409 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 410 | GCC_WARN_UNDECLARED_SELECTOR = YES; 411 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 412 | GCC_WARN_UNUSED_FUNCTION = YES; 413 | GCC_WARN_UNUSED_VARIABLE = YES; 414 | IPHONEOS_DEPLOYMENT_TARGET = 14.3; 415 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 416 | MTL_FAST_MATH = YES; 417 | ONLY_ACTIVE_ARCH = YES; 418 | SDKROOT = iphoneos; 419 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 420 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 421 | }; 422 | name = Debug; 423 | }; 424 | F78EAED725A98BAF00377CAF /* Release */ = { 425 | isa = XCBuildConfiguration; 426 | buildSettings = { 427 | ALWAYS_SEARCH_USER_PATHS = NO; 428 | CLANG_ANALYZER_NONNULL = YES; 429 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 430 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 431 | CLANG_CXX_LIBRARY = "libc++"; 432 | CLANG_ENABLE_MODULES = YES; 433 | CLANG_ENABLE_OBJC_ARC = YES; 434 | CLANG_ENABLE_OBJC_WEAK = YES; 435 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 436 | CLANG_WARN_BOOL_CONVERSION = YES; 437 | CLANG_WARN_COMMA = YES; 438 | CLANG_WARN_CONSTANT_CONVERSION = YES; 439 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 440 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 441 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 442 | CLANG_WARN_EMPTY_BODY = YES; 443 | CLANG_WARN_ENUM_CONVERSION = YES; 444 | CLANG_WARN_INFINITE_RECURSION = YES; 445 | CLANG_WARN_INT_CONVERSION = YES; 446 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 447 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 448 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 449 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 450 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 451 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 452 | CLANG_WARN_STRICT_PROTOTYPES = YES; 453 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 454 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 455 | CLANG_WARN_UNREACHABLE_CODE = YES; 456 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 457 | COPY_PHASE_STRIP = NO; 458 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 459 | ENABLE_NS_ASSERTIONS = NO; 460 | ENABLE_STRICT_OBJC_MSGSEND = YES; 461 | GCC_C_LANGUAGE_STANDARD = gnu11; 462 | GCC_NO_COMMON_BLOCKS = YES; 463 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 464 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 465 | GCC_WARN_UNDECLARED_SELECTOR = YES; 466 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 467 | GCC_WARN_UNUSED_FUNCTION = YES; 468 | GCC_WARN_UNUSED_VARIABLE = YES; 469 | IPHONEOS_DEPLOYMENT_TARGET = 14.3; 470 | MTL_ENABLE_DEBUG_INFO = NO; 471 | MTL_FAST_MATH = YES; 472 | SDKROOT = iphoneos; 473 | SWIFT_COMPILATION_MODE = wholemodule; 474 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 475 | VALIDATE_PRODUCT = YES; 476 | }; 477 | name = Release; 478 | }; 479 | F78EAED925A98BAF00377CAF /* Debug */ = { 480 | isa = XCBuildConfiguration; 481 | buildSettings = { 482 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 483 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 484 | CODE_SIGN_STYLE = Automatic; 485 | DEVELOPMENT_ASSET_PATHS = "\"Notely/Preview Content\""; 486 | DEVELOPMENT_TEAM = ZUNYJ43SN4; 487 | ENABLE_PREVIEWS = YES; 488 | INFOPLIST_FILE = Notely/Info.plist; 489 | IPHONEOS_DEPLOYMENT_TARGET = 14.0; 490 | LD_RUNPATH_SEARCH_PATHS = ( 491 | "$(inherited)", 492 | "@executable_path/Frameworks", 493 | ); 494 | PRODUCT_BUNDLE_IDENTIFIER = com.hipporasy.Notely; 495 | PRODUCT_NAME = "$(TARGET_NAME)"; 496 | SWIFT_VERSION = 5.0; 497 | TARGETED_DEVICE_FAMILY = "1,2"; 498 | }; 499 | name = Debug; 500 | }; 501 | F78EAEDA25A98BAF00377CAF /* Release */ = { 502 | isa = XCBuildConfiguration; 503 | buildSettings = { 504 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 505 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 506 | CODE_SIGN_STYLE = Automatic; 507 | DEVELOPMENT_ASSET_PATHS = "\"Notely/Preview Content\""; 508 | DEVELOPMENT_TEAM = ZUNYJ43SN4; 509 | ENABLE_PREVIEWS = YES; 510 | INFOPLIST_FILE = Notely/Info.plist; 511 | IPHONEOS_DEPLOYMENT_TARGET = 14.0; 512 | LD_RUNPATH_SEARCH_PATHS = ( 513 | "$(inherited)", 514 | "@executable_path/Frameworks", 515 | ); 516 | PRODUCT_BUNDLE_IDENTIFIER = com.hipporasy.Notely; 517 | PRODUCT_NAME = "$(TARGET_NAME)"; 518 | SWIFT_VERSION = 5.0; 519 | TARGETED_DEVICE_FAMILY = "1,2"; 520 | }; 521 | name = Release; 522 | }; 523 | F78EAEDC25A98BAF00377CAF /* Debug */ = { 524 | isa = XCBuildConfiguration; 525 | buildSettings = { 526 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 527 | BUNDLE_LOADER = "$(TEST_HOST)"; 528 | CODE_SIGN_STYLE = Automatic; 529 | DEVELOPMENT_TEAM = ZUNYJ43SN4; 530 | INFOPLIST_FILE = NotelyTests/Info.plist; 531 | IPHONEOS_DEPLOYMENT_TARGET = 14.0; 532 | LD_RUNPATH_SEARCH_PATHS = ( 533 | "$(inherited)", 534 | "@executable_path/Frameworks", 535 | "@loader_path/Frameworks", 536 | ); 537 | PRODUCT_BUNDLE_IDENTIFIER = com.hipporasy.NotelyTests; 538 | PRODUCT_NAME = "$(TARGET_NAME)"; 539 | SWIFT_VERSION = 5.0; 540 | TARGETED_DEVICE_FAMILY = "1,2"; 541 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Notely.app/Notely"; 542 | }; 543 | name = Debug; 544 | }; 545 | F78EAEDD25A98BAF00377CAF /* Release */ = { 546 | isa = XCBuildConfiguration; 547 | buildSettings = { 548 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 549 | BUNDLE_LOADER = "$(TEST_HOST)"; 550 | CODE_SIGN_STYLE = Automatic; 551 | DEVELOPMENT_TEAM = ZUNYJ43SN4; 552 | INFOPLIST_FILE = NotelyTests/Info.plist; 553 | IPHONEOS_DEPLOYMENT_TARGET = 14.0; 554 | LD_RUNPATH_SEARCH_PATHS = ( 555 | "$(inherited)", 556 | "@executable_path/Frameworks", 557 | "@loader_path/Frameworks", 558 | ); 559 | PRODUCT_BUNDLE_IDENTIFIER = com.hipporasy.NotelyTests; 560 | PRODUCT_NAME = "$(TARGET_NAME)"; 561 | SWIFT_VERSION = 5.0; 562 | TARGETED_DEVICE_FAMILY = "1,2"; 563 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Notely.app/Notely"; 564 | }; 565 | name = Release; 566 | }; 567 | F78EAEDF25A98BAF00377CAF /* Debug */ = { 568 | isa = XCBuildConfiguration; 569 | buildSettings = { 570 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 571 | CODE_SIGN_STYLE = Automatic; 572 | DEVELOPMENT_TEAM = ZUNYJ43SN4; 573 | INFOPLIST_FILE = NotelyUITests/Info.plist; 574 | LD_RUNPATH_SEARCH_PATHS = ( 575 | "$(inherited)", 576 | "@executable_path/Frameworks", 577 | "@loader_path/Frameworks", 578 | ); 579 | PRODUCT_BUNDLE_IDENTIFIER = com.hipporasy.NotelyUITests; 580 | PRODUCT_NAME = "$(TARGET_NAME)"; 581 | SWIFT_VERSION = 5.0; 582 | TARGETED_DEVICE_FAMILY = "1,2"; 583 | TEST_TARGET_NAME = Notely; 584 | }; 585 | name = Debug; 586 | }; 587 | F78EAEE025A98BAF00377CAF /* Release */ = { 588 | isa = XCBuildConfiguration; 589 | buildSettings = { 590 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 591 | CODE_SIGN_STYLE = Automatic; 592 | DEVELOPMENT_TEAM = ZUNYJ43SN4; 593 | INFOPLIST_FILE = NotelyUITests/Info.plist; 594 | LD_RUNPATH_SEARCH_PATHS = ( 595 | "$(inherited)", 596 | "@executable_path/Frameworks", 597 | "@loader_path/Frameworks", 598 | ); 599 | PRODUCT_BUNDLE_IDENTIFIER = com.hipporasy.NotelyUITests; 600 | PRODUCT_NAME = "$(TARGET_NAME)"; 601 | SWIFT_VERSION = 5.0; 602 | TARGETED_DEVICE_FAMILY = "1,2"; 603 | TEST_TARGET_NAME = Notely; 604 | }; 605 | name = Release; 606 | }; 607 | /* End XCBuildConfiguration section */ 608 | 609 | /* Begin XCConfigurationList section */ 610 | F78EAEAE25A98BAE00377CAF /* Build configuration list for PBXProject "Notely" */ = { 611 | isa = XCConfigurationList; 612 | buildConfigurations = ( 613 | F78EAED625A98BAF00377CAF /* Debug */, 614 | F78EAED725A98BAF00377CAF /* Release */, 615 | ); 616 | defaultConfigurationIsVisible = 0; 617 | defaultConfigurationName = Release; 618 | }; 619 | F78EAED825A98BAF00377CAF /* Build configuration list for PBXNativeTarget "Notely" */ = { 620 | isa = XCConfigurationList; 621 | buildConfigurations = ( 622 | F78EAED925A98BAF00377CAF /* Debug */, 623 | F78EAEDA25A98BAF00377CAF /* Release */, 624 | ); 625 | defaultConfigurationIsVisible = 0; 626 | defaultConfigurationName = Release; 627 | }; 628 | F78EAEDB25A98BAF00377CAF /* Build configuration list for PBXNativeTarget "NotelyTests" */ = { 629 | isa = XCConfigurationList; 630 | buildConfigurations = ( 631 | F78EAEDC25A98BAF00377CAF /* Debug */, 632 | F78EAEDD25A98BAF00377CAF /* Release */, 633 | ); 634 | defaultConfigurationIsVisible = 0; 635 | defaultConfigurationName = Release; 636 | }; 637 | F78EAEDE25A98BAF00377CAF /* Build configuration list for PBXNativeTarget "NotelyUITests" */ = { 638 | isa = XCConfigurationList; 639 | buildConfigurations = ( 640 | F78EAEDF25A98BAF00377CAF /* Debug */, 641 | F78EAEE025A98BAF00377CAF /* Release */, 642 | ); 643 | defaultConfigurationIsVisible = 0; 644 | defaultConfigurationName = Release; 645 | }; 646 | /* End XCConfigurationList section */ 647 | }; 648 | rootObject = F78EAEAB25A98BAE00377CAF /* Project object */; 649 | } 650 | -------------------------------------------------------------------------------- /Notely.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Notely.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Notely.xcodeproj/xcuserdata/hipporasy.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Notely.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Notely/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 | -------------------------------------------------------------------------------- /Notely/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "scale" : "2x", 6 | "size" : "20x20" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "scale" : "3x", 11 | "size" : "20x20" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "scale" : "2x", 16 | "size" : "29x29" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "scale" : "3x", 21 | "size" : "29x29" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "scale" : "2x", 26 | "size" : "40x40" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "scale" : "3x", 31 | "size" : "40x40" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "scale" : "2x", 36 | "size" : "60x60" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "scale" : "3x", 41 | "size" : "60x60" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "scale" : "1x", 46 | "size" : "20x20" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "scale" : "2x", 51 | "size" : "20x20" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "scale" : "1x", 56 | "size" : "29x29" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "scale" : "2x", 61 | "size" : "29x29" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "scale" : "1x", 66 | "size" : "40x40" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "scale" : "2x", 71 | "size" : "40x40" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "scale" : "1x", 76 | "size" : "76x76" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "scale" : "2x", 81 | "size" : "76x76" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "scale" : "2x", 86 | "size" : "83.5x83.5" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "scale" : "1x", 91 | "size" : "1024x1024" 92 | } 93 | ], 94 | "info" : { 95 | "author" : "xcode", 96 | "version" : 1 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /Notely/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Notely/Assets.xcassets/audio.sample.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Group.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "Group@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "Group@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Notely/Assets.xcassets/audio.sample.imageset/Group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hipporasy/swiftui.notely-ios/a720d0e28de8d7ff4147a5b2b23d2741588cce48/Notely/Assets.xcassets/audio.sample.imageset/Group.png -------------------------------------------------------------------------------- /Notely/Assets.xcassets/audio.sample.imageset/Group@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hipporasy/swiftui.notely-ios/a720d0e28de8d7ff4147a5b2b23d2741588cce48/Notely/Assets.xcassets/audio.sample.imageset/Group@2x.png -------------------------------------------------------------------------------- /Notely/Assets.xcassets/audio.sample.imageset/Group@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hipporasy/swiftui.notely-ios/a720d0e28de8d7ff4147a5b2b23d2741588cce48/Notely/Assets.xcassets/audio.sample.imageset/Group@3x.png -------------------------------------------------------------------------------- /Notely/Assets.xcassets/new.note.image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Rectangle.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "Rectangle@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "Rectangle@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Notely/Assets.xcassets/new.note.image.imageset/Rectangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hipporasy/swiftui.notely-ios/a720d0e28de8d7ff4147a5b2b23d2741588cce48/Notely/Assets.xcassets/new.note.image.imageset/Rectangle.png -------------------------------------------------------------------------------- /Notely/Assets.xcassets/new.note.image.imageset/Rectangle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hipporasy/swiftui.notely-ios/a720d0e28de8d7ff4147a5b2b23d2741588cce48/Notely/Assets.xcassets/new.note.image.imageset/Rectangle@2x.png -------------------------------------------------------------------------------- /Notely/Assets.xcassets/new.note.image.imageset/Rectangle@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hipporasy/swiftui.notely-ios/a720d0e28de8d7ff4147a5b2b23d2741588cce48/Notely/Assets.xcassets/new.note.image.imageset/Rectangle@3x.png -------------------------------------------------------------------------------- /Notely/Assets.xcassets/note.image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Rectangle.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "Rectangle@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "Rectangle@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Notely/Assets.xcassets/note.image.imageset/Rectangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hipporasy/swiftui.notely-ios/a720d0e28de8d7ff4147a5b2b23d2741588cce48/Notely/Assets.xcassets/note.image.imageset/Rectangle.png -------------------------------------------------------------------------------- /Notely/Assets.xcassets/note.image.imageset/Rectangle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hipporasy/swiftui.notely-ios/a720d0e28de8d7ff4147a5b2b23d2741588cce48/Notely/Assets.xcassets/note.image.imageset/Rectangle@2x.png -------------------------------------------------------------------------------- /Notely/Assets.xcassets/note.image.imageset/Rectangle@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hipporasy/swiftui.notely-ios/a720d0e28de8d7ff4147a5b2b23d2741588cce48/Notely/Assets.xcassets/note.image.imageset/Rectangle@3x.png -------------------------------------------------------------------------------- /Notely/Assets.xcassets/profile.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Rectangle.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "Rectangle@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "Rectangle@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Notely/Assets.xcassets/profile.imageset/Rectangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hipporasy/swiftui.notely-ios/a720d0e28de8d7ff4147a5b2b23d2741588cce48/Notely/Assets.xcassets/profile.imageset/Rectangle.png -------------------------------------------------------------------------------- /Notely/Assets.xcassets/profile.imageset/Rectangle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hipporasy/swiftui.notely-ios/a720d0e28de8d7ff4147a5b2b23d2741588cce48/Notely/Assets.xcassets/profile.imageset/Rectangle@2x.png -------------------------------------------------------------------------------- /Notely/Assets.xcassets/profile.imageset/Rectangle@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hipporasy/swiftui.notely-ios/a720d0e28de8d7ff4147a5b2b23d2741588cce48/Notely/Assets.xcassets/profile.imageset/Rectangle@3x.png -------------------------------------------------------------------------------- /Notely/Assets.xcassets/splash.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Group.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "Group@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "Group@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Notely/Assets.xcassets/splash.imageset/Group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hipporasy/swiftui.notely-ios/a720d0e28de8d7ff4147a5b2b23d2741588cce48/Notely/Assets.xcassets/splash.imageset/Group.png -------------------------------------------------------------------------------- /Notely/Assets.xcassets/splash.imageset/Group@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hipporasy/swiftui.notely-ios/a720d0e28de8d7ff4147a5b2b23d2741588cce48/Notely/Assets.xcassets/splash.imageset/Group@2x.png -------------------------------------------------------------------------------- /Notely/Assets.xcassets/splash.imageset/Group@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hipporasy/swiftui.notely-ios/a720d0e28de8d7ff4147a5b2b23d2741588cce48/Notely/Assets.xcassets/splash.imageset/Group@3x.png -------------------------------------------------------------------------------- /Notely/ContentView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContentView.swift 3 | // Notely 4 | // 5 | // Created by Marasy Phi on 9/1/21. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ContentView: View { 11 | 12 | @State var isPresented: Bool = false 13 | 14 | var body: some View { 15 | VStack { 16 | Spacer().frame(height: 52) 17 | VStack(alignment: .leading, spacing: 20) { 18 | Text("Notely") 19 | .font(.primary(.black, size: 35)) 20 | .foregroundColor(.darkerText) 21 | Text("Capture what’s on your mind & get a reminder later at the right place or time. You can also add voice memo & other features") 22 | .font(.primary(.regular, size: 16)) 23 | .foregroundColor(.lightText) 24 | .lineSpacing(10.0) 25 | } 26 | Spacer() 27 | ZStack(alignment: .bottomTrailing) { 28 | Image("splash") 29 | .resizable() 30 | .edgesIgnoringSafeArea(.bottom) 31 | Button(action: { 32 | isPresented.toggle() 33 | }, label: { 34 | HStack { 35 | Text("Let's Start") 36 | .font(.primary(.semiBold, size: 16)) 37 | Image(systemName: "arrow.right") 38 | } 39 | .fullScreenCover(isPresented: $isPresented, content: { 40 | HomeView() 41 | }) 42 | .foregroundColor(.white) 43 | .padding() 44 | .frame(width: 164, height: 52) 45 | .background(Color.primaryColor) 46 | .cornerRadius(30.5) 47 | .padding(.trailing) 48 | }) 49 | } 50 | } 51 | } 52 | } 53 | 54 | struct ContentView_Previews: PreviewProvider { 55 | static var previews: some View { 56 | ContentView() 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Notely/Extension/Color+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Color+Extension.swift 3 | // Notely 4 | // 5 | // Created by Marasy Phi on 10/1/21. 6 | // 7 | 8 | import SwiftUI 9 | 10 | extension Color { 11 | 12 | static let primaryColor = Color.init(hex: 0x6273ED) 13 | static let primaryBackground = Color.init(hex: 0xFBFCFF) 14 | static let secondaryColor = Color.init(hex: 0xF1F1F1) 15 | static let primaryRed = Color.init(hex: 0xFC6B6B) 16 | static let lightText = Color.init(hex: 0x343434) 17 | static let lightGrey = Color.init(hex: 0xF5F5F5) 18 | static let darkText = Color.init(hex: 0x535353) 19 | static let darkerText = Color.init(hex: 0x323232) 20 | static let primaryGreen = Color.init(hex: 0x4DC992) 21 | 22 | init(hex: UInt, alpha: Double = 1) { 23 | self.init( 24 | .sRGB, 25 | red: Double((hex >> 16) & 0xff) / 255, 26 | green: Double((hex >> 08) & 0xff) / 255, 27 | blue: Double((hex >> 00) & 0xff) / 255, 28 | opacity: alpha 29 | ) 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /Notely/Extension/Font+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Font+Extension.swift 3 | // Notely 4 | // 5 | // Created by Marasy Phi on 10/1/21. 6 | // 7 | 8 | import SwiftUI 9 | 10 | extension Font { 11 | 12 | private static let _fontName = "Metropolis" 13 | 14 | enum `Type` : String { 15 | case regular 16 | case semiBold 17 | case medium 18 | case black 19 | case bold 20 | 21 | var fontName: String { 22 | return "\(_fontName)-\(self.rawValue.capitalized)" 23 | } 24 | } 25 | 26 | static func primary(_ type: `Type`, size: CGFloat = 15) -> Font { 27 | return .custom(type.fontName, size: size) 28 | } 29 | 30 | 31 | } 32 | -------------------------------------------------------------------------------- /Notely/Font/Metropolis-Black.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hipporasy/swiftui.notely-ios/a720d0e28de8d7ff4147a5b2b23d2741588cce48/Notely/Font/Metropolis-Black.otf -------------------------------------------------------------------------------- /Notely/Font/Metropolis-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hipporasy/swiftui.notely-ios/a720d0e28de8d7ff4147a5b2b23d2741588cce48/Notely/Font/Metropolis-Bold.otf -------------------------------------------------------------------------------- /Notely/Font/Metropolis-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hipporasy/swiftui.notely-ios/a720d0e28de8d7ff4147a5b2b23d2741588cce48/Notely/Font/Metropolis-Medium.otf -------------------------------------------------------------------------------- /Notely/Font/Metropolis-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hipporasy/swiftui.notely-ios/a720d0e28de8d7ff4147a5b2b23d2741588cce48/Notely/Font/Metropolis-Regular.otf -------------------------------------------------------------------------------- /Notely/Font/Metropolis-SemiBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hipporasy/swiftui.notely-ios/a720d0e28de8d7ff4147a5b2b23d2741588cce48/Notely/Font/Metropolis-SemiBold.otf -------------------------------------------------------------------------------- /Notely/HomeView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomeView.swift 3 | // Notely 4 | // 5 | // Created by Marasy Phi on 12/1/21. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct HomeView: View { 11 | 12 | private var _leadingTitle: some View { 13 | Text("My Notes") 14 | .font(.primary(.bold, size: 23)) 15 | .foregroundColor(.darkerText) 16 | } 17 | 18 | init() { 19 | UINavigationBar.appearance().backgroundColor = UIColor(Color.primaryBackground) 20 | UINavigationBar.appearance().tintColor = UIColor(Color.primaryBackground) 21 | UINavigationBar.appearance().shadowImage = UIImage() 22 | // UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default) 23 | } 24 | 25 | var body: some View { 26 | NavigationView { 27 | VStack { 28 | HStack { 29 | Image(systemName: "magnifyingglass") 30 | TextField("Search anything", text: .constant("")) 31 | .font(.primary(.medium)) 32 | } 33 | .foregroundColor(.lightText) 34 | .padding() 35 | .background(Color.secondaryColor) 36 | .cornerRadius(6) 37 | .padding() 38 | NoteTypeView() 39 | ZStack(alignment: .bottomTrailing) { 40 | ScrollView(/*@START_MENU_TOKEN@*/.vertical/*@END_MENU_TOKEN@*/, showsIndicators: /*@START_MENU_TOKEN@*/true/*@END_MENU_TOKEN@*/, content: { 41 | ForEach(Note.dummies) { eachNote in 42 | NoteViewItem(note: eachNote) 43 | } 44 | }) 45 | 46 | NavigationLink(destination: NoteDetailView.init()) { 47 | HStack { 48 | Image(systemName: "plus") 49 | Text("Create") 50 | .font(.primary(.semiBold, size: 16)) 51 | } 52 | .foregroundColor(.white) 53 | .padding() 54 | .frame(width: 130, height: 52) 55 | .background(Color.primaryColor) 56 | .cornerRadius(30.5) 57 | .padding(.trailing) 58 | } 59 | } 60 | } 61 | .background(Color.primaryBackground) 62 | .navigationBarTitleDisplayMode(.inline) 63 | .navigationBarItems(leading: _leadingTitle, trailing: Image("profile")) 64 | } 65 | } 66 | 67 | } 68 | 69 | struct NoteTypeView: View { 70 | 71 | @State var selectedType: TypeView = .allNotes 72 | 73 | enum TypeView: String, CaseIterable, Identifiable { 74 | 75 | var id: String { 76 | if case .allNotes = self { 77 | return "All Notes" 78 | } 79 | return rawValue.capitalized 80 | } 81 | 82 | case allNotes 83 | case reminder 84 | case audio 85 | case images 86 | } 87 | 88 | var body: some View { 89 | ScrollView(.horizontal, showsIndicators: false, content: { 90 | HStack { 91 | ForEach(TypeView.allCases) { eachType in 92 | Button(action: { 93 | selectedType = eachType 94 | }, label: { 95 | Text(eachType.id) 96 | .font(.primary(.medium)) 97 | .foregroundColor(selectedType == eachType ? .white : .darkText) 98 | .padding() 99 | }) 100 | .frame(height: 34) 101 | .background(selectedType == eachType ? Color.primaryColor : .secondaryColor) 102 | .cornerRadius(4) 103 | } 104 | } 105 | .padding(.leading, 20) 106 | .padding(.trailing, 20) 107 | }) 108 | } 109 | 110 | } 111 | 112 | struct NoteViewItem : View { 113 | 114 | let note: Note 115 | 116 | var body: some View { 117 | VStack(alignment: .leading, spacing: /*@START_MENU_TOKEN@*/nil/*@END_MENU_TOKEN@*/, content: { 118 | HStack(spacing: 14) { 119 | Image(systemName: note.type.displayImage) 120 | .foregroundColor(.white) 121 | .frame(width: 40, height: 40) 122 | .background(note.type.displayColor) 123 | .cornerRadius(20) 124 | VStack(alignment: .leading, spacing: 4) { 125 | Text(note.title) 126 | .foregroundColor(.darkerText) 127 | .font(.primary(.semiBold, size: 16)) 128 | Text(note.date) 129 | .foregroundColor(.darkText) 130 | .font(.primary(.medium, size: 12)) 131 | } 132 | } 133 | .padding() 134 | .frame(maxWidth: .infinity, alignment: .leading) 135 | 136 | Divider() 137 | .background(Color.lightGrey) 138 | .padding(.trailing) 139 | .padding(.leading) 140 | 141 | note.image != nil ? Image(note.image!) 142 | .frame(maxWidth: .infinity) 143 | .padding(.top) 144 | .cornerRadius(8) : nil 145 | 146 | note.description != nil ? Text(note.description!) 147 | .fixedSize(horizontal: false, vertical: true) 148 | .font(.primary(.regular)) 149 | .foregroundColor(.darkText) 150 | .lineSpacing(10.0) 151 | .padding() : nil 152 | 153 | note.type == .audio ? 154 | HStack(spacing: 4) { 155 | Image(systemName: "play.fill") 156 | .foregroundColor(.white) 157 | .frame(width: 30, height: 30) 158 | .background(Color.primaryColor) 159 | .cornerRadius(15) 160 | Image("audio.sample") 161 | .frame(maxWidth: .infinity) 162 | // replace with real audio 163 | }.padding() : nil 164 | }) 165 | .background(Color.white) 166 | .cornerRadius(8) 167 | .shadow(color: Color.black.opacity(0.04), radius: 8, x: /*@START_MENU_TOKEN@*/0.0/*@END_MENU_TOKEN@*/, y: 3) 168 | .padding() 169 | } 170 | 171 | } 172 | 173 | private extension Note.`Type` { 174 | 175 | var displayImage: String { 176 | switch self { 177 | case .audio: 178 | return "music.note" 179 | case .document: 180 | return "doc" 181 | case .reminder: 182 | return "bell" 183 | } 184 | } 185 | 186 | var displayColor: Color { 187 | switch self { 188 | case .audio: 189 | return .primaryRed 190 | case .document: 191 | return .primaryColor 192 | case .reminder: 193 | return .primaryGreen 194 | } 195 | } 196 | 197 | } 198 | 199 | struct HomeViewPreview: PreviewProvider { 200 | 201 | static var previews: some View { 202 | HomeView() 203 | } 204 | } 205 | 206 | -------------------------------------------------------------------------------- /Notely/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | UIAppFonts 6 | 7 | Metropolis-Bold.otf 8 | Metropolis-Black.otf 9 | Metropolis-Medium.otf 10 | Metropolis-Regular.otf 11 | Metropolis-Semibold.otf 12 | 13 | CFBundleDevelopmentRegion 14 | $(DEVELOPMENT_LANGUAGE) 15 | CFBundleExecutable 16 | $(EXECUTABLE_NAME) 17 | CFBundleIdentifier 18 | $(PRODUCT_BUNDLE_IDENTIFIER) 19 | CFBundleInfoDictionaryVersion 20 | 6.0 21 | CFBundleName 22 | $(PRODUCT_NAME) 23 | CFBundlePackageType 24 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 25 | CFBundleShortVersionString 26 | 1.0 27 | CFBundleVersion 28 | 1 29 | LSRequiresIPhoneOS 30 | 31 | UIApplicationSceneManifest 32 | 33 | UIApplicationSupportsMultipleScenes 34 | 35 | 36 | UIApplicationSupportsIndirectInputEvents 37 | 38 | UILaunchScreen 39 | 40 | UIRequiredDeviceCapabilities 41 | 42 | armv7 43 | 44 | UISupportedInterfaceOrientations 45 | 46 | UIInterfaceOrientationPortrait 47 | UIInterfaceOrientationLandscapeLeft 48 | UIInterfaceOrientationLandscapeRight 49 | 50 | UISupportedInterfaceOrientations~ipad 51 | 52 | UIInterfaceOrientationPortrait 53 | UIInterfaceOrientationPortraitUpsideDown 54 | UIInterfaceOrientationLandscapeLeft 55 | UIInterfaceOrientationLandscapeRight 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /Notely/Model/Note.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Note.swift 3 | // Notely 4 | // 5 | // Created by Marasy Phi on 12/1/21. 6 | // 7 | 8 | import Foundation 9 | 10 | struct Note: Identifiable { 11 | 12 | var id: UUID { 13 | return UUID() 14 | } 15 | 16 | let title: String 17 | let date: String 18 | let description: String? 19 | let image: String? 20 | let type: Type 21 | 22 | enum `Type` { 23 | case audio 24 | case document 25 | case reminder 26 | } 27 | 28 | static let dummies = [ 29 | Note(title: "365 Days Coding Challenge", date: "1 Jan 2021, 02:38 PM", description: "Tum dicere exorsus est laborum et via procedat oratio quaerimus igitur, quid sit. Si sine causa? quae fuerit causa, mox videro; interea hoc tenebo, si ob……", image: "note.image", type: .reminder), 30 | Note(title: "Swift UI Speed Code", date: "24 Nov 2020, 02:38 PM", description: "Tum dicere exorsus est laborum et via procedat oratio quaerimus igitur, quid sit. Si sine causa? quae fuerit causa, mox videro; interea hoc tenebo, si ob……", image: "note.image", type: .document), 31 | Note(title: "My Violin Class", date: "11 Jan 2021, 02:38 PM", description: nil, image: nil, type: .audio), 32 | Note(title: "My Coding class", date: "9 Jan 2021, 02:38 PM", description: "Tum dicere exorsus est laborum et via procedat oratio quaerimus igitur, quid sit. Si sine causa? quae fuerit causa, mox videro; interea hoc tenebo, si ob……", image: nil, type: .document), 33 | Note(title: "My Guitar Class", date: "24 Nov 2020, 02:38 PM", description: nil, image: nil, type: .audio), 34 | Note(title: "SwiftUI Tutorial", date: "24 Nov 2020, 02:38 PM", description: "Tum dicere exorsus est laborum et via procedat oratio quaerimus igitur, quid sit. Si sine causa? quae fuerit causa, mox videro; interea hoc tenebo, si ob……", image: "note.image", type: .document), 35 | ] 36 | 37 | } 38 | -------------------------------------------------------------------------------- /Notely/NoteDetailView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NoteDetailView.swift 3 | // Notely 4 | // 5 | // Created by Marasy Phi on 12/1/21. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct NoteDetailView: View { 11 | 12 | @Environment(\.presentationMode) var presentedMode: Binding 13 | let note = Note.dummies.first! 14 | var leadingButton: some View { 15 | Button(action: { 16 | presentedMode.wrappedValue.dismiss() 17 | }) { 18 | Image(systemName: "arrow.left") 19 | .foregroundColor(.darkerText) 20 | } 21 | } 22 | 23 | var body: some View { 24 | ZStack(alignment: .bottom) { 25 | ScrollView { 26 | VStack(alignment: .leading, spacing: 8) { 27 | Text("New Note") 28 | .font(.primary(.bold, size: 23)) 29 | .foregroundColor(.darkerText) 30 | Text(note.date) 31 | .font(.primary(.medium, size: 13)) 32 | Text(note.description! + note.description! + note.description! + note.description! + note.description!) 33 | .fixedSize(horizontal: false, vertical: true) 34 | .font(.primary(.regular)) 35 | .lineSpacing(10.0) 36 | .foregroundColor(.darkText) 37 | .padding(.top) 38 | ZStack(alignment: .topTrailing) { 39 | Image("new.note.image") 40 | .frame(maxWidth: .infinity) 41 | .padding(.top) 42 | .cornerRadius(8) 43 | Image(systemName: "xmark.circle.fill") 44 | .foregroundColor(.secondaryColor) 45 | .padding() 46 | .padding(.top, 5) 47 | } 48 | } 49 | .padding() 50 | } 51 | HStack { 52 | Spacer() 53 | Image(systemName: "music.note") 54 | .frame(width: 24, height: 24) 55 | .foregroundColor(.primaryRed) 56 | Spacer() 57 | Image(systemName: "photo") 58 | .frame(width: 24, height: 24) 59 | .foregroundColor(.primaryGreen) 60 | Spacer() 61 | Image(systemName: "bell") 62 | .frame(width: 24, height: 24) 63 | .foregroundColor(.primaryColor) 64 | Spacer() 65 | Image(systemName: "checkmark.circle") 66 | .frame(width: 24, height: 24) 67 | .foregroundColor(.yellow) 68 | Spacer() 69 | } 70 | .frame(maxWidth: .infinity) 71 | .frame(height: 74) 72 | .background(Color.white) 73 | .clipShape(RoundedCorner.init(radius: 21, corners: [.topLeft, .topRight])) 74 | .shadow(color: Color.black.opacity(0.12), radius: 21, x: /*@START_MENU_TOKEN@*/0.0/*@END_MENU_TOKEN@*/, y: -6) 75 | 76 | } 77 | .edgesIgnoringSafeArea(.bottom) 78 | .background(Color.primaryBackground) 79 | .navigationBarTitleDisplayMode(.inline) 80 | .navigationBarItems(leading: leadingButton, 81 | trailing: Image(systemName: "checkmark") 82 | .foregroundColor(.primaryColor)) 83 | .navigationBarBackButtonHidden(true) 84 | } 85 | 86 | } 87 | 88 | struct RoundedCorner: Shape { 89 | var radius: CGFloat = 0.0 90 | var corners: UIRectCorner = .allCorners 91 | 92 | func path(in rect: CGRect) -> Path { 93 | let path = UIBezierPath(roundedRect: rect, byRoundingCorners: corners, cornerRadii: .init(width: radius, height: radius)) 94 | return Path(path.cgPath) 95 | } 96 | } 97 | 98 | struct NoteDetailViewPreview: PreviewProvider { 99 | 100 | static var previews: some View { 101 | NavigationView { 102 | NoteDetailView() 103 | } 104 | } 105 | 106 | 107 | } 108 | -------------------------------------------------------------------------------- /Notely/NotelyApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NotelyApp.swift 3 | // Notely 4 | // 5 | // Created by Marasy Phi on 9/1/21. 6 | // 7 | 8 | import SwiftUI 9 | 10 | @main 11 | struct NotelyApp: App { 12 | var body: some Scene { 13 | WindowGroup { 14 | ContentView() 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Notely/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /NotelyTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /NotelyTests/NotelyTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NotelyTests.swift 3 | // NotelyTests 4 | // 5 | // Created by Marasy Phi on 9/1/21. 6 | // 7 | 8 | import XCTest 9 | @testable import Notely 10 | 11 | class NotelyTests: XCTestCase { 12 | 13 | override func setUpWithError() throws { 14 | // Put setup code here. This method is called before the invocation of each test method in the class. 15 | } 16 | 17 | override func tearDownWithError() throws { 18 | // Put teardown code here. This method is called after the invocation of each test method in the class. 19 | } 20 | 21 | func testExample() throws { 22 | // This is an example of a functional test case. 23 | // Use XCTAssert and related functions to verify your tests produce the correct results. 24 | } 25 | 26 | func testPerformanceExample() throws { 27 | // This is an example of a performance test case. 28 | self.measure { 29 | // Put the code you want to measure the time of here. 30 | } 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /NotelyUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /NotelyUITests/NotelyUITests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NotelyUITests.swift 3 | // NotelyUITests 4 | // 5 | // Created by Marasy Phi on 9/1/21. 6 | // 7 | 8 | import XCTest 9 | 10 | class NotelyUITests: XCTestCase { 11 | 12 | override func setUpWithError() throws { 13 | // Put setup code here. This method is called before the invocation of each test method in the class. 14 | 15 | // In UI tests it is usually best to stop immediately when a failure occurs. 16 | continueAfterFailure = false 17 | 18 | // 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. 19 | } 20 | 21 | override func tearDownWithError() throws { 22 | // Put teardown code here. This method is called after the invocation of each test method in the class. 23 | } 24 | 25 | func testExample() throws { 26 | // UI tests must launch the application that they test. 27 | let app = XCUIApplication() 28 | app.launch() 29 | 30 | // Use recording to get started writing UI tests. 31 | // Use XCTAssert and related functions to verify your tests produce the correct results. 32 | } 33 | 34 | func testLaunchPerformance() throws { 35 | if #available(macOS 10.15, iOS 13.0, tvOS 13.0, *) { 36 | // This measures how long it takes to launch your application. 37 | measure(metrics: [XCTApplicationLaunchMetric()]) { 38 | XCUIApplication().launch() 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # swiftui.notely-ios 2 | SwiftUI App based on simple Note app 3 | 4 | URL: https://youtu.be/9lboESQP9xY 5 | 6 | # Splash Screen 7 | 8 | 9 | 10 | # Home Screen 11 | 12 | 13 | 14 | # Detail Screen 15 | 16 | 17 | 18 | 19 | 20 | --------------------------------------------------------------------------------