From 3d43382f77ad2525a4de0aaff1a03c008efe0ec9 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Wed, 29 Mar 2023 13:55:45 +0200 Subject: [PATCH 01/64] Add POST request to `GutenbergNetworking` --- .../Gutenberg/GutenbergNetworking.swift | 62 +++++++++++++++---- .../Gutenberg/GutenbergViewController.swift | 8 ++- 2 files changed, 56 insertions(+), 14 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergNetworking.swift b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergNetworking.swift index 5aad6abaf78c..ea74303fb619 100644 --- a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergNetworking.swift +++ b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergNetworking.swift @@ -6,15 +6,29 @@ struct GutenbergNetworkRequest { private let path: String private unowned let blog: Blog + private let method: HTTPMethod + private let data: [String: AnyObject]? - init(path: String, blog: Blog) { + enum HTTPMethod: String { + case get = "GET" + case post = "POST" + } + + init(path: String, blog: Blog, method: HTTPMethod = .get, data: [String: AnyObject]? = nil) { self.path = path self.blog = blog + self.method = method + self.data = data } func request(completion: @escaping CompletionHandler) { if blog.isAccessibleThroughWPCom(), let dotComID = blog.dotComID { - dotComRequest(with: dotComID, completion: completion) + switch method { + case .get: + dotComGetRequest(with: dotComID, completion: completion) + case .post: + dotComPostRequest(with: dotComID, data: data, completion: completion) + } } else { selfHostedRequest(completion: completion) } @@ -22,7 +36,7 @@ struct GutenbergNetworkRequest { // MARK: - dotCom - private func dotComRequest(with dotComID: NSNumber, completion: @escaping CompletionHandler) { + private func dotComGetRequest(with dotComID: NSNumber, completion: @escaping CompletionHandler) { blog.wordPressComRestApi()?.GET(dotComPath(with: dotComID), parameters: nil, success: { (response, httpResponse) in completion(.success(response)) }, failure: { (error, httpResponse) in @@ -30,9 +44,18 @@ struct GutenbergNetworkRequest { }) } + private func dotComPostRequest(with dotComID: NSNumber, data: [String: AnyObject]?, completion: @escaping CompletionHandler) { + blog.wordPressComRestApi()?.POST(dotComPath(with: dotComID), parameters: data, success: { (response, httpResponse) in + completion(.success(response)) + }, failure: { (error, httpResponse) in + completion(.failure(error.nsError(with: httpResponse))) + }) + } + private func dotComPath(with dotComID: NSNumber) -> String { return path.replacingOccurrences(of: "/wp/v2/", with: "/wp/v2/sites/\(dotComID)/") - .replacingOccurrences(of: "/oembed/1.0/", with: "/oembed/1.0/sites/\(dotComID)/") + .replacingOccurrences(of: "/wpcom/v2/", with: "/wpcom/v2/sites/\(dotComID)/") + .replacingOccurrences(of: "/oembed/1.0/", with: "/oembed/1.0/sites/\(dotComID)/") } // MARK: - Self-Hosed @@ -47,17 +70,32 @@ struct GutenbergNetworkRequest { return } - api.GET(path, parameters: nil) { (result, httpResponse) in + switch method { + case .get: + api.GET(path, parameters: nil) { (result, httpResponse) in + switch result { + case .success(let response): + completion(.success(response)) + case .failure(let error): + if handleEmbedError(path: path, error: error, completion: completion) { + return + } + completion(.failure(error as NSError)) + } + } + case .post: + api.POST(path, parameters: data) { (result, httpResponse) in switch result { - case .success(let response): - completion(.success(response)) - case .failure(let error): - if handleEmbedError(path: path, error: error, completion: completion) { - return - } - completion(.failure(error as NSError)) + case .success(let response): + completion(.success(response)) + case .failure(let error): + if handleEmbedError(path: path, error: error, completion: completion) { + return + } + completion(.failure(error as NSError)) } } + } } private func handleEmbedError(path: String, error: Error, completion: @escaping CompletionHandler) -> Bool { diff --git a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift index b79fe47983a3..2ea2dfdadce4 100644 --- a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift +++ b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift @@ -575,8 +575,12 @@ extension GutenbergViewController { extension GutenbergViewController: GutenbergBridgeDelegate { - func gutenbergDidRequestFetch(path: String, completion: @escaping (Result) -> Void) { - GutenbergNetworkRequest(path: path, blog: post.blog).request(completion: completion) + func gutenbergDidGetRequestFetch(path: String, completion: @escaping (Result) -> Void) { + GutenbergNetworkRequest(path: path, blog: post.blog, method: .get).request(completion: completion) + } + + func gutenbergDidPostRequestFetch(path: String, data: [String: AnyObject]?, completion: @escaping (Result) -> Void) { + GutenbergNetworkRequest(path: path, blog: post.blog, method: .post, data: data).request(completion: completion) } func editorDidAutosave() { From 7006623617627c3787760af359d629bb53722d90 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Wed, 29 Mar 2023 14:25:47 +0200 Subject: [PATCH 02/64] Update `WordPressKit` pod reference to branch --- Podfile | 4 ++-- Podfile.lock | 11 ++++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Podfile b/Podfile index 5790ab2aa11c..3791d3c9e285 100644 --- a/Podfile +++ b/Podfile @@ -47,8 +47,8 @@ def wordpress_ui end def wordpress_kit - pod 'WordPressKit', '~> 7.0.0-beta' - # pod 'WordPressKit', git: 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', branch: 'trunk' + # pod 'WordPressKit', '~> 7.0.0-beta' + pod 'WordPressKit', git: 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', branch: 'add/wporg-api-post-requests' # pod 'WordPressKit', git: 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', tag: '' # pod 'WordPressKit', git: 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', commit: '' # pod 'WordPressKit', path: '../WordPressKit-iOS' diff --git a/Podfile.lock b/Podfile.lock index a6d230ef4408..361bd3d33737 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -612,7 +612,7 @@ DEPENDENCIES: - SwiftLint (~> 0.50) - WordPress-Editor-iOS (~> 1.19.8) - WordPressAuthenticator (~> 5.6-beta) - - WordPressKit (~> 7.0.0-beta) + - WordPressKit (from `https://github.com/wordpress-mobile/WordPressKit-iOS.git`, branch `add/wporg-api-post-requests`) - WordPressShared (~> 2.0-beta) - WordPressUI (~> 1.12.5) - WPMediaPicker (~> 1.8.7) @@ -661,7 +661,6 @@ SPEC REPOS: - UIDeviceIdentifier - WordPress-Aztec-iOS - WordPress-Editor-iOS - - WordPressKit - WordPressUI - WPMediaPicker - wpxmlrpc @@ -778,6 +777,9 @@ EXTERNAL SOURCES: :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true :tag: v1.92.0-alpha1 + WordPressKit: + :branch: add/wporg-api-post-requests + :git: https://github.com/wordpress-mobile/WordPressKit-iOS.git Yoga: :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/Yoga.podspec.json @@ -793,6 +795,9 @@ CHECKOUT OPTIONS: :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true :tag: v1.92.0-alpha1 + WordPressKit: + :commit: 205110941cfb74a8523f99b0dc80487d4a71f6f5 + :git: https://github.com/wordpress-mobile/WordPressKit-iOS.git SPEC CHECKSUMS: Alamofire: 3ec537f71edc9804815215393ae2b1a8ea33a844 @@ -896,6 +901,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: ae5b4b813d216d3bf0a148773267fff14bd51d37 -PODFILE CHECKSUM: 48c28f5cf835d8db90a688018500190c97fbf876 +PODFILE CHECKSUM: 3eec323fd3d1253490730f938d40f1dc832894f3 COCOAPODS: 1.11.3 From 3499d149a60fdde6dc3abdcb20ba7281618b959d Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Wed, 29 Mar 2023 14:35:05 +0200 Subject: [PATCH 03/64] Update Gutenberg Mobile reference --- Podfile | 2 +- Podfile.lock | 202 +++++++++++++++++++++++++-------------------------- 2 files changed, 102 insertions(+), 102 deletions(-) diff --git a/Podfile b/Podfile index 3791d3c9e285..e8d328b5eff3 100644 --- a/Podfile +++ b/Podfile @@ -91,7 +91,7 @@ def shared_style_pods end def gutenberg_pods - gutenberg tag: 'v1.92.0-alpha1' + gutenberg commit: '966b12f8bd5fd7c35fb3ef499566451bfb6a2463' end def gutenberg(options) diff --git a/Podfile.lock b/Podfile.lock index 361bd3d33737..8558a68380a3 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -544,18 +544,18 @@ DEPENDENCIES: - AppCenter (~> 4.1) - AppCenter/Distribute (~> 4.1) - Automattic-Tracks-iOS (~> 0.13) - - boost (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/boost.podspec.json`) - - BVLinearGradient (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/BVLinearGradient.podspec.json`) + - boost (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/boost.podspec.json`) + - BVLinearGradient (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/BVLinearGradient.podspec.json`) - CocoaLumberjack/Swift (~> 3.0) - CropViewController (= 2.5.3) - Down (~> 0.6.6) - - FBLazyVector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/FBLazyVector.podspec.json`) - - FBReactNativeSpec (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json`) + - FBLazyVector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/FBLazyVector.podspec.json`) + - FBReactNativeSpec (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json`) - FSInteractiveMap (from `https://github.com/wordpress-mobile/FSInteractiveMap.git`, tag `0.2.0`) - Gifu (= 3.2.0) - - glog (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/glog.podspec.json`) + - glog (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/glog.podspec.json`) - Gridicons (~> 1.1.0) - - Gutenberg (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, tag `v1.92.0-alpha1`) + - Gutenberg (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, commit `966b12f8bd5fd7c35fb3ef499566451bfb6a2463`) - JTAppleCalendar (~> 8.0.2) - Kanvas (~> 1.4.4) - MediaEditor (~> 1.2.1) @@ -564,49 +564,49 @@ DEPENDENCIES: - "NSURL+IDN (~> 0.4)" - OCMock (~> 3.4.3) - OHHTTPStubs/Swift (~> 9.1.0) - - RCT-Folly (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/RCT-Folly.podspec.json`) - - RCTRequired (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/RCTRequired.podspec.json`) - - RCTTypeSafety (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/RCTTypeSafety.podspec.json`) + - RCT-Folly (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RCT-Folly.podspec.json`) + - RCTRequired (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RCTRequired.podspec.json`) + - RCTTypeSafety (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RCTTypeSafety.podspec.json`) - Reachability (= 3.2) - - React (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React.podspec.json`) - - React-bridging (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-bridging.podspec.json`) - - React-callinvoker (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-callinvoker.podspec.json`) - - React-Codegen (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-Codegen.podspec.json`) - - React-Core (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-Core.podspec.json`) - - React-CoreModules (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-CoreModules.podspec.json`) - - React-cxxreact (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-cxxreact.podspec.json`) - - React-jsi (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-jsi.podspec.json`) - - React-jsiexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-jsiexecutor.podspec.json`) - - React-jsinspector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-jsinspector.podspec.json`) - - React-logger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-logger.podspec.json`) - - react-native-blur (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/react-native-blur.podspec.json`) - - react-native-get-random-values (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/react-native-get-random-values.podspec.json`) - - react-native-keyboard-aware-scroll-view (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/react-native-keyboard-aware-scroll-view.podspec.json`) - - react-native-safe-area (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/react-native-safe-area.podspec.json`) - - react-native-safe-area-context (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/react-native-safe-area-context.podspec.json`) - - react-native-slider (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/react-native-slider.podspec.json`) - - react-native-video (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/react-native-video.podspec.json`) - - react-native-webview (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/react-native-webview.podspec.json`) - - React-perflogger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-perflogger.podspec.json`) - - React-RCTActionSheet (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-RCTActionSheet.podspec.json`) - - React-RCTAnimation (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-RCTAnimation.podspec.json`) - - React-RCTBlob (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-RCTBlob.podspec.json`) - - React-RCTImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-RCTImage.podspec.json`) - - React-RCTLinking (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-RCTLinking.podspec.json`) - - React-RCTNetwork (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-RCTNetwork.podspec.json`) - - React-RCTSettings (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-RCTSettings.podspec.json`) - - React-RCTText (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-RCTText.podspec.json`) - - React-RCTVibration (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-RCTVibration.podspec.json`) - - React-runtimeexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-runtimeexecutor.podspec.json`) - - ReactCommon (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/ReactCommon.podspec.json`) - - RNCClipboard (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/RNCClipboard.podspec.json`) - - RNCMaskedView (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/RNCMaskedView.podspec.json`) - - RNFastImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/RNFastImage.podspec.json`) - - RNGestureHandler (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/RNGestureHandler.podspec.json`) - - RNReanimated (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/RNReanimated.podspec.json`) - - RNScreens (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/RNScreens.podspec.json`) - - RNSVG (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/RNSVG.podspec.json`) - - RNTAztecView (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, tag `v1.92.0-alpha1`) + - React (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React.podspec.json`) + - React-bridging (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-bridging.podspec.json`) + - React-callinvoker (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-callinvoker.podspec.json`) + - React-Codegen (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-Codegen.podspec.json`) + - React-Core (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-Core.podspec.json`) + - React-CoreModules (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-CoreModules.podspec.json`) + - React-cxxreact (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-cxxreact.podspec.json`) + - React-jsi (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-jsi.podspec.json`) + - React-jsiexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-jsiexecutor.podspec.json`) + - React-jsinspector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-jsinspector.podspec.json`) + - React-logger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-logger.podspec.json`) + - react-native-blur (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-blur.podspec.json`) + - react-native-get-random-values (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-get-random-values.podspec.json`) + - react-native-keyboard-aware-scroll-view (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-keyboard-aware-scroll-view.podspec.json`) + - react-native-safe-area (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-safe-area.podspec.json`) + - react-native-safe-area-context (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-safe-area-context.podspec.json`) + - react-native-slider (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-slider.podspec.json`) + - react-native-video (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-video.podspec.json`) + - react-native-webview (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-webview.podspec.json`) + - React-perflogger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-perflogger.podspec.json`) + - React-RCTActionSheet (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTActionSheet.podspec.json`) + - React-RCTAnimation (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTAnimation.podspec.json`) + - React-RCTBlob (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTBlob.podspec.json`) + - React-RCTImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTImage.podspec.json`) + - React-RCTLinking (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTLinking.podspec.json`) + - React-RCTNetwork (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTNetwork.podspec.json`) + - React-RCTSettings (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTSettings.podspec.json`) + - React-RCTText (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTText.podspec.json`) + - React-RCTVibration (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTVibration.podspec.json`) + - React-runtimeexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-runtimeexecutor.podspec.json`) + - ReactCommon (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/ReactCommon.podspec.json`) + - RNCClipboard (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNCClipboard.podspec.json`) + - RNCMaskedView (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNCMaskedView.podspec.json`) + - RNFastImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNFastImage.podspec.json`) + - RNGestureHandler (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNGestureHandler.podspec.json`) + - RNReanimated (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNReanimated.podspec.json`) + - RNScreens (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNScreens.podspec.json`) + - RNSVG (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNSVG.podspec.json`) + - RNTAztecView (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, commit `966b12f8bd5fd7c35fb3ef499566451bfb6a2463`) - Starscream (= 3.0.6) - SVProgressHUD (= 2.2.5) - SwiftLint (~> 0.50) @@ -616,7 +616,7 @@ DEPENDENCIES: - WordPressShared (~> 2.0-beta) - WordPressUI (~> 1.12.5) - WPMediaPicker (~> 1.8.7) - - Yoga (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/Yoga.podspec.json`) + - Yoga (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/Yoga.podspec.json`) - ZendeskSupportSDK (= 5.3.0) - ZIPFoundation (~> 0.9.8) @@ -675,126 +675,126 @@ SPEC REPOS: EXTERNAL SOURCES: boost: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/boost.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/boost.podspec.json BVLinearGradient: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/BVLinearGradient.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/BVLinearGradient.podspec.json FBLazyVector: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/FBLazyVector.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/FBLazyVector.podspec.json FBReactNativeSpec: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json FSInteractiveMap: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 glog: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/glog.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/glog.podspec.json Gutenberg: + :commit: 966b12f8bd5fd7c35fb3ef499566451bfb6a2463 :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true - :tag: v1.92.0-alpha1 RCT-Folly: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/RCT-Folly.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RCT-Folly.podspec.json RCTRequired: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/RCTRequired.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RCTRequired.podspec.json RCTTypeSafety: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/RCTTypeSafety.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RCTTypeSafety.podspec.json React: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React.podspec.json React-bridging: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-bridging.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-bridging.podspec.json React-callinvoker: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-callinvoker.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-callinvoker.podspec.json React-Codegen: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-Codegen.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-Codegen.podspec.json React-Core: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-Core.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-Core.podspec.json React-CoreModules: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-CoreModules.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-CoreModules.podspec.json React-cxxreact: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-cxxreact.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-cxxreact.podspec.json React-jsi: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-jsi.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-jsi.podspec.json React-jsiexecutor: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-jsiexecutor.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-jsiexecutor.podspec.json React-jsinspector: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-jsinspector.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-jsinspector.podspec.json React-logger: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-logger.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-logger.podspec.json react-native-blur: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/react-native-blur.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-blur.podspec.json react-native-get-random-values: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/react-native-get-random-values.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-get-random-values.podspec.json react-native-keyboard-aware-scroll-view: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/react-native-keyboard-aware-scroll-view.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-keyboard-aware-scroll-view.podspec.json react-native-safe-area: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/react-native-safe-area.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-safe-area.podspec.json react-native-safe-area-context: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/react-native-safe-area-context.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-safe-area-context.podspec.json react-native-slider: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/react-native-slider.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-slider.podspec.json react-native-video: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/react-native-video.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-video.podspec.json react-native-webview: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/react-native-webview.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-webview.podspec.json React-perflogger: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-perflogger.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-perflogger.podspec.json React-RCTActionSheet: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-RCTActionSheet.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTActionSheet.podspec.json React-RCTAnimation: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-RCTAnimation.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTAnimation.podspec.json React-RCTBlob: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-RCTBlob.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTBlob.podspec.json React-RCTImage: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-RCTImage.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTImage.podspec.json React-RCTLinking: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-RCTLinking.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTLinking.podspec.json React-RCTNetwork: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-RCTNetwork.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTNetwork.podspec.json React-RCTSettings: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-RCTSettings.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTSettings.podspec.json React-RCTText: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-RCTText.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTText.podspec.json React-RCTVibration: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-RCTVibration.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTVibration.podspec.json React-runtimeexecutor: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/React-runtimeexecutor.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-runtimeexecutor.podspec.json ReactCommon: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/ReactCommon.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/ReactCommon.podspec.json RNCClipboard: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/RNCClipboard.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNCClipboard.podspec.json RNCMaskedView: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/RNCMaskedView.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNCMaskedView.podspec.json RNFastImage: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/RNFastImage.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNFastImage.podspec.json RNGestureHandler: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/RNGestureHandler.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNGestureHandler.podspec.json RNReanimated: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/RNReanimated.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNReanimated.podspec.json RNScreens: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/RNScreens.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNScreens.podspec.json RNSVG: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/RNSVG.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNSVG.podspec.json RNTAztecView: + :commit: 966b12f8bd5fd7c35fb3ef499566451bfb6a2463 :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true - :tag: v1.92.0-alpha1 WordPressKit: :branch: add/wporg-api-post-requests :git: https://github.com/wordpress-mobile/WordPressKit-iOS.git Yoga: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0-alpha1/third-party-podspecs/Yoga.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/Yoga.podspec.json CHECKOUT OPTIONS: FSInteractiveMap: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 Gutenberg: + :commit: 966b12f8bd5fd7c35fb3ef499566451bfb6a2463 :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true - :tag: v1.92.0-alpha1 RNTAztecView: + :commit: 966b12f8bd5fd7c35fb3ef499566451bfb6a2463 :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true - :tag: v1.92.0-alpha1 WordPressKit: :commit: 205110941cfb74a8523f99b0dc80487d4a71f6f5 :git: https://github.com/wordpress-mobile/WordPressKit-iOS.git @@ -901,6 +901,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: ae5b4b813d216d3bf0a148773267fff14bd51d37 -PODFILE CHECKSUM: 3eec323fd3d1253490730f938d40f1dc832894f3 +PODFILE CHECKSUM: 289b2a9f76a0fd798980dfd68367358e7aedbedf COCOAPODS: 1.11.3 From 3489476117e66dfe0ba0fb290b0151b931cb0739 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Thu, 30 Mar 2023 10:20:36 +0200 Subject: [PATCH 04/64] Update Podfile.lock --- Podfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Podfile.lock b/Podfile.lock index 8558a68380a3..b6eabb43dc08 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -796,7 +796,7 @@ CHECKOUT OPTIONS: :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true WordPressKit: - :commit: 205110941cfb74a8523f99b0dc80487d4a71f6f5 + :commit: c44cda9b2771d68c7315bc557f4adafdbc0a4b8e :git: https://github.com/wordpress-mobile/WordPressKit-iOS.git SPEC CHECKSUMS: From aa3acc1dc869fcd5e1a6e0abed69dcc47e23a17c Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Sun, 2 Apr 2023 21:29:49 +1000 Subject: [PATCH 05/64] Switch to WordPressKit 7.1.0 Notice that the `Podfile` requirement has been updated instead of using `pod update` because the code now depends on a method introduced in version 7.1.0. --- Podfile | 4 ++-- Podfile.lock | 15 +++++---------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/Podfile b/Podfile index e8d328b5eff3..d73dbc8158f4 100644 --- a/Podfile +++ b/Podfile @@ -47,8 +47,8 @@ def wordpress_ui end def wordpress_kit - # pod 'WordPressKit', '~> 7.0.0-beta' - pod 'WordPressKit', git: 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', branch: 'add/wporg-api-post-requests' + pod 'WordPressKit', '~> 7.1.0-beta' + # pod 'WordPressKit', git: 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', branch: '' # pod 'WordPressKit', git: 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', tag: '' # pod 'WordPressKit', git: 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', commit: '' # pod 'WordPressKit', path: '../WordPressKit-iOS' diff --git a/Podfile.lock b/Podfile.lock index b6eabb43dc08..b5b396f1ed16 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -511,7 +511,7 @@ PODS: - WordPressKit (~> 7.0-beta) - WordPressShared (~> 2.1-beta) - WordPressUI (~> 1.7-beta) - - WordPressKit (7.0.0): + - WordPressKit (7.1.0): - Alamofire (~> 4.8.0) - NSObject-SafeExpectations (~> 0.0.4) - UIDeviceIdentifier (~> 2.0) @@ -612,7 +612,7 @@ DEPENDENCIES: - SwiftLint (~> 0.50) - WordPress-Editor-iOS (~> 1.19.8) - WordPressAuthenticator (~> 5.6-beta) - - WordPressKit (from `https://github.com/wordpress-mobile/WordPressKit-iOS.git`, branch `add/wporg-api-post-requests`) + - WordPressKit (~> 7.1.0-beta) - WordPressShared (~> 2.0-beta) - WordPressUI (~> 1.12.5) - WPMediaPicker (~> 1.8.7) @@ -661,6 +661,7 @@ SPEC REPOS: - UIDeviceIdentifier - WordPress-Aztec-iOS - WordPress-Editor-iOS + - WordPressKit - WordPressUI - WPMediaPicker - wpxmlrpc @@ -777,9 +778,6 @@ EXTERNAL SOURCES: :commit: 966b12f8bd5fd7c35fb3ef499566451bfb6a2463 :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true - WordPressKit: - :branch: add/wporg-api-post-requests - :git: https://github.com/wordpress-mobile/WordPressKit-iOS.git Yoga: :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/Yoga.podspec.json @@ -795,9 +793,6 @@ CHECKOUT OPTIONS: :commit: 966b12f8bd5fd7c35fb3ef499566451bfb6a2463 :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true - WordPressKit: - :commit: c44cda9b2771d68c7315bc557f4adafdbc0a4b8e - :git: https://github.com/wordpress-mobile/WordPressKit-iOS.git SPEC CHECKSUMS: Alamofire: 3ec537f71edc9804815215393ae2b1a8ea33a844 @@ -886,7 +881,7 @@ SPEC CHECKSUMS: WordPress-Aztec-iOS: 7d11d598f14c82c727c08b56bd35fbeb7dafb504 WordPress-Editor-iOS: 9eb9f12f21a5209cb837908d81ffe1e31cb27345 WordPressAuthenticator: 0a2a3699c6ddaabf4a5615f43729170f2bb3031a - WordPressKit: a161c49306369cfa22c648866cee5aba16d7cbac + WordPressKit: bda9eea7d1cbe4f7599b25e0c879ca0b34051cf5 WordPressShared: 8e59bc8cec256f54a7c4cc6c94911adc2a9a65d2 WordPressUI: c5be816f6c7b3392224ac21de9e521e89fa108ac WPMediaPicker: 0d45dfd7b3c5651c5236ffd48c1b0b2f60a2d5d2 @@ -901,6 +896,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: ae5b4b813d216d3bf0a148773267fff14bd51d37 -PODFILE CHECKSUM: 289b2a9f76a0fd798980dfd68367358e7aedbedf +PODFILE CHECKSUM: 7ff43a0fe50bdc644bfba0f89e15f01aa4e01724 COCOAPODS: 1.11.3 From 9dcdaf6b384b943a90b079c7f7c3d1fd0abf55ba Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Sun, 2 Apr 2023 21:44:48 +1000 Subject: [PATCH 06/64] Restore Gutenberg v1.92.0 after automatic merge resolution regression 9f3fa474ea69c87f6e7ea865750c554d5bb4c00b reverted Gutenberg from 1.92.0, the version on trunk, to the commit pin set in 3499d149a60fdde6dc3abdcb20ba7281618b959d --- Podfile | 2 +- Podfile.lock | 210 +++++++++++++++++++++++++-------------------------- 2 files changed, 106 insertions(+), 106 deletions(-) diff --git a/Podfile b/Podfile index d73dbc8158f4..9917684edaac 100644 --- a/Podfile +++ b/Podfile @@ -91,7 +91,7 @@ def shared_style_pods end def gutenberg_pods - gutenberg commit: '966b12f8bd5fd7c35fb3ef499566451bfb6a2463' + gutenberg tag: 'v1.92.0' end def gutenberg(options) diff --git a/Podfile.lock b/Podfile.lock index b5b396f1ed16..141be6790017 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -54,7 +54,7 @@ PODS: - AppAuth/Core (~> 1.6) - GTMSessionFetcher/Core (< 3.0, >= 1.5) - GTMSessionFetcher/Core (1.7.2) - - Gutenberg (1.91.0): + - Gutenberg (1.92.0): - React (= 0.69.4) - React-CoreModules (= 0.69.4) - React-RCTImage (= 0.69.4) @@ -483,7 +483,7 @@ PODS: - React-Core - RNSVG (9.13.6): - React-Core - - RNTAztecView (1.91.0): + - RNTAztecView (1.92.0): - React-Core - WordPress-Aztec-iOS (~> 1.19.8) - SDWebImage (5.11.1): @@ -544,18 +544,18 @@ DEPENDENCIES: - AppCenter (~> 4.1) - AppCenter/Distribute (~> 4.1) - Automattic-Tracks-iOS (~> 0.13) - - boost (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/boost.podspec.json`) - - BVLinearGradient (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/BVLinearGradient.podspec.json`) + - boost (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/boost.podspec.json`) + - BVLinearGradient (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/BVLinearGradient.podspec.json`) - CocoaLumberjack/Swift (~> 3.0) - CropViewController (= 2.5.3) - Down (~> 0.6.6) - - FBLazyVector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/FBLazyVector.podspec.json`) - - FBReactNativeSpec (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json`) + - FBLazyVector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/FBLazyVector.podspec.json`) + - FBReactNativeSpec (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json`) - FSInteractiveMap (from `https://github.com/wordpress-mobile/FSInteractiveMap.git`, tag `0.2.0`) - Gifu (= 3.2.0) - - glog (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/glog.podspec.json`) + - glog (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/glog.podspec.json`) - Gridicons (~> 1.1.0) - - Gutenberg (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, commit `966b12f8bd5fd7c35fb3ef499566451bfb6a2463`) + - Gutenberg (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, tag `v1.92.0`) - JTAppleCalendar (~> 8.0.2) - Kanvas (~> 1.4.4) - MediaEditor (~> 1.2.1) @@ -564,49 +564,49 @@ DEPENDENCIES: - "NSURL+IDN (~> 0.4)" - OCMock (~> 3.4.3) - OHHTTPStubs/Swift (~> 9.1.0) - - RCT-Folly (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RCT-Folly.podspec.json`) - - RCTRequired (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RCTRequired.podspec.json`) - - RCTTypeSafety (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RCTTypeSafety.podspec.json`) + - RCT-Folly (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RCT-Folly.podspec.json`) + - RCTRequired (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RCTRequired.podspec.json`) + - RCTTypeSafety (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RCTTypeSafety.podspec.json`) - Reachability (= 3.2) - - React (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React.podspec.json`) - - React-bridging (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-bridging.podspec.json`) - - React-callinvoker (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-callinvoker.podspec.json`) - - React-Codegen (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-Codegen.podspec.json`) - - React-Core (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-Core.podspec.json`) - - React-CoreModules (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-CoreModules.podspec.json`) - - React-cxxreact (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-cxxreact.podspec.json`) - - React-jsi (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-jsi.podspec.json`) - - React-jsiexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-jsiexecutor.podspec.json`) - - React-jsinspector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-jsinspector.podspec.json`) - - React-logger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-logger.podspec.json`) - - react-native-blur (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-blur.podspec.json`) - - react-native-get-random-values (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-get-random-values.podspec.json`) - - react-native-keyboard-aware-scroll-view (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-keyboard-aware-scroll-view.podspec.json`) - - react-native-safe-area (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-safe-area.podspec.json`) - - react-native-safe-area-context (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-safe-area-context.podspec.json`) - - react-native-slider (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-slider.podspec.json`) - - react-native-video (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-video.podspec.json`) - - react-native-webview (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-webview.podspec.json`) - - React-perflogger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-perflogger.podspec.json`) - - React-RCTActionSheet (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTActionSheet.podspec.json`) - - React-RCTAnimation (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTAnimation.podspec.json`) - - React-RCTBlob (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTBlob.podspec.json`) - - React-RCTImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTImage.podspec.json`) - - React-RCTLinking (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTLinking.podspec.json`) - - React-RCTNetwork (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTNetwork.podspec.json`) - - React-RCTSettings (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTSettings.podspec.json`) - - React-RCTText (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTText.podspec.json`) - - React-RCTVibration (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTVibration.podspec.json`) - - React-runtimeexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-runtimeexecutor.podspec.json`) - - ReactCommon (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/ReactCommon.podspec.json`) - - RNCClipboard (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNCClipboard.podspec.json`) - - RNCMaskedView (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNCMaskedView.podspec.json`) - - RNFastImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNFastImage.podspec.json`) - - RNGestureHandler (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNGestureHandler.podspec.json`) - - RNReanimated (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNReanimated.podspec.json`) - - RNScreens (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNScreens.podspec.json`) - - RNSVG (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNSVG.podspec.json`) - - RNTAztecView (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, commit `966b12f8bd5fd7c35fb3ef499566451bfb6a2463`) + - React (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React.podspec.json`) + - React-bridging (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-bridging.podspec.json`) + - React-callinvoker (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-callinvoker.podspec.json`) + - React-Codegen (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-Codegen.podspec.json`) + - React-Core (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-Core.podspec.json`) + - React-CoreModules (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-CoreModules.podspec.json`) + - React-cxxreact (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-cxxreact.podspec.json`) + - React-jsi (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-jsi.podspec.json`) + - React-jsiexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-jsiexecutor.podspec.json`) + - React-jsinspector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-jsinspector.podspec.json`) + - React-logger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-logger.podspec.json`) + - react-native-blur (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-blur.podspec.json`) + - react-native-get-random-values (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-get-random-values.podspec.json`) + - react-native-keyboard-aware-scroll-view (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-keyboard-aware-scroll-view.podspec.json`) + - react-native-safe-area (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-safe-area.podspec.json`) + - react-native-safe-area-context (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-safe-area-context.podspec.json`) + - react-native-slider (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-slider.podspec.json`) + - react-native-video (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-video.podspec.json`) + - react-native-webview (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-webview.podspec.json`) + - React-perflogger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-perflogger.podspec.json`) + - React-RCTActionSheet (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTActionSheet.podspec.json`) + - React-RCTAnimation (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTAnimation.podspec.json`) + - React-RCTBlob (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTBlob.podspec.json`) + - React-RCTImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTImage.podspec.json`) + - React-RCTLinking (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTLinking.podspec.json`) + - React-RCTNetwork (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTNetwork.podspec.json`) + - React-RCTSettings (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTSettings.podspec.json`) + - React-RCTText (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTText.podspec.json`) + - React-RCTVibration (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTVibration.podspec.json`) + - React-runtimeexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-runtimeexecutor.podspec.json`) + - ReactCommon (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/ReactCommon.podspec.json`) + - RNCClipboard (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNCClipboard.podspec.json`) + - RNCMaskedView (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNCMaskedView.podspec.json`) + - RNFastImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNFastImage.podspec.json`) + - RNGestureHandler (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNGestureHandler.podspec.json`) + - RNReanimated (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNReanimated.podspec.json`) + - RNScreens (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNScreens.podspec.json`) + - RNSVG (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNSVG.podspec.json`) + - RNTAztecView (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, tag `v1.92.0`) - Starscream (= 3.0.6) - SVProgressHUD (= 2.2.5) - SwiftLint (~> 0.50) @@ -616,7 +616,7 @@ DEPENDENCIES: - WordPressShared (~> 2.0-beta) - WordPressUI (~> 1.12.5) - WPMediaPicker (~> 1.8.7) - - Yoga (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/Yoga.podspec.json`) + - Yoga (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/Yoga.podspec.json`) - ZendeskSupportSDK (= 5.3.0) - ZIPFoundation (~> 0.9.8) @@ -676,123 +676,123 @@ SPEC REPOS: EXTERNAL SOURCES: boost: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/boost.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/boost.podspec.json BVLinearGradient: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/BVLinearGradient.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/BVLinearGradient.podspec.json FBLazyVector: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/FBLazyVector.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/FBLazyVector.podspec.json FBReactNativeSpec: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json FSInteractiveMap: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 glog: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/glog.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/glog.podspec.json Gutenberg: - :commit: 966b12f8bd5fd7c35fb3ef499566451bfb6a2463 :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true + :tag: v1.92.0 RCT-Folly: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RCT-Folly.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RCT-Folly.podspec.json RCTRequired: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RCTRequired.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RCTRequired.podspec.json RCTTypeSafety: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RCTTypeSafety.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RCTTypeSafety.podspec.json React: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React.podspec.json React-bridging: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-bridging.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-bridging.podspec.json React-callinvoker: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-callinvoker.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-callinvoker.podspec.json React-Codegen: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-Codegen.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-Codegen.podspec.json React-Core: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-Core.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-Core.podspec.json React-CoreModules: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-CoreModules.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-CoreModules.podspec.json React-cxxreact: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-cxxreact.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-cxxreact.podspec.json React-jsi: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-jsi.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-jsi.podspec.json React-jsiexecutor: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-jsiexecutor.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-jsiexecutor.podspec.json React-jsinspector: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-jsinspector.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-jsinspector.podspec.json React-logger: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-logger.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-logger.podspec.json react-native-blur: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-blur.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-blur.podspec.json react-native-get-random-values: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-get-random-values.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-get-random-values.podspec.json react-native-keyboard-aware-scroll-view: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-keyboard-aware-scroll-view.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-keyboard-aware-scroll-view.podspec.json react-native-safe-area: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-safe-area.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-safe-area.podspec.json react-native-safe-area-context: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-safe-area-context.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-safe-area-context.podspec.json react-native-slider: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-slider.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-slider.podspec.json react-native-video: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-video.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-video.podspec.json react-native-webview: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/react-native-webview.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-webview.podspec.json React-perflogger: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-perflogger.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-perflogger.podspec.json React-RCTActionSheet: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTActionSheet.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTActionSheet.podspec.json React-RCTAnimation: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTAnimation.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTAnimation.podspec.json React-RCTBlob: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTBlob.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTBlob.podspec.json React-RCTImage: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTImage.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTImage.podspec.json React-RCTLinking: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTLinking.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTLinking.podspec.json React-RCTNetwork: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTNetwork.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTNetwork.podspec.json React-RCTSettings: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTSettings.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTSettings.podspec.json React-RCTText: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTText.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTText.podspec.json React-RCTVibration: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-RCTVibration.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTVibration.podspec.json React-runtimeexecutor: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/React-runtimeexecutor.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-runtimeexecutor.podspec.json ReactCommon: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/ReactCommon.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/ReactCommon.podspec.json RNCClipboard: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNCClipboard.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNCClipboard.podspec.json RNCMaskedView: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNCMaskedView.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNCMaskedView.podspec.json RNFastImage: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNFastImage.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNFastImage.podspec.json RNGestureHandler: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNGestureHandler.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNGestureHandler.podspec.json RNReanimated: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNReanimated.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNReanimated.podspec.json RNScreens: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNScreens.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNScreens.podspec.json RNSVG: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/RNSVG.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNSVG.podspec.json RNTAztecView: - :commit: 966b12f8bd5fd7c35fb3ef499566451bfb6a2463 :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true + :tag: v1.92.0 Yoga: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/966b12f8bd5fd7c35fb3ef499566451bfb6a2463/third-party-podspecs/Yoga.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/Yoga.podspec.json CHECKOUT OPTIONS: FSInteractiveMap: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 Gutenberg: - :commit: 966b12f8bd5fd7c35fb3ef499566451bfb6a2463 :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true + :tag: v1.92.0 RNTAztecView: - :commit: 966b12f8bd5fd7c35fb3ef499566451bfb6a2463 :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true + :tag: v1.92.0 SPEC CHECKSUMS: Alamofire: 3ec537f71edc9804815215393ae2b1a8ea33a844 @@ -817,7 +817,7 @@ SPEC CHECKSUMS: Gridicons: 17d660b97ce4231d582101b02f8280628b141c9a GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd GTMSessionFetcher: 5595ec75acf5be50814f81e9189490412bad82ba - Gutenberg: e66922a0225a69a14fb47826b04150f539a5ddd4 + Gutenberg: 9a5f11d8bc496e546c8539300bbfc3847f9c8aa8 JTAppleCalendar: 932cadea40b1051beab10f67843451d48ba16c99 Kanvas: f932eaed3d3f47aae8aafb6c2d27c968bdd49030 libwebp: f62cb61d0a484ba548448a4bd52aabf150ff6eef @@ -869,7 +869,7 @@ SPEC CHECKSUMS: RNReanimated: 8abe8173f54110a9ae98a629d0d8bf343a84f739 RNScreens: bd1f43d7dfcd435bc11d4ee5c60086717c45a113 RNSVG: 259ef12cbec2591a45fc7c5f09d7aa09e6692533 - RNTAztecView: 699f1fbdbc35a2a7ae74b729a0063a2204b11db0 + RNTAztecView: 142be0e639c2c3b669adf334defacd39607748b6 SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d Sentry: 026b36fdc09531604db9279e55f047fe652e3f4a @@ -896,6 +896,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: ae5b4b813d216d3bf0a148773267fff14bd51d37 -PODFILE CHECKSUM: 7ff43a0fe50bdc644bfba0f89e15f01aa4e01724 +PODFILE CHECKSUM: dff86ee2eaa86838f15e66f4f797db6dc46eaf45 COCOAPODS: 1.11.3 From c5bdaa128d78b9a64f8c0de1177484aac685e895 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Mon, 3 Apr 2023 14:02:37 +1000 Subject: [PATCH 07/64] Update code to avoid "Heterogeneous collection literal" Xcode 14.3 warnings Full warning example: > Heterogeneous collection literal could only be inferred to '[String : Any]'; > add explicit type annotation if this is intentional --- WordPress/Classes/Utility/Logging/SentryStartupEvent.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/Utility/Logging/SentryStartupEvent.swift b/WordPress/Classes/Utility/Logging/SentryStartupEvent.swift index dc58deb118fb..f80d322a1071 100644 --- a/WordPress/Classes/Utility/Logging/SentryStartupEvent.swift +++ b/WordPress/Classes/Utility/Logging/SentryStartupEvent.swift @@ -42,7 +42,7 @@ startup time. This will block the thread. Do not use unless you're sure. "Code": error.code, "Description": error.localizedDescription, "User Info": error.userInfo.description - ] + ] as [String: Any] }) let error = NSError(domain: title, code: -1, userInfo: [NSLocalizedDescriptionKey: title]) From baff96d0d9e924666d5496927bf844bdd824a82c Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Mon, 3 Apr 2023 14:04:28 +1000 Subject: [PATCH 08/64] Update code to avoid "Empty collection literal" Xcode 14.3 warnings Full warning example: > Empty collection literal requires an explicit type --- .../Blog Dashboard/Service/BlogDashboardPostsParser.swift | 8 ++++---- .../ViewRelated/Reader/ReaderStreamViewController.swift | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardPostsParser.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardPostsParser.swift index 9f9d70ec694a..a7f48ca7c82c 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardPostsParser.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardPostsParser.swift @@ -25,7 +25,7 @@ class BlogDashboardPostsParser { // If drafts are not synced and the cards API returns zero posts // depend on local data if blog.dashboardState.draftsSynced || (!posts.hasDrafts && localDraftsCount > 0) { - posts["draft"] = Array(repeatElement([:], count: localDraftsCount)) + posts["draft"] = Array(repeatElement([String: Any](), count: localDraftsCount)) } } @@ -34,18 +34,18 @@ class BlogDashboardPostsParser { // If scheduled posts are not synced and the cards API returns zero posts // depend on local data if blog.dashboardState.scheduledSynced || (!posts.hasScheduled && localScheduledCount > 0) { - posts["scheduled"] = Array(repeatElement([:], count: localScheduledCount)) + posts["scheduled"] = Array(repeatElement([String: Any](), count: localScheduledCount)) } } // Make sure only one draft is present if posts.hasDrafts { - posts["draft"] = [[:]] // Only one post is needed + posts["draft"] = [[String: Any]()] // Only one post is needed } // Make sure only one scheduled post is present if posts.hasScheduled { - posts["scheduled"] = [[:]] // Only one post is needed + posts["scheduled"] = [[String: Any]()] // Only one post is needed } return posts diff --git a/WordPress/Classes/ViewRelated/Reader/ReaderStreamViewController.swift b/WordPress/Classes/ViewRelated/Reader/ReaderStreamViewController.swift index 66f06b71e13f..36b552fc68ce 100644 --- a/WordPress/Classes/ViewRelated/Reader/ReaderStreamViewController.swift +++ b/WordPress/Classes/ViewRelated/Reader/ReaderStreamViewController.swift @@ -1293,7 +1293,7 @@ import Combine // has to exist within an empty set. let predicateForNilTopic = contentType == .saved ? NSPredicate(format: "isSavedForLater == YES") : - NSPredicate(format: "topic = NULL AND SELF in %@", []) + NSPredicate(format: "topic = NULL AND SELF in %@", [String]()) guard let topic = readerTopic else { return predicateForNilTopic From 4e2bd4584094d2044da437141368d76149ad8916 Mon Sep 17 00:00:00 2001 From: Alex Grebenyuk Date: Mon, 3 Apr 2023 02:54:53 -0400 Subject: [PATCH 09/64] Hiding dashboard cards: add context menus (#20384) * Remove unused code from BlogDashboardCardFrameView The chevronImage and the iconImageView were removed during the recent dashboard card redesign * Fix localizable strings comments in Blaze card * Fix size of the context menu buttons on Dashboard (was too small) * Add context menu to Drafts and Scheduled posts * Add Hide This action to Todays Stats card on Dashboard * Update release notes * Revert "Fix size of the context menu buttons on Dashboard (was too small)" This reverts commit 60b88d889a025d5e7e69f9231b73db34e06e39d6. * Remove personalization from release notes for now * Update context menu icon on dashboard cards --- RELEASE-NOTES.txt | 1 - .../Utility/Analytics/WPAnalyticsEvent.swift | 6 ++ .../Cards/Blaze/BlazeCardView.swift | 2 +- .../Cards/Blaze/DashboardBlazeCardCell.swift | 2 + .../Posts/BlogDashboardCardFrameView.swift | 65 ++----------------- .../Posts/DashboardPostsListCardCell.swift | 31 +++++---- .../Prompts/DashboardPromptsCardCell.swift | 7 +- .../DashboardQuickStartCardCell.swift | 1 - .../Cards/Stats/DashboardStatsCardCell.swift | 18 +++-- .../Helpers/BlogDashboardAnalytics.swift | 8 +++ .../Helpers/BlogDashboardHelpers.swift | 19 ++++++ .../View/JetpackRemoteInstallCardView.swift | 1 - .../Contents.json | 15 +++++ .../more-horizontal-mobile.svg | 3 + WordPress/WordPress.xcodeproj/project.pbxproj | 3 + 15 files changed, 99 insertions(+), 83 deletions(-) create mode 100644 WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Helpers/BlogDashboardHelpers.swift create mode 100644 WordPress/Resources/AppImages.xcassets/more-horizontal-mobile.imageset/Contents.json create mode 100644 WordPress/Resources/AppImages.xcassets/more-horizontal-mobile.imageset/more-horizontal-mobile.svg diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 06d6073cb3ab..9eef518266f9 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -3,7 +3,6 @@ * [**] [internal] Refactor updating account related Core Data operations, which ususally happens during log in and out of the app. [#20394] * [***] [internal] Refactor uploading photos (from the device photo, the Free Photo library, and other sources) to the WordPress Media Library. Affected areas are where you can choose a photo and upload, including the "Media" screen, adding images to a post, updating site icon, etc. [#20322] * [**] [WordPress-only] Warns user about sites with only individual plugins not supporting core app features and offers the option to switch to the Jetpack app. [#20408] -* [**] Add a "Personalize Home Tab" button to the bottom of the Home tab that allows changing cards visibility. [#20369] 22.0 ----- diff --git a/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift b/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift index 4a012e9dfdb2..5a094b521e41 100644 --- a/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift +++ b/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift @@ -329,6 +329,8 @@ import Foundation // My Site Dashboard case dashboardCardShown case dashboardCardItemTapped + case dashboardCardContextualMenuAccessed + case dashboardCardHideTapped case mySiteTabTapped case mySiteSiteMenuShown case mySiteDashboardShown @@ -1033,6 +1035,10 @@ import Foundation return "my_site_dashboard_card_shown" case .dashboardCardItemTapped: return "my_site_dashboard_card_item_tapped" + case .dashboardCardContextualMenuAccessed: + return "my_site_dashboard_contextual_menu_accessed" + case .dashboardCardHideTapped: + return "my_site_dashboard_card_hide_tapped" case .mySiteTabTapped: return "my_site_tab_tapped" case .mySiteSiteMenuShown: diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Blaze/BlazeCardView.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Blaze/BlazeCardView.swift index 24c48cbae22e..84a6dd156149 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Blaze/BlazeCardView.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Blaze/BlazeCardView.swift @@ -126,7 +126,7 @@ extension BlazeCardView { comment: "Description for the Blaze dashboard card.") static let hideThis = NSLocalizedString("blaze.dashboard.card.menu.hide", value: "Hide this", - comment: "Title for a menu action in the context menu on the Jetpack install card.") + comment: "Title for a menu action in the context menu on the Blaze card.") } } diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Blaze/DashboardBlazeCardCell.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Blaze/DashboardBlazeCardCell.swift index fac42f823c48..9f286cb096f6 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Blaze/DashboardBlazeCardCell.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Blaze/DashboardBlazeCardCell.swift @@ -19,10 +19,12 @@ class DashboardBlazeCardCell: DashboardCollectionViewCell { } let onEllipsisTap: () -> Void = { [weak self] in + BlogDashboardAnalytics.trackContextualMenuAccessed(for: .blaze) BlazeEventsTracker.trackContextualMenuAccessed(for: .dashboardCard) } let onHideThisTap: UIActionHandler = { [weak self] _ in + BlogDashboardAnalytics.trackHideTapped(for: .blaze) BlazeEventsTracker.trackHideThisTapped(for: .dashboardCard) BlazeHelper.hideBlazeCard(for: self?.blog) } diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Posts/BlogDashboardCardFrameView.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Posts/BlogDashboardCardFrameView.swift index 90518f15ded9..542c39799b8c 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Posts/BlogDashboardCardFrameView.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Posts/BlogDashboardCardFrameView.swift @@ -25,16 +25,6 @@ class BlogDashboardCardFrameView: UIView { return topStackView }() - /// Card's icon image view - private lazy var iconImageView: UIImageView = { - let iconImageView = UIImageView(image: UIImage.gridicon(.posts, size: Constants.iconSize).withRenderingMode(.alwaysTemplate)) - iconImageView.tintColor = .label - iconImageView.frame = CGRect(x: 0, y: 0, width: Constants.iconSize.width, height: Constants.iconSize.height) - iconImageView.setContentHuggingPriority(.defaultHigh, for: .horizontal) - iconImageView.isAccessibilityElement = false - return iconImageView - }() - /// Card's title private lazy var titleLabel: UILabel = { let titleLabel = UILabel() @@ -46,24 +36,12 @@ class BlogDashboardCardFrameView: UIView { return titleLabel }() - /// Chevron displayed in case there's any action associated - private lazy var chevronImageView: UIImageView = { - let chevronImage = UIImage.gridicon(.chevronRight, size: Constants.iconSize).withRenderingMode(.alwaysTemplate) - let chevronImageView = UIImageView(image: chevronImage.imageFlippedForRightToLeftLayoutDirection()) - chevronImageView.frame = CGRect(x: 0, y: 0, width: Constants.iconSize.width, height: Constants.iconSize.height) - chevronImageView.tintColor = .listIcon - chevronImageView.setContentHuggingPriority(.defaultHigh, for: .horizontal) - chevronImageView.isAccessibilityElement = false - chevronImageView.isHidden = true - chevronImageView.setContentHuggingPriority(.defaultHigh, for: .horizontal) - return chevronImageView - }() - /// Ellipsis Button displayed on the top right corner of the view. /// Displayed only when an associated action is set private(set) lazy var ellipsisButton: UIButton = { let button = UIButton(type: .custom) - button.setImage(UIImage.gridicon(.ellipsis).imageWithTintColor(.listIcon), for: .normal) + button.setImage(UIImage(named: "more-horizontal-mobile"), for: .normal) + button.tintColor = UIColor.listIcon button.contentEdgeInsets = Constants.ellipsisButtonPadding button.isAccessibilityElement = true button.accessibilityLabel = Strings.ellipsisButtonAccessibilityLabel @@ -104,19 +82,10 @@ class BlogDashboardCardFrameView: UIView { } } - /// The icon to be displayed at the header - var icon: UIImage? { - didSet { - iconImageView.image = icon?.withRenderingMode(.alwaysTemplate) - iconImageView.isHidden = icon == nil - } - } - /// Closure to be called when anywhere in the view is tapped. /// If set, the chevron image is displayed. var onViewTap: (() -> Void)? { didSet { - updateChevronImageState() addViewTapGestureIfNeeded() } } @@ -126,10 +95,8 @@ class BlogDashboardCardFrameView: UIView { /// If set, the chevron image is displayed. var onHeaderTap: (() -> Void)? { didSet { - updateChevronImageState() addHeaderTapGestureIfNeeded() } - } /// Closure to be called when the ellipsis button is tapped.. @@ -163,11 +130,6 @@ class BlogDashboardCardFrameView: UIView { } } - override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { - super.traitCollectionDidChange(previousTraitCollection) - updateColors() - } - /// Add a subview inside the card frame func add(subview: UIView) { mainStackView.addArrangedSubview(subview) @@ -179,7 +141,7 @@ class BlogDashboardCardFrameView: UIView { headerStackView.isHidden = true buttonContainerStackView.isHidden = false - if !ellipsisButton.isHidden || !chevronImageView.isHidden { + if !ellipsisButton.isHidden { mainStackViewTrailingConstraint?.constant = -Constants.mainStackViewTrailingPadding } } @@ -228,34 +190,17 @@ class BlogDashboardCardFrameView: UIView { buttonContainerStackView.removeFromSuperview() } - private func updateColors() { - ellipsisButton.setImage(UIImage.gridicon(.ellipsis).imageWithTintColor(.listIcon), for: .normal) - } - - private func updateChevronImageState() { - chevronImageView.isHidden = onViewTap == nil && onHeaderTap == nil - assertOnTapRecognitionCorrectUsage() - } - private func updateEllipsisButtonState() { ellipsisButton.isHidden = onEllipsisButtonTap == nil let headerPadding = ellipsisButton.isHidden ? Constants.headerPaddingWithEllipsisButtonHidden : Constants.headerPaddingWithEllipsisButtonShown headerStackView.layoutMargins = headerPadding - assertOnTapRecognitionCorrectUsage() - } - - /// Only one of two types of action should be associated with the card. - /// Either ellipsis button tap, or view/header tap - private func assertOnTapRecognitionCorrectUsage() { - let bothTypesUsed = (onViewTap != nil || onHeaderTap != nil) && onEllipsisButtonTap != nil - assert(!bothTypesUsed, "Using onViewTap or onHeaderTap alongside onEllipsisButtonTap is not supported and will result in unexpected behavior.") } private func addHeaderTapGestureIfNeeded() { // Reset any previously added gesture recognizers - headerStackView.gestureRecognizers?.forEach {headerStackView.removeGestureRecognizer($0)} + headerStackView.gestureRecognizers?.forEach { headerStackView.removeGestureRecognizer($0) } // Add gesture recognizer if needed if onHeaderTap != nil { @@ -266,7 +211,7 @@ class BlogDashboardCardFrameView: UIView { private func addViewTapGestureIfNeeded() { // Reset any previously added gesture recognizers - self.gestureRecognizers?.forEach {self.removeGestureRecognizer($0)} + self.gestureRecognizers?.forEach { self.removeGestureRecognizer($0) } // Add gesture recognizer if needed if onViewTap != nil { diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Posts/DashboardPostsListCardCell.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Posts/DashboardPostsListCardCell.swift index 2dc355cd48df..0f8127af752d 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Posts/DashboardPostsListCardCell.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Posts/DashboardPostsListCardCell.swift @@ -16,7 +16,7 @@ class DashboardPostsListCardCell: UICollectionViewCell, Reusable { // MARK: Views - private var frameView: BlogDashboardCardFrameView? + private let frameView = BlogDashboardCardFrameView() lazy var tableView: UITableView = { let tableView = PostCardTableView() @@ -68,14 +68,9 @@ class DashboardPostsListCardCell: UICollectionViewCell, Reusable { } private func addSubviews() { - let frameView = BlogDashboardCardFrameView() - frameView.icon = UIImage.gridicon(.posts, size: Constants.iconSize) frameView.translatesAutoresizingMaskIntoConstraints = false - frameView.add(subview: tableView) - self.frameView = frameView - contentView.addSubview(frameView) contentView.pinSubviewToAllEdges(frameView, priority: Constants.constraintPriority) } @@ -104,23 +99,37 @@ extension DashboardPostsListCardCell { assertionFailure("Cell used with wrong card type") return } + addContextMenu(card: cardType, blog: blog) + viewModel = PostsCardViewModel(blog: blog, status: status, view: self) viewModel?.viewDidLoad() tableView.dataSource = viewModel?.diffableDataSource viewModel?.refresh() } + private func addContextMenu(card: DashboardCard, blog: Blog) { + guard FeatureFlag.personalizeHomeTab.enabled else { return } + + frameView.onEllipsisButtonTap = { + BlogDashboardAnalytics.trackContextualMenuAccessed(for: card) + } + frameView.ellipsisButton.showsMenuAsPrimaryAction = true + frameView.ellipsisButton.menu = UIMenu(title: "", options: .displayInline, children: [ + BlogDashboardHelpers.makeHideCardAction(for: card, siteID: blog.dotComID?.intValue ?? 0) + ]) + } + private func configureDraftsList(blog: Blog) { - frameView?.title = Strings.draftsTitle - frameView?.titleHint = Strings.draftsTitleHint - frameView?.onHeaderTap = { [weak self] in + frameView.title = Strings.draftsTitle + frameView.titleHint = Strings.draftsTitleHint + frameView.onHeaderTap = { [weak self] in self?.presentPostList(with: .draft) } } private func configureScheduledList(blog: Blog) { - frameView?.title = Strings.scheduledTitle - frameView?.onHeaderTap = { [weak self] in + frameView.title = Strings.scheduledTitle + frameView.onHeaderTap = { [weak self] in self?.presentPostList(with: .scheduled) } } diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Prompts/DashboardPromptsCardCell.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Prompts/DashboardPromptsCardCell.swift index 6a59bc919863..0442d14e52f6 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Prompts/DashboardPromptsCardCell.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Prompts/DashboardPromptsCardCell.swift @@ -11,12 +11,13 @@ class DashboardPromptsCardCell: UICollectionViewCell, Reusable { let frameView = BlogDashboardCardFrameView() frameView.translatesAutoresizingMaskIntoConstraints = false frameView.title = Strings.cardFrameTitle - frameView.icon = Style.frameIconImage // NOTE: Remove the logic when support for iOS 14 is dropped if #available (iOS 15.0, *) { // assign an empty closure so the button appears. - frameView.onEllipsisButtonTap = {} + frameView.onEllipsisButtonTap = { + BlogDashboardAnalytics.trackContextualMenuAccessed(for: .prompts) + } frameView.ellipsisButton.showsMenuAsPrimaryAction = true frameView.ellipsisButton.menu = contextMenu } else { @@ -24,6 +25,7 @@ class DashboardPromptsCardCell: UICollectionViewCell, Reusable { // iOS 13 doesn't support showing UIMenu programmatically. // iOS 14 doesn't support `UIDeferredMenuElement.uncached`. frameView.onEllipsisButtonTap = { [weak self] in + BlogDashboardAnalytics.trackContextualMenuAccessed(for: .prompts) self?.showMenuSheet() } } @@ -505,6 +507,7 @@ private extension DashboardPromptsCardCell { return } WPAnalytics.track(.promptsDashboardCardMenuRemove) + BlogDashboardAnalytics.trackHideTapped(for: .prompts) let service = BlogDashboardPersonalizationService(siteID: siteID) service.setEnabled(false, for: .prompts) let notice = Notice(title: Strings.promptRemovedTitle, message: Strings.promptRemovedSubtitle, feedbackType: .success, actionTitle: Strings.undoSkipTitle) { _ in diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Quick Start/DashboardQuickStartCardCell.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Quick Start/DashboardQuickStartCardCell.swift index 38a689f9bb7b..fdc9eafeed2f 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Quick Start/DashboardQuickStartCardCell.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Quick Start/DashboardQuickStartCardCell.swift @@ -51,7 +51,6 @@ final class DashboardQuickStartCardCell: UICollectionViewCell, Reusable, BlogDas fallthrough case .newSite: - cardFrameView.icon = UIImage.gridicon(.listOrdered, size: Metrics.iconSize) configureOnEllipsisButtonTap(sourceRect: cardFrameView.ellipsisButton.frame) cardFrameView.showHeader() diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Stats/DashboardStatsCardCell.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Stats/DashboardStatsCardCell.swift index 9d4e54f731f3..0b371d238a24 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Stats/DashboardStatsCardCell.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Stats/DashboardStatsCardCell.swift @@ -6,7 +6,7 @@ class DashboardStatsCardCell: UICollectionViewCell, Reusable { // MARK: Private Variables private var viewModel: DashboardStatsViewModel? - private var frameView: BlogDashboardCardFrameView? + private let frameView = BlogDashboardCardFrameView() private var nudgeView: DashboardStatsNudgeView? private var statsStackView: DashboardStatsStackView? @@ -39,11 +39,8 @@ class DashboardStatsCardCell: UICollectionViewCell, Reusable { } private func addSubviews() { - let frameView = BlogDashboardCardFrameView() frameView.title = Strings.statsTitle frameView.titleHint = Strings.statsTitleHint - frameView.icon = UIImage.gridicon(.statsAlt, size: Constants.iconSize) - self.frameView = frameView let statsStackview = DashboardStatsStackView() frameView.add(subview: statsStackview) @@ -74,11 +71,20 @@ extension DashboardStatsCardCell: BlogDashboardCardConfigurable { } private func configureCard(for blog: Blog, in viewController: UIViewController) { - - frameView?.onViewTap = { [weak self] in + frameView.onViewTap = { [weak self] in self?.showStats(for: blog, from: viewController) } + if FeatureFlag.personalizeHomeTab.enabled { + frameView.onEllipsisButtonTap = { + BlogDashboardAnalytics.trackContextualMenuAccessed(for: .todaysStats) + } + frameView.ellipsisButton.showsMenuAsPrimaryAction = true + frameView.ellipsisButton.menu = UIMenu(title: "", options: .displayInline, children: [ + BlogDashboardHelpers.makeHideCardAction(for: .todaysStats, siteID: blog.dotComID?.intValue ?? 0) + ]) + } + statsStackView?.views = viewModel?.todaysViews statsStackView?.visitors = viewModel?.todaysVisitors statsStackView?.likes = viewModel?.todaysLikes diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Helpers/BlogDashboardAnalytics.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Helpers/BlogDashboardAnalytics.swift index 53078b8fa6da..b3e90f6d86bc 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Helpers/BlogDashboardAnalytics.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Helpers/BlogDashboardAnalytics.swift @@ -30,4 +30,12 @@ class BlogDashboardAnalytics { } } } + + static func trackContextualMenuAccessed(for card: DashboardCard) { + WPAnalytics.track(.dashboardCardContextualMenuAccessed, properties: ["card": card.rawValue]) + } + + static func trackHideTapped(for card: DashboardCard) { + WPAnalytics.track(.dashboardCardHideTapped, properties: ["card": card.rawValue]) + } } diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Helpers/BlogDashboardHelpers.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Helpers/BlogDashboardHelpers.swift new file mode 100644 index 000000000000..beb295506968 --- /dev/null +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Helpers/BlogDashboardHelpers.swift @@ -0,0 +1,19 @@ +import Foundation + +struct BlogDashboardHelpers { + static func makeHideCardAction(for card: DashboardCard, siteID: Int) -> UIAction { + UIAction( + title: Strings.hideThis, + image: UIImage(systemName: "minus.circle"), + attributes: [.destructive], + handler: { _ in + BlogDashboardAnalytics.trackHideTapped(for: card) + BlogDashboardPersonalizationService(siteID: siteID) + .setEnabled(false, for: card) + }) + } + + private enum Strings { + static let hideThis = NSLocalizedString("blogDashboard.contextMenu.hideThis", value: "Hide this", comment: "Title for the context menu action that hides the dashboard card.") + } +} diff --git a/WordPress/Classes/ViewRelated/Jetpack/Install/View/JetpackRemoteInstallCardView.swift b/WordPress/Classes/ViewRelated/Jetpack/Install/View/JetpackRemoteInstallCardView.swift index 7c177bc2c21e..6260de7578f3 100644 --- a/WordPress/Classes/ViewRelated/Jetpack/Install/View/JetpackRemoteInstallCardView.swift +++ b/WordPress/Classes/ViewRelated/Jetpack/Install/View/JetpackRemoteInstallCardView.swift @@ -72,7 +72,6 @@ class JetpackRemoteInstallCardView: UIView { private lazy var cardFrameView: BlogDashboardCardFrameView = { let frameView = BlogDashboardCardFrameView() frameView.translatesAutoresizingMaskIntoConstraints = false - frameView.icon = .none frameView.onEllipsisButtonTap = {} frameView.ellipsisButton.showsMenuAsPrimaryAction = true frameView.ellipsisButton.menu = contextMenu diff --git a/WordPress/Resources/AppImages.xcassets/more-horizontal-mobile.imageset/Contents.json b/WordPress/Resources/AppImages.xcassets/more-horizontal-mobile.imageset/Contents.json new file mode 100644 index 000000000000..08a009949956 --- /dev/null +++ b/WordPress/Resources/AppImages.xcassets/more-horizontal-mobile.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "more-horizontal-mobile.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/WordPress/Resources/AppImages.xcassets/more-horizontal-mobile.imageset/more-horizontal-mobile.svg b/WordPress/Resources/AppImages.xcassets/more-horizontal-mobile.imageset/more-horizontal-mobile.svg new file mode 100644 index 000000000000..f8af22821782 --- /dev/null +++ b/WordPress/Resources/AppImages.xcassets/more-horizontal-mobile.imageset/more-horizontal-mobile.svg @@ -0,0 +1,3 @@ + + + diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index a4628f94790d..c70f5af44ce1 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -13559,6 +13559,7 @@ isa = PBXGroup; children = ( 8B15D27328009EBF0076628A /* BlogDashboardAnalytics.swift */, + 0C35FFF029CB81F700D224EB /* BlogDashboardHelpers.swift */, 8BC81D6427CFC0DA0057F790 /* BlogDashboardState.swift */, 80EF9285280D272E0064A971 /* DashboardPostsSyncManager.swift */, ); @@ -21336,6 +21337,7 @@ B538F3891EF46EC8001003D5 /* UnknownEditorViewController.swift in Sources */, 937D9A1119F838C2007B9D5F /* AccountToAccount22to23.swift in Sources */, 400A2C772217A8A0000A8A59 /* VisitsSummaryStatsRecordValue+CoreDataClass.swift in Sources */, + 0C35FFF129CB81F700D224EB /* BlogDashboardHelpers.swift in Sources */, D8212CB320AA6861008E8AE8 /* ReaderFollowAction.swift in Sources */, F5D399302541F25B0058D0AB /* SheetActions.swift in Sources */, 93F7214F271831820021A09F /* SiteStatsPinnedItemStore.swift in Sources */, @@ -24972,6 +24974,7 @@ FABB256B2602FC2C00C8785C /* InteractivePostView.swift in Sources */, FABB256C2602FC2C00C8785C /* LinearGradientView.swift in Sources */, FABB256D2602FC2C00C8785C /* WizardStep.swift in Sources */, + 0C35FFF229CB81F700D224EB /* BlogDashboardHelpers.swift in Sources */, C395FB242821FE4B00AE7C11 /* SiteDesignSection.swift in Sources */, 837B49D8283C2AE80061A657 /* BloggingPromptSettings+CoreDataClass.swift in Sources */, FABB256E2602FC2C00C8785C /* PostPostViewController.swift in Sources */, From ad1c28ca01342d02f1d9e78083e345fa48621223 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Mon, 3 Apr 2023 21:38:07 +1200 Subject: [PATCH 10/64] Add launch arguments and env vars to the Jetpack scheme --- .../xcshareddata/xcschemes/Jetpack.xcscheme | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/WordPress/WordPress.xcodeproj/xcshareddata/xcschemes/Jetpack.xcscheme b/WordPress/WordPress.xcodeproj/xcshareddata/xcschemes/Jetpack.xcscheme index 5c43dd49b30a..57b8cac72530 100644 --- a/WordPress/WordPress.xcodeproj/xcshareddata/xcschemes/Jetpack.xcscheme +++ b/WordPress/WordPress.xcodeproj/xcshareddata/xcschemes/Jetpack.xcscheme @@ -77,6 +77,56 @@ ReferencedContainer = "container:WordPress.xcodeproj"> + + + + + + + + + + + + + + + + + + + + + + + + + + Date: Mon, 3 Apr 2023 12:32:55 +0200 Subject: [PATCH 11/64] Update Gutenberg Mobile reference --- Podfile | 2 +- Podfile.lock | 202 +++++++++++++++++++++++++-------------------------- 2 files changed, 102 insertions(+), 102 deletions(-) diff --git a/Podfile b/Podfile index 9917684edaac..74f4ae93abc3 100644 --- a/Podfile +++ b/Podfile @@ -91,7 +91,7 @@ def shared_style_pods end def gutenberg_pods - gutenberg tag: 'v1.92.0' + gutenberg commit: '9329ef7ca9c1a34aaef6ea37b30887f802694474' end def gutenberg(options) diff --git a/Podfile.lock b/Podfile.lock index 141be6790017..94c0f9a73642 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -544,18 +544,18 @@ DEPENDENCIES: - AppCenter (~> 4.1) - AppCenter/Distribute (~> 4.1) - Automattic-Tracks-iOS (~> 0.13) - - boost (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/boost.podspec.json`) - - BVLinearGradient (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/BVLinearGradient.podspec.json`) + - boost (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/boost.podspec.json`) + - BVLinearGradient (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/BVLinearGradient.podspec.json`) - CocoaLumberjack/Swift (~> 3.0) - CropViewController (= 2.5.3) - Down (~> 0.6.6) - - FBLazyVector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/FBLazyVector.podspec.json`) - - FBReactNativeSpec (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json`) + - FBLazyVector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/FBLazyVector.podspec.json`) + - FBReactNativeSpec (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json`) - FSInteractiveMap (from `https://github.com/wordpress-mobile/FSInteractiveMap.git`, tag `0.2.0`) - Gifu (= 3.2.0) - - glog (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/glog.podspec.json`) + - glog (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/glog.podspec.json`) - Gridicons (~> 1.1.0) - - Gutenberg (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, tag `v1.92.0`) + - Gutenberg (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, commit `9329ef7ca9c1a34aaef6ea37b30887f802694474`) - JTAppleCalendar (~> 8.0.2) - Kanvas (~> 1.4.4) - MediaEditor (~> 1.2.1) @@ -564,49 +564,49 @@ DEPENDENCIES: - "NSURL+IDN (~> 0.4)" - OCMock (~> 3.4.3) - OHHTTPStubs/Swift (~> 9.1.0) - - RCT-Folly (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RCT-Folly.podspec.json`) - - RCTRequired (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RCTRequired.podspec.json`) - - RCTTypeSafety (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RCTTypeSafety.podspec.json`) + - RCT-Folly (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RCT-Folly.podspec.json`) + - RCTRequired (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RCTRequired.podspec.json`) + - RCTTypeSafety (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RCTTypeSafety.podspec.json`) - Reachability (= 3.2) - - React (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React.podspec.json`) - - React-bridging (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-bridging.podspec.json`) - - React-callinvoker (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-callinvoker.podspec.json`) - - React-Codegen (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-Codegen.podspec.json`) - - React-Core (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-Core.podspec.json`) - - React-CoreModules (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-CoreModules.podspec.json`) - - React-cxxreact (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-cxxreact.podspec.json`) - - React-jsi (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-jsi.podspec.json`) - - React-jsiexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-jsiexecutor.podspec.json`) - - React-jsinspector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-jsinspector.podspec.json`) - - React-logger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-logger.podspec.json`) - - react-native-blur (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-blur.podspec.json`) - - react-native-get-random-values (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-get-random-values.podspec.json`) - - react-native-keyboard-aware-scroll-view (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-keyboard-aware-scroll-view.podspec.json`) - - react-native-safe-area (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-safe-area.podspec.json`) - - react-native-safe-area-context (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-safe-area-context.podspec.json`) - - react-native-slider (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-slider.podspec.json`) - - react-native-video (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-video.podspec.json`) - - react-native-webview (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-webview.podspec.json`) - - React-perflogger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-perflogger.podspec.json`) - - React-RCTActionSheet (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTActionSheet.podspec.json`) - - React-RCTAnimation (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTAnimation.podspec.json`) - - React-RCTBlob (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTBlob.podspec.json`) - - React-RCTImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTImage.podspec.json`) - - React-RCTLinking (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTLinking.podspec.json`) - - React-RCTNetwork (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTNetwork.podspec.json`) - - React-RCTSettings (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTSettings.podspec.json`) - - React-RCTText (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTText.podspec.json`) - - React-RCTVibration (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTVibration.podspec.json`) - - React-runtimeexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-runtimeexecutor.podspec.json`) - - ReactCommon (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/ReactCommon.podspec.json`) - - RNCClipboard (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNCClipboard.podspec.json`) - - RNCMaskedView (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNCMaskedView.podspec.json`) - - RNFastImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNFastImage.podspec.json`) - - RNGestureHandler (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNGestureHandler.podspec.json`) - - RNReanimated (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNReanimated.podspec.json`) - - RNScreens (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNScreens.podspec.json`) - - RNSVG (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNSVG.podspec.json`) - - RNTAztecView (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, tag `v1.92.0`) + - React (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React.podspec.json`) + - React-bridging (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-bridging.podspec.json`) + - React-callinvoker (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-callinvoker.podspec.json`) + - React-Codegen (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-Codegen.podspec.json`) + - React-Core (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-Core.podspec.json`) + - React-CoreModules (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-CoreModules.podspec.json`) + - React-cxxreact (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-cxxreact.podspec.json`) + - React-jsi (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-jsi.podspec.json`) + - React-jsiexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-jsiexecutor.podspec.json`) + - React-jsinspector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-jsinspector.podspec.json`) + - React-logger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-logger.podspec.json`) + - react-native-blur (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-blur.podspec.json`) + - react-native-get-random-values (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-get-random-values.podspec.json`) + - react-native-keyboard-aware-scroll-view (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-keyboard-aware-scroll-view.podspec.json`) + - react-native-safe-area (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-safe-area.podspec.json`) + - react-native-safe-area-context (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-safe-area-context.podspec.json`) + - react-native-slider (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-slider.podspec.json`) + - react-native-video (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-video.podspec.json`) + - react-native-webview (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-webview.podspec.json`) + - React-perflogger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-perflogger.podspec.json`) + - React-RCTActionSheet (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTActionSheet.podspec.json`) + - React-RCTAnimation (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTAnimation.podspec.json`) + - React-RCTBlob (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTBlob.podspec.json`) + - React-RCTImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTImage.podspec.json`) + - React-RCTLinking (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTLinking.podspec.json`) + - React-RCTNetwork (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTNetwork.podspec.json`) + - React-RCTSettings (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTSettings.podspec.json`) + - React-RCTText (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTText.podspec.json`) + - React-RCTVibration (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTVibration.podspec.json`) + - React-runtimeexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-runtimeexecutor.podspec.json`) + - ReactCommon (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/ReactCommon.podspec.json`) + - RNCClipboard (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNCClipboard.podspec.json`) + - RNCMaskedView (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNCMaskedView.podspec.json`) + - RNFastImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNFastImage.podspec.json`) + - RNGestureHandler (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNGestureHandler.podspec.json`) + - RNReanimated (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNReanimated.podspec.json`) + - RNScreens (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNScreens.podspec.json`) + - RNSVG (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNSVG.podspec.json`) + - RNTAztecView (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, commit `9329ef7ca9c1a34aaef6ea37b30887f802694474`) - Starscream (= 3.0.6) - SVProgressHUD (= 2.2.5) - SwiftLint (~> 0.50) @@ -616,7 +616,7 @@ DEPENDENCIES: - WordPressShared (~> 2.0-beta) - WordPressUI (~> 1.12.5) - WPMediaPicker (~> 1.8.7) - - Yoga (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/Yoga.podspec.json`) + - Yoga (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/Yoga.podspec.json`) - ZendeskSupportSDK (= 5.3.0) - ZIPFoundation (~> 0.9.8) @@ -676,123 +676,123 @@ SPEC REPOS: EXTERNAL SOURCES: boost: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/boost.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/boost.podspec.json BVLinearGradient: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/BVLinearGradient.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/BVLinearGradient.podspec.json FBLazyVector: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/FBLazyVector.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/FBLazyVector.podspec.json FBReactNativeSpec: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json FSInteractiveMap: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 glog: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/glog.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/glog.podspec.json Gutenberg: + :commit: 9329ef7ca9c1a34aaef6ea37b30887f802694474 :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true - :tag: v1.92.0 RCT-Folly: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RCT-Folly.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RCT-Folly.podspec.json RCTRequired: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RCTRequired.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RCTRequired.podspec.json RCTTypeSafety: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RCTTypeSafety.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RCTTypeSafety.podspec.json React: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React.podspec.json React-bridging: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-bridging.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-bridging.podspec.json React-callinvoker: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-callinvoker.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-callinvoker.podspec.json React-Codegen: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-Codegen.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-Codegen.podspec.json React-Core: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-Core.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-Core.podspec.json React-CoreModules: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-CoreModules.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-CoreModules.podspec.json React-cxxreact: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-cxxreact.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-cxxreact.podspec.json React-jsi: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-jsi.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-jsi.podspec.json React-jsiexecutor: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-jsiexecutor.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-jsiexecutor.podspec.json React-jsinspector: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-jsinspector.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-jsinspector.podspec.json React-logger: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-logger.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-logger.podspec.json react-native-blur: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-blur.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-blur.podspec.json react-native-get-random-values: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-get-random-values.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-get-random-values.podspec.json react-native-keyboard-aware-scroll-view: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-keyboard-aware-scroll-view.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-keyboard-aware-scroll-view.podspec.json react-native-safe-area: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-safe-area.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-safe-area.podspec.json react-native-safe-area-context: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-safe-area-context.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-safe-area-context.podspec.json react-native-slider: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-slider.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-slider.podspec.json react-native-video: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-video.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-video.podspec.json react-native-webview: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/react-native-webview.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-webview.podspec.json React-perflogger: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-perflogger.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-perflogger.podspec.json React-RCTActionSheet: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTActionSheet.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTActionSheet.podspec.json React-RCTAnimation: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTAnimation.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTAnimation.podspec.json React-RCTBlob: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTBlob.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTBlob.podspec.json React-RCTImage: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTImage.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTImage.podspec.json React-RCTLinking: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTLinking.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTLinking.podspec.json React-RCTNetwork: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTNetwork.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTNetwork.podspec.json React-RCTSettings: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTSettings.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTSettings.podspec.json React-RCTText: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTText.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTText.podspec.json React-RCTVibration: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-RCTVibration.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTVibration.podspec.json React-runtimeexecutor: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/React-runtimeexecutor.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-runtimeexecutor.podspec.json ReactCommon: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/ReactCommon.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/ReactCommon.podspec.json RNCClipboard: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNCClipboard.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNCClipboard.podspec.json RNCMaskedView: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNCMaskedView.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNCMaskedView.podspec.json RNFastImage: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNFastImage.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNFastImage.podspec.json RNGestureHandler: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNGestureHandler.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNGestureHandler.podspec.json RNReanimated: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNReanimated.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNReanimated.podspec.json RNScreens: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNScreens.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNScreens.podspec.json RNSVG: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/RNSVG.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNSVG.podspec.json RNTAztecView: + :commit: 9329ef7ca9c1a34aaef6ea37b30887f802694474 :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true - :tag: v1.92.0 Yoga: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/Yoga.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/Yoga.podspec.json CHECKOUT OPTIONS: FSInteractiveMap: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 Gutenberg: + :commit: 9329ef7ca9c1a34aaef6ea37b30887f802694474 :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true - :tag: v1.92.0 RNTAztecView: + :commit: 9329ef7ca9c1a34aaef6ea37b30887f802694474 :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true - :tag: v1.92.0 SPEC CHECKSUMS: Alamofire: 3ec537f71edc9804815215393ae2b1a8ea33a844 @@ -896,6 +896,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: ae5b4b813d216d3bf0a148773267fff14bd51d37 -PODFILE CHECKSUM: dff86ee2eaa86838f15e66f4f797db6dc46eaf45 +PODFILE CHECKSUM: b8b753182a461d79479f6f792ce34081d92ba553 COCOAPODS: 1.11.3 From 72bd4f213bfa7ce87dff01da9aa7298bc5a78bf8 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Mon, 13 Feb 2023 12:03:43 +1100 Subject: [PATCH 12/64] Add feature flag for SDK-less Google SignIn --- WordPress/Classes/Utility/BuildInformation/FeatureFlag.swift | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/WordPress/Classes/Utility/BuildInformation/FeatureFlag.swift b/WordPress/Classes/Utility/BuildInformation/FeatureFlag.swift index eaea1b19dfbd..bc24f7567116 100644 --- a/WordPress/Classes/Utility/BuildInformation/FeatureFlag.swift +++ b/WordPress/Classes/Utility/BuildInformation/FeatureFlag.swift @@ -40,6 +40,7 @@ enum FeatureFlag: Int, CaseIterable { case siteCreationDomainPurchasing case readerUserBlocking case personalizeHomeTab + case sdkLessGoogleSignIn /// Returns a boolean indicating if the feature is enabled var enabled: Bool { @@ -128,6 +129,8 @@ enum FeatureFlag: Int, CaseIterable { return true case .personalizeHomeTab: return false + case .sdkLessGoogleSignIn: + return true } } @@ -226,6 +229,8 @@ extension FeatureFlag { return "Reader User Blocking" case .personalizeHomeTab: return "Personalize Home Tab" + case .sdkLessGoogleSignIn: + return "Sign-In with Google without the Google SDK" } } } From d50df9606e3d3f488d3ee9f9aae9f4e6acaacfad Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Mon, 13 Feb 2023 12:16:49 +1100 Subject: [PATCH 13/64] Use feature flag to drive SDK-less Google SignIn --- .../ViewRelated/NUX/WordPressAuthenticationManager.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift b/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift index 36f33f32196e..cea2dc7a2562 100644 --- a/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift +++ b/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift @@ -75,7 +75,8 @@ extension WordPressAuthenticationManager { enableSignupWithGoogle: AppConfiguration.allowSignUp, enableUnifiedAuth: true, enableUnifiedCarousel: FeatureFlag.unifiedPrologueCarousel.enabled, - enableSocialLogin: true) + enableSocialLogin: true, + googleLoginWithoutSDK: FeatureFlag.sdkLessGoogleSignIn.enabled) } private func authenticatorStyle() -> WordPressAuthenticatorStyle { From f918891de784ee2bd60af58887145d2e022a7e0c Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Tue, 21 Mar 2023 14:09:11 +1100 Subject: [PATCH 14/64] Use remote flag for SDK-less Google sign in in production --- .../App Configuration/AppDependency.swift | 5 ++++- .../Utility/BuildInformation/FeatureFlag.swift | 5 ----- .../BuildInformation/RemoteFeatureFlag.swift | 7 +++++++ .../NUX/WordPressAuthenticationManager.swift | 18 ++++++++++++++++-- WordPress/Jetpack/AppDependency.swift | 6 +++++- ...republishingNudgesViewControllerTests.swift | 5 ++++- 6 files changed, 36 insertions(+), 10 deletions(-) diff --git a/WordPress/Classes/Utility/App Configuration/AppDependency.swift b/WordPress/Classes/Utility/App Configuration/AppDependency.swift index f95d642e0225..68f640b81a16 100644 --- a/WordPress/Classes/Utility/App Configuration/AppDependency.swift +++ b/WordPress/Classes/Utility/App Configuration/AppDependency.swift @@ -5,7 +5,10 @@ import Foundation /// Make sure to keep them in sync to avoid build errors when builing the Jetpack target. @objc class AppDependency: NSObject { static func authenticationManager(windowManager: WindowManager) -> WordPressAuthenticationManager { - return WordPressAuthenticationManager(windowManager: windowManager) + return WordPressAuthenticationManager( + windowManager: windowManager, + remoteFeaturesStore: RemoteFeatureFlagStore() + ) } static func windowManager(window: UIWindow) -> WindowManager { diff --git a/WordPress/Classes/Utility/BuildInformation/FeatureFlag.swift b/WordPress/Classes/Utility/BuildInformation/FeatureFlag.swift index bc24f7567116..eaea1b19dfbd 100644 --- a/WordPress/Classes/Utility/BuildInformation/FeatureFlag.swift +++ b/WordPress/Classes/Utility/BuildInformation/FeatureFlag.swift @@ -40,7 +40,6 @@ enum FeatureFlag: Int, CaseIterable { case siteCreationDomainPurchasing case readerUserBlocking case personalizeHomeTab - case sdkLessGoogleSignIn /// Returns a boolean indicating if the feature is enabled var enabled: Bool { @@ -129,8 +128,6 @@ enum FeatureFlag: Int, CaseIterable { return true case .personalizeHomeTab: return false - case .sdkLessGoogleSignIn: - return true } } @@ -229,8 +226,6 @@ extension FeatureFlag { return "Reader User Blocking" case .personalizeHomeTab: return "Personalize Home Tab" - case .sdkLessGoogleSignIn: - return "Sign-In with Google without the Google SDK" } } } diff --git a/WordPress/Classes/Utility/BuildInformation/RemoteFeatureFlag.swift b/WordPress/Classes/Utility/BuildInformation/RemoteFeatureFlag.swift index 4ebb33a35cdc..100cea1126ec 100644 --- a/WordPress/Classes/Utility/BuildInformation/RemoteFeatureFlag.swift +++ b/WordPress/Classes/Utility/BuildInformation/RemoteFeatureFlag.swift @@ -16,6 +16,7 @@ enum RemoteFeatureFlag: Int, CaseIterable { case directDomainsPurchaseDashboardCard case pagesDashboardCard case activityLogDashboardCard + case sdkLessGoogleSignIn var defaultValue: Bool { switch self { @@ -47,6 +48,8 @@ enum RemoteFeatureFlag: Int, CaseIterable { return false case .activityLogDashboardCard: return false + case .sdkLessGoogleSignIn: + return false } } @@ -81,6 +84,8 @@ enum RemoteFeatureFlag: Int, CaseIterable { return "dashboard_card_pages" case .activityLogDashboardCard: return "dashboard_card_activity_log" + case .sdkLessGoogleSignIn: + return "google_signin_without_sdk" } } @@ -114,6 +119,8 @@ enum RemoteFeatureFlag: Int, CaseIterable { return "Pages Dashboard Card" case .activityLogDashboardCard: return "Activity Log Dashboard Card" + case .sdkLessGoogleSignIn: + return "Sign-In with Google without the Google SDK" } } diff --git a/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift b/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift index cea2dc7a2562..f92bce1dcc43 100644 --- a/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift +++ b/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift @@ -19,14 +19,18 @@ class WordPressAuthenticationManager: NSObject { private let recentSiteService: RecentSitesService + private let remoteFeaturesStore: RemoteFeatureFlagStore + init(windowManager: WindowManager, authenticationHandler: AuthenticationHandler? = nil, quickStartSettings: QuickStartSettings = QuickStartSettings(), - recentSiteService: RecentSitesService = RecentSitesService()) { + recentSiteService: RecentSitesService = RecentSitesService(), + remoteFeaturesStore: RemoteFeatureFlagStore) { self.windowManager = windowManager self.authenticationHandler = authenticationHandler self.quickStartSettings = quickStartSettings self.recentSiteService = recentSiteService + self.remoteFeaturesStore = remoteFeaturesStore } /// Support is only available to the WordPress iOS App. Our Authentication Framework doesn't have direct access. @@ -59,6 +63,16 @@ extension WordPressAuthenticationManager { // Ref https://github.com/wordpress-mobile/WordPress-iOS/pull/12332#issuecomment-521994963 let enableSignInWithApple = !(BuildConfiguration.current ~= [.a8cBranchTest, .a8cPrereleaseTesting]) + let googleLogingWithoutSDK: Bool = { + switch BuildConfiguration.current { + case .appStore: + // Rely on the remote flag in production + return RemoteFeatureFlag.sdkLessGoogleSignIn.enabled(using: remoteFeaturesStore) + case _: + return true + } + }() + return WordPressAuthenticatorConfiguration(wpcomClientId: ApiCredentials.client, wpcomSecret: ApiCredentials.secret, wpcomScheme: WPComScheme, @@ -76,7 +90,7 @@ extension WordPressAuthenticationManager { enableUnifiedAuth: true, enableUnifiedCarousel: FeatureFlag.unifiedPrologueCarousel.enabled, enableSocialLogin: true, - googleLoginWithoutSDK: FeatureFlag.sdkLessGoogleSignIn.enabled) + googleLoginWithoutSDK: googleLogingWithoutSDK) } private func authenticatorStyle() -> WordPressAuthenticatorStyle { diff --git a/WordPress/Jetpack/AppDependency.swift b/WordPress/Jetpack/AppDependency.swift index eafb824faa5a..a0a2e67395e3 100644 --- a/WordPress/Jetpack/AppDependency.swift +++ b/WordPress/Jetpack/AppDependency.swift @@ -5,7 +5,11 @@ import Foundation /// Make sure to keep them in sync to avoid build errors when builing the WordPress target. @objc class AppDependency: NSObject { static func authenticationManager(windowManager: WindowManager) -> WordPressAuthenticationManager { - return WordPressAuthenticationManager(windowManager: windowManager, authenticationHandler: JetpackAuthenticationManager()) + return WordPressAuthenticationManager( + windowManager: windowManager, + authenticationHandler: JetpackAuthenticationManager(), + remoteFeaturesStore: RemoteFeatureFlagStore() + ) } static func windowManager(window: UIWindow) -> WindowManager { diff --git a/WordPress/WordPressTest/PrepublishingNudgesViewControllerTests.swift b/WordPress/WordPressTest/PrepublishingNudgesViewControllerTests.swift index 05c05b40cde1..61a236108ecc 100644 --- a/WordPress/WordPressTest/PrepublishingNudgesViewControllerTests.swift +++ b/WordPress/WordPressTest/PrepublishingNudgesViewControllerTests.swift @@ -12,7 +12,10 @@ class PrepublishingNudgesViewControllerTests: XCTestCase { /// We need that in order to initialize the Authenticator, otherwise this test crashes /// This is because we're using the NUXButton. Ideally, that component should be extracted - WordPressAuthenticationManager(windowManager: windowManager).initializeWordPressAuthenticator() + WordPressAuthenticationManager( + windowManager: windowManager, + remoteFeaturesStore: RemoteFeatureFlagStore() + ).initializeWordPressAuthenticator() } /// Call the completion block when the "Publish" button is pressed From f467ce3ba94410c7eac033f066af3fb3fbf88c82 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Tue, 21 Mar 2023 14:16:17 +1100 Subject: [PATCH 15/64] Add entry for SDK-less Google SignIn in `RELEASE-NOTES.txt` --- RELEASE-NOTES.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 29dfa83034c5..75faba46a703 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -7,6 +7,8 @@ * [**] [internal] Refactor updating account related Core Data operations, which ususally happens during log in and out of the app. [#20394] * [***] [internal] Refactor uploading photos (from the device photo, the Free Photo library, and other sources) to the WordPress Media Library. Affected areas are where you can choose a photo and upload, including the "Media" screen, adding images to a post, updating site icon, etc. [#20322] * [**] [WordPress-only] Warns user about sites with only individual plugins not supporting core app features and offers the option to switch to the Jetpack app. [#20408] +* [**] Add a "Personalize Home Tab" button to the bottom of the Home tab that allows changing cards visibility. [#20369] +* [**] [internal] Refactored Google SignIn implementation to not use the Google SDK [#20128] 22.0 ----- From f689c49c57205a06d170d83d36ac4034973fd944 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Tue, 28 Mar 2023 22:14:48 +1100 Subject: [PATCH 16/64] Switch WordPressAuthenticator to branch with new user bugfix --- Podfile | 4 ++-- Podfile.lock | 17 +++++++++++------ .../ViewRelated/NUX/LoginEpilogueUserInfo.swift | 10 ++-------- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/Podfile b/Podfile index 780700af5f3b..f46d9bff9442 100644 --- a/Podfile +++ b/Podfile @@ -232,8 +232,8 @@ abstract_target 'Apps' do pod 'Gridicons', '~> 1.1.0' - pod 'WordPressAuthenticator', '~> 5.6-beta' - # pod 'WordPressAuthenticator', git: 'https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git', branch: 'trunk' + # pod 'WordPressAuthenticator', '~> 5.6-beta' + pod 'WordPressAuthenticator', git: 'https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git', branch: 'mokagio/social-service-without-google' # pod 'WordPressAuthenticator', git: 'https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git', commit: '' # pod 'WordPressAuthenticator', path: '../WordPressAuthenticator-iOS' diff --git a/Podfile.lock b/Podfile.lock index a0c02540c6a5..068aef9bcec7 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -611,7 +611,7 @@ DEPENDENCIES: - SVProgressHUD (= 2.2.5) - SwiftLint (~> 0.50) - WordPress-Editor-iOS (~> 1.19.8) - - WordPressAuthenticator (~> 5.6-beta) + - WordPressAuthenticator (from `https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git`, branch `mokagio/social-service-without-google`) - WordPressKit (~> 7.0.0-beta) - WordPressShared (~> 2.0-beta) - WordPressUI (~> 1.12.5) @@ -622,7 +622,7 @@ DEPENDENCIES: SPEC REPOS: https://github.com/wordpress-mobile/cocoapods-specs.git: - - WordPressAuthenticator + - WordPressShared trunk: - Alamofire - AlamofireImage @@ -661,7 +661,6 @@ SPEC REPOS: - WordPress-Aztec-iOS - WordPress-Editor-iOS - WordPressKit - - WordPressShared - WordPressUI - WPMediaPicker - wpxmlrpc @@ -778,6 +777,9 @@ EXTERNAL SOURCES: :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true :tag: v1.92.0 + WordPressAuthenticator: + :branch: mokagio/social-service-without-google + :git: https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git Yoga: :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/Yoga.podspec.json @@ -793,6 +795,9 @@ CHECKOUT OPTIONS: :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true :tag: v1.92.0 + WordPressAuthenticator: + :commit: a78ed0deb485f60606fdc3cb93716af34975e0a7 + :git: https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git SPEC CHECKSUMS: Alamofire: 3ec537f71edc9804815215393ae2b1a8ea33a844 @@ -880,9 +885,9 @@ SPEC CHECKSUMS: UIDeviceIdentifier: e6a801d25f4f178de5bdf475ffe29050d0148176 WordPress-Aztec-iOS: 7d11d598f14c82c727c08b56bd35fbeb7dafb504 WordPress-Editor-iOS: 9eb9f12f21a5209cb837908d81ffe1e31cb27345 - WordPressAuthenticator: fc22569ef113e728823418120014725a7fdee8df + WordPressAuthenticator: 51627ce18a62d29f71c9d01dc1e54b3c077fcc7a WordPressKit: a161c49306369cfa22c648866cee5aba16d7cbac - WordPressShared: 0aa459e5257a77184db87805a998f447443c9706 + WordPressShared: 8e59bc8cec256f54a7c4cc6c94911adc2a9a65d2 WordPressUI: c5be816f6c7b3392224ac21de9e521e89fa108ac WPMediaPicker: 0d45dfd7b3c5651c5236ffd48c1b0b2f60a2d5d2 wpxmlrpc: 68db063041e85d186db21f674adf08d9c70627fd @@ -896,6 +901,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: ae5b4b813d216d3bf0a148773267fff14bd51d37 -PODFILE CHECKSUM: 63504603fd92b4077b1a9556356336a69e571422 +PODFILE CHECKSUM: abeb64ef7e2c2dbe3f48ce51f80e9371f2dfc2cd COCOAPODS: 1.11.3 diff --git a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift index 203a26e14aa5..f2bb616004fa 100644 --- a/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift +++ b/WordPress/Classes/ViewRelated/NUX/LoginEpilogueUserInfo.swift @@ -49,13 +49,7 @@ extension LoginEpilogueUserInfo { /// Updates the Epilogue properties, given a SocialService instance. /// mutating func update(with service: SocialService) { - switch service { - case .google(let user): - fullName = user.profile?.name ?? String() - email = user.profile?.email ?? String() - case .apple(let user): - fullName = user.fullName - email = user.email - } + fullName = service.user.fullName + email = service.user.email } } From bbf56c2c0b257599ecb29716e1fa6ea2f8c042aa Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Mon, 3 Apr 2023 13:47:28 +1000 Subject: [PATCH 17/64] Point WordPressAuthenticator to stable version 6.0.0 --- Podfile | 4 ++-- Podfile.lock | 15 +++++---------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/Podfile b/Podfile index f46d9bff9442..56dfd24a01a6 100644 --- a/Podfile +++ b/Podfile @@ -232,8 +232,8 @@ abstract_target 'Apps' do pod 'Gridicons', '~> 1.1.0' - # pod 'WordPressAuthenticator', '~> 5.6-beta' - pod 'WordPressAuthenticator', git: 'https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git', branch: 'mokagio/social-service-without-google' + pod 'WordPressAuthenticator', '~> 6.0-beta' + # pod 'WordPressAuthenticator', git: 'https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git', branch: '' # pod 'WordPressAuthenticator', git: 'https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git', commit: '' # pod 'WordPressAuthenticator', path: '../WordPressAuthenticator-iOS' diff --git a/Podfile.lock b/Podfile.lock index 068aef9bcec7..5e7a1bad276f 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -503,7 +503,7 @@ PODS: - WordPress-Aztec-iOS (1.19.8) - WordPress-Editor-iOS (1.19.8): - WordPress-Aztec-iOS (= 1.19.8) - - WordPressAuthenticator (5.7.0): + - WordPressAuthenticator (6.0.0): - GoogleSignIn (~> 6.0.1) - Gridicons (~> 1.0) - "NSURL+IDN (= 0.4)" @@ -611,7 +611,7 @@ DEPENDENCIES: - SVProgressHUD (= 2.2.5) - SwiftLint (~> 0.50) - WordPress-Editor-iOS (~> 1.19.8) - - WordPressAuthenticator (from `https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git`, branch `mokagio/social-service-without-google`) + - WordPressAuthenticator (~> 6.0-beta) - WordPressKit (~> 7.0.0-beta) - WordPressShared (~> 2.0-beta) - WordPressUI (~> 1.12.5) @@ -660,6 +660,7 @@ SPEC REPOS: - UIDeviceIdentifier - WordPress-Aztec-iOS - WordPress-Editor-iOS + - WordPressAuthenticator - WordPressKit - WordPressUI - WPMediaPicker @@ -777,9 +778,6 @@ EXTERNAL SOURCES: :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true :tag: v1.92.0 - WordPressAuthenticator: - :branch: mokagio/social-service-without-google - :git: https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git Yoga: :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.92.0/third-party-podspecs/Yoga.podspec.json @@ -795,9 +793,6 @@ CHECKOUT OPTIONS: :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true :tag: v1.92.0 - WordPressAuthenticator: - :commit: a78ed0deb485f60606fdc3cb93716af34975e0a7 - :git: https://github.com/wordpress-mobile/WordPressAuthenticator-iOS.git SPEC CHECKSUMS: Alamofire: 3ec537f71edc9804815215393ae2b1a8ea33a844 @@ -885,7 +880,7 @@ SPEC CHECKSUMS: UIDeviceIdentifier: e6a801d25f4f178de5bdf475ffe29050d0148176 WordPress-Aztec-iOS: 7d11d598f14c82c727c08b56bd35fbeb7dafb504 WordPress-Editor-iOS: 9eb9f12f21a5209cb837908d81ffe1e31cb27345 - WordPressAuthenticator: 51627ce18a62d29f71c9d01dc1e54b3c077fcc7a + WordPressAuthenticator: b93b797eae278f7cda42693a652329173f1d5423 WordPressKit: a161c49306369cfa22c648866cee5aba16d7cbac WordPressShared: 8e59bc8cec256f54a7c4cc6c94911adc2a9a65d2 WordPressUI: c5be816f6c7b3392224ac21de9e521e89fa108ac @@ -901,6 +896,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: ae5b4b813d216d3bf0a148773267fff14bd51d37 -PODFILE CHECKSUM: abeb64ef7e2c2dbe3f48ce51f80e9371f2dfc2cd +PODFILE CHECKSUM: e8074cd059cc2018e1e491754ebaa6d098c5432e COCOAPODS: 1.11.3 From 3fee26bf97e9087131e0a7b61e46f75a0a1b94bc Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Mon, 3 Apr 2023 20:48:48 +1000 Subject: [PATCH 18/64] Use `default` instead of `case _` in `googleLogingWithoutSDK` --- .../ViewRelated/NUX/WordPressAuthenticationManager.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift b/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift index f92bce1dcc43..c919fccb2d84 100644 --- a/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift +++ b/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift @@ -68,7 +68,7 @@ extension WordPressAuthenticationManager { case .appStore: // Rely on the remote flag in production return RemoteFeatureFlag.sdkLessGoogleSignIn.enabled(using: remoteFeaturesStore) - case _: + default: return true } }() From 06e2d26794bd84ee51ae55f27f65bcaf35469623 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Mon, 3 Apr 2023 21:01:44 +1000 Subject: [PATCH 19/64] =?UTF-8?q?Replace=20all=20`case=20=5F:`=20with=20`d?= =?UTF-8?q?efault:`=20=E2=80=93=20There=20was=20only=20one?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit While `case _` works, `default` is the recommended syntax. See conversation at https://github.com/wordpress-mobile/WordPress-iOS/pull/20128#discussion_r1155616461 --- WordPress/UITestsFoundation/XCTestCase+Utils.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/UITestsFoundation/XCTestCase+Utils.swift b/WordPress/UITestsFoundation/XCTestCase+Utils.swift index 3eb24460f615..f4ca321069d4 100644 --- a/WordPress/UITestsFoundation/XCTestCase+Utils.swift +++ b/WordPress/UITestsFoundation/XCTestCase+Utils.swift @@ -12,7 +12,7 @@ public extension XCTestCase { switch app.state { case .unknown, .notRunning: app.launch() - case _: + default: break } From b7cb2d5015f31c0dac9bd4febc52a26d5a81a551 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Tue, 4 Apr 2023 10:39:42 +1200 Subject: [PATCH 20/64] Remove an unused compiler condition The compiler condition was for checking if compiling on xcode 11 or 10. Neither was used now. --- config/SDKVersions.xcconfig | 7 ------- 1 file changed, 7 deletions(-) diff --git a/config/SDKVersions.xcconfig b/config/SDKVersions.xcconfig index 0a7ce8b64085..c22cba7299fe 100644 --- a/config/SDKVersions.xcconfig +++ b/config/SDKVersions.xcconfig @@ -1,10 +1,3 @@ -_WP_IOS_130000 = XCODE11 -_WP_IOS_120000 = XCODE10 - -WP_IOS_SDK = $(_WP_IOS_$(SDK_VERSION_MAJOR)) - -SWIFT_ACTIVE_COMPILATION_CONDITIONS = $(inherited) $(WP_IOS_SDK) - // TODO: Move to dedicated file WARNING_CFLAGS = -Wno-nullability-completeness IPHONEOS_DEPLOYMENT_TARGET = 14.0 From 8586fe4ab90c5601f65c1b1fc4f22429ccdbc196 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Tue, 4 Apr 2023 11:07:37 +1200 Subject: [PATCH 21/64] Rename SDKVersions.xcconfig to Common.xcconfig --- WordPress/WordPress.xcodeproj/project.pbxproj | 4 ++-- config/{SDKVersions.xcconfig => Common.xcconfig} | 1 - config/WordPress.alpha.xcconfig | 2 +- config/WordPress.debug.xcconfig | 2 +- config/WordPress.internal.xcconfig | 2 +- config/WordPress.release.xcconfig | 2 +- 6 files changed, 6 insertions(+), 7 deletions(-) rename config/{SDKVersions.xcconfig => Common.xcconfig} (71%) diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index c70f5af44ce1..1d71e9188620 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -7701,7 +7701,7 @@ 98F537A822496D0D00B334F9 /* SiteStatsTableHeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SiteStatsTableHeaderView.xib; sourceTree = ""; }; 98F93181239AF64800E4E96E /* ThisWeekWidgetStats.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThisWeekWidgetStats.swift; sourceTree = ""; }; 98F9FB2D270282C100ADF552 /* CommentModerationBar.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CommentModerationBar.xib; sourceTree = ""; }; - 98FB6E9F23074CE5002DDC8D /* SDKVersions.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = SDKVersions.xcconfig; sourceTree = ""; }; + 98FB6E9F23074CE5002DDC8D /* Common.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Common.xcconfig; sourceTree = ""; }; 98FBA05426B228CB004E610A /* WordPress 129.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "WordPress 129.xcdatamodel"; sourceTree = ""; }; 98FCFC212231DF43006ECDD4 /* PostStatsTitleCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostStatsTitleCell.swift; sourceTree = ""; }; 98FCFC222231DF43006ECDD4 /* PostStatsTitleCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PostStatsTitleCell.xib; sourceTree = ""; }; @@ -16674,7 +16674,7 @@ F14B5F6F208E648200439554 /* config */ = { isa = PBXGroup; children = ( - 98FB6E9F23074CE5002DDC8D /* SDKVersions.xcconfig */, + 98FB6E9F23074CE5002DDC8D /* Common.xcconfig */, F14B5F75208E64F900439554 /* Version.internal.xcconfig */, F14B5F74208E64F900439554 /* Version.public.xcconfig */, F14B5F70208E648200439554 /* WordPress.debug.xcconfig */, diff --git a/config/SDKVersions.xcconfig b/config/Common.xcconfig similarity index 71% rename from config/SDKVersions.xcconfig rename to config/Common.xcconfig index c22cba7299fe..a67d292bb943 100644 --- a/config/SDKVersions.xcconfig +++ b/config/Common.xcconfig @@ -1,3 +1,2 @@ -// TODO: Move to dedicated file WARNING_CFLAGS = -Wno-nullability-completeness IPHONEOS_DEPLOYMENT_TARGET = 14.0 diff --git a/config/WordPress.alpha.xcconfig b/config/WordPress.alpha.xcconfig index 4f0b0136f017..32f10f38250f 100644 --- a/config/WordPress.alpha.xcconfig +++ b/config/WordPress.alpha.xcconfig @@ -1,4 +1,4 @@ #include "Version.internal.xcconfig" -#include "SDKVersions.xcconfig" +#include "Common.xcconfig" BUILD_SCHEME=WordPress Alpha diff --git a/config/WordPress.debug.xcconfig b/config/WordPress.debug.xcconfig index 858da4f32ed0..9cfb95bd215e 100644 --- a/config/WordPress.debug.xcconfig +++ b/config/WordPress.debug.xcconfig @@ -1,4 +1,4 @@ #include "Version.internal.xcconfig" -#include "SDKVersions.xcconfig" +#include "Common.xcconfig" BUILD_SCHEME=WordPress diff --git a/config/WordPress.internal.xcconfig b/config/WordPress.internal.xcconfig index 57236f6fa8f0..7c2227c1b64c 100644 --- a/config/WordPress.internal.xcconfig +++ b/config/WordPress.internal.xcconfig @@ -1,4 +1,4 @@ #include "Version.internal.xcconfig" -#include "SDKVersions.xcconfig" +#include "Common.xcconfig" BUILD_SCHEME=WordPress Internal diff --git a/config/WordPress.release.xcconfig b/config/WordPress.release.xcconfig index 53e80613a466..b858fa076d35 100644 --- a/config/WordPress.release.xcconfig +++ b/config/WordPress.release.xcconfig @@ -1,4 +1,4 @@ #include "Version.public.xcconfig" -#include "SDKVersions.xcconfig" +#include "Common.xcconfig" BUILD_SCHEME=WordPress From b0c0942781e51e1fcfe0be81179757705e48869d Mon Sep 17 00:00:00 2001 From: Tony Li Date: Tue, 4 Apr 2023 11:25:04 +1200 Subject: [PATCH 22/64] Show warnings for unused function or block parameters --- config/Common.xcconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/config/Common.xcconfig b/config/Common.xcconfig index a67d292bb943..b1dedffcad96 100644 --- a/config/Common.xcconfig +++ b/config/Common.xcconfig @@ -1,2 +1,3 @@ +GCC_WARN_UNUSED_PARAMETER = YES WARNING_CFLAGS = -Wno-nullability-completeness IPHONEOS_DEPLOYMENT_TARGET = 14.0 From 52b71f9a2e03c20a1127988a46ea8cc1a36754a3 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Tue, 4 Apr 2023 11:25:25 +1200 Subject: [PATCH 23/64] Address unused parameter warnings --- .../UIViewController+RemoveQuickStart.m | 8 +++---- WordPress/Classes/Services/BlogService.m | 4 ++-- WordPress/Classes/Services/CommentService.m | 4 ++-- WordPress/Classes/Services/MediaService.m | 6 ++--- WordPress/Classes/Services/PostService.m | 2 +- .../Classes/Services/ReaderSiteService.m | 4 ++-- .../Classes/Services/ReaderTopicService.m | 10 ++++---- WordPress/Classes/Services/ThemeService.m | 12 +++++----- WordPress/Classes/Utility/LocationService.m | 2 +- WordPress/Classes/Utility/ReachabilityUtils.m | 4 ++-- .../Classes/Utility/UIAlertControllerProxy.m | 2 +- .../Classes/Utility/WPAuthTokenIssueSolver.m | 6 ++--- WordPress/Classes/Utility/WPAvatarSource.m | 2 +- WordPress/Classes/Utility/WPError.m | 4 ++-- .../Classes/Utility/WPWebViewController.m | 2 +- .../Blog Details/BlogDetailsViewController.m | 4 ++-- .../Blog/Blog List/BlogListViewController.m | 18 +++++++------- .../Blog/SharingAuthorizationHelper.m | 4 ++-- .../Blog/SharingConnectionsViewController.m | 2 +- .../Blog/SharingDetailViewController.m | 2 +- .../ViewRelated/Blog/SharingViewController.m | 4 ++-- .../RelatedPostsSettingsViewController.m | 2 +- .../SiteSettingsViewController.m | 6 ++--- .../Comments/CommentsViewController.m | 8 +++---- .../Comments/EditCommentViewController.m | 2 +- .../Activity Logs/ActivityLogViewController.m | 4 ++-- .../Media/WPAndDeviceMediaLibraryDataSource.m | 2 +- .../MenuItemAbstractPostsViewController.m | 8 +++---- .../Menus/MenuItemCategoriesViewController.m | 4 ++-- .../Menus/MenuItemTagsViewController.m | 10 ++++---- .../Menus/MenuItemsViewController.m | 2 +- .../ViewRelated/Menus/MenusViewController.m | 24 +++++++++---------- .../Post/FeaturedImageViewController.m | 2 +- .../Post/PostSettingsViewController.m | 8 +++---- .../Comments/ReaderCommentsViewController.m | 8 +++---- .../Reader/WPImageViewController.m | 2 +- .../ViewRelated/Stats/StatsViewController.m | 2 +- .../Suggestions/SuggestionsTableView.m | 2 +- .../Classes/ViewRelated/Views/WPAnimatedBox.m | 4 ++-- .../TextBundleWrapper.m | 4 ++-- 40 files changed, 105 insertions(+), 105 deletions(-) diff --git a/WordPress/Classes/Categories/UIViewController+RemoveQuickStart.m b/WordPress/Classes/Categories/UIViewController+RemoveQuickStart.m index 0a492f7f831e..f4edb6f2d68b 100644 --- a/WordPress/Classes/Categories/UIViewController+RemoveQuickStart.m +++ b/WordPress/Classes/Categories/UIViewController+RemoveQuickStart.m @@ -14,11 +14,11 @@ - (void)removeQuickStartFromBlog:(Blog *)blog sourceView:(UIView *)sourceView so NSString *cancelTitle = NSLocalizedString(@"Cancel", @"Cancel button"); UIAlertController *removeConfirmation = [UIAlertController alertControllerWithTitle:removeTitle message:removeMessage preferredStyle:UIAlertControllerStyleAlert]; - [removeConfirmation addCancelActionWithTitle:cancelTitle handler:^(UIAlertAction * _Nonnull action) { + [removeConfirmation addCancelActionWithTitle:cancelTitle handler:^(UIAlertAction * _Nonnull __unused action) { [WPAnalytics trackQuickStartStat:WPAnalyticsStatQuickStartRemoveDialogButtonCancelTapped blog: blog]; [NoticesDispatch unlock]; }]; - [removeConfirmation addDefaultActionWithTitle:confirmationTitle handler:^(UIAlertAction * _Nonnull action) { + [removeConfirmation addDefaultActionWithTitle:confirmationTitle handler:^(UIAlertAction * _Nonnull __unused action) { [WPAnalytics trackQuickStartStat:WPAnalyticsStatQuickStartRemoveDialogButtonRemoveTapped blog: blog]; [[QuickStartTourGuide shared] removeFrom:blog]; [NoticesDispatch unlock]; @@ -27,10 +27,10 @@ - (void)removeQuickStartFromBlog:(Blog *)blog sourceView:(UIView *)sourceView so UIAlertController *removeSheet = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet]; removeSheet.popoverPresentationController.sourceView = sourceView; removeSheet.popoverPresentationController.sourceRect = sourceRect; - [removeSheet addDestructiveActionWithTitle:removeTitle handler:^(UIAlertAction * _Nonnull action) { + [removeSheet addDestructiveActionWithTitle:removeTitle handler:^(UIAlertAction * _Nonnull __unused action) { [self presentViewController:removeConfirmation animated:YES completion:nil]; }]; - [removeSheet addCancelActionWithTitle:cancelTitle handler:^(UIAlertAction * _Nonnull action) { + [removeSheet addCancelActionWithTitle:cancelTitle handler:^(UIAlertAction * _Nonnull __unused action) { [NoticesDispatch unlock]; }]; diff --git a/WordPress/Classes/Services/BlogService.m b/WordPress/Classes/Services/BlogService.m index ecd70f84cafd..b7b1552103a6 100644 --- a/WordPress/Classes/Services/BlogService.m +++ b/WordPress/Classes/Services/BlogService.m @@ -181,7 +181,7 @@ - (void)syncBlogAndAllMetadata:(Blog *)blog completionHandler:(void (^)(void))co dispatch_group_enter(syncGroup); [editorService syncEditorSettingsForBlog:blog success:^{ dispatch_group_leave(syncGroup); - } failure:^(NSError * _Nonnull error) { + } failure:^(NSError * _Nonnull __unused error) { DDLogError(@"Failed to sync Editor settings"); dispatch_group_leave(syncGroup); }]; @@ -401,7 +401,7 @@ - (void)associateSyncedBlogsToJetpackAccount:(WPAccount *)account NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass([Blog class])]; request.predicate = [NSPredicate predicateWithFormat:@"account = NULL"]; NSArray *blogs = [context executeFetchRequest:request error:nil]; - blogs = [blogs filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) { + blogs = [blogs filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary * __unused bindings) { Blog *blog = (Blog *)evaluatedObject; NSNumber *jetpackBlogID = blog.jetpack.siteID; return jetpackBlogID && [accountBlogIDs containsObject:jetpackBlogID]; diff --git a/WordPress/Classes/Services/CommentService.m b/WordPress/Classes/Services/CommentService.m index e65af727da46..07055a1fe203 100644 --- a/WordPress/Classes/Services/CommentService.m +++ b/WordPress/Classes/Services/CommentService.m @@ -778,7 +778,7 @@ - (void)replyToCommentWithID:(NSNumber *)commentID CommentServiceRemoteREST *remote = [self restRemoteForSite:siteID]; [remote replyToCommentWithID:commentID content:content - success:^(RemoteComment *comment){ + success:^(RemoteComment * __unused comment){ if (success){ success(); } @@ -946,7 +946,7 @@ - (void)moderateComment:(Comment *)comment id remote = [self remoteForComment:comment]; RemoteComment *remoteComment = [self remoteCommentWithComment:comment]; [remote moderateComment:remoteComment - success:^(RemoteComment *comment) { + success:^(RemoteComment * __unused comment) { if (success) { success(); } diff --git a/WordPress/Classes/Services/MediaService.m b/WordPress/Classes/Services/MediaService.m index dddbc477eb48..bc79591884e7 100644 --- a/WordPress/Classes/Services/MediaService.m +++ b/WordPress/Classes/Services/MediaService.m @@ -256,7 +256,7 @@ - (void)updateMedia:(NSArray *)mediaObjects // This effectively ignores any errors presented [self updateMedia:media success:^{ individualOperationCompletion(true); - } failure:^(NSError *error) { + } failure:^(NSError * __unused error) { individualOperationCompletion(false); }]; } @@ -367,7 +367,7 @@ - (void)deleteMedia:(nonnull NSArray *)mediaObjects dispatch_group_t group = dispatch_group_create(); - [mediaObjects enumerateObjectsUsingBlock:^(Media *media, NSUInteger idx, BOOL *stop) { + [mediaObjects enumerateObjectsUsingBlock:^(Media *media, NSUInteger __unused idx, BOOL * __unused stop) { dispatch_group_enter(group); [self deleteMedia:media success:^{ currentProgress.completedUnitCount++; @@ -375,7 +375,7 @@ - (void)deleteMedia:(nonnull NSArray *)mediaObjects progress(currentProgress); } dispatch_group_leave(group); - } failure:^(NSError *error) { + } failure:^(NSError * __unused error) { dispatch_group_leave(group); }]; }]; diff --git a/WordPress/Classes/Services/PostService.m b/WordPress/Classes/Services/PostService.m index d822badc24b5..f74d56ab6476 100644 --- a/WordPress/Classes/Services/PostService.m +++ b/WordPress/Classes/Services/PostService.m @@ -305,7 +305,7 @@ - (AutosaveFailureBlock)wrappedAutosaveFailureBlock:(AbstractPost *)post failure - (AutosaveSuccessBlock)wrappedAutosaveSuccessBlock:(NSManagedObjectID *)postObjectID success:(void (^)(AbstractPost *post, NSString *previewURL))success { - return ^(RemotePost *post, NSString *previewURL) { + return ^(RemotePost *__unused post, NSString *previewURL) { [self.managedObjectContext performBlock:^{ AbstractPost *postInContext = (AbstractPost *)[self.managedObjectContext existingObjectWithID:postObjectID error:nil]; if (postInContext) { diff --git a/WordPress/Classes/Services/ReaderSiteService.m b/WordPress/Classes/Services/ReaderSiteService.m index 7127e1513feb..c34ff8a009a5 100644 --- a/WordPress/Classes/Services/ReaderSiteService.m +++ b/WordPress/Classes/Services/ReaderSiteService.m @@ -186,7 +186,7 @@ - (void)fetchTopicServiceWithID:(NSUInteger)siteID success:(void(^)(void))succes ReaderTopicService *service = [[ReaderTopicService alloc] initWithCoreDataStack:self.coreDataStack]; [service siteTopicForSiteWithID:@(siteID) isFeed:false - success:^(NSManagedObjectID *objectID, BOOL isFollowing) { + success:^(NSManagedObjectID * __unused objectID, BOOL __unused isFollowing) { if (success) { success(); } @@ -224,7 +224,7 @@ - (void)followExistingSiteByURL:(NSURL *)siteURL success:(void (^)(void))success } else { [self followSiteAtURL:[siteURL absoluteString] success:success failure:failure]; } - } failure:^(NSError *error) { + } failure:^(NSError * __unused error) { DDLogInfo(@"Could not find site at URL: %@", siteURL); [self followSiteAtURL:[siteURL absoluteString] success:success failure:failure]; }]; diff --git a/WordPress/Classes/Services/ReaderTopicService.m b/WordPress/Classes/Services/ReaderTopicService.m index 6d30ada5c776..574b8fc07ded 100644 --- a/WordPress/Classes/Services/ReaderTopicService.m +++ b/WordPress/Classes/Services/ReaderTopicService.m @@ -216,7 +216,7 @@ - (void)deleteTopic:(ReaderAbstractTopic *)topic - (void)preserveSavedPostsFromTopic:(ReaderAbstractTopic *)topic { - [topic.posts enumerateObjectsUsingBlock:^(ReaderPost * _Nonnull post, NSUInteger idx, BOOL * _Nonnull stop) { + [topic.posts enumerateObjectsUsingBlock:^(ReaderPost * _Nonnull post, NSUInteger __unused idx, BOOL * _Nonnull __unused stop) { if (post.isSavedForLater) { DDLogInfo(@"Preserving saved post: %@", post.titleForDisplay); post.topic = nil; @@ -295,7 +295,7 @@ - (void)unfollowTag:(ReaderTagTopic *)topic withSuccess:(void (^)(void))success return; } - [remoteService unfollowTopicWithSlug:slug withSuccess:^(NSNumber *topicID) { + [remoteService unfollowTopicWithSlug:slug withSuccess:^(NSNumber * __unused topicID) { successBlock(); } failure:^(NSError *error) { if (failure) { @@ -345,7 +345,7 @@ - (void)followTagWithSlug:(NSString *)slug withSuccess:(void (^)(void))success f } ReaderTopicServiceRemote *remoteService = [[ReaderTopicServiceRemote alloc] initWithWordPressComRestApi:[self apiForRequest]]; - [remoteService followTopicWithSlug:slug withSuccess:^(NSNumber *topicID) { + [remoteService followTopicWithSlug:slug withSuccess:^(NSNumber * __unused topicID) { successBlock(); } failure:^(NSError *error) { if (failure) { @@ -375,7 +375,7 @@ - (void)toggleFollowingForTag:(ReaderTagTopic *)tagTopic success:(void (^)(void) BOOL oldShowInMenuValue = topic.showInMenu; // Optimistically update and save - [self.coreDataStack performAndSaveUsingBlock:^(NSManagedObjectContext *context) { + [self.coreDataStack performAndSaveUsingBlock:^(NSManagedObjectContext * __unused context) { ReaderTagTopic *topicInContext = (ReaderTagTopic *)[self.coreDataStack.mainContext existingObjectWithID:tagTopic.objectID error:nil]; topicInContext.following = !oldFollowingValue; if (topicInContext.following) { @@ -386,7 +386,7 @@ - (void)toggleFollowingForTag:(ReaderTagTopic *)tagTopic success:(void (^)(void) // Define failure block void (^failureBlock)(NSError *error) = ^void(NSError *error) { // Revert changes on failure - [self.coreDataStack performAndSaveUsingBlock:^(NSManagedObjectContext *context) { + [self.coreDataStack performAndSaveUsingBlock:^(NSManagedObjectContext * __unused context) { ReaderTagTopic *topicInContext = (ReaderTagTopic *)[self.coreDataStack.mainContext existingObjectWithID:tagTopic.objectID error:nil]; topicInContext.following = oldFollowingValue; topicInContext.showInMenu = oldShowInMenuValue; diff --git a/WordPress/Classes/Services/ThemeService.m b/WordPress/Classes/Services/ThemeService.m index 86fc72f8ed02..de828dc7464d 100644 --- a/WordPress/Classes/Services/ThemeService.m +++ b/WordPress/Classes/Services/ThemeService.m @@ -325,7 +325,7 @@ - (NSProgress *)activateTheme:(Theme *)theme NSString *themeIdWithWPComSuffix = [ThemeIdHelper themeIdWithWPComSuffix:theme.themeId]; return [remote installThemeId:themeIdWithWPComSuffix forBlogId:[blog dotComID] - success:^(RemoteTheme *remoteTheme) { + success:^(RemoteTheme * __unused remoteTheme) { [self activateThemeId:themeIdWithWPComSuffix forBlog:blog success:^(){ @@ -334,7 +334,7 @@ - (NSProgress *)activateTheme:(Theme *)theme success:success]; } failure:failure]; - } failure:^(NSError *error) { + } failure:^(NSError * __unused error) { // There's no way to know from the WP.com theme list if the theme was already // installed, BUT trying to install an already installed theme returns an error, // so regardless we are trying to activate. Calypso does this same thing. @@ -366,7 +366,7 @@ - (NSProgress *)activateThemeId:(NSString *)themeId return [remote activateThemeId:themeId forBlogId:[blog dotComID] - success:^(RemoteTheme *remoteTheme) { + success:^(RemoteTheme * __unused remoteTheme) { if (success) { success(); } @@ -432,11 +432,11 @@ - (NSProgress *)installTheme:(Theme *)theme NSString *themeIdWithWPComSuffix = [ThemeIdHelper themeIdWithWPComSuffix:theme.themeId]; return [remote installThemeId:themeIdWithWPComSuffix forBlogId:[blog dotComID] - success:^(RemoteTheme *remoteTheme) { + success:^(RemoteTheme * __unused remoteTheme) { if (success) { success(); } - } failure:^(NSError *error) { + } failure:^(NSError * __unused error) { // Since installing a previously installed theme will fail, but there is no // way of knowing if it failed because of that or if the theme was previously installed, // I'm going to go ahead and call success. Calypso does this same thing. I'm sorry. @@ -544,7 +544,7 @@ - (Theme *)themeFromRemoteTheme:(RemoteTheme *)remoteTheme NSMutableArray *themes = [[NSMutableArray alloc] initWithCapacity:remoteThemes.count]; - [remoteThemes enumerateObjectsUsingBlock:^(RemoteTheme *remoteTheme, NSUInteger idx, BOOL *stop) { + [remoteThemes enumerateObjectsUsingBlock:^(RemoteTheme *remoteTheme, NSUInteger __unused idx, BOOL * __unused stop) { NSAssert([remoteTheme isKindOfClass:[RemoteTheme class]], @"Expected a remote theme."); diff --git a/WordPress/Classes/Utility/LocationService.m b/WordPress/Classes/Utility/LocationService.m index a1624197bbea..0510b4114e88 100644 --- a/WordPress/Classes/Utility/LocationService.m +++ b/WordPress/Classes/Utility/LocationService.m @@ -241,7 +241,7 @@ - (void)showAlertForLocationError:(NSError *)error [alertController addAction:okAction]; if (otherButtonTitle) { - UIAlertAction *otherAction = [UIAlertAction actionWithTitle:otherButtonTitle style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { + UIAlertAction *otherAction = [UIAlertAction actionWithTitle:otherButtonTitle style:UIAlertActionStyleDefault handler:^(UIAlertAction * __unused action) { NSURL *settingsURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; [[UIApplication sharedApplication] openURL:settingsURL options:nil completionHandler:nil]; }]; diff --git a/WordPress/Classes/Utility/ReachabilityUtils.m b/WordPress/Classes/Utility/ReachabilityUtils.m index e1b25a5d276b..150555ce003e 100644 --- a/WordPress/Classes/Utility/ReachabilityUtils.m +++ b/WordPress/Classes/Utility/ReachabilityUtils.m @@ -38,12 +38,12 @@ - (void)show message:message preferredStyle:UIAlertControllerStyleAlert]; - [alertController addCancelActionWithTitle:NSLocalizedString(@"OK", @"") handler:^(UIAlertAction *action) { + [alertController addCancelActionWithTitle:NSLocalizedString(@"OK", @"") handler:^(UIAlertAction * __unused action) { __currentReachabilityAlert = nil; }]; if (self.retryBlock) { - [alertController addDefaultActionWithTitle:NSLocalizedString(@"Retry?", @"") handler:^(UIAlertAction *action) { + [alertController addDefaultActionWithTitle:NSLocalizedString(@"Retry?", @"") handler:^(UIAlertAction * __unused action) { self.retryBlock(); __currentReachabilityAlert = nil; }]; diff --git a/WordPress/Classes/Utility/UIAlertControllerProxy.m b/WordPress/Classes/Utility/UIAlertControllerProxy.m index cce289b10ea6..c6aea284b3f4 100644 --- a/WordPress/Classes/Utility/UIAlertControllerProxy.m +++ b/WordPress/Classes/Utility/UIAlertControllerProxy.m @@ -15,7 +15,7 @@ - (UIAlertController *)showWithTitle:(NSString *)title message:message preferredStyle:UIAlertControllerStyleAlert]; - void (^handler)(UIAlertAction *) = ^(UIAlertAction *action) { + void (^handler)(UIAlertAction *) = ^(UIAlertAction * __unused action) { if (!tapBlock) { return; } diff --git a/WordPress/Classes/Utility/WPAuthTokenIssueSolver.m b/WordPress/Classes/Utility/WPAuthTokenIssueSolver.m index 9963461661b1..2752723adb09 100644 --- a/WordPress/Classes/Utility/WPAuthTokenIssueSolver.m +++ b/WordPress/Classes/Utility/WPAuthTokenIssueSolver.m @@ -88,11 +88,11 @@ - (void)showCancelReAuthenticationAlertAndOnOK:(WPAuthTokenissueSolverCompletion UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:cancelButtonTitle style:UIAlertActionStyleCancel - handler:^(UIAlertAction *action){}]; + handler:^(UIAlertAction *__unused action){}]; UIAlertAction *deleteAction = [UIAlertAction actionWithTitle:deleteButtonTitle style:UIAlertActionStyleDestructive - handler:^(UIAlertAction *action){ + handler:^(UIAlertAction *__unused action){ okBlock(); }]; [alertController addAction:cancelAction]; @@ -124,7 +124,7 @@ - (void)showExplanationAlertForReAuthenticationDueToMissingAuthToken UIAlertAction *okAction = [UIAlertAction actionWithTitle:okButtonTitle style:UIAlertActionStyleDefault - handler:^(UIAlertAction *action){}]; + handler:^(UIAlertAction *__unused action){}]; [alertController addAction:okAction]; alertController.modalPresentationStyle = UIModalPresentationPopover; diff --git a/WordPress/Classes/Utility/WPAvatarSource.m b/WordPress/Classes/Utility/WPAvatarSource.m index 3533905e8cd8..8feaf3b08443 100644 --- a/WordPress/Classes/Utility/WPAvatarSource.m +++ b/WordPress/Classes/Utility/WPAvatarSource.m @@ -114,7 +114,7 @@ - (void)fetchImageForAvatarHash:(NSString *)hash ofType:(WPAvatarSourceType)type withSuccess:^(UIImage *image) { [self setCachedImage:image forHash:hash type:type size:maxSize]; [self processImage:image forHash:hash type:type size:size success:success]; - } failure:^(NSError *error) { + } failure:^(NSError * __unused error) { if (success) { success(nil); } diff --git a/WordPress/Classes/Utility/WPError.m b/WordPress/Classes/Utility/WPError.m index f1aa23eae1d9..df8cc525aad7 100644 --- a/WordPress/Classes/Utility/WPError.m +++ b/WordPress/Classes/Utility/WPError.m @@ -122,7 +122,7 @@ + (void)showAlertWithTitle:(NSString *)title message:(NSString *)message withSup preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *action = [UIAlertAction actionWithTitle:NSLocalizedString(@"OK", nil) - style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull __unused action) { if (okBlock) { okBlock(alertController); } @@ -135,7 +135,7 @@ + (void)showAlertWithTitle:(NSString *)title message:(NSString *)message withSup NSString *supportText = NSLocalizedString(@"Need Help?", @"'Need help?' button label, links off to the WP for iOS FAQ."); UIAlertAction *action = [UIAlertAction actionWithTitle:supportText style:UIAlertActionStyleCancel - handler:^(UIAlertAction * _Nonnull action) { + handler:^(UIAlertAction * _Nonnull __unused action) { SupportTableViewController *supportVC = [SupportTableViewController new]; [supportVC showFromTabBar]; [WPError internalInstance].alertShowing = NO; diff --git a/WordPress/Classes/Utility/WPWebViewController.m b/WordPress/Classes/Utility/WPWebViewController.m index 3718991cb03b..ad12775d30cd 100644 --- a/WordPress/Classes/Utility/WPWebViewController.m +++ b/WordPress/Classes/Utility/WPWebViewController.m @@ -360,7 +360,7 @@ - (IBAction)showLinkOptions [activityItems addObject:[NSURL URLWithString:permaLink]]; UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:[WPActivityDefaults defaultActivities]]; - activityViewController.completionWithItemsHandler = ^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) { + activityViewController.completionWithItemsHandler = ^(NSString *activityType, BOOL completed, NSArray * __unused returnedItems, NSError * __unused activityError) { if (!completed) { return; } diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController.m b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController.m index bef7de1db383..b57236e09065 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController.m +++ b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController.m @@ -1463,7 +1463,7 @@ - (void)preloadPostsOfType:(PostServiceType)postType NSError *error = nil; [self.blog.managedObjectContext save:&error]; - [postService syncPostsOfType:postType withOptions:options forBlog:self.blog success:nil failure:^(NSError *error) { + [postService syncPostsOfType:postType withOptions:options forBlog:self.blog success:nil failure:^(NSError * __unused error) { NSDate *invalidatedDate = [NSDate dateWithTimeIntervalSince1970:0.0]; if ([postType isEqual:PostServiceTypePage]) { self.blog.lastPagesSync = invalidatedDate; @@ -1804,7 +1804,7 @@ - (void)showRemoveSiteAlert preferredStyle:alertStyle]; [alertController addCancelActionWithTitle:cancelTitle handler:nil]; - [alertController addDestructiveActionWithTitle:destructiveTitle handler:^(UIAlertAction *action) { + [alertController addDestructiveActionWithTitle:destructiveTitle handler:^(UIAlertAction * __unused action) { [self confirmRemoveSite]; }]; diff --git a/WordPress/Classes/ViewRelated/Blog/Blog List/BlogListViewController.m b/WordPress/Classes/ViewRelated/Blog/Blog List/BlogListViewController.m index c1621d12c29d..f7d8eb2a082c 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog List/BlogListViewController.m +++ b/WordPress/Classes/ViewRelated/Blog/Blog List/BlogListViewController.m @@ -195,14 +195,14 @@ - (void)viewWillDisappear:(BOOL)animated - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator { [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; - [coordinator animateAlongsideTransition:^(id _Nonnull context) { + [coordinator animateAlongsideTransition:^(id _Nonnull __unused context) { if (self.tableView.tableHeaderView == self.headerView) { [self updateHeaderSize]; // this forces the tableHeaderView to resize self.tableView.tableHeaderView = self.headerView; } - } completion:^(id _Nonnull context) { + } completion:^(id _Nonnull __unused context) { [self updateCurrentBlogSelection]; }]; } @@ -386,7 +386,7 @@ - (void)syncBlogs BlogService *blogService = [[BlogService alloc] initWithCoreDataStack:[ContextManager sharedInstance]]; [blogService syncBlogsForAccount:defaultAccount success:^{ completionBlock(); - } failure:^(NSError * _Nonnull error) { + } failure:^(NSError * _Nonnull __unused error) { completionBlock(); }]; } @@ -641,7 +641,7 @@ - (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwip if ([blog supports:BlogFeatureRemovable]) { UIContextualAction *removeAction = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleNormal title:NSLocalizedString(@"Remove", @"Removes a self hosted site from the app") - handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) { + handler:^(UIContextualAction * _Nonnull __unused action, __kindof UIView * _Nonnull __unused sourceView, void (^ _Nonnull __unused completionHandler)(BOOL)) { [ReachabilityUtils onAvailableInternetConnectionDo:^{ [weakSelf showRemoveSiteAlertForIndexPath:indexPath]; }]; @@ -653,7 +653,7 @@ - (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwip if (blog.visible) { UIContextualAction *hideAction = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleNormal title:NSLocalizedString(@"Hide", @"Hides a site from the site picker list") - handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) { + handler:^(UIContextualAction * _Nonnull __unused action, __kindof UIView * _Nonnull __unused sourceView, void (^ _Nonnull __unused completionHandler)(BOOL)) { [ReachabilityUtils onAvailableInternetConnectionDo:^{ [weakSelf hideBlogAtIndexPath:indexPath]; }]; @@ -664,7 +664,7 @@ - (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwip } else { UIContextualAction *unhideAction = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleNormal title:NSLocalizedString(@"Unhide", @"Unhides a site from the site picker list") - handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) { + handler:^(UIContextualAction * _Nonnull __unused action, __kindof UIView * _Nonnull __unused sourceView, void (^ _Nonnull __unused completionHandler)(BOOL)) { [ReachabilityUtils onAvailableInternetConnectionDo:^{ [weakSelf unhideBlogAtIndexPath:indexPath]; }]; @@ -693,7 +693,7 @@ - (void)showRemoveSiteAlertForIndexPath:(NSIndexPath *)indexPath preferredStyle:alertStyle]; [alertController addCancelActionWithTitle:cancelTitle handler:nil]; - [alertController addDestructiveActionWithTitle:destructiveTitle handler:^(UIAlertAction *action) { + [alertController addDestructiveActionWithTitle:destructiveTitle handler:^(UIAlertAction * __unused action) { [self confirmRemoveSiteForIndexPath:indexPath]; }]; [self presentViewController:alertController animated:YES completion:nil]; @@ -946,11 +946,11 @@ - (void)setVisible:(BOOL)visible forBlog:(Blog *)blog UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"Cancel", @"Cancel") style:UIAlertActionStyleCancel - handler:^(UIAlertAction *action){}]; + handler:^(UIAlertAction * __unused action){}]; UIAlertAction *hideAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"Hide All", @"Hide All") style:UIAlertActionStyleDestructive - handler:^(UIAlertAction *action){ + handler:^(UIAlertAction * __unused action){ AccountService *accountService = [[AccountService alloc] initWithCoreDataStack:[ContextManager sharedInstance]]; WPAccount *account = [WPAccount lookupDefaultWordPressComAccountInContext:[[ContextManager sharedInstance] mainContext]]; [accountService setVisibility:visible forBlogs:[account.blogs allObjects]]; diff --git a/WordPress/Classes/ViewRelated/Blog/SharingAuthorizationHelper.m b/WordPress/Classes/ViewRelated/Blog/SharingAuthorizationHelper.m index 0850135355e2..5477f3ee88c8 100644 --- a/WordPress/Classes/ViewRelated/Blog/SharingAuthorizationHelper.m +++ b/WordPress/Classes/ViewRelated/Blog/SharingAuthorizationHelper.m @@ -212,7 +212,7 @@ - (void)fetchKeyringConnectionsForService:(PublicizeService *)pubServ } [weakSelf showAccountSelectorForKeyrings:marr]; - } failure:^(NSError *error) { + } failure:^(NSError * __unused error) { if ([self.delegate respondsToSelector:@selector(sharingAuthorizationHelper:keyringFetchFailedForService:)]) { [self.delegate sharingAuthorizationHelper:self keyringFetchFailedForService:self.publicizeService]; return; @@ -318,7 +318,7 @@ - (void)confirmNewConnection:(KeyringConnection *)keyringConnection withExternal [alertController addCancelActionWithTitle:cancel handler:nil]; - [alertController addDefaultActionWithTitle:connect handler:^(UIAlertAction *action) { + [alertController addDefaultActionWithTitle:connect handler:^(UIAlertAction * __unused action) { [self updateConnection:currentPublicizeConnection forKeyringConnection:keyringConnection withExternalID:externalID]; }]; diff --git a/WordPress/Classes/ViewRelated/Blog/SharingConnectionsViewController.m b/WordPress/Classes/ViewRelated/Blog/SharingConnectionsViewController.m index 3b2524734a0e..105bb6df687d 100644 --- a/WordPress/Classes/ViewRelated/Blog/SharingConnectionsViewController.m +++ b/WordPress/Classes/ViewRelated/Blog/SharingConnectionsViewController.m @@ -280,7 +280,7 @@ - (void)sharingAuthorizationHelper:(SharingAuthorizationHelper *)helper __weak SharingConnectionsViewController *sharingConnectionsVC = self; UIAlertAction* continueAction = [UIAlertAction actionWithTitle:validationError.continueTitle style:UIAlertActionStyleDefault - handler:^(UIAlertAction * action) { + handler:^(UIAlertAction * __unused action) { if (validationError.continueURL) { [sharingConnectionsVC handleContinueURLTapped: validationError.continueURL]; } diff --git a/WordPress/Classes/ViewRelated/Blog/SharingDetailViewController.m b/WordPress/Classes/ViewRelated/Blog/SharingDetailViewController.m index 622704a49a3a..7e783217a96e 100644 --- a/WordPress/Classes/ViewRelated/Blog/SharingDetailViewController.m +++ b/WordPress/Classes/ViewRelated/Blog/SharingDetailViewController.m @@ -265,7 +265,7 @@ - (void)promptToConfirmDisconnect message:message preferredStyle:UIAlertControllerStyleActionSheet]; [alert addDestructiveActionWithTitle:NSLocalizedString(@"Disconnect", @"Verb. Title of a button. Tapping disconnects a third-party sharing service from the user's blog.") - handler:^(UIAlertAction *action) { + handler:^(UIAlertAction * __unused action) { [self disconnectPublicizeConnection]; }]; diff --git a/WordPress/Classes/ViewRelated/Blog/SharingViewController.m b/WordPress/Classes/ViewRelated/Blog/SharingViewController.m index f29e4904582e..ca3947d428bf 100644 --- a/WordPress/Classes/ViewRelated/Blog/SharingViewController.m +++ b/WordPress/Classes/ViewRelated/Blog/SharingViewController.m @@ -327,7 +327,7 @@ - (void)syncPublicizeServices __weak __typeof__(self) weakSelf = self; [sharingService syncPublicizeServicesForBlog:self.blog success:^{ [weakSelf syncConnections]; - } failure:^(NSError *error) { + } failure:^(NSError * __unused error) { if (!ReachabilityUtils.isInternetReachable) { [weakSelf showConnectionError]; } else { @@ -343,7 +343,7 @@ - (void)syncConnections __weak __typeof__(self) weakSelf = self; [sharingService syncPublicizeConnectionsForBlog:self.blog success:^{ [weakSelf refreshPublicizers]; - } failure:^(NSError *error) { + } failure:^(NSError * __unused error) { if (!ReachabilityUtils.isInternetReachable) { [weakSelf showConnectionError]; } else { diff --git a/WordPress/Classes/ViewRelated/Blog/Site Settings/Related Posts/RelatedPostsSettingsViewController.m b/WordPress/Classes/ViewRelated/Blog/Site Settings/Related Posts/RelatedPostsSettingsViewController.m index 6eaa72f4f2a0..be1a999aa503 100644 --- a/WordPress/Classes/ViewRelated/Blog/Site Settings/Related Posts/RelatedPostsSettingsViewController.m +++ b/WordPress/Classes/ViewRelated/Blog/Site Settings/Related Posts/RelatedPostsSettingsViewController.m @@ -254,7 +254,7 @@ - (IBAction)updateRelatedPostsSettings:(id)sender BlogService *blogService = nil; [blogService updateSettingsForBlog:self.blog success:^{ [self.tableView reloadData]; - } failure:^(NSError *error) { + } failure:^(NSError * __unused error) { [SVProgressHUD showDismissibleErrorWithStatus:NSLocalizedString(@"Settings update failed", @"Message to show when setting save failed")]; [self.tableView reloadData]; }]; diff --git a/WordPress/Classes/ViewRelated/Blog/Site Settings/SiteSettingsViewController.m b/WordPress/Classes/ViewRelated/Blog/Site Settings/SiteSettingsViewController.m index 024a238952c6..5d250eccd5f2 100644 --- a/WordPress/Classes/ViewRelated/Blog/Site Settings/SiteSettingsViewController.m +++ b/WordPress/Classes/ViewRelated/Blog/Site Settings/SiteSettingsViewController.m @@ -1044,7 +1044,7 @@ - (void)refreshData [weakSelf.refreshControl endRefreshing]; self.tableSections = nil; // force the tableSections to be repopulated. [weakSelf.tableView reloadData]; - } failure:^(NSError *error) { + } failure:^(NSError * __unused error) { [weakSelf.refreshControl endRefreshing]; }]; @@ -1081,7 +1081,7 @@ - (void)validateLoginCredentials NSURL *xmlRpcURL = [NSURL URLWithString:self.blog.xmlrpc]; WordPressOrgXMLRPCApi *api = [[WordPressOrgXMLRPCApi alloc] initWithEndpoint:xmlRpcURL userAgent:[WPUserAgent wordPressUserAgent]]; __weak __typeof__(self) weakSelf = self; - [api checkCredentials:self.username password:self.password success:^(id responseObject, NSHTTPURLResponse *httpResponse) { + [api checkCredentials:self.username password:self.password success:^(id __unused responseObject, NSHTTPURLResponse *__unused httpResponse) { [[ContextManager sharedInstance] performAndSaveUsingBlock:^(NSManagedObjectContext *context) { __typeof__(self) strongSelf = weakSelf; if (!strongSelf) { @@ -1093,7 +1093,7 @@ - (void)validateLoginCredentials } completion:^{ [SVProgressHUD dismiss]; } onQueue:dispatch_get_main_queue()]; - } failure:^(NSError *error, NSHTTPURLResponse *httpResponse) { + } failure:^(NSError *error, NSHTTPURLResponse * __unused httpResponse) { dispatch_async(dispatch_get_main_queue(), ^{ [SVProgressHUD dismiss]; [weakSelf loginValidationFailedWithError:error]; diff --git a/WordPress/Classes/ViewRelated/Comments/CommentsViewController.m b/WordPress/Classes/ViewRelated/Comments/CommentsViewController.m index fd83e9520a47..2d6b35667cb9 100644 --- a/WordPress/Classes/ViewRelated/Comments/CommentsViewController.m +++ b/WordPress/Classes/ViewRelated/Comments/CommentsViewController.m @@ -288,7 +288,7 @@ - (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwip NSMutableArray *actions = [NSMutableArray array]; // Trash Action - UIContextualAction *trash = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleDestructive title:NSLocalizedString(@"Trash", @"Trashes a comment") handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) { + UIContextualAction *trash = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleDestructive title:NSLocalizedString(@"Trash", @"Trashes a comment") handler:^(UIContextualAction * _Nonnull __unused action, __kindof UIView * _Nonnull __unused sourceView, void (^ _Nonnull completionHandler)(BOOL)) { [ReachabilityUtils onAvailableInternetConnectionDo:^{ [weakSelf deleteComment:comment]; }]; @@ -301,7 +301,7 @@ - (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwip if (comment.isApproved) { // Unapprove Action - UIContextualAction *unapprove = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleNormal title:NSLocalizedString(@"Unapprove", @"Unapproves a Comment") handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) { + UIContextualAction *unapprove = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleNormal title:NSLocalizedString(@"Unapprove", @"Unapproves a Comment") handler:^(UIContextualAction * _Nonnull __unused action, __kindof UIView * _Nonnull __unused sourceView, void (^ _Nonnull completionHandler)(BOOL)) { [ReachabilityUtils onAvailableInternetConnectionDo:^{ [weakSelf unapproveComment:comment]; }]; @@ -312,7 +312,7 @@ - (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwip [actions addObject:unapprove]; } else { // Approve Action - UIContextualAction *approve = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleNormal title:NSLocalizedString(@"Approve", @"Approves a Comment") handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) { + UIContextualAction *approve = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleNormal title:NSLocalizedString(@"Approve", @"Approves a Comment") handler:^(UIContextualAction * _Nonnull __unused action, __kindof UIView * _Nonnull __unused sourceView, void (^ _Nonnull completionHandler)(BOOL)) { [ReachabilityUtils onAvailableInternetConnectionDo:^{ [weakSelf approveComment:comment]; }]; @@ -594,7 +594,7 @@ - (void)refreshWithAnimationIfNeeded [self.tableView layoutIfNeeded]; // Necessary to ensure a smooth start. [UIView animateWithDuration:0.25 animations:^{ self.tableView.contentOffset = CGPointMake(0, -60); - } completion:^(BOOL finished) { + } completion:^(BOOL __unused finished) { [self.tableView.refreshControl beginRefreshing]; [self refreshAndSyncWithInteraction]; }]; diff --git a/WordPress/Classes/ViewRelated/Comments/EditCommentViewController.m b/WordPress/Classes/ViewRelated/Comments/EditCommentViewController.m index 726021687161..812736cca2a6 100644 --- a/WordPress/Classes/ViewRelated/Comments/EditCommentViewController.m +++ b/WordPress/Classes/ViewRelated/Comments/EditCommentViewController.m @@ -194,7 +194,7 @@ - (void)btnCancelPressed handler:nil]; [alertController addActionWithTitle:NSLocalizedString(@"Discard", @"") style:UIAlertActionStyleDestructive - handler:^(UIAlertAction *alertAction) { + handler:^(UIAlertAction * __unused alertAction) { [self finishWithoutUpdates]; }]; alertController.popoverPresentationController.barButtonItem = self.navigationItem.leftBarButtonItem; diff --git a/WordPress/Classes/ViewRelated/Me/Help & Support/Activity Logs/ActivityLogViewController.m b/WordPress/Classes/ViewRelated/Me/Help & Support/Activity Logs/ActivityLogViewController.m index 2e6a049d8975..69bc0354cb0c 100644 --- a/WordPress/Classes/ViewRelated/Me/Help & Support/Activity Logs/ActivityLogViewController.m +++ b/WordPress/Classes/ViewRelated/Me/Help & Support/Activity Logs/ActivityLogViewController.m @@ -154,7 +154,7 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath UIAlertAction *yesButton = [UIAlertAction actionWithTitle:trashButtonTitle style:UIAlertActionStyleDestructive - handler:^(UIAlertAction *action) { + handler:^(UIAlertAction * __unused action) { [WPLogger.shared deleteArchivedLogs]; [self loadLogFiles]; [self.tableView reloadData]; @@ -163,7 +163,7 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath UIAlertAction *noButton = [UIAlertAction actionWithTitle:cancelButtonTitle style:UIAlertActionStyleDefault - handler:^(UIAlertAction *action) { + handler:^(UIAlertAction * __unused action) { }]; [alert addAction:noButton]; [alert addAction:yesButton]; diff --git a/WordPress/Classes/ViewRelated/Media/WPAndDeviceMediaLibraryDataSource.m b/WordPress/Classes/ViewRelated/Media/WPAndDeviceMediaLibraryDataSource.m index f31bba20c8a5..468216dbb8b1 100644 --- a/WordPress/Classes/ViewRelated/Media/WPAndDeviceMediaLibraryDataSource.m +++ b/WordPress/Classes/ViewRelated/Media/WPAndDeviceMediaLibraryDataSource.m @@ -212,7 +212,7 @@ - (void)loadDataWithOptions:(WPMediaLoadOptions)options successBlock(); } [self.mediaLibraryDataSource loadDataWithOptions:options success:successBlock failure:failureBlock]; - } failure:^(NSError *error) { + } failure:^(NSError * __unused error) { [self.mediaLibraryDataSource loadDataWithOptions:options success:successBlock failure:failureBlock]; }]; } else { diff --git a/WordPress/Classes/ViewRelated/Menus/MenuItemAbstractPostsViewController.m b/WordPress/Classes/ViewRelated/Menus/MenuItemAbstractPostsViewController.m index 45cdbe227f20..577ef3ce57b5 100644 --- a/WordPress/Classes/ViewRelated/Menus/MenuItemAbstractPostsViewController.m +++ b/WordPress/Classes/ViewRelated/Menus/MenuItemAbstractPostsViewController.m @@ -62,7 +62,7 @@ - (void)syncPosts forBlog:[self blog] success:^(NSArray *posts) { [self didFinishSyncingPosts:posts options:options]; - } failure:^(NSError *error) { + } failure:^(NSError * __unused error) { [self didFinishSyncingPosts:nil options:options]; [self showLoadingErrorMessageForResults]; }]; @@ -153,7 +153,7 @@ - (void)scrollingWillDisplayEndOfTableView:(UITableView *)tableView success:^(NSArray *posts) { [self didFinishSyncingPosts:posts options:options]; self.isSyncingAdditionalPosts = NO; - } failure:^(NSError *error) { + } failure:^(NSError * __unused error) { [self didFinishSyncingPosts:nil options:options]; self.isSyncingAdditionalPosts = NO; [self showLoadingErrorMessageForResults]; @@ -209,9 +209,9 @@ - (void)searchBarInputChangeDetectedForRemoteResultsUpdateWithText:(NSString *)s [service syncPostsOfType:[self sourceItemType] withOptions:options forBlog:[self blog] - success:^(NSArray *posts) { + success:^(NSArray * __unused posts) { stopLoading(); - } failure:^(NSError *error) { + } failure:^(NSError * __unused error) { stopLoading(); [self showLoadingErrorMessageForResults]; }]; diff --git a/WordPress/Classes/ViewRelated/Menus/MenuItemCategoriesViewController.m b/WordPress/Classes/ViewRelated/Menus/MenuItemCategoriesViewController.m index 6a0523ee9f65..10a29b1d8f2a 100644 --- a/WordPress/Classes/ViewRelated/Menus/MenuItemCategoriesViewController.m +++ b/WordPress/Classes/ViewRelated/Menus/MenuItemCategoriesViewController.m @@ -59,9 +59,9 @@ - (void)syncCategories [categoryService syncCategoriesForBlog:[self blog] number:@(CategorySyncLimit) offset:@(0) - success:^(NSArray *categories) { + success:^(NSArray * __unused categories) { stopLoading(); - } failure:^(NSError *error) { + } failure:^(NSError * __unused error) { stopLoading(); [self showLoadingErrorMessageForResults]; }]; diff --git a/WordPress/Classes/ViewRelated/Menus/MenuItemTagsViewController.m b/WordPress/Classes/ViewRelated/Menus/MenuItemTagsViewController.m index 692e3e2fb52d..7e2cabc7b989 100644 --- a/WordPress/Classes/ViewRelated/Menus/MenuItemTagsViewController.m +++ b/WordPress/Classes/ViewRelated/Menus/MenuItemTagsViewController.m @@ -74,9 +74,9 @@ - (void)syncTags [tagService syncTagsForBlog:[self blog] number:@(MenuItemSourceTagSyncLimit) offset:@(0) - success:^(NSArray *tags) { + success:^(NSArray * __unused tags) { stopLoading(); - } failure:^(NSError *error) { + } failure:^(NSError * __unused error) { stopLoading(); [self showLoadingErrorMessageForResults]; }]; @@ -162,7 +162,7 @@ - (void)scrollingWillDisplayEndOfTableView:(UITableView *)tableView stopLoading(); } - failure:^(NSError *error) { + failure:^(NSError * __unused error) { stopLoading(); [self showLoadingErrorMessageForResults]; }]; @@ -216,10 +216,10 @@ - (void)searchBarInputChangeDetectedForRemoteResultsUpdateWithText:(NSString *)s DDLogDebug(@"MenuItemSourceTagView: Searching tags PostTagService"); [self.searchTagService searchTagsWithName:searchText blog:[self blog] - success:^(NSArray *tags) { + success:^(NSArray * __unused tags) { stopLoading(); } - failure:^(NSError *error) { + failure:^(NSError * __unused error) { stopLoading(); [self showLoadingErrorMessageForResults]; }]; diff --git a/WordPress/Classes/ViewRelated/Menus/MenuItemsViewController.m b/WordPress/Classes/ViewRelated/Menus/MenuItemsViewController.m index 6b0377a3f9fb..cc98f72bee52 100644 --- a/WordPress/Classes/ViewRelated/Menus/MenuItemsViewController.m +++ b/WordPress/Classes/ViewRelated/Menus/MenuItemsViewController.m @@ -289,7 +289,7 @@ - (void)removeItemInsertionViews:(BOOL)animated // a delegate will likely scroll the content with the size change [self.delegate itemsViewAnimatingContentSizeChanges:self focusedRect:previousRect updatedFocusRect:updatedRect]; - } completion:^(BOOL finished) { + } completion:^(BOOL __unused finished) { [self removeItemInsertionViews]; }]; diff --git a/WordPress/Classes/ViewRelated/Menus/MenusViewController.m b/WordPress/Classes/ViewRelated/Menus/MenusViewController.m index a595bbc808fc..3075301e90c7 100644 --- a/WordPress/Classes/ViewRelated/Menus/MenusViewController.m +++ b/WordPress/Classes/ViewRelated/Menus/MenusViewController.m @@ -243,7 +243,7 @@ - (void)syncWithBlogMenus success:^{ [self didSyncBlog]; } - failure:^(NSError *error) { + failure:^(NSError * __unused error) { DDLogDebug(@"MenusViewController could not sync menus for blog"); [self showNoResultsWithTitle:[self noResultsErrorTitle]]; }]; @@ -268,7 +268,7 @@ - (void)didSyncBlog } else { [UIView animateWithDuration:0.20 animations:^{ self.scrollView.alpha = 1.0; - } completion:^(BOOL finished) { + } completion:^(BOOL __unused finished) { }]; } } @@ -353,7 +353,7 @@ - (void)loadDefaultMenuItemsIfNeeded } } }; - void(^failureBlock)(NSError *) = ^(NSError *error) { + void(^failureBlock)(NSError *) = ^(NSError * __unused error) { weakSelf.itemsLoadingLabel.text = NSLocalizedString(@"An error occurred loading the menu, please check your internet connection.", @"Menus error message seen when an error occurred loading a specific menu."); }; [self.menusService generateDefaultMenuItemsForBlog:self.blog @@ -711,7 +711,7 @@ - (void)detailsViewControllerSelectedToDeleteMenu:(MenuDetailsViewController *)d NSString *cancelTitle = NSLocalizedString(@"Cancel", @"Menus cancel button for deleting a menu."); UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:confirmTitle style:UIAlertActionStyleDestructive - handler:^(UIAlertAction * _Nonnull action) { + handler:^(UIAlertAction * _Nonnull __unused action) { [weakSelf deleteMenu:menuToDelete]; }]; [alertController addAction:confirmAction]; @@ -811,7 +811,7 @@ - (void)promptForDiscardingChangesBeforeSelectingADifferentLocation:(void(^)(voi NSString *confirmationTitle = NSLocalizedString(@"Discard and Select Location", @"Menus alert button title to continue selecting a menu location and discarding current changes."); [alert addDestructiveActionWithTitle:confirmationTitle - handler:^(UIAlertAction * _Nonnull action) { + handler:^(UIAlertAction * _Nonnull __unused action) { if (confirmationBlock) { confirmationBlock(); } @@ -819,7 +819,7 @@ - (void)promptForDiscardingChangesBeforeSelectingADifferentLocation:(void(^)(voi NSString *cancelTitle = NSLocalizedString(@"Cancel and Keep Changes", @"Menus alert button title to cancel discarding changes and not select a new menu location"); [alert addCancelActionWithTitle:cancelTitle - handler:^(UIAlertAction * _Nonnull action) { + handler:^(UIAlertAction * _Nonnull __unused action) { if (cancellationBlock) { cancellationBlock(); } @@ -837,7 +837,7 @@ - (void)promptForDiscardingChangesBeforeSelectingADifferentMenu:(void(^)(void))c NSString *confirmationTitle = NSLocalizedString(@"Discard and Select Menu", @"Menus alert button title to continue selecting a menu and discarding current changes."); [alert addDestructiveActionWithTitle:confirmationTitle - handler:^(UIAlertAction * _Nonnull action) { + handler:^(UIAlertAction * _Nonnull __unused action) { if (confirmationBlock) { confirmationBlock(); } @@ -845,7 +845,7 @@ - (void)promptForDiscardingChangesBeforeSelectingADifferentMenu:(void(^)(void))c NSString *cancelTitle = NSLocalizedString(@"Cancel and Keep Changes", @"Menus alert button title to cancel discarding changes and not select a new menu"); [alert addCancelActionWithTitle:cancelTitle - handler:^(UIAlertAction * _Nonnull action) { + handler:^(UIAlertAction * _Nonnull __unused action) { if (cancellationBlock) { cancellationBlock(); } @@ -863,7 +863,7 @@ - (void)promptForDiscardingChangesBeforeCreatingNewMenu:(void(^)(void))confirmat NSString *confirmationTitle = NSLocalizedString(@"Discard and Create New Menu", @"Menus alert button title to continue creating a menu and discarding current changes."); [alert addDestructiveActionWithTitle:confirmationTitle - handler:^(UIAlertAction * _Nonnull action) { + handler:^(UIAlertAction * _Nonnull __unused action) { if (confirmationBlock) { confirmationBlock(); } @@ -871,7 +871,7 @@ - (void)promptForDiscardingChangesBeforeCreatingNewMenu:(void(^)(void))confirmat NSString *cancelTitle = NSLocalizedString(@"Cancel and Keep Changes", @"Menus alert button title to cancel discarding changes and not createa a new menu."); [alert addCancelActionWithTitle:cancelTitle - handler:^(UIAlertAction * _Nonnull action) { + handler:^(UIAlertAction * _Nonnull __unused action) { if (cancellationBlock) { cancellationBlock(); } @@ -889,7 +889,7 @@ - (void)promptForDiscardingChangesByTheLeftBarButtonItem:(void(^)(void))confirma NSString *confirmationTitle = NSLocalizedString(@"Discard Changes", @"Menus alert button title to discard changes."); [alert addDestructiveActionWithTitle:confirmationTitle - handler:^(UIAlertAction * _Nonnull action) { + handler:^(UIAlertAction * _Nonnull __unused action) { if (confirmationBlock) { confirmationBlock(); } @@ -897,7 +897,7 @@ - (void)promptForDiscardingChangesByTheLeftBarButtonItem:(void(^)(void))confirma NSString *cancelTitle = NSLocalizedString(@"Continue Working", @"Menus alert button title to continue making changes."); [alert addCancelActionWithTitle:cancelTitle - handler:^(UIAlertAction * _Nonnull action) { + handler:^(UIAlertAction * _Nonnull __unused action) { if (cancellationBlock) { cancellationBlock(); } diff --git a/WordPress/Classes/ViewRelated/Post/FeaturedImageViewController.m b/WordPress/Classes/ViewRelated/Post/FeaturedImageViewController.m index 52f63546c6a0..4cd80d1dec7a 100644 --- a/WordPress/Classes/ViewRelated/Post/FeaturedImageViewController.m +++ b/WordPress/Classes/ViewRelated/Post/FeaturedImageViewController.m @@ -117,7 +117,7 @@ - (void)removeFeaturedImage handler:nil]; [alertController addActionWithTitle:NSLocalizedString(@"Remove", @"Remove an image/posts/etc") style:UIAlertActionStyleDestructive - handler:^(UIAlertAction *alertAction) { + handler:^(UIAlertAction * __unused alertAction) { if (self.delegate) { [self.delegate FeaturedImageViewControllerOnRemoveImageButtonPressed:self]; } diff --git a/WordPress/Classes/ViewRelated/Post/PostSettingsViewController.m b/WordPress/Classes/ViewRelated/Post/PostSettingsViewController.m index b67e89ba4b1b..a2668450d0da 100644 --- a/WordPress/Classes/ViewRelated/Post/PostSettingsViewController.m +++ b/WordPress/Classes/ViewRelated/Post/PostSettingsViewController.m @@ -239,7 +239,7 @@ - (void)setupReachability __weak __typeof(self) weakSelf = self; - self.internetReachability.reachableBlock = ^void(Reachability * reachability) { + self.internetReachability.reachableBlock = ^void(Reachability * __unused reachability) { [weakSelf internetIsReachableAgain]; }; @@ -284,7 +284,7 @@ - (void)synchPostFormatsAndDo:(void(^)(void))completionBlock [self.blogService syncPostFormatsForBlog:self.apost.blog success:^{ [weakSelf setupFormatsList]; completionBlock(); - } failure:^(NSError * _Nonnull error) { + } failure:^(NSError * _Nonnull __unused error) { completionBlock(); }]; } @@ -967,7 +967,7 @@ - (void)showPostVisibilitySelector { PostVisibilitySelectorViewController *vc = [[PostVisibilitySelectorViewController alloc] init:self.apost]; __weak PostVisibilitySelectorViewController *weakVc = vc; - vc.completion = ^(NSString *visibility) { + vc.completion = ^(NSString *__unused visibility) { [WPAnalytics trackEvent:WPAnalyticsEventEditorPostVisibilityChanged properties:@{@"via": @"settings"}]; [weakVc dismiss]; [self.tableView reloadData]; @@ -1233,7 +1233,7 @@ - (void)registerChangeObserverForPicker:(WPMediaPickerViewController *)picker { NSAssert(self.mediaLibraryChangeObserverKey == nil, nil); __weak PostSettingsViewController * weakSelf = self; - self.mediaLibraryChangeObserverKey = [self.mediaDataSource registerChangeObserverBlock:^(BOOL incrementalChanges, NSIndexSet * _Nonnull removed, NSIndexSet * _Nonnull inserted, NSIndexSet * _Nonnull changed, NSArray> * _Nonnull moves) { + self.mediaLibraryChangeObserverKey = [self.mediaDataSource registerChangeObserverBlock:^(BOOL __unused incrementalChanges, NSIndexSet * _Nonnull __unused removed, NSIndexSet * _Nonnull __unused inserted, NSIndexSet * _Nonnull __unused changed, NSArray> * _Nonnull __unused moves) { [weakSelf updateSearchBarForPicker:picker]; BOOL isNotSearching = [weakSelf.mediaDataSource.searchQuery isEmpty]; diff --git a/WordPress/Classes/ViewRelated/Reader/Comments/ReaderCommentsViewController.m b/WordPress/Classes/ViewRelated/Reader/Comments/ReaderCommentsViewController.m index d6289777bf24..b13cbc3922f7 100644 --- a/WordPress/Classes/ViewRelated/Reader/Comments/ReaderCommentsViewController.m +++ b/WordPress/Classes/ViewRelated/Reader/Comments/ReaderCommentsViewController.m @@ -201,7 +201,7 @@ - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id _Nonnull context) { + [coordinator animateAlongsideTransition:nil completion:^(id _Nonnull __unused context) { self.deviceIsRotating = false; NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow]; // Make sure a selected comment is visible after rotating, and that the replyTextView is still the first responder. @@ -986,7 +986,7 @@ - (void)didTapLikeForComment:(Comment *)comment atIndexPath:(NSIndexPath *)index __typeof(self) __weak weakSelf = self; [commentService toggleLikeStatusForComment:comment siteID:self.post.siteID success:^{ [weakSelf trackCommentLikedOrUnliked:comment]; - } failure:^(NSError *error) { + } failure:^(NSError * __unused error) { // in case of failure, revert the cell's like state. [weakSelf.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; }]; @@ -999,7 +999,7 @@ - (void)syncHelper:(WPContentSyncHelper *)syncHelper syncContentWithUserInteract self.failedToFetchComments = NO; CommentService *service = [[CommentService alloc] initWithCoreDataStack:[ContextManager sharedInstance]]; - [service syncHierarchicalCommentsForPost:self.post page:1 success:^(BOOL hasMore, NSNumber *totalComments) { + [service syncHierarchicalCommentsForPost:self.post page:1 success:^(BOOL hasMore, NSNumber * __unused totalComments) { if (success) { success(hasMore); } @@ -1015,7 +1015,7 @@ - (void)syncHelper:(WPContentSyncHelper *)syncHelper syncMoreWithSuccess:(void ( CommentService *service = [[CommentService alloc] initWithCoreDataStack:[ContextManager sharedInstance]]; NSInteger page = [service numberOfHierarchicalPagesSyncedforPost:self.post] + 1; - [service syncHierarchicalCommentsForPost:self.post page:page success:^(BOOL hasMore, NSNumber *totalComments) { + [service syncHierarchicalCommentsForPost:self.post page:page success:^(BOOL hasMore, NSNumber * __unused totalComments) { if (success) { success(hasMore); } diff --git a/WordPress/Classes/ViewRelated/Reader/WPImageViewController.m b/WordPress/Classes/ViewRelated/Reader/WPImageViewController.m index 73c56a4232ce..906dbcf95bf3 100644 --- a/WordPress/Classes/ViewRelated/Reader/WPImageViewController.m +++ b/WordPress/Classes/ViewRelated/Reader/WPImageViewController.m @@ -367,7 +367,7 @@ - (void)viewWillDisappear:(BOOL)animated - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator { [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; - [coordinator animateAlongsideTransition:^(id _Nonnull context) { + [coordinator animateAlongsideTransition:^(id _Nonnull __unused context) { [self centerImage]; } completion:nil]; } diff --git a/WordPress/Classes/ViewRelated/Stats/StatsViewController.m b/WordPress/Classes/ViewRelated/Stats/StatsViewController.m index 356c32b49e31..ed77f43b59f1 100644 --- a/WordPress/Classes/ViewRelated/Stats/StatsViewController.m +++ b/WordPress/Classes/ViewRelated/Stats/StatsViewController.m @@ -199,7 +199,7 @@ - (IBAction)makeSiteTodayWidgetSite:(id)sender handler:nil]; [alertController addActionWithTitle:NSLocalizedString(@"Use this site", @"") style:UIAlertActionStyleDefault - handler:^(UIAlertAction *alertAction) { + handler:^(UIAlertAction * __unused alertAction) { [self saveSiteDetailsForTodayWidget]; }]; alertController.popoverPresentationController.barButtonItem = sender; diff --git a/WordPress/Classes/ViewRelated/Suggestions/SuggestionsTableView.m b/WordPress/Classes/ViewRelated/Suggestions/SuggestionsTableView.m index 8229e6dac83d..2185ae5e1634 100644 --- a/WordPress/Classes/ViewRelated/Suggestions/SuggestionsTableView.m +++ b/WordPress/Classes/ViewRelated/Suggestions/SuggestionsTableView.m @@ -91,7 +91,7 @@ - (void)updateHeaderStyles - (void)setupViewModel { __weak __typeof(self) weakSelf = self; - self.viewModel.searchResultUpdated = ^(id viewModel) { + self.viewModel.searchResultUpdated = ^(id __unused viewModel) { if (!weakSelf) return; [weakSelf.tableView reloadData]; [weakSelf setNeedsUpdateConstraints]; diff --git a/WordPress/Classes/ViewRelated/Views/WPAnimatedBox.m b/WordPress/Classes/ViewRelated/Views/WPAnimatedBox.m index 2da1e174f068..96987574a529 100644 --- a/WordPress/Classes/ViewRelated/Views/WPAnimatedBox.m +++ b/WordPress/Classes/ViewRelated/Views/WPAnimatedBox.m @@ -109,10 +109,10 @@ - (void)playAnimation } completion:nil]; [UIView animateWithDuration:1.2 delay:0.2 usingSpringWithDamping:0.5 initialSpringVelocity:0.1 options:UIViewAnimationOptionCurveEaseOut animations:^{ weakSelf.page3.transform = CGAffineTransformIdentity; - } completion:^void(BOOL finished) { + } completion:^void(BOOL __unused finished) { [UIView animateWithDuration:0.8 delay:2.0 usingSpringWithDamping:0.8 initialSpringVelocity:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{ [weakSelf moveAnimationToFirstFrame]; - } completion:^(BOOL finished) { + } completion:^(BOOL __unused finished) { if (weakSelf.isAnimating && weakSelf.window != nil) { [weakSelf playAnimation]; } diff --git a/WordPress/WordPressShareExtension/TextBundleWrapper.m b/WordPress/WordPressShareExtension/TextBundleWrapper.m index bc4a6fd82822..3b33d5acf934 100644 --- a/WordPress/WordPressShareExtension/TextBundleWrapper.m +++ b/WordPress/WordPressShareExtension/TextBundleWrapper.m @@ -181,7 +181,7 @@ - (NSString *)textFileNameInFileWrapper:(NSFileWrapper*)fileWrapper { // Finding the text.* file inside the .textbundle __block NSString *filename = nil; - [[fileWrapper fileWrappers] enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSFileWrapper * obj, BOOL *stop) + [[fileWrapper fileWrappers] enumerateKeysAndObjectsUsingBlock:^(NSString * __unused key, NSFileWrapper * obj, BOOL * __unused stop) { if([[obj.filename lowercaseString] hasPrefix:@"text"]) { filename = obj.filename; @@ -203,7 +203,7 @@ - (NSString *)textFilenameForType:(NSString *)type - (NSFileWrapper *)fileWrapperForAssetFilename:(NSString *)filename { __block NSFileWrapper *fileWrapper = nil; - [[self.assetsFileWrapper fileWrappers] enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, NSFileWrapper * _Nonnull obj, BOOL * _Nonnull stop) { + [[self.assetsFileWrapper fileWrappers] enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull __unused key, NSFileWrapper * _Nonnull __unused obj, BOOL * _Nonnull __unused stop) { if ([obj.filename isEqualToString:filename] || [obj.preferredFilename isEqualToString:filename]) { fileWrapper = obj; } From b08f30494a49c1e6cd0164e2c6f4db94d808b7a9 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Tue, 4 Apr 2023 13:47:42 +1200 Subject: [PATCH 24/64] Address unused parameters warnings in unit tests --- WordPress/WordPressTest/MenusServiceTests.m | 10 +++++----- WordPress/WordPressTest/PostCategoryServiceTests.m | 14 +++++++------- WordPress/WordPressTest/PostTagServiceTests.m | 12 ++++++------ WordPress/WordPressTest/WPAvatarSourceTest.m | 2 +- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/WordPress/WordPressTest/MenusServiceTests.m b/WordPress/WordPressTest/MenusServiceTests.m index 9095d37d2869..33148e48229e 100644 --- a/WordPress/WordPressTest/MenusServiceTests.m +++ b/WordPress/WordPressTest/MenusServiceTests.m @@ -80,7 +80,7 @@ - (void)testThatSyncMenusForBlogWorks XCTAssertNoThrow(service = [[MenusService alloc] initWithManagedObjectContext:context]); XCTAssertNoThrow([service syncMenusForBlog:blog success:^(){} - failure:^(NSError *error) {}]); + failure:^(NSError * __unused error) {}]); } - (void)testThatCreateMenuWithNameWorks @@ -113,7 +113,7 @@ - (void)testThatCreateMenuWithNameWorks XCTAssertNoThrow([service createOrUpdateMenu:menu forBlog:blog success:^(void) {} - failure:^(NSError *error) {}]); + failure:^(NSError * __unused error) {}]); } - (void)testThatUpdateMenuWorks @@ -162,7 +162,7 @@ - (void)testThatUpdateMenuWorks XCTAssertNoThrow([service createOrUpdateMenu:menu forBlog:blog success:^(){} - failure:^(NSError *error) {}]); + failure:^(NSError * __unused error) {}]); } - (void)testThatDeleteMenuWithIdWorks @@ -189,7 +189,7 @@ - (void)testThatDeleteMenuWithIdWorks XCTAssertNoThrow([service deleteMenu:menu forBlog:blog success:^(){} - failure:^(NSError *error) {}]); + failure:^(NSError * __unused error) {}]); } - (void)testThatDeleteMenuWithoutIdWorks @@ -216,7 +216,7 @@ - (void)testThatDeleteMenuWithoutIdWorks XCTAssertNoThrow([service deleteMenu:menu forBlog:blog success:^(){} - failure:^(NSError *error) {}]); + failure:^(NSError * __unused error) {}]); } @end diff --git a/WordPress/WordPressTest/PostCategoryServiceTests.m b/WordPress/WordPressTest/PostCategoryServiceTests.m index 7bf9ceca8bbc..b05d3a696e13 100644 --- a/WordPress/WordPressTest/PostCategoryServiceTests.m +++ b/WordPress/WordPressTest/PostCategoryServiceTests.m @@ -73,7 +73,7 @@ - (void)testThatSyncCategoriesWorks [self.service syncCategoriesForBlog:self.blog success:^{} - failure:^(NSError * _Nonnull error) {}]; + failure:^(NSError * _Nonnull __unused error) {}]; } - (void)testThatSyncCategoriesWithPagingWorks @@ -99,8 +99,8 @@ - (void)testThatSyncCategoriesWithPagingWorks [self.service syncCategoriesForBlog:self.blog number:number offset:offset - success:^(NSArray * _Nonnull tags) {} - failure:^(NSError * _Nonnull error) {}]; + success:^(NSArray * _Nonnull __unused tags) {} + failure:^(NSError * _Nonnull __unused error) {}]; } - (void)testThatCreateCategoryWithNameWorks @@ -122,8 +122,8 @@ - (void)testThatCreateCategoryWithNameWorks [self.service createCategoryWithName:name parentCategoryObjectID:nil forBlogObjectID:self.blog.objectID - success:^(PostCategory * _Nonnull category) {} - failure:^(NSError * _Nonnull error) {}]; + success:^(PostCategory * _Nonnull __unused category) {} + failure:^(NSError * _Nonnull __unused error) {}]; } - (void)testSyncSuccessShouldBeCalledOnce @@ -135,7 +135,7 @@ - (void)testSyncSuccessShouldBeCalledOnce failure:[OCMArg isNotNil]]); [self.service syncCategoriesForBlog:self.blog success:^{ [completion fulfill]; } - failure:^(NSError * _Nonnull error) {[completion fulfill]; }]; + failure:^(NSError * _Nonnull __unused error) {[completion fulfill]; }]; [self waitForExpectations:@[completion] timeout:1]; } @@ -148,7 +148,7 @@ - (void)testSyncFailureShouldBeCalledOnce failure:[OCMArg invokeBlock]]); [self.service syncCategoriesForBlog:self.blog success:^{ [completion fulfill]; } - failure:^(NSError * _Nonnull error) {[completion fulfill]; }]; + failure:^(NSError * _Nonnull __unused error) {[completion fulfill]; }]; [self waitForExpectations:@[completion] timeout:1]; } diff --git a/WordPress/WordPressTest/PostTagServiceTests.m b/WordPress/WordPressTest/PostTagServiceTests.m index 87291dfb88fd..9b6e652fad31 100644 --- a/WordPress/WordPressTest/PostTagServiceTests.m +++ b/WordPress/WordPressTest/PostTagServiceTests.m @@ -73,8 +73,8 @@ - (void)testThatSyncTagsWorks failure:[OCMArg isNotNil]]); [self.service syncTagsForBlog:self.blog - success:^(NSArray * _Nonnull tags) {} - failure:^(NSError * _Nonnull error) {}]; + success:^(NSArray * _Nonnull __unused tags) {} + failure:^(NSError * _Nonnull __unused error) {}]; } - (void)testThatSyncTagsWithPagingWorks @@ -100,8 +100,8 @@ - (void)testThatSyncTagsWithPagingWorks [self.service syncTagsForBlog:self.blog number:number offset:offset - success:^(NSArray * _Nonnull tags) {} - failure:^(NSError * _Nonnull error) {}]; + success:^(NSArray * _Nonnull __unused tags) {} + failure:^(NSError * _Nonnull __unused error) {}]; } - (void)testThatSearchTagsWithNameWorks @@ -115,8 +115,8 @@ - (void)testThatSearchTagsWithNameWorks [self.service searchTagsWithName:name blog:self.blog - success:^(NSArray * _Nonnull tags) {} - failure:^(NSError * _Nonnull error) {}]; + success:^(NSArray * _Nonnull __unused tags) {} + failure:^(NSError * _Nonnull __unused error) {}]; } @end diff --git a/WordPress/WordPressTest/WPAvatarSourceTest.m b/WordPress/WordPressTest/WPAvatarSourceTest.m index e97150c7c02b..c02ef0a2ca14 100644 --- a/WordPress/WordPressTest/WPAvatarSourceTest.m +++ b/WordPress/WordPressTest/WPAvatarSourceTest.m @@ -24,7 +24,7 @@ - (void)setUp _source = [WPAvatarSource new]; [HTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { return [[request.URL host] isEqualToString:@"gravatar.com"]; - } withStubResponse:^HTTPStubsResponse *(NSURLRequest *request) { + } withStubResponse:^HTTPStubsResponse *(NSURLRequest * __unused request) { NSString* fixture = OHPathForFile(@"misteryman.jpg", self.class); return [HTTPStubsResponse responseWithFileAtPath:fixture statusCode:200 headers:@{@"Content-Type":@"image/jpeg"}]; From 67553641ac15d04959ee1af0263ff712fe93dd68 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Tue, 4 Apr 2023 14:10:01 +1200 Subject: [PATCH 25/64] Fix an Core Data concurrency issue in uploading photos An incorrect `Media` instance was used in a Core Data update function --- .../Classes/Services/MediaImportService.swift | 33 +++++++++---------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/WordPress/Classes/Services/MediaImportService.swift b/WordPress/Classes/Services/MediaImportService.swift index b5f5a4b789b2..b5f5b9cfc731 100644 --- a/WordPress/Classes/Services/MediaImportService.swift +++ b/WordPress/Classes/Services/MediaImportService.swift @@ -188,16 +188,15 @@ class MediaImportService: NSObject { // HEIC isn't supported when uploading an image, so we filter it out (http://git.io/JJAae) allowedFileTypes.remove("heic") - let completion: (Result) -> Void = { result in + let completion: (Error?) -> Void = { error in self.coreDataStack.performAndSave({ context in - let media = try context.existingObject(with: media.objectID) as! Media - switch result { - case let .success(media): - media.remoteStatus = .local - media.error = nil - case let .failure(error): - media.remoteStatus = .failed - media.error = error + let mediaInContext = try context.existingObject(with: media.objectID) as! Media + if let error { + mediaInContext.remoteStatus = .failed + mediaInContext.error = error + } else { + mediaInContext.remoteStatus = .local + mediaInContext.error = nil } }, completion: { result in let transformed = result.flatMap { @@ -237,7 +236,7 @@ class MediaImportService: NSObject { /// /// - Returns: a progress object that report the current state of the import process. /// - private func `import`(_ exportable: ExportableAsset, to media: Media, allowableFileExtensions: Set, completion: @escaping (Result) -> Void) -> Progress { + private func `import`(_ exportable: ExportableAsset, to media: Media, allowableFileExtensions: Set, completion: @escaping (Error?) -> Void) -> Progress { let progress: Progress = Progress.discreteProgress(totalUnitCount: 1) importQueue.async { guard let exporter = self.makeExporter(for: exportable, allowableFileExtensions: allowableFileExtensions) else { @@ -249,20 +248,18 @@ class MediaImportService: NSObject { let mediaInContext = try context.existingObject(with: media.objectID) as! Media self.configureMedia(mediaInContext, withExport: export) }, completion: { result in - completion( - result.flatMap { - Result { - try self.coreDataStack.mainContext.existingObject(with: media.objectID) as! Media - } - } - ) + if case let .failure(error) = result { + completion(error) + } else { + completion(nil) + } }, on: .main) }, onError: { error in MediaImportService.logExportError(error) // Return the error via the context's queue, and as an NSError to ensure it carries over the right code/message. DispatchQueue.main.async { - completion(.failure(error)) + completion(error) } } ) From ed80356703926bf8e90c091cf844aa3c709db4b1 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Tue, 4 Apr 2023 20:24:14 +1200 Subject: [PATCH 26/64] Call the completion block after changes are saved --- WordPress/Classes/Services/CommentService+Replies.swift | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/WordPress/Classes/Services/CommentService+Replies.swift b/WordPress/Classes/Services/CommentService+Replies.swift index e475d4ad3495..6bb4f98b6e71 100644 --- a/WordPress/Classes/Services/CommentService+Replies.swift +++ b/WordPress/Classes/Services/CommentService+Replies.swift @@ -71,10 +71,7 @@ extension CommentService { childComment.visibleOnReader = isVisible } - self.coreDataStack.save(context) - DispatchQueue.main.async { - completion?() - } + self.coreDataStack.save(context, completion: completion, on: .main) } } } From ec63e965a651982daa5124a6908a33e41113cfbd Mon Sep 17 00:00:00 2001 From: Tony Li Date: Tue, 4 Apr 2023 20:44:20 +1200 Subject: [PATCH 27/64] Add an unit test for `CommentService.updateRepliesVisibility` --- WordPress/WordPress.xcodeproj/project.pbxproj | 4 + .../CommentService+RepliesTests.swift | 34 + .../reader-post-comments-success.json | 1090 +++++++++++++++++ 3 files changed, 1128 insertions(+) create mode 100644 WordPress/WordPressTest/Test Data/reader-post-comments-success.json diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index c70f5af44ce1..c910065ac78e 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -1171,6 +1171,7 @@ 4A526BE0296BE9A50007B5BA /* CoreDataService.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A526BDD296BE9A50007B5BA /* CoreDataService.m */; }; 4A76A4BB29D4381100AABF4B /* CommentService+LikesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A76A4BA29D4381000AABF4B /* CommentService+LikesTests.swift */; }; 4A76A4BD29D43BFD00AABF4B /* CommentService+MorderationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A76A4BC29D43BFD00AABF4B /* CommentService+MorderationTests.swift */; }; + 4A76A4BF29D4F0A500AABF4B /* reader-post-comments-success.json in Resources */ = {isa = PBXBuildFile; fileRef = 4A76A4BE29D4F0A500AABF4B /* reader-post-comments-success.json */; }; 4A82C43128D321A300486CFF /* Blog+Post.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A82C43028D321A300486CFF /* Blog+Post.swift */; }; 4A82C43228D321A300486CFF /* Blog+Post.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A82C43028D321A300486CFF /* Blog+Post.swift */; }; 4A878550290F2C7D0083AB78 /* Media+Sync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A87854F290F2C7D0083AB78 /* Media+Sync.swift */; }; @@ -6693,6 +6694,7 @@ 4A526BDE296BE9A50007B5BA /* CoreDataService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CoreDataService.h; sourceTree = ""; }; 4A76A4BA29D4381000AABF4B /* CommentService+LikesTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CommentService+LikesTests.swift"; sourceTree = ""; }; 4A76A4BC29D43BFD00AABF4B /* CommentService+MorderationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CommentService+MorderationTests.swift"; sourceTree = ""; }; + 4A76A4BE29D4F0A500AABF4B /* reader-post-comments-success.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "reader-post-comments-success.json"; sourceTree = ""; }; 4A82C43028D321A300486CFF /* Blog+Post.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Blog+Post.swift"; sourceTree = ""; }; 4A87854F290F2C7D0083AB78 /* Media+Sync.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Media+Sync.swift"; sourceTree = ""; }; 4A9314DB297790C300360232 /* PeopleServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeopleServiceTests.swift; sourceTree = ""; }; @@ -16343,6 +16345,7 @@ 93CD939219099BE70049096E /* authtoken.json */, FE003F61282E73E6006F8D1D /* blogging-prompts-fetch-success.json */, FEFC0F8D27313DCF001F7F1D /* comments-v2-success.json */, + 4A76A4BE29D4F0A500AABF4B /* reader-post-comments-success.json */, FEFC0F8F27315634001F7F1D /* empty-array.json */, 74585B9A1F0D591D00E7E667 /* domain-service-valid-domains.json */, 74585B9B1F0D591D00E7E667 /* domain-service-all-domain-types.json */, @@ -19061,6 +19064,7 @@ 7E4A772120F7BBBD001C706D /* activity-log-post-content.json in Resources */, 748437F01F1D4E9E00E8DDAF /* notifications-load-all.json in Resources */, E11330511A13BAA300D36D84 /* me-sites-with-jetpack.json in Resources */, + 4A76A4BF29D4F0A500AABF4B /* reader-post-comments-success.json in Resources */, 7E53AB0820FE6C9C005796FE /* activity-log-post.json in Resources */, 32110560250C027D0048446F /* invalid-gif.gif in Resources */, D848CC0B20FF2D5D00A9038F /* notifications-user-range.json in Resources */, diff --git a/WordPress/WordPressTest/CommentService+RepliesTests.swift b/WordPress/WordPressTest/CommentService+RepliesTests.swift index 25b351253cb2..a43cf3c00a1b 100644 --- a/WordPress/WordPressTest/CommentService+RepliesTests.swift +++ b/WordPress/WordPressTest/CommentService+RepliesTests.swift @@ -243,6 +243,40 @@ final class CommentService_RepliesTests: CoreDataTestCase { // The HTTP API call failed and no comment was inserted into the database try XCTAssertEqual(mainContext.count(for: Comment.safeFetchRequest()), 1) } + + func test_updateRepliesVisibility() throws { + let post = ReaderPost(context: mainContext) + post.siteID = 3584907 + post.postID = 51399 + contextManager.saveContextAndWait(mainContext) + + HTTPStubs.stubRequest(forEndpoint: "rest/v1.1/sites/3584907/posts/51399/replies", withFileAtPath: stubFilePath("reader-post-comments-success.json")) + waitUntil { done in + self.commentService.syncHierarchicalComments(for: post, page: 1) { _, _ in + done() + } failure: { error in + XCTFail("Unexpected error: \(String(describing: error))") + done() + } + } + + // All comments are visible + XCTAssertEqual(post.comments.count, 24) + XCTAssertEqual(post.comments.filter({ ($0 as! Comment).visibleOnReader }).count, 24) + + // Mark a comment as spam + let spamComment = try XCTUnwrap(post.comments.first { ($0 as! Comment).commentID == 428668 }) as! Comment + spamComment.status = CommentStatusType.spam.description + contextManager.saveContextAndWait(mainContext) + + waitUntil { done in + self.commentService.updateRepliesVisibility(for: spamComment, completion: done) + } + + // The spam comment and its two replies are no longer visible + XCTAssertEqual(post.comments.count, 24) + XCTAssertEqual(post.comments.filter({ ($0 as! Comment).visibleOnReader }).count, 21) + } } // MARK: - Test Helpers diff --git a/WordPress/WordPressTest/Test Data/reader-post-comments-success.json b/WordPress/WordPressTest/Test Data/reader-post-comments-success.json new file mode 100644 index 000000000000..ccb423fce514 --- /dev/null +++ b/WordPress/WordPressTest/Test Data/reader-post-comments-success.json @@ -0,0 +1,1090 @@ +{ + "found": 24, + "site_ID": 3584907, + "comments": [ + { + "ID": 428602, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 228172339, + "login": "", + "email": false, + "name": "thisness", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "http://thisnessart.wordpress.com", + "avatar_URL": "https://2.gravatar.com/avatar/84a56c859a787eeed67ec4dd2f9388e8?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/84a56c859a787eeed67ec4dd2f9388e8", + "ip_address": false + }, + "date": "2023-03-17T19:27:43+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428602", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428602", + "content": "

This is great news! Any plans for adding this capability to WordPress.com blogs?

\n", + "raw_content": "This is great news! Any plans for adding this capability to Wordpress.com blogs?", + "status": "approved", + "parent": false, + "type": "comment", + "like_count": 7, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428602", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428602/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428602/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428602/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428627, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 998857, + "login": "", + "email": false, + "name": "Steve Sawczyn", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "https://steves.life", + "avatar_URL": "https://2.gravatar.com/avatar/eea57818a25081563cdd49ee44b11b57?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/eea57818a25081563cdd49ee44b11b57", + "ip_address": false + }, + "date": "2023-03-17T21:09:25+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428627", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428627", + "content": "

I have waited a long time for an announcement like this, but it seems that this functionality may only be available for WordPress Business and above? When I tried to install this on my Premium plan, I was told that I would need a plan upgrade, but not what that upgrade might be: it’s presumably an upgrade to business as I don’t find any other options that would support plugin installation. I’d absolutely love to incorporate ActivityPub into my blog as I truly believe in the open web, but I’m not willing to pay 3X what I’m already paying just to gain access to a single plugin. Is there some other way to add this to accounts lower than Business tier? If not, I truly hope that Automattic will consider merging this somehow into Jetpack, so that all of us can truly take part in the open web.

\n", + "raw_content": "I have waited a long time for an announcement like this, but it seems that this functionality may only be available for WordPress Business and above? When I tried to install this on my Premium plan, I was told that I would need a plan upgrade, but not what that upgrade might be: it's presumably an upgrade to business as I don't find any other options that would support plugin installation. I'd absolutely love to incorporate ActivityPub into my blog as I truly believe in the open web, but I'm not willing to pay 3X what I'm already paying just to gain access to a single plugin. Is there some other way to add this to accounts lower than Business tier? If not, I truly hope that Automattic will consider merging this somehow into Jetpack, so that all of us can truly take part in the open web.", + "status": "approved", + "parent": false, + "type": "comment", + "like_count": 7, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428627", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428627/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428627/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428627/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428664, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 28155716, + "login": "", + "email": false, + "name": "Jerry B", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "https://theboundlesshorizon.com/", + "avatar_URL": "https://1.gravatar.com/avatar/4c69dba70ef25cc957d880ee565fb6e2?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/4c69dba70ef25cc957d880ee565fb6e2", + "ip_address": false + }, + "date": "2023-03-19T18:43:32+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428664", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428664", + "content": "

Hi there, for the moment this plugin is in beta, so it has not been incorporated with the WordPress.com platform directly. For now, the only way to use this feature is to upgrade to the Business Plan or use a self-hosted WordPress site with a “traditional web host.”

\n

We don’t have a specific timeline for adding this functionality for all WordPress.com sites, but we would announce it here in our blog. Thanks for your patience!

\n", + "raw_content": "Hi there, for the moment this plugin is in beta, so it has not been incorporated with the WordPress.com platform directly. For now, the only way to use this feature is to upgrade to the Business Plan or use a self-hosted WordPress site with a \"traditional web host.\"\r\n\r\nWe don't have a specific timeline for adding this functionality for all WordPress.com sites, but we would announce it here in our blog. Thanks for your patience!", + "status": "approved", + "parent": { + "ID": 428627, + "type": "comment", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428627" + }, + "type": "comment", + "like_count": 6, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428664", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428664/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428664/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428664/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428629, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 233004886, + "login": "", + "email": false, + "name": "Affiliated Madness", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "http://affiliatedmadnessbusiness.wordpress.com", + "avatar_URL": "https://2.gravatar.com/avatar/5f25a84336080d9c62934bc170de97f6?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/5f25a84336080d9c62934bc170de97f6", + "ip_address": false + }, + "date": "2023-03-18T06:16:06+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428629", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428629", + "content": "

First comment \ud83d\ude01. This is really cool actually, thank you for making such a great post. Once I get some things in place I’m definitely going to have to make use of this awesome plugin!

\n", + "raw_content": "First comment \ud83d\ude01. This is really cool actually, thank you for making such a great post. Once I get some things in place I'm definitely going to have to make use of this awesome plugin!", + "status": "approved", + "parent": false, + "type": "comment", + "like_count": 3, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428629", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428629/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428629/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428629/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428633, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 223648874, + "login": "", + "email": false, + "name": "scribblans", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "", + "avatar_URL": "https://0.gravatar.com/avatar/90e5b99bcd5ab90eca0bc15a7b56bdc4?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/90e5b99bcd5ab90eca0bc15a7b56bdc4", + "ip_address": false + }, + "date": "2023-03-18T10:00:30+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428633", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428633", + "content": "

It should be understood that installing this plug-in — that democratises publishing and makes the web a better place — requires your subscription to be on the Business plan or higher, so is not for Personal or Premium accounts.

\n", + "raw_content": "It should be understood that installing this plug-in -- that democratises publishing and makes the web a better place -- requires your subscription to be on the Business plan or higher, so is not for Personal or Premium accounts.", + "status": "approved", + "parent": false, + "type": "comment", + "like_count": 2, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428633", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428633/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428633/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428633/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428646, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 198177542, + "login": "", + "email": false, + "name": "minecraftchest1", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "http://minecraftchest1.wordpress.com", + "avatar_URL": "https://2.gravatar.com/avatar/27b4b30c8412f92d0e9e59ca59f1d66a?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/27b4b30c8412f92d0e9e59ca59f1d66a", + "ip_address": false + }, + "date": "2023-03-18T12:13:00+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428646", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428646", + "content": "

Now for it to be available for all users, not just buisness.

\n", + "raw_content": "Now for it to be available for all users, not just buisness.", + "status": "approved", + "parent": false, + "type": "comment", + "like_count": 3, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428646", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428646/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428646/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428646/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428678, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 42251266, + "login": "", + "email": false, + "name": "Carolyn S.", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "https://wordpress.com/learn/", + "avatar_URL": "https://2.gravatar.com/avatar/561be467af56cefa58e02782b7ac7510?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/561be467af56cefa58e02782b7ac7510", + "ip_address": false + }, + "date": "2023-03-20T18:54:56+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428678", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428678", + "content": "

We’re working on it! Since it hasn’t been integrated into WordPress.com yet (which will take some time), the only way to use this feature at the moment is to upgrade to the Business Plan or use a self-hosted WordPress site with a \u201ctraditional web host.\u201d

\n

We don\u2019t have a specific timeline for adding this functionality for all WordPress.com sites, but we would announce it here in our blog. Thanks for your patience!

\n", + "raw_content": "We're working on it! Since it hasn't been integrated into WordPress.com yet (which will take some time), the only way to use this feature at the moment is to upgrade to the Business Plan or use a self-hosted WordPress site with a \u201ctraditional web host.\u201d\r\n\r\nWe don\u2019t have a specific timeline for adding this functionality for all WordPress.com sites, but we would announce it here in our blog. Thanks for your patience!", + "status": "approved", + "parent": { + "ID": 428646, + "type": "comment", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428646" + }, + "type": "comment", + "like_count": 0, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428678", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428678/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428678/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428678/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428647, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 143775722, + "login": "", + "email": false, + "name": "Lou Carreras", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "http://loucarrerascarver.wordpress.com", + "avatar_URL": "https://1.gravatar.com/avatar/481440a83d9023669f982a5eb249310f?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/481440a83d9023669f982a5eb249310f", + "ip_address": false + }, + "date": "2023-03-18T12:35:55+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428647", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428647", + "content": "

You were right installing the plugin was amazingly easy. but I couldn’t find the entry for manage plugin which would allow me to to set things up. Have I missed something here?

\n", + "raw_content": "You were right installing the plugin was amazingly easy. but I couldn't find the entry for manage plugin which would allow me to to set things up. Have I missed something here?", + "status": "approved", + "parent": false, + "type": "comment", + "like_count": 5, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428647", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428647/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428647/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428647/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428663, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 28155716, + "login": "", + "email": false, + "name": "Jerry B", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "https://theboundlesshorizon.com/", + "avatar_URL": "https://1.gravatar.com/avatar/4c69dba70ef25cc957d880ee565fb6e2?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/4c69dba70ef25cc957d880ee565fb6e2", + "ip_address": false + }, + "date": "2023-03-19T18:39:58+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428663", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428663", + "content": "

Hi there, the settings for the plugin are found in your site admin area. In the sidebar on the right, look for Settings > ActivityPub

\n

You can find a full explanation of how the plugin works, as well as a few examples to help clarify, by reading the the info provided by the plugin author here: https://github.com/pfefferle/wordpress-activitypub#description

\n

Hope this helps!

\n", + "raw_content": "Hi there, the settings for the plugin are found in your site admin area. In the sidebar on the right, look for Settings > ActivityPub\r\n\r\nYou can find a full explanation of how the plugin works, as well as a few examples to help clarify, by reading the the info provided by the plugin author here: https://github.com/pfefferle/wordpress-activitypub#description\r\n\r\nHope this helps!", + "status": "approved", + "parent": { + "ID": 428647, + "type": "comment", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428647" + }, + "type": "comment", + "like_count": 5, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428663", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428663/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428663/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428663/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428649, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 37703838, + "login": "", + "email": false, + "name": "Maho-Art", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "http://eyeof1.wordpress.com", + "avatar_URL": "https://0.gravatar.com/avatar/c6c6a7f29e8ee3f0926e5cbfc1f566d7?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/c6c6a7f29e8ee3f0926e5cbfc1f566d7", + "ip_address": false + }, + "date": "2023-03-18T14:30:17+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428649", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428649", + "content": "

It is not very clear to me when someone make a statement that they are demonstrating a product or access when they are busy buying up independent related businesses and determining to use factor of those products.

\n

I\u2019ve always understood the \u201cmarket\u201d to be an amalgamation of varied interests in a field interactions, buying, selling and trading. Today all portals of such activities are being owned and influenced by fewer and fewer minds, in an arena of slavish drones waiting for the next offering. In such a case how can we believe the market is free, or the processes democratic? This is truly a quandary of perception.

\n", + "raw_content": "It is not very clear to me when someone make a statement that they are demonstrating a product or access when they are busy buying up independent related businesses and determining to use factor of those products.\n\nI\u2019ve always understood the \u201cmarket\u201d to be an amalgamation of varied interests in a field interactions, buying, selling and trading. Today all portals of such activities are being owned and influenced by fewer and fewer minds, in an arena of slavish drones waiting for the next offering. In such a case how can we believe the market is free, or the processes democratic? This is truly a quandary of perception.", + "status": "approved", + "parent": false, + "type": "comment", + "like_count": 3, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428649", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428649/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428649/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428649/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428906, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 130920716, + "login": "", + "email": false, + "name": "revelation316", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "http://revelation316.wordpress.com", + "avatar_URL": "https://0.gravatar.com/avatar/96d7a93f80f9998864aaadfad0431e94?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/96d7a93f80f9998864aaadfad0431e94", + "ip_address": false + }, + "date": "2023-03-27T11:32:35+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428906", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428906", + "content": "

Hi Maho-Art, this is all sounding a bit strange to me as well. Not sure what to do about it. Let me know if you choose another option? Would ya.
\nAre they saying they own our work, can send it off to any of the options they listed above, and make money? We get nothing? This is the part that\u2019s confusing me. Help!

\n", + "raw_content": "Hi Maho-Art, this is all sounding a bit strange to me as well. Not sure what to do about it. Let me know if you choose another option? Would ya.\nAre they saying they own our work, can send it off to any of the options they listed above, and make money? We get nothing? This is the part that\u2019s confusing me. Help!", + "status": "approved", + "parent": { + "ID": 428649, + "type": "comment", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428649" + }, + "type": "comment", + "like_count": 1, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428906", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428906/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428906/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428906/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428650, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 215503140, + "login": "", + "email": false, + "name": "Ana Daksina", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "http://troubadorofversepoetry.wordpress.com", + "avatar_URL": "https://1.gravatar.com/avatar/4c7a151b7b18ff4a58b9578e7f3221fe?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/4c7a151b7b18ff4a58b9578e7f3221fe", + "ip_address": false + }, + "date": "2023-03-18T15:09:42+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428650", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428650", + "content": "

Open source, transparency and collaboration, empowering, user control, diversity and inclusiveness ~ what wonderful words! \ud83d\udc4f\ud83d\udc4f\ud83d\udc4f

\n", + "raw_content": "Open source, transparency and collaboration, empowering, user control, diversity and inclusiveness ~ what wonderful words! \ud83d\udc4f\ud83d\udc4f\ud83d\udc4f", + "status": "approved", + "parent": false, + "type": "comment", + "like_count": 4, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428650", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428650/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428650/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428650/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428652, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 233096405, + "login": "", + "email": false, + "name": "Shine\u2728", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "http://shinelight8.wordpress.com", + "avatar_URL": "https://1.gravatar.com/avatar/15162221324d4b2aac50f32af5da6f71?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/15162221324d4b2aac50f32af5da6f71", + "ip_address": false + }, + "date": "2023-03-18T20:10:33+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428652", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428652", + "content": "

\ud83d\udc4d

\n", + "raw_content": "\ud83d\udc4d", + "status": "approved", + "parent": false, + "type": "comment", + "like_count": 2, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428652", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428652/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428652/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428652/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428657, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 184244113, + "login": "", + "email": false, + "name": "Shuvo Azam", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "http://shuvoart.com", + "avatar_URL": "https://1.gravatar.com/avatar/4ef0296d99aa0b7d268b37bc7929a522?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/4ef0296d99aa0b7d268b37bc7929a522", + "ip_address": false + }, + "date": "2023-03-19T09:51:39+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428657", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428657", + "content": "

\ud83d\udc4d

\n", + "raw_content": "\ud83d\udc4d", + "status": "approved", + "parent": false, + "type": "comment", + "like_count": 2, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428657", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428657/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428657/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428657/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428658, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 231768058, + "login": "", + "email": false, + "name": "hamadalikhan776", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "http://haadittinfo.wordpress.com", + "avatar_URL": "https://1.gravatar.com/avatar/ab10ed57c0c4d917ce35fe622530ab44?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/ab10ed57c0c4d917ce35fe622530ab44", + "ip_address": false + }, + "date": "2023-03-19T15:57:11+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428658", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428658", + "content": "

Fantastic effort, Nice idea

\n", + "raw_content": "Fantastic effort, Nice idea ", + "status": "approved", + "parent": false, + "type": "comment", + "like_count": 5, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428658", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428658/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428658/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428658/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428659, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 233115586, + "login": "", + "email": false, + "name": "Oftaane Asaffa", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "http://oftaanedata.wordpress.com", + "avatar_URL": "https://2.gravatar.com/avatar/b272d9679558047d88a8739174305535?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/b272d9679558047d88a8739174305535", + "ip_address": false + }, + "date": "2023-03-19T16:42:25+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428659", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428659", + "content": "

Awesome

\n", + "raw_content": "Awesome", + "status": "approved", + "parent": false, + "type": "comment", + "like_count": 3, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428659", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428659/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428659/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428659/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428668, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 171783, + "login": "", + "email": false, + "name": "Chris Till", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "http://cjtill.com", + "avatar_URL": "https://0.gravatar.com/avatar/c5c026eda0c03b4a38da5ceaad7433a0?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/c5c026eda0c03b4a38da5ceaad7433a0", + "ip_address": false + }, + "date": "2023-03-20T09:02:11+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428668", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428668", + "content": "

Pretty ridiculous to announce that it\u2019s available and not mention that it\u2019s in beta and only available to business customers at this time. So we all went to install it and were confused.

\n", + "raw_content": "Pretty ridiculous to announce that it\u2019s available and not mention that it\u2019s in beta and only available to business customers at this time. So we all went to install it and were confused.", + "status": "approved", + "parent": false, + "type": "comment", + "like_count": 2, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428668", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428668/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428668/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428668/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428679, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 42251266, + "login": "", + "email": false, + "name": "Carolyn S.", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "https://wordpress.com/learn/", + "avatar_URL": "https://2.gravatar.com/avatar/561be467af56cefa58e02782b7ac7510?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/561be467af56cefa58e02782b7ac7510", + "ip_address": false + }, + "date": "2023-03-20T18:55:31+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428679", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428679", + "content": "

We’re working on it! Since it hasn’t been integrated into WordPress.com yet (which will take some time), the only way to use this feature at the moment is to upgrade to the Business Plan or use a self-hosted WordPress site with a \u201ctraditional web host.\u201d

\n

We don\u2019t have a specific timeline for adding this functionality for all WordPress.com sites, but we would announce it here in our blog. Thanks for your patience!

\n", + "raw_content": "We're working on it! Since it hasn't been integrated into WordPress.com yet (which will take some time), the only way to use this feature at the moment is to upgrade to the Business Plan or use a self-hosted WordPress site with a \u201ctraditional web host.\u201d\r\n\r\nWe don\u2019t have a specific timeline for adding this functionality for all WordPress.com sites, but we would announce it here in our blog. Thanks for your patience!", + "status": "approved", + "parent": { + "ID": 428668, + "type": "comment", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428668" + }, + "type": "comment", + "like_count": 2, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428679", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428679/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428679/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428679/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428681, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 171783, + "login": "", + "email": false, + "name": "Chris Till", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "http://cjtill.com", + "avatar_URL": "https://0.gravatar.com/avatar/c5c026eda0c03b4a38da5ceaad7433a0?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/c5c026eda0c03b4a38da5ceaad7433a0", + "ip_address": false + }, + "date": "2023-03-20T19:17:25+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428681", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428681", + "content": "

That\u2019s fair enough. Happy to wait. I used to have a self-hosted site when I was a kid, but found it to be quite a lot of hassle in the end compared to wp.com, which I guess is the whole idea. And it definitely seems like a good idea to embrace this kind of open social system after what we\u2019ve seen happen at Twitter.

\n

Also, re-reading my comment, it comes across as a lot less polite than was intended. So I apologise for that.

\n", + "raw_content": "That\u2019s fair enough. Happy to wait. I used to have a self-hosted site when I was a kid, but found it to be quite a lot of hassle in the end compared to wp.com, which I guess is the whole idea. And it definitely seems like a good idea to embrace this kind of open social system after what we\u2019ve seen happen at Twitter.\n\nAlso, re-reading my comment, it comes across as a lot less polite than was intended. So I apologise for that.", + "status": "approved", + "parent": { + "ID": 428679, + "type": "comment", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428679" + }, + "type": "comment", + "like_count": 1, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428681", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428681/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428681/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428681/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428672, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 233157196, + "login": "", + "email": false, + "name": "isabella1892", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "https://filminginromania.com/", + "avatar_URL": "https://0.gravatar.com/avatar/0f5a9101e996fec29ee0a84853752a6a?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/0f5a9101e996fec29ee0a84853752a6a", + "ip_address": false + }, + "date": "2023-03-20T11:39:03+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428672", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428672", + "content": "

Awesome!

\n", + "raw_content": "Awesome!", + "status": "approved", + "parent": false, + "type": "comment", + "like_count": 2, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428672", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428672/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428672/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428672/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428677, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 216048251, + "login": "", + "email": false, + "name": "Anthony Friday", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "http://de8blog.wordpress.com", + "avatar_URL": "https://0.gravatar.com/avatar/6ff6c930f1804f8fd552d0dabd878c17?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/6ff6c930f1804f8fd552d0dabd878c17", + "ip_address": false + }, + "date": "2023-03-20T17:52:00+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428677", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428677", + "content": "

This is a good plug in.. Thanks so much for this.

\n", + "raw_content": "This is a good plug in.. Thanks so much for this. ", + "status": "approved", + "parent": false, + "type": "comment", + "like_count": 2, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428677", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428677/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428677/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428677/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428693, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 233176337, + "login": "", + "email": false, + "name": "Bonneywakgari", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "http://bonneyartcom.wordpress.com", + "avatar_URL": "https://1.gravatar.com/avatar/aaae4b6ea83519538de1dd8427be861b?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/aaae4b6ea83519538de1dd8427be861b", + "ip_address": false + }, + "date": "2023-03-21T10:25:47+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428693", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428693", + "content": "

Best

\n", + "raw_content": "Best", + "status": "approved", + "parent": false, + "type": "comment", + "like_count": 3, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428693", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428693/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428693/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428693/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428820, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 209800614, + "login": "", + "email": false, + "name": "butterflylovers2023@outlook.com", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "http://www.classicrock.wordpress.com", + "avatar_URL": "https://2.gravatar.com/avatar/51e3e8195bcca87501a234dc687a44ba?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/51e3e8195bcca87501a234dc687a44ba", + "ip_address": false + }, + "date": "2023-03-24T09:29:34+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428820", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428820", + "content": "

How do we add it onto our website? How much does it cost? Is it only in beta? Etc…

\n", + "raw_content": "How do we add it onto our website? How much does it cost? Is it only in beta? Etc...", + "status": "approved", + "parent": false, + "type": "comment", + "like_count": 2, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428820", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428820/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428820/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428820/likes/" + } + }, + "can_moderate": false, + "i_replied": false + }, + { + "ID": 428821, + "post": { + "ID": 51399, + "title": "Making the Social Web a Better Place: ActivityPub for WordPress Joins the Automattic Family\u00a0", + "type": "post", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399" + }, + "author": { + "ID": 1485049, + "login": "", + "email": false, + "name": "Fotis", + "first_name": "", + "last_name": "", + "nice_name": "", + "URL": "https://support.wordpress.com/", + "avatar_URL": "https://1.gravatar.com/avatar/75418515f7e3f3ca9728a5653aa2edef?s=96&d=retro", + "profile_URL": "https://en.gravatar.com/75418515f7e3f3ca9728a5653aa2edef", + "ip_address": false + }, + "date": "2023-03-24T11:04:16+00:00", + "URL": "http://en.blog.wordpress.com/2023/03/17/making-the-social-web-a-better-place-activitypub-for-wordpress-joins-the-automattic-family/#comment-428821", + "short_URL": "https://wp.me/pf2B5-dn1%23comment-428821", + "content": "

Hi, you can install it from the Plugins Marketplace. Here’s a direct link: https://wordpress.com/plugins/activitypub
\nThe plugin itself is free. However, to install it on your WordPress.com site, you’ll need to upgrade to the Business or eCommerce plan. Those are the only plans that allow the installation of plugins.

\n", + "raw_content": "Hi, you can install it from the Plugins Marketplace. Here's a direct link: https://wordpress.com/plugins/activitypub\nThe plugin itself is free. However, to install it on your WordPress.com site, you'll need to upgrade to the Business or eCommerce plan. Those are the only plans that allow the installation of plugins.", + "status": "approved", + "parent": { + "ID": 428820, + "type": "comment", + "link": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428820" + }, + "type": "comment", + "like_count": 1, + "i_like": false, + "meta": { + "links": { + "self": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428821", + "help": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428821/help", + "site": "https://public-api.wordpress.com/rest/v1.1/sites/3584907", + "post": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/posts/51399", + "replies": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428821/replies/", + "likes": "https://public-api.wordpress.com/rest/v1.1/sites/3584907/comments/428821/likes/" + } + }, + "can_moderate": false, + "i_replied": false + } + ] +} From ec46207c40fedf046aa29185f455d0fdbae0b34c Mon Sep 17 00:00:00 2001 From: David Christiandy <1299411+dvdchr@users.noreply.github.com> Date: Tue, 4 Apr 2023 17:22:41 +0700 Subject: [PATCH 28/64] Update prompt card on when user pulls to refresh --- .../Blog/My Site/MySiteViewController.swift | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift index edd857924de0..190fb2e44c09 100644 --- a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift +++ b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift @@ -486,6 +486,9 @@ class MySiteViewController: UIViewController, NoResultsViewHost { self.sitePickerViewController?.blogDetailHeaderView.blog = blog self.blogDashboardViewController?.reloadCardsLocally() } + + /// Update today's prompt if the blog has blogging prompts enabled. + fetchPrompt(for: blog) } WPAnalytics.track(.mySitePullToRefresh, properties: [WPAppAnalyticsKeyTabSource: section.analyticsDescription]) @@ -961,7 +964,13 @@ class MySiteViewController: UIViewController, NoResultsViewHost { guard FeatureFlag.bloggingPrompts.enabled, let blog = blog, blog.isAccessibleThroughWPCom(), - let promptsService = BloggingPromptsService(blog: blog) else { + let promptsService = BloggingPromptsService(blog: blog), + let siteID = blog.dotComID?.intValue else { + return + } + + let dashboardPersonalization = BlogDashboardPersonalizationService(siteID: siteID) + guard dashboardPersonalization.isEnabled(.prompts) else { return } From 4e32d3dcfd8b085b25d16808de6774711e1f7cfa Mon Sep 17 00:00:00 2001 From: Momo Ozawa Date: Tue, 4 Apr 2023 12:06:55 +0100 Subject: [PATCH 29/64] Add: activity log dashboard card --- .../DashboardActivityLogCardCell.swift | 34 +++++++++++++++++++ WordPress/WordPress.xcodeproj/project.pbxproj | 16 +++++++-- 2 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Activity Log/DashboardActivityLogCardCell.swift diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Activity Log/DashboardActivityLogCardCell.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Activity Log/DashboardActivityLogCardCell.swift new file mode 100644 index 000000000000..9d3fdc8ef19d --- /dev/null +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Activity Log/DashboardActivityLogCardCell.swift @@ -0,0 +1,34 @@ +import UIKit + +final class DashboardActivityLogCardCell: DashboardCollectionViewCell { + + private var blog: Blog? + private weak var presentingViewController: BlogDashboardViewController? + + // MARK: - Initializers + + override init(frame: CGRect) { + super.init(frame: frame) + setupView() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - View setup + + private func setupView() { + // FIXME: setup view + } + + // MARK: - BlogDashboardCardConfigurable + + func configure(blog: Blog, viewController: BlogDashboardViewController?, apiResponse: BlogDashboardRemoteEntity?) { + self.blog = blog + self.presentingViewController = viewController + + // FIXME: configure card using api response + // Expecting a list of type [Activity] + } +} diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index c70f5af44ce1..337be4930935 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -303,7 +303,6 @@ 0A9610F928B2E56300076EBA /* UserSuggestion+Comparable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A9610F828B2E56300076EBA /* UserSuggestion+Comparable.swift */; }; 0A9610FA28B2E56300076EBA /* UserSuggestion+Comparable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A9610F828B2E56300076EBA /* UserSuggestion+Comparable.swift */; }; 0A9687BC28B40771009DCD2F /* FullScreenCommentReplyViewModelMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A9687BB28B40771009DCD2F /* FullScreenCommentReplyViewModelMock.swift */; }; - 0C35FFF429CBA6DA00D224EB /* BlogDashboardPersonalizationViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C35FFF329CBA6DA00D224EB /* BlogDashboardPersonalizationViewModelTests.swift */; }; 0C35FFF129CB81F700D224EB /* BlogDashboardHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C35FFF029CB81F700D224EB /* BlogDashboardHelpers.swift */; }; 0C35FFF229CB81F700D224EB /* BlogDashboardHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C35FFF029CB81F700D224EB /* BlogDashboardHelpers.swift */; }; 0C35FFF429CBA6DA00D224EB /* BlogDashboardPersonalizationViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C35FFF329CBA6DA00D224EB /* BlogDashboardPersonalizationViewModelTests.swift */; }; @@ -3746,6 +3745,8 @@ FA681F8A25CA946B00DAA544 /* BaseRestoreStatusFailedViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA681F8825CA946B00DAA544 /* BaseRestoreStatusFailedViewController.swift */; }; FA6FAB3525EF7C5700666CED /* ReaderRelatedPostsSectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6FAB3425EF7C5700666CED /* ReaderRelatedPostsSectionHeaderView.swift */; }; FA6FAB4725EF7C6A00666CED /* ReaderRelatedPostsSectionHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = FA6FAB4625EF7C6A00666CED /* ReaderRelatedPostsSectionHeaderView.xib */; }; + FA70024C29DC3B5500E874FD /* DashboardActivityLogCardCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA70024B29DC3B5500E874FD /* DashboardActivityLogCardCell.swift */; }; + FA70024D29DC3B5500E874FD /* DashboardActivityLogCardCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA70024B29DC3B5500E874FD /* DashboardActivityLogCardCell.swift */; }; FA73D7D6278D9E5D00DF24B3 /* BlogDashboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA73D7D5278D9E5D00DF24B3 /* BlogDashboardViewController.swift */; }; FA73D7E52798765B00DF24B3 /* SitePickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA73D7E42798765B00DF24B3 /* SitePickerViewController.swift */; }; FA73D7E62798765B00DF24B3 /* SitePickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA73D7E42798765B00DF24B3 /* SitePickerViewController.swift */; }; @@ -5928,7 +5929,6 @@ 0A69300A28B5AA5E00E98DE1 /* FullScreenCommentReplyViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FullScreenCommentReplyViewModelTests.swift; sourceTree = ""; }; 0A9610F828B2E56300076EBA /* UserSuggestion+Comparable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UserSuggestion+Comparable.swift"; sourceTree = ""; }; 0A9687BB28B40771009DCD2F /* FullScreenCommentReplyViewModelMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FullScreenCommentReplyViewModelMock.swift; sourceTree = ""; }; - 0C35FFF329CBA6DA00D224EB /* BlogDashboardPersonalizationViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlogDashboardPersonalizationViewModelTests.swift; sourceTree = ""; }; 0C35FFF029CB81F700D224EB /* BlogDashboardHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlogDashboardHelpers.swift; sourceTree = ""; }; 0C35FFF329CBA6DA00D224EB /* BlogDashboardPersonalizationViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlogDashboardPersonalizationViewModelTests.swift; sourceTree = ""; }; 0C35FFF529CBB5DE00D224EB /* BlogDashboardEmptyStateCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlogDashboardEmptyStateCell.swift; sourceTree = ""; }; @@ -9049,6 +9049,7 @@ FA681F8825CA946B00DAA544 /* BaseRestoreStatusFailedViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseRestoreStatusFailedViewController.swift; sourceTree = ""; }; FA6FAB3425EF7C5700666CED /* ReaderRelatedPostsSectionHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReaderRelatedPostsSectionHeaderView.swift; sourceTree = ""; }; FA6FAB4625EF7C6A00666CED /* ReaderRelatedPostsSectionHeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ReaderRelatedPostsSectionHeaderView.xib; sourceTree = ""; }; + FA70024B29DC3B5500E874FD /* DashboardActivityLogCardCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DashboardActivityLogCardCell.swift; sourceTree = ""; }; FA73D7D5278D9E5D00DF24B3 /* BlogDashboardViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlogDashboardViewController.swift; sourceTree = ""; }; FA73D7E42798765B00DF24B3 /* SitePickerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SitePickerViewController.swift; sourceTree = ""; }; FA73D7E827987BA500DF24B3 /* SitePickerViewController+SiteIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SitePickerViewController+SiteIcon.swift"; sourceTree = ""; }; @@ -13427,6 +13428,7 @@ 8B4DDF23278F3AED0022494D /* Cards */ = { isa = PBXGroup; children = ( + FA70024E29DC3B6100E874FD /* Activity Log */, 0118968D29D1EAC900D34BA9 /* Domains */, FA98B61429A3B71E0071AAE8 /* Blaze */, DCFC097129D3544600277ECB /* Domains */, @@ -17525,6 +17527,14 @@ path = "Restore Status Failed"; sourceTree = ""; }; + FA70024E29DC3B6100E874FD /* Activity Log */ = { + isa = PBXGroup; + children = ( + FA70024B29DC3B5500E874FD /* DashboardActivityLogCardCell.swift */, + ); + path = "Activity Log"; + sourceTree = ""; + }; FA73D7D7278D9E6300DF24B3 /* Blog Dashboard */ = { isa = PBXGroup; children = ( @@ -20652,6 +20662,7 @@ FA77E02A1BE17CFC006D45E0 /* ThemeBrowserHeaderView.swift in Sources */, 9874767321963D330080967F /* SiteStatsInformation.swift in Sources */, 738B9A5821B85CF20005062B /* TitleSubtitleHeader.swift in Sources */, + FA70024C29DC3B5500E874FD /* DashboardActivityLogCardCell.swift in Sources */, 17C64BD2248E26A200AF09D7 /* AppAppearance.swift in Sources */, 3F09CCA82428FF3300D00A8C /* ReaderTabViewController.swift in Sources */, 8B1E62D625758AAF009A0F80 /* ActivityTypeSelectorViewController.swift in Sources */, @@ -25086,6 +25097,7 @@ 837B49DE283C2AE80061A657 /* BloggingPromptSettingsReminderDays+CoreDataProperties.swift in Sources */, FABB25BD2602FC2C00C8785C /* OtherAndTotalViewsCount+CoreDataProperties.swift in Sources */, 3FAF9CC326D02FC500268EA2 /* DomainsDashboardView.swift in Sources */, + FA70024D29DC3B5500E874FD /* DashboardActivityLogCardCell.swift in Sources */, F48D44BB2989A9070051EAA6 /* ReaderSiteService.swift in Sources */, FABB25BE2602FC2C00C8785C /* SettingsPickerViewController.swift in Sources */, FABB25BF2602FC2C00C8785C /* WPTableImageSource.m in Sources */, From e9a1668418d39d3947c2aff9bf96c5d1ca91010a Mon Sep 17 00:00:00 2001 From: Povilas Staskus Date: Tue, 4 Apr 2023 14:47:19 +0300 Subject: [PATCH 30/64] Domains Dashboard Card: Presentation & Analytics (#20424) * Updated notes * Remote Domain Dashboard Card from release notes * Created DomainsDashboardCardTracker * Track DomainsDashboardCard events with the card position Tracking position using tag of the UIView and adding a wrapper to BlogDashboardCardConfigurable protocol * Hide DomainsDashboardCard after tapping hide CTA * Make DomainsDashboard presentation reusable Spit into: - DomainsDashboardFactory - that creates UIViewController from SwiftUI View - DomainsDashboardCoordinator - that builds and presents the view, exposing itself to obj-c * Present domains view from the cell * Update RELEASE-NOTES.txt * Update feature flag to dashboard_card_domain --------- Co-authored-by: sla8c --- RELEASE-NOTES.txt | 1 + .../Utility/Analytics/WPAnalyticsEvent.swift | 13 +++++++ .../BuildInformation/RemoteFeatureFlag.swift | 12 +++---- .../BlogDashboardViewController.swift | 4 --- .../Cards/BlogDashboardCardConfigurable.swift | 17 ++++++++++ .../Domains/DashboardDomainsCardCell.swift | 20 ++++++++--- .../Domains/DomainsDashboardCardHelper.swift | 2 +- .../Domains/DomainsDashboardCardTracker.swift | 20 +++++++++++ .../ViewModel/BlogDashboardViewModel.swift | 3 +- .../Blog Details/BlogDetailsViewController.m | 10 ++---- .../Views/DomainsDashboardCoordinator.swift | 13 +++++++ .../Views/DomainsDashboardFactory.swift | 10 ++++++ WordPress/WordPress.xcodeproj/project.pbxproj | 34 ++++++++++++++----- 13 files changed, 127 insertions(+), 32 deletions(-) create mode 100644 WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/BlogDashboardCardConfigurable.swift create mode 100644 WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Domains/DomainsDashboardCardTracker.swift create mode 100644 WordPress/Classes/ViewRelated/Domains/Views/DomainsDashboardCoordinator.swift create mode 100644 WordPress/Classes/ViewRelated/Domains/Views/DomainsDashboardFactory.swift diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 75faba46a703..6d15cf5ca451 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -1,6 +1,7 @@ 22.2 ----- +* [**] [Jetpack-only] Added a dashboard card for purchasing domains. [#20424] 22.1 ----- diff --git a/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift b/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift index 5a094b521e41..4cc5ebe79920 100644 --- a/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift +++ b/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift @@ -477,6 +477,11 @@ import Foundation case jetpackPluginConnectUserAccountFailed case jetpackPluginConnectUserAccountCompleted + // Domains Dashboard Card + case directDomainsPurchaseDashboardCardShown + case directDomainsPurchaseDashboardCardTapped + case directDomainsPurchaseDashboardCardHidden + /// A String that represents the event var value: String { switch self { @@ -1298,6 +1303,14 @@ import Foundation case .jetpackPluginConnectUserAccountCompleted: return "jetpack_plugin_connect_user_account_completed" + // Domains Dashboard Card + case .directDomainsPurchaseDashboardCardShown: + return "direct_domains_purchase_dashboard_card_shown" + case .directDomainsPurchaseDashboardCardHidden: + return "direct_domains_purchase_dashboard_card_hidden" + case .directDomainsPurchaseDashboardCardTapped: + return "direct_domains_purchase_dashboard_card_tapped" + } // END OF SWITCH } diff --git a/WordPress/Classes/Utility/BuildInformation/RemoteFeatureFlag.swift b/WordPress/Classes/Utility/BuildInformation/RemoteFeatureFlag.swift index 100cea1126ec..af47c60a06ec 100644 --- a/WordPress/Classes/Utility/BuildInformation/RemoteFeatureFlag.swift +++ b/WordPress/Classes/Utility/BuildInformation/RemoteFeatureFlag.swift @@ -13,7 +13,7 @@ enum RemoteFeatureFlag: Int, CaseIterable { case wordPressSupportForum case blaze case wordPressIndividualPluginSupport - case directDomainsPurchaseDashboardCard + case domainsDashboardCard case pagesDashboardCard case activityLogDashboardCard case sdkLessGoogleSignIn @@ -42,7 +42,7 @@ enum RemoteFeatureFlag: Int, CaseIterable { return false case .wordPressIndividualPluginSupport: return AppConfiguration.isWordPress - case .directDomainsPurchaseDashboardCard: + case .domainsDashboardCard: return false case .pagesDashboardCard: return false @@ -78,8 +78,8 @@ enum RemoteFeatureFlag: Int, CaseIterable { return "blaze" case .wordPressIndividualPluginSupport: return "wp_individual_plugin_overlay" - case .directDomainsPurchaseDashboardCard: - return "direct_domain_purchase_dashboard_card" + case .domainsDashboardCard: + return "dashboard_card_domain" case .pagesDashboardCard: return "dashboard_card_pages" case .activityLogDashboardCard: @@ -113,8 +113,8 @@ enum RemoteFeatureFlag: Int, CaseIterable { return "Blaze" case .wordPressIndividualPluginSupport: return "Jetpack Individual Plugin Support for WordPress" - case .directDomainsPurchaseDashboardCard: - return "Direct Domains Purchase Dashboard Card" + case .domainsDashboardCard: + return "Domains Dashboard Card" case .pagesDashboardCard: return "Pages Dashboard Card" case .activityLogDashboardCard: diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/BlogDashboardViewController.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/BlogDashboardViewController.swift index 5d4dbccf971f..21aa6207e530 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/BlogDashboardViewController.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/BlogDashboardViewController.swift @@ -3,10 +3,6 @@ import WordPressShared typealias DashboardCollectionViewCell = UICollectionViewCell & Reusable & BlogDashboardCardConfigurable -protocol BlogDashboardCardConfigurable { - func configure(blog: Blog, viewController: BlogDashboardViewController?, apiResponse: BlogDashboardRemoteEntity?) -} - final class BlogDashboardViewController: UIViewController { var blog: Blog diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/BlogDashboardCardConfigurable.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/BlogDashboardCardConfigurable.swift new file mode 100644 index 000000000000..e2536e9310ec --- /dev/null +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/BlogDashboardCardConfigurable.swift @@ -0,0 +1,17 @@ +import Foundation + +protocol BlogDashboardCardConfigurable { + func configure(blog: Blog, viewController: BlogDashboardViewController?, apiResponse: BlogDashboardRemoteEntity?) + var row: Int { get set } +} + +extension BlogDashboardCardConfigurable where Self: UIView { + var row: Int { + get { + return tag + } + set { + tag = newValue + } + } +} diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Domains/DashboardDomainsCardCell.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Domains/DashboardDomainsCardCell.swift index 01801b0e10e2..6b3cc5361e7a 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Domains/DashboardDomainsCardCell.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Domains/DashboardDomainsCardCell.swift @@ -10,18 +10,27 @@ class DashboardDomainsCardCell: DashboardCollectionViewCell { private lazy var cardViewModel: DashboardCardViewModel = { let onViewTap: () -> Void = { [weak self] in - guard let presentingViewController = self?.presentingViewController, - let blog = self?.blog else { + guard let self, + let presentingViewController = self.presentingViewController?.mySiteViewController, + let blog = self.blog else { return } - // TODO: implement viewTap actions + + DomainsDashboardCoordinator.presentDomainsDashboard(with: presentingViewController, + source: Strings.source, + blog: blog) + DomainsDashboardCardTracker.trackDirectDomainsPurchaseDashboardCardTapped(in: self.row) } let onEllipsisTap: () -> Void = { [weak self] in } let onHideThisTap: UIActionHandler = { [weak self] _ in - self?.presentingViewController?.reloadCardsLocally() + guard let self else { return } + + DomainsDashboardCardHelper.hideCard(for: self.blog) + DomainsDashboardCardTracker.trackDirectDomainsPurchaseDashboardCardHidden(in: self.row) + self.presentingViewController?.reloadCardsLocally() } return DashboardCardViewModel(onViewTap: onViewTap, @@ -127,6 +136,8 @@ class DashboardDomainsCardCell: DashboardCollectionViewCell { func configure(blog: Blog, viewController: BlogDashboardViewController?, apiResponse: BlogDashboardRemoteEntity?) { self.blog = blog self.presentingViewController = viewController + + DomainsDashboardCardTracker.trackDirectDomainsPurchaseDashboardCardShown(in: row) } } @@ -161,6 +172,7 @@ extension DashboardDomainsCardCell { static let hideThis = NSLocalizedString("domain.dashboard.card.menu.hide", value: "Hide this", comment: "Title for a menu action in the context menu on the Jetpack install card.") + static let source = "domains_dashboard_card" } } diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Domains/DomainsDashboardCardHelper.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Domains/DomainsDashboardCardHelper.swift index 1aef027603f2..f7b442690109 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Domains/DomainsDashboardCardHelper.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Domains/DomainsDashboardCardHelper.swift @@ -6,7 +6,7 @@ final class DomainsDashboardCardHelper { static func shouldShowCard( for blog: Blog, isJetpack: Bool = AppConfiguration.isJetpack, - featureFlagEnabled: Bool = RemoteFeatureFlag.directDomainsPurchaseDashboardCard.enabled() + featureFlagEnabled: Bool = RemoteFeatureFlag.domainsDashboardCard.enabled() ) -> Bool { guard isJetpack, featureFlagEnabled else { return false diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Domains/DomainsDashboardCardTracker.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Domains/DomainsDashboardCardTracker.swift new file mode 100644 index 000000000000..c57d16c07f38 --- /dev/null +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Domains/DomainsDashboardCardTracker.swift @@ -0,0 +1,20 @@ +import Foundation + +struct DomainsDashboardCardTracker { + private static let positionKey = "position_index" + + static func trackDirectDomainsPurchaseDashboardCardShown(in position: Int) { + let properties = [positionKey: position] + WPAnalytics.track(.directDomainsPurchaseDashboardCardShown, properties: properties) + } + + static func trackDirectDomainsPurchaseDashboardCardHidden(in position: Int) { + let properties = [positionKey: position] + WPAnalytics.track(.directDomainsPurchaseDashboardCardHidden, properties: properties) + } + + static func trackDirectDomainsPurchaseDashboardCardTapped(in position: Int) { + let properties = [positionKey: position] + WPAnalytics.track(.directDomainsPurchaseDashboardCardTapped, properties: properties) + } +} diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/ViewModel/BlogDashboardViewModel.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/ViewModel/BlogDashboardViewModel.swift index 126e56e82b29..61b9a18babf1 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/ViewModel/BlogDashboardViewModel.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/ViewModel/BlogDashboardViewModel.swift @@ -59,7 +59,8 @@ class BlogDashboardViewModel { case .cards(let cardModel): let cellType = cardModel.cardType.cell let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellType.defaultReuseID, for: indexPath) - if let cellConfigurable = cell as? BlogDashboardCardConfigurable { + if var cellConfigurable = cell as? BlogDashboardCardConfigurable { + cellConfigurable.row = indexPath.row cellConfigurable.configure(blog: blog, viewController: viewController, apiResponse: cardModel.apiResponse) } return cell diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController.m b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController.m index bef7de1db383..984b9d01c024 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController.m +++ b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController.m @@ -1605,13 +1605,9 @@ - (void)showSettingsFromSource:(BlogDetailsNavigationSource)source - (void)showDomainsFromSource:(BlogDetailsNavigationSource)source { - [WPAnalytics trackEvent:WPAnalyticsEventDomainsDashboardViewed - properties:@{WPAppAnalyticsKeyTapSource: [self propertiesStringForSource:source]} - blog:self.blog]; - - UIViewController *controller = [self makeDomainsDashboardViewController]; - controller.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeNever; - [self.presentationDelegate presentBlogDetailsViewController:controller]; + [DomainsDashboardCoordinator presentDomainsDashboardWithPresenter:self.presentationDelegate + source:[self propertiesStringForSource:source] + blog:self.blog]; } -(void)showJetpackSettings diff --git a/WordPress/Classes/ViewRelated/Domains/Views/DomainsDashboardCoordinator.swift b/WordPress/Classes/ViewRelated/Domains/Views/DomainsDashboardCoordinator.swift new file mode 100644 index 000000000000..c46e77332706 --- /dev/null +++ b/WordPress/Classes/ViewRelated/Domains/Views/DomainsDashboardCoordinator.swift @@ -0,0 +1,13 @@ +import UIKit + +@objc final class DomainsDashboardCoordinator: NSObject { + @objc(presentDomainsDashboardWithPresenter:source:blog:) + static func presentDomainsDashboard(with presenter: BlogDetailsPresentationDelegate, + source: String, + blog: Blog) { + WPAnalytics.trackEvent(.domainsDashboardViewed, properties: [WPAppAnalyticsKeySource: source], blog: blog) + let controller = DomainsDashboardFactory.makeDomainsDashboardViewController(blog: blog) + controller.navigationItem.largeTitleDisplayMode = .never + presenter.presentBlogDetailsViewController(controller) + } +} diff --git a/WordPress/Classes/ViewRelated/Domains/Views/DomainsDashboardFactory.swift b/WordPress/Classes/ViewRelated/Domains/Views/DomainsDashboardFactory.swift new file mode 100644 index 000000000000..726d228a0659 --- /dev/null +++ b/WordPress/Classes/ViewRelated/Domains/Views/DomainsDashboardFactory.swift @@ -0,0 +1,10 @@ +import Foundation +import SwiftUI + +struct DomainsDashboardFactory { + static func makeDomainsDashboardViewController(blog: Blog) -> UIViewController { + let viewController = UIHostingController(rootView: DomainsDashboardView(blog: blog)) + viewController.extendedLayoutIncludesOpaqueBars = true + return viewController + } +} diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index c70f5af44ce1..5d8125295367 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -139,6 +139,14 @@ 0118968F29D1EB5E00D34BA9 /* DomainsDashboardCardHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0118968E29D1EB5E00D34BA9 /* DomainsDashboardCardHelper.swift */; }; 0118969129D1F2FE00D34BA9 /* DomainsDashboardCardHelperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0118969029D1F2FE00D34BA9 /* DomainsDashboardCardHelperTests.swift */; }; 0118969229D2CA6F00D34BA9 /* DomainsDashboardCardHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0118968E29D1EB5E00D34BA9 /* DomainsDashboardCardHelper.swift */; }; + 0118969F29D30CAD00D34BA9 /* DomainsDashboardCardTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0118969E29D30CAD00D34BA9 /* DomainsDashboardCardTracker.swift */; }; + 011896A029D30CAD00D34BA9 /* DomainsDashboardCardTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0118969E29D30CAD00D34BA9 /* DomainsDashboardCardTracker.swift */; }; + 011896A229D5AF0700D34BA9 /* BlogDashboardCardConfigurable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011896A129D5AF0700D34BA9 /* BlogDashboardCardConfigurable.swift */; }; + 011896A329D5AF0700D34BA9 /* BlogDashboardCardConfigurable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011896A129D5AF0700D34BA9 /* BlogDashboardCardConfigurable.swift */; }; + 011896A529D5B72500D34BA9 /* DomainsDashboardCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011896A429D5B72500D34BA9 /* DomainsDashboardCoordinator.swift */; }; + 011896A629D5B72500D34BA9 /* DomainsDashboardCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011896A429D5B72500D34BA9 /* DomainsDashboardCoordinator.swift */; }; + 011896A829D5BBB400D34BA9 /* DomainsDashboardFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011896A729D5BBB400D34BA9 /* DomainsDashboardFactory.swift */; }; + 011896A929D5BBB400D34BA9 /* DomainsDashboardFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011896A729D5BBB400D34BA9 /* DomainsDashboardFactory.swift */; }; 0141929C2983F0A300CAEDB0 /* SupportConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0141929B2983F0A300CAEDB0 /* SupportConfiguration.swift */; }; 0141929D2983F0A300CAEDB0 /* SupportConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0141929B2983F0A300CAEDB0 /* SupportConfiguration.swift */; }; 014192A02983F5E800CAEDB0 /* SupportConfigurationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0141929F2983F5E800CAEDB0 /* SupportConfigurationTests.swift */; }; @@ -5715,6 +5723,10 @@ 0107E1862900065400DE87DB /* LocalizationConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LocalizationConfiguration.swift; sourceTree = ""; }; 0118968E29D1EB5E00D34BA9 /* DomainsDashboardCardHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomainsDashboardCardHelper.swift; sourceTree = ""; }; 0118969029D1F2FE00D34BA9 /* DomainsDashboardCardHelperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomainsDashboardCardHelperTests.swift; sourceTree = ""; }; + 0118969E29D30CAD00D34BA9 /* DomainsDashboardCardTracker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainsDashboardCardTracker.swift; sourceTree = ""; }; + 011896A129D5AF0700D34BA9 /* BlogDashboardCardConfigurable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlogDashboardCardConfigurable.swift; sourceTree = ""; }; + 011896A429D5B72500D34BA9 /* DomainsDashboardCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomainsDashboardCoordinator.swift; sourceTree = ""; }; + 011896A729D5BBB400D34BA9 /* DomainsDashboardFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomainsDashboardFactory.swift; sourceTree = ""; }; 011A2815DB0DE7E3973CBC0E /* Pods-Apps-Jetpack.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Apps-Jetpack.release.xcconfig"; path = "../Pods/Target Support Files/Pods-Apps-Jetpack/Pods-Apps-Jetpack.release.xcconfig"; sourceTree = ""; }; 0141929B2983F0A300CAEDB0 /* SupportConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SupportConfiguration.swift; sourceTree = ""; }; 0141929F2983F5E800CAEDB0 /* SupportConfigurationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SupportConfigurationTests.swift; sourceTree = ""; }; @@ -9563,7 +9575,9 @@ 0118968D29D1EAC900D34BA9 /* Domains */ = { isa = PBXGroup; children = ( + DCFC097229D3549C00277ECB /* DashboardDomainsCardCell.swift */, 0118968E29D1EB5E00D34BA9 /* DomainsDashboardCardHelper.swift */, + 0118969E29D30CAD00D34BA9 /* DomainsDashboardCardTracker.swift */, ); path = Domains; sourceTree = ""; @@ -11180,6 +11194,8 @@ 3F3DD0B126FD176800F5F121 /* PresentationCard.swift */, 3F3DD0AE26FCDA3100F5F121 /* PresentationButton.swift */, 3FA62FD226FE2E4B0020793A /* ShapeWithTextView.swift */, + 011896A429D5B72500D34BA9 /* DomainsDashboardCoordinator.swift */, + 011896A729D5BBB400D34BA9 /* DomainsDashboardFactory.swift */, ); path = Views; sourceTree = ""; @@ -13429,7 +13445,6 @@ children = ( 0118968D29D1EAC900D34BA9 /* Domains */, FA98B61429A3B71E0071AAE8 /* Blaze */, - DCFC097129D3544600277ECB /* Domains */, FE18495627F5ACA400D26879 /* Prompts */, 8B92D69427CD51CE001F5371 /* Ghost */, FAA4012F27B405DF009E1137 /* Quick Actions */, @@ -13438,6 +13453,7 @@ 8B4DDF24278F3AF60022494D /* Posts */, 83796698299C048E004A92B9 /* DashboardJetpackInstallCardCell.swift */, 0CB4057B29C8DEE1008EED0A /* BlogDashboardPersonalizeCardCell.swift */, + 011896A129D5AF0700D34BA9 /* BlogDashboardCardConfigurable.swift */, 0C35FFF529CBB5DE00D224EB /* BlogDashboardEmptyStateCell.swift */, ); path = Cards; @@ -16109,14 +16125,6 @@ path = Helpers; sourceTree = ""; }; - DCFC097129D3544600277ECB /* Domains */ = { - isa = PBXGroup; - children = ( - DCFC097229D3549C00277ECB /* DashboardDomainsCardCell.swift */, - ); - path = Domains; - sourceTree = ""; - }; E10520591F2B1CD400A948F6 /* 61-62 */ = { isa = PBXGroup; children = ( @@ -21273,6 +21281,7 @@ 46D6114F2555DAED00B0B7BB /* SiteCreationAnalyticsHelper.swift in Sources */, 98A047722821CEBF001B4E2D /* BloggingPromptsViewController.swift in Sources */, B54866CA1A0D7042004AC79D /* NSAttributedString+Helpers.swift in Sources */, + 011896A229D5AF0700D34BA9 /* BlogDashboardCardConfigurable.swift in Sources */, C81CCD81243BF7A600A83E27 /* TenorService.swift in Sources */, 8B51844525893F140085488D /* FilterBarView.swift in Sources */, E105205B1F2B1CF400A948F6 /* BlogToBlogMigration_61_62.swift in Sources */, @@ -21315,6 +21324,7 @@ F1ADCAF7241FEF0C00F150D2 /* AtomicAuthenticationService.swift in Sources */, 5703A4C622C003DC0028A343 /* WPStyleGuide+Posts.swift in Sources */, DC8F61F727032B3F0087AC5D /* TimeZoneFormatter.swift in Sources */, + 0118969F29D30CAD00D34BA9 /* DomainsDashboardCardTracker.swift in Sources */, 91138455228373EB00FB02B7 /* GutenbergVideoUploadProcessor.swift in Sources */, FA73D7E927987BA500DF24B3 /* SitePickerViewController+SiteIcon.swift in Sources */, E125445612BF5B3900D87A0A /* PostCategory.m in Sources */, @@ -21534,6 +21544,7 @@ 9801E682274EEBC4002FDDB6 /* ReaderDetailCommentsHeader.swift in Sources */, C352870527FDD35C004E2E51 /* SiteNameStep.swift in Sources */, B5EFB1C21B31B98E007608A3 /* NotificationSettingsService.swift in Sources */, + 011896A829D5BBB400D34BA9 /* DomainsDashboardFactory.swift in Sources */, 5903AE1B19B60A98009D5354 /* WPButtonForNavigationBar.m in Sources */, 1717139F265FE59700F3A022 /* ButtonStyles.swift in Sources */, C3FF78E828354A91008FA600 /* SiteDesignSectionLoader.swift in Sources */, @@ -21728,6 +21739,7 @@ 8BBC778B27B5531700DBA087 /* BlogDashboardPersistence.swift in Sources */, F5E29038243FAB0300C19CA5 /* FilterTableData.swift in Sources */, E6A3384C1BB08E3F00371587 /* ReaderGapMarker.m in Sources */, + 011896A529D5B72500D34BA9 /* DomainsDashboardCoordinator.swift in Sources */, E1CFC1571E0AC8FF001DF9E9 /* Pattern.swift in Sources */, 930F09171C7D110E00995926 /* ShareExtensionService.swift in Sources */, F5A34BCC25DF244F00C9654B /* KanvasCameraCustomUI.swift in Sources */, @@ -23942,6 +23954,7 @@ FEF4DC5628439357003806BE /* ReminderScheduleCoordinator.swift in Sources */, FABB225F2602FC2C00C8785C /* MediaURLExporter.swift in Sources */, FABB22602602FC2C00C8785C /* WordPress.xcdatamodeld in Sources */, + 011896A629D5B72500D34BA9 /* DomainsDashboardCoordinator.swift in Sources */, 93CDC72226CD342900C8A3A8 /* DestructiveAlertHelper.swift in Sources */, FABB22612602FC2C00C8785C /* WPStyleGuide+AlertView.swift in Sources */, DC76668426FD9AC9009254DD /* TimeZoneRow.swift in Sources */, @@ -24055,6 +24068,7 @@ 4A9948E5297624EF006282A9 /* Blog+Creation.swift in Sources */, 8BBBCE712717651200B277AC /* JetpackModuleHelper.swift in Sources */, FABB22B62602FC2C00C8785C /* WPAndDeviceMediaLibraryDataSource.m in Sources */, + 011896A329D5AF0700D34BA9 /* BlogDashboardCardConfigurable.swift in Sources */, FABB22B72602FC2C00C8785C /* SettingsListEditorViewController.swift in Sources */, 80C523A82995D73C00B1C14B /* BlazeWebViewModel.swift in Sources */, 982DDF97263238A6002B3904 /* LikeUserPreferredBlog+CoreDataProperties.swift in Sources */, @@ -24656,6 +24670,7 @@ 837B49DC283C2AE80061A657 /* BloggingPromptSettingsReminderDays+CoreDataClass.swift in Sources */, FABB247C2602FC2C00C8785C /* RegisterDomainDetailsViewController+LocalizedStrings.swift in Sources */, FABB247D2602FC2C00C8785C /* GutenbergLayoutPickerViewController.swift in Sources */, + 011896A929D5BBB400D34BA9 /* DomainsDashboardFactory.swift in Sources */, FABB247E2602FC2C00C8785C /* SiteInformation.swift in Sources */, FABB247F2602FC2C00C8785C /* StockPhotosPageable.swift in Sources */, FABB24802602FC2C00C8785C /* JetpackRestoreStatusViewController.swift in Sources */, @@ -24757,6 +24772,7 @@ FABB24C62602FC2C00C8785C /* UntouchableWindow.swift in Sources */, FABB24C72602FC2C00C8785C /* WPProgressTableViewCell.m in Sources */, FEA7949126DF7F3700CEC520 /* WPStyleGuide+CommentDetail.swift in Sources */, + 011896A029D30CAD00D34BA9 /* DomainsDashboardCardTracker.swift in Sources */, FABB24C82602FC2C00C8785C /* StockPhotosPicker.swift in Sources */, FABB24CA2602FC2C00C8785C /* UnifiedPrologueViewController.swift in Sources */, FABB24CC2602FC2C00C8785C /* CollapsableHeaderViewController.swift in Sources */, From 02ea5edaad1f48439e6b8ed86da33c4f3830e4a6 Mon Sep 17 00:00:00 2001 From: Momo Ozawa Date: Tue, 4 Apr 2023 12:52:43 +0100 Subject: [PATCH 31/64] Add: show activity log card --- .../Activity Log/DashboardActivityLogCardCell.swift | 13 +++++++++++++ .../Blog/Blog Dashboard/DashboardCard.swift | 7 +++++++ 2 files changed, 20 insertions(+) diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Activity Log/DashboardActivityLogCardCell.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Activity Log/DashboardActivityLogCardCell.swift index 9d3fdc8ef19d..adc1e5860904 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Activity Log/DashboardActivityLogCardCell.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Activity Log/DashboardActivityLogCardCell.swift @@ -32,3 +32,16 @@ final class DashboardActivityLogCardCell: DashboardCollectionViewCell { // Expecting a list of type [Activity] } } + +extension DashboardActivityLogCardCell { + + static func shouldShowCard(for blog: Blog) -> Bool { + guard RemoteFeatureFlag.activityLogDashboardCard.enabled(), + blog.supports(.activity), + !blog.isWPForTeams() else { + return false + } + + return true + } +} diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift index cb7965bdd9a0..f927d113ee7a 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift @@ -15,6 +15,7 @@ enum DashboardCard: String, CaseIterable { case todaysStats = "todays_stats" case draftPosts case scheduledPosts + case activityLog case nextPost = "create_next" case createPost = "create_first" case jetpackBadge @@ -58,6 +59,8 @@ enum DashboardCard: String, CaseIterable { return BlogDashboardEmptyStateCell.self case .personalize: return BlogDashboardPersonalizeCardCell.self + case .activityLog: + return DashboardActivityLogCardCell.self } } @@ -98,6 +101,8 @@ enum DashboardCard: String, CaseIterable { return false // Controlled manually based on other cards visibility case .personalize: return FeatureFlag.personalizeHomeTab.enabled + case .activityLog: + return DashboardActivityLogCardCell.shouldShowCard(for: blog) && shouldShowRemoteCard(apiResponse: apiResponse) } } @@ -116,6 +121,8 @@ enum DashboardCard: String, CaseIterable { return apiResponse.hasNoDraftsOrScheduled && !apiResponse.hasPublished case .todaysStats: return true + case .activityLog: + return true // FIXME: hide card if there's no activities default: return false } From 4bd359878f01c978093d48f16424bd4e6edea32f Mon Sep 17 00:00:00 2001 From: Momo Ozawa Date: Tue, 4 Apr 2023 13:44:18 +0100 Subject: [PATCH 32/64] Add: show activity log card in personalize screen --- .../ViewRelated/Blog/Blog Dashboard/DashboardCard.swift | 3 ++- .../Service/BlogDashboardPersonalizationService.swift | 2 ++ .../BlogDashboardPersonalizationViewModel.swift | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift index f927d113ee7a..c3156db380a4 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift @@ -134,7 +134,8 @@ enum DashboardCard: String, CaseIterable { .draftPosts, .scheduledPosts, .blaze, - .prompts + .prompts, + .activityLog ] /// Includes all cards that should be fetched from the backend diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardPersonalizationService.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardPersonalizationService.swift index 2e2604ed0ebb..4126c83b751b 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardPersonalizationService.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardPersonalizationService.swift @@ -52,6 +52,8 @@ private func makeKey(for card: DashboardCard) -> String? { return "prompts-enabled-site-settings" case .domainsDashboardCard: return "domains-dashboard-card-enabled-site-settings" + case .activityLog: + return "activity-log-card-enabled-site-settings" case .quickStart, .jetpackBadge, .jetpackInstall, .nextPost, .createPost, .failure, .ghost, .personalize, .empty: return nil } diff --git a/WordPress/Classes/ViewRelated/Blog/BlogPersonalization/BlogDashboardPersonalizationViewModel.swift b/WordPress/Classes/ViewRelated/Blog/BlogPersonalization/BlogDashboardPersonalizationViewModel.swift index 2566701cbb08..1948129730ec 100644 --- a/WordPress/Classes/ViewRelated/Blog/BlogPersonalization/BlogDashboardPersonalizationViewModel.swift +++ b/WordPress/Classes/ViewRelated/Blog/BlogPersonalization/BlogDashboardPersonalizationViewModel.swift @@ -44,6 +44,8 @@ private extension DashboardCard { return NSLocalizedString("personalizeHome.dashboardCard.draftPosts", value: "Draft posts", comment: "Card title for the pesonalization menu") case .scheduledPosts: return NSLocalizedString("personalizeHome.dashboardCard.scheduledPosts", value: "Scheduled posts", comment: "Card title for the pesonalization menu") + case .activityLog: + return NSLocalizedString("personalizeHome.dashboardCard.activityLog", value: "Recent activity", comment: "Card title for the pesonalization menu") case .quickStart, .nextPost, .createPost, .ghost, .failure, .personalize, .jetpackBadge, .jetpackInstall, .domainsDashboardCard, .empty: assertionFailure("\(self) card should not appear in the personalization menus") return "" // These cards don't appear in the personalization menus From 80d1c02073baa767a7249c70ade36f0789564726 Mon Sep 17 00:00:00 2001 From: Momo Ozawa Date: Tue, 4 Apr 2023 13:45:12 +0100 Subject: [PATCH 33/64] Add: show activity log card title --- .../DashboardActivityLogCardCell.swift | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Activity Log/DashboardActivityLogCardCell.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Activity Log/DashboardActivityLogCardCell.swift index adc1e5860904..8dca7b97aae9 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Activity Log/DashboardActivityLogCardCell.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Activity Log/DashboardActivityLogCardCell.swift @@ -5,6 +5,18 @@ final class DashboardActivityLogCardCell: DashboardCollectionViewCell { private var blog: Blog? private weak var presentingViewController: BlogDashboardViewController? + // MARK: - Views + + private lazy var cardFrameView: BlogDashboardCardFrameView = { + let frameView = BlogDashboardCardFrameView() + frameView.translatesAutoresizingMaskIntoConstraints = false + frameView.title = Strings.title + frameView.onEllipsisButtonTap = { + // FIXME: Track event + } + return frameView + }() + // MARK: - Initializers override init(frame: CGRect) { @@ -19,7 +31,8 @@ final class DashboardActivityLogCardCell: DashboardCollectionViewCell { // MARK: - View setup private func setupView() { - // FIXME: setup view + contentView.addSubview(cardFrameView) + contentView.pinSubviewToAllEdges(cardFrameView, priority: .defaultHigh) } // MARK: - BlogDashboardCardConfigurable @@ -45,3 +58,12 @@ extension DashboardActivityLogCardCell { return true } } + +extension DashboardActivityLogCardCell { + + private enum Strings { + static let title = NSLocalizedString("activityLog.dashboard.card.title", + value: "Recent activity", + comment: "Title for the Activity Log dashboard card.") + } +} From 9590abd7e74cb7931885d15ae08e36af0c39bcad Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 4 Apr 2023 19:48:49 +0200 Subject: [PATCH 34/64] Tests: test sending correct query param --- .../WordPressTest/Dashboard/BlogDashboardServiceTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift b/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift index 86335486d115..8261bc1993a7 100644 --- a/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift +++ b/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift @@ -41,7 +41,7 @@ class BlogDashboardServiceTests: CoreDataTestCase { service.fetch(blog: blog) { _ in XCTAssertEqual(self.remoteServiceMock.didCallWithBlogID, self.wpComID) - XCTAssertEqual(self.remoteServiceMock.didRequestCards, ["todays_stats", "posts"]) + XCTAssertEqual(self.remoteServiceMock.didRequestCards, ["todays_stats", "posts", "pages", "activity"]) expect.fulfill() } From a49aecf68142953e993a6c9687086e8750d3d047 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 4 Apr 2023 20:43:45 +0200 Subject: [PATCH 35/64] Update: add new cards to `RemoteDashboardCards` --- .../Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift index c3156db380a4..f5bcb27f42bb 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift @@ -143,6 +143,8 @@ enum DashboardCard: String, CaseIterable { enum RemoteDashboardCard: String, CaseIterable { case todaysStats = "todays_stats" case posts + case pages + case activity } } From 8e53ba9a0af71d04a7be7f8e6f5a84434a5b185f Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Wed, 5 Apr 2023 06:04:42 +0200 Subject: [PATCH 36/64] Tests: test parsing pages and activity cards data --- .../Dashboard/BlogDashboardServiceTests.swift | 47 +++++++++++- ...shboard-200-with-drafts-and-scheduled.json | 74 ++++++++++++++++++- 2 files changed, 119 insertions(+), 2 deletions(-) diff --git a/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift b/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift index 8261bc1993a7..21d49f84a2a3 100644 --- a/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift +++ b/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift @@ -25,6 +25,8 @@ class BlogDashboardServiceTests: CoreDataTestCase { service = BlogDashboardService(managedObjectContext: mainContext, remoteService: remoteServiceMock, persistence: persistenceMock, repository: repositoryMock, postsParser: postsParserMock) try? featureFlags.override(FeatureFlag.personalizeHomeTab, withValue: true) + try? featureFlags.override(RemoteFeatureFlag.activityLogDashboardCard, withValue: true) + try? featureFlags.override(RemoteFeatureFlag.pagesDashboardCard, withValue: true) } override func tearDown() { @@ -32,6 +34,8 @@ class BlogDashboardServiceTests: CoreDataTestCase { context = nil try? featureFlags.override(FeatureFlag.personalizeHomeTab, withValue: FeatureFlag.personalizeHomeTab.originalValue) + try? featureFlags.override(RemoteFeatureFlag.activityLogDashboardCard, withValue: RemoteFeatureFlag.activityLogDashboardCard.originalValue) + try? featureFlags.override(RemoteFeatureFlag.pagesDashboardCard, withValue: RemoteFeatureFlag.pagesDashboardCard.originalValue) } func testCallServiceWithCorrectIDAndCards() { @@ -86,6 +90,46 @@ class BlogDashboardServiceTests: CoreDataTestCase { waitForExpectations(timeout: 3, handler: nil) } + func testPages() { + let expect = expectation(description: "Parse pages") + + let blog = newTestBlog(id: wpComID, context: mainContext) + + service.fetch(blog: blog) { cards in + let pagesCardItem = cards.first(where: {$0.cardType == .pages}) + + // Pages section exists + XCTAssertNotNil(pagesCardItem) + + // 2 page items + XCTAssertEqual(pagesCardItem!.apiResponse!.pages!.count, 2) + + expect.fulfill() + } + + waitForExpectations(timeout: 3, handler: nil) + } + + func testActivityLog() { + let expect = expectation(description: "Parse activities") + + let blog = newTestBlog(id: wpComID, context: mainContext) + + service.fetch(blog: blog) { cards in + let activityCardItem = cards.first(where: {$0.cardType == .activityLog}) + + // Activity section exists + XCTAssertNotNil(activityCardItem) + + // 2 page items + XCTAssertEqual(activityCardItem!.apiResponse!.pages!.count, 2) + + expect.fulfill() + } + + waitForExpectations(timeout: 3, handler: nil) + } + func testTodaysStats() { let expect = expectation(description: "Parse todays stats") remoteServiceMock.respondWith = .withDraftAndSchedulePosts @@ -319,9 +363,10 @@ class BlogDashboardServiceTests: CoreDataTestCase { return try? JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary } - private func newTestBlog(id: Int, context: NSManagedObjectContext) -> Blog { + private func newTestBlog(id: Int, context: NSManagedObjectContext, isAdmin: Bool = true) -> Blog { let blog = ModelTestHelper.insertDotComBlog(context: mainContext) blog.dotComID = id as NSNumber + blog.isAdmin = isAdmin return blog } } diff --git a/WordPress/WordPressTest/Test Data/Dashboard/dashboard-200-with-drafts-and-scheduled.json b/WordPress/WordPressTest/Test Data/Dashboard/dashboard-200-with-drafts-and-scheduled.json index a790f13df5b6..09144224f3a9 100644 --- a/WordPress/WordPressTest/Test Data/Dashboard/dashboard-200-with-drafts-and-scheduled.json +++ b/WordPress/WordPressTest/Test Data/Dashboard/dashboard-200-with-drafts-and-scheduled.json @@ -33,5 +33,77 @@ "visitors": 0, "likes": 0, "comments": 0 - } + }, + "pages": [ + { + "id": 0, + "title": "string", + "date": "0000-00-00 00:00:00", + "modified": "0000-00-00 00:00:00", + "status": "publish" + }, + { + "id": 1, + "title": "string", + "date": "0000-00-00 00:00:00", + "modified": "0000-00-00 00:00:00", + "status": "publish" + } + ], + "activity": [ + { + "summary": "Setting changed", + "content": { + "text": "Encouraged search engines to index the site" + }, + "name": "setting__changed_blog_public", + "actor": { + "type": "Person", + "name": "John Doe", + "external_user_id": 0, + "wpcom_user_id": 1, + "icon": null, + "role": "administrator" + }, + "type": "Announce", + "published": "2023-03-13T16:03:15.230+00:00", + "generator": { + "jetpack_version": 0, + "blog_id": 1 + }, + "is_rewindable": false, + "rewind_id": "", + "gridicon": "cog", + "status": null, + "activity_id": "", + "is_discarded": false + }, + { + "summary": "Setting changed Two", + "content": { + "text": "Encouraged search engines to index the site" + }, + "name": "setting__changed_blog_public", + "actor": { + "type": "Person", + "name": "John Doe", + "external_user_id": 0, + "wpcom_user_id": 1, + "icon": null, + "role": "administrator" + }, + "type": "Announce", + "published": "2023-03-13T16:03:15.230+00:00", + "generator": { + "jetpack_version": 0, + "blog_id": 1 + }, + "is_rewindable": false, + "rewind_id": "", + "gridicon": "cog", + "status": null, + "activity_id": "", + "is_discarded": false + } + ] } From 8f0120cc089fdf02a61f98d5a1d69f01a7c0d4a1 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Wed, 5 Apr 2023 06:07:22 +0200 Subject: [PATCH 37/64] Update: add new params to dashboard remote entity --- .../Service/BlogDashboardRemoteEntity.swift | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardRemoteEntity.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardRemoteEntity.swift index bd38f3d2e2ec..bdf2701b6794 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardRemoteEntity.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardRemoteEntity.swift @@ -4,6 +4,8 @@ struct BlogDashboardRemoteEntity: Decodable, Hashable { var posts: BlogDashboardPosts? var todaysStats: BlogDashboardStats? + var pages: [BlogDashboardPage]? + var activity: [BlogDashboardActivity]? // FIXME: Replace this after `WordPressKit.Activity` is made Codable struct BlogDashboardPosts: Decodable, Hashable { var hasPublished: Bool? @@ -21,4 +23,10 @@ struct BlogDashboardRemoteEntity: Decodable, Hashable { var comments: Int? } + // We don't rely on the data from the API to show pages + struct BlogDashboardPage: Decodable, Hashable { } + + // FIXME: Remove this after `WordPressKit.Activity` is made Codable + struct BlogDashboardActivity: Decodable, Hashable { } + } From a0747301bc391095bfe783951d0a2fefee9e76aa Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Wed, 5 Apr 2023 06:10:35 +0200 Subject: [PATCH 38/64] Tests: Update existing `DashboardCard` tests to include new cards --- WordPress/WordPressTest/Dashboard/DashboardCardTests.swift | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/WordPress/WordPressTest/Dashboard/DashboardCardTests.swift b/WordPress/WordPressTest/Dashboard/DashboardCardTests.swift index 56041a5f351d..6d011a25139c 100644 --- a/WordPress/WordPressTest/Dashboard/DashboardCardTests.swift +++ b/WordPress/WordPressTest/Dashboard/DashboardCardTests.swift @@ -256,6 +256,8 @@ class DashboardCardTests: CoreDataTestCase { let shouldShowNextPost = DashboardCard.nextPost.shouldShow(for: blog, apiResponse: nil) let shouldShowCreatePost = DashboardCard.createPost.shouldShow(for: blog, apiResponse: nil) let shouldShowStats = DashboardCard.createPost.shouldShow(for: blog, apiResponse: nil) + let shouldShowPages = DashboardCard.pages.shouldShow(for: blog, apiResponse: nil) + let shouldShowActivityLog = DashboardCard.activityLog.shouldShow(for: blog, apiResponse: nil) // Then XCTAssertFalse(shouldShowDrafts) @@ -263,6 +265,8 @@ class DashboardCardTests: CoreDataTestCase { XCTAssertFalse(shouldShowNextPost) XCTAssertFalse(shouldShowCreatePost) XCTAssertFalse(shouldShowStats) + XCTAssertFalse(shouldShowPages) + XCTAssertFalse(shouldShowActivityLog) } func testRemoteCardsIdentifiers() { @@ -270,7 +274,7 @@ class DashboardCardTests: CoreDataTestCase { let identifiers = DashboardCard.RemoteDashboardCard.allCases.map { $0.rawValue } // Then - XCTAssertEqual(identifiers, ["todays_stats", "posts"]) + XCTAssertEqual(identifiers, ["todays_stats", "posts", "pages", "activity"]) } // MARK: Helpers From 96588cf6b90227169296b4eb3ba3b86a1d18f1a7 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Wed, 5 Apr 2023 06:19:30 +0200 Subject: [PATCH 39/64] Tests: update `DashboardCardTests.buildEntity` helper to handle pages and activity --- .../Dashboard/DashboardCardTests.swift | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/WordPress/WordPressTest/Dashboard/DashboardCardTests.swift b/WordPress/WordPressTest/Dashboard/DashboardCardTests.swift index 6d011a25139c..6898a37fc10d 100644 --- a/WordPress/WordPressTest/Dashboard/DashboardCardTests.swift +++ b/WordPress/WordPressTest/Dashboard/DashboardCardTests.swift @@ -69,7 +69,7 @@ class DashboardCardTests: CoreDataTestCase { func testShouldAlwaysShowStatsCard() { // Given - let apiResponse = buildEntity(hasDrafts: false, hasScheduled: false, hasPublished: false) + let apiResponse = buildEntity(hasDrafts: false, hasScheduled: false, hasPublished: false, hasPages: false, hasActivity: false) // When let shouldShow = DashboardCard.todaysStats.shouldShow(for: blog, apiResponse: apiResponse) @@ -164,7 +164,7 @@ class DashboardCardTests: CoreDataTestCase { func testShowingDraftsCardOnly() { // Given - let apiResponse = buildEntity(hasDrafts: true, hasScheduled: false, hasPublished: false) + let apiResponse = buildEntity(hasDrafts: true, hasScheduled: false, hasPublished: false, hasPages: false, hasActivity: false) // When let shouldShowDrafts = DashboardCard.draftPosts.shouldShow(for: blog, apiResponse: apiResponse) @@ -181,7 +181,7 @@ class DashboardCardTests: CoreDataTestCase { func testShowingScheduledCardOnly() { // Given - let apiResponse = buildEntity(hasDrafts: false, hasScheduled: true, hasPublished: false) + let apiResponse = buildEntity(hasDrafts: false, hasScheduled: true, hasPublished: false, hasPages: false, hasActivity: false) // When let shouldShowDrafts = DashboardCard.draftPosts.shouldShow(for: blog, apiResponse: apiResponse) @@ -198,7 +198,7 @@ class DashboardCardTests: CoreDataTestCase { func testShowingDraftsAndScheduled() { // Given - let apiResponse = buildEntity(hasDrafts: true, hasScheduled: true, hasPublished: false) + let apiResponse = buildEntity(hasDrafts: true, hasScheduled: true, hasPublished: false, hasPages: false, hasActivity: false) // When let shouldShowDrafts = DashboardCard.draftPosts.shouldShow(for: blog, apiResponse: apiResponse) @@ -215,7 +215,7 @@ class DashboardCardTests: CoreDataTestCase { func testShowingNextPostCardOnly() { // Given - let apiResponse = buildEntity(hasDrafts: false, hasScheduled: false, hasPublished: true) + let apiResponse = buildEntity(hasDrafts: false, hasScheduled: false, hasPublished: true, hasPages: false, hasActivity: false) // When let shouldShowDrafts = DashboardCard.draftPosts.shouldShow(for: blog, apiResponse: apiResponse) @@ -232,7 +232,7 @@ class DashboardCardTests: CoreDataTestCase { func testShowingCreatePostCardOnly() { // Given - let apiResponse = buildEntity(hasDrafts: false, hasScheduled: false, hasPublished: false) + let apiResponse = buildEntity(hasDrafts: false, hasScheduled: false, hasPublished: false, hasPages: false, hasActivity: false) // When let shouldShowDrafts = DashboardCard.draftPosts.shouldShow(for: blog, apiResponse: apiResponse) @@ -279,11 +279,17 @@ class DashboardCardTests: CoreDataTestCase { // MARK: Helpers - private func buildEntity(hasDrafts: Bool, hasScheduled: Bool, hasPublished: Bool) -> BlogDashboardRemoteEntity { + private func buildEntity(hasDrafts: Bool, + hasScheduled: Bool, + hasPublished: Bool, + hasPages: Bool, + hasActivity: Bool) -> BlogDashboardRemoteEntity { let drafts = hasDrafts ? [BlogDashboardRemoteEntity.BlogDashboardPost()] : [] let scheduled = hasScheduled ? [BlogDashboardRemoteEntity.BlogDashboardPost()] : [] let posts = BlogDashboardRemoteEntity.BlogDashboardPosts(hasPublished: hasPublished, draft: drafts, scheduled: scheduled) - return BlogDashboardRemoteEntity(posts: posts, todaysStats: nil) + let pages = hasPages ? [BlogDashboardRemoteEntity.BlogDashboardPage()] : [] + let activity = hasActivity ? [BlogDashboardRemoteEntity.BlogDashboardActivity()] : [] + return BlogDashboardRemoteEntity(posts: posts, todaysStats: nil, pages: pages, activity: activity) } } From 7e4ef507a05150e870aa53b4c2869b456e1b2e1a Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Wed, 5 Apr 2023 06:27:47 +0200 Subject: [PATCH 40/64] Tests: Add tests for showing the pages card --- .../Dashboard/DashboardCardTests.swift | 57 +++++++++++++++---- 1 file changed, 46 insertions(+), 11 deletions(-) diff --git a/WordPress/WordPressTest/Dashboard/DashboardCardTests.swift b/WordPress/WordPressTest/Dashboard/DashboardCardTests.swift index 6898a37fc10d..93e7698316b8 100644 --- a/WordPress/WordPressTest/Dashboard/DashboardCardTests.swift +++ b/WordPress/WordPressTest/Dashboard/DashboardCardTests.swift @@ -12,17 +12,23 @@ class MockDefaultSectionProvider: DefaultSectionProvider { class DashboardCardTests: CoreDataTestCase { private var blog: Blog! + private let featureFlags = FeatureFlagOverrideStore() override func setUp() { super.setUp() contextManager.useAsSharedInstance(untilTestFinished: self) blog = BlogBuilder(mainContext).build() + blog.isAdmin = true + try? featureFlags.override(RemoteFeatureFlag.activityLogDashboardCard, withValue: true) + try? featureFlags.override(RemoteFeatureFlag.pagesDashboardCard, withValue: true) } override func tearDown() { QuickStartTourGuide.shared.remove(from: blog) blog = nil + try? featureFlags.override(RemoteFeatureFlag.activityLogDashboardCard, withValue: RemoteFeatureFlag.activityLogDashboardCard.originalValue) + try? featureFlags.override(RemoteFeatureFlag.pagesDashboardCard, withValue: RemoteFeatureFlag.pagesDashboardCard.originalValue) super.tearDown() } @@ -69,7 +75,7 @@ class DashboardCardTests: CoreDataTestCase { func testShouldAlwaysShowStatsCard() { // Given - let apiResponse = buildEntity(hasDrafts: false, hasScheduled: false, hasPublished: false, hasPages: false, hasActivity: false) + let apiResponse = buildEntity(hasDrafts: false, hasScheduled: false, hasPublished: false) // When let shouldShow = DashboardCard.todaysStats.shouldShow(for: blog, apiResponse: apiResponse) @@ -164,7 +170,7 @@ class DashboardCardTests: CoreDataTestCase { func testShowingDraftsCardOnly() { // Given - let apiResponse = buildEntity(hasDrafts: true, hasScheduled: false, hasPublished: false, hasPages: false, hasActivity: false) + let apiResponse = buildEntity(hasDrafts: true, hasScheduled: false, hasPublished: false) // When let shouldShowDrafts = DashboardCard.draftPosts.shouldShow(for: blog, apiResponse: apiResponse) @@ -181,7 +187,7 @@ class DashboardCardTests: CoreDataTestCase { func testShowingScheduledCardOnly() { // Given - let apiResponse = buildEntity(hasDrafts: false, hasScheduled: true, hasPublished: false, hasPages: false, hasActivity: false) + let apiResponse = buildEntity(hasDrafts: false, hasScheduled: true, hasPublished: false) // When let shouldShowDrafts = DashboardCard.draftPosts.shouldShow(for: blog, apiResponse: apiResponse) @@ -198,7 +204,7 @@ class DashboardCardTests: CoreDataTestCase { func testShowingDraftsAndScheduled() { // Given - let apiResponse = buildEntity(hasDrafts: true, hasScheduled: true, hasPublished: false, hasPages: false, hasActivity: false) + let apiResponse = buildEntity(hasDrafts: true, hasScheduled: true, hasPublished: false) // When let shouldShowDrafts = DashboardCard.draftPosts.shouldShow(for: blog, apiResponse: apiResponse) @@ -215,7 +221,7 @@ class DashboardCardTests: CoreDataTestCase { func testShowingNextPostCardOnly() { // Given - let apiResponse = buildEntity(hasDrafts: false, hasScheduled: false, hasPublished: true, hasPages: false, hasActivity: false) + let apiResponse = buildEntity(hasDrafts: false, hasScheduled: false, hasPublished: true) // When let shouldShowDrafts = DashboardCard.draftPosts.shouldShow(for: blog, apiResponse: apiResponse) @@ -232,7 +238,7 @@ class DashboardCardTests: CoreDataTestCase { func testShowingCreatePostCardOnly() { // Given - let apiResponse = buildEntity(hasDrafts: false, hasScheduled: false, hasPublished: false, hasPages: false, hasActivity: false) + let apiResponse = buildEntity(hasDrafts: false, hasScheduled: false, hasPublished: false) // When let shouldShowDrafts = DashboardCard.draftPosts.shouldShow(for: blog, apiResponse: apiResponse) @@ -247,6 +253,35 @@ class DashboardCardTests: CoreDataTestCase { XCTAssertTrue(shouldShowCreatePost) } + // MARK: Pages + + func testShowingPagesCardWhenThereArePages() { + // Given + let apiResponse = buildEntity(hasPages: true) + + // When + let shouldShowPages = DashboardCard.pages.shouldShow(for: blog, apiResponse: apiResponse) + + // Then + XCTAssertTrue(shouldShowPages) + } + + func testShowingPagesCardWithZeroPages() { + // Given + let apiResponse = buildEntity(hasPages: false) + + // When + let shouldShowPages = DashboardCard.pages.shouldShow(for: blog, apiResponse: apiResponse) + + // Then + XCTAssertTrue(shouldShowPages) + } + + // MARK: Activity Log + + // TODO: Add test for showing the card if there's activity + // TODO: Add test for not showing the card if there's no activity + // MARK: Remote Cards func testNotShowingRemoteCardsIfResponseNotPresent() { @@ -279,11 +314,11 @@ class DashboardCardTests: CoreDataTestCase { // MARK: Helpers - private func buildEntity(hasDrafts: Bool, - hasScheduled: Bool, - hasPublished: Bool, - hasPages: Bool, - hasActivity: Bool) -> BlogDashboardRemoteEntity { + private func buildEntity(hasDrafts: Bool = false, + hasScheduled: Bool = false, + hasPublished: Bool = false, + hasPages: Bool = false, + hasActivity: Bool = false) -> BlogDashboardRemoteEntity { let drafts = hasDrafts ? [BlogDashboardRemoteEntity.BlogDashboardPost()] : [] let scheduled = hasScheduled ? [BlogDashboardRemoteEntity.BlogDashboardPost()] : [] let posts = BlogDashboardRemoteEntity.BlogDashboardPosts(hasPublished: hasPublished, draft: drafts, scheduled: scheduled) From 15af1ca21b47af901f53e6c2a954a8bed02093db Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Wed, 5 Apr 2023 06:38:11 +0200 Subject: [PATCH 41/64] Update: Add pages card --- .../Cards/Pages/DashboardPagesCardCell.swift | 65 +++++++++++++++++++ .../Blog/Blog Dashboard/DashboardCard.swift | 8 +++ .../BlogDashboardPersonalizationService.swift | 2 + ...logDashboardPersonalizationViewModel.swift | 2 + WordPress/WordPress.xcodeproj/project.pbxproj | 14 ++++ 5 files changed, 91 insertions(+) create mode 100644 WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Pages/DashboardPagesCardCell.swift diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Pages/DashboardPagesCardCell.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Pages/DashboardPagesCardCell.swift new file mode 100644 index 000000000000..adfd915ceba9 --- /dev/null +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Pages/DashboardPagesCardCell.swift @@ -0,0 +1,65 @@ +import UIKit + +final class DashboardPagesCardCell: DashboardCollectionViewCell { + + private var blog: Blog? + private weak var presentingViewController: BlogDashboardViewController? + + // MARK: - Views + + private lazy var cardFrameView: BlogDashboardCardFrameView = { + let frameView = BlogDashboardCardFrameView() + frameView.translatesAutoresizingMaskIntoConstraints = false + frameView.title = Strings.title + return frameView + }() + + // MARK: - Initializers + + override init(frame: CGRect) { + super.init(frame: frame) + setupView() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - View setup + + private func setupView() { + contentView.addSubview(cardFrameView) + contentView.pinSubviewToAllEdges(cardFrameView, priority: .defaultHigh) + } + + // MARK: - BlogDashboardCardConfigurable + + func configure(blog: Blog, viewController: BlogDashboardViewController?, apiResponse: BlogDashboardRemoteEntity?) { + self.blog = blog + self.presentingViewController = viewController + + // FIXME: configure card using api response + // Expecting a list of pages + } +} + +extension DashboardPagesCardCell { + + static func shouldShowCard(for blog: Blog) -> Bool { + guard RemoteFeatureFlag.pagesDashboardCard.enabled(), + blog.supports(.pages) else { + return false + } + + return true + } +} + +extension DashboardPagesCardCell { + + private enum Strings { + static let title = NSLocalizedString("pages.dashboard.card.title", + value: "Pages", + comment: "Title for the Pages dashboard card.") + } +} diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift index f5bcb27f42bb..adb9c7997fe5 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift @@ -15,6 +15,7 @@ enum DashboardCard: String, CaseIterable { case todaysStats = "todays_stats" case draftPosts case scheduledPosts + case pages case activityLog case nextPost = "create_next" case createPost = "create_first" @@ -59,6 +60,8 @@ enum DashboardCard: String, CaseIterable { return BlogDashboardEmptyStateCell.self case .personalize: return BlogDashboardPersonalizeCardCell.self + case .pages: + return DashboardPagesCardCell.self case .activityLog: return DashboardActivityLogCardCell.self } @@ -101,6 +104,8 @@ enum DashboardCard: String, CaseIterable { return false // Controlled manually based on other cards visibility case .personalize: return FeatureFlag.personalizeHomeTab.enabled + case .pages: + return DashboardPagesCardCell.shouldShowCard(for: blog) && shouldShowRemoteCard(apiResponse: apiResponse) case .activityLog: return DashboardActivityLogCardCell.shouldShowCard(for: blog) && shouldShowRemoteCard(apiResponse: apiResponse) } @@ -121,6 +126,8 @@ enum DashboardCard: String, CaseIterable { return apiResponse.hasNoDraftsOrScheduled && !apiResponse.hasPublished case .todaysStats: return true + case .pages: + return true case .activityLog: return true // FIXME: hide card if there's no activities default: @@ -135,6 +142,7 @@ enum DashboardCard: String, CaseIterable { .scheduledPosts, .blaze, .prompts, + .pages, .activityLog ] diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardPersonalizationService.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardPersonalizationService.swift index 4126c83b751b..a9d1309cb008 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardPersonalizationService.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardPersonalizationService.swift @@ -54,6 +54,8 @@ private func makeKey(for card: DashboardCard) -> String? { return "domains-dashboard-card-enabled-site-settings" case .activityLog: return "activity-log-card-enabled-site-settings" + case .pages: + return "pages-card-enabled-site-settings" case .quickStart, .jetpackBadge, .jetpackInstall, .nextPost, .createPost, .failure, .ghost, .personalize, .empty: return nil } diff --git a/WordPress/Classes/ViewRelated/Blog/BlogPersonalization/BlogDashboardPersonalizationViewModel.swift b/WordPress/Classes/ViewRelated/Blog/BlogPersonalization/BlogDashboardPersonalizationViewModel.swift index 1948129730ec..1698e97e7995 100644 --- a/WordPress/Classes/ViewRelated/Blog/BlogPersonalization/BlogDashboardPersonalizationViewModel.swift +++ b/WordPress/Classes/ViewRelated/Blog/BlogPersonalization/BlogDashboardPersonalizationViewModel.swift @@ -46,6 +46,8 @@ private extension DashboardCard { return NSLocalizedString("personalizeHome.dashboardCard.scheduledPosts", value: "Scheduled posts", comment: "Card title for the pesonalization menu") case .activityLog: return NSLocalizedString("personalizeHome.dashboardCard.activityLog", value: "Recent activity", comment: "Card title for the pesonalization menu") + case .pages: + return NSLocalizedString("pages.dashboardCard.activityLog", value: "Pages", comment: "Card title for the pesonalization menu") case .quickStart, .nextPost, .createPost, .ghost, .failure, .personalize, .jetpackBadge, .jetpackInstall, .domainsDashboardCard, .empty: assertionFailure("\(self) card should not appear in the personalization menus") return "" // These cards don't appear in the personalization menus diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index 337be4930935..230b857157ab 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -1864,6 +1864,8 @@ 80C523AB29AE6C2200B1C14B /* BlazeWebViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80C523AA29AE6C2200B1C14B /* BlazeWebViewModelTests.swift */; }; 80C740FB2989FC4600199027 /* PostStatsTableViewController+JetpackBannerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80C740FA2989FC4600199027 /* PostStatsTableViewController+JetpackBannerViewController.swift */; }; 80C740FC2989FC4600199027 /* PostStatsTableViewController+JetpackBannerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80C740FA2989FC4600199027 /* PostStatsTableViewController+JetpackBannerViewController.swift */; }; + 80D9CFF429DCA53E00FE3400 /* DashboardPagesCardCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D9CFF329DCA53E00FE3400 /* DashboardPagesCardCell.swift */; }; + 80D9CFF529DD314600FE3400 /* DashboardPagesCardCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D9CFF329DCA53E00FE3400 /* DashboardPagesCardCell.swift */; }; 80EF671F27F135EB0063B138 /* WhatIsNewViewAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80EF671E27F135EB0063B138 /* WhatIsNewViewAppearance.swift */; }; 80EF672027F135EB0063B138 /* WhatIsNewViewAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80EF671E27F135EB0063B138 /* WhatIsNewViewAppearance.swift */; }; 80EF672227F160720063B138 /* DashboardCustomAnnouncementCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80EF672127F160720063B138 /* DashboardCustomAnnouncementCell.swift */; }; @@ -7202,6 +7204,7 @@ 80C523AA29AE6C2200B1C14B /* BlazeWebViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlazeWebViewModelTests.swift; sourceTree = ""; }; 80C740FA2989FC4600199027 /* PostStatsTableViewController+JetpackBannerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PostStatsTableViewController+JetpackBannerViewController.swift"; sourceTree = ""; }; 80D65C1129CC0813008E69D5 /* JetpackUITests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "JetpackUITests-Info.plist"; sourceTree = ""; }; + 80D9CFF329DCA53E00FE3400 /* DashboardPagesCardCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DashboardPagesCardCell.swift; sourceTree = ""; }; 80EF671E27F135EB0063B138 /* WhatIsNewViewAppearance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WhatIsNewViewAppearance.swift; sourceTree = ""; }; 80EF672127F160720063B138 /* DashboardCustomAnnouncementCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DashboardCustomAnnouncementCell.swift; sourceTree = ""; }; 80EF672427F3D63B0063B138 /* DashboardStatsStackView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DashboardStatsStackView.swift; sourceTree = ""; }; @@ -13008,6 +13011,14 @@ path = Blaze; sourceTree = ""; }; + 80D9CFF229DCA51C00FE3400 /* Pages */ = { + isa = PBXGroup; + children = ( + 80D9CFF329DCA53E00FE3400 /* DashboardPagesCardCell.swift */, + ); + path = Pages; + sourceTree = ""; + }; 80EF9288280D27F20064A971 /* PropertyWrappers */ = { isa = PBXGroup; children = ( @@ -13432,6 +13443,7 @@ 0118968D29D1EAC900D34BA9 /* Domains */, FA98B61429A3B71E0071AAE8 /* Blaze */, DCFC097129D3544600277ECB /* Domains */, + 80D9CFF229DCA51C00FE3400 /* Pages */, FE18495627F5ACA400D26879 /* Prompts */, 8B92D69427CD51CE001F5371 /* Ghost */, FAA4012F27B405DF009E1137 /* Quick Actions */, @@ -20678,6 +20690,7 @@ E1D7FF381C74EB0E00E7E5E5 /* PlanService.swift in Sources */, F1655B4822A6C2FA00227BFB /* Routes+Mbar.swift in Sources */, 32CA6EC02390C61F00B51347 /* PostListEditorPresenter.swift in Sources */, + 80D9CFF429DCA53E00FE3400 /* DashboardPagesCardCell.swift in Sources */, 0147D64E294B1E1600AA6410 /* StatsRevampStore.swift in Sources */, F580C3C123D22E2D0038E243 /* PreviewDeviceLabel.swift in Sources */, 5D7DEA2919D488DD0032EE77 /* WPStyleGuide+ReaderComments.swift in Sources */, @@ -23867,6 +23880,7 @@ FABB221B2602FC2C00C8785C /* Theme.m in Sources */, FABB221C2602FC2C00C8785C /* StockPhotosMediaGroup.swift in Sources */, FABB221D2602FC2C00C8785C /* DefaultFormattableContentAction.swift in Sources */, + 80D9CFF529DD314600FE3400 /* DashboardPagesCardCell.swift in Sources */, FABB221E2602FC2C00C8785C /* PostEditorNavigationBarManager.swift in Sources */, FABB221F2602FC2C00C8785C /* Charts+LargeValueFormatter.swift in Sources */, FABB22202602FC2C00C8785C /* CustomHighlightButton.m in Sources */, From 0a4b15091aab8e10a7f7a0250d0884049956d5ca Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Wed, 5 Apr 2023 06:44:38 +0200 Subject: [PATCH 42/64] Update: add TODO marks for planned work --- .../Blog/Blog Dashboard/Service/BlogDashboardService.swift | 1 + .../WordPressTest/Dashboard/BlogDashboardServiceTests.swift | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardService.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardService.swift index 749808e35a97..8278b64af566 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardService.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardService.swift @@ -115,6 +115,7 @@ private extension BlogDashboardService { return cardsDictionary } + // TODO: Add similar logic here for parsing pages cardsDictionary["posts"] = postsParser.parse(posts, for: blog) return cardsDictionary } diff --git a/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift b/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift index 21d49f84a2a3..5f29b001846f 100644 --- a/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift +++ b/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift @@ -357,6 +357,10 @@ class BlogDashboardServiceTests: CoreDataTestCase { waitForExpectations(timeout: 3, handler: nil) } + // MARK: - Local Pages + + // TODO: Add test to check that local pages are considered if no pages are returned from the endpoint + func dictionary(from file: String) -> NSDictionary? { let fileURL: URL = Bundle(for: BlogDashboardServiceTests.self).url(forResource: file, withExtension: nil)! let data: Data = try! Data(contentsOf: fileURL) From 8ae357b3bc20abead4f1e9144e32cf48bda65b7b Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Wed, 5 Apr 2023 06:45:12 +0200 Subject: [PATCH 43/64] Remove: unneeded auth key constants --- WordPress/Classes/Models/WPAccount.m | 3 --- 1 file changed, 3 deletions(-) diff --git a/WordPress/Classes/Models/WPAccount.m b/WordPress/Classes/Models/WPAccount.m index e601ca4e8a14..8034c77fa7bb 100644 --- a/WordPress/Classes/Models/WPAccount.m +++ b/WordPress/Classes/Models/WPAccount.m @@ -1,9 +1,6 @@ #import "WPAccount.h" #import "WordPress-Swift.h" -static NSString * const WordPressComOAuthKeychainServiceName = @"public-api.wordpress.com"; -static NSString * const JetpackComOAuthKeychainServiceName = @"jetpack.public-api.wordpress.com"; - @interface WPAccount () @property (nonatomic, strong, readwrite) WordPressComRestApi *wordPressComRestApi; From df07449065fbd808c06f97971061cdb2eab84c43 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Wed, 5 Apr 2023 07:33:47 +0200 Subject: [PATCH 44/64] Update: fix inline comment --- .../WordPressTest/Dashboard/BlogDashboardServiceTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift b/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift index 5f29b001846f..27e30b67fcc9 100644 --- a/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift +++ b/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift @@ -121,7 +121,7 @@ class BlogDashboardServiceTests: CoreDataTestCase { // Activity section exists XCTAssertNotNil(activityCardItem) - // 2 page items + // 2 activity items XCTAssertEqual(activityCardItem!.apiResponse!.pages!.count, 2) expect.fulfill() From 4ac87cafffc71cf85a386bc2de5db048e5ea6cad Mon Sep 17 00:00:00 2001 From: Momo Ozawa Date: Wed, 5 Apr 2023 09:41:44 +0100 Subject: [PATCH 45/64] Update: move convenience init to subclass MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The compiler wouldn’t recognize the superclass convenience init for some reason… --- .../Activity/BaseActivityListViewController.swift | 11 ----------- .../Activity/JetpackActivityLogViewController.swift | 10 ++++++++++ 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Activity/BaseActivityListViewController.swift b/WordPress/Classes/ViewRelated/Activity/BaseActivityListViewController.swift index c0554d8c37a8..e115d49b668f 100644 --- a/WordPress/Classes/ViewRelated/Activity/BaseActivityListViewController.swift +++ b/WordPress/Classes/ViewRelated/Activity/BaseActivityListViewController.swift @@ -135,17 +135,6 @@ class BaseActivityListViewController: UIViewController, TableViewContainer, Immu fatalError("init(coder:) has not been implemented") } - @objc convenience init?(blog: Blog) { - precondition(blog.dotComID != nil) - guard let siteRef = JetpackSiteRef(blog: blog) else { - return nil - } - - - let isFreeWPCom = blog.isHostedAtWPcom && !blog.hasPaidPlan - self.init(site: siteRef, store: StoreContainer.shared.activity, isFreeWPCom: isFreeWPCom) - } - // MARK: - View lifecycle override func viewDidLoad() { diff --git a/WordPress/Classes/ViewRelated/Activity/JetpackActivityLogViewController.swift b/WordPress/Classes/ViewRelated/Activity/JetpackActivityLogViewController.swift index fb040a9a819d..41833c0278e5 100644 --- a/WordPress/Classes/ViewRelated/Activity/JetpackActivityLogViewController.swift +++ b/WordPress/Classes/ViewRelated/Activity/JetpackActivityLogViewController.swift @@ -31,6 +31,16 @@ class JetpackActivityLogViewController: BaseActivityListViewController { fatalError("init(coder:) has not been implemented") } + @objc convenience init?(blog: Blog) { + precondition(blog.dotComID != nil) + guard let siteRef = JetpackSiteRef(blog: blog) else { + return nil + } + + let isFreeWPCom = blog.isHostedAtWPcom && !blog.hasPaidPlan + self.init(site: siteRef, store: StoreContainer.shared.activity, isFreeWPCom: isFreeWPCom) + } + // MARK: - View lifecycle override func viewDidLoad() { From 879b1a1434d0211e6bbe276776be9119e3fa6d80 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Wed, 5 Apr 2023 12:14:39 +0200 Subject: [PATCH 46/64] Update Gutenberg Mobile reference with alpha tag --- Podfile | 2 +- Podfile.lock | 202 +++++++++++++++++++++++++-------------------------- 2 files changed, 102 insertions(+), 102 deletions(-) diff --git a/Podfile b/Podfile index a076e85642b5..d8d9f9887a41 100644 --- a/Podfile +++ b/Podfile @@ -91,7 +91,7 @@ def shared_style_pods end def gutenberg_pods - gutenberg commit: '9329ef7ca9c1a34aaef6ea37b30887f802694474' + gutenberg tag: 'v1.93.0-alpha1' end def gutenberg(options) diff --git a/Podfile.lock b/Podfile.lock index d2275c6b5377..6b726f4de788 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -544,18 +544,18 @@ DEPENDENCIES: - AppCenter (~> 4.1) - AppCenter/Distribute (~> 4.1) - Automattic-Tracks-iOS (~> 0.13) - - boost (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/boost.podspec.json`) - - BVLinearGradient (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/BVLinearGradient.podspec.json`) + - boost (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/boost.podspec.json`) + - BVLinearGradient (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/BVLinearGradient.podspec.json`) - CocoaLumberjack/Swift (~> 3.0) - CropViewController (= 2.5.3) - Down (~> 0.6.6) - - FBLazyVector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/FBLazyVector.podspec.json`) - - FBReactNativeSpec (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json`) + - FBLazyVector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/FBLazyVector.podspec.json`) + - FBReactNativeSpec (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json`) - FSInteractiveMap (from `https://github.com/wordpress-mobile/FSInteractiveMap.git`, tag `0.2.0`) - Gifu (= 3.2.0) - - glog (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/glog.podspec.json`) + - glog (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/glog.podspec.json`) - Gridicons (~> 1.1.0) - - Gutenberg (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, commit `9329ef7ca9c1a34aaef6ea37b30887f802694474`) + - Gutenberg (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, tag `v1.93.0-alpha1`) - JTAppleCalendar (~> 8.0.2) - Kanvas (~> 1.4.4) - MediaEditor (~> 1.2.1) @@ -564,49 +564,49 @@ DEPENDENCIES: - "NSURL+IDN (~> 0.4)" - OCMock (~> 3.4.3) - OHHTTPStubs/Swift (~> 9.1.0) - - RCT-Folly (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RCT-Folly.podspec.json`) - - RCTRequired (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RCTRequired.podspec.json`) - - RCTTypeSafety (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RCTTypeSafety.podspec.json`) + - RCT-Folly (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RCT-Folly.podspec.json`) + - RCTRequired (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RCTRequired.podspec.json`) + - RCTTypeSafety (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RCTTypeSafety.podspec.json`) - Reachability (= 3.2) - - React (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React.podspec.json`) - - React-bridging (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-bridging.podspec.json`) - - React-callinvoker (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-callinvoker.podspec.json`) - - React-Codegen (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-Codegen.podspec.json`) - - React-Core (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-Core.podspec.json`) - - React-CoreModules (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-CoreModules.podspec.json`) - - React-cxxreact (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-cxxreact.podspec.json`) - - React-jsi (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-jsi.podspec.json`) - - React-jsiexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-jsiexecutor.podspec.json`) - - React-jsinspector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-jsinspector.podspec.json`) - - React-logger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-logger.podspec.json`) - - react-native-blur (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-blur.podspec.json`) - - react-native-get-random-values (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-get-random-values.podspec.json`) - - react-native-keyboard-aware-scroll-view (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-keyboard-aware-scroll-view.podspec.json`) - - react-native-safe-area (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-safe-area.podspec.json`) - - react-native-safe-area-context (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-safe-area-context.podspec.json`) - - react-native-slider (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-slider.podspec.json`) - - react-native-video (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-video.podspec.json`) - - react-native-webview (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-webview.podspec.json`) - - React-perflogger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-perflogger.podspec.json`) - - React-RCTActionSheet (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTActionSheet.podspec.json`) - - React-RCTAnimation (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTAnimation.podspec.json`) - - React-RCTBlob (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTBlob.podspec.json`) - - React-RCTImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTImage.podspec.json`) - - React-RCTLinking (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTLinking.podspec.json`) - - React-RCTNetwork (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTNetwork.podspec.json`) - - React-RCTSettings (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTSettings.podspec.json`) - - React-RCTText (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTText.podspec.json`) - - React-RCTVibration (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTVibration.podspec.json`) - - React-runtimeexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-runtimeexecutor.podspec.json`) - - ReactCommon (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/ReactCommon.podspec.json`) - - RNCClipboard (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNCClipboard.podspec.json`) - - RNCMaskedView (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNCMaskedView.podspec.json`) - - RNFastImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNFastImage.podspec.json`) - - RNGestureHandler (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNGestureHandler.podspec.json`) - - RNReanimated (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNReanimated.podspec.json`) - - RNScreens (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNScreens.podspec.json`) - - RNSVG (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNSVG.podspec.json`) - - RNTAztecView (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, commit `9329ef7ca9c1a34aaef6ea37b30887f802694474`) + - React (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React.podspec.json`) + - React-bridging (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-bridging.podspec.json`) + - React-callinvoker (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-callinvoker.podspec.json`) + - React-Codegen (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-Codegen.podspec.json`) + - React-Core (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-Core.podspec.json`) + - React-CoreModules (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-CoreModules.podspec.json`) + - React-cxxreact (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-cxxreact.podspec.json`) + - React-jsi (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-jsi.podspec.json`) + - React-jsiexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-jsiexecutor.podspec.json`) + - React-jsinspector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-jsinspector.podspec.json`) + - React-logger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-logger.podspec.json`) + - react-native-blur (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-blur.podspec.json`) + - react-native-get-random-values (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-get-random-values.podspec.json`) + - react-native-keyboard-aware-scroll-view (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-keyboard-aware-scroll-view.podspec.json`) + - react-native-safe-area (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-safe-area.podspec.json`) + - react-native-safe-area-context (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-safe-area-context.podspec.json`) + - react-native-slider (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-slider.podspec.json`) + - react-native-video (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-video.podspec.json`) + - react-native-webview (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-webview.podspec.json`) + - React-perflogger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-perflogger.podspec.json`) + - React-RCTActionSheet (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTActionSheet.podspec.json`) + - React-RCTAnimation (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTAnimation.podspec.json`) + - React-RCTBlob (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTBlob.podspec.json`) + - React-RCTImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTImage.podspec.json`) + - React-RCTLinking (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTLinking.podspec.json`) + - React-RCTNetwork (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTNetwork.podspec.json`) + - React-RCTSettings (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTSettings.podspec.json`) + - React-RCTText (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTText.podspec.json`) + - React-RCTVibration (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTVibration.podspec.json`) + - React-runtimeexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-runtimeexecutor.podspec.json`) + - ReactCommon (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/ReactCommon.podspec.json`) + - RNCClipboard (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNCClipboard.podspec.json`) + - RNCMaskedView (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNCMaskedView.podspec.json`) + - RNFastImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNFastImage.podspec.json`) + - RNGestureHandler (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNGestureHandler.podspec.json`) + - RNReanimated (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNReanimated.podspec.json`) + - RNScreens (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNScreens.podspec.json`) + - RNSVG (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNSVG.podspec.json`) + - RNTAztecView (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, tag `v1.93.0-alpha1`) - Starscream (= 3.0.6) - SVProgressHUD (= 2.2.5) - SwiftLint (~> 0.50) @@ -616,7 +616,7 @@ DEPENDENCIES: - WordPressShared (~> 2.0-beta) - WordPressUI (~> 1.12.5) - WPMediaPicker (~> 1.8.7) - - Yoga (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/Yoga.podspec.json`) + - Yoga (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/Yoga.podspec.json`) - ZendeskSupportSDK (= 5.3.0) - ZIPFoundation (~> 0.9.8) @@ -676,123 +676,123 @@ SPEC REPOS: EXTERNAL SOURCES: boost: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/boost.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/boost.podspec.json BVLinearGradient: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/BVLinearGradient.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/BVLinearGradient.podspec.json FBLazyVector: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/FBLazyVector.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/FBLazyVector.podspec.json FBReactNativeSpec: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json FSInteractiveMap: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 glog: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/glog.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/glog.podspec.json Gutenberg: - :commit: 9329ef7ca9c1a34aaef6ea37b30887f802694474 :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true + :tag: v1.93.0-alpha1 RCT-Folly: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RCT-Folly.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RCT-Folly.podspec.json RCTRequired: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RCTRequired.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RCTRequired.podspec.json RCTTypeSafety: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RCTTypeSafety.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RCTTypeSafety.podspec.json React: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React.podspec.json React-bridging: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-bridging.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-bridging.podspec.json React-callinvoker: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-callinvoker.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-callinvoker.podspec.json React-Codegen: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-Codegen.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-Codegen.podspec.json React-Core: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-Core.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-Core.podspec.json React-CoreModules: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-CoreModules.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-CoreModules.podspec.json React-cxxreact: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-cxxreact.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-cxxreact.podspec.json React-jsi: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-jsi.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-jsi.podspec.json React-jsiexecutor: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-jsiexecutor.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-jsiexecutor.podspec.json React-jsinspector: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-jsinspector.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-jsinspector.podspec.json React-logger: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-logger.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-logger.podspec.json react-native-blur: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-blur.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-blur.podspec.json react-native-get-random-values: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-get-random-values.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-get-random-values.podspec.json react-native-keyboard-aware-scroll-view: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-keyboard-aware-scroll-view.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-keyboard-aware-scroll-view.podspec.json react-native-safe-area: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-safe-area.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-safe-area.podspec.json react-native-safe-area-context: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-safe-area-context.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-safe-area-context.podspec.json react-native-slider: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-slider.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-slider.podspec.json react-native-video: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-video.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-video.podspec.json react-native-webview: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/react-native-webview.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-webview.podspec.json React-perflogger: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-perflogger.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-perflogger.podspec.json React-RCTActionSheet: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTActionSheet.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTActionSheet.podspec.json React-RCTAnimation: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTAnimation.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTAnimation.podspec.json React-RCTBlob: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTBlob.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTBlob.podspec.json React-RCTImage: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTImage.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTImage.podspec.json React-RCTLinking: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTLinking.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTLinking.podspec.json React-RCTNetwork: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTNetwork.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTNetwork.podspec.json React-RCTSettings: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTSettings.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTSettings.podspec.json React-RCTText: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTText.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTText.podspec.json React-RCTVibration: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-RCTVibration.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTVibration.podspec.json React-runtimeexecutor: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/React-runtimeexecutor.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-runtimeexecutor.podspec.json ReactCommon: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/ReactCommon.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/ReactCommon.podspec.json RNCClipboard: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNCClipboard.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNCClipboard.podspec.json RNCMaskedView: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNCMaskedView.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNCMaskedView.podspec.json RNFastImage: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNFastImage.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNFastImage.podspec.json RNGestureHandler: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNGestureHandler.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNGestureHandler.podspec.json RNReanimated: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNReanimated.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNReanimated.podspec.json RNScreens: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNScreens.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNScreens.podspec.json RNSVG: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/RNSVG.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNSVG.podspec.json RNTAztecView: - :commit: 9329ef7ca9c1a34aaef6ea37b30887f802694474 :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true + :tag: v1.93.0-alpha1 Yoga: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/9329ef7ca9c1a34aaef6ea37b30887f802694474/third-party-podspecs/Yoga.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/Yoga.podspec.json CHECKOUT OPTIONS: FSInteractiveMap: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 Gutenberg: - :commit: 9329ef7ca9c1a34aaef6ea37b30887f802694474 :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true + :tag: v1.93.0-alpha1 RNTAztecView: - :commit: 9329ef7ca9c1a34aaef6ea37b30887f802694474 :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true + :tag: v1.93.0-alpha1 SPEC CHECKSUMS: Alamofire: 3ec537f71edc9804815215393ae2b1a8ea33a844 @@ -896,6 +896,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: ae5b4b813d216d3bf0a148773267fff14bd51d37 -PODFILE CHECKSUM: 1e9310b6aee0eee53ab8046d0a5679a9b1c844ee +PODFILE CHECKSUM: d4e1eb2920961f2a882861ce157f08766fd385e0 COCOAPODS: 1.11.3 From 49bdf9869eda957cb607b9cadc4262374179704f Mon Sep 17 00:00:00 2001 From: Momo Ozawa Date: Wed, 5 Apr 2023 12:34:36 +0100 Subject: [PATCH 47/64] Update: configure context menu - Adds an activity action; navigates to the activity log screen on tap - Adds a hide this action; hides the activity log dashboard card on tap --- .../DashboardActivityLogCardCell.swift | 49 +++++++++++++++++-- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Activity Log/DashboardActivityLogCardCell.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Activity Log/DashboardActivityLogCardCell.swift index 8dca7b97aae9..301f39aec0be 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Activity Log/DashboardActivityLogCardCell.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Activity Log/DashboardActivityLogCardCell.swift @@ -11,9 +11,6 @@ final class DashboardActivityLogCardCell: DashboardCollectionViewCell { let frameView = BlogDashboardCardFrameView() frameView.translatesAutoresizingMaskIntoConstraints = false frameView.title = Strings.title - frameView.onEllipsisButtonTap = { - // FIXME: Track event - } return frameView }() @@ -41,9 +38,46 @@ final class DashboardActivityLogCardCell: DashboardCollectionViewCell { self.blog = blog self.presentingViewController = viewController + configureContextMenu(blog: blog) + // FIXME: configure card using api response // Expecting a list of type [Activity] } + + private func configureContextMenu(blog: Blog) { + cardFrameView.onEllipsisButtonTap = { + BlogDashboardAnalytics.trackContextualMenuAccessed(for: .activityLog) + } + cardFrameView.ellipsisButton.showsMenuAsPrimaryAction = true + + + let activityAction = UIAction(title: Strings.allActivity, + image: Style.allActivityImage, + handler: { _ in self.showActivityLog(for: blog) }) + + // Wrap the activity action in a menu to display a divider between the activity action and hide this action. + // https://developer.apple.com/documentation/uikit/uimenu/options/3261455-displayinline + let activitySubmenu = UIMenu(title: String(), options: .displayInline, children: [activityAction]) + + + let hideThisAction = BlogDashboardHelpers.makeHideCardAction(for: .activityLog, + siteID: blog.dotComID?.intValue ?? 0) + + cardFrameView.ellipsisButton.menu = UIMenu(title: String(), options: .displayInline, children: [ + activitySubmenu, + hideThisAction + ]) + } + + // MARK: - Navigation + + private func showActivityLog(for blog: Blog) { + guard let activityLogController = JetpackActivityLogViewController(blog: blog) else { + return + } + presentingViewController?.navigationController?.pushViewController(activityLogController, animated: true) + } + } extension DashboardActivityLogCardCell { @@ -62,8 +96,15 @@ extension DashboardActivityLogCardCell { extension DashboardActivityLogCardCell { private enum Strings { - static let title = NSLocalizedString("activityLog.dashboard.card.title", + static let title = NSLocalizedString("dashboardCard.ActivityLog.title", value: "Recent activity", comment: "Title for the Activity Log dashboard card.") + static let allActivity = NSLocalizedString("dashboardCard.ActivityLog.contextMenu.allActivity", + value: "Recent activity", + comment: "Title for the Activity Log dashboard card.") + } + + private enum Style { + static let allActivityImage = UIImage(systemName: "list.bullet.indent") } } From ec8a3777a693308588a114e220c0795e8066f953 Mon Sep 17 00:00:00 2001 From: Paul Von Schrottky Date: Wed, 5 Apr 2023 14:17:19 -0400 Subject: [PATCH 48/64] Remove personalizing dashboard from release notes --- RELEASE-NOTES.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 6d15cf5ca451..107518e240eb 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -8,7 +8,6 @@ * [**] [internal] Refactor updating account related Core Data operations, which ususally happens during log in and out of the app. [#20394] * [***] [internal] Refactor uploading photos (from the device photo, the Free Photo library, and other sources) to the WordPress Media Library. Affected areas are where you can choose a photo and upload, including the "Media" screen, adding images to a post, updating site icon, etc. [#20322] * [**] [WordPress-only] Warns user about sites with only individual plugins not supporting core app features and offers the option to switch to the Jetpack app. [#20408] -* [**] Add a "Personalize Home Tab" button to the bottom of the Home tab that allows changing cards visibility. [#20369] * [**] [internal] Refactored Google SignIn implementation to not use the Google SDK [#20128] 22.0 From 31f78572d59f52f77e50ffb20a641191e3361180 Mon Sep 17 00:00:00 2001 From: Paul Von Schrottky Date: Wed, 5 Apr 2023 14:21:05 -0400 Subject: [PATCH 49/64] Remove personalize dashboard from release notes --- WordPress/Jetpack/Resources/release_notes.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/WordPress/Jetpack/Resources/release_notes.txt b/WordPress/Jetpack/Resources/release_notes.txt index 05aff8416d6a..c04c5e1e7bc8 100644 --- a/WordPress/Jetpack/Resources/release_notes.txt +++ b/WordPress/Jetpack/Resources/release_notes.txt @@ -1,3 +1,2 @@ * [**] [internal] Refactor updating account related Core Data operations, which ususally happens during log in and out of the app. [#20394] * [***] [internal] Refactor uploading photos (from the device photo, the Free Photo library, and other sources) to the WordPress Media Library. Affected areas are where you can choose a photo and upload, including the "Media" screen, adding images to a post, updating site icon, etc. [#20322] -* [**] Add a "Personalize Home Tab" button to the bottom of the Home tab that allows changing cards visibility. [#20369] From c9ad7cfb01e13d599bef599cad58c4300def87db Mon Sep 17 00:00:00 2001 From: hassaanelgarem Date: Thu, 6 Apr 2023 03:02:32 +0200 Subject: [PATCH 50/64] Update WordPress/Classes/ViewRelated/Blog/BlogPersonalization/BlogDashboardPersonalizationViewModel.swift Co-authored-by: Momo Ozawa --- .../BlogDashboardPersonalizationViewModel.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/Blog/BlogPersonalization/BlogDashboardPersonalizationViewModel.swift b/WordPress/Classes/ViewRelated/Blog/BlogPersonalization/BlogDashboardPersonalizationViewModel.swift index 1698e97e7995..0a654e44f98b 100644 --- a/WordPress/Classes/ViewRelated/Blog/BlogPersonalization/BlogDashboardPersonalizationViewModel.swift +++ b/WordPress/Classes/ViewRelated/Blog/BlogPersonalization/BlogDashboardPersonalizationViewModel.swift @@ -47,7 +47,7 @@ private extension DashboardCard { case .activityLog: return NSLocalizedString("personalizeHome.dashboardCard.activityLog", value: "Recent activity", comment: "Card title for the pesonalization menu") case .pages: - return NSLocalizedString("pages.dashboardCard.activityLog", value: "Pages", comment: "Card title for the pesonalization menu") + return NSLocalizedString("personalizeHome.dashboardCard.pages", value: "Pages", comment: "Card title for the pesonalization menu") case .quickStart, .nextPost, .createPost, .ghost, .failure, .personalize, .jetpackBadge, .jetpackInstall, .domainsDashboardCard, .empty: assertionFailure("\(self) card should not appear in the personalization menus") return "" // These cards don't appear in the personalization menus From aadd2f588facb69ae7fb996046a8d6d03ebc2b2b Mon Sep 17 00:00:00 2001 From: hassaanelgarem Date: Thu, 6 Apr 2023 03:02:56 +0200 Subject: [PATCH 51/64] Update WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift Co-authored-by: Momo Ozawa --- .../WordPressTest/Dashboard/BlogDashboardServiceTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift b/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift index 27e30b67fcc9..06bb5f135363 100644 --- a/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift +++ b/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift @@ -122,7 +122,7 @@ class BlogDashboardServiceTests: CoreDataTestCase { XCTAssertNotNil(activityCardItem) // 2 activity items - XCTAssertEqual(activityCardItem!.apiResponse!.pages!.count, 2) + XCTAssertEqual(activityCardItem!.apiResponse!.activity!.count, 2) expect.fulfill() } From d4e427683b1a799d3f38ecc87c394eaa50ba9354 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Sun, 9 Apr 2023 16:46:26 +0200 Subject: [PATCH 52/64] Fix: remove activity log from remote dashboard cards --- .../Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift index adb9c7997fe5..a929e834cb3c 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift @@ -152,7 +152,7 @@ enum DashboardCard: String, CaseIterable { case todaysStats = "todays_stats" case posts case pages - case activity +// case activity // TODO: Uncomment this when activity log support is added to the endpoint } } From 3b0f3c76a58846fa0346eb85d44298a9baedca1e Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Sun, 9 Apr 2023 17:00:24 +0200 Subject: [PATCH 53/64] Tests: remove activity from remote cards in tests --- .../WordPressTest/Dashboard/BlogDashboardServiceTests.swift | 2 +- WordPress/WordPressTest/Dashboard/DashboardCardTests.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift b/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift index 06bb5f135363..087745d2b9ec 100644 --- a/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift +++ b/WordPress/WordPressTest/Dashboard/BlogDashboardServiceTests.swift @@ -45,7 +45,7 @@ class BlogDashboardServiceTests: CoreDataTestCase { service.fetch(blog: blog) { _ in XCTAssertEqual(self.remoteServiceMock.didCallWithBlogID, self.wpComID) - XCTAssertEqual(self.remoteServiceMock.didRequestCards, ["todays_stats", "posts", "pages", "activity"]) + XCTAssertEqual(self.remoteServiceMock.didRequestCards, ["todays_stats", "posts", "pages"]) expect.fulfill() } diff --git a/WordPress/WordPressTest/Dashboard/DashboardCardTests.swift b/WordPress/WordPressTest/Dashboard/DashboardCardTests.swift index 93e7698316b8..f4cbe73407c7 100644 --- a/WordPress/WordPressTest/Dashboard/DashboardCardTests.swift +++ b/WordPress/WordPressTest/Dashboard/DashboardCardTests.swift @@ -309,7 +309,7 @@ class DashboardCardTests: CoreDataTestCase { let identifiers = DashboardCard.RemoteDashboardCard.allCases.map { $0.rawValue } // Then - XCTAssertEqual(identifiers, ["todays_stats", "posts", "pages", "activity"]) + XCTAssertEqual(identifiers, ["todays_stats", "posts", "pages"]) } // MARK: Helpers From d2508a512a6cac20051ba2bc05c38e86efa0bb6b Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Mon, 10 Apr 2023 03:18:56 +0200 Subject: [PATCH 54/64] Update: configure pages card context menu --- .../Cards/Pages/DashboardPagesCardCell.swift | 51 ++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Pages/DashboardPagesCardCell.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Pages/DashboardPagesCardCell.swift index adfd915ceba9..216b52515e9e 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Pages/DashboardPagesCardCell.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Pages/DashboardPagesCardCell.swift @@ -38,9 +38,51 @@ final class DashboardPagesCardCell: DashboardCollectionViewCell { self.blog = blog self.presentingViewController = viewController + configureContextMenu(blog: blog) + // FIXME: configure card using api response // Expecting a list of pages } + + // MARK: Context Menu + + private func configureContextMenu(blog: Blog) { + cardFrameView.onEllipsisButtonTap = { + BlogDashboardAnalytics.trackContextualMenuAccessed(for: .pages) + } + cardFrameView.ellipsisButton.showsMenuAsPrimaryAction = true + + let children = [makeAllPagesAction(blog: blog), makeHideCardAction(blog: blog)].compactMap { $0 } + + cardFrameView.ellipsisButton.menu = UIMenu(title: String(), options: .displayInline, children: children) + } + + private func makeAllPagesAction(blog: Blog) -> UIMenuElement { + let allPagesAction = UIAction(title: Strings.allPages, + image: Style.allPagesImage, + handler: { _ in self.showPagesList(for: blog) }) + + // Wrap the activity action in a menu to display a divider between the activity action and hide this action. + // https://developer.apple.com/documentation/uikit/uimenu/options/3261455-displayinline + let allPagesSubmenu = UIMenu(title: String(), options: .displayInline, children: [allPagesAction]) + return allPagesSubmenu + } + + private func makeHideCardAction(blog: Blog) -> UIMenuElement? { + guard let siteID = blog.dotComID?.intValue else { + return nil + } + return BlogDashboardHelpers.makeHideCardAction(for: .pages, siteID: siteID) + } + + // MARK: Actions + + private func showPagesList(for blog: Blog) { + guard let presentingViewController else { + return + } + PageListViewController.showForBlog(blog, from: presentingViewController) + } } extension DashboardPagesCardCell { @@ -58,8 +100,15 @@ extension DashboardPagesCardCell { extension DashboardPagesCardCell { private enum Strings { - static let title = NSLocalizedString("pages.dashboard.card.title", + static let title = NSLocalizedString("dashboardCard.Pages.title", value: "Pages", comment: "Title for the Pages dashboard card.") + static let allPages = NSLocalizedString("dashboardCard.Pages.contextMenu.allPages", + value: "All Pages", + comment: "Title for an action that opens the full pages list.") + } + + private enum Style { + static let allPagesImage = UIImage(systemName: "doc.text") } } From b3c7bdb1029339e600320ad02acfc3de10e11f8f Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Mon, 10 Apr 2023 03:26:26 +0200 Subject: [PATCH 55/64] Update: fix inaccurate inline comment --- .../Blog Dashboard/Cards/Pages/DashboardPagesCardCell.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Pages/DashboardPagesCardCell.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Pages/DashboardPagesCardCell.swift index 216b52515e9e..7ec7e7812115 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Pages/DashboardPagesCardCell.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Pages/DashboardPagesCardCell.swift @@ -62,7 +62,7 @@ final class DashboardPagesCardCell: DashboardCollectionViewCell { image: Style.allPagesImage, handler: { _ in self.showPagesList(for: blog) }) - // Wrap the activity action in a menu to display a divider between the activity action and hide this action. + // Wrap the pages action in a menu to display a divider between the pages action and hide this action. // https://developer.apple.com/documentation/uikit/uimenu/options/3261455-displayinline let allPagesSubmenu = UIMenu(title: String(), options: .displayInline, children: [allPagesAction]) return allPagesSubmenu From 0df67ba8e84dc15dcde737bd15bc3538c21aff6f Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Mon, 10 Apr 2023 03:30:15 +0200 Subject: [PATCH 56/64] Update: modify all pages action title --- .../Blog Dashboard/Cards/Pages/DashboardPagesCardCell.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Pages/DashboardPagesCardCell.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Pages/DashboardPagesCardCell.swift index 7ec7e7812115..cecf16e8b333 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Pages/DashboardPagesCardCell.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Pages/DashboardPagesCardCell.swift @@ -104,7 +104,7 @@ extension DashboardPagesCardCell { value: "Pages", comment: "Title for the Pages dashboard card.") static let allPages = NSLocalizedString("dashboardCard.Pages.contextMenu.allPages", - value: "All Pages", + value: "All pages", comment: "Title for an action that opens the full pages list.") } From 52f6f3c4572c88c2f56bd10659ba6b6f17513fba Mon Sep 17 00:00:00 2001 From: Gerardo Date: Mon, 10 Apr 2023 15:25:12 +0200 Subject: [PATCH 57/64] Remove react-native-keyboard-aware-scroll-view --- Podfile | 1 - 1 file changed, 1 deletion(-) diff --git a/Podfile b/Podfile index d8d9f9887a41..fcd3e848fc11 100644 --- a/Podfile +++ b/Podfile @@ -142,7 +142,6 @@ def gutenberg_dependencies(options) Yoga RCT-Folly glog - react-native-keyboard-aware-scroll-view react-native-safe-area react-native-safe-area-context react-native-video From a9f36bad915430eb535dcd1379c9b3c48af00b6f Mon Sep 17 00:00:00 2001 From: Gerardo Date: Mon, 10 Apr 2023 15:43:46 +0200 Subject: [PATCH 58/64] Update Gutenberg ref to v1.93.0-alpha2 --- Podfile | 2 +- Podfile.lock | 206 +++++++++++++++++++++++++-------------------------- 2 files changed, 101 insertions(+), 107 deletions(-) diff --git a/Podfile b/Podfile index fcd3e848fc11..e1d525894035 100644 --- a/Podfile +++ b/Podfile @@ -91,7 +91,7 @@ def shared_style_pods end def gutenberg_pods - gutenberg tag: 'v1.93.0-alpha1' + gutenberg tag: 'v1.93.0-alpha2' end def gutenberg(options) diff --git a/Podfile.lock b/Podfile.lock index 6b726f4de788..9612c33b454c 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -330,8 +330,6 @@ PODS: - React-Core - react-native-get-random-values (1.4.0): - React-Core - - react-native-keyboard-aware-scroll-view (0.8.8-wp-1): - - React-Core - react-native-safe-area (0.5.1): - React-Core - react-native-safe-area-context (3.2.0): @@ -544,18 +542,18 @@ DEPENDENCIES: - AppCenter (~> 4.1) - AppCenter/Distribute (~> 4.1) - Automattic-Tracks-iOS (~> 0.13) - - boost (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/boost.podspec.json`) - - BVLinearGradient (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/BVLinearGradient.podspec.json`) + - boost (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/boost.podspec.json`) + - BVLinearGradient (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/BVLinearGradient.podspec.json`) - CocoaLumberjack/Swift (~> 3.0) - CropViewController (= 2.5.3) - Down (~> 0.6.6) - - FBLazyVector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/FBLazyVector.podspec.json`) - - FBReactNativeSpec (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json`) + - FBLazyVector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/FBLazyVector.podspec.json`) + - FBReactNativeSpec (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json`) - FSInteractiveMap (from `https://github.com/wordpress-mobile/FSInteractiveMap.git`, tag `0.2.0`) - Gifu (= 3.2.0) - - glog (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/glog.podspec.json`) + - glog (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/glog.podspec.json`) - Gridicons (~> 1.1.0) - - Gutenberg (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, tag `v1.93.0-alpha1`) + - Gutenberg (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, tag `v1.93.0-alpha2`) - JTAppleCalendar (~> 8.0.2) - Kanvas (~> 1.4.4) - MediaEditor (~> 1.2.1) @@ -564,49 +562,48 @@ DEPENDENCIES: - "NSURL+IDN (~> 0.4)" - OCMock (~> 3.4.3) - OHHTTPStubs/Swift (~> 9.1.0) - - RCT-Folly (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RCT-Folly.podspec.json`) - - RCTRequired (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RCTRequired.podspec.json`) - - RCTTypeSafety (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RCTTypeSafety.podspec.json`) + - RCT-Folly (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/RCT-Folly.podspec.json`) + - RCTRequired (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/RCTRequired.podspec.json`) + - RCTTypeSafety (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/RCTTypeSafety.podspec.json`) - Reachability (= 3.2) - - React (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React.podspec.json`) - - React-bridging (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-bridging.podspec.json`) - - React-callinvoker (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-callinvoker.podspec.json`) - - React-Codegen (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-Codegen.podspec.json`) - - React-Core (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-Core.podspec.json`) - - React-CoreModules (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-CoreModules.podspec.json`) - - React-cxxreact (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-cxxreact.podspec.json`) - - React-jsi (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-jsi.podspec.json`) - - React-jsiexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-jsiexecutor.podspec.json`) - - React-jsinspector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-jsinspector.podspec.json`) - - React-logger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-logger.podspec.json`) - - react-native-blur (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-blur.podspec.json`) - - react-native-get-random-values (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-get-random-values.podspec.json`) - - react-native-keyboard-aware-scroll-view (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-keyboard-aware-scroll-view.podspec.json`) - - react-native-safe-area (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-safe-area.podspec.json`) - - react-native-safe-area-context (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-safe-area-context.podspec.json`) - - react-native-slider (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-slider.podspec.json`) - - react-native-video (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-video.podspec.json`) - - react-native-webview (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-webview.podspec.json`) - - React-perflogger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-perflogger.podspec.json`) - - React-RCTActionSheet (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTActionSheet.podspec.json`) - - React-RCTAnimation (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTAnimation.podspec.json`) - - React-RCTBlob (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTBlob.podspec.json`) - - React-RCTImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTImage.podspec.json`) - - React-RCTLinking (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTLinking.podspec.json`) - - React-RCTNetwork (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTNetwork.podspec.json`) - - React-RCTSettings (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTSettings.podspec.json`) - - React-RCTText (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTText.podspec.json`) - - React-RCTVibration (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTVibration.podspec.json`) - - React-runtimeexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-runtimeexecutor.podspec.json`) - - ReactCommon (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/ReactCommon.podspec.json`) - - RNCClipboard (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNCClipboard.podspec.json`) - - RNCMaskedView (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNCMaskedView.podspec.json`) - - RNFastImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNFastImage.podspec.json`) - - RNGestureHandler (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNGestureHandler.podspec.json`) - - RNReanimated (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNReanimated.podspec.json`) - - RNScreens (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNScreens.podspec.json`) - - RNSVG (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNSVG.podspec.json`) - - RNTAztecView (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, tag `v1.93.0-alpha1`) + - React (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React.podspec.json`) + - React-bridging (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-bridging.podspec.json`) + - React-callinvoker (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-callinvoker.podspec.json`) + - React-Codegen (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-Codegen.podspec.json`) + - React-Core (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-Core.podspec.json`) + - React-CoreModules (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-CoreModules.podspec.json`) + - React-cxxreact (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-cxxreact.podspec.json`) + - React-jsi (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-jsi.podspec.json`) + - React-jsiexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-jsiexecutor.podspec.json`) + - React-jsinspector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-jsinspector.podspec.json`) + - React-logger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-logger.podspec.json`) + - react-native-blur (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/react-native-blur.podspec.json`) + - react-native-get-random-values (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/react-native-get-random-values.podspec.json`) + - react-native-safe-area (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/react-native-safe-area.podspec.json`) + - react-native-safe-area-context (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/react-native-safe-area-context.podspec.json`) + - react-native-slider (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/react-native-slider.podspec.json`) + - react-native-video (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/react-native-video.podspec.json`) + - react-native-webview (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/react-native-webview.podspec.json`) + - React-perflogger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-perflogger.podspec.json`) + - React-RCTActionSheet (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-RCTActionSheet.podspec.json`) + - React-RCTAnimation (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-RCTAnimation.podspec.json`) + - React-RCTBlob (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-RCTBlob.podspec.json`) + - React-RCTImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-RCTImage.podspec.json`) + - React-RCTLinking (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-RCTLinking.podspec.json`) + - React-RCTNetwork (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-RCTNetwork.podspec.json`) + - React-RCTSettings (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-RCTSettings.podspec.json`) + - React-RCTText (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-RCTText.podspec.json`) + - React-RCTVibration (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-RCTVibration.podspec.json`) + - React-runtimeexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-runtimeexecutor.podspec.json`) + - ReactCommon (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/ReactCommon.podspec.json`) + - RNCClipboard (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/RNCClipboard.podspec.json`) + - RNCMaskedView (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/RNCMaskedView.podspec.json`) + - RNFastImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/RNFastImage.podspec.json`) + - RNGestureHandler (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/RNGestureHandler.podspec.json`) + - RNReanimated (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/RNReanimated.podspec.json`) + - RNScreens (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/RNScreens.podspec.json`) + - RNSVG (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/RNSVG.podspec.json`) + - RNTAztecView (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, tag `v1.93.0-alpha2`) - Starscream (= 3.0.6) - SVProgressHUD (= 2.2.5) - SwiftLint (~> 0.50) @@ -616,7 +613,7 @@ DEPENDENCIES: - WordPressShared (~> 2.0-beta) - WordPressUI (~> 1.12.5) - WPMediaPicker (~> 1.8.7) - - Yoga (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/Yoga.podspec.json`) + - Yoga (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/Yoga.podspec.json`) - ZendeskSupportSDK (= 5.3.0) - ZIPFoundation (~> 0.9.8) @@ -676,110 +673,108 @@ SPEC REPOS: EXTERNAL SOURCES: boost: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/boost.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/boost.podspec.json BVLinearGradient: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/BVLinearGradient.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/BVLinearGradient.podspec.json FBLazyVector: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/FBLazyVector.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/FBLazyVector.podspec.json FBReactNativeSpec: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json FSInteractiveMap: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 glog: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/glog.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/glog.podspec.json Gutenberg: :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true - :tag: v1.93.0-alpha1 + :tag: v1.93.0-alpha2 RCT-Folly: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RCT-Folly.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/RCT-Folly.podspec.json RCTRequired: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RCTRequired.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/RCTRequired.podspec.json RCTTypeSafety: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RCTTypeSafety.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/RCTTypeSafety.podspec.json React: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React.podspec.json React-bridging: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-bridging.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-bridging.podspec.json React-callinvoker: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-callinvoker.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-callinvoker.podspec.json React-Codegen: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-Codegen.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-Codegen.podspec.json React-Core: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-Core.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-Core.podspec.json React-CoreModules: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-CoreModules.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-CoreModules.podspec.json React-cxxreact: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-cxxreact.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-cxxreact.podspec.json React-jsi: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-jsi.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-jsi.podspec.json React-jsiexecutor: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-jsiexecutor.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-jsiexecutor.podspec.json React-jsinspector: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-jsinspector.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-jsinspector.podspec.json React-logger: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-logger.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-logger.podspec.json react-native-blur: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-blur.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/react-native-blur.podspec.json react-native-get-random-values: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-get-random-values.podspec.json - react-native-keyboard-aware-scroll-view: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-keyboard-aware-scroll-view.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/react-native-get-random-values.podspec.json react-native-safe-area: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-safe-area.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/react-native-safe-area.podspec.json react-native-safe-area-context: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-safe-area-context.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/react-native-safe-area-context.podspec.json react-native-slider: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-slider.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/react-native-slider.podspec.json react-native-video: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-video.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/react-native-video.podspec.json react-native-webview: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/react-native-webview.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/react-native-webview.podspec.json React-perflogger: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-perflogger.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-perflogger.podspec.json React-RCTActionSheet: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTActionSheet.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-RCTActionSheet.podspec.json React-RCTAnimation: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTAnimation.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-RCTAnimation.podspec.json React-RCTBlob: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTBlob.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-RCTBlob.podspec.json React-RCTImage: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTImage.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-RCTImage.podspec.json React-RCTLinking: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTLinking.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-RCTLinking.podspec.json React-RCTNetwork: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTNetwork.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-RCTNetwork.podspec.json React-RCTSettings: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTSettings.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-RCTSettings.podspec.json React-RCTText: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTText.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-RCTText.podspec.json React-RCTVibration: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-RCTVibration.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-RCTVibration.podspec.json React-runtimeexecutor: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/React-runtimeexecutor.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/React-runtimeexecutor.podspec.json ReactCommon: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/ReactCommon.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/ReactCommon.podspec.json RNCClipboard: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNCClipboard.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/RNCClipboard.podspec.json RNCMaskedView: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNCMaskedView.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/RNCMaskedView.podspec.json RNFastImage: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNFastImage.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/RNFastImage.podspec.json RNGestureHandler: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNGestureHandler.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/RNGestureHandler.podspec.json RNReanimated: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNReanimated.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/RNReanimated.podspec.json RNScreens: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNScreens.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/RNScreens.podspec.json RNSVG: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/RNSVG.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/RNSVG.podspec.json RNTAztecView: :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true - :tag: v1.93.0-alpha1 + :tag: v1.93.0-alpha2 Yoga: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha1/third-party-podspecs/Yoga.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.93.0-alpha2/third-party-podspecs/Yoga.podspec.json CHECKOUT OPTIONS: FSInteractiveMap: @@ -788,11 +783,11 @@ CHECKOUT OPTIONS: Gutenberg: :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true - :tag: v1.93.0-alpha1 + :tag: v1.93.0-alpha2 RNTAztecView: :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true - :tag: v1.93.0-alpha1 + :tag: v1.93.0-alpha2 SPEC CHECKSUMS: Alamofire: 3ec537f71edc9804815215393ae2b1a8ea33a844 @@ -808,7 +803,7 @@ SPEC CHECKSUMS: DoubleConversion: e22e0762848812a87afd67ffda3998d9ef29170c Down: 71bf4af3c04fa093e65dffa25c4b64fa61287373 FBLazyVector: 16fdf30fcbc7177c6a4bdf35ef47225577eb9636 - FBReactNativeSpec: 7e38f5138250d192fc5bf1cb1924d57f8a9a66d7 + FBReactNativeSpec: 2ffeca5f498ddc94234d823f38abf51ce0313171 fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 FSInteractiveMap: a396f610f48b76cb540baa87139d056429abda86 Gifu: 7bcb6427457d85e0b4dff5a84ec5947ac19a93ea @@ -844,7 +839,6 @@ SPEC CHECKSUMS: React-logger: 16a67709f5aa1d752fd09f9e6ccbf802ba0c24e9 react-native-blur: 14c75aa19da8734c1656d5b6ca5adb859b2c26aa react-native-get-random-values: 2869478c635a6e33080b917ce33f2803cb69262c - react-native-keyboard-aware-scroll-view: 042fe86d8358780b9697cadf5f8cefbf8f8c7378 react-native-safe-area: e3de9e959c7baaae8db9bcb015d99ed1da25c9d5 react-native-safe-area-context: 1e501ec30c260422def56e95e11edb103caa5bf2 react-native-slider: f1ea4381d6d43ef5b945b5b101e9c66d249630a6 @@ -896,6 +890,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: ae5b4b813d216d3bf0a148773267fff14bd51d37 -PODFILE CHECKSUM: d4e1eb2920961f2a882861ce157f08766fd385e0 +PODFILE CHECKSUM: 72adba60a34c9458bec2c796f35773d10d4a317d COCOAPODS: 1.11.3 From b3a2e86f15e5e7173204b2f94bf955064a3fae2f Mon Sep 17 00:00:00 2001 From: Tony Li Date: Wed, 5 Apr 2023 21:56:08 +1200 Subject: [PATCH 59/64] Fix Core Data concurrency issues in `AuthenticatedImageDownload` --- .../Services/MediaThumbnailService.swift | 2 +- .../Classes/Utility/ContextManager.swift | 33 +++++++++ .../Gutenberg/EditorMediaUtility.swift | 70 ++++++++++++------- 3 files changed, 79 insertions(+), 26 deletions(-) diff --git a/WordPress/Classes/Services/MediaThumbnailService.swift b/WordPress/Classes/Services/MediaThumbnailService.swift index 229f7d8d1b0e..5e185a20bf60 100644 --- a/WordPress/Classes/Services/MediaThumbnailService.swift +++ b/WordPress/Classes/Services/MediaThumbnailService.swift @@ -189,7 +189,7 @@ class MediaThumbnailService: NSObject { return } - let download = AuthenticatedImageDownload(url: imageURL, blog: media.blog, callbackQueue: callbackQueue, onSuccess: onCompletion, onFailure: onError) + let download = AuthenticatedImageDownload(url: imageURL, blogObjectID: media.blog.objectID, callbackQueue: callbackQueue, onSuccess: onCompletion, onFailure: onError) download.start() } diff --git a/WordPress/Classes/Utility/ContextManager.swift b/WordPress/Classes/Utility/ContextManager.swift index a3cbaaf02a1a..e8b5315c7edc 100644 --- a/WordPress/Classes/Utility/ContextManager.swift +++ b/WordPress/Classes/Utility/ContextManager.swift @@ -337,3 +337,36 @@ private enum SaveContextOption { case asynchronouslyWithCallback(completion: () -> Void, queue: DispatchQueue) case alreadyInContextQueue } + +/// Use this temporary workaround to mitigate Core Data concurrency issues when accessing the given `object`. +/// +/// When the app is launched from Xcode, some code may crash due to the effect of the "com.apple.CoreData.ConcurrencyDebug" +/// launch argument. The crash indicates the crash site violates [the following rule](https://developer.apple.com/documentation/coredata/using_core_data_in_the_background#overview) +/// +/// > To use Core Data in a multithreaded environment, ensure that: +/// > - Managed objects retrieved from a context are bound to the same queue that the context is bound to. +/// +/// This function can be used as a temporary workaround to mitigate aforementioned crashes during development. +/// +/// - Warning: The workaround does not apply to release builds. In a release build, calling this function is exactly +/// the same as calling the given `closure` directly. +/// +/// - Warning: This function is _not_ a solution for Core Data concurrency issues, and should only be used as a +/// temporary solution, to avoid the Core Data concurrency issue becoming a blocker to feature developlement. +@available(*, deprecated, message: "This workaround is meant as a temporary solution to mitigate Core Data concurrency issues when accessing the `object`. Please see this function's API doc for details.") +@inlinable +public func workaroundCoreDataConcurrencyIssue(accessing object: NSManagedObject, _ closure: () -> Value) -> Value { +#if DEBUG + guard let context = object.managedObjectContext else { + fatalError("The object must be bound to a context: \(object)") + } + + var value: Value! + context.performAndWait { + value = closure() + } + return value +#else + return closure() +#endif /* DEBUG */ +} diff --git a/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift b/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift index d5144db6f4e9..1467f962f064 100644 --- a/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift +++ b/WordPress/Classes/ViewRelated/Gutenberg/EditorMediaUtility.swift @@ -4,26 +4,42 @@ import Gridicons final class AuthenticatedImageDownload: AsyncOperation { let url: URL - let blog: Blog + let blogObjectID: NSManagedObjectID private let callbackQueue: DispatchQueue private let onSuccess: (UIImage) -> () private let onFailure: (Error) -> () - init(url: URL, blog: Blog, callbackQueue: DispatchQueue, onSuccess: @escaping (UIImage) -> (), onFailure: @escaping (Error) -> ()) { + init(url: URL, blogObjectID: NSManagedObjectID, callbackQueue: DispatchQueue, onSuccess: @escaping (UIImage) -> (), onFailure: @escaping (Error) -> ()) { self.url = url - self.blog = blog + self.blogObjectID = blogObjectID self.callbackQueue = callbackQueue self.onSuccess = onSuccess self.onFailure = onFailure } override func main() { - let mediaRequestAuthenticator = MediaRequestAuthenticator() - let host = MediaHost(with: blog) { error in - // We'll log the error, so we know it's there, but we won't halt execution. - WordPressAppDelegate.crashLogging?.logError(error) + let result = ContextManager.shared.performQuery { context in + Result { + let blog = try context.existingObject(with: self.blogObjectID) as! Blog + return MediaHost(with: blog) { error in + // We'll log the error, so we know it's there, but we won't halt execution. + WordPressAppDelegate.crashLogging?.logError(error) + } + } + } + + let host: MediaHost + do { + host = try result.get() + } catch { + self.state = .isFinished + self.callbackQueue.async { + self.onFailure(error) + } + return } + let mediaRequestAuthenticator = MediaRequestAuthenticator() mediaRequestAuthenticator.authenticatedRequest( for: url, from: host, @@ -119,33 +135,37 @@ class EditorMediaUtility { func downloadImage( from url: URL, size requestSize: CGSize, - scale: CGFloat, post: AbstractPost, + scale: CGFloat, + post: AbstractPost, success: @escaping (UIImage) -> Void, - onFailure failure: @escaping (Error) -> Void) -> ImageDownloaderTask { + onFailure failure: @escaping (Error) -> Void + ) -> ImageDownloaderTask { let imageMaxDimension = max(requestSize.width, requestSize.height) //use height zero to maintain the aspect ratio when fetching var size = CGSize(width: imageMaxDimension, height: 0) - let requestURL: URL - - if url.isFileURL { - requestURL = url - } else if post.isPrivateAtWPCom() && url.isHostedAtWPCom { - // private wpcom image needs special handling. - // the size that WPImageHelper expects is pixel size - size.width = size.width * scale - requestURL = WPImageURLHelper.imageURLWithSize(size, forImageURL: url) - } else if !post.blog.isHostedAtWPcom && post.blog.isBasicAuthCredentialStored() { - size.width = size.width * scale - requestURL = WPImageURLHelper.imageURLWithSize(size, forImageURL: url) - } else { - // the size that PhotonImageURLHelper expects is points size - requestURL = PhotonImageURLHelper.photonURL(with: size, forImageURL: url) + let (requestURL, blogObjectID) = workaroundCoreDataConcurrencyIssue(accessing: post) { + let requestURL: URL + if url.isFileURL { + requestURL = url + } else if post.isPrivateAtWPCom() && url.isHostedAtWPCom { + // private wpcom image needs special handling. + // the size that WPImageHelper expects is pixel size + size.width = size.width * scale + requestURL = WPImageURLHelper.imageURLWithSize(size, forImageURL: url) + } else if !post.blog.isHostedAtWPcom && post.blog.isBasicAuthCredentialStored() { + size.width = size.width * scale + requestURL = WPImageURLHelper.imageURLWithSize(size, forImageURL: url) + } else { + // the size that PhotonImageURLHelper expects is points size + requestURL = PhotonImageURLHelper.photonURL(with: size, forImageURL: url) + } + return (requestURL, post.blog.objectID) } let imageDownload = AuthenticatedImageDownload( url: requestURL, - blog: post.blog, + blogObjectID: blogObjectID, callbackQueue: .main, onSuccess: success, onFailure: failure) From af70c0bf4b4e5ca25a66ee352ac082829768d772 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Wed, 5 Apr 2023 21:57:50 +1200 Subject: [PATCH 60/64] Apply Core Data concurrency issue workaround to post editor --- .../Gutenberg/GutenbergViewController.swift | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift index 2ea2dfdadce4..d64aaa7c381a 100644 --- a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift +++ b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift @@ -576,11 +576,15 @@ extension GutenbergViewController { extension GutenbergViewController: GutenbergBridgeDelegate { func gutenbergDidGetRequestFetch(path: String, completion: @escaping (Result) -> Void) { - GutenbergNetworkRequest(path: path, blog: post.blog, method: .get).request(completion: completion) + workaroundCoreDataConcurrencyIssue(accessing: post) { + GutenbergNetworkRequest(path: path, blog: post.blog, method: .get).request(completion: completion) + } } func gutenbergDidPostRequestFetch(path: String, data: [String: AnyObject]?, completion: @escaping (Result) -> Void) { - GutenbergNetworkRequest(path: path, blog: post.blog, method: .post, data: data).request(completion: completion) + workaroundCoreDataConcurrencyIssue(accessing: post) { + GutenbergNetworkRequest(path: path, blog: post.blog, method: .post, data: data).request(completion: completion) + } } func editorDidAutosave() { @@ -1071,7 +1075,9 @@ extension GutenbergViewController: GutenbergBridgeDelegate { } func gutenbergDidRequestSendEventToHost(_ eventName: String, properties: [AnyHashable: Any]) -> Void { - WPAnalytics.trackBlockEditorEvent(eventName, properties: properties, blog: post.blog) + workaroundCoreDataConcurrencyIssue(accessing: post) { + WPAnalytics.trackBlockEditorEvent(eventName, properties: properties, blog: self.post.blog) + } } } @@ -1181,12 +1187,14 @@ extension GutenbergViewController: GutenbergBridgeDataSource { } func gutenbergMediaSources() -> [Gutenberg.MediaSource] { - return [ - post.blog.supports(.stockPhotos) ? .stockPhotos : nil, - post.blog.supports(.tenor) ? .tenor : nil, - .otherApps, - .allFiles, - ].compactMap { $0 } + workaroundCoreDataConcurrencyIssue(accessing: post) { + [ + post.blog.supports(.stockPhotos) ? .stockPhotos : nil, + post.blog.supports(.tenor) ? .tenor : nil, + .otherApps, + .allFiles, + ].compactMap { $0 } + } } func gutenbergCapabilities() -> [Capabilities: Bool] { From 6c19ab5a0490a75c6a877292a90331d9a20a219f Mon Sep 17 00:00:00 2001 From: Tony Li Date: Wed, 5 Apr 2023 21:58:27 +1200 Subject: [PATCH 61/64] Enable Core Data concurrency debug option in editor UI tests --- WordPress/UITests/Tests/EditorGutenbergTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/UITests/Tests/EditorGutenbergTests.swift b/WordPress/UITests/Tests/EditorGutenbergTests.swift index b6da777fa810..5718ce87b30d 100644 --- a/WordPress/UITests/Tests/EditorGutenbergTests.swift +++ b/WordPress/UITests/Tests/EditorGutenbergTests.swift @@ -5,7 +5,7 @@ class EditorGutenbergTests: XCTestCase { private var editorScreen: BlockEditorScreen! override func setUpWithError() throws { - setUpTestSuite(crashOnCoreDataConcurrencyIssues: false) + setUpTestSuite() _ = try LoginFlow.login(siteUrl: WPUITestCredentials.testWPcomSiteAddress, email: WPUITestCredentials.testWPcomUserEmail, password: WPUITestCredentials.testWPcomPassword) editorScreen = try EditorFlow From ac74bb32da8508c57b7d6a3654306a906cae03cc Mon Sep 17 00:00:00 2001 From: Tony Li Date: Thu, 6 Apr 2023 10:24:30 +1200 Subject: [PATCH 62/64] Remove a couple of Core Data concurrency issue workarounds --- .../Gutenberg/GutenbergViewController.swift | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift index d64aaa7c381a..982925b8e046 100644 --- a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift +++ b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift @@ -576,14 +576,14 @@ extension GutenbergViewController { extension GutenbergViewController: GutenbergBridgeDelegate { func gutenbergDidGetRequestFetch(path: String, completion: @escaping (Result) -> Void) { - workaroundCoreDataConcurrencyIssue(accessing: post) { - GutenbergNetworkRequest(path: path, blog: post.blog, method: .get).request(completion: completion) + post.managedObjectContext!.perform { + GutenbergNetworkRequest(path: path, blog: self.post.blog, method: .get).request(completion: completion) } } func gutenbergDidPostRequestFetch(path: String, data: [String: AnyObject]?, completion: @escaping (Result) -> Void) { - workaroundCoreDataConcurrencyIssue(accessing: post) { - GutenbergNetworkRequest(path: path, blog: post.blog, method: .post, data: data).request(completion: completion) + post.managedObjectContext!.perform { + GutenbergNetworkRequest(path: path, blog: self.post.blog, method: .post, data: data).request(completion: completion) } } @@ -1075,7 +1075,7 @@ extension GutenbergViewController: GutenbergBridgeDelegate { } func gutenbergDidRequestSendEventToHost(_ eventName: String, properties: [AnyHashable: Any]) -> Void { - workaroundCoreDataConcurrencyIssue(accessing: post) { + post.managedObjectContext!.perform { WPAnalytics.trackBlockEditorEvent(eventName, properties: properties, blog: self.post.blog) } } From 4935ade0526126614b8460e8d753849efe3bd4ad Mon Sep 17 00:00:00 2001 From: Tony Li Date: Tue, 11 Apr 2023 11:31:58 +1200 Subject: [PATCH 63/64] The repo cache key should be buildkite pipeline slug The `cache_repo` script uses buildkite pipeline slug as the repo cache key. We should use the same key in the pipeline files here too. https://github.com/Automattic/a8c-ci-toolkit-buildkite-plugin/blob/3d46f640907eba00f0a979bfc424a50a9b25a934/bin/cache_repo#L19 --- .buildkite/cache-builder.yml | 2 +- .buildkite/pipeline.yml | 2 +- .buildkite/release-builds.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.buildkite/cache-builder.yml b/.buildkite/cache-builder.yml index a87f46d07d94..f50ba9bc9c3c 100644 --- a/.buildkite/cache-builder.yml +++ b/.buildkite/cache-builder.yml @@ -10,7 +10,7 @@ common_params: - automattic/a8c-ci-toolkit#2.13.0 - automattic/git-s3-cache#v1.1.3: bucket: "a8c-repo-mirrors" - repo: "wordpress-mobile/wordpress-ios/" + repo: "automattic/wordpress-ios/" # Common environment values to use with the `env` key. - &common_env # Be sure to also update the `.xcode-version` file when updating the Xcode image/version here diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 647a4c606b56..8630028a16fa 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -5,7 +5,7 @@ common_params: - automattic/a8c-ci-toolkit#2.13.0 - automattic/git-s3-cache#v1.1.3: bucket: "a8c-repo-mirrors" - repo: "wordpress-mobile/wordpress-ios/" + repo: "automattic/wordpress-ios/" # Common environment values to use with the `env` key. - &common_env # Be sure to also update the `.xcode-version` file when updating the Xcode image/version here diff --git a/.buildkite/release-builds.yml b/.buildkite/release-builds.yml index 302b9ddbf222..4ec7df83aa07 100644 --- a/.buildkite/release-builds.yml +++ b/.buildkite/release-builds.yml @@ -7,7 +7,7 @@ common_params: - automattic/a8c-ci-toolkit#2.13.0 - automattic/git-s3-cache#v1.1.3: bucket: "a8c-repo-mirrors" - repo: "wordpress-mobile/wordpress-ios/" + repo: "automattic/wordpress-ios/" # Common environment values to use with the `env` key. - &common_env # Be sure to also update the `.xcode-version` file when updating the Xcode image/version here From ee86143afc7bed0b00949f3f48948672d020df0d Mon Sep 17 00:00:00 2001 From: Tony Li Date: Tue, 11 Apr 2023 13:49:26 +1200 Subject: [PATCH 64/64] Update git s3 cache plugin to the latest version --- .buildkite/cache-builder.yml | 2 +- .buildkite/pipeline.yml | 2 +- .buildkite/release-builds.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.buildkite/cache-builder.yml b/.buildkite/cache-builder.yml index a87f46d07d94..67234c3ef2ca 100644 --- a/.buildkite/cache-builder.yml +++ b/.buildkite/cache-builder.yml @@ -8,7 +8,7 @@ common_params: # Common plugin settings to use with the `plugins` key. - &common_plugins - automattic/a8c-ci-toolkit#2.13.0 - - automattic/git-s3-cache#v1.1.3: + - automattic/git-s3-cache#1.1.4: bucket: "a8c-repo-mirrors" repo: "wordpress-mobile/wordpress-ios/" # Common environment values to use with the `env` key. diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 647a4c606b56..f33bfabcb6ab 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -3,7 +3,7 @@ common_params: # Common plugin settings to use with the `plugins` key. - &common_plugins - automattic/a8c-ci-toolkit#2.13.0 - - automattic/git-s3-cache#v1.1.3: + - automattic/git-s3-cache#1.1.4: bucket: "a8c-repo-mirrors" repo: "wordpress-mobile/wordpress-ios/" # Common environment values to use with the `env` key. diff --git a/.buildkite/release-builds.yml b/.buildkite/release-builds.yml index 302b9ddbf222..7d9c404d64a9 100644 --- a/.buildkite/release-builds.yml +++ b/.buildkite/release-builds.yml @@ -5,7 +5,7 @@ common_params: # Common plugin settings to use with the `plugins` key. - &common_plugins - automattic/a8c-ci-toolkit#2.13.0 - - automattic/git-s3-cache#v1.1.3: + - automattic/git-s3-cache#1.1.4: bucket: "a8c-repo-mirrors" repo: "wordpress-mobile/wordpress-ios/" # Common environment values to use with the `env` key.