diff --git a/Mastodon.xcodeproj/project.pbxproj b/Mastodon.xcodeproj/project.pbxproj index f1d84b05..4baac3f5 100644 --- a/Mastodon.xcodeproj/project.pbxproj +++ b/Mastodon.xcodeproj/project.pbxproj @@ -11,7 +11,7 @@ 2D04F42525C255B9003F936F /* APIService+PublicTimeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D04F42425C255B9003F936F /* APIService+PublicTimeline.swift */; }; 2D152A8C25C295CC009AA50C /* TimelinePostView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D152A8B25C295CC009AA50C /* TimelinePostView.swift */; }; 2D152A9225C2980C009AA50C /* UIFont.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D152A9125C2980C009AA50C /* UIFont.swift */; }; - 2D42FF6125C8177C004A627A /* ActiveLabel in Frameworks */ = {isa = PBXBuildFile; productRef = 2D42FF6025C8177C004A627A /* ActiveLabel */; }; + 2D42FF6125C8177C004A627A /* BuildFile in Frameworks */ = {isa = PBXBuildFile; productRef = 2D42FF6025C8177C004A627A /* SwiftPackageProductDependency */; }; 2D42FF6B25C817D2004A627A /* MastodonContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D42FF6A25C817D2004A627A /* MastodonContent.swift */; }; 2D42FF7E25C82218004A627A /* ActionToolBarContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D42FF7D25C82218004A627A /* ActionToolBarContainer.swift */; }; 2D42FF8525C8224F004A627A /* HitTestExpandedButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D42FF8425C8224F004A627A /* HitTestExpandedButton.swift */; }; @@ -21,7 +21,7 @@ 2D46976425C2A71500CF4AA9 /* UIIamge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D46976325C2A71500CF4AA9 /* UIIamge.swift */; }; 2D61335825C188A000CAE157 /* APIService+Persist+Timeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D61335725C188A000CAE157 /* APIService+Persist+Timeline.swift */; }; 2D61335E25C1894B00CAE157 /* APIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D61335D25C1894B00CAE157 /* APIService.swift */; }; - 2D61336925C18A4F00CAE157 /* AlamofireNetworkActivityIndicator in Frameworks */ = {isa = PBXBuildFile; productRef = 2D61336825C18A4F00CAE157 /* AlamofireNetworkActivityIndicator */; }; + 2D61336925C18A4F00CAE157 /* BuildFile in Frameworks */ = {isa = PBXBuildFile; productRef = 2D61336825C18A4F00CAE157 /* SwiftPackageProductDependency */; }; 2D69CFF425CA9E2200C3A1B2 /* LoadMoreConfigurableTableViewContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D69CFF325CA9E2200C3A1B2 /* LoadMoreConfigurableTableViewContainer.swift */; }; 2D69D00A25CAA00300C3A1B2 /* APIService+CoreData+Toot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D69D00925CAA00300C3A1B2 /* APIService+CoreData+Toot.swift */; }; 2D76316525C14BD100929FB9 /* PublicTimelineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D76316425C14BD100929FB9 /* PublicTimelineViewController.swift */; }; @@ -40,17 +40,17 @@ 2DA7D05725CA693F00804E11 /* Application.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DA7D05625CA693F00804E11 /* Application.swift */; }; 2DF123A725C3B0210020F248 /* ActiveLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DF123A625C3B0210020F248 /* ActiveLabel.swift */; }; 45B49097460EDE530AD5AA72 /* Pods_Mastodon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A4ABE34829701A4496C5BB64 /* Pods_Mastodon.framework */; }; - 5D526FE225BE9AC400460CB9 /* MastodonSDK in Frameworks */ = {isa = PBXBuildFile; productRef = 5D526FE125BE9AC400460CB9 /* MastodonSDK */; }; + 5D526FE225BE9AC400460CB9 /* BuildFile in Frameworks */ = {isa = PBXBuildFile; productRef = 5D526FE125BE9AC400460CB9 /* SwiftPackageProductDependency */; }; 5E0DEC05797A7E6933788DDB /* Pods_MastodonTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 452147B2903DF38070FE56A2 /* Pods_MastodonTests.framework */; }; 5E44BF88AD33646E64727BCF /* Pods_MastodonTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD92E0F10BDE4FE7C4B999F2 /* Pods_MastodonTests.framework */; }; DB01409625C40B6700F9F3CF /* AuthenticationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB01409525C40B6700F9F3CF /* AuthenticationViewController.swift */; }; DB0140A125C40C0600F9F3CF /* MastodonPinBasedAuthenticationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0140A025C40C0600F9F3CF /* MastodonPinBasedAuthenticationViewController.swift */; }; DB0140A825C40C1500F9F3CF /* MastodonPinBasedAuthenticationViewModelNavigationDelegateShim.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0140A725C40C1500F9F3CF /* MastodonPinBasedAuthenticationViewModelNavigationDelegateShim.swift */; }; DB0140AE25C40C7300F9F3CF /* MastodonPinBasedAuthenticationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0140AD25C40C7300F9F3CF /* MastodonPinBasedAuthenticationViewModel.swift */; }; - DB0140BD25C40D7500F9F3CF /* CommonOSLog in Frameworks */ = {isa = PBXBuildFile; productRef = DB0140BC25C40D7500F9F3CF /* CommonOSLog */; }; + DB0140BD25C40D7500F9F3CF /* BuildFile in Frameworks */ = {isa = PBXBuildFile; productRef = DB0140BC25C40D7500F9F3CF /* SwiftPackageProductDependency */; }; DB0140CF25C42AEE00F9F3CF /* OSLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0140CE25C42AEE00F9F3CF /* OSLog.swift */; }; DB084B5725CBC56C00F898ED /* Toot.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB084B5625CBC56C00F898ED /* Toot.swift */; }; - DB3D0FF325BAA61700EAA174 /* AlamofireImage in Frameworks */ = {isa = PBXBuildFile; productRef = DB3D0FF225BAA61700EAA174 /* AlamofireImage */; }; + DB3D0FF325BAA61700EAA174 /* BuildFile in Frameworks */ = {isa = PBXBuildFile; productRef = DB3D0FF225BAA61700EAA174 /* SwiftPackageProductDependency */; }; DB3D100D25BAA75E00EAA174 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = DB3D100F25BAA75E00EAA174 /* Localizable.strings */; }; DB427DD625BAA00100D1B89D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB427DD525BAA00100D1B89D /* AppDelegate.swift */; }; DB427DD825BAA00100D1B89D /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB427DD725BAA00100D1B89D /* SceneDelegate.swift */; }; @@ -69,7 +69,7 @@ DB45FB1D25CA9D23005A8AC7 /* APIService+HomeTimeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB45FB1C25CA9D23005A8AC7 /* APIService+HomeTimeline.swift */; }; DB5086A525CC0B7000C2C187 /* AvatarBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB5086A425CC0B7000C2C187 /* AvatarBarButtonItem.swift */; }; DB5086AB25CC0BBB00C2C187 /* AvatarConfigurableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB5086AA25CC0BBB00C2C187 /* AvatarConfigurableView.swift */; }; - DB5086B825CC0D6400C2C187 /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = DB5086B725CC0D6400C2C187 /* Kingfisher */; }; + DB5086B825CC0D6400C2C187 /* BuildFile in Frameworks */ = {isa = PBXBuildFile; productRef = DB5086B725CC0D6400C2C187 /* SwiftPackageProductDependency */; }; DB5086BE25CC0D9900C2C187 /* SplashPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB5086BD25CC0D9900C2C187 /* SplashPreference.swift */; }; DB89B9F725C10FD0008580ED /* CoreDataStack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB89B9EE25C10FD0008580ED /* CoreDataStack.framework */; }; DB89B9FE25C10FD0008580ED /* CoreDataStackTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB89B9FD25C10FD0008580ED /* CoreDataStackTests.swift */; }; @@ -271,13 +271,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - DB0140BD25C40D7500F9F3CF /* CommonOSLog in Frameworks */, + DB0140BD25C40D7500F9F3CF /* BuildFile in Frameworks */, DB89BA0325C10FD0008580ED /* CoreDataStack.framework in Frameworks */, - 2D42FF6125C8177C004A627A /* ActiveLabel in Frameworks */, - 5D526FE225BE9AC400460CB9 /* MastodonSDK in Frameworks */, - DB5086B825CC0D6400C2C187 /* Kingfisher in Frameworks */, - 2D61336925C18A4F00CAE157 /* AlamofireNetworkActivityIndicator in Frameworks */, - DB3D0FF325BAA61700EAA174 /* AlamofireImage in Frameworks */, + 2D42FF6125C8177C004A627A /* BuildFile in Frameworks */, + 5D526FE225BE9AC400460CB9 /* BuildFile in Frameworks */, + DB5086B825CC0D6400C2C187 /* BuildFile in Frameworks */, + 2D61336925C18A4F00CAE157 /* BuildFile in Frameworks */, + DB3D0FF325BAA61700EAA174 /* BuildFile in Frameworks */, 45B49097460EDE530AD5AA72 /* Pods_Mastodon.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -769,11 +769,11 @@ buildConfigurationList = DB427DFC25BAA00100D1B89D /* Build configuration list for PBXNativeTarget "Mastodon" */; buildPhases = ( 7A04933A2AB1D5B758D4F908 /* [CP] Check Pods Manifest.lock */, + DB3D100425BAA71500EAA174 /* ShellScript */, DB427DCE25BAA00100D1B89D /* Sources */, DB427DCF25BAA00100D1B89D /* Frameworks */, DB427DD025BAA00100D1B89D /* Resources */, 5532CB85BBE168B25B20720B /* [CP] Embed Pods Frameworks */, - DB3D100425BAA71500EAA174 /* ShellScript */, DB89BA0825C10FD0008580ED /* Embed Frameworks */, ); buildRules = ( @@ -783,12 +783,12 @@ ); name = Mastodon; packageProductDependencies = ( - DB3D0FF225BAA61700EAA174 /* AlamofireImage */, - 5D526FE125BE9AC400460CB9 /* MastodonSDK */, - 2D61336825C18A4F00CAE157 /* AlamofireNetworkActivityIndicator */, - 2D42FF6025C8177C004A627A /* ActiveLabel */, - DB0140BC25C40D7500F9F3CF /* CommonOSLog */, - DB5086B725CC0D6400C2C187 /* Kingfisher */, + DB3D0FF225BAA61700EAA174 /* SwiftPackageProductDependency */, + 5D526FE125BE9AC400460CB9 /* SwiftPackageProductDependency */, + 2D61336825C18A4F00CAE157 /* SwiftPackageProductDependency */, + 2D42FF6025C8177C004A627A /* SwiftPackageProductDependency */, + DB0140BC25C40D7500F9F3CF /* SwiftPackageProductDependency */, + DB5086B725CC0D6400C2C187 /* SwiftPackageProductDependency */, ); productName = Mastodon; productReference = DB427DD225BAA00100D1B89D /* Mastodon.app */; @@ -911,11 +911,11 @@ ); mainGroup = DB427DC925BAA00100D1B89D; packageReferences = ( - DB3D0FF125BAA61700EAA174 /* XCRemoteSwiftPackageReference "AlamofireImage" */, - 2D61336725C18A4F00CAE157 /* XCRemoteSwiftPackageReference "AlamofireNetworkActivityIndicator" */, - 2D42FF5F25C8177C004A627A /* XCRemoteSwiftPackageReference "ActiveLabel" */, - DB0140BB25C40D7500F9F3CF /* XCRemoteSwiftPackageReference "CommonOSLog" */, - DB5086B625CC0D6400C2C187 /* XCRemoteSwiftPackageReference "Kingfisher" */, + DB3D0FF125BAA61700EAA174 /* RemoteSwiftPackageReference */, + 2D61336725C18A4F00CAE157 /* RemoteSwiftPackageReference */, + 2D42FF5F25C8177C004A627A /* RemoteSwiftPackageReference */, + DB0140BB25C40D7500F9F3CF /* RemoteSwiftPackageReference */, + DB5086B625CC0D6400C2C187 /* RemoteSwiftPackageReference */, ); productRefGroup = DB427DD325BAA00100D1B89D /* Products */; projectDirPath = ""; @@ -1665,7 +1665,7 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ - 2D42FF5F25C8177C004A627A /* XCRemoteSwiftPackageReference "ActiveLabel" */ = { + 2D42FF5F25C8177C004A627A /* RemoteSwiftPackageReference */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/TwidereProject/ActiveLabel.swift"; requirement = { @@ -1673,7 +1673,7 @@ minimumVersion = 4.0.0; }; }; - 2D61336725C18A4F00CAE157 /* XCRemoteSwiftPackageReference "AlamofireNetworkActivityIndicator" */ = { + 2D61336725C18A4F00CAE157 /* RemoteSwiftPackageReference */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/Alamofire/AlamofireNetworkActivityIndicator"; requirement = { @@ -1681,7 +1681,7 @@ minimumVersion = 3.1.0; }; }; - DB0140BB25C40D7500F9F3CF /* XCRemoteSwiftPackageReference "CommonOSLog" */ = { + DB0140BB25C40D7500F9F3CF /* RemoteSwiftPackageReference */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/MainasuK/CommonOSLog"; requirement = { @@ -1689,7 +1689,7 @@ minimumVersion = 0.1.1; }; }; - DB3D0FF125BAA61700EAA174 /* XCRemoteSwiftPackageReference "AlamofireImage" */ = { + DB3D0FF125BAA61700EAA174 /* RemoteSwiftPackageReference */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/Alamofire/AlamofireImage.git"; requirement = { @@ -1697,7 +1697,7 @@ minimumVersion = 4.1.0; }; }; - DB5086B625CC0D6400C2C187 /* XCRemoteSwiftPackageReference "Kingfisher" */ = { + DB5086B625CC0D6400C2C187 /* RemoteSwiftPackageReference */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/onevcat/Kingfisher.git"; requirement = { @@ -1708,33 +1708,33 @@ /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ - 2D42FF6025C8177C004A627A /* ActiveLabel */ = { + 2D42FF6025C8177C004A627A /* SwiftPackageProductDependency */ = { isa = XCSwiftPackageProductDependency; - package = 2D42FF5F25C8177C004A627A /* XCRemoteSwiftPackageReference "ActiveLabel" */; + package = 2D42FF5F25C8177C004A627A /* RemoteSwiftPackageReference */; productName = ActiveLabel; }; - 2D61336825C18A4F00CAE157 /* AlamofireNetworkActivityIndicator */ = { + 2D61336825C18A4F00CAE157 /* SwiftPackageProductDependency */ = { isa = XCSwiftPackageProductDependency; - package = 2D61336725C18A4F00CAE157 /* XCRemoteSwiftPackageReference "AlamofireNetworkActivityIndicator" */; + package = 2D61336725C18A4F00CAE157 /* RemoteSwiftPackageReference */; productName = AlamofireNetworkActivityIndicator; }; - 5D526FE125BE9AC400460CB9 /* MastodonSDK */ = { + 5D526FE125BE9AC400460CB9 /* SwiftPackageProductDependency */ = { isa = XCSwiftPackageProductDependency; productName = MastodonSDK; }; - DB0140BC25C40D7500F9F3CF /* CommonOSLog */ = { + DB0140BC25C40D7500F9F3CF /* SwiftPackageProductDependency */ = { isa = XCSwiftPackageProductDependency; - package = DB0140BB25C40D7500F9F3CF /* XCRemoteSwiftPackageReference "CommonOSLog" */; + package = DB0140BB25C40D7500F9F3CF /* RemoteSwiftPackageReference */; productName = CommonOSLog; }; - DB3D0FF225BAA61700EAA174 /* AlamofireImage */ = { + DB3D0FF225BAA61700EAA174 /* SwiftPackageProductDependency */ = { isa = XCSwiftPackageProductDependency; - package = DB3D0FF125BAA61700EAA174 /* XCRemoteSwiftPackageReference "AlamofireImage" */; + package = DB3D0FF125BAA61700EAA174 /* RemoteSwiftPackageReference */; productName = AlamofireImage; }; - DB5086B725CC0D6400C2C187 /* Kingfisher */ = { + DB5086B725CC0D6400C2C187 /* SwiftPackageProductDependency */ = { isa = XCSwiftPackageProductDependency; - package = DB5086B625CC0D6400C2C187 /* XCRemoteSwiftPackageReference "Kingfisher" */; + package = DB5086B625CC0D6400C2C187 /* RemoteSwiftPackageReference */; productName = Kingfisher; }; /* End XCSwiftPackageProductDependency section */ diff --git a/Mastodon.xcodeproj/xcuserdata/mainasuk.xcuserdatad/xcschemes/xcschememanagement.plist b/Mastodon.xcodeproj/xcuserdata/mainasuk.xcuserdatad/xcschemes/xcschememanagement.plist index 24ba6665..2addff9f 100644 --- a/Mastodon.xcodeproj/xcuserdata/mainasuk.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Mastodon.xcodeproj/xcuserdata/mainasuk.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,12 +7,12 @@ CoreDataStack.xcscheme_^#shared#^_ orderHint - 7 + 8 Mastodon.xcscheme_^#shared#^_ orderHint - 1 + 0 SuppressBuildableAutocreation diff --git a/Mastodon/Generated/Assets.swift b/Mastodon/Generated/Assets.swift index c5b25beb..3af5a56e 100644 --- a/Mastodon/Generated/Assets.swift +++ b/Mastodon/Generated/Assets.swift @@ -23,10 +23,19 @@ internal typealias AssetImageTypeAlias = ImageAsset.Image internal enum Asset { internal static let accentColor = ColorAsset(name: "AccentColor") internal enum Colors { - internal static let tootDark = ColorAsset(name: "Colors/Toot.Dark") - internal static let tootGray = ColorAsset(name: "Colors/Toot.Gray") - internal static let tootWhite = ColorAsset(name: "Colors/Toot.White") - internal static let likeOrange = ColorAsset(name: "Colors/like.orange") + internal enum Background { + internal static let secondarySystemBackground = ColorAsset(name: "Colors/Background/secondary.system.background") + internal static let systemBackground = ColorAsset(name: "Colors/Background/system.background") + internal static let tertiarySystemBackground = ColorAsset(name: "Colors/Background/tertiary.system.background") + } + internal enum Button { + internal static let highlight = ColorAsset(name: "Colors/Button/highlight") + } + internal enum Label { + internal static let primary = ColorAsset(name: "Colors/Label/primary") + internal static let secondary = ColorAsset(name: "Colors/Label/secondary") + } + internal static let systemOrange = ColorAsset(name: "Colors/system.orange") } internal enum ToolBar { internal static let bookmark = ImageAsset(name: "ToolBar/bookmark") diff --git a/Mastodon/Resources/Assets.xcassets/Colors/Background/Contents.json b/Mastodon/Resources/Assets.xcassets/Colors/Background/Contents.json new file mode 100644 index 00000000..6e965652 --- /dev/null +++ b/Mastodon/Resources/Assets.xcassets/Colors/Background/Contents.json @@ -0,0 +1,9 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "provides-namespace" : true + } +} diff --git a/Mastodon/Resources/Assets.xcassets/Colors/Background/secondary.system.background.colorset/Contents.json b/Mastodon/Resources/Assets.xcassets/Colors/Background/secondary.system.background.colorset/Contents.json new file mode 100644 index 00000000..7e037593 --- /dev/null +++ b/Mastodon/Resources/Assets.xcassets/Colors/Background/secondary.system.background.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x37", + "green" : "0x2D", + "red" : "0x29" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Mastodon/Resources/Assets.xcassets/Colors/Background/system.background.colorset/Contents.json b/Mastodon/Resources/Assets.xcassets/Colors/Background/system.background.colorset/Contents.json new file mode 100644 index 00000000..6bdafa8f --- /dev/null +++ b/Mastodon/Resources/Assets.xcassets/Colors/Background/system.background.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x2B", + "green" : "0x24", + "red" : "0x20" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Mastodon/Resources/Assets.xcassets/Colors/Background/tertiary.system.background.colorset/Contents.json b/Mastodon/Resources/Assets.xcassets/Colors/Background/tertiary.system.background.colorset/Contents.json new file mode 100644 index 00000000..2388399d --- /dev/null +++ b/Mastodon/Resources/Assets.xcassets/Colors/Background/tertiary.system.background.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x43", + "green" : "0x36", + "red" : "0x32" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Mastodon/Resources/Assets.xcassets/Colors/Button/Contents.json b/Mastodon/Resources/Assets.xcassets/Colors/Button/Contents.json new file mode 100644 index 00000000..6e965652 --- /dev/null +++ b/Mastodon/Resources/Assets.xcassets/Colors/Button/Contents.json @@ -0,0 +1,9 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "provides-namespace" : true + } +} diff --git a/Mastodon/Resources/Assets.xcassets/Colors/Button/highlight.colorset/Contents.json b/Mastodon/Resources/Assets.xcassets/Colors/Button/highlight.colorset/Contents.json new file mode 100644 index 00000000..03a422b0 --- /dev/null +++ b/Mastodon/Resources/Assets.xcassets/Colors/Button/highlight.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.839", + "green" : "0.573", + "red" : "0.204" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Mastodon/Resources/Assets.xcassets/Colors/Label/Contents.json b/Mastodon/Resources/Assets.xcassets/Colors/Label/Contents.json new file mode 100644 index 00000000..6e965652 --- /dev/null +++ b/Mastodon/Resources/Assets.xcassets/Colors/Label/Contents.json @@ -0,0 +1,9 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "provides-namespace" : true + } +} diff --git a/Mastodon/Resources/Assets.xcassets/Colors/Label/primary.colorset/Contents.json b/Mastodon/Resources/Assets.xcassets/Colors/Label/primary.colorset/Contents.json new file mode 100644 index 00000000..fafa4767 --- /dev/null +++ b/Mastodon/Resources/Assets.xcassets/Colors/Label/primary.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0xFF", + "red" : "0xFF" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Mastodon/Resources/Assets.xcassets/Colors/Label/secondary.colorset/Contents.json b/Mastodon/Resources/Assets.xcassets/Colors/Label/secondary.colorset/Contents.json new file mode 100644 index 00000000..275226a1 --- /dev/null +++ b/Mastodon/Resources/Assets.xcassets/Colors/Label/secondary.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x84", + "green" : "0x69", + "red" : "0x60" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Mastodon/Resources/Assets.xcassets/Colors/Toot.Dark.colorset/Contents.json b/Mastodon/Resources/Assets.xcassets/Colors/Toot.Dark.colorset/Contents.json deleted file mode 100644 index ca15c25d..00000000 --- a/Mastodon/Resources/Assets.xcassets/Colors/Toot.Dark.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "extended-srgb", - "components" : { - "alpha" : "1.000", - "blue" : "55", - "green" : "45", - "red" : "41" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "55", - "green" : "45", - "red" : "41" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Mastodon/Resources/Assets.xcassets/Colors/Toot.Gray.colorset/Contents.json b/Mastodon/Resources/Assets.xcassets/Colors/Toot.Gray.colorset/Contents.json deleted file mode 100644 index d06ba845..00000000 --- a/Mastodon/Resources/Assets.xcassets/Colors/Toot.Gray.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "132", - "green" : "105", - "red" : "96" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "132", - "green" : "105", - "red" : "96" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Mastodon/Resources/Assets.xcassets/Colors/Toot.White.colorset/Contents.json b/Mastodon/Resources/Assets.xcassets/Colors/Toot.White.colorset/Contents.json deleted file mode 100644 index 43e2bc58..00000000 --- a/Mastodon/Resources/Assets.xcassets/Colors/Toot.White.colorset/Contents.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "1.000", - "green" : "1.000", - "red" : "1.000" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "1.000", - "green" : "1.000", - "red" : "1.000" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "localizable" : true - } -} diff --git a/Mastodon/Resources/Assets.xcassets/Colors/like.orange.colorset/Contents.json b/Mastodon/Resources/Assets.xcassets/Colors/like.orange.colorset/Contents.json deleted file mode 100644 index b50f8fa6..00000000 --- a/Mastodon/Resources/Assets.xcassets/Colors/like.orange.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "10", - "green" : "159", - "red" : "255" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "10", - "green" : "159", - "red" : "255" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Mastodon/Resources/Assets.xcassets/Colors/system.orange.colorset/Contents.json b/Mastodon/Resources/Assets.xcassets/Colors/system.orange.colorset/Contents.json new file mode 100644 index 00000000..0b0fa36c --- /dev/null +++ b/Mastodon/Resources/Assets.xcassets/Colors/system.orange.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x0A", + "green" : "0x9F", + "red" : "0xFF" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Mastodon/Scene/Authentication/AuthenticationViewController.swift b/Mastodon/Scene/Authentication/AuthenticationViewController.swift index 42dc854d..4c20528a 100644 --- a/Mastodon/Scene/Authentication/AuthenticationViewController.swift +++ b/Mastodon/Scene/Authentication/AuthenticationViewController.swift @@ -9,6 +9,7 @@ import os.log import UIKit import Combine import MastodonSDK +import UITextField_Shake final class AuthenticationViewController: UIViewController, NeedsDependency { @@ -19,6 +20,14 @@ final class AuthenticationViewController: UIViewController, NeedsDependency { var viewModel: AuthenticationViewModel! + let domainLabel: UILabel = { + let label = UILabel() + label.font = .preferredFont(forTextStyle: .headline) + label.textColor = Asset.Colors.Label.primary.color + label.text = "Domain:" + return label + }() + let domainTextField: UITextField = { let textField = UITextField() textField.placeholder = "example.com" @@ -28,8 +37,31 @@ final class AuthenticationViewController: UIViewController, NeedsDependency { return textField }() - private(set) lazy var signInBarButtonItem = UIBarButtonItem(title: "Sign In", style: .plain, target: self, action: #selector(AuthenticationViewController.signInBarButtonItemPressed(_:))) - let activityIndicatorBarButtonItem = UIBarButtonItem.activityIndicatorBarButtonItem + let signInButton: UIButton = { + let button = UIButton(type: .system) + button.titleLabel?.font = .preferredFont(forTextStyle: .headline) + button.setBackgroundImage(UIImage.placeholder(color: Asset.Colors.Background.secondarySystemBackground.color), for: .normal) + button.setTitleColor(Asset.Colors.Label.primary.color, for: .normal) + button.setTitle("Sign in", for: .normal) + button.layer.masksToBounds = true + button.layer.cornerRadius = 8 + button.layer.cornerCurve = .continuous + return button + }() + + let signUpButton: UIButton = { + let button = UIButton(type: .system) + button.titleLabel?.font = .preferredFont(forTextStyle: .subheadline) + button.setTitleColor(Asset.Colors.Button.highlight.color, for: .normal) + button.setTitle("Sign up", for: .normal) + return button + }() + + let activityIndicatorView: UIActivityIndicatorView = { + let activityIndicatorView = UIActivityIndicatorView(style: .medium) + activityIndicatorView.hidesWhenStopped = true + return activityIndicatorView + }() } extension AuthenticationViewController { @@ -38,16 +70,47 @@ extension AuthenticationViewController { super.viewDidLoad() title = "Authentication" - view.backgroundColor = .systemBackground - navigationItem.rightBarButtonItem = signInBarButtonItem + view.backgroundColor = Asset.Colors.Background.systemBackground.color + + domainLabel.translatesAutoresizingMaskIntoConstraints = false + view.addSubview(domainLabel) + NSLayoutConstraint.activate([ + domainLabel.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor, constant: 16), + domainLabel.leadingAnchor.constraint(equalTo: view.readableContentGuide.leadingAnchor), + domainLabel.trailingAnchor.constraint(equalTo: view.readableContentGuide.trailingAnchor), + ]) domainTextField.translatesAutoresizingMaskIntoConstraints = false view.addSubview(domainTextField) NSLayoutConstraint.activate([ - domainTextField.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor, constant: 8), - domainTextField.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor, constant: 8), - domainTextField.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor, constant: 8), - domainTextField.heightAnchor.constraint(equalToConstant: 44), // FIXME: + domainTextField.topAnchor.constraint(equalTo: domainLabel.bottomAnchor, constant: 8), + domainTextField.leadingAnchor.constraint(equalTo: view.readableContentGuide.leadingAnchor), + domainTextField.trailingAnchor.constraint(equalTo: view.readableContentGuide.trailingAnchor), + ]) + + signInButton.translatesAutoresizingMaskIntoConstraints = false + view.addSubview(signInButton) + NSLayoutConstraint.activate([ + signInButton.topAnchor.constraint(equalTo: domainTextField.bottomAnchor, constant: 20), + signInButton.leadingAnchor.constraint(equalTo: view.readableContentGuide.leadingAnchor), + signInButton.trailingAnchor.constraint(equalTo: view.readableContentGuide.trailingAnchor), + signInButton.heightAnchor.constraint(equalToConstant: 44).priority(.defaultHigh), + ]) + + activityIndicatorView.translatesAutoresizingMaskIntoConstraints = false + view.addSubview(activityIndicatorView) + NSLayoutConstraint.activate([ + activityIndicatorView.centerXAnchor.constraint(equalTo: signInButton.centerXAnchor), + activityIndicatorView.centerYAnchor.constraint(equalTo: signInButton.centerYAnchor), + ]) + + signUpButton.translatesAutoresizingMaskIntoConstraints = false + view.addSubview(signUpButton) + NSLayoutConstraint.activate([ + signUpButton.topAnchor.constraint(equalTo: signInButton.bottomAnchor, constant: 8), + signUpButton.leadingAnchor.constraint(equalTo: view.readableContentGuide.leadingAnchor), + signUpButton.trailingAnchor.constraint(equalTo: view.readableContentGuide.trailingAnchor), + signUpButton.heightAnchor.constraint(equalToConstant: 44).priority(.defaultHigh), ]) NotificationCenter.default.publisher(for: UITextField.textDidChangeNotification, object: domainTextField) @@ -62,7 +125,7 @@ extension AuthenticationViewController { .receive(on: DispatchQueue.main) .sink { [weak self] isAuthenticating in guard let self = self else { return } - self.navigationItem.rightBarButtonItem = isAuthenticating ? self.activityIndicatorBarButtonItem : self.signInBarButtonItem + isAuthenticating ? self.activityIndicatorView.startAnimating() : self.activityIndicatorView.stopAnimating() } .store(in: &disposeBag) @@ -91,11 +154,6 @@ extension AuthenticationViewController { } .store(in: &disposeBag) - viewModel.isSignInButtonEnabled - .receive(on: DispatchQueue.main) - .assign(to: \.isEnabled, on: signInBarButtonItem) - .store(in: &disposeBag) - viewModel.error .compactMap { $0 } .receive(on: DispatchQueue.main) @@ -111,6 +169,8 @@ extension AuthenticationViewController { ) } .store(in: &disposeBag) + + signInButton.addTarget(self, action: #selector(AuthenticationViewController.signInButtonPressed(_:)), for: .touchUpInside) } override func viewWillAppear(_ animated: Bool) { @@ -123,10 +183,10 @@ extension AuthenticationViewController { extension AuthenticationViewController { - @objc private func signInBarButtonItemPressed(_ sender: UIBarButtonItem) { + @objc private func signInButtonPressed(_ sender: UIButton) { os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s", ((#file as NSString).lastPathComponent), #line, #function) - guard let domain = viewModel.domain.value else { - // TODO: alert error + guard viewModel.isDomainValid.value, let domain = viewModel.domain.value else { + domainTextField.shake() return } guard !viewModel.isAuthenticating.value else { return } diff --git a/Mastodon/Scene/Authentication/AuthenticationViewModel.swift b/Mastodon/Scene/Authentication/AuthenticationViewModel.swift index a56a4387..1a93681f 100644 --- a/Mastodon/Scene/Authentication/AuthenticationViewModel.swift +++ b/Mastodon/Scene/Authentication/AuthenticationViewModel.swift @@ -25,7 +25,7 @@ final class AuthenticationViewModel { // output let viewHierarchyShouldReset: Bool let domain = CurrentValueSubject(nil) - let isSignInButtonEnabled = CurrentValueSubject(false) + let isDomainValid = CurrentValueSubject(false) let isAuthenticating = CurrentValueSubject(false) let authenticated = PassthroughSubject<(domain: String, account: Mastodon.Entity.Account), Never>() let error = CurrentValueSubject(nil) @@ -61,7 +61,7 @@ final class AuthenticationViewModel { domain .map { $0 != nil } - .assign(to: \.value, on: isSignInButtonEnabled) + .assign(to: \.value, on: isDomainValid) .store(in: &disposeBag) } diff --git a/Mastodon/Scene/HomeTimeline/HomeViewController.swift b/Mastodon/Scene/HomeTimeline/HomeViewController.swift index 3e884633..8934d3c3 100644 --- a/Mastodon/Scene/HomeTimeline/HomeViewController.swift +++ b/Mastodon/Scene/HomeTimeline/HomeViewController.swift @@ -28,7 +28,7 @@ extension HomeViewController { super.viewDidLoad() title = "Home" - view.backgroundColor = .systemBackground + view.backgroundColor = Asset.Colors.Background.systemBackground.color navigationItem.leftBarButtonItem = avatarBarButtonItem avatarBarButtonItem.avatarButton.addTarget(self, action: #selector(HomeViewController.avatarBarButtonItemDidPressed(_:)), for: .touchUpInside) diff --git a/Mastodon/Scene/PublicTimeline/PublicTimelineViewController.swift b/Mastodon/Scene/PublicTimeline/PublicTimelineViewController.swift index 73c5c783..3046dc9e 100644 --- a/Mastodon/Scene/PublicTimeline/PublicTimelineViewController.swift +++ b/Mastodon/Scene/PublicTimeline/PublicTimelineViewController.swift @@ -27,6 +27,7 @@ final class PublicTimelineViewController: UIViewController, NeedsDependency, Tim tableView.register(TimelineBottomLoaderTableViewCell.self, forCellReuseIdentifier: String(describing: TimelineBottomLoaderTableViewCell.self)) tableView.rowHeight = UITableView.automaticDimension tableView.separatorStyle = .none + tableView.backgroundColor = Asset.Colors.Background.secondarySystemBackground.color return tableView }() @@ -39,6 +40,8 @@ extension PublicTimelineViewController { override func viewDidLoad() { super.viewDidLoad() + view.backgroundColor = Asset.Colors.Background.systemBackground.color + tableView.refreshControl = refreshControl refreshControl.addTarget(self, action: #selector(PublicTimelineViewController.refreshControlValueChanged(_:)), for: .valueChanged) // bind refresh control @@ -56,10 +59,7 @@ extension PublicTimelineViewController { .store(in: &disposeBag) tableView.translatesAutoresizingMaskIntoConstraints = false - tableView.backgroundColor = Asset.Colors.tootDark.color view.addSubview(tableView) - view.backgroundColor = Asset.Colors.tootDark.color - NSLayoutConstraint.activate([ tableView.topAnchor.constraint(equalTo: view.topAnchor), tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor), diff --git a/Mastodon/Scene/Share/View/Content/TimelinePostView.swift b/Mastodon/Scene/Share/View/Content/TimelinePostView.swift index e75371a4..b1c652bf 100644 --- a/Mastodon/Scene/Share/View/Content/TimelinePostView.swift +++ b/Mastodon/Scene/Share/View/Content/TimelinePostView.swift @@ -24,13 +24,13 @@ final class TimelinePostView: UIView { let visibilityImageView: UIImageView = { let imageView = UIImageView(image: Asset.TootTimeline.global.image.withRenderingMode(.alwaysTemplate)) - imageView.tintColor = Asset.Colors.tootGray.color + imageView.tintColor = Asset.Colors.Label.secondary.color return imageView }() let lockImageView: UIImageView = { let imageview = UIImageView(image: Asset.TootTimeline.textlock.image.withRenderingMode(.alwaysTemplate)) - imageview.tintColor = Asset.Colors.tootGray.color + imageview.tintColor = Asset.Colors.Label.secondary.color imageview.isHidden = true return imageview }() @@ -38,7 +38,7 @@ final class TimelinePostView: UIView { let nameLabel: UILabel = { let label = UILabel() label.font = UIFont(name: "Roboto-Medium", size: 14) - label.textColor = Asset.Colors.tootWhite.color + label.textColor = Asset.Colors.Label.primary.color label.text = "Alice" return label @@ -46,7 +46,7 @@ final class TimelinePostView: UIView { let usernameLabel: UILabel = { let label = UILabel() - label.textColor = Asset.Colors.tootGray.color + label.textColor = Asset.Colors.Label.secondary.color label.font = UIFont(name: "Roboto-Regular", size: 14) label.text = "@alice" return label @@ -56,7 +56,7 @@ final class TimelinePostView: UIView { let label = UILabel() label.font = UIFont(name: "Roboto-Regular", size: 14) label.textAlignment = UIApplication.shared.userInterfaceLayoutDirection == .rightToLeft ? .left : .right - label.textColor = Asset.Colors.tootGray.color + label.textColor = Asset.Colors.Label.secondary.color label.text = "1d" return label }() diff --git a/Mastodon/Scene/Share/View/TableviewCell/TimelineLoaderTableViewCell.swift b/Mastodon/Scene/Share/View/TableviewCell/TimelineLoaderTableViewCell.swift index 5fbaa5d7..676f44ff 100644 --- a/Mastodon/Scene/Share/View/TableviewCell/TimelineLoaderTableViewCell.swift +++ b/Mastodon/Scene/Share/View/TableviewCell/TimelineLoaderTableViewCell.swift @@ -45,7 +45,8 @@ class TimelineLoaderTableViewCell: UITableViewCell { func _init() { selectionStyle = .none - backgroundColor = Asset.Colors.tootDark.color + backgroundColor = Asset.Colors.Background.secondarySystemBackground.color + loadMoreButton.translatesAutoresizingMaskIntoConstraints = false contentView.addSubview(loadMoreButton) NSLayoutConstraint.activate([ diff --git a/Mastodon/Scene/Share/View/TableviewCell/TimelinePostTableViewCell.swift b/Mastodon/Scene/Share/View/TableviewCell/TimelinePostTableViewCell.swift index 487ba68c..f28bf7d8 100644 --- a/Mastodon/Scene/Share/View/TableviewCell/TimelinePostTableViewCell.swift +++ b/Mastodon/Scene/Share/View/TableviewCell/TimelinePostTableViewCell.swift @@ -50,7 +50,7 @@ final class TimelinePostTableViewCell: UITableViewCell { extension TimelinePostTableViewCell { private func _init() { - self.backgroundColor = Asset.Colors.tootDark.color + self.backgroundColor = Asset.Colors.Background.secondarySystemBackground.color self.selectionStyle = .none timelinePostView.translatesAutoresizingMaskIntoConstraints = false timelinePostViewTopLayoutConstraint = timelinePostView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: TimelinePostTableViewCell.verticalMargin) diff --git a/Mastodon/Scene/Share/View/ToolBar/ActionToolBarContainer.swift b/Mastodon/Scene/Share/View/ToolBar/ActionToolBarContainer.swift index 4403e4b8..eff1cb02 100644 --- a/Mastodon/Scene/Share/View/ToolBar/ActionToolBarContainer.swift +++ b/Mastodon/Scene/Share/View/ToolBar/ActionToolBarContainer.swift @@ -95,7 +95,7 @@ extension ActionToolbarContainer { let buttons = [replyButton, retootButton, starButton,bookmartButton, moreButton] buttons.forEach { button in - button.tintColor = Asset.Colors.tootGray.color + button.tintColor = Asset.Colors.Label.secondary.color button.titleLabel?.font = .monospacedDigitSystemFont(ofSize: 12, weight: .regular) button.setTitle("", for: .normal) button.setTitleColor(.secondaryLabel, for: .normal) @@ -165,7 +165,7 @@ extension ActionToolbarContainer { } private func isstarButtonHighlightStateDidChange(to isHighlight: Bool) { - let tintColor = isHighlight ? Asset.Colors.likeOrange.color : Asset.Colors.tootGray.color + let tintColor = isHighlight ? Asset.Colors.systemOrange.color : Asset.Colors.Label.secondary.color starButton.tintColor = tintColor starButton.setTitleColor(tintColor, for: .normal) starButton.setTitleColor(tintColor, for: .highlighted) diff --git a/Podfile b/Podfile index e9aaee93..d4bec65d 100644 --- a/Podfile +++ b/Podfile @@ -6,10 +6,14 @@ target 'Mastodon' do # Pods for Mastodon - # misc + # UI + pod 'UITextField+Shake', '~> 1.2' + + # misc pod 'SwiftGen', '~> 6.4.0' pod 'DateToolsSwift', '~> 5.0.0' pod 'Kanna', '~> 5.2.2' + target 'MastodonTests' do inherit! :search_paths # Pods for testing diff --git a/Podfile.lock b/Podfile.lock index 7da6a1e2..4f553c4e 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -2,23 +2,27 @@ PODS: - DateToolsSwift (5.0.0) - Kanna (5.2.4) - SwiftGen (6.4.0) + - "UITextField+Shake (1.2.1)" DEPENDENCIES: - DateToolsSwift (~> 5.0.0) - Kanna (~> 5.2.2) - SwiftGen (~> 6.4.0) + - "UITextField+Shake (~> 1.2)" SPEC REPOS: trunk: - DateToolsSwift - Kanna - SwiftGen + - "UITextField+Shake" SPEC CHECKSUMS: DateToolsSwift: 4207ada6ad615d8dc076323d27037c94916dbfa6 Kanna: b9d00d7c11428308c7f95e1f1f84b8205f567a8f SwiftGen: 67860cc7c3cfc2ed25b9b74cfd55495fc89f9108 + "UITextField+Shake": 298ac5a0f239d731bdab999b19b628c956ca0ac3 -PODFILE CHECKSUM: 8b24099ae9ac02698d464cc508af9550352c85cb +PODFILE CHECKSUM: 30e8e3a555251a512e7b5e91183747152f126e7a COCOAPODS: 1.10.1