diff --git a/SwiftUITalk.xcodeproj/project.pbxproj b/SwiftUITalk.xcodeproj/project.pbxproj new file mode 100644 index 0000000..79d8281 --- /dev/null +++ b/SwiftUITalk.xcodeproj/project.pbxproj @@ -0,0 +1,423 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + F6D5673F234E340500D0417B /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6D5673E234E340500D0417B /* AppDelegate.swift */; }; + F6D56741234E340500D0417B /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6D56740234E340500D0417B /* SceneDelegate.swift */; }; + F6D56743234E340500D0417B /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6D56742234E340500D0417B /* LoginView.swift */; }; + F6D56745234E340700D0417B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F6D56744234E340700D0417B /* Assets.xcassets */; }; + F6D56748234E340700D0417B /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F6D56747234E340700D0417B /* Preview Assets.xcassets */; }; + F6D5674B234E340700D0417B /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F6D56749234E340700D0417B /* LaunchScreen.storyboard */; }; + F6D56755234F1B9F00D0417B /* BlogListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6D56754234F1B9F00D0417B /* BlogListView.swift */; }; + F6D56757234F1C3100D0417B /* Post.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6D56756234F1C3100D0417B /* Post.swift */; }; + F6D56759234F1C3600D0417B /* Posts.json in Resources */ = {isa = PBXBuildFile; fileRef = F6D56758234F1C3600D0417B /* Posts.json */; }; + F6D5675B234F1C4200D0417B /* DataService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6D5675A234F1C4200D0417B /* DataService.swift */; }; + F6E31D78234F41CB00EA19C4 /* index.html in Resources */ = {isa = PBXBuildFile; fileRef = F6E31D77234F41CB00EA19C4 /* index.html */; }; + F6E31D7C234F41EA00EA19C4 /* WebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6E31D7B234F41EA00EA19C4 /* WebView.swift */; }; + F6E31D7E234F43D500EA19C4 /* PostDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6E31D7D234F43D500EA19C4 /* PostDetailView.swift */; }; + F6E31D82234F4BB000EA19C4 /* Post+Decodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6E31D81234F4BB000EA19C4 /* Post+Decodable.swift */; }; + F6E31D84234F4BCA00EA19C4 /* Author.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6E31D83234F4BCA00EA19C4 /* Author.swift */; }; + F6E31D86234F527B00EA19C4 /* AuthorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6E31D85234F527B00EA19C4 /* AuthorView.swift */; }; + F6E31D88234F58B500EA19C4 /* AuthorsGridView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6E31D87234F58B500EA19C4 /* AuthorsGridView.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + F6D5673B234E340500D0417B /* SwiftUITalk.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwiftUITalk.app; sourceTree = BUILT_PRODUCTS_DIR; }; + F6D5673E234E340500D0417B /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + F6D56740234E340500D0417B /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + F6D56742234E340500D0417B /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = ""; }; + F6D56744234E340700D0417B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + F6D56747234E340700D0417B /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + F6D5674A234E340700D0417B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + F6D5674C234E340700D0417B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + F6D56754234F1B9F00D0417B /* BlogListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlogListView.swift; sourceTree = ""; }; + F6D56756234F1C3100D0417B /* Post.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Post.swift; sourceTree = ""; }; + F6D56758234F1C3600D0417B /* Posts.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Posts.json; sourceTree = ""; }; + F6D5675A234F1C4200D0417B /* DataService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataService.swift; sourceTree = ""; }; + F6E31D77234F41CB00EA19C4 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; + F6E31D7B234F41EA00EA19C4 /* WebView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebView.swift; sourceTree = ""; }; + F6E31D7D234F43D500EA19C4 /* PostDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostDetailView.swift; sourceTree = ""; }; + F6E31D81234F4BB000EA19C4 /* Post+Decodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Post+Decodable.swift"; sourceTree = ""; }; + F6E31D83234F4BCA00EA19C4 /* Author.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Author.swift; sourceTree = ""; }; + F6E31D85234F527B00EA19C4 /* AuthorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthorView.swift; sourceTree = ""; }; + F6E31D87234F58B500EA19C4 /* AuthorsGridView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthorsGridView.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + F6D56738234E340500D0417B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + F6D56732234E340500D0417B = { + isa = PBXGroup; + children = ( + F6D5673D234E340500D0417B /* SwiftUITalk */, + F6D5673C234E340500D0417B /* Products */, + ); + sourceTree = ""; + }; + F6D5673C234E340500D0417B /* Products */ = { + isa = PBXGroup; + children = ( + F6D5673B234E340500D0417B /* SwiftUITalk.app */, + ); + name = Products; + sourceTree = ""; + }; + F6D5673D234E340500D0417B /* SwiftUITalk */ = { + isa = PBXGroup; + children = ( + F6D5673E234E340500D0417B /* AppDelegate.swift */, + F6D56740234E340500D0417B /* SceneDelegate.swift */, + F6D5675C234F1C4A00D0417B /* Views */, + F6E4CB1C235DA1E600C71E3B /* Models */, + F6E4CB1D235DA1F500C71E3B /* Services */, + F6D5675D234F1C5800D0417B /* Extensions */, + F6D56758234F1C3600D0417B /* Posts.json */, + F6E31D77234F41CB00EA19C4 /* index.html */, + F6D56744234E340700D0417B /* Assets.xcassets */, + F6D56749234E340700D0417B /* LaunchScreen.storyboard */, + F6D5674C234E340700D0417B /* Info.plist */, + F6D56746234E340700D0417B /* Preview Content */, + ); + path = SwiftUITalk; + sourceTree = ""; + }; + F6D56746234E340700D0417B /* Preview Content */ = { + isa = PBXGroup; + children = ( + F6D56747234E340700D0417B /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; + F6D5675C234F1C4A00D0417B /* Views */ = { + isa = PBXGroup; + children = ( + F6D56742234E340500D0417B /* LoginView.swift */, + F6D56754234F1B9F00D0417B /* BlogListView.swift */, + F6E31D7D234F43D500EA19C4 /* PostDetailView.swift */, + F6E31D85234F527B00EA19C4 /* AuthorView.swift */, + F6E31D7B234F41EA00EA19C4 /* WebView.swift */, + F6E31D87234F58B500EA19C4 /* AuthorsGridView.swift */, + ); + path = Views; + sourceTree = ""; + }; + F6D5675D234F1C5800D0417B /* Extensions */ = { + isa = PBXGroup; + children = ( + F6E31D81234F4BB000EA19C4 /* Post+Decodable.swift */, + ); + path = Extensions; + sourceTree = ""; + }; + F6E4CB1C235DA1E600C71E3B /* Models */ = { + isa = PBXGroup; + children = ( + F6D56756234F1C3100D0417B /* Post.swift */, + F6E31D83234F4BCA00EA19C4 /* Author.swift */, + ); + path = Models; + sourceTree = ""; + }; + F6E4CB1D235DA1F500C71E3B /* Services */ = { + isa = PBXGroup; + children = ( + F6D5675A234F1C4200D0417B /* DataService.swift */, + ); + path = Services; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + F6D5673A234E340500D0417B /* SwiftUITalk */ = { + isa = PBXNativeTarget; + buildConfigurationList = F6D5674F234E340700D0417B /* Build configuration list for PBXNativeTarget "SwiftUITalk" */; + buildPhases = ( + F6D56737234E340500D0417B /* Sources */, + F6D56738234E340500D0417B /* Frameworks */, + F6D56739234E340500D0417B /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SwiftUITalk; + productName = SwiftUITalk; + productReference = F6D5673B234E340500D0417B /* SwiftUITalk.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + F6D56733234E340500D0417B /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1110; + LastUpgradeCheck = 1110; + ORGANIZATIONNAME = "QuickBird Studios GmbH"; + TargetAttributes = { + F6D5673A234E340500D0417B = { + CreatedOnToolsVersion = 11.1; + }; + }; + }; + buildConfigurationList = F6D56736234E340500D0417B /* Build configuration list for PBXProject "SwiftUITalk" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = F6D56732234E340500D0417B; + productRefGroup = F6D5673C234E340500D0417B /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + F6D5673A234E340500D0417B /* SwiftUITalk */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + F6D56739234E340500D0417B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F6E31D78234F41CB00EA19C4 /* index.html in Resources */, + F6D5674B234E340700D0417B /* LaunchScreen.storyboard in Resources */, + F6D56748234E340700D0417B /* Preview Assets.xcassets in Resources */, + F6D56745234E340700D0417B /* Assets.xcassets in Resources */, + F6D56759234F1C3600D0417B /* Posts.json in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + F6D56737234E340500D0417B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F6E31D7E234F43D500EA19C4 /* PostDetailView.swift in Sources */, + F6E31D88234F58B500EA19C4 /* AuthorsGridView.swift in Sources */, + F6D56755234F1B9F00D0417B /* BlogListView.swift in Sources */, + F6E31D7C234F41EA00EA19C4 /* WebView.swift in Sources */, + F6D5675B234F1C4200D0417B /* DataService.swift in Sources */, + F6E31D86234F527B00EA19C4 /* AuthorView.swift in Sources */, + F6D5673F234E340500D0417B /* AppDelegate.swift in Sources */, + F6E31D84234F4BCA00EA19C4 /* Author.swift in Sources */, + F6E31D82234F4BB000EA19C4 /* Post+Decodable.swift in Sources */, + F6D56741234E340500D0417B /* SceneDelegate.swift in Sources */, + F6D56743234E340500D0417B /* LoginView.swift in Sources */, + F6D56757234F1C3100D0417B /* Post.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + F6D56749234E340700D0417B /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + F6D5674A234E340700D0417B /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + F6D5674D234E340700D0417B /* 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++14"; + 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_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 = 13.1; + 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; + }; + F6D5674E234E340700D0417B /* 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++14"; + 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_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 = 13.1; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + F6D56750234E340700D0417B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_ASSET_PATHS = "\"SwiftUITalk/Preview Content\""; + DEVELOPMENT_TEAM = 77E79NGPCV; + ENABLE_PREVIEWS = YES; + INFOPLIST_FILE = SwiftUITalk/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.quickbirdstudios.SwiftUITalk; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + F6D56751234E340700D0417B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_ASSET_PATHS = "\"SwiftUITalk/Preview Content\""; + DEVELOPMENT_TEAM = 77E79NGPCV; + ENABLE_PREVIEWS = YES; + INFOPLIST_FILE = SwiftUITalk/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.quickbirdstudios.SwiftUITalk; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + F6D56736234E340500D0417B /* Build configuration list for PBXProject "SwiftUITalk" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F6D5674D234E340700D0417B /* Debug */, + F6D5674E234E340700D0417B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F6D5674F234E340700D0417B /* Build configuration list for PBXNativeTarget "SwiftUITalk" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F6D56750234E340700D0417B /* Debug */, + F6D56751234E340700D0417B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = F6D56733234E340500D0417B /* Project object */; +} diff --git a/SwiftUITalk.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SwiftUITalk.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..3b24d67 --- /dev/null +++ b/SwiftUITalk.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/SwiftUITalk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/SwiftUITalk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/SwiftUITalk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/SwiftUITalk.xcodeproj/project.xcworkspace/xcuserdata/nasir.xcuserdatad/UserInterfaceState.xcuserstate b/SwiftUITalk.xcodeproj/project.xcworkspace/xcuserdata/nasir.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..ff85e4c Binary files /dev/null and b/SwiftUITalk.xcodeproj/project.xcworkspace/xcuserdata/nasir.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/SwiftUITalk.xcodeproj/project.xcworkspace/xcuserdata/stefankofler.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/SwiftUITalk.xcodeproj/project.xcworkspace/xcuserdata/stefankofler.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..244a484 --- /dev/null +++ b/SwiftUITalk.xcodeproj/project.xcworkspace/xcuserdata/stefankofler.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,6 @@ + + + diff --git a/SwiftUITalk.xcodeproj/xcuserdata/nasir.xcuserdatad/xcschemes/xcschememanagement.plist b/SwiftUITalk.xcodeproj/xcuserdata/nasir.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..1f44a1b --- /dev/null +++ b/SwiftUITalk.xcodeproj/xcuserdata/nasir.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + SwiftUITalk.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/SwiftUITalk.xcodeproj/xcuserdata/stefankofler.xcuserdatad/xcschemes/xcschememanagement.plist b/SwiftUITalk.xcodeproj/xcuserdata/stefankofler.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..1f44a1b --- /dev/null +++ b/SwiftUITalk.xcodeproj/xcuserdata/stefankofler.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + SwiftUITalk.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/SwiftUITalk/AppDelegate.swift b/SwiftUITalk/AppDelegate.swift new file mode 100644 index 0000000..c33646a --- /dev/null +++ b/SwiftUITalk/AppDelegate.swift @@ -0,0 +1,35 @@ +// +// AppDelegate.swift +// SwiftUITalk +// +// Created by Stefan Kofler on 09.10.19. +// Copyright © 2019 QuickBird Studios GmbH. All rights reserved. +// + +import UIKit + +@UIApplicationMain +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/SwiftUITalk/Assets.xcassets/10.imageset/10.jpg b/SwiftUITalk/Assets.xcassets/10.imageset/10.jpg new file mode 100644 index 0000000..b155ee9 Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/10.imageset/10.jpg differ diff --git a/SwiftUITalk/Assets.xcassets/10.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/10.imageset/Contents.json new file mode 100644 index 0000000..27b9400 --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/10.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "10.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/170.imageset/170.jpg b/SwiftUITalk/Assets.xcassets/170.imageset/170.jpg new file mode 100644 index 0000000..1854170 Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/170.imageset/170.jpg differ diff --git a/SwiftUITalk/Assets.xcassets/170.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/170.imageset/Contents.json new file mode 100644 index 0000000..0820f85 --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/170.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "170.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/2.imageset/2.jpg b/SwiftUITalk/Assets.xcassets/2.imageset/2.jpg new file mode 100644 index 0000000..c9eba07 Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/2.imageset/2.jpg differ diff --git a/SwiftUITalk/Assets.xcassets/2.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/2.imageset/Contents.json new file mode 100644 index 0000000..d0a044a --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/2.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "2.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/222.imageset/222.jpg b/SwiftUITalk/Assets.xcassets/222.imageset/222.jpg new file mode 100644 index 0000000..bbe8d3c Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/222.imageset/222.jpg differ diff --git a/SwiftUITalk/Assets.xcassets/222.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/222.imageset/Contents.json new file mode 100644 index 0000000..c287bf9 --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/222.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "222.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/250.imageset/250.jpg b/SwiftUITalk/Assets.xcassets/250.imageset/250.jpg new file mode 100644 index 0000000..f4aff32 Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/250.imageset/250.jpg differ diff --git a/SwiftUITalk/Assets.xcassets/250.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/250.imageset/Contents.json new file mode 100644 index 0000000..6c5caa0 --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/250.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "250.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/34.imageset/34.jpg b/SwiftUITalk/Assets.xcassets/34.imageset/34.jpg new file mode 100644 index 0000000..b66b7c5 Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/34.imageset/34.jpg differ diff --git a/SwiftUITalk/Assets.xcassets/34.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/34.imageset/Contents.json new file mode 100644 index 0000000..7788d58 --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/34.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "34.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/340.imageset/340.jpg b/SwiftUITalk/Assets.xcassets/340.imageset/340.jpg new file mode 100644 index 0000000..386ebb9 Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/340.imageset/340.jpg differ diff --git a/SwiftUITalk/Assets.xcassets/340.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/340.imageset/Contents.json new file mode 100644 index 0000000..3ede87f --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/340.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "340.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/370.imageset/370.jpg b/SwiftUITalk/Assets.xcassets/370.imageset/370.jpg new file mode 100644 index 0000000..9a266e4 Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/370.imageset/370.jpg differ diff --git a/SwiftUITalk/Assets.xcassets/370.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/370.imageset/Contents.json new file mode 100644 index 0000000..448b2ce --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/370.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "370.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/398.imageset/398.jpg b/SwiftUITalk/Assets.xcassets/398.imageset/398.jpg new file mode 100644 index 0000000..8688198 Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/398.imageset/398.jpg differ diff --git a/SwiftUITalk/Assets.xcassets/398.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/398.imageset/Contents.json new file mode 100644 index 0000000..c6e7f00 --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/398.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "398.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/4.imageset/4.jpg b/SwiftUITalk/Assets.xcassets/4.imageset/4.jpg new file mode 100644 index 0000000..1a3115c Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/4.imageset/4.jpg differ diff --git a/SwiftUITalk/Assets.xcassets/4.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/4.imageset/Contents.json new file mode 100644 index 0000000..a21b3af --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/4.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "4.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/417.imageset/417.jpg b/SwiftUITalk/Assets.xcassets/417.imageset/417.jpg new file mode 100644 index 0000000..79e7787 Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/417.imageset/417.jpg differ diff --git a/SwiftUITalk/Assets.xcassets/417.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/417.imageset/Contents.json new file mode 100644 index 0000000..815157e --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/417.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "417.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/456.imageset/456.png b/SwiftUITalk/Assets.xcassets/456.imageset/456.png new file mode 100644 index 0000000..1fd61d6 Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/456.imageset/456.png differ diff --git a/SwiftUITalk/Assets.xcassets/456.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/456.imageset/Contents.json new file mode 100644 index 0000000..9a96210 --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/456.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "456.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/513.imageset/513.jpg b/SwiftUITalk/Assets.xcassets/513.imageset/513.jpg new file mode 100644 index 0000000..bd49548 Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/513.imageset/513.jpg differ diff --git a/SwiftUITalk/Assets.xcassets/513.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/513.imageset/Contents.json new file mode 100644 index 0000000..bdf1d4b --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/513.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "513.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/591.imageset/591.jpg b/SwiftUITalk/Assets.xcassets/591.imageset/591.jpg new file mode 100644 index 0000000..a6569e9 Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/591.imageset/591.jpg differ diff --git a/SwiftUITalk/Assets.xcassets/591.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/591.imageset/Contents.json new file mode 100644 index 0000000..1073bf6 --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/591.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "591.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/6.imageset/6.jpg b/SwiftUITalk/Assets.xcassets/6.imageset/6.jpg new file mode 100644 index 0000000..ebec0f9 Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/6.imageset/6.jpg differ diff --git a/SwiftUITalk/Assets.xcassets/6.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/6.imageset/Contents.json new file mode 100644 index 0000000..3333179 --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/6.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "6.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/660.imageset/660.jpg b/SwiftUITalk/Assets.xcassets/660.imageset/660.jpg new file mode 100644 index 0000000..9793ffc Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/660.imageset/660.jpg differ diff --git a/SwiftUITalk/Assets.xcassets/660.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/660.imageset/Contents.json new file mode 100644 index 0000000..2a88589 --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/660.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "660.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/699.imageset/699.jpg b/SwiftUITalk/Assets.xcassets/699.imageset/699.jpg new file mode 100644 index 0000000..6912392 Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/699.imageset/699.jpg differ diff --git a/SwiftUITalk/Assets.xcassets/699.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/699.imageset/Contents.json new file mode 100644 index 0000000..413158f --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/699.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "699.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/7.imageset/7.jpg b/SwiftUITalk/Assets.xcassets/7.imageset/7.jpg new file mode 100644 index 0000000..705b8e5 Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/7.imageset/7.jpg differ diff --git a/SwiftUITalk/Assets.xcassets/7.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/7.imageset/Contents.json new file mode 100644 index 0000000..65c1e65 --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/7.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "7.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/725.imageset/725.jpg b/SwiftUITalk/Assets.xcassets/725.imageset/725.jpg new file mode 100644 index 0000000..94a5b3d Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/725.imageset/725.jpg differ diff --git a/SwiftUITalk/Assets.xcassets/725.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/725.imageset/Contents.json new file mode 100644 index 0000000..600976e --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/725.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "725.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/757.imageset/757.jpg b/SwiftUITalk/Assets.xcassets/757.imageset/757.jpg new file mode 100644 index 0000000..11ed5d7 Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/757.imageset/757.jpg differ diff --git a/SwiftUITalk/Assets.xcassets/757.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/757.imageset/Contents.json new file mode 100644 index 0000000..2401ca8 --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/757.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "757.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/8.imageset/8.jpg b/SwiftUITalk/Assets.xcassets/8.imageset/8.jpg new file mode 100644 index 0000000..d6ddc9d Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/8.imageset/8.jpg differ diff --git a/SwiftUITalk/Assets.xcassets/8.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/8.imageset/Contents.json new file mode 100644 index 0000000..d8cd967 --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/8.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "8.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/831.imageset/831.jpg b/SwiftUITalk/Assets.xcassets/831.imageset/831.jpg new file mode 100644 index 0000000..e53f407 Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/831.imageset/831.jpg differ diff --git a/SwiftUITalk/Assets.xcassets/831.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/831.imageset/Contents.json new file mode 100644 index 0000000..1202326 --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/831.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "831.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/864.imageset/864.jpg b/SwiftUITalk/Assets.xcassets/864.imageset/864.jpg new file mode 100644 index 0000000..acbd9fe Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/864.imageset/864.jpg differ diff --git a/SwiftUITalk/Assets.xcassets/864.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/864.imageset/Contents.json new file mode 100644 index 0000000..b166b3a --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/864.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "864.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/AppIcon.appiconset/Contents.json b/SwiftUITalk/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/Contents.json b/SwiftUITalk/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/qb_logo.imageset/Contents.json b/SwiftUITalk/Assets.xcassets/qb_logo.imageset/Contents.json new file mode 100644 index 0000000..1b25793 --- /dev/null +++ b/SwiftUITalk/Assets.xcassets/qb_logo.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "qb_logo.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SwiftUITalk/Assets.xcassets/qb_logo.imageset/qb_logo.png b/SwiftUITalk/Assets.xcassets/qb_logo.imageset/qb_logo.png new file mode 100644 index 0000000..2407df1 Binary files /dev/null and b/SwiftUITalk/Assets.xcassets/qb_logo.imageset/qb_logo.png differ diff --git a/SwiftUITalk/Base.lproj/LaunchScreen.storyboard b/SwiftUITalk/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/SwiftUITalk/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SwiftUITalk/Extensions/Post+Decodable.swift b/SwiftUITalk/Extensions/Post+Decodable.swift new file mode 100644 index 0000000..0c68407 --- /dev/null +++ b/SwiftUITalk/Extensions/Post+Decodable.swift @@ -0,0 +1,53 @@ +// +// Post+Decodable.swift +// SwiftUITalk +// +// Created by Stefan Kofler on 10.10.19. +// Copyright © 2019 QuickBird Studios GmbH. All rights reserved. +// + +import Foundation + +extension Post: Decodable { + + enum CodingKeys: String, CodingKey { + case id + case date + case modified + case link + case title + case content + case excerpt + case embedded = "_embedded" + } + + init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + + id = try values.decode(Int.self, forKey: .id) + date = try values.decode(Date.self, forKey: .date) + modified = try values.decode(Date.self, forKey: .modified) + link = try values.decode(String.self, forKey: .link) + + let title = try values.nestedContainer(keyedBy: RenderedKeys.self, forKey: .title) + self.title = try title.decode(String.self, forKey: .rendered) + + let content = try values.nestedContainer(keyedBy: RenderedKeys.self, forKey: .content) + self.content = try content.decode(String.self, forKey: .rendered) + + let excerpt = try values.nestedContainer(keyedBy: RenderedKeys.self, forKey: .excerpt) + self.excerpt = try excerpt.decode(String.self, forKey: .rendered) + + let embedded = try values.nestedContainer(keyedBy: EmbeddedKeys.self, forKey: .embedded) + self.author = try embedded.decode([Author].self, forKey: .author)[0] + } + + enum RenderedKeys: String, CodingKey { + case rendered + } + + enum EmbeddedKeys: String, CodingKey { + case author + } + +} diff --git a/SwiftUITalk/Info.plist b/SwiftUITalk/Info.plist new file mode 100644 index 0000000..9742bf0 --- /dev/null +++ b/SwiftUITalk/Info.plist @@ -0,0 +1,60 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + + + + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/SwiftUITalk/Models/Author.swift b/SwiftUITalk/Models/Author.swift new file mode 100644 index 0000000..c8bc940 --- /dev/null +++ b/SwiftUITalk/Models/Author.swift @@ -0,0 +1,33 @@ +// +// Author.swift +// SwiftUITalk +// +// Created by Stefan Kofler on 10.10.19. +// Copyright © 2019 QuickBird Studios GmbH. All rights reserved. +// + +import Foundation +import UIKit + +struct Author { + let id: Int + let name: String + let description: String +} + +extension Author: Decodable {} +extension Author: Hashable {} + +extension Author { + + var image: UIImage { + UIImage(named: "\(id)")! + } + + var longDescription: String { + """ + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + """ + } + +} diff --git a/SwiftUITalk/Models/Post.swift b/SwiftUITalk/Models/Post.swift new file mode 100644 index 0000000..519ab4e --- /dev/null +++ b/SwiftUITalk/Models/Post.swift @@ -0,0 +1,44 @@ +// +// Post.swift +// SwiftUITest +// +// Created by Stefan Kofler on 24.09.19. +// Copyright © 2019 QuickBird Studios GmbH. All rights reserved. +// + +import Foundation +import UIKit + +struct Post { + let id: Int + let date: Date + let modified: Date + let link: String + let title: String + let content: String + let excerpt: String + let author: Author +} + +extension Post: Identifiable {} + +extension Post { + + var formattedDate: String { + let dateFormatter = DateFormatter() + dateFormatter.dateStyle = .medium + return dateFormatter.string(from: date) + } + + var header: UIImage { + UIImage(named: "\(id)")! + } + + var prettyHTML: String { + let htmlURL = Bundle.main.url(forResource: "index", withExtension: "html")! + let htmlTemplateCode = try! String(contentsOf: htmlURL) + return htmlTemplateCode.replacingOccurrences(of: "$PLACEHOLDER$", with: content) + } + +} + diff --git a/SwiftUITalk/Posts.json b/SwiftUITalk/Posts.json new file mode 100644 index 0000000..25bfff4 --- /dev/null +++ b/SwiftUITalk/Posts.json @@ -0,0 +1 @@ +[{"id":864,"date":"2019-09-09T00:20:24","date_gmt":"2019-09-09T00:20:24","guid":{"rendered":"https:\/\/quickbirdstudios.com\/blog\/?p=864"},"modified":"2019-09-25T09:48:29","modified_gmt":"2019-09-25T09:48:29","slug":"gradle-kotlin-buildsrc-plugin-android","status":"publish","type":"post","link":"https:\/\/quickbirdstudios.com\/blog\/gradle-kotlin-buildsrc-plugin-android\/","title":{"rendered":"I hated Gradle! Kotlin and the buildSrc Plugin made me love it"},"content":{"rendered":"

Let\u2019s talk about the elephant in the room\u2026 Gradle\u2026<\/p>\n

\"\"<\/p>\n

To be honest, I hated<\/strong> Gradle. It was always one of the biggest pain points in my carrier as a developer. Whenever I ran into a \u201eGradle issue\u201c during Android development, I immediately knew: This is going to be a bad day. All I could then do is copy and paste small little snippets from Stackoverflow, not understanding a single bit what they do and hoping they would work.<\/p>\n

\"\"<\/p>\n

I did this until some small snippet \u201esolved\u201c the problem, unknowingly that this will cause some other issue later. It was the circle of \u201eGradle issues\u201c and I felt that everyone in the team handled it pretty similar. Talking to other developers at meetups revealed: This was not just us. Almost everyone was doing it exactly like this.<\/p>\n

Except, some Gradle wizards. They knew the answers\u2026 The knew how to tame the beast and I was absolutely thrilled by their skills! In this article, I would like to share our team’s path to \u201eGradle Mastery\u201c and how easily you can become the guy taming the beast.<\/p>\n

The true source of all evil<\/h3>\n

But before we start fixing our problems with Gradle, let\u2019s try to identify what the \u201etrue source of all evil\u201c is. Especially in the Android community, we often see Gradle being blamed for almost everything: Builds are slow: \u201eOh f_ck Gradle!\u201c. Publishing a library is confusing: \u201eOh f_ck Gradle!\u201c. There are issues with Databinding: \u201eOh f_ck Gradle!\u201c. Let\u2019s clarify one thing:<\/p>\n

Android-Gradle-Plugin != Gradle. People used to talk about those two interchangeably, especially at times were the version names of both were pretty similar. Many problems we saw in the last years were not particularly Gradle issues. Blaming build times of Android Projects solely onto Gradle seems not fair to me and plays a huge role in the ongoing witch-hunt against Gradle. So that this is out of our way, what is now causing our pain?<\/p>\n

Groovy. It\u2019s Groovy.<\/p>\n

\"\"<\/p>\n

Please don\u2019t get me wrong: I am not trying to judge Groovy as a language. I never used Groovy for \u201ea real project\u201c, but using it as a Java\/Kotlin developer without any hints of the IDE is absolutely terrifying. To be honest: As I started Android development, I thought that build.gradle<\/code> files just use some kind of \u201emagical markup language\u201c which I was unable to make sense of.<\/p>\n

The lord and savior: Kotlin & the buildSrc module?<\/h3>\n

But then Kotlin announced that their new Multiplatform Plugin is now supporting the also pretty new Kotlin Gradle DSL<\/a> and the team wanted to evaluate this technology for our use cases. You can find our results in this blog post<\/a>. After we forced ourselves to write build files using Kotlin, it suddenly made the click. Suddenly we can just write code, as we are used to, read documentation as we are used to, click into the implementation of functions that we are using, as we are used to. This is a game-changer for us! Suddenly the Gradle ecosystem laid itself out right in front of us and we liked it a lot.<\/p>\n

We started to investigate how we could improve our build scripts even more and found something very promising: The \u201ebuildSrc\u201c folder.<\/p>\n

\"\"<\/p>\n

It\u2019s basically a plain old Gradle module\u2026 with one twist to it! It will be the very first thing that is built and all the code you write in there will be available later in your build.gradle.kts<\/code> files! This starts to blur the line between what we considered to be \u201ecoding\u201c and \u201ewriting build files\u201c and it\u2019s even much better than the already cool build.gradle.kts<\/code> because of a better, more fluent IDE support as well as all the additionally gained freedom by \u201ejust having a Gradle module\u201c. We can now structure our code arbitrarily, use dependency injection, read properties from files, etc: The sky is the limit!<\/p>\n

We also looked at what other people are currently using this awesome buildSrc folder for at the moment and we found several articles about managing dependencies, that we liked a lot!<\/p>\n