From b8b4c6ea561f98fb4794643db10f21e8cf9b7c94 Mon Sep 17 00:00:00 2001 From: Ahmed Shendy Date: Tue, 16 May 2023 23:01:43 +0300 Subject: [PATCH 1/8] package init --- .gitignore | 9 ++++++ Package.swift | 28 +++++++++++++++++++ Sources/OpenMaterialUI/OpenMaterialUI.swift | 6 ++++ .../OpenMaterialUITests.swift | 11 ++++++++ 4 files changed, 54 insertions(+) create mode 100644 .gitignore create mode 100644 Package.swift create mode 100644 Sources/OpenMaterialUI/OpenMaterialUI.swift create mode 100644 Tests/OpenMaterialUITests/OpenMaterialUITests.swift diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3b29812 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +.DS_Store +/.build +/Packages +/*.xcodeproj +xcuserdata/ +DerivedData/ +.swiftpm/config/registries.json +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +.netrc diff --git a/Package.swift b/Package.swift new file mode 100644 index 0000000..2f5ffe5 --- /dev/null +++ b/Package.swift @@ -0,0 +1,28 @@ +// swift-tools-version: 5.7 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "OpenMaterialUI", + products: [ + // Products define the executables and libraries a package produces, and make them visible to other packages. + .library( + name: "OpenMaterialUI", + targets: ["OpenMaterialUI"]), + ], + dependencies: [ + // Dependencies declare other packages that this package depends on. + // .package(url: /* package url */, from: "1.0.0"), + ], + targets: [ + // Targets are the basic building blocks of a package. A target can define a module or a test suite. + // Targets can depend on other targets in this package, and on products in packages this package depends on. + .target( + name: "OpenMaterialUI", + dependencies: []), + .testTarget( + name: "OpenMaterialUITests", + dependencies: ["OpenMaterialUI"]), + ] +) diff --git a/Sources/OpenMaterialUI/OpenMaterialUI.swift b/Sources/OpenMaterialUI/OpenMaterialUI.swift new file mode 100644 index 0000000..41bd80b --- /dev/null +++ b/Sources/OpenMaterialUI/OpenMaterialUI.swift @@ -0,0 +1,6 @@ +public struct OpenMaterialUI { + public private(set) var text = "Hello, World!" + + public init() { + } +} diff --git a/Tests/OpenMaterialUITests/OpenMaterialUITests.swift b/Tests/OpenMaterialUITests/OpenMaterialUITests.swift new file mode 100644 index 0000000..598eaf5 --- /dev/null +++ b/Tests/OpenMaterialUITests/OpenMaterialUITests.swift @@ -0,0 +1,11 @@ +import XCTest +@testable import OpenMaterialUI + +final class OpenMaterialUITests: XCTestCase { + func testExample() throws { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct + // results. + XCTAssertEqual(OpenMaterialUI().text, "Hello, World!") + } +} From cafc02e5a198c235f202470d6a066267f314e79c Mon Sep 17 00:00:00 2001 From: Ahmed Shendy Date: Tue, 16 May 2023 23:13:01 +0300 Subject: [PATCH 2/8] Add iOS 16.0 platform support --- Package.swift | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Package.swift b/Package.swift index 2f5ffe5..92a577e 100644 --- a/Package.swift +++ b/Package.swift @@ -5,11 +5,15 @@ import PackageDescription let package = Package( name: "OpenMaterialUI", + platforms: [ + .iOS(.v16) + ], products: [ // Products define the executables and libraries a package produces, and make them visible to other packages. .library( name: "OpenMaterialUI", - targets: ["OpenMaterialUI"]), + targets: ["OpenMaterialUI"] + ), ], dependencies: [ // Dependencies declare other packages that this package depends on. @@ -20,9 +24,11 @@ let package = Package( // Targets can depend on other targets in this package, and on products in packages this package depends on. .target( name: "OpenMaterialUI", - dependencies: []), + dependencies: [] + ), .testTarget( name: "OpenMaterialUITests", - dependencies: ["OpenMaterialUI"]), + dependencies: ["OpenMaterialUI"] + ), ] ) From 59250bef46d3b15314441c1c3438eb25391e8b8a Mon Sep 17 00:00:00 2001 From: Ahmed Shendy Date: Sun, 21 May 2023 00:27:54 +0300 Subject: [PATCH 3/8] Add playground project --- .../project.pbxproj | 372 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 13 + .../Assets.xcassets/Contents.json | 6 + .../ContentView.swift | 27 ++ .../OpenMaterialUIPlaygroundApp.swift | 17 + .../Preview Assets.xcassets/Contents.json | 6 + 9 files changed, 467 insertions(+) create mode 100644 playground/OpenMaterialUIPlayground.xcodeproj/project.pbxproj create mode 100644 playground/OpenMaterialUIPlayground.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 playground/OpenMaterialUIPlayground.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 playground/OpenMaterialUIPlayground/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 playground/OpenMaterialUIPlayground/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 playground/OpenMaterialUIPlayground/Assets.xcassets/Contents.json create mode 100644 playground/OpenMaterialUIPlayground/ContentView.swift create mode 100644 playground/OpenMaterialUIPlayground/OpenMaterialUIPlaygroundApp.swift create mode 100644 playground/OpenMaterialUIPlayground/Preview Content/Preview Assets.xcassets/Contents.json diff --git a/playground/OpenMaterialUIPlayground.xcodeproj/project.pbxproj b/playground/OpenMaterialUIPlayground.xcodeproj/project.pbxproj new file mode 100644 index 0000000..c7b454c --- /dev/null +++ b/playground/OpenMaterialUIPlayground.xcodeproj/project.pbxproj @@ -0,0 +1,372 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + 64097B6F2A1971E500231FC9 /* OpenMaterialUIPlaygroundApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64097B6E2A1971E500231FC9 /* OpenMaterialUIPlaygroundApp.swift */; }; + 64097B712A1971E500231FC9 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64097B702A1971E500231FC9 /* ContentView.swift */; }; + 64097B732A1971E600231FC9 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 64097B722A1971E600231FC9 /* Assets.xcassets */; }; + 64097B762A1971E600231FC9 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 64097B752A1971E600231FC9 /* Preview Assets.xcassets */; }; + 64DA873B2A1972830010C181 /* OpenMaterialUI in Frameworks */ = {isa = PBXBuildFile; productRef = 64DA873A2A1972830010C181 /* OpenMaterialUI */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 64097B6B2A1971E500231FC9 /* OpenMaterialUIPlayground.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = OpenMaterialUIPlayground.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 64097B6E2A1971E500231FC9 /* OpenMaterialUIPlaygroundApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenMaterialUIPlaygroundApp.swift; sourceTree = ""; }; + 64097B702A1971E500231FC9 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + 64097B722A1971E600231FC9 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 64097B752A1971E600231FC9 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + 64DA87382A1972470010C181 /* OpenMaterialUI */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = OpenMaterialUI; path = ..; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 64097B682A1971E500231FC9 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 64DA873B2A1972830010C181 /* OpenMaterialUI in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 64097B622A1971E500231FC9 = { + isa = PBXGroup; + children = ( + 64DA87372A1972470010C181 /* Packages */, + 64097B6D2A1971E500231FC9 /* OpenMaterialUIPlayground */, + 64097B6C2A1971E500231FC9 /* Products */, + 64DA87392A1972830010C181 /* Frameworks */, + ); + sourceTree = ""; + }; + 64097B6C2A1971E500231FC9 /* Products */ = { + isa = PBXGroup; + children = ( + 64097B6B2A1971E500231FC9 /* OpenMaterialUIPlayground.app */, + ); + name = Products; + sourceTree = ""; + }; + 64097B6D2A1971E500231FC9 /* OpenMaterialUIPlayground */ = { + isa = PBXGroup; + children = ( + 64097B6E2A1971E500231FC9 /* OpenMaterialUIPlaygroundApp.swift */, + 64097B702A1971E500231FC9 /* ContentView.swift */, + 64097B722A1971E600231FC9 /* Assets.xcassets */, + 64097B742A1971E600231FC9 /* Preview Content */, + ); + path = OpenMaterialUIPlayground; + sourceTree = ""; + }; + 64097B742A1971E600231FC9 /* Preview Content */ = { + isa = PBXGroup; + children = ( + 64097B752A1971E600231FC9 /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; + 64DA87372A1972470010C181 /* Packages */ = { + isa = PBXGroup; + children = ( + 64DA87382A1972470010C181 /* OpenMaterialUI */, + ); + name = Packages; + sourceTree = ""; + }; + 64DA87392A1972830010C181 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 64097B6A2A1971E500231FC9 /* OpenMaterialUIPlayground */ = { + isa = PBXNativeTarget; + buildConfigurationList = 64097B792A1971E600231FC9 /* Build configuration list for PBXNativeTarget "OpenMaterialUIPlayground" */; + buildPhases = ( + 64097B672A1971E500231FC9 /* Sources */, + 64097B682A1971E500231FC9 /* Frameworks */, + 64097B692A1971E500231FC9 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = OpenMaterialUIPlayground; + packageProductDependencies = ( + 64DA873A2A1972830010C181 /* OpenMaterialUI */, + ); + productName = OpenMaterialUIPlayground; + productReference = 64097B6B2A1971E500231FC9 /* OpenMaterialUIPlayground.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 64097B632A1971E500231FC9 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1420; + LastUpgradeCheck = 1420; + TargetAttributes = { + 64097B6A2A1971E500231FC9 = { + CreatedOnToolsVersion = 14.2; + }; + }; + }; + buildConfigurationList = 64097B662A1971E500231FC9 /* Build configuration list for PBXProject "OpenMaterialUIPlayground" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 64097B622A1971E500231FC9; + productRefGroup = 64097B6C2A1971E500231FC9 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 64097B6A2A1971E500231FC9 /* OpenMaterialUIPlayground */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 64097B692A1971E500231FC9 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 64097B762A1971E600231FC9 /* Preview Assets.xcassets in Resources */, + 64097B732A1971E600231FC9 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 64097B672A1971E500231FC9 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 64097B712A1971E500231FC9 /* ContentView.swift in Sources */, + 64097B6F2A1971E500231FC9 /* OpenMaterialUIPlaygroundApp.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 64097B772A1971E600231FC9 /* 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++20"; + 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 = 16.2; + 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; + }; + 64097B782A1971E600231FC9 /* 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++20"; + 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 = 16.2; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 64097B7A2A1971E600231FC9 /* 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_ASSET_PATHS = "\"OpenMaterialUIPlayground/Preview Content\""; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + 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 = openbytes.OpenMaterialUIPlayground; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 64097B7B2A1971E600231FC9 /* 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_ASSET_PATHS = "\"OpenMaterialUIPlayground/Preview Content\""; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + 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 = openbytes.OpenMaterialUIPlayground; + 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 */ + 64097B662A1971E500231FC9 /* Build configuration list for PBXProject "OpenMaterialUIPlayground" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 64097B772A1971E600231FC9 /* Debug */, + 64097B782A1971E600231FC9 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 64097B792A1971E600231FC9 /* Build configuration list for PBXNativeTarget "OpenMaterialUIPlayground" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 64097B7A2A1971E600231FC9 /* Debug */, + 64097B7B2A1971E600231FC9 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCSwiftPackageProductDependency section */ + 64DA873A2A1972830010C181 /* OpenMaterialUI */ = { + isa = XCSwiftPackageProductDependency; + productName = OpenMaterialUI; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 64097B632A1971E500231FC9 /* Project object */; +} diff --git a/playground/OpenMaterialUIPlayground.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/playground/OpenMaterialUIPlayground.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/playground/OpenMaterialUIPlayground.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/playground/OpenMaterialUIPlayground.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/playground/OpenMaterialUIPlayground.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/playground/OpenMaterialUIPlayground.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/playground/OpenMaterialUIPlayground/Assets.xcassets/AccentColor.colorset/Contents.json b/playground/OpenMaterialUIPlayground/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/playground/OpenMaterialUIPlayground/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/playground/OpenMaterialUIPlayground/Assets.xcassets/AppIcon.appiconset/Contents.json b/playground/OpenMaterialUIPlayground/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..13613e3 --- /dev/null +++ b/playground/OpenMaterialUIPlayground/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/playground/OpenMaterialUIPlayground/Assets.xcassets/Contents.json b/playground/OpenMaterialUIPlayground/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/playground/OpenMaterialUIPlayground/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/playground/OpenMaterialUIPlayground/ContentView.swift b/playground/OpenMaterialUIPlayground/ContentView.swift new file mode 100644 index 0000000..9644001 --- /dev/null +++ b/playground/OpenMaterialUIPlayground/ContentView.swift @@ -0,0 +1,27 @@ +// +// ContentView.swift +// OpenMaterialUIPlayground +// +// Created by Ahmed Shendy on 21/05/2023. +// + +import SwiftUI +import OpenMaterialUI + +struct ContentView: View { + var body: some View { + VStack { + Image(systemName: "globe") + .imageScale(.large) + .foregroundColor(.accentColor) + Text("Hello, world!") + } + .padding() + } +} + +struct ContentView_Previews: PreviewProvider { + static var previews: some View { + ContentView() + } +} diff --git a/playground/OpenMaterialUIPlayground/OpenMaterialUIPlaygroundApp.swift b/playground/OpenMaterialUIPlayground/OpenMaterialUIPlaygroundApp.swift new file mode 100644 index 0000000..0399e0a --- /dev/null +++ b/playground/OpenMaterialUIPlayground/OpenMaterialUIPlaygroundApp.swift @@ -0,0 +1,17 @@ +// +// OpenMaterialUIPlaygroundApp.swift +// OpenMaterialUIPlayground +// +// Created by Ahmed Shendy on 21/05/2023. +// + +import SwiftUI + +@main +struct OpenMaterialUIPlaygroundApp: App { + var body: some Scene { + WindowGroup { + ContentView() + } + } +} diff --git a/playground/OpenMaterialUIPlayground/Preview Content/Preview Assets.xcassets/Contents.json b/playground/OpenMaterialUIPlayground/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/playground/OpenMaterialUIPlayground/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} From d9ae3321ed6b5f79d6454db30b91cd219466b478 Mon Sep 17 00:00:00 2001 From: Ahmed Shendy Date: Sun, 21 May 2023 01:18:26 +0300 Subject: [PATCH 4/8] Implement MaterialText --- Sources/OpenMaterialUI/OpenMaterialUI.swift | 6 --- .../OpenMaterialUI/Text/MaterialText.swift | 40 +++++++++++++++++++ .../OpenMaterialUITests.swift | 9 +---- 3 files changed, 41 insertions(+), 14 deletions(-) delete mode 100644 Sources/OpenMaterialUI/OpenMaterialUI.swift create mode 100644 Sources/OpenMaterialUI/Text/MaterialText.swift diff --git a/Sources/OpenMaterialUI/OpenMaterialUI.swift b/Sources/OpenMaterialUI/OpenMaterialUI.swift deleted file mode 100644 index 41bd80b..0000000 --- a/Sources/OpenMaterialUI/OpenMaterialUI.swift +++ /dev/null @@ -1,6 +0,0 @@ -public struct OpenMaterialUI { - public private(set) var text = "Hello, World!" - - public init() { - } -} diff --git a/Sources/OpenMaterialUI/Text/MaterialText.swift b/Sources/OpenMaterialUI/Text/MaterialText.swift new file mode 100644 index 0000000..6fc392d --- /dev/null +++ b/Sources/OpenMaterialUI/Text/MaterialText.swift @@ -0,0 +1,40 @@ +// +// SwiftUIView.swift +// +// +// Created by Ahmed Shendy on 21/05/2023. +// + +import SwiftUI + +@available(iOS 16.0, *) +public struct MaterialText: View { + + private let content: Text + + public init( + _ key: LocalizedStringKey, + tableName: String? = nil, + bundle: Bundle? = nil, + comment: StaticString? = nil + ) { + content = Text( + key, + tableName: tableName, + bundle: bundle, + comment: comment + ) + } + + public var body: some View { + content + } +} + +extension MaterialText: Equatable { } + +struct MaterialText_Previews: PreviewProvider { + static var previews: some View { + MaterialText("Hello, World") + } +} diff --git a/Tests/OpenMaterialUITests/OpenMaterialUITests.swift b/Tests/OpenMaterialUITests/OpenMaterialUITests.swift index 598eaf5..da0fa06 100644 --- a/Tests/OpenMaterialUITests/OpenMaterialUITests.swift +++ b/Tests/OpenMaterialUITests/OpenMaterialUITests.swift @@ -1,11 +1,4 @@ import XCTest @testable import OpenMaterialUI -final class OpenMaterialUITests: XCTestCase { - func testExample() throws { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct - // results. - XCTAssertEqual(OpenMaterialUI().text, "Hello, World!") - } -} +final class OpenMaterialUITests: XCTestCase { } From 07d96a729d4b062fd943377c9bb79c83f202b119 Mon Sep 17 00:00:00 2001 From: Ahmed Shendy Date: Tue, 20 Jun 2023 20:56:14 +0300 Subject: [PATCH 5/8] Update platforms, remove @available annotation: - update platforms to include macOs, tvOS, watchOS. - use MaterialText in playground sample - remove @available annotation --- Package.swift | 5 ++++- .../Button/MaterialButton.swift | 20 +++++++++++++++++++ .../OpenMaterialUI/Text/MaterialText.swift | 3 +-- .../ContentView.swift | 2 +- 4 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 Sources/OpenMaterialUI/Button/MaterialButton.swift diff --git a/Package.swift b/Package.swift index 92a577e..eef970c 100644 --- a/Package.swift +++ b/Package.swift @@ -6,7 +6,10 @@ import PackageDescription let package = Package( name: "OpenMaterialUI", platforms: [ - .iOS(.v16) + .iOS(.v16), + .macOS(.v13), + .tvOS(.v16), + .watchOS(.v9) ], products: [ // Products define the executables and libraries a package produces, and make them visible to other packages. diff --git a/Sources/OpenMaterialUI/Button/MaterialButton.swift b/Sources/OpenMaterialUI/Button/MaterialButton.swift new file mode 100644 index 0000000..f57ba76 --- /dev/null +++ b/Sources/OpenMaterialUI/Button/MaterialButton.swift @@ -0,0 +1,20 @@ +// +// MaterialButton.swift +// +// +// Created by Ahmed Shendy on 20/06/2023. +// + +import SwiftUI + +struct MaterialButton: View { + var body: some View { + Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) + } +} + +struct SwiftUIView_Previews: PreviewProvider { + static var previews: some View { + MaterialButton() + } +} diff --git a/Sources/OpenMaterialUI/Text/MaterialText.swift b/Sources/OpenMaterialUI/Text/MaterialText.swift index 6fc392d..f159bbe 100644 --- a/Sources/OpenMaterialUI/Text/MaterialText.swift +++ b/Sources/OpenMaterialUI/Text/MaterialText.swift @@ -1,5 +1,5 @@ // -// SwiftUIView.swift +// MaterialText.swift // // // Created by Ahmed Shendy on 21/05/2023. @@ -7,7 +7,6 @@ import SwiftUI -@available(iOS 16.0, *) public struct MaterialText: View { private let content: Text diff --git a/playground/OpenMaterialUIPlayground/ContentView.swift b/playground/OpenMaterialUIPlayground/ContentView.swift index 9644001..99a8a86 100644 --- a/playground/OpenMaterialUIPlayground/ContentView.swift +++ b/playground/OpenMaterialUIPlayground/ContentView.swift @@ -14,7 +14,7 @@ struct ContentView: View { Image(systemName: "globe") .imageScale(.large) .foregroundColor(.accentColor) - Text("Hello, world!") + MaterialText("Hello, OpenMaterialUI!") } .padding() } From b404253bac7a1e912659683598a4790ae97c0d30 Mon Sep 17 00:00:00 2001 From: Ahmed Shendy Date: Tue, 3 Oct 2023 08:18:25 +0300 Subject: [PATCH 6/8] update: clean Package.swift --- Package.swift | 8 +------- .../MaterialTextDemo.swift | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 7 deletions(-) create mode 100644 playground/OpenMaterialUIPlayground/MaterialTextDemo.swift diff --git a/Package.swift b/Package.swift index eef970c..f3e4c4a 100644 --- a/Package.swift +++ b/Package.swift @@ -12,19 +12,13 @@ let package = Package( .watchOS(.v9) ], products: [ - // Products define the executables and libraries a package produces, and make them visible to other packages. .library( name: "OpenMaterialUI", targets: ["OpenMaterialUI"] ), ], - dependencies: [ - // Dependencies declare other packages that this package depends on. - // .package(url: /* package url */, from: "1.0.0"), - ], + dependencies: [], targets: [ - // Targets are the basic building blocks of a package. A target can define a module or a test suite. - // Targets can depend on other targets in this package, and on products in packages this package depends on. .target( name: "OpenMaterialUI", dependencies: [] diff --git a/playground/OpenMaterialUIPlayground/MaterialTextDemo.swift b/playground/OpenMaterialUIPlayground/MaterialTextDemo.swift new file mode 100644 index 0000000..ccaaaed --- /dev/null +++ b/playground/OpenMaterialUIPlayground/MaterialTextDemo.swift @@ -0,0 +1,20 @@ +// +// MaterialTextDemo.swift +// OpenMaterialUIPlayground +// +// Created by Ahmed Shendy on 07/07/2023. +// + +import SwiftUI + +struct MaterialTextDemo: View { + var body: some View { + Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) + } +} + +struct MaterialTextDemo_Previews: PreviewProvider { + static var previews: some View { + MaterialTextDemo() + } +} From 7caac8db9e205a4878fb59e43edd9730435d12f3 Mon Sep 17 00:00:00 2001 From: Ahmed Shendy Date: Tue, 3 Oct 2023 08:19:56 +0300 Subject: [PATCH 7/8] update: cleanup and add MaterialTextDemo.swift --- .../Button/MaterialButton.swift | 20 ------------------- .../project.pbxproj | 4 ++++ .../MaterialTextDemo.swift | 3 ++- 3 files changed, 6 insertions(+), 21 deletions(-) delete mode 100644 Sources/OpenMaterialUI/Button/MaterialButton.swift diff --git a/Sources/OpenMaterialUI/Button/MaterialButton.swift b/Sources/OpenMaterialUI/Button/MaterialButton.swift deleted file mode 100644 index f57ba76..0000000 --- a/Sources/OpenMaterialUI/Button/MaterialButton.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// MaterialButton.swift -// -// -// Created by Ahmed Shendy on 20/06/2023. -// - -import SwiftUI - -struct MaterialButton: View { - var body: some View { - Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) - } -} - -struct SwiftUIView_Previews: PreviewProvider { - static var previews: some View { - MaterialButton() - } -} diff --git a/playground/OpenMaterialUIPlayground.xcodeproj/project.pbxproj b/playground/OpenMaterialUIPlayground.xcodeproj/project.pbxproj index c7b454c..8345b92 100644 --- a/playground/OpenMaterialUIPlayground.xcodeproj/project.pbxproj +++ b/playground/OpenMaterialUIPlayground.xcodeproj/project.pbxproj @@ -11,6 +11,7 @@ 64097B712A1971E500231FC9 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64097B702A1971E500231FC9 /* ContentView.swift */; }; 64097B732A1971E600231FC9 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 64097B722A1971E600231FC9 /* Assets.xcassets */; }; 64097B762A1971E600231FC9 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 64097B752A1971E600231FC9 /* Preview Assets.xcassets */; }; + 64B6621C2A57B7B9004F1922 /* MaterialTextDemo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64B6621B2A57B7B8004F1922 /* MaterialTextDemo.swift */; }; 64DA873B2A1972830010C181 /* OpenMaterialUI in Frameworks */ = {isa = PBXBuildFile; productRef = 64DA873A2A1972830010C181 /* OpenMaterialUI */; }; /* End PBXBuildFile section */ @@ -20,6 +21,7 @@ 64097B702A1971E500231FC9 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; 64097B722A1971E600231FC9 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 64097B752A1971E600231FC9 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + 64B6621B2A57B7B8004F1922 /* MaterialTextDemo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MaterialTextDemo.swift; sourceTree = ""; }; 64DA87382A1972470010C181 /* OpenMaterialUI */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = OpenMaterialUI; path = ..; sourceTree = ""; }; /* End PBXFileReference section */ @@ -58,6 +60,7 @@ children = ( 64097B6E2A1971E500231FC9 /* OpenMaterialUIPlaygroundApp.swift */, 64097B702A1971E500231FC9 /* ContentView.swift */, + 64B6621B2A57B7B8004F1922 /* MaterialTextDemo.swift */, 64097B722A1971E600231FC9 /* Assets.xcassets */, 64097B742A1971E600231FC9 /* Preview Content */, ); @@ -162,6 +165,7 @@ files = ( 64097B712A1971E500231FC9 /* ContentView.swift in Sources */, 64097B6F2A1971E500231FC9 /* OpenMaterialUIPlaygroundApp.swift in Sources */, + 64B6621C2A57B7B9004F1922 /* MaterialTextDemo.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/playground/OpenMaterialUIPlayground/MaterialTextDemo.swift b/playground/OpenMaterialUIPlayground/MaterialTextDemo.swift index ccaaaed..3b9f78b 100644 --- a/playground/OpenMaterialUIPlayground/MaterialTextDemo.swift +++ b/playground/OpenMaterialUIPlayground/MaterialTextDemo.swift @@ -6,10 +6,11 @@ // import SwiftUI +import OpenMaterialUI struct MaterialTextDemo: View { var body: some View { - Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) + MaterialText("Hello, OpenMaterial!") } } From 0dac01f40163ad11a7a021d3ebcaf63727483b9c Mon Sep 17 00:00:00 2001 From: Ahmed Shendy Date: Tue, 3 Oct 2023 10:58:01 +0300 Subject: [PATCH 8/8] update: add basic implementation for FilledButtonView --- .../Button/FilledButtonView.swift | 78 ++++++ .../Button/MaterialButton.swift | 94 +++++++ .../Button/Modifiers/ContainerModifiers.swift | 50 ++++ .../Button/Modifiers/LabelTextModifiers.swift | 49 ++++ .../DesignTokens/DesignTokens.swift | 249 ++++++++++++++++++ .../project.pbxproj | 2 + 6 files changed, 522 insertions(+) create mode 100644 Sources/OpenMaterialUI/Button/FilledButtonView.swift create mode 100644 Sources/OpenMaterialUI/Button/MaterialButton.swift create mode 100644 Sources/OpenMaterialUI/Button/Modifiers/ContainerModifiers.swift create mode 100644 Sources/OpenMaterialUI/Button/Modifiers/LabelTextModifiers.swift create mode 100644 Sources/OpenMaterialUI/DesignTokens/DesignTokens.swift diff --git a/Sources/OpenMaterialUI/Button/FilledButtonView.swift b/Sources/OpenMaterialUI/Button/FilledButtonView.swift new file mode 100644 index 0000000..6a6a581 --- /dev/null +++ b/Sources/OpenMaterialUI/Button/FilledButtonView.swift @@ -0,0 +1,78 @@ +// +// FilledButtonView.swift +// +// +// Created by Ahmed Shendy on 03/10/2023. +// + +import SwiftUI + +/// # Filled Button Specs: +/// https://m3.material.io/components/buttons/specs#5a8a88b0-f6fe-4bab-a6d7-c246c78586cb +/// ## Enabled State: +/// # Container +/// shape: md.sys.shape.corner.full -> Circular +/// height: 40dp +/// elevation: md.sys.elevation.level0 -> 0 +/// shadowColor: md.sys.color.shadow -> md.ref.palette.neutral0 -> #000000 +/// Color: md.sys.color.primary -> md.ref.palette.primary40 -> #6750A4 +/// +/// +/// # LabelText +/// font: md.sys.typescale.label-large.font -> md.ref.typeface.plain -> Roboto +/// lineHeight: md.sys.typescale.label-large.line-height -> 20pt +/// size: md.sys.typescale.label-large.size -> 14pt +/// weight: md.sys.typescale.label-large.weight -> /// md.ref.typeface.weight-medium -> 500 +/// tracking: md.sys.typescale.label-large.tracking -> 0.1pt +/// style: Label text type style +/// color: md.sys.color.on-primary -> md.ref.palette.primary100 -> #FFFFFF +/// +/// # Icon +/// size: 18dp +/// color: md.ref.palette.primary100 -> #FFFFFF +public struct FilledButtonView: View { + private let text: String + private let systemImage: String? + + private let action: () -> Void + + public init( + text: String, systemImage: String? = nil, + action: @escaping () -> Void + ) { + self.text = text + self.systemImage = systemImage + self.action = action + } + + @MainActor + public var body: some View { + MaterialButton { + action() + } label: { + if let systemImage = systemImage { + Label(text, systemImage: systemImage) + } else { + Text(text) + } + } + .padding(.horizontal, 24) + .labelText( + font: .custom( + .mdSysTypescaleLabelLargeFamily, + size: .mdSysTypescaleLabelLargeSize + ), + color: .mdSysColorOnPrimary + ) + .container( + height: 40, + color: .mdSysColorPrimary + ) + } +} + +#Preview { + FilledButtonView(text: "Hello World") { + print("filled button tapped") + } +} diff --git a/Sources/OpenMaterialUI/Button/MaterialButton.swift b/Sources/OpenMaterialUI/Button/MaterialButton.swift new file mode 100644 index 0000000..2fa139d --- /dev/null +++ b/Sources/OpenMaterialUI/Button/MaterialButton.swift @@ -0,0 +1,94 @@ +// +// MaterialButton.swift +// +// +// Created by Ahmed Shendy on 20/06/2023. +// + +import SwiftUI + +/** + Specs - Default values (enabled state): https://m3.material.io/components/buttons/specs#a0952e51-6975-486e-8d14-c78283c29cae + */ + +public struct MaterialButton