From f995d20df9d3adcb9fb7da99548aa86a71eb9100 Mon Sep 17 00:00:00 2001 From: Aisha Al-Qarni <87011895+AishaAlQarnii@users.noreply.github.com> Date: Thu, 23 Dec 2021 08:44:25 +0300 Subject: [PATCH] Aisha AlQarni --- PhotoApp.xcodeproj/project.pbxproj | 373 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 22922 bytes .../xcschemes/xcschememanagement.plist | 14 + PhotoApp/AppDelegate.swift | 36 ++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 98 +++++ PhotoApp/Assets.xcassets/Contents.json | 6 + PhotoApp/Base.lproj/LaunchScreen.storyboard | 25 ++ PhotoApp/Base.lproj/Main.storyboard | 71 ++++ PhotoApp/Info.plist | 25 ++ PhotoApp/SceneDelegate.swift | 52 +++ PhotoApp/Structs.swift | 15 + PhotoApp/TableViewCell.swift | 14 + PhotoApp/ViewController.swift | 76 ++++ 16 files changed, 831 insertions(+) create mode 100644 PhotoApp.xcodeproj/project.pbxproj create mode 100644 PhotoApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 PhotoApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 PhotoApp.xcodeproj/project.xcworkspace/xcuserdata/aishaal-qarni.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 PhotoApp.xcodeproj/xcuserdata/aishaal-qarni.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 PhotoApp/AppDelegate.swift create mode 100644 PhotoApp/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 PhotoApp/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 PhotoApp/Assets.xcassets/Contents.json create mode 100644 PhotoApp/Base.lproj/LaunchScreen.storyboard create mode 100644 PhotoApp/Base.lproj/Main.storyboard create mode 100644 PhotoApp/Info.plist create mode 100644 PhotoApp/SceneDelegate.swift create mode 100644 PhotoApp/Structs.swift create mode 100644 PhotoApp/TableViewCell.swift create mode 100644 PhotoApp/ViewController.swift diff --git a/PhotoApp.xcodeproj/project.pbxproj b/PhotoApp.xcodeproj/project.pbxproj new file mode 100644 index 0000000..26842a6 --- /dev/null +++ b/PhotoApp.xcodeproj/project.pbxproj @@ -0,0 +1,373 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + A230F67A2771E447006D2D26 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A230F6792771E447006D2D26 /* AppDelegate.swift */; }; + A230F67C2771E447006D2D26 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A230F67B2771E447006D2D26 /* SceneDelegate.swift */; }; + A230F67E2771E447006D2D26 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A230F67D2771E447006D2D26 /* ViewController.swift */; }; + A230F6812771E447006D2D26 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A230F67F2771E447006D2D26 /* Main.storyboard */; }; + A230F6832771E449006D2D26 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A230F6822771E449006D2D26 /* Assets.xcassets */; }; + A230F6862771E449006D2D26 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A230F6842771E449006D2D26 /* LaunchScreen.storyboard */; }; + A230F68E2771E5E0006D2D26 /* TableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A230F68D2771E5E0006D2D26 /* TableViewCell.swift */; }; + A230F6902771E93C006D2D26 /* Structs.swift in Sources */ = {isa = PBXBuildFile; fileRef = A230F68F2771E93C006D2D26 /* Structs.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + A230F6762771E447006D2D26 /* PhotoApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PhotoApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; + A230F6792771E447006D2D26 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + A230F67B2771E447006D2D26 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + A230F67D2771E447006D2D26 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + A230F6802771E447006D2D26 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + A230F6822771E449006D2D26 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + A230F6852771E449006D2D26 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + A230F6872771E449006D2D26 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A230F68D2771E5E0006D2D26 /* TableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableViewCell.swift; sourceTree = ""; }; + A230F68F2771E93C006D2D26 /* Structs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Structs.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + A230F6732771E447006D2D26 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + A230F66D2771E447006D2D26 = { + isa = PBXGroup; + children = ( + A230F6782771E447006D2D26 /* PhotoApp */, + A230F6772771E447006D2D26 /* Products */, + ); + sourceTree = ""; + }; + A230F6772771E447006D2D26 /* Products */ = { + isa = PBXGroup; + children = ( + A230F6762771E447006D2D26 /* PhotoApp.app */, + ); + name = Products; + sourceTree = ""; + }; + A230F6782771E447006D2D26 /* PhotoApp */ = { + isa = PBXGroup; + children = ( + A230F6792771E447006D2D26 /* AppDelegate.swift */, + A230F67B2771E447006D2D26 /* SceneDelegate.swift */, + A230F67D2771E447006D2D26 /* ViewController.swift */, + A230F67F2771E447006D2D26 /* Main.storyboard */, + A230F6822771E449006D2D26 /* Assets.xcassets */, + A230F6842771E449006D2D26 /* LaunchScreen.storyboard */, + A230F6872771E449006D2D26 /* Info.plist */, + A230F68D2771E5E0006D2D26 /* TableViewCell.swift */, + A230F68F2771E93C006D2D26 /* Structs.swift */, + ); + path = PhotoApp; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + A230F6752771E447006D2D26 /* PhotoApp */ = { + isa = PBXNativeTarget; + buildConfigurationList = A230F68A2771E449006D2D26 /* Build configuration list for PBXNativeTarget "PhotoApp" */; + buildPhases = ( + A230F6722771E447006D2D26 /* Sources */, + A230F6732771E447006D2D26 /* Frameworks */, + A230F6742771E447006D2D26 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = PhotoApp; + productName = PhotoApp; + productReference = A230F6762771E447006D2D26 /* PhotoApp.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + A230F66E2771E447006D2D26 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1310; + LastUpgradeCheck = 1310; + TargetAttributes = { + A230F6752771E447006D2D26 = { + CreatedOnToolsVersion = 13.1; + }; + }; + }; + buildConfigurationList = A230F6712771E447006D2D26 /* Build configuration list for PBXProject "PhotoApp" */; + compatibilityVersion = "Xcode 13.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = A230F66D2771E447006D2D26; + productRefGroup = A230F6772771E447006D2D26 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + A230F6752771E447006D2D26 /* PhotoApp */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + A230F6742771E447006D2D26 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A230F6862771E449006D2D26 /* LaunchScreen.storyboard in Resources */, + A230F6832771E449006D2D26 /* Assets.xcassets in Resources */, + A230F6812771E447006D2D26 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + A230F6722771E447006D2D26 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A230F67E2771E447006D2D26 /* ViewController.swift in Sources */, + A230F68E2771E5E0006D2D26 /* TableViewCell.swift in Sources */, + A230F6902771E93C006D2D26 /* Structs.swift in Sources */, + A230F67A2771E447006D2D26 /* AppDelegate.swift in Sources */, + A230F67C2771E447006D2D26 /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + A230F67F2771E447006D2D26 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + A230F6802771E447006D2D26 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + A230F6842771E449006D2D26 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + A230F6852771E449006D2D26 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + A230F6882771E449006D2D26 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + A230F6892771E449006D2D26 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + A230F68B2771E449006D2D26 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = U9STHRS269; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = PhotoApp/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.tuwiaq.PhotoApp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + A230F68C2771E449006D2D26 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = U9STHRS269; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = PhotoApp/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.tuwiaq.PhotoApp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + A230F6712771E447006D2D26 /* Build configuration list for PBXProject "PhotoApp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A230F6882771E449006D2D26 /* Debug */, + A230F6892771E449006D2D26 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A230F68A2771E449006D2D26 /* Build configuration list for PBXNativeTarget "PhotoApp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A230F68B2771E449006D2D26 /* Debug */, + A230F68C2771E449006D2D26 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = A230F66E2771E447006D2D26 /* Project object */; +} diff --git a/PhotoApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/PhotoApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/PhotoApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/PhotoApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/PhotoApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/PhotoApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/PhotoApp.xcodeproj/project.xcworkspace/xcuserdata/aishaal-qarni.xcuserdatad/UserInterfaceState.xcuserstate b/PhotoApp.xcodeproj/project.xcworkspace/xcuserdata/aishaal-qarni.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..5fee3e99f2012ad14f0679ce37a23455661833f8 GIT binary patch literal 22922 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�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 literal 0 HcmV?d00001 diff --git a/PhotoApp.xcodeproj/xcuserdata/aishaal-qarni.xcuserdatad/xcschemes/xcschememanagement.plist b/PhotoApp.xcodeproj/xcuserdata/aishaal-qarni.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..2de4e77 --- /dev/null +++ b/PhotoApp.xcodeproj/xcuserdata/aishaal-qarni.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + PhotoApp.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/PhotoApp/AppDelegate.swift b/PhotoApp/AppDelegate.swift new file mode 100644 index 0000000..116f56b --- /dev/null +++ b/PhotoApp/AppDelegate.swift @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// PhotoApp +// +// Created by Aisha Al-Qarni on 21/12/2021. +// + +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + // MARK: UISceneSession Lifecycle + + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } + + +} + diff --git a/PhotoApp/Assets.xcassets/AccentColor.colorset/Contents.json b/PhotoApp/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/PhotoApp/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/PhotoApp/Assets.xcassets/AppIcon.appiconset/Contents.json b/PhotoApp/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..9221b9b --- /dev/null +++ b/PhotoApp/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/PhotoApp/Assets.xcassets/Contents.json b/PhotoApp/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/PhotoApp/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/PhotoApp/Base.lproj/LaunchScreen.storyboard b/PhotoApp/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/PhotoApp/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PhotoApp/Base.lproj/Main.storyboard b/PhotoApp/Base.lproj/Main.storyboard new file mode 100644 index 0000000..8fa83e2 --- /dev/null +++ b/PhotoApp/Base.lproj/Main.storyboard @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PhotoApp/Info.plist b/PhotoApp/Info.plist new file mode 100644 index 0000000..dd3c9af --- /dev/null +++ b/PhotoApp/Info.plist @@ -0,0 +1,25 @@ + + + + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + + diff --git a/PhotoApp/SceneDelegate.swift b/PhotoApp/SceneDelegate.swift new file mode 100644 index 0000000..23da393 --- /dev/null +++ b/PhotoApp/SceneDelegate.swift @@ -0,0 +1,52 @@ +// +// SceneDelegate.swift +// PhotoApp +// +// Created by Aisha Al-Qarni on 21/12/2021. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + } + + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + +} + diff --git a/PhotoApp/Structs.swift b/PhotoApp/Structs.swift new file mode 100644 index 0000000..7b97c86 --- /dev/null +++ b/PhotoApp/Structs.swift @@ -0,0 +1,15 @@ + + + +import Foundation + +struct DataModel : Codable { + var title: String + var items : [Item] +} +struct Item : Codable{ + var media:Media +} +struct Media : Codable { + var m: String +} diff --git a/PhotoApp/TableViewCell.swift b/PhotoApp/TableViewCell.swift new file mode 100644 index 0000000..a0fef5b --- /dev/null +++ b/PhotoApp/TableViewCell.swift @@ -0,0 +1,14 @@ +// +// TableViewCell.swift +// PhotoApp +// +// Created by Aisha Al-Qarni on 21/12/2021. +// + +import UIKit + +class TableViewCell: UITableViewCell { + + @IBOutlet weak var imageCell: UIImageView! + +} diff --git a/PhotoApp/ViewController.swift b/PhotoApp/ViewController.swift new file mode 100644 index 0000000..6f00763 --- /dev/null +++ b/PhotoApp/ViewController.swift @@ -0,0 +1,76 @@ +// +// ViewController.swift +// PhotoApp +// +// Created by Aisha Al-Qarni on 21/12/2021. +// + +import UIKit + +class ViewController: UIViewController { + + @IBOutlet weak var tableView: UITableView! + let url = URL(string: "https://api.flickr.com/services/feeds/photos_public.gne?format=json&tags=flower&nojsoncallback=1#") + var array = [UIImage]() + + override func viewDidLoad() { + super.viewDidLoad() + tableView.dataSource = self + tableView.delegate = self + + let url = URL(string: "https://api.flickr.com/services/feeds/photos_public.gne?format=json&tags=flower&nojsoncallback=1#") + let session = URLSession.shared + let task = session.dataTask(with: url!) { data, response, error in + guard let data = data else{return} + do { + let decoder = JSONDecoder() + let decoderData = try decoder.decode(DataModel.self, from: data) + print(decoderData.title) + decoderData.items.forEach { item in + print(item.media.m) + let newPhoto = item.media.m + self.array.append(self.getImage(from: newPhoto)!) + } + DispatchQueue.main.async{ + self.tableView.reloadData() + } + }catch { + print(error) + } + } + task.resume() + + } + func getImage(from string: String) -> UIImage? { + guard let url = URL(string: string) + else { + print("Unable to create URL") + return nil + } + var image: UIImage? = nil + do { + let data = try Data(contentsOf: url, options: []) + image = UIImage(data: data) + } + catch { + print(error.localizedDescription) + } + return image + } +} + +extension ViewController: UITableViewDelegate, UITableViewDataSource { + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + array.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell + cell.imageCell.image = array[indexPath.row] + return cell + } + + + +} +