From b8edadc7d19f3336dd8020159b2126a4533a49b1 Mon Sep 17 00:00:00 2001 From: Ebtesam Alahmari Date: Wed, 22 Dec 2021 16:48:07 +0300 Subject: [PATCH] first commit --- GetImageFromJson.xcodeproj/project.pbxproj | 373 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 24857 bytes .../xcschemes/xcschememanagement.plist | 14 + GetImageFromJson/AppDelegate.swift | 36 ++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 98 +++++ .../Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 ++ GetImageFromJson/Base.lproj/Main.storyboard | 71 ++++ GetImageFromJson/DataModel.swift | 20 + GetImageFromJson/Info.plist | 25 ++ GetImageFromJson/SceneDelegate.swift | 52 +++ GetImageFromJson/TableViewCell.swift | 15 + GetImageFromJson/ViewController.swift | 81 ++++ 16 files changed, 842 insertions(+) create mode 100644 GetImageFromJson.xcodeproj/project.pbxproj create mode 100644 GetImageFromJson.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 GetImageFromJson.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 GetImageFromJson.xcodeproj/project.xcworkspace/xcuserdata/ebtesam.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 GetImageFromJson.xcodeproj/xcuserdata/ebtesam.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 GetImageFromJson/AppDelegate.swift create mode 100644 GetImageFromJson/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 GetImageFromJson/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 GetImageFromJson/Assets.xcassets/Contents.json create mode 100644 GetImageFromJson/Base.lproj/LaunchScreen.storyboard create mode 100644 GetImageFromJson/Base.lproj/Main.storyboard create mode 100644 GetImageFromJson/DataModel.swift create mode 100644 GetImageFromJson/Info.plist create mode 100644 GetImageFromJson/SceneDelegate.swift create mode 100644 GetImageFromJson/TableViewCell.swift create mode 100644 GetImageFromJson/ViewController.swift diff --git a/GetImageFromJson.xcodeproj/project.pbxproj b/GetImageFromJson.xcodeproj/project.pbxproj new file mode 100644 index 0000000..64e1968 --- /dev/null +++ b/GetImageFromJson.xcodeproj/project.pbxproj @@ -0,0 +1,373 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + 48AD929D2771E36400881431 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48AD929C2771E36400881431 /* AppDelegate.swift */; }; + 48AD929F2771E36400881431 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48AD929E2771E36400881431 /* SceneDelegate.swift */; }; + 48AD92A12771E36400881431 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48AD92A02771E36400881431 /* ViewController.swift */; }; + 48AD92A42771E36400881431 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 48AD92A22771E36400881431 /* Main.storyboard */; }; + 48AD92A62771E36700881431 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 48AD92A52771E36700881431 /* Assets.xcassets */; }; + 48AD92A92771E36700881431 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 48AD92A72771E36700881431 /* LaunchScreen.storyboard */; }; + 48AD92B12771E49000881431 /* TableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48AD92B02771E49000881431 /* TableViewCell.swift */; }; + 48AD92B32771E5A900881431 /* DataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48AD92B22771E5A900881431 /* DataModel.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 48AD92992771E36400881431 /* GetImageFromJson.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GetImageFromJson.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 48AD929C2771E36400881431 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 48AD929E2771E36400881431 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 48AD92A02771E36400881431 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 48AD92A32771E36400881431 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 48AD92A52771E36700881431 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 48AD92A82771E36700881431 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 48AD92AA2771E36700881431 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 48AD92B02771E49000881431 /* TableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableViewCell.swift; sourceTree = ""; }; + 48AD92B22771E5A900881431 /* DataModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataModel.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 48AD92962771E36400881431 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 48AD92902771E36400881431 = { + isa = PBXGroup; + children = ( + 48AD929B2771E36400881431 /* GetImageFromJson */, + 48AD929A2771E36400881431 /* Products */, + ); + sourceTree = ""; + }; + 48AD929A2771E36400881431 /* Products */ = { + isa = PBXGroup; + children = ( + 48AD92992771E36400881431 /* GetImageFromJson.app */, + ); + name = Products; + sourceTree = ""; + }; + 48AD929B2771E36400881431 /* GetImageFromJson */ = { + isa = PBXGroup; + children = ( + 48AD929C2771E36400881431 /* AppDelegate.swift */, + 48AD929E2771E36400881431 /* SceneDelegate.swift */, + 48AD92A02771E36400881431 /* ViewController.swift */, + 48AD92B22771E5A900881431 /* DataModel.swift */, + 48AD92B02771E49000881431 /* TableViewCell.swift */, + 48AD92A22771E36400881431 /* Main.storyboard */, + 48AD92A52771E36700881431 /* Assets.xcassets */, + 48AD92A72771E36700881431 /* LaunchScreen.storyboard */, + 48AD92AA2771E36700881431 /* Info.plist */, + ); + path = GetImageFromJson; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 48AD92982771E36400881431 /* GetImageFromJson */ = { + isa = PBXNativeTarget; + buildConfigurationList = 48AD92AD2771E36700881431 /* Build configuration list for PBXNativeTarget "GetImageFromJson" */; + buildPhases = ( + 48AD92952771E36400881431 /* Sources */, + 48AD92962771E36400881431 /* Frameworks */, + 48AD92972771E36400881431 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = GetImageFromJson; + productName = GetImageFromJson; + productReference = 48AD92992771E36400881431 /* GetImageFromJson.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 48AD92912771E36400881431 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1300; + LastUpgradeCheck = 1300; + TargetAttributes = { + 48AD92982771E36400881431 = { + CreatedOnToolsVersion = 13.0; + }; + }; + }; + buildConfigurationList = 48AD92942771E36400881431 /* Build configuration list for PBXProject "GetImageFromJson" */; + compatibilityVersion = "Xcode 13.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 48AD92902771E36400881431; + productRefGroup = 48AD929A2771E36400881431 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 48AD92982771E36400881431 /* GetImageFromJson */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 48AD92972771E36400881431 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 48AD92A92771E36700881431 /* LaunchScreen.storyboard in Resources */, + 48AD92A62771E36700881431 /* Assets.xcassets in Resources */, + 48AD92A42771E36400881431 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 48AD92952771E36400881431 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 48AD92B32771E5A900881431 /* DataModel.swift in Sources */, + 48AD92A12771E36400881431 /* ViewController.swift in Sources */, + 48AD92B12771E49000881431 /* TableViewCell.swift in Sources */, + 48AD929D2771E36400881431 /* AppDelegate.swift in Sources */, + 48AD929F2771E36400881431 /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 48AD92A22771E36400881431 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 48AD92A32771E36400881431 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 48AD92A72771E36700881431 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 48AD92A82771E36700881431 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 48AD92AB2771E36700881431 /* 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; + }; + 48AD92AC2771E36700881431 /* 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; + }; + 48AD92AE2771E36700881431 /* 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 = Z2QT229STK; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = GetImageFromJson/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.EbtesamAlahmari.GetImageFromJson; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 48AD92AF2771E36700881431 /* 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 = Z2QT229STK; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = GetImageFromJson/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.EbtesamAlahmari.GetImageFromJson; + 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 */ + 48AD92942771E36400881431 /* Build configuration list for PBXProject "GetImageFromJson" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 48AD92AB2771E36700881431 /* Debug */, + 48AD92AC2771E36700881431 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 48AD92AD2771E36700881431 /* Build configuration list for PBXNativeTarget "GetImageFromJson" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 48AD92AE2771E36700881431 /* Debug */, + 48AD92AF2771E36700881431 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 48AD92912771E36400881431 /* Project object */; +} diff --git a/GetImageFromJson.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/GetImageFromJson.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/GetImageFromJson.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/GetImageFromJson.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/GetImageFromJson.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/GetImageFromJson.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/GetImageFromJson.xcodeproj/project.xcworkspace/xcuserdata/ebtesam.xcuserdatad/UserInterfaceState.xcuserstate b/GetImageFromJson.xcodeproj/project.xcworkspace/xcuserdata/ebtesam.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..73e6161799ee243155fc0bb4d33a1145749f3f48 GIT binary patch literal 24857 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 literal 0 HcmV?d00001 diff --git a/GetImageFromJson.xcodeproj/xcuserdata/ebtesam.xcuserdatad/xcschemes/xcschememanagement.plist b/GetImageFromJson.xcodeproj/xcuserdata/ebtesam.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..bd991cf --- /dev/null +++ b/GetImageFromJson.xcodeproj/xcuserdata/ebtesam.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + GetImageFromJson.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/GetImageFromJson/AppDelegate.swift b/GetImageFromJson/AppDelegate.swift new file mode 100644 index 0000000..8212786 --- /dev/null +++ b/GetImageFromJson/AppDelegate.swift @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// GetImageFromJson +// +// Created by Ebtesam Alahmari 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/GetImageFromJson/Assets.xcassets/AccentColor.colorset/Contents.json b/GetImageFromJson/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/GetImageFromJson/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GetImageFromJson/Assets.xcassets/AppIcon.appiconset/Contents.json b/GetImageFromJson/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..9221b9b --- /dev/null +++ b/GetImageFromJson/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/GetImageFromJson/Assets.xcassets/Contents.json b/GetImageFromJson/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/GetImageFromJson/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GetImageFromJson/Base.lproj/LaunchScreen.storyboard b/GetImageFromJson/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/GetImageFromJson/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GetImageFromJson/Base.lproj/Main.storyboard b/GetImageFromJson/Base.lproj/Main.storyboard new file mode 100644 index 0000000..06ace3b --- /dev/null +++ b/GetImageFromJson/Base.lproj/Main.storyboard @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GetImageFromJson/DataModel.swift b/GetImageFromJson/DataModel.swift new file mode 100644 index 0000000..19aba65 --- /dev/null +++ b/GetImageFromJson/DataModel.swift @@ -0,0 +1,20 @@ +// +// DataModel.swift +// GetImageFromJson +// +// Created by Ebtesam Alahmari on 21/12/2021. +// + +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/GetImageFromJson/Info.plist b/GetImageFromJson/Info.plist new file mode 100644 index 0000000..dd3c9af --- /dev/null +++ b/GetImageFromJson/Info.plist @@ -0,0 +1,25 @@ + + + + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + + diff --git a/GetImageFromJson/SceneDelegate.swift b/GetImageFromJson/SceneDelegate.swift new file mode 100644 index 0000000..f403cf1 --- /dev/null +++ b/GetImageFromJson/SceneDelegate.swift @@ -0,0 +1,52 @@ +// +// SceneDelegate.swift +// GetImageFromJson +// +// Created by Ebtesam Alahmari 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/GetImageFromJson/TableViewCell.swift b/GetImageFromJson/TableViewCell.swift new file mode 100644 index 0000000..ed65040 --- /dev/null +++ b/GetImageFromJson/TableViewCell.swift @@ -0,0 +1,15 @@ +// +// TableViewCell.swift +// GetImageFromJson +// +// Created by Ebtesam Alahmari on 21/12/2021. +// + +import UIKit + +class TableViewCell: UITableViewCell { + + @IBOutlet weak var img: UIImageView! + + +} diff --git a/GetImageFromJson/ViewController.swift b/GetImageFromJson/ViewController.swift new file mode 100644 index 0000000..9ff60ce --- /dev/null +++ b/GetImageFromJson/ViewController.swift @@ -0,0 +1,81 @@ +// +// ViewController.swift +// GetImageFromJson +// +// Created by Ebtesam Alahmari on 21/12/2021. +// + +import UIKit + +class ViewController: UIViewController { + + var imgArr = [UIImage]() + + @IBOutlet weak var tableView: UITableView! + override func viewDidLoad() { + super.viewDidLoad() + tableView.delegate = self + tableView.dataSource = 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("========") + print(decoderData.title) + + decoderData.items.forEach { item in + print(item.media.m) + let newImage = item.media.m + self.imgArr.append(self.getImage(from: newImage)!) + } + + DispatchQueue.main.async{ + self.tableView.reloadData() + } + + }catch { + print(error) + } + } + task.resume() + } + func getImage(from string: String) -> UIImage? { + //2. Get valid URL + guard let url = URL(string: string) + else { + print("Unable to create URL") + return nil + } + var image: UIImage? = nil + do { + //3. Get valid data + let data = try Data(contentsOf: url, options: []) + //4. Make image + image = UIImage(data: data) + } + catch { + print(error.localizedDescription) + } + return image + } + +} + +extension ViewController: UITableViewDelegate, UITableViewDataSource { + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + imgArr.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! TableViewCell + cell.img.image = imgArr[indexPath.row] + return cell + } + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + 260 + } +}