From b7fd7359dd630933b3edf364a35a5f3b96b7f7ff Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Wed, 17 May 2023 13:18:00 +1000 Subject: [PATCH 01/48] Add a local `podspec` to download Gutenberg XCFramework commit builds --- Gutenberg/cocoapods_helpers.rb | 28 +++++++++++++++----- Gutenberg/gutenberg.podspec | 48 ++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 7 deletions(-) create mode 100644 Gutenberg/gutenberg.podspec diff --git a/Gutenberg/cocoapods_helpers.rb b/Gutenberg/cocoapods_helpers.rb index 526f13c5446b..7a57c87b00f3 100644 --- a/Gutenberg/cocoapods_helpers.rb +++ b/Gutenberg/cocoapods_helpers.rb @@ -59,6 +59,7 @@ React-bridging ].freeze +# rubocop:disable Metrics/AbcSize def gutenberg_pod(config: GUTENBERG_CONFIG) options = config @@ -68,23 +69,36 @@ def gutenberg_pod(config: GUTENBERG_CONFIG) options = { path: File.exist?(local_gutenberg) ? local_gutenberg : DEFAULT_GUTENBERG_LOCATION } raise "Could not find Gutenberg pod at #{options[:path]}. You can configure the path using the #{local_gutenberg_key} environment variable." unless File.exist?(options[:path]) - else + + pod 'Gutenberg', options + pod 'RNTAztecView', options + + gutenberg_dependencies(options: options) + elsif options[:tag] options[:git] = "https://github.com/#{GITHUB_ORG}/#{REPO_NAME}.git" options[:submodules] = true - end - pod 'Gutenberg', options - pod 'RNTAztecView', options + # This duplication with the branch above will disappear once tags will use pre-built binaries. + pod 'Gutenberg', options + pod 'RNTAztecView', options - gutenberg_dependencies(options: options) + gutenberg_dependencies(options: options) + elsif options[:commit] + pod 'Gutenberg', path: File.join(__dir__, 'gutenberg.podspec') + end end +# rubocop:enable Metrics/AbcSize def gutenberg_dependencies(options:) if options[:path] podspec_prefix = options[:path] + elsif options[:tag] + tag = options[:tag] + podspec_prefix = "https://raw.githubusercontent.com/#{GITHUB_ORG}/#{REPO_NAME}/#{tag}" + elsif options[:commit] + return # when referencing via a commit, we donwload pre-built frameworks else - tag_or_commit = options[:tag] || options[:commit] - podspec_prefix = "https://raw.githubusercontent.com/#{GITHUB_ORG}/#{REPO_NAME}/#{tag_or_commit}" + raise "Unexpected Gutenberg dependencies configuration '#{options}'" end podspec_prefix += '/third-party-podspecs' diff --git a/Gutenberg/gutenberg.podspec b/Gutenberg/gutenberg.podspec new file mode 100644 index 000000000000..dd688597463b --- /dev/null +++ b/Gutenberg/gutenberg.podspec @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +# FIXME: This spec generates lots of warnings because of what looks like garbage files being in the XCFrameworks +# +# Example: +# +# - NOTE | [iOS] xcodebuild: note: note: while processing while processing /Users/gio/Developer/a8c/gutenberg-mobile/Johannes/DerivedData/ModuleCache.noindex/29X134XZYNZEH/Foundation-TDMNIE45PJWJ.pcm/Users/gio/Developer/a8c/gutenberg-mobile/Johannes/DerivedData/ModuleCache.noindex/2HX40YJG1I01Y/Foundation-TDMNIE45PJWJ.pcm + +require_relative './version' + +raise 'Could not find Gutenberg version configuration' if GUTENBERG_CONFIG.nil? + +version = GUTENBERG_CONFIG[:commit] + +raise "Trying to fetch Gutenberg XCFramework from Automattic's distribution server with invalid version '#{GUTENBERG_CONFIG}'" if version.nil? + +XCFRAMEWORK_STORAGE_URL = 'https://d2twmm2nzpx3bg.cloudfront.net/' + +# A spec for a pod whose only job is delegating the XCFrameworks integration to CocoaPods. +# +# This is used to fetch Gutenberg builds that come from commits instead of tags. +# Builds from tags are "official" and stable, so we distribute them via GitHub we'll eventually publish them on CocoaPods. +# The artifacts for builds from commits are instead only stored on an Automattic's server. +Pod::Spec.new do |s| + s.name = 'Gutenberg' + s.version = '1.0.0' # The value here is irrelevant, but required + s.summary = 'A spec to help integrating the Gutenberg XCFramework' + s.homepage = 'https://apps.wordpress.com' + s.license = File.join(__dir__, '..', 'LICENSE') + s.authors = 'Automattic' + + s.ios.deployment_target = '13.0' # TODO: Read from common source + s.swift_version = '5.0' # TODO: read from common source + + s.requires_arc = true # TODO: Can this be omitted? + + # Tell CocoaPods where to download the XCFramework(s) ZIP with `source` and what to use from the ZIP's content with `vendored_frameworks`. + # + # See https://github.com/CocoaPods/CocoaPods/issues/10288 + s.source = { http: "#{XCFRAMEWORK_STORAGE_URL}/Gutenberg-#{version}.zip", type: 'zip' } + s.ios.vendored_frameworks = [ + 'Aztec.xcframework', + 'Gutenberg.xcframework', + 'RNTAztecView.xcframework', + 'React.xcframework', + 'yoga.xcframework' + ] +end From 27e6b3fe8a1e59a7055039d390108834dafad591 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Wed, 17 May 2023 13:26:59 +1000 Subject: [PATCH 02/48] Add check to fail `pod install` if Gutenberg ZIP doesn't exist at URL --- Gutenberg/gutenberg.podspec | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Gutenberg/gutenberg.podspec b/Gutenberg/gutenberg.podspec index dd688597463b..8738e7dd177c 100644 --- a/Gutenberg/gutenberg.podspec +++ b/Gutenberg/gutenberg.podspec @@ -10,11 +10,17 @@ require_relative './version' raise 'Could not find Gutenberg version configuration' if GUTENBERG_CONFIG.nil? -version = GUTENBERG_CONFIG[:commit] +VERSION = GUTENBERG_CONFIG[:commit] -raise "Trying to fetch Gutenberg XCFramework from Automattic's distribution server with invalid version '#{GUTENBERG_CONFIG}'" if version.nil? +raise "Trying to fetch Gutenberg XCFramework from Automattic's distribution server with invalid version '#{GUTENBERG_CONFIG}'" if VERSION.nil? -XCFRAMEWORK_STORAGE_URL = 'https://d2twmm2nzpx3bg.cloudfront.net/' +XCFRAMEWORK_STORAGE_URL = 'https://d2twmm2nzpx3bg.cloudfront.net' + +XCFRAMEWORK_ZIP_URL = "#{XCFRAMEWORK_STORAGE_URL}/Gutenberg-#{VERSION}.zip" + +require 'net/http' + +raise "Could not find file at URL #{XCFRAMEWORK_ZIP_URL}" unless Net::HTTP.get_response(URI(XCFRAMEWORK_ZIP_URL)).code == '200' # A spec for a pod whose only job is delegating the XCFrameworks integration to CocoaPods. # @@ -37,7 +43,7 @@ Pod::Spec.new do |s| # Tell CocoaPods where to download the XCFramework(s) ZIP with `source` and what to use from the ZIP's content with `vendored_frameworks`. # # See https://github.com/CocoaPods/CocoaPods/issues/10288 - s.source = { http: "#{XCFRAMEWORK_STORAGE_URL}/Gutenberg-#{version}.zip", type: 'zip' } + s.source = { http: XCFRAMEWORK_ZIP_URL, type: 'zip' } s.ios.vendored_frameworks = [ 'Aztec.xcframework', 'Gutenberg.xcframework', From 22334c58ceafe7b3a25a7ce182cdfa734e11bf9c Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Wed, 17 May 2023 16:39:39 +1000 Subject: [PATCH 03/48] Use latest CocoaPods version No other than reason than me looking at the CocoaPods setup and realizing we were a few versions behind. --- Gemfile.lock | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 09a71f1500f6..e652ee5a1671 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -3,12 +3,11 @@ GEM specs: CFPropertyList (3.0.6) rexml - activesupport (6.1.7.3) + activesupport (7.0.4.3) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) tzinfo (~> 2.0) - zeitwerk (~> 2.3) addressable (2.8.4) public_suffix (>= 2.0.2, < 6.0) algoliasearch (1.27.5) @@ -366,7 +365,6 @@ GEM rouge (~> 2.0.7) xcpretty-travis-formatter (1.0.1) xcpretty (~> 0.2, >= 0.0.7) - zeitwerk (2.6.8) PLATFORMS ruby From aca165edcae0e9a7b85dad92544857f080a947de Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Wed, 17 May 2023 21:03:52 +1000 Subject: [PATCH 04/48] Switch to tar.gz for the Gutenberg XCFramework archive Despite it working during the prototype stage, I wasn't able to get the XCFrameworks out of the ZIP archive, but it works fine with the tar.gz. I suspect this has to do with the folder(s) generated when decompressing. --- .rubocop.yml | 1 + Gutenberg/Gutenberg.podspec | 48 +++++++++++++++++++++++++++++++++ Gutenberg/gutenberg.podspec | 54 ------------------------------------- 3 files changed, 49 insertions(+), 54 deletions(-) create mode 100644 Gutenberg/Gutenberg.podspec delete mode 100644 Gutenberg/gutenberg.podspec diff --git a/.rubocop.yml b/.rubocop.yml index d0c5c1785752..3d3d6e411b60 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -37,3 +37,4 @@ Style/AsciiComments: Naming/FileName: Exclude: - fastlane/Matchfile + - Gutenberg/Gutenberg.podspec diff --git a/Gutenberg/Gutenberg.podspec b/Gutenberg/Gutenberg.podspec new file mode 100644 index 000000000000..a2bd72f239a5 --- /dev/null +++ b/Gutenberg/Gutenberg.podspec @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +# A spec for a pod whose only job is delegating the XCFrameworks integration to CocoaPods. +# +# This is used to fetch Gutenberg builds that come from commits instead of tags. +# Builds from tags are "official" and stable, so we distribute them via GitHub we'll eventually publish them on CocoaPods. +# The artifacts for builds from commits are instead only stored on an Automattic's server. +Pod::Spec.new do |s| + require_relative './version' + + raise 'Could not find Gutenberg version configuration' if GUTENBERG_CONFIG.nil? + + gutenberg_version = GUTENBERG_CONFIG[:commit] + + raise "Trying to fetch Gutenberg XCFramework from Automattic's distribution server with invalid version '#{GUTENBERG_CONFIG}'" if gutenberg_version.nil? + + xcframework_storage_url = 'https://d2twmm2nzpx3bg.cloudfront.net' + + xcframework_archive_url = "#{xcframework_storage_url}/Gutenberg-#{gutenberg_version}.tar.gz" + + require 'net/http' + + raise "Could not find file at URL #{xcframework_archive_url}" unless Net::HTTP.get_response(URI(xcframework_archive_url)).code == '200' + + s.name = 'Gutenberg' + s.version = '1.0.0' # The value here is irrelevant, but required + s.summary = 'A spec to help integrating the Gutenberg XCFramework' + s.homepage = 'https://apps.wordpress.com' + s.license = File.join(__dir__, '..', 'LICENSE') + s.authors = 'Automattic' + + s.ios.deployment_target = '13.0' # TODO: Read from common source + s.swift_version = '5.0' # TODO: read from common source + + s.requires_arc = true # TODO: Can this be omitted? + + # Tell CocoaPods where to download the XCFramework(s) archive with `source` and what to use from its decompressed contents with `vendored_frameworks`. + # + # See https://github.com/CocoaPods/CocoaPods/issues/10288 + s.source = { http: xcframework_archive_url } + s.vendored_frameworks = [ + 'Aztec.xcframework', + 'Gutenberg.xcframework', + 'React.xcframework', + 'RNTAztecView.xcframework', + 'yoga.xcframework' + ].map { |f| "Gutenberg/#{f}" } # prefix with the name of the folder generated when unarchiving +end diff --git a/Gutenberg/gutenberg.podspec b/Gutenberg/gutenberg.podspec deleted file mode 100644 index 8738e7dd177c..000000000000 --- a/Gutenberg/gutenberg.podspec +++ /dev/null @@ -1,54 +0,0 @@ -# frozen_string_literal: true - -# FIXME: This spec generates lots of warnings because of what looks like garbage files being in the XCFrameworks -# -# Example: -# -# - NOTE | [iOS] xcodebuild: note: note: while processing while processing /Users/gio/Developer/a8c/gutenberg-mobile/Johannes/DerivedData/ModuleCache.noindex/29X134XZYNZEH/Foundation-TDMNIE45PJWJ.pcm/Users/gio/Developer/a8c/gutenberg-mobile/Johannes/DerivedData/ModuleCache.noindex/2HX40YJG1I01Y/Foundation-TDMNIE45PJWJ.pcm - -require_relative './version' - -raise 'Could not find Gutenberg version configuration' if GUTENBERG_CONFIG.nil? - -VERSION = GUTENBERG_CONFIG[:commit] - -raise "Trying to fetch Gutenberg XCFramework from Automattic's distribution server with invalid version '#{GUTENBERG_CONFIG}'" if VERSION.nil? - -XCFRAMEWORK_STORAGE_URL = 'https://d2twmm2nzpx3bg.cloudfront.net' - -XCFRAMEWORK_ZIP_URL = "#{XCFRAMEWORK_STORAGE_URL}/Gutenberg-#{VERSION}.zip" - -require 'net/http' - -raise "Could not find file at URL #{XCFRAMEWORK_ZIP_URL}" unless Net::HTTP.get_response(URI(XCFRAMEWORK_ZIP_URL)).code == '200' - -# A spec for a pod whose only job is delegating the XCFrameworks integration to CocoaPods. -# -# This is used to fetch Gutenberg builds that come from commits instead of tags. -# Builds from tags are "official" and stable, so we distribute them via GitHub we'll eventually publish them on CocoaPods. -# The artifacts for builds from commits are instead only stored on an Automattic's server. -Pod::Spec.new do |s| - s.name = 'Gutenberg' - s.version = '1.0.0' # The value here is irrelevant, but required - s.summary = 'A spec to help integrating the Gutenberg XCFramework' - s.homepage = 'https://apps.wordpress.com' - s.license = File.join(__dir__, '..', 'LICENSE') - s.authors = 'Automattic' - - s.ios.deployment_target = '13.0' # TODO: Read from common source - s.swift_version = '5.0' # TODO: read from common source - - s.requires_arc = true # TODO: Can this be omitted? - - # Tell CocoaPods where to download the XCFramework(s) ZIP with `source` and what to use from the ZIP's content with `vendored_frameworks`. - # - # See https://github.com/CocoaPods/CocoaPods/issues/10288 - s.source = { http: XCFRAMEWORK_ZIP_URL, type: 'zip' } - s.ios.vendored_frameworks = [ - 'Aztec.xcframework', - 'Gutenberg.xcframework', - 'RNTAztecView.xcframework', - 'React.xcframework', - 'yoga.xcframework' - ] -end From 211b497447e77a4e1ff357a04f8b5fdf16c1de23 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Thu, 18 May 2023 13:25:33 +1000 Subject: [PATCH 05/48] Use same license as the main project for the Gutenberg pod --- Gutenberg/Gutenberg.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gutenberg/Gutenberg.podspec b/Gutenberg/Gutenberg.podspec index a2bd72f239a5..d6719f94fbb3 100644 --- a/Gutenberg/Gutenberg.podspec +++ b/Gutenberg/Gutenberg.podspec @@ -26,7 +26,7 @@ Pod::Spec.new do |s| s.version = '1.0.0' # The value here is irrelevant, but required s.summary = 'A spec to help integrating the Gutenberg XCFramework' s.homepage = 'https://apps.wordpress.com' - s.license = File.join(__dir__, '..', 'LICENSE') + s.license = { type: 'GPL', file: File.join(__dir__, '..', 'LICENSE') } s.authors = 'Automattic' s.ios.deployment_target = '13.0' # TODO: Read from common source From 0aa048779e6d8d685faec3ff1ce433bc74e30de4 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Mon, 22 May 2023 14:33:25 +1000 Subject: [PATCH 06/48] Work around CP not finding XCFrameworks by downloading manually --- .rubocop.yml | 3 ++ Gemfile | 1 + Gemfile.lock | 11 +++++ Gutenberg/.gitignore | 3 ++ Gutenberg/Gutenberg.podspec | 18 +++++-- Gutenberg/cocoapods_helpers.rb | 88 ++++++++++++++++++++++++++++++++++ Gutenberg/version.rb | 10 ++++ Podfile | 2 + Podfile.lock | 2 +- 9 files changed, 133 insertions(+), 5 deletions(-) create mode 100644 Gutenberg/.gitignore diff --git a/.rubocop.yml b/.rubocop.yml index 3d3d6e411b60..b4aadcbf29cf 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -17,6 +17,9 @@ Metrics/MethodLength: Max: 30 Exclude: *xfiles +Metrics/BlockLength: + Exclude: *.podspec + Layout/LineLength: Max: 180 Exclude: *xfiles diff --git a/Gemfile b/Gemfile index e85cfbf1e286..a37dd5263fc3 100644 --- a/Gemfile +++ b/Gemfile @@ -2,6 +2,7 @@ source 'https://rubygems.org' +gem 'archive-tar-minitar' # 1.12.x and higher, starting from 1.12.1 gem 'cocoapods', '~> 1.12', '>= 1.12.1' gem 'commonmarker' diff --git a/Gemfile.lock b/Gemfile.lock index e652ee5a1671..28a5fd61491f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -13,6 +13,9 @@ GEM algoliasearch (1.27.5) httpclient (~> 2.8, >= 2.8.3) json (>= 1.5.1) + archive-tar-minitar (0.8) + minitar (~> 0.8) + minitar-cli (~> 0.8) artifactory (3.0.15) ast (2.4.2) atomos (0.1.3) @@ -247,6 +250,7 @@ GEM multi_json (~> 1.11) os (>= 0.9, < 2.0) signet (>= 0.16, < 2.a) + hashie (5.0.0) highline (2.0.3) http-cookie (1.0.5) domain_name (~> 0.5) @@ -264,6 +268,10 @@ GEM mini_magick (4.12.0) mini_mime (1.1.2) mini_portile2 (2.8.2) + minitar (0.8) + minitar-cli (0.8) + minitar (~> 0.8.0) + powerbar (~> 1.0) minitest (5.18.0) molinillo (0.8.0) multi_json (1.15.0) @@ -287,6 +295,8 @@ GEM parser (3.2.2.1) ast (~> 2.4.1) plist (3.7.0) + powerbar (1.0.18) + hashie (>= 1.1.0) progress_bar (1.3.3) highline (>= 1.6, < 3) options (~> 2.3.0) @@ -370,6 +380,7 @@ PLATFORMS ruby DEPENDENCIES + archive-tar-minitar cocoapods (~> 1.12, >= 1.12.1) commonmarker danger (~> 9.3) diff --git a/Gutenberg/.gitignore b/Gutenberg/.gitignore new file mode 100644 index 000000000000..e8f7bd4e7375 --- /dev/null +++ b/Gutenberg/.gitignore @@ -0,0 +1,3 @@ +# The folder where our bespoke automatation downloads and unpacks the XCFrameworks archives. +# Ideally, CocoaPods should do this, but for some reason I haven't yet been able to make it work. +.build/ diff --git a/Gutenberg/Gutenberg.podspec b/Gutenberg/Gutenberg.podspec index d6719f94fbb3..9ab165b7b5eb 100644 --- a/Gutenberg/Gutenberg.podspec +++ b/Gutenberg/Gutenberg.podspec @@ -1,13 +1,14 @@ # frozen_string_literal: true +require 'pathname' +require_relative './version' + # A spec for a pod whose only job is delegating the XCFrameworks integration to CocoaPods. # # This is used to fetch Gutenberg builds that come from commits instead of tags. # Builds from tags are "official" and stable, so we distribute them via GitHub we'll eventually publish them on CocoaPods. # The artifacts for builds from commits are instead only stored on an Automattic's server. Pod::Spec.new do |s| - require_relative './version' - raise 'Could not find Gutenberg version configuration' if GUTENBERG_CONFIG.nil? gutenberg_version = GUTENBERG_CONFIG[:commit] @@ -37,12 +38,21 @@ Pod::Spec.new do |s| # Tell CocoaPods where to download the XCFramework(s) archive with `source` and what to use from its decompressed contents with `vendored_frameworks`. # # See https://github.com/CocoaPods/CocoaPods/issues/10288 - s.source = { http: xcframework_archive_url } + # + # I can't get this to work out of the box, so instead of using a URL we take + # care of downloading and unarchiving and use a local source. + # + # s.source = { http: xcframework_archive_url } + s.source = { http: "file://#{GUTENBERG_DOWNLOADS_DIRECTORY}/Gutenberg-#{gutenberg_version}.tar.gz" } s.vendored_frameworks = [ 'Aztec.xcframework', 'Gutenberg.xcframework', 'React.xcframework', 'RNTAztecView.xcframework', 'yoga.xcframework' - ].map { |f| "Gutenberg/#{f}" } # prefix with the name of the folder generated when unarchiving + ].map do |f| + # This needs to be a relative path to the local extraction location and account for the archive folder structure. + Pathname.new("#{GUTENBERG_ARCHIVE_DIRECTORY}/Frameworks/#{f}") + .relative_path_from(__dir__).to_s + end end diff --git a/Gutenberg/cocoapods_helpers.rb b/Gutenberg/cocoapods_helpers.rb index 7a57c87b00f3..88fc25076871 100644 --- a/Gutenberg/cocoapods_helpers.rb +++ b/Gutenberg/cocoapods_helpers.rb @@ -2,6 +2,11 @@ # Helpers and configurations for integrating Gutenberg in Jetpack and WordPress via CocoaPods. +require 'archive/tar/minitar' +require 'net/http' +require 'ruby-progressbar' +require 'uri' +require 'zlib' require_relative './version' DEFAULT_GUTENBERG_LOCATION = File.join(__dir__, '..', '..', 'gutenberg-mobile') @@ -111,3 +116,86 @@ def gutenberg_dependencies(options:) pod pod_name, podspec: "#{podspec_prefix}/#{pod_name}.#{podspec_extension}" end end + +def archive_url(commit:) + xcframework_storage_url = 'https://d2twmm2nzpx3bg.cloudfront.net' + "#{xcframework_storage_url}/Gutenberg-#{commit}.tar.gz" +end + +def gutenberg_pre_install_hook + # At this time, we only support XCFramework-commit builds + commit = GUTENBERG_CONFIG[:commit] + if commit.nil? + puts 'Skipping Gutenberg XCFramework download because no commit was given.' + return + end + + url = archive_url(commit: commit) + archive_download_path = File.join(GUTENBERG_DOWNLOADS_DIRECTORY, File.basename(url)) + + if File.exist?(archive_download_path) + puts "Skipping download for #{url} because archive already exists at #{archive_download_path}." + else + download(archive_url: url, destination: archive_download_path) + end + + extract( + archive: archive_download_path, + destination: GUTENBERG_ARCHIVE_DIRECTORY + ) +end + +private + +# rubocop:disable Metrics/AbcSize +def download(archive_url:, destination:) + puts "Attempting to download #{archive_url} to #{destination}..." + + FileUtils.mkdir_p(File.dirname(destination)) + + # Perform HTTP HEAD request to retrieve file size + uri = URI.parse(archive_url) + http = Net::HTTP.new(uri.host, uri.port) + http.use_ssl = true + response = http.head(uri.path) + + # Check if the response is successful and contains Content-Length header + content_length_key = 'Content-Length' + raise "Failed to retrieve file information: #{response.code} #{response.message}" unless response.is_a?(Net::HTTPSuccess) && response.key?(content_length_key) + + file_size = response[content_length_key].to_i + + # Check file size + raise 'File size is 0. Aborting download.' if file_size.zero? + + puts "File size: #{(file_size / (1024.0 * 1024.0)).round(2)} MB" + + progress_bar = ProgressBar.create(title: 'Downloading Gutenberg XCFrameworks archive', total: file_size, format: '%t |%B| %p%%') + + http.request_get(uri.path) do |archive_response| + File.open(destination, 'wb') do |file| + archive_response.read_body do |chunk| + file.write(chunk) + progress_bar.progress += chunk.length + end + end + end + + progress_bar.finish + + puts 'Finished downloading.' +end +# rubocop:enable Metrics/AbcSize + +def extract(archive:, destination:) + FileUtils.rm_rf(destination) + FileUtils.mkdir_p(destination) + + puts "Extracting #{archive} to #{destination}..." + + Zlib::GzipReader.open(archive) do |gzip_file| + Archive::Tar::Minitar.unpack(gzip_file, destination) + end + + puts 'Finished extracting.' +end diff --git a/Gutenberg/version.rb b/Gutenberg/version.rb index 4722006d7961..8e376387c39b 100644 --- a/Gutenberg/version.rb +++ b/Gutenberg/version.rb @@ -17,3 +17,13 @@ GITHUB_ORG = 'wordpress-mobile' REPO_NAME = 'gutenberg-mobile' + +# The root working directory for downloading and extracting archives. +# In this location because multiple sources access it. +# +# This path should be ignored by Git. +GUTENBERG_WORKING_DIRECTORY = File.join(__dir__, '.build') +# Where to download the XCFramework archives +GUTENBERG_DOWNLOADS_DIRECTORY = File.join(GUTENBERG_WORKING_DIRECTORY, 'donwloads') +# Where to extract the XCFramework archive version to use for the build. +GUTENBERG_ARCHIVE_DIRECTORY = File.join(GUTENBERG_WORKING_DIRECTORY, 'archive') diff --git a/Podfile b/Podfile index e3bc85766801..10b22f5e30be 100644 --- a/Podfile +++ b/Podfile @@ -337,6 +337,8 @@ pre_install do |installer| end puts "Installing #{static.count} pods as static frameworks" puts "Installing #{dynamic.count} pods as dynamic frameworks" + + gutenberg_pre_install_hook end post_install do |installer| diff --git a/Podfile.lock b/Podfile.lock index 9ba1587d52a0..44cda9ab6129 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -895,6 +895,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: ae5b4b813d216d3bf0a148773267fff14bd51d37 -PODFILE CHECKSUM: dd2923ba0655d06a0e85bdf9aa0d38304e8f087e +PODFILE CHECKSUM: 2471f8c0d30e1c1c5e9cbb94f09049b929756371 COCOAPODS: 1.12.1 From dffeb71811a11accda1e996af5ce3e13f672ea5e Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Mon, 22 May 2023 15:58:20 +1000 Subject: [PATCH 07/48] Add a couple of newly required `import React` These are unnecessary at the moment but will be when we move to Gutenberg via XCFramework --- .../Classes/ViewRelated/Gutenberg/GutenbergImageLoader.swift | 1 + .../Classes/ViewRelated/Gutenberg/GutenbergViewController.swift | 1 + 2 files changed, 2 insertions(+) diff --git a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergImageLoader.swift b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergImageLoader.swift index bff482084bd3..bc9c651bf12a 100644 --- a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergImageLoader.swift +++ b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergImageLoader.swift @@ -1,5 +1,6 @@ import Foundation import Gutenberg +import React class GutenbergImageLoader: NSObject, RCTImageURLLoader { diff --git a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift index 1a1ea5888b3a..635e7d64cdc9 100644 --- a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift +++ b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift @@ -4,6 +4,7 @@ import Gutenberg import Aztec import WordPressFlux import Kanvas +import React class GutenbergViewController: UIViewController, PostEditor, FeaturedImageDelegate, PublishingEditor { let errorDomain: String = "GutenbergViewController.errorDomain" From 1acc4252eb178bd625341d20f149f25dbe48f6a5 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Mon, 22 May 2023 15:59:01 +1000 Subject: [PATCH 08/48] Address new warnings introduced by the Gutenberg via XCFramework --- .../ViewRelated/Gutenberg/GutenbergViewController.swift | 6 ++++++ .../Gutenberg/Utils/GutenbergFilesAppMediaSource.swift | 2 ++ 2 files changed, 8 insertions(+) diff --git a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift index 635e7d64cdc9..337f93a18e95 100644 --- a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift +++ b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift @@ -639,6 +639,8 @@ extension GutenbergViewController: GutenbergBridgeDelegate { mediaType = mediaType | WPMediaType.other.rawValue case .any: mediaType = mediaType | WPMediaType.all.rawValue + @unknown default: + fatalError() } } @@ -974,6 +976,8 @@ extension GutenbergViewController: GutenbergBridgeDelegate { DDLogWarn(message) case .error, .fatal: DDLogError(message) + @unknown default: + fatalError() } } @@ -1059,6 +1063,8 @@ extension GutenbergViewController: GutenbergBridgeDelegate { switch buttonType { case .missingBlockAlertActionButton: handleMissingBlockAlertButtonPressed() + @unknown default: + fatalError() } } diff --git a/WordPress/Classes/ViewRelated/Gutenberg/Utils/GutenbergFilesAppMediaSource.swift b/WordPress/Classes/ViewRelated/Gutenberg/Utils/GutenbergFilesAppMediaSource.swift index 8b0e2e9320da..71b6e948ca7a 100644 --- a/WordPress/Classes/ViewRelated/Gutenberg/Utils/GutenbergFilesAppMediaSource.swift +++ b/WordPress/Classes/ViewRelated/Gutenberg/Utils/GutenbergFilesAppMediaSource.swift @@ -96,6 +96,8 @@ private extension Gutenberg.MediaType { return UTType.audio case .other, .any: // needs to be specified by the blog's allowed types. return nil + @unknown default: + fatalError() } } } From 817659389160570f8b65fe1f89f7293f07e80a55 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Tue, 23 May 2023 20:36:33 +1000 Subject: [PATCH 09/48] Update `CopyGutenbergJS` build phase script to account for XCFramework --- .../CopyGutenbergJS.inputs.xcfilelist | 3 ++ Scripts/BuildPhases/CopyGutenbergJS.sh | 38 +++++++++++++------ WordPress/WordPress.xcodeproj/project.pbxproj | 8 ++-- 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/Scripts/BuildPhases/CopyGutenbergJS.inputs.xcfilelist b/Scripts/BuildPhases/CopyGutenbergJS.inputs.xcfilelist index 29b72028ea14..7ff6b14aa57b 100644 --- a/Scripts/BuildPhases/CopyGutenbergJS.inputs.xcfilelist +++ b/Scripts/BuildPhases/CopyGutenbergJS.inputs.xcfilelist @@ -1 +1,4 @@ +# Gutenberg when extracted as an XCFramework via CocoaPods +$PODS_XCFRAMEWORKS_BUILD_DIR/Gutenberg/Gutenberg.framework +# Gutenberg when compiled from source via CocoaPods $PODS_ROOT/Gutenberg/bundle/ios diff --git a/Scripts/BuildPhases/CopyGutenbergJS.sh b/Scripts/BuildPhases/CopyGutenbergJS.sh index c652885d6ed4..816800f83d0b 100755 --- a/Scripts/BuildPhases/CopyGutenbergJS.sh +++ b/Scripts/BuildPhases/CopyGutenbergJS.sh @@ -1,7 +1,32 @@ -#!/bin/bash -eux +#!/bin/bash -eu # Update the matching .outputs.xcfilelist when changing this -DEST=$CONFIGURATION_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH +DEST="$CONFIGURATION_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH" + +# CocoaPods fetches Gutenberg in two possible ways: XCFramework and source. +# +# We check first for the XCFramework setup, fallingback to source only if that is not there. +# +# Because the XCFramework location is in `PODS_XCFRAMEWORKS_BUILD_DIR`, it will only appear if CocoaPods use XCFrameworks. +# This makes the setup robust against having both a copy of the XCFramework and of the Gutenberg source code in the Pods folder. + +# Update the matching .inputs.xcfilelist when changing these +XCFRAMEWORK_BUNDLE_ROOT="$PODS_XCFRAMEWORKS_BUILD_DIR/Gutenberg/Gutenberg.framework" +PODS_BUNDLE_ROOT="$PODS_ROOT/Gutenberg/bundle/ios" + +BUNDLE_FILE="$DEST/main.jsbundle" +BUNDLE_ASSETS="$DEST/assets/" + +if [[ -d $XCFRAMEWORK_BUNDLE_ROOT ]]; then + cp "$XCFRAMEWORK_BUNDLE_ROOT/App.js" "$BUNDLE_FILE" + # It appears we don't need to copy the assets when working with the XCFramework +elif [[ -d $PODS_BUNDLE_ROOT ]]; then + cp "$PODS_BUNDLE_ROOT/App.js" "$BUNDLE_FILE" + cp -r "$PODS_BUNDLE_ROOT/assets" "$BUNDLE_ASSETS" +else + echo "error: Could not find Gutenberg bundle in either XCFramework or Pods." + exit 1 +fi if [[ "$CONFIGURATION" = *Debug* && ! "$PLATFORM_NAME" == *simulator ]]; then IP=$(ipconfig getifaddr en0) @@ -11,12 +36,3 @@ if [[ "$CONFIGURATION" = *Debug* && ! "$PLATFORM_NAME" == *simulator ]]; then echo "$IP" > "$DEST/ip.txt" fi - -# Update the matching .inputs.xcfilelist when changing this -PODS_BUNDLE_ROOT="$PODS_ROOT/Gutenberg/bundle/ios" - -BUNDLE_FILE="$DEST/main.jsbundle" -cp "$PODS_BUNDLE_ROOT/App.js" "$BUNDLE_FILE" - -BUNDLE_ASSETS="$DEST/assets/" -cp -r "$PODS_BUNDLE_ROOT/assets/" "$BUNDLE_ASSETS" diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index df4322663687..d1a86bce1394 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -20600,11 +20600,11 @@ files = ( ); inputPaths = ( - $SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.inputs.xcfilelist, + "$SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.inputs.xcfilelist", ); name = "Copy Gutenberg JS"; outputFileListPaths = ( - $SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.outputs.xcfilelist, + "$SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.outputs.xcfilelist", ); outputPaths = ( "", @@ -20819,13 +20819,13 @@ files = ( ); inputFileListPaths = ( - $SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.inputs.xcfilelist, + "$SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.inputs.xcfilelist", ); inputPaths = ( ); name = "Copy Gutenberg JS"; outputFileListPaths = ( - $SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.outputs.xcfilelist, + "$SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.outputs.xcfilelist", ); outputPaths = ( ); From 7d31186f8393038f1c81c15016400e6ac36a310d Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Thu, 25 May 2023 15:28:00 +1000 Subject: [PATCH 10/48] Use relative paths when importing the local Gutenberg podspec --- Gutenberg/Gutenberg.podspec | 6 ++++-- Gutenberg/cocoapods_helpers.rb | 5 ++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Gutenberg/Gutenberg.podspec b/Gutenberg/Gutenberg.podspec index 9ab165b7b5eb..4bf146527f4d 100644 --- a/Gutenberg/Gutenberg.podspec +++ b/Gutenberg/Gutenberg.podspec @@ -27,7 +27,7 @@ Pod::Spec.new do |s| s.version = '1.0.0' # The value here is irrelevant, but required s.summary = 'A spec to help integrating the Gutenberg XCFramework' s.homepage = 'https://apps.wordpress.com' - s.license = { type: 'GPL', file: File.join(__dir__, '..', 'LICENSE') } + s.license = { type: 'GPL', file: '../LICENSE' } s.authors = 'Automattic' s.ios.deployment_target = '13.0' # TODO: Read from common source @@ -43,7 +43,9 @@ Pod::Spec.new do |s| # care of downloading and unarchiving and use a local source. # # s.source = { http: xcframework_archive_url } - s.source = { http: "file://#{GUTENBERG_DOWNLOADS_DIRECTORY}/Gutenberg-#{gutenberg_version}.tar.gz" } + path = Pathname.new("#{GUTENBERG_DOWNLOADS_DIRECTORY}/Gutenberg-#{gutenberg_version}.tar.gz") + .relative_path_from(__dir__).to_s + s.source = { http: "file://#{path}" } s.vendored_frameworks = [ 'Aztec.xcframework', 'Gutenberg.xcframework', diff --git a/Gutenberg/cocoapods_helpers.rb b/Gutenberg/cocoapods_helpers.rb index 88fc25076871..9ed24c34ab21 100644 --- a/Gutenberg/cocoapods_helpers.rb +++ b/Gutenberg/cocoapods_helpers.rb @@ -4,6 +4,7 @@ require 'archive/tar/minitar' require 'net/http' +require 'pathname' require 'ruby-progressbar' require 'uri' require 'zlib' @@ -89,7 +90,9 @@ def gutenberg_pod(config: GUTENBERG_CONFIG) gutenberg_dependencies(options: options) elsif options[:commit] - pod 'Gutenberg', path: File.join(__dir__, 'gutenberg.podspec') + # Notice the use of relative path, otherwise we'd get the full path of the user that run the `pod install` command tracked in Podfile.lock. + # Also notice the path is relative from Dir.pwd, that is, the location where the script running this code is invoked. + pod 'Gutenberg', path: Pathname.new(File.join(__dir__, 'Gutenberg.podspec')).relative_path_from(Dir.pwd).to_s end end # rubocop:enable Metrics/AbcSize From 27186a26f9b52db59f9f3bf2104172a20311cb13 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Fri, 2 Jun 2023 12:38:24 +1000 Subject: [PATCH 11/48] Remove `pre_install` download hook in favor of `prepare_command` The advantage of this approach is that downloading the archive is only necessary when using a local spec. Defining the logic in the local spec itself keeps everything self contained and saves us from having to conditionally call the `pre_install` hook. --- Gemfile | 1 - Gutenberg/Gutenberg.podspec | 31 +++-- Gutenberg/cocoapods_helpers.rb | 81 +------------ Podfile | 2 - Podfile.lock | 2 +- WordPress/WordPress.xcodeproj/project.pbxproj | 106 +++++++++--------- 6 files changed, 77 insertions(+), 146 deletions(-) diff --git a/Gemfile b/Gemfile index a37dd5263fc3..e85cfbf1e286 100644 --- a/Gemfile +++ b/Gemfile @@ -2,7 +2,6 @@ source 'https://rubygems.org' -gem 'archive-tar-minitar' # 1.12.x and higher, starting from 1.12.1 gem 'cocoapods', '~> 1.12', '>= 1.12.1' gem 'commonmarker' diff --git a/Gutenberg/Gutenberg.podspec b/Gutenberg/Gutenberg.podspec index 4bf146527f4d..7476f038b8ce 100644 --- a/Gutenberg/Gutenberg.podspec +++ b/Gutenberg/Gutenberg.podspec @@ -37,15 +37,18 @@ Pod::Spec.new do |s| # Tell CocoaPods where to download the XCFramework(s) archive with `source` and what to use from its decompressed contents with `vendored_frameworks`. # - # See https://github.com/CocoaPods/CocoaPods/issues/10288 - # - # I can't get this to work out of the box, so instead of using a URL we take - # care of downloading and unarchiving and use a local source. + # Unfortunately, CocoaPods currently (1.12.1) does not work when it comes to local specs with http sources. # + # See https://github.com/CocoaPods/CocoaPods/issues/10288#issuecomment-1517711223 # s.source = { http: xcframework_archive_url } - path = Pathname.new("#{GUTENBERG_DOWNLOADS_DIRECTORY}/Gutenberg-#{gutenberg_version}.tar.gz") - .relative_path_from(__dir__).to_s - s.source = { http: "file://#{path}" } + archive_name = "Gutenberg-#{gutenberg_version}.tar.gz" + # Always use relative paths, otherwise the checksums in the lockfile will change from machine to machine + relative_extracted_archive_directory = Pathname.new("#{GUTENBERG_ARCHIVE_DIRECTORY}").relative_path_from(__dir__).to_s + relative_download_directory = Pathname.new(GUTENBERG_DOWNLOADS_DIRECTORY).relative_path_from(__dir__).to_s + relative_download_path = File.join(relative_download_directory, archive_name) + + s.source = { http: "file://#{relative_download_path}" } + s.vendored_frameworks = [ 'Aztec.xcframework', 'Gutenberg.xcframework', @@ -54,7 +57,17 @@ Pod::Spec.new do |s| 'yoga.xcframework' ].map do |f| # This needs to be a relative path to the local extraction location and account for the archive folder structure. - Pathname.new("#{GUTENBERG_ARCHIVE_DIRECTORY}/Frameworks/#{f}") - .relative_path_from(__dir__).to_s + File.join(relative_extracted_archive_directory, 'Frameworks', f) end + + # Print the message here because the prepare_command output is not forwarded by CocoaPods + puts "Will skip downloading Gutenberg archive because it already exists at #{relative_download_path}" if File.exist? relative_download_path + s.prepare_command = <<-CMD + mkdir -p #{relative_download_directory} + if [[ ! -f "#{relative_download_path}" ]]; then + curl --progress-bar #{xcframework_archive_url} -o #{relative_download_path} + fi + mkdir -p #{relative_extracted_archive_directory} + tar -xzf #{relative_download_path} --directory=#{relative_extracted_archive_directory} + CMD end diff --git a/Gutenberg/cocoapods_helpers.rb b/Gutenberg/cocoapods_helpers.rb index 9ed24c34ab21..7709e2e90024 100644 --- a/Gutenberg/cocoapods_helpers.rb +++ b/Gutenberg/cocoapods_helpers.rb @@ -2,7 +2,6 @@ # Helpers and configurations for integrating Gutenberg in Jetpack and WordPress via CocoaPods. -require 'archive/tar/minitar' require 'net/http' require 'pathname' require 'ruby-progressbar' @@ -91,7 +90,7 @@ def gutenberg_pod(config: GUTENBERG_CONFIG) gutenberg_dependencies(options: options) elsif options[:commit] # Notice the use of relative path, otherwise we'd get the full path of the user that run the `pod install` command tracked in Podfile.lock. - # Also notice the path is relative from Dir.pwd, that is, the location where the script running this code is invoked. + # Also notice the path is relative from Dir.pwd, that is, the location where the script running this code is invoked to avoid absolute paths making the checksum non determinstic. pod 'Gutenberg', path: Pathname.new(File.join(__dir__, 'Gutenberg.podspec')).relative_path_from(Dir.pwd).to_s end end @@ -124,81 +123,3 @@ def archive_url(commit:) xcframework_storage_url = 'https://d2twmm2nzpx3bg.cloudfront.net' "#{xcframework_storage_url}/Gutenberg-#{commit}.tar.gz" end - -def gutenberg_pre_install_hook - # At this time, we only support XCFramework-commit builds - commit = GUTENBERG_CONFIG[:commit] - if commit.nil? - puts 'Skipping Gutenberg XCFramework download because no commit was given.' - return - end - - url = archive_url(commit: commit) - archive_download_path = File.join(GUTENBERG_DOWNLOADS_DIRECTORY, File.basename(url)) - - if File.exist?(archive_download_path) - puts "Skipping download for #{url} because archive already exists at #{archive_download_path}." - else - download(archive_url: url, destination: archive_download_path) - end - - extract( - archive: archive_download_path, - destination: GUTENBERG_ARCHIVE_DIRECTORY - ) -end - -private - -# rubocop:disable Metrics/AbcSize -def download(archive_url:, destination:) - puts "Attempting to download #{archive_url} to #{destination}..." - - FileUtils.mkdir_p(File.dirname(destination)) - - # Perform HTTP HEAD request to retrieve file size - uri = URI.parse(archive_url) - http = Net::HTTP.new(uri.host, uri.port) - http.use_ssl = true - response = http.head(uri.path) - - # Check if the response is successful and contains Content-Length header - content_length_key = 'Content-Length' - raise "Failed to retrieve file information: #{response.code} #{response.message}" unless response.is_a?(Net::HTTPSuccess) && response.key?(content_length_key) - - file_size = response[content_length_key].to_i - - # Check file size - raise 'File size is 0. Aborting download.' if file_size.zero? - - puts "File size: #{(file_size / (1024.0 * 1024.0)).round(2)} MB" - - progress_bar = ProgressBar.create(title: 'Downloading Gutenberg XCFrameworks archive', total: file_size, format: '%t |%B| %p%%') - - http.request_get(uri.path) do |archive_response| - File.open(destination, 'wb') do |file| - archive_response.read_body do |chunk| - file.write(chunk) - progress_bar.progress += chunk.length - end - end - end - - progress_bar.finish - - puts 'Finished downloading.' -end -# rubocop:enable Metrics/AbcSize - -def extract(archive:, destination:) - FileUtils.rm_rf(destination) - FileUtils.mkdir_p(destination) - - puts "Extracting #{archive} to #{destination}..." - - Zlib::GzipReader.open(archive) do |gzip_file| - Archive::Tar::Minitar.unpack(gzip_file, destination) - end - - puts 'Finished extracting.' -end diff --git a/Podfile b/Podfile index 10b22f5e30be..e3bc85766801 100644 --- a/Podfile +++ b/Podfile @@ -337,8 +337,6 @@ pre_install do |installer| end puts "Installing #{static.count} pods as static frameworks" puts "Installing #{dynamic.count} pods as dynamic frameworks" - - gutenberg_pre_install_hook end post_install do |installer| diff --git a/Podfile.lock b/Podfile.lock index 44cda9ab6129..9ba1587d52a0 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -895,6 +895,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: ae5b4b813d216d3bf0a148773267fff14bd51d37 -PODFILE CHECKSUM: 2471f8c0d30e1c1c5e9cbb94f09049b929756371 +PODFILE CHECKSUM: dd2923ba0655d06a0e85bdf9aa0d38304e8f087e COCOAPODS: 1.12.1 diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index d1a86bce1394..52fa77a93ae1 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -10495,7 +10495,7 @@ path = Classes; sourceTree = ""; }; - 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { + 29B97314FDCFA39411CA2CEA = { isa = PBXGroup; children = ( 3F20FDF3276BF21000DA3CAD /* Packages */, @@ -18534,7 +18534,7 @@ E16AB92514D978240047A2E5 /* Sources */, E16AB92614D978240047A2E5 /* Frameworks */, E16AB92714D978240047A2E5 /* Resources */, - 42C1BDE416A90FA718A28797 /* [CP] Copy Pods Resources */, + 5C9D9350019C99ACBD754CF3 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -18839,14 +18839,14 @@ bg, sk, ); - mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; + mainGroup = 29B97314FDCFA39411CA2CEA; packageReferences = ( 3FF1442E266F3C2400138163 /* XCRemoteSwiftPackageReference "ScreenObject" */, 3FC2C33B26C4CF0A00C6D98F /* XCRemoteSwiftPackageReference "XCUITestHelpers" */, 17A8858B2757B97F0071FCA3 /* XCRemoteSwiftPackageReference "AutomatticAbout-swift" */, 3F2B62DA284F4E0B0008CD59 /* XCRemoteSwiftPackageReference "Charts" */, 3F3B23C02858A1B300CACE60 /* XCRemoteSwiftPackageReference "test-collector-swift" */, - 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios" */, + 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios.git" */, 3F338B6F289BD3040014ADC5 /* XCRemoteSwiftPackageReference "Nimble" */, ); productRefGroup = 19C28FACFE9D520D11CA2CBB /* Products */; @@ -20118,52 +20118,6 @@ shellPath = /bin/sh; shellScript = "$SRCROOT/../Scripts/BuildPhases/GenerateCredentials.sh\n"; }; - 42C1BDE416A90FA718A28797 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-WordPressTest/Pods-WordPressTest-resources.sh", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/content-functions.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/editor-behavior-overrides.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/editor-style-overrides.css", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/gutenberg-observer.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/inject-css.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/insert-block.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/local-storage-overrides.json", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/prevent-autosaves.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/wp-bar-override.css", - "${PODS_ROOT}/Gutenberg/src/block-support/supported-blocks.json", - "${PODS_ROOT}/Gutenberg/resources/unsupported-block-editor/external-style-overrides.css", - "${PODS_ROOT}/Gutenberg/resources/unsupported-block-editor/extra-localstorage-entries.js", - "${PODS_ROOT}/Gutenberg/resources/unsupported-block-editor/remove-nux.js", - "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/WordPress-Aztec-iOS/WordPress-Aztec-iOS.bundle", - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/content-functions.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/editor-behavior-overrides.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/editor-style-overrides.css", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/gutenberg-observer.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/inject-css.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/insert-block.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/local-storage-overrides.json", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/prevent-autosaves.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/wp-bar-override.css", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/supported-blocks.json", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/external-style-overrides.css", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/extra-localstorage-entries.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/remove-nux.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/WordPress-Aztec-iOS.bundle", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-WordPressTest/Pods-WordPressTest-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; 4C304224F0F810A17D96A402 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -20230,6 +20184,52 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-WordPressNotificationServiceExtension/Pods-WordPressNotificationServiceExtension-resources.sh\"\n"; showEnvVarsInLog = 0; }; + 5C9D9350019C99ACBD754CF3 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-WordPressTest/Pods-WordPressTest-resources.sh", + "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/content-functions.js", + "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/editor-behavior-overrides.js", + "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/editor-style-overrides.css", + "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/gutenberg-observer.js", + "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/inject-css.js", + "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/insert-block.js", + "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/local-storage-overrides.json", + "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/prevent-autosaves.js", + "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/wp-bar-override.css", + "${PODS_ROOT}/Gutenberg/src/block-support/supported-blocks.json", + "${PODS_ROOT}/Gutenberg/resources/unsupported-block-editor/external-style-overrides.css", + "${PODS_ROOT}/Gutenberg/resources/unsupported-block-editor/extra-localstorage-entries.js", + "${PODS_ROOT}/Gutenberg/resources/unsupported-block-editor/remove-nux.js", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/WordPress-Aztec-iOS/WordPress-Aztec-iOS.bundle", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/content-functions.js", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/editor-behavior-overrides.js", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/editor-style-overrides.css", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/gutenberg-observer.js", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/inject-css.js", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/insert-block.js", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/local-storage-overrides.json", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/prevent-autosaves.js", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/wp-bar-override.css", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/supported-blocks.json", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/external-style-overrides.css", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/extra-localstorage-entries.js", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/remove-nux.js", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/WordPress-Aztec-iOS.bundle", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-WordPressTest/Pods-WordPressTest-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; 72BB9EE3CC91D92F3735F4F3 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -30637,7 +30637,7 @@ minimumVersion = 0.3.0; }; }; - 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios" */ = { + 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios.git" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/airbnb/lottie-ios.git"; requirement = { @@ -30718,12 +30718,12 @@ }; 3F411B6E28987E3F002513AE /* Lottie */ = { isa = XCSwiftPackageProductDependency; - package = 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios" */; + package = 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios.git" */; productName = Lottie; }; 3F44DD57289C379C006334CD /* Lottie */ = { isa = XCSwiftPackageProductDependency; - package = 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios" */; + package = 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios.git" */; productName = Lottie; }; 3FC2C33C26C4CF0A00C6D98F /* XCUITestHelpers */ = { From a4c60705558fe3bcb098efb0cbabf253844a0f27 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Mon, 5 Jun 2023 20:59:14 +1000 Subject: [PATCH 12/48] Use remote spec instead of a local one for Gutenberg via commit The idea was to use a local spec and interpolated the desired commit SHA1 in the `source` to download the corresponding `tar.gz`. However, CocoaPods has some issues with local specs that use `http` `source`, as documented in: - https://github.com/CocoaPods/CocoaPods/issues/10288#issuecomment-1517711223 - https://github.com/firebase/firebase-ios-sdk/blob/68b39b8edf61f6e643e2396e712c7c67e0f146ff/scripts/pod_lib_lint.rb#L70-L78 Using a remote spec doesn't have the same issue, and the cost in terms of extra computation and storage is negligible when compared to building and hosting the `tar.gz` archives. --- .rubocop.yml | 4 -- Gemfile.lock | 11 ----- Gutenberg/.gitignore | 3 -- Gutenberg/Gutenberg.podspec | 73 ---------------------------------- Gutenberg/cocoapods_helpers.rb | 16 +------- Gutenberg/version.rb | 10 ----- 6 files changed, 2 insertions(+), 115 deletions(-) delete mode 100644 Gutenberg/.gitignore delete mode 100644 Gutenberg/Gutenberg.podspec diff --git a/.rubocop.yml b/.rubocop.yml index b4aadcbf29cf..d0c5c1785752 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -17,9 +17,6 @@ Metrics/MethodLength: Max: 30 Exclude: *xfiles -Metrics/BlockLength: - Exclude: *.podspec - Layout/LineLength: Max: 180 Exclude: *xfiles @@ -40,4 +37,3 @@ Style/AsciiComments: Naming/FileName: Exclude: - fastlane/Matchfile - - Gutenberg/Gutenberg.podspec diff --git a/Gemfile.lock b/Gemfile.lock index 28a5fd61491f..e652ee5a1671 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -13,9 +13,6 @@ GEM algoliasearch (1.27.5) httpclient (~> 2.8, >= 2.8.3) json (>= 1.5.1) - archive-tar-minitar (0.8) - minitar (~> 0.8) - minitar-cli (~> 0.8) artifactory (3.0.15) ast (2.4.2) atomos (0.1.3) @@ -250,7 +247,6 @@ GEM multi_json (~> 1.11) os (>= 0.9, < 2.0) signet (>= 0.16, < 2.a) - hashie (5.0.0) highline (2.0.3) http-cookie (1.0.5) domain_name (~> 0.5) @@ -268,10 +264,6 @@ GEM mini_magick (4.12.0) mini_mime (1.1.2) mini_portile2 (2.8.2) - minitar (0.8) - minitar-cli (0.8) - minitar (~> 0.8.0) - powerbar (~> 1.0) minitest (5.18.0) molinillo (0.8.0) multi_json (1.15.0) @@ -295,8 +287,6 @@ GEM parser (3.2.2.1) ast (~> 2.4.1) plist (3.7.0) - powerbar (1.0.18) - hashie (>= 1.1.0) progress_bar (1.3.3) highline (>= 1.6, < 3) options (~> 2.3.0) @@ -380,7 +370,6 @@ PLATFORMS ruby DEPENDENCIES - archive-tar-minitar cocoapods (~> 1.12, >= 1.12.1) commonmarker danger (~> 9.3) diff --git a/Gutenberg/.gitignore b/Gutenberg/.gitignore deleted file mode 100644 index e8f7bd4e7375..000000000000 --- a/Gutenberg/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# The folder where our bespoke automatation downloads and unpacks the XCFrameworks archives. -# Ideally, CocoaPods should do this, but for some reason I haven't yet been able to make it work. -.build/ diff --git a/Gutenberg/Gutenberg.podspec b/Gutenberg/Gutenberg.podspec deleted file mode 100644 index 7476f038b8ce..000000000000 --- a/Gutenberg/Gutenberg.podspec +++ /dev/null @@ -1,73 +0,0 @@ -# frozen_string_literal: true - -require 'pathname' -require_relative './version' - -# A spec for a pod whose only job is delegating the XCFrameworks integration to CocoaPods. -# -# This is used to fetch Gutenberg builds that come from commits instead of tags. -# Builds from tags are "official" and stable, so we distribute them via GitHub we'll eventually publish them on CocoaPods. -# The artifacts for builds from commits are instead only stored on an Automattic's server. -Pod::Spec.new do |s| - raise 'Could not find Gutenberg version configuration' if GUTENBERG_CONFIG.nil? - - gutenberg_version = GUTENBERG_CONFIG[:commit] - - raise "Trying to fetch Gutenberg XCFramework from Automattic's distribution server with invalid version '#{GUTENBERG_CONFIG}'" if gutenberg_version.nil? - - xcframework_storage_url = 'https://d2twmm2nzpx3bg.cloudfront.net' - - xcframework_archive_url = "#{xcframework_storage_url}/Gutenberg-#{gutenberg_version}.tar.gz" - - require 'net/http' - - raise "Could not find file at URL #{xcframework_archive_url}" unless Net::HTTP.get_response(URI(xcframework_archive_url)).code == '200' - - s.name = 'Gutenberg' - s.version = '1.0.0' # The value here is irrelevant, but required - s.summary = 'A spec to help integrating the Gutenberg XCFramework' - s.homepage = 'https://apps.wordpress.com' - s.license = { type: 'GPL', file: '../LICENSE' } - s.authors = 'Automattic' - - s.ios.deployment_target = '13.0' # TODO: Read from common source - s.swift_version = '5.0' # TODO: read from common source - - s.requires_arc = true # TODO: Can this be omitted? - - # Tell CocoaPods where to download the XCFramework(s) archive with `source` and what to use from its decompressed contents with `vendored_frameworks`. - # - # Unfortunately, CocoaPods currently (1.12.1) does not work when it comes to local specs with http sources. - # - # See https://github.com/CocoaPods/CocoaPods/issues/10288#issuecomment-1517711223 - # s.source = { http: xcframework_archive_url } - archive_name = "Gutenberg-#{gutenberg_version}.tar.gz" - # Always use relative paths, otherwise the checksums in the lockfile will change from machine to machine - relative_extracted_archive_directory = Pathname.new("#{GUTENBERG_ARCHIVE_DIRECTORY}").relative_path_from(__dir__).to_s - relative_download_directory = Pathname.new(GUTENBERG_DOWNLOADS_DIRECTORY).relative_path_from(__dir__).to_s - relative_download_path = File.join(relative_download_directory, archive_name) - - s.source = { http: "file://#{relative_download_path}" } - - s.vendored_frameworks = [ - 'Aztec.xcframework', - 'Gutenberg.xcframework', - 'React.xcframework', - 'RNTAztecView.xcframework', - 'yoga.xcframework' - ].map do |f| - # This needs to be a relative path to the local extraction location and account for the archive folder structure. - File.join(relative_extracted_archive_directory, 'Frameworks', f) - end - - # Print the message here because the prepare_command output is not forwarded by CocoaPods - puts "Will skip downloading Gutenberg archive because it already exists at #{relative_download_path}" if File.exist? relative_download_path - s.prepare_command = <<-CMD - mkdir -p #{relative_download_directory} - if [[ ! -f "#{relative_download_path}" ]]; then - curl --progress-bar #{xcframework_archive_url} -o #{relative_download_path} - fi - mkdir -p #{relative_extracted_archive_directory} - tar -xzf #{relative_download_path} --directory=#{relative_extracted_archive_directory} - CMD -end diff --git a/Gutenberg/cocoapods_helpers.rb b/Gutenberg/cocoapods_helpers.rb index 7709e2e90024..64af3bffdf37 100644 --- a/Gutenberg/cocoapods_helpers.rb +++ b/Gutenberg/cocoapods_helpers.rb @@ -2,11 +2,6 @@ # Helpers and configurations for integrating Gutenberg in Jetpack and WordPress via CocoaPods. -require 'net/http' -require 'pathname' -require 'ruby-progressbar' -require 'uri' -require 'zlib' require_relative './version' DEFAULT_GUTENBERG_LOCATION = File.join(__dir__, '..', '..', 'gutenberg-mobile') @@ -89,9 +84,7 @@ def gutenberg_pod(config: GUTENBERG_CONFIG) gutenberg_dependencies(options: options) elsif options[:commit] - # Notice the use of relative path, otherwise we'd get the full path of the user that run the `pod install` command tracked in Podfile.lock. - # Also notice the path is relative from Dir.pwd, that is, the location where the script running this code is invoked to avoid absolute paths making the checksum non determinstic. - pod 'Gutenberg', path: Pathname.new(File.join(__dir__, 'Gutenberg.podspec')).relative_path_from(Dir.pwd).to_s + pod 'Gutenberg', podspec: "https://d2twmm2nzpx3bg.cloudfront.net/Gutenberg-#{options[:commit]}.podspec" end end # rubocop:enable Metrics/AbcSize @@ -103,7 +96,7 @@ def gutenberg_dependencies(options:) tag = options[:tag] podspec_prefix = "https://raw.githubusercontent.com/#{GITHUB_ORG}/#{REPO_NAME}/#{tag}" elsif options[:commit] - return # when referencing via a commit, we donwload pre-built frameworks + return # when referencing via a commit, we download pre-built frameworks else raise "Unexpected Gutenberg dependencies configuration '#{options}'" end @@ -118,8 +111,3 @@ def gutenberg_dependencies(options:) pod pod_name, podspec: "#{podspec_prefix}/#{pod_name}.#{podspec_extension}" end end - -def archive_url(commit:) - xcframework_storage_url = 'https://d2twmm2nzpx3bg.cloudfront.net' - "#{xcframework_storage_url}/Gutenberg-#{commit}.tar.gz" -end diff --git a/Gutenberg/version.rb b/Gutenberg/version.rb index 8e376387c39b..4722006d7961 100644 --- a/Gutenberg/version.rb +++ b/Gutenberg/version.rb @@ -17,13 +17,3 @@ GITHUB_ORG = 'wordpress-mobile' REPO_NAME = 'gutenberg-mobile' - -# The root working directory for downloading and extracting archives. -# In this location because multiple sources access it. -# -# This path should be ignored by Git. -GUTENBERG_WORKING_DIRECTORY = File.join(__dir__, '.build') -# Where to download the XCFramework archives -GUTENBERG_DOWNLOADS_DIRECTORY = File.join(GUTENBERG_WORKING_DIRECTORY, 'donwloads') -# Where to extract the XCFramework archive version to use for the build. -GUTENBERG_ARCHIVE_DIRECTORY = File.join(GUTENBERG_WORKING_DIRECTORY, 'archive') From 11b0d2c387cbe0aa2cd0e7bfc728938e3f6cdb5d Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Thu, 8 Jun 2023 09:20:42 +1000 Subject: [PATCH 13/48] Update Gutenberg `tar.gz` URL after changes in gutenberg-mobile See https://github.com/wordpress-mobile/gutenberg-mobile/pull/5769/commits/57f9dd1c4233913696578d89194b7527399be189 --- Gutenberg/cocoapods_helpers.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gutenberg/cocoapods_helpers.rb b/Gutenberg/cocoapods_helpers.rb index 64af3bffdf37..a0c68249abd9 100644 --- a/Gutenberg/cocoapods_helpers.rb +++ b/Gutenberg/cocoapods_helpers.rb @@ -84,7 +84,7 @@ def gutenberg_pod(config: GUTENBERG_CONFIG) gutenberg_dependencies(options: options) elsif options[:commit] - pod 'Gutenberg', podspec: "https://d2twmm2nzpx3bg.cloudfront.net/Gutenberg-#{options[:commit]}.podspec" + pod 'Gutenberg', podspec: "https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-#{options[:commit]}.podspec" end end # rubocop:enable Metrics/AbcSize From 64ac5880b8cad1d2cff2c94fa24181ae20fde065 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Thu, 8 Jun 2023 15:33:25 +1000 Subject: [PATCH 14/48] Use Xcode 14.3.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This was done to address the following CI failure when building with the Gutenberg XCFramework: ``` ▸ Linking WordPress ⚠️ ld: Could not find or use auto-linked library 'swiftCompatibility56' ❌ ld: symbol(s) not found for architecture x86_64 ``` https://buildkite.com/automattic/wordpress-ios/builds/14356#01885545-c05a-43a8-b475-d0d683857672 --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index e85cfbf1e286..5b415ca9c6b0 100644 --- a/Gemfile +++ b/Gemfile @@ -2,7 +2,7 @@ source 'https://rubygems.org' -# 1.12.x and higher, starting from 1.12.1 +# 1.12.x and higher, starting from 1.12.1, because that hotfix fixes Xcode 14.3 compatibility gem 'cocoapods', '~> 1.12', '>= 1.12.1' gem 'commonmarker' gem 'danger', '~> 9.3' From ede6c5d86eca01bef31e7ac57432b69d9be58c43 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Tue, 13 Jun 2023 19:30:26 +1000 Subject: [PATCH 15/48] Update Gutenberg CP setup to use XCFrameworks when referenced via tag --- Gutenberg/cocoapods_helpers.rb | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/Gutenberg/cocoapods_helpers.rb b/Gutenberg/cocoapods_helpers.rb index a0c68249abd9..0fbae94b9fcd 100644 --- a/Gutenberg/cocoapods_helpers.rb +++ b/Gutenberg/cocoapods_helpers.rb @@ -59,7 +59,6 @@ React-bridging ].freeze -# rubocop:disable Metrics/AbcSize def gutenberg_pod(config: GUTENBERG_CONFIG) options = config @@ -75,28 +74,17 @@ def gutenberg_pod(config: GUTENBERG_CONFIG) gutenberg_dependencies(options: options) elsif options[:tag] - options[:git] = "https://github.com/#{GITHUB_ORG}/#{REPO_NAME}.git" - options[:submodules] = true - - # This duplication with the branch above will disappear once tags will use pre-built binaries. - pod 'Gutenberg', options - pod 'RNTAztecView', options - - gutenberg_dependencies(options: options) + pod 'Gutenberg', podspec: "https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-#{options[:tag]}.podspec" elsif options[:commit] pod 'Gutenberg', podspec: "https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-#{options[:commit]}.podspec" end end -# rubocop:enable Metrics/AbcSize def gutenberg_dependencies(options:) if options[:path] podspec_prefix = options[:path] - elsif options[:tag] - tag = options[:tag] - podspec_prefix = "https://raw.githubusercontent.com/#{GITHUB_ORG}/#{REPO_NAME}/#{tag}" - elsif options[:commit] - return # when referencing via a commit, we download pre-built frameworks + elsif options[:tag] || options[:commit] + return # when referencing via a tag or commit, we download pre-built frameworks else raise "Unexpected Gutenberg dependencies configuration '#{options}'" end From 0806f9b2b559a6a5eb573a1f10dd6109de47e353 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Wed, 21 Jun 2023 21:47:15 +1000 Subject: [PATCH 16/48] Switch to Gutenberg v1.98.1 installed as an XCFramework --- Podfile.lock | 615 +----------------- WordPress/WordPress.xcodeproj/project.pbxproj | 126 +--- 2 files changed, 27 insertions(+), 714 deletions(-) diff --git a/Podfile.lock b/Podfile.lock index 9ba1587d52a0..e6b7cf5b02dc 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -24,27 +24,13 @@ PODS: - Sentry (~> 8.0) - Sodium (>= 0.9.1) - UIDeviceIdentifier (~> 2.0) - - boost (1.76.0) - - BVLinearGradient (2.5.6-wp-4): - - React-Core - CocoaLumberjack/Core (3.8.0) - CocoaLumberjack/Swift (3.8.0): - CocoaLumberjack/Core - CropViewController (2.5.3) - - DoubleConversion (1.1.5) - Down (0.6.6) - - FBLazyVector (0.69.4) - - FBReactNativeSpec (0.69.4): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.69.4) - - RCTTypeSafety (= 0.69.4) - - React-Core (= 0.69.4) - - React-jsi (= 0.69.4) - - ReactCommon/turbomodule/core (= 0.69.4) - - fmt (6.2.1) - FSInteractiveMap (0.1.0) - Gifu (3.2.0) - - glog (0.3.5) - GoogleSignIn (6.0.2): - AppAuth (~> 1.4) - GTMAppAuth (~> 1.0) @@ -54,22 +40,9 @@ PODS: - AppAuth/Core (~> 1.6) - GTMSessionFetcher/Core (< 3.0, >= 1.5) - GTMSessionFetcher/Core (1.7.2) - - Gutenberg (1.98.1): - - React (= 0.69.4) - - React-CoreModules (= 0.69.4) - - React-RCTImage (= 0.69.4) - - RNTAztecView + - Gutenberg (1.98.1) - JTAppleCalendar (8.0.3) - Kanvas (1.4.4) - - libwebp (1.2.4): - - libwebp/demux (= 1.2.4) - - libwebp/mux (= 1.2.4) - - libwebp/webp (= 1.2.4) - - libwebp/demux (1.2.4): - - libwebp/webp - - libwebp/mux (1.2.4): - - libwebp/demux - - libwebp/webp (1.2.4) - MediaEditor (1.2.2): - CropViewController (~> 2.5.3) - MRProgress (0.8.3): @@ -116,380 +89,7 @@ PODS: - OHHTTPStubs/OHPathHelpers (9.1.0) - OHHTTPStubs/Swift (9.1.0): - OHHTTPStubs/Default - - RCT-Folly (2021.06.28.00-v2): - - boost - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - RCT-Folly/Default (= 2021.06.28.00-v2) - - RCT-Folly/Default (2021.06.28.00-v2): - - boost - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - RCTRequired (0.69.4) - - RCTTypeSafety (0.69.4): - - FBLazyVector (= 0.69.4) - - RCTRequired (= 0.69.4) - - React-Core (= 0.69.4) - Reachability (3.2) - - React (0.69.4): - - React-Core (= 0.69.4) - - React-Core/DevSupport (= 0.69.4) - - React-Core/RCTWebSocket (= 0.69.4) - - React-RCTActionSheet (= 0.69.4) - - React-RCTAnimation (= 0.69.4) - - React-RCTBlob (= 0.69.4) - - React-RCTImage (= 0.69.4) - - React-RCTLinking (= 0.69.4) - - React-RCTNetwork (= 0.69.4) - - React-RCTSettings (= 0.69.4) - - React-RCTText (= 0.69.4) - - React-RCTVibration (= 0.69.4) - - React-bridging (0.69.4): - - RCT-Folly (= 2021.06.28.00-v2) - - React-jsi (= 0.69.4) - - React-callinvoker (0.69.4) - - React-Codegen (0.69.4): - - FBReactNativeSpec (= 0.69.4) - - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.69.4) - - RCTTypeSafety (= 0.69.4) - - React-Core (= 0.69.4) - - React-jsi (= 0.69.4) - - React-jsiexecutor (= 0.69.4) - - ReactCommon/turbomodule/core (= 0.69.4) - - React-Core (0.69.4): - - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.69.4) - - React-cxxreact (= 0.69.4) - - React-jsi (= 0.69.4) - - React-jsiexecutor (= 0.69.4) - - React-perflogger (= 0.69.4) - - Yoga - - React-Core/CoreModulesHeaders (0.69.4): - - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default - - React-cxxreact (= 0.69.4) - - React-jsi (= 0.69.4) - - React-jsiexecutor (= 0.69.4) - - React-perflogger (= 0.69.4) - - Yoga - - React-Core/Default (0.69.4): - - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-cxxreact (= 0.69.4) - - React-jsi (= 0.69.4) - - React-jsiexecutor (= 0.69.4) - - React-perflogger (= 0.69.4) - - Yoga - - React-Core/DevSupport (0.69.4): - - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.69.4) - - React-Core/RCTWebSocket (= 0.69.4) - - React-cxxreact (= 0.69.4) - - React-jsi (= 0.69.4) - - React-jsiexecutor (= 0.69.4) - - React-jsinspector (= 0.69.4) - - React-perflogger (= 0.69.4) - - Yoga - - React-Core/RCTActionSheetHeaders (0.69.4): - - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default - - React-cxxreact (= 0.69.4) - - React-jsi (= 0.69.4) - - React-jsiexecutor (= 0.69.4) - - React-perflogger (= 0.69.4) - - Yoga - - React-Core/RCTAnimationHeaders (0.69.4): - - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default - - React-cxxreact (= 0.69.4) - - React-jsi (= 0.69.4) - - React-jsiexecutor (= 0.69.4) - - React-perflogger (= 0.69.4) - - Yoga - - React-Core/RCTBlobHeaders (0.69.4): - - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default - - React-cxxreact (= 0.69.4) - - React-jsi (= 0.69.4) - - React-jsiexecutor (= 0.69.4) - - React-perflogger (= 0.69.4) - - Yoga - - React-Core/RCTImageHeaders (0.69.4): - - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default - - React-cxxreact (= 0.69.4) - - React-jsi (= 0.69.4) - - React-jsiexecutor (= 0.69.4) - - React-perflogger (= 0.69.4) - - Yoga - - React-Core/RCTLinkingHeaders (0.69.4): - - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default - - React-cxxreact (= 0.69.4) - - React-jsi (= 0.69.4) - - React-jsiexecutor (= 0.69.4) - - React-perflogger (= 0.69.4) - - Yoga - - React-Core/RCTNetworkHeaders (0.69.4): - - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default - - React-cxxreact (= 0.69.4) - - React-jsi (= 0.69.4) - - React-jsiexecutor (= 0.69.4) - - React-perflogger (= 0.69.4) - - Yoga - - React-Core/RCTSettingsHeaders (0.69.4): - - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default - - React-cxxreact (= 0.69.4) - - React-jsi (= 0.69.4) - - React-jsiexecutor (= 0.69.4) - - React-perflogger (= 0.69.4) - - Yoga - - React-Core/RCTTextHeaders (0.69.4): - - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default - - React-cxxreact (= 0.69.4) - - React-jsi (= 0.69.4) - - React-jsiexecutor (= 0.69.4) - - React-perflogger (= 0.69.4) - - Yoga - - React-Core/RCTVibrationHeaders (0.69.4): - - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default - - React-cxxreact (= 0.69.4) - - React-jsi (= 0.69.4) - - React-jsiexecutor (= 0.69.4) - - React-perflogger (= 0.69.4) - - Yoga - - React-Core/RCTWebSocket (0.69.4): - - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.69.4) - - React-cxxreact (= 0.69.4) - - React-jsi (= 0.69.4) - - React-jsiexecutor (= 0.69.4) - - React-perflogger (= 0.69.4) - - Yoga - - React-CoreModules (0.69.4): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.69.4) - - React-Codegen (= 0.69.4) - - React-Core/CoreModulesHeaders (= 0.69.4) - - React-jsi (= 0.69.4) - - React-RCTImage (= 0.69.4) - - ReactCommon/turbomodule/core (= 0.69.4) - - React-cxxreact (0.69.4): - - boost (= 1.76.0) - - DoubleConversion - - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-callinvoker (= 0.69.4) - - React-jsi (= 0.69.4) - - React-jsinspector (= 0.69.4) - - React-logger (= 0.69.4) - - React-perflogger (= 0.69.4) - - React-runtimeexecutor (= 0.69.4) - - React-jsi (0.69.4): - - boost (= 1.76.0) - - DoubleConversion - - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-jsi/Default (= 0.69.4) - - React-jsi/Default (0.69.4): - - boost (= 1.76.0) - - DoubleConversion - - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-jsiexecutor (0.69.4): - - DoubleConversion - - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-cxxreact (= 0.69.4) - - React-jsi (= 0.69.4) - - React-perflogger (= 0.69.4) - - React-jsinspector (0.69.4) - - React-logger (0.69.4): - - glog - - react-native-blur (3.6.1): - - React-Core - - react-native-get-random-values (1.4.0): - - React-Core - - react-native-safe-area (0.5.1): - - React-Core - - react-native-safe-area-context (3.2.0): - - React-Core - - react-native-slider (3.0.2-wp-4): - - React-Core - - react-native-video (5.2.0-wp-6): - - React-Core - - react-native-video/Video (= 5.2.0-wp-6) - - react-native-video/Video (5.2.0-wp-6): - - React-Core - - react-native-webview (11.26.1): - - React-Core - - React-perflogger (0.69.4) - - React-RCTActionSheet (0.69.4): - - React-Core/RCTActionSheetHeaders (= 0.69.4) - - React-RCTAnimation (0.69.4): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.69.4) - - React-Codegen (= 0.69.4) - - React-Core/RCTAnimationHeaders (= 0.69.4) - - React-jsi (= 0.69.4) - - ReactCommon/turbomodule/core (= 0.69.4) - - React-RCTBlob (0.69.4): - - RCT-Folly (= 2021.06.28.00-v2) - - React-Codegen (= 0.69.4) - - React-Core/RCTBlobHeaders (= 0.69.4) - - React-Core/RCTWebSocket (= 0.69.4) - - React-jsi (= 0.69.4) - - React-RCTNetwork (= 0.69.4) - - ReactCommon/turbomodule/core (= 0.69.4) - - React-RCTImage (0.69.4): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.69.4) - - React-Codegen (= 0.69.4) - - React-Core/RCTImageHeaders (= 0.69.4) - - React-jsi (= 0.69.4) - - React-RCTNetwork (= 0.69.4) - - ReactCommon/turbomodule/core (= 0.69.4) - - React-RCTLinking (0.69.4): - - React-Codegen (= 0.69.4) - - React-Core/RCTLinkingHeaders (= 0.69.4) - - React-jsi (= 0.69.4) - - ReactCommon/turbomodule/core (= 0.69.4) - - React-RCTNetwork (0.69.4): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.69.4) - - React-Codegen (= 0.69.4) - - React-Core/RCTNetworkHeaders (= 0.69.4) - - React-jsi (= 0.69.4) - - ReactCommon/turbomodule/core (= 0.69.4) - - React-RCTSettings (0.69.4): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.69.4) - - React-Codegen (= 0.69.4) - - React-Core/RCTSettingsHeaders (= 0.69.4) - - React-jsi (= 0.69.4) - - ReactCommon/turbomodule/core (= 0.69.4) - - React-RCTText (0.69.4): - - React-Core/RCTTextHeaders (= 0.69.4) - - React-RCTVibration (0.69.4): - - RCT-Folly (= 2021.06.28.00-v2) - - React-Codegen (= 0.69.4) - - React-Core/RCTVibrationHeaders (= 0.69.4) - - React-jsi (= 0.69.4) - - ReactCommon/turbomodule/core (= 0.69.4) - - React-runtimeexecutor (0.69.4): - - React-jsi (= 0.69.4) - - ReactCommon (0.69.4): - - React-logger (= 0.69.4) - - ReactCommon/react_debug_core (= 0.69.4) - - ReactCommon/turbomodule (= 0.69.4) - - ReactCommon/react_debug_core (0.69.4): - - React-logger (= 0.69.4) - - ReactCommon/turbomodule (0.69.4): - - DoubleConversion - - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-bridging (= 0.69.4) - - React-callinvoker (= 0.69.4) - - React-Core (= 0.69.4) - - React-cxxreact (= 0.69.4) - - React-jsi (= 0.69.4) - - React-logger (= 0.69.4) - - React-perflogger (= 0.69.4) - - ReactCommon/turbomodule/core (= 0.69.4) - - ReactCommon/turbomodule/samples (= 0.69.4) - - ReactCommon/turbomodule/core (0.69.4): - - DoubleConversion - - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-bridging (= 0.69.4) - - React-callinvoker (= 0.69.4) - - React-Core (= 0.69.4) - - React-cxxreact (= 0.69.4) - - React-jsi (= 0.69.4) - - React-logger (= 0.69.4) - - React-perflogger (= 0.69.4) - - ReactCommon/turbomodule/samples (0.69.4): - - DoubleConversion - - glog - - RCT-Folly (= 2021.06.28.00-v2) - - React-bridging (= 0.69.4) - - React-callinvoker (= 0.69.4) - - React-Core (= 0.69.4) - - React-cxxreact (= 0.69.4) - - React-jsi (= 0.69.4) - - React-logger (= 0.69.4) - - React-perflogger (= 0.69.4) - - ReactCommon/turbomodule/core (= 0.69.4) - - RNCClipboard (1.9.0): - - React-Core - - RNCMaskedView (0.2.6): - - React-Core - - RNFastImage (8.5.11): - - React-Core - - SDWebImage (~> 5.11.1) - - SDWebImageWebPCoder (~> 0.8.4) - - RNGestureHandler (2.3.2-wp-3): - - React-Core - - RNReanimated (2.9.1-wp-4): - - DoubleConversion - - FBLazyVector - - FBReactNativeSpec - - glog - - RCT-Folly - - RCTRequired - - RCTTypeSafety - - React-callinvoker - - React-Core - - React-Core/DevSupport - - React-Core/RCTWebSocket - - React-CoreModules - - React-cxxreact - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-RCTActionSheet - - React-RCTAnimation - - React-RCTBlob - - React-RCTImage - - React-RCTLinking - - React-RCTNetwork - - React-RCTSettings - - React-RCTText - - ReactCommon/turbomodule/core - - Yoga - - RNScreens (2.9.0): - - React-Core - - RNSVG (9.13.6): - - React-Core - - RNTAztecView (1.98.1): - - React-Core - - WordPress-Aztec-iOS (~> 1.19.8) - - SDWebImage (5.11.1): - - SDWebImage/Core (= 5.11.1) - - SDWebImage/Core (5.11.1) - - SDWebImageWebPCoder (0.8.5): - - libwebp (~> 1.0) - - SDWebImage/Core (~> 5.10) - Sentry (8.8.0): - Sentry/Core (= 8.8.0) - SentryPrivate (= 8.8.0) @@ -522,7 +122,6 @@ PODS: - WordPressUI (1.12.5) - WPMediaPicker (1.8.8) - wpxmlrpc (0.10.0) - - Yoga (1.14.0) - ZendeskCommonUISDK (6.1.2) - ZendeskCoreSDK (2.5.1) - ZendeskMessagingAPISDK (3.8.3): @@ -545,18 +144,13 @@ DEPENDENCIES: - AppCenter (~> 4.1) - AppCenter/Distribute (~> 4.1) - Automattic-Tracks-iOS (~> 2.2) - - boost (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/boost.podspec.json`) - - BVLinearGradient (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/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.98.1/third-party-podspecs/FBLazyVector.podspec.json`) - - FBReactNativeSpec (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/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.98.1/third-party-podspecs/glog.podspec.json`) - Gridicons (~> 1.1.0) - - Gutenberg (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, tag `v1.98.1`) + - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.98.1.podspec`) - JTAppleCalendar (~> 8.0.2) - Kanvas (~> 1.4.4) - MediaEditor (>= 1.2.2, ~> 1.2) @@ -565,48 +159,7 @@ 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.98.1/third-party-podspecs/RCT-Folly.podspec.json`) - - RCTRequired (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/RCTRequired.podspec.json`) - - RCTTypeSafety (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/RCTTypeSafety.podspec.json`) - Reachability (= 3.2) - - React (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React.podspec.json`) - - React-bridging (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-bridging.podspec.json`) - - React-callinvoker (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-callinvoker.podspec.json`) - - React-Codegen (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-Codegen.podspec.json`) - - React-Core (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-Core.podspec.json`) - - React-CoreModules (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-CoreModules.podspec.json`) - - React-cxxreact (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-cxxreact.podspec.json`) - - React-jsi (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-jsi.podspec.json`) - - React-jsiexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-jsiexecutor.podspec.json`) - - React-jsinspector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-jsinspector.podspec.json`) - - React-logger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-logger.podspec.json`) - - react-native-blur (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/react-native-blur.podspec.json`) - - react-native-get-random-values (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/react-native-get-random-values.podspec.json`) - - react-native-safe-area (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/react-native-safe-area.podspec.json`) - - react-native-safe-area-context (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/react-native-safe-area-context.podspec.json`) - - react-native-slider (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/react-native-slider.podspec.json`) - - react-native-video (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/react-native-video.podspec.json`) - - react-native-webview (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/react-native-webview.podspec.json`) - - React-perflogger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-perflogger.podspec.json`) - - React-RCTActionSheet (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-RCTActionSheet.podspec.json`) - - React-RCTAnimation (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-RCTAnimation.podspec.json`) - - React-RCTBlob (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-RCTBlob.podspec.json`) - - React-RCTImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-RCTImage.podspec.json`) - - React-RCTLinking (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-RCTLinking.podspec.json`) - - React-RCTNetwork (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-RCTNetwork.podspec.json`) - - React-RCTSettings (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-RCTSettings.podspec.json`) - - React-RCTText (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-RCTText.podspec.json`) - - React-RCTVibration (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-RCTVibration.podspec.json`) - - React-runtimeexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-runtimeexecutor.podspec.json`) - - ReactCommon (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/ReactCommon.podspec.json`) - - RNCClipboard (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/RNCClipboard.podspec.json`) - - RNCMaskedView (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/RNCMaskedView.podspec.json`) - - RNFastImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/RNFastImage.podspec.json`) - - RNGestureHandler (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/RNGestureHandler.podspec.json`) - - RNReanimated (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/RNReanimated.podspec.json`) - - RNScreens (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/RNScreens.podspec.json`) - - RNSVG (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/RNSVG.podspec.json`) - - RNTAztecView (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, tag `v1.98.1`) - Starscream (= 3.0.6) - SVProgressHUD (= 2.2.5) - SwiftLint (~> 0.50) @@ -616,7 +169,6 @@ DEPENDENCIES: - WordPressShared (~> 2.2-beta) - WordPressUI (~> 1.12.5) - WPMediaPicker (~> 1.8-beta) - - Yoga (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/Yoga.podspec.json`) - ZendeskSupportSDK (= 5.3.0) - ZIPFoundation (~> 0.9.8) @@ -632,9 +184,7 @@ SPEC REPOS: - Automattic-Tracks-iOS - CocoaLumberjack - CropViewController - - DoubleConversion - Down - - fmt - Gifu - GoogleSignIn - Gridicons @@ -642,7 +192,6 @@ SPEC REPOS: - GTMSessionFetcher - JTAppleCalendar - Kanvas - - libwebp - MediaEditor - MRProgress - NSObject-SafeExpectations @@ -650,8 +199,6 @@ SPEC REPOS: - OCMock - OHHTTPStubs - Reachability - - SDWebImage - - SDWebImageWebPCoder - Sentry - SentryPrivate - Sodium @@ -676,109 +223,11 @@ SPEC REPOS: - ZIPFoundation EXTERNAL SOURCES: - boost: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/boost.podspec.json - BVLinearGradient: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/BVLinearGradient.podspec.json - FBLazyVector: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/FBLazyVector.podspec.json - FBReactNativeSpec: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/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.98.1/third-party-podspecs/glog.podspec.json Gutenberg: - :git: https://github.com/wordpress-mobile/gutenberg-mobile.git - :submodules: true - :tag: v1.98.1 - RCT-Folly: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/RCT-Folly.podspec.json - RCTRequired: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/RCTRequired.podspec.json - RCTTypeSafety: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/RCTTypeSafety.podspec.json - React: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React.podspec.json - React-bridging: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-bridging.podspec.json - React-callinvoker: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-callinvoker.podspec.json - React-Codegen: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-Codegen.podspec.json - React-Core: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-Core.podspec.json - React-CoreModules: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-CoreModules.podspec.json - React-cxxreact: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-cxxreact.podspec.json - React-jsi: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-jsi.podspec.json - React-jsiexecutor: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-jsiexecutor.podspec.json - React-jsinspector: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-jsinspector.podspec.json - React-logger: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-logger.podspec.json - react-native-blur: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/react-native-blur.podspec.json - react-native-get-random-values: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/react-native-get-random-values.podspec.json - react-native-safe-area: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/react-native-safe-area.podspec.json - react-native-safe-area-context: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/react-native-safe-area-context.podspec.json - react-native-slider: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/react-native-slider.podspec.json - react-native-video: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/react-native-video.podspec.json - react-native-webview: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/react-native-webview.podspec.json - React-perflogger: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-perflogger.podspec.json - React-RCTActionSheet: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-RCTActionSheet.podspec.json - React-RCTAnimation: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-RCTAnimation.podspec.json - React-RCTBlob: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-RCTBlob.podspec.json - React-RCTImage: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-RCTImage.podspec.json - React-RCTLinking: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-RCTLinking.podspec.json - React-RCTNetwork: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-RCTNetwork.podspec.json - React-RCTSettings: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-RCTSettings.podspec.json - React-RCTText: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-RCTText.podspec.json - React-RCTVibration: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-RCTVibration.podspec.json - React-runtimeexecutor: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/React-runtimeexecutor.podspec.json - ReactCommon: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/ReactCommon.podspec.json - RNCClipboard: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/RNCClipboard.podspec.json - RNCMaskedView: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/RNCMaskedView.podspec.json - RNFastImage: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/RNFastImage.podspec.json - RNGestureHandler: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/RNGestureHandler.podspec.json - RNReanimated: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/RNReanimated.podspec.json - RNScreens: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/RNScreens.podspec.json - RNSVG: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/RNSVG.podspec.json - RNTAztecView: - :git: https://github.com/wordpress-mobile/gutenberg-mobile.git - :submodules: true - :tag: v1.98.1 - Yoga: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.98.1/third-party-podspecs/Yoga.podspec.json + :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.98.1.podspec CHECKOUT OPTIONS: FSInteractiveMap: @@ -788,10 +237,6 @@ CHECKOUT OPTIONS: :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true :tag: v1.98.1 - RNTAztecView: - :git: https://github.com/wordpress-mobile/gutenberg-mobile.git - :submodules: true - :tag: v1.98.1 SPEC CHECKSUMS: Alamofire: 3ec537f71edc9804815215393ae2b1a8ea33a844 @@ -800,76 +245,25 @@ SPEC CHECKSUMS: AppAuth: 3bb1d1cd9340bd09f5ed189fb00b1cc28e1e8570 AppCenter: b0b6f1190215b5f983c42934db718f3b46fff3c0 Automattic-Tracks-iOS: a1b020ab02f0e5a39c5d4e6870a498273f286158 - boost: 32a63928ef0a5bf8b60f6b930c8864113fa28779 - BVLinearGradient: 9168d5f3bdb636b9bd861bf9fbe747f77e835065 CocoaLumberjack: 78abfb691154e2a9df8ded4350d504ee19d90732 CropViewController: a5c143548a0fabcd6cc25f2d26e40460cfb8c78c - DoubleConversion: e22e0762848812a87afd67ffda3998d9ef29170c Down: 71bf4af3c04fa093e65dffa25c4b64fa61287373 - FBLazyVector: 16fdf30fcbc7177c6a4bdf35ef47225577eb9636 - FBReactNativeSpec: 03365206a695e76184146098efecb19a07f98ffc - fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 FSInteractiveMap: a396f610f48b76cb540baa87139d056429abda86 Gifu: 7bcb6427457d85e0b4dff5a84ec5947ac19a93ea - glog: 741689bdd65551bc8fb59d633e55c34293030d3e GoogleSignIn: fd381840dbe7c1137aa6dc30849a5c3e070c034a Gridicons: 17d660b97ce4231d582101b02f8280628b141c9a GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd GTMSessionFetcher: 5595ec75acf5be50814f81e9189490412bad82ba - Gutenberg: fd4cb66c253b00ccae222d01ed3824521ed50b76 + Gutenberg: cf0107fac4110a45ec3c643dde69b29f647148bb JTAppleCalendar: 932cadea40b1051beab10f67843451d48ba16c99 Kanvas: f932eaed3d3f47aae8aafb6c2d27c968bdd49030 - libwebp: f62cb61d0a484ba548448a4bd52aabf150ff6eef MediaEditor: d08314cfcbfac74361071a306b4bc3a39b3356ae MRProgress: 16de7cc9f347e8846797a770db102a323fe7ef09 NSObject-SafeExpectations: ab8fe623d36b25aa1f150affa324e40a2f3c0374 "NSURL+IDN": afc873e639c18138a1589697c3add197fe8679ca OCMock: 43565190abc78977ad44a61c0d20d7f0784d35ab OHHTTPStubs: 90eac6d8f2c18317baeca36698523dc67c513831 - RCT-Folly: b60af04f04d86a9f9c3317ba253365c4bd30ac5f - RCTRequired: f29d295ee209e2ac38b0aede22af2079ba814983 - RCTTypeSafety: 385273055103e9b60ac9ec070900621d3a31ff28 Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 - React: ee95447578c5b9789ba7aad0593d162b72a45e6f - React-bridging: 011e313a56cbb8e98f97749b83f4b43fafdcf3db - React-callinvoker: 132da8333bd1a22a4d637a800bcd5e9bb051404f - React-Codegen: 1bb3fbcd85a52638967113eab1cc0acb3e719c6f - React-Core: bd57dad64f256ac856c5a5341c3433593bc9e98b - React-CoreModules: 98d0fd895946722aeda6214ff155f0ddeef02fa3 - React-cxxreact: 53614bcfdacdf57c6bf5ebbeb942dd020f6c9f37 - React-jsi: 828954dea2cd2fba7433d1c2e824d26f4a1c09fd - React-jsiexecutor: 8dfd84cc30ef554c37084f040db8171f998bec6c - React-jsinspector: f86975c8251bd7882f9a9d68df150db287a822bb - React-logger: 16a67709f5aa1d752fd09f9e6ccbf802ba0c24e9 - react-native-blur: 14c75aa19da8734c1656d5b6ca5adb859b2c26aa - react-native-get-random-values: 2869478c635a6e33080b917ce33f2803cb69262c - react-native-safe-area: e3de9e959c7baaae8db9bcb015d99ed1da25c9d5 - react-native-safe-area-context: 1e501ec30c260422def56e95e11edb103caa5bf2 - react-native-slider: fe24b59d1cdf9ce3adc7dc53f87cfdde8da9498a - react-native-video: acfe36130a7476cf82eb543c7ee2b9e96794ff9e - react-native-webview: 07834cb4097a1c1785ac8ac13126fa03b24ae81c - React-perflogger: 685c7bd5da242acbe09ae37488dd81c7d41afbb4 - React-RCTActionSheet: 6c194ed0520d57075d03f3daf58ad025b1fb98a2 - React-RCTAnimation: 2c9468ff7d0116801a994f445108f4be4f41f9df - React-RCTBlob: 18a19196ddf511eaab0be1ff30feb0c38b9ad5c9 - React-RCTImage: 72af5e51c5ce2e725ebddea590901fb9c4fd46aa - React-RCTLinking: 6224cf6652cb9a6304c7d5c3e5ab92a72a0c9bf7 - React-RCTNetwork: e82a24ca24d461dd8f9c087eb4332bd77004c906 - React-RCTSettings: 81df0a79a648cb1678220e926d92e6ebc5ea6cc5 - React-RCTText: b55360e76043f19128eee6ac04e0cbd53e6baf79 - React-RCTVibration: 87d2dbefada4a1c345dcdc4c522494ac95c8bc9a - React-runtimeexecutor: f4e1071b6cebeef4a30896343960606dc09ca079 - ReactCommon: bb76a4ca9fb5c2b8b1428dcfe0bc32eba5e4c02d - RNCClipboard: e2298216e12d730c3c2eb9484095e1f2e1679cce - RNCMaskedView: b467479e450f13e5dcee04423fefd2534f08c3eb - RNFastImage: 9407b5abc43452149a2f628107c64a7d11aa2948 - RNGestureHandler: 21b4ecf88948a85c163977823a7429e81c7e06a6 - RNReanimated: b5730b32243a35f955202d807ecb43755133ac62 - RNScreens: bd1f43d7dfcd435bc11d4ee5c60086717c45a113 - RNSVG: 259ef12cbec2591a45fc7c5f09d7aa09e6692533 - RNTAztecView: 0cf287757e0879ea9e87e6628851c24f798ba809 - SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d - SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d Sentry: 927dfb29d18a14d924229a59cc2ad149f43349f2 SentryPrivate: 4350d865f898224ab9fa02b37d6ee7fbb623f47e Sodium: 23d11554ecd556196d313cf6130d406dfe7ac6da @@ -885,7 +279,6 @@ SPEC CHECKSUMS: WordPressUI: c5be816f6c7b3392224ac21de9e521e89fa108ac WPMediaPicker: 0d40b8d66b6dfdaa2d6a41e3be51249ff5898775 wpxmlrpc: 68db063041e85d186db21f674adf08d9c70627fd - Yoga: 5e12f4deb20582f86f6323e1cdff25f07afc87f6 ZendeskCommonUISDK: 5f0a83f412e07ae23701f18c412fe783b3249ef5 ZendeskCoreSDK: 19a18e5ef2edcb18f4dbc0ea0d12bd31f515712a ZendeskMessagingAPISDK: db91be0c5cb88229d22f0e560ed99ba6e1dce02e diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index 52fa77a93ae1..da744d7caef0 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -18534,7 +18534,7 @@ E16AB92514D978240047A2E5 /* Sources */, E16AB92614D978240047A2E5 /* Frameworks */, E16AB92714D978240047A2E5 /* Resources */, - 5C9D9350019C99ACBD754CF3 /* [CP] Copy Pods Resources */, + 49AE9271B82C7D67430387FA /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -20051,6 +20051,7 @@ "${PODS_ROOT}/Target Support Files/Pods-Apps-WordPress/Pods-Apps-WordPress-frameworks.sh", "${BUILT_PRODUCTS_DIR}/Sentry/Sentry.framework", "${BUILT_PRODUCTS_DIR}/SentryPrivate/SentryPrivate.framework", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/Gutenberg/Gutenberg.framework/Gutenberg", "${PODS_XCFRAMEWORKS_BUILD_DIR}/ZendeskCommonUISDK/CommonUISDK.framework/CommonUISDK", "${PODS_XCFRAMEWORKS_BUILD_DIR}/ZendeskCoreSDK/ZendeskCoreSDK.framework/ZendeskCoreSDK", "${PODS_XCFRAMEWORKS_BUILD_DIR}/ZendeskMessagingAPISDK/MessagingAPI.framework/MessagingAPI", @@ -20063,6 +20064,7 @@ outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sentry.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SentryPrivate.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Gutenberg.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CommonUISDK.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZendeskCoreSDK.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MessagingAPI.framework", @@ -20118,6 +20120,24 @@ shellPath = /bin/sh; shellScript = "$SRCROOT/../Scripts/BuildPhases/GenerateCredentials.sh\n"; }; + 49AE9271B82C7D67430387FA /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-WordPressTest/Pods-WordPressTest-frameworks.sh", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/Gutenberg/Gutenberg.framework/Gutenberg", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Gutenberg.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-WordPressTest/Pods-WordPressTest-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 4C304224F0F810A17D96A402 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -20184,52 +20204,6 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-WordPressNotificationServiceExtension/Pods-WordPressNotificationServiceExtension-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 5C9D9350019C99ACBD754CF3 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-WordPressTest/Pods-WordPressTest-resources.sh", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/content-functions.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/editor-behavior-overrides.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/editor-style-overrides.css", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/gutenberg-observer.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/inject-css.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/insert-block.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/local-storage-overrides.json", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/prevent-autosaves.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/wp-bar-override.css", - "${PODS_ROOT}/Gutenberg/src/block-support/supported-blocks.json", - "${PODS_ROOT}/Gutenberg/resources/unsupported-block-editor/external-style-overrides.css", - "${PODS_ROOT}/Gutenberg/resources/unsupported-block-editor/extra-localstorage-entries.js", - "${PODS_ROOT}/Gutenberg/resources/unsupported-block-editor/remove-nux.js", - "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/WordPress-Aztec-iOS/WordPress-Aztec-iOS.bundle", - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/content-functions.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/editor-behavior-overrides.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/editor-style-overrides.css", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/gutenberg-observer.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/inject-css.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/insert-block.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/local-storage-overrides.json", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/prevent-autosaves.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/wp-bar-override.css", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/supported-blocks.json", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/external-style-overrides.css", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/extra-localstorage-entries.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/remove-nux.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/WordPress-Aztec-iOS.bundle", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-WordPressTest/Pods-WordPressTest-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; 72BB9EE3CC91D92F3735F4F3 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -20362,25 +20336,11 @@ "${PODS_ROOT}/Down/Resources/DownView.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/GoogleSignIn/GoogleSignIn.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/Gridicons/Gridicons.bundle", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/content-functions.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/editor-behavior-overrides.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/editor-style-overrides.css", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/gutenberg-observer.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/inject-css.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/insert-block.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/local-storage-overrides.json", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/prevent-autosaves.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/wp-bar-override.css", - "${PODS_ROOT}/Gutenberg/src/block-support/supported-blocks.json", - "${PODS_ROOT}/Gutenberg/resources/unsupported-block-editor/external-style-overrides.css", - "${PODS_ROOT}/Gutenberg/resources/unsupported-block-editor/extra-localstorage-entries.js", - "${PODS_ROOT}/Gutenberg/resources/unsupported-block-editor/remove-nux.js", "${PODS_CONFIGURATION_BUILD_DIR}/Kanvas/Kanvas.bundle", "${BUILT_PRODUCTS_DIR}/MediaEditor/MediaEditor.framework/MediaEditorDrawing.storyboardc", "${BUILT_PRODUCTS_DIR}/MediaEditor/MediaEditor.framework/MediaEditorFilters.storyboardc", "${BUILT_PRODUCTS_DIR}/MediaEditor/MediaEditor.framework/MediaEditorHub.storyboardc", "${PODS_CONFIGURATION_BUILD_DIR}/MediaEditor/MediaEditor.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", "${PODS_ROOT}/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/WPMediaPicker/WPMediaPicker.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/WordPress-Aztec-iOS/WordPress-Aztec-iOS.bundle", @@ -20397,25 +20357,11 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/DownView.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleSignIn.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Gridicons.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/content-functions.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/editor-behavior-overrides.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/editor-style-overrides.css", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/gutenberg-observer.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/inject-css.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/insert-block.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/local-storage-overrides.json", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/prevent-autosaves.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/wp-bar-override.css", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/supported-blocks.json", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/external-style-overrides.css", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/extra-localstorage-entries.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/remove-nux.js", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Kanvas.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MediaEditorDrawing.storyboardc", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MediaEditorFilters.storyboardc", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MediaEditorHub.storyboardc", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MediaEditor.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SVProgressHUD.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/WPMediaPicker.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/WordPress-Aztec-iOS.bundle", @@ -20708,6 +20654,7 @@ "${PODS_ROOT}/Target Support Files/Pods-Apps-Jetpack/Pods-Apps-Jetpack-frameworks.sh", "${BUILT_PRODUCTS_DIR}/Sentry/Sentry.framework", "${BUILT_PRODUCTS_DIR}/SentryPrivate/SentryPrivate.framework", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/Gutenberg/Gutenberg.framework/Gutenberg", "${PODS_XCFRAMEWORKS_BUILD_DIR}/ZendeskCommonUISDK/CommonUISDK.framework/CommonUISDK", "${PODS_XCFRAMEWORKS_BUILD_DIR}/ZendeskCoreSDK/ZendeskCoreSDK.framework/ZendeskCoreSDK", "${PODS_XCFRAMEWORKS_BUILD_DIR}/ZendeskMessagingAPISDK/MessagingAPI.framework/MessagingAPI", @@ -20720,6 +20667,7 @@ outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sentry.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SentryPrivate.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Gutenberg.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CommonUISDK.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZendeskCoreSDK.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MessagingAPI.framework", @@ -20745,25 +20693,11 @@ "${PODS_ROOT}/Down/Resources/DownView.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/GoogleSignIn/GoogleSignIn.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/Gridicons/Gridicons.bundle", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/content-functions.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/editor-behavior-overrides.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/editor-style-overrides.css", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/gutenberg-observer.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/inject-css.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/insert-block.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/local-storage-overrides.json", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/prevent-autosaves.js", - "${PODS_ROOT}/Gutenberg/gutenberg/packages/react-native-bridge/common/gutenberg-web-single-block/wp-bar-override.css", - "${PODS_ROOT}/Gutenberg/src/block-support/supported-blocks.json", - "${PODS_ROOT}/Gutenberg/resources/unsupported-block-editor/external-style-overrides.css", - "${PODS_ROOT}/Gutenberg/resources/unsupported-block-editor/extra-localstorage-entries.js", - "${PODS_ROOT}/Gutenberg/resources/unsupported-block-editor/remove-nux.js", "${PODS_CONFIGURATION_BUILD_DIR}/Kanvas/Kanvas.bundle", "${BUILT_PRODUCTS_DIR}/MediaEditor/MediaEditor.framework/MediaEditorDrawing.storyboardc", "${BUILT_PRODUCTS_DIR}/MediaEditor/MediaEditor.framework/MediaEditorFilters.storyboardc", "${BUILT_PRODUCTS_DIR}/MediaEditor/MediaEditor.framework/MediaEditorHub.storyboardc", "${PODS_CONFIGURATION_BUILD_DIR}/MediaEditor/MediaEditor.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", "${PODS_ROOT}/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/WPMediaPicker/WPMediaPicker.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/WordPress-Aztec-iOS/WordPress-Aztec-iOS.bundle", @@ -20780,25 +20714,11 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/DownView.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleSignIn.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Gridicons.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/content-functions.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/editor-behavior-overrides.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/editor-style-overrides.css", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/gutenberg-observer.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/inject-css.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/insert-block.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/local-storage-overrides.json", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/prevent-autosaves.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/wp-bar-override.css", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/supported-blocks.json", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/external-style-overrides.css", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/extra-localstorage-entries.js", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/remove-nux.js", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Kanvas.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MediaEditorDrawing.storyboardc", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MediaEditorFilters.storyboardc", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MediaEditorHub.storyboardc", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MediaEditor.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SVProgressHUD.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/WPMediaPicker.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/WordPress-Aztec-iOS.bundle", From dfae9702f50d98d90d25bd1e8e46f69505584a7e Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Wed, 21 Jun 2023 21:59:13 +1000 Subject: [PATCH 17/48] Do not `@testable import` Gutenberg in unit tests Because the latest XCFramework setup ships without testing compilation. --- WordPress/WordPressTest/GutenbergFilesAppMediaSourceTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/WordPressTest/GutenbergFilesAppMediaSourceTests.swift b/WordPress/WordPressTest/GutenbergFilesAppMediaSourceTests.swift index 133a61629d68..39a883ce034d 100644 --- a/WordPress/WordPressTest/GutenbergFilesAppMediaSourceTests.swift +++ b/WordPress/WordPressTest/GutenbergFilesAppMediaSourceTests.swift @@ -1,5 +1,5 @@ import XCTest -@testable import Gutenberg +import Gutenberg @testable import WordPress final class GutenbergFilesAppMediaSourceTests: XCTestCase { From 472697364b4b9fd7f1e070c1954a233c026b73eb Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Wed, 28 Jun 2023 16:52:36 +1000 Subject: [PATCH 18/48] DRY logic setting Gutenberg URL when using tag or commit Co-authored-by: Tony Li --- Gutenberg/cocoapods_helpers.rb | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Gutenberg/cocoapods_helpers.rb b/Gutenberg/cocoapods_helpers.rb index 0fbae94b9fcd..89f1f1def197 100644 --- a/Gutenberg/cocoapods_helpers.rb +++ b/Gutenberg/cocoapods_helpers.rb @@ -64,6 +64,7 @@ def gutenberg_pod(config: GUTENBERG_CONFIG) local_gutenberg_key = 'LOCAL_GUTENBERG' local_gutenberg = ENV.fetch(local_gutenberg_key, nil) + # We check local_gutenberg first because it should take precedence, being an override set by the user. if local_gutenberg options = { path: File.exist?(local_gutenberg) ? local_gutenberg : DEFAULT_GUTENBERG_LOCATION } @@ -73,10 +74,13 @@ def gutenberg_pod(config: GUTENBERG_CONFIG) pod 'RNTAztecView', options gutenberg_dependencies(options: options) - elsif options[:tag] - pod 'Gutenberg', podspec: "https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-#{options[:tag]}.podspec" - elsif options[:commit] - pod 'Gutenberg', podspec: "https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-#{options[:commit]}.podspec" + else + id = options[:tag] || options[:commit] + + # Notice there's no period at the end of the message as CocoaPods will add it. + raise 'Neither tag nor commit to use for Gutenberg found' unless id + + pod 'Gutenberg', podspec: "https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-#{id}.podspec" end end From c2c46ccb63baab844b76aff1d1c519f45ef4d696 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Wed, 28 Jun 2023 21:49:48 +1000 Subject: [PATCH 19/48] Simplify `gutenberg_dependencies` with early return Co-authored-by: Tony Li --- Gutenberg/cocoapods_helpers.rb | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Gutenberg/cocoapods_helpers.rb b/Gutenberg/cocoapods_helpers.rb index 89f1f1def197..9057aa12cb88 100644 --- a/Gutenberg/cocoapods_helpers.rb +++ b/Gutenberg/cocoapods_helpers.rb @@ -85,13 +85,12 @@ def gutenberg_pod(config: GUTENBERG_CONFIG) end def gutenberg_dependencies(options:) - if options[:path] - podspec_prefix = options[:path] - elsif options[:tag] || options[:commit] - return # when referencing via a tag or commit, we download pre-built frameworks - else - raise "Unexpected Gutenberg dependencies configuration '#{options}'" - end + # When referencing via a tag or commit, we download pre-built frameworks. + return if options.key?(:tag) || options.key?(:commit) + + podspec_prefix = options[:path] + + raise "Unexpected Gutenberg dependencies configuration '#{options}'" if podspec_prefix.nil? podspec_prefix += '/third-party-podspecs' podspec_extension = 'podspec.json' From 59d7b78e912af3a3cb909598508f60cdec7d7a16 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Mon, 3 Jul 2023 17:03:00 +1000 Subject: [PATCH 20/48] Update Gutenberg local setup to work with React Native 0.71.11 --- Gutenberg/cocoapods_helpers.rb | 79 +++++++++++++++++++--------------- Podfile | 2 + Podfile.lock | 2 +- 3 files changed, 47 insertions(+), 36 deletions(-) diff --git a/Gutenberg/cocoapods_helpers.rb b/Gutenberg/cocoapods_helpers.rb index 9057aa12cb88..d4fac6f5557a 100644 --- a/Gutenberg/cocoapods_helpers.rb +++ b/Gutenberg/cocoapods_helpers.rb @@ -6,40 +6,14 @@ DEFAULT_GUTENBERG_LOCATION = File.join(__dir__, '..', '..', 'gutenberg-mobile') +LOCAL_GUTENBERG_KEY = 'LOCAL_GUTENBERG' + # Note that the pods in this array might seem unused if you look for # `import` statements in this codebase. However, make sure to also check # whether they are used in the gutenberg-mobile and Gutenberg projects. # # See https://github.com/wordpress-mobile/gutenberg-mobile/issues/5025 DEPENDENCIES = %w[ - FBLazyVector - React - ReactCommon - RCTRequired - RCTTypeSafety - React-Core - React-CoreModules - React-RCTActionSheet - React-RCTAnimation - React-RCTBlob - React-RCTImage - React-RCTLinking - React-RCTNetwork - React-RCTSettings - React-RCTText - React-RCTVibration - React-callinvoker - React-cxxreact - React-jsinspector - React-jsi - React-jsiexecutor - React-logger - React-perflogger - React-runtimeexecutor - boost - Yoga - RCT-Folly - glog react-native-safe-area react-native-safe-area-context react-native-video @@ -55,20 +29,19 @@ RNCMaskedView RNCClipboard RNFastImage - React-Codegen - React-bridging + React-jsc ].freeze def gutenberg_pod(config: GUTENBERG_CONFIG) options = config - local_gutenberg_key = 'LOCAL_GUTENBERG' - local_gutenberg = ENV.fetch(local_gutenberg_key, nil) # We check local_gutenberg first because it should take precedence, being an override set by the user. - if local_gutenberg - options = { path: File.exist?(local_gutenberg) ? local_gutenberg : DEFAULT_GUTENBERG_LOCATION } + if should_use_local_gutenberg + options = { path: local_gutenberg_path } + + raise "Could not find Gutenberg pod at #{options[:path]}. You can configure the path using the #{LOCAL_GUTENBERG_KEY} environment variable." unless File.exist?(options[:path]) - raise "Could not find Gutenberg pod at #{options[:path]}. You can configure the path using the #{local_gutenberg_key} environment variable." unless File.exist?(options[:path]) + puts "[Gutenberg] Installing pods using local Gutenberg version from #{local_gutenberg_path}" pod 'Gutenberg', options pod 'RNTAztecView', options @@ -102,3 +75,39 @@ def gutenberg_dependencies(options:) pod pod_name, podspec: "#{podspec_prefix}/#{pod_name}.#{podspec_extension}" end end + +def gutenberg_post_install(installer:) + return unless should_use_local_gutenberg + + raise "[Gutenberg] Could not find local Gutenberg at given path #{local_gutenberg_path}" unless File.exist?(local_gutenberg_path) + + react_native_path = File.join(local_gutenberg_path, 'gutenberg', 'node_modules', 'react-native') + + raise "[Gutenberg] Could not find React Native at given path #{react_native_path}" unless File.exist?(react_native_path) + + require_relative File.join(react_native_path, 'scripts', 'react_native_pods') + + puts '[Gutenberg] Running Gunberg post install hook' + + react_native_post_install(installer, react_native_path) +end + +private + +def should_use_local_gutenberg + value = ENV.fetch(LOCAL_GUTENBERG_KEY, nil) + + return false if value.nil? + + value +end + +def local_gutenberg_path + local_gutenberg = ENV.fetch(LOCAL_GUTENBERG_KEY, nil) + + return nil if local_gutenberg.nil? + + return local_gutenberg if File.exist?(local_gutenberg) + + DEFAULT_GUTENBERG_LOCATION +end diff --git a/Podfile b/Podfile index e3bc85766801..8993bfd97bf2 100644 --- a/Podfile +++ b/Podfile @@ -340,6 +340,8 @@ pre_install do |installer| end post_install do |installer| + gutenberg_post_install(installer: installer) + project_root = File.dirname(__FILE__) ## Convert the 3rd-party license acknowledgements markdown into html for use in the app diff --git a/Podfile.lock b/Podfile.lock index e6b7cf5b02dc..344e1cbb268c 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -288,6 +288,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: ae5b4b813d216d3bf0a148773267fff14bd51d37 -PODFILE CHECKSUM: dd2923ba0655d06a0e85bdf9aa0d38304e8f087e +PODFILE CHECKSUM: e319af03b936262b0933a0c736855b627be12fe1 COCOAPODS: 1.12.1 From d03be586024c9e5003a03a046951e7c948251adc Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Tue, 4 Jul 2023 09:31:13 +1000 Subject: [PATCH 21/48] Add calls to RN hooks when using Gutenberg from local path --- Gutenberg/cocoapods_helpers.rb | 60 +++++++++++++++++++++++++++++----- Podfile | 3 ++ 2 files changed, 55 insertions(+), 8 deletions(-) diff --git a/Gutenberg/cocoapods_helpers.rb b/Gutenberg/cocoapods_helpers.rb index d4fac6f5557a..5d688c2c61bd 100644 --- a/Gutenberg/cocoapods_helpers.rb +++ b/Gutenberg/cocoapods_helpers.rb @@ -43,6 +43,10 @@ def gutenberg_pod(config: GUTENBERG_CONFIG) puts "[Gutenberg] Installing pods using local Gutenberg version from #{local_gutenberg_path}" + react_native_path = require_react_native_helpers!(gutenberg_path: local_gutenberg_path) + + use_react_native! path: react_native_path + pod 'Gutenberg', options pod 'RNTAztecView', options @@ -68,26 +72,50 @@ def gutenberg_dependencies(options:) podspec_prefix += '/third-party-podspecs' podspec_extension = 'podspec.json' - # FBReactNativeSpec needs special treatment because of react-native-codegen code generation - pod 'FBReactNativeSpec', podspec: "#{podspec_prefix}/FBReactNativeSpec/FBReactNativeSpec.#{podspec_extension}" + computed_dependencies = DEPENDENCIES.dup - DEPENDENCIES.each do |pod_name| + # Use a custom RNReanimated version while we coordinate a fix upstream + computed_dependencies.delete('RNReanimated') + pod 'RNReanimated', git: 'https://github.com/wordpress-mobile/react-native-reanimated', branch: 'mokagio/fix-custom-node_modules-bypass-multiple-versions-check-2.17.0' + + computed_dependencies.each do |pod_name| pod pod_name, podspec: "#{podspec_prefix}/#{pod_name}.#{podspec_extension}" end end -def gutenberg_post_install(installer:) +def gutenberg_pre_install return unless should_use_local_gutenberg raise "[Gutenberg] Could not find local Gutenberg at given path #{local_gutenberg_path}" unless File.exist?(local_gutenberg_path) - react_native_path = File.join(local_gutenberg_path, 'gutenberg', 'node_modules', 'react-native') + # This is required to workaround an issue with RNReanimated after upgrading to version 2.17.0 + rn_node_modules = File.join(local_gutenberg_path, 'node_modules') - raise "[Gutenberg] Could not find React Native at given path #{react_native_path}" unless File.exist?(react_native_path) + raise "Could not find node modules at given path #{rn_node_modules}" unless File.exist? rn_node_modules - require_relative File.join(react_native_path, 'scripts', 'react_native_pods') + ENV['REACT_NATIVE_NODE_MODULES_DIR'] = rn_node_modules + + puts "[Gutenberg] Set REACT_NATIVE_NODE_MODULES_DIR env var for RNReanimated to #{rn_node_modules}" +end + +def gutenberg_post_install(installer:) + return unless should_use_local_gutenberg + + raise "[Gutenberg] Could not find local Gutenberg at given path #{local_gutenberg_path}" unless File.exist?(local_gutenberg_path) - puts '[Gutenberg] Running Gunberg post install hook' + react_native_path = require_react_native_helpers!(gutenberg_path: local_gutenberg_path) + + puts "[Gutenberg] Running Gunberg post install hook (RN path: #{react_native_path})" + + # It seems like React Native prepends $PWD to the path internally in the post install hook. + # When using an absolute path, we get this error, notice the duplicated "/Users/gio/Developer/a8c/wpios": + # + # [!] An error occurred while processing the post-install hook of the Podfile. + # + # No such file or directory @ rb_sysopen - /Users/gio/Developer/a8c/wpios/Users/gio/Developer/a8c/wpios/Gutenberg/../../gutenberg-mobile/gutenberg/node_modules/react-native/package.json + # + # To workaround, we make sure the path is relative to Dir.pwd + react_native_path = Pathname.new(react_native_path).relative_path_from(Dir.pwd) react_native_post_install(installer, react_native_path) end @@ -111,3 +139,19 @@ def local_gutenberg_path DEFAULT_GUTENBERG_LOCATION end + +def require_react_native_helpers!(gutenberg_path:) + react_native_path = react_native_path!(gutenberg_path: gutenberg_path) + + require_relative File.join(react_native_path, 'scripts', 'react_native_pods') + + react_native_path +end + +def react_native_path!(gutenberg_path:) + react_native_path = File.join(gutenberg_path, 'gutenberg', 'node_modules', 'react-native') + + raise "[Gutenberg] Could not find React Native at given path #{react_native_path}" unless File.exist?(react_native_path) + + react_native_path +end diff --git a/Podfile b/Podfile index 8993bfd97bf2..9c00ebad16fe 100644 --- a/Podfile +++ b/Podfile @@ -317,6 +317,9 @@ end # A future version of CocoaPods may make this easier to do. See https://github.com/CocoaPods/CocoaPods/issues/7428 shared_targets = ['WordPressFlux'] pre_install do |installer| + # Note that this call is unrelated to the static vs dynamic framework shenanigan below + gutenberg_pre_install + static = [] dynamic = [] installer.pod_targets.each do |pod| From 3fcd1b502ed0279d7269a710cd9d818d95952843 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Tue, 4 Jul 2023 11:44:40 +1000 Subject: [PATCH 22/48] Update build script to run locally without a Gutenberg `App.js` --- Scripts/BuildPhases/CopyGutenbergJS.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Scripts/BuildPhases/CopyGutenbergJS.sh b/Scripts/BuildPhases/CopyGutenbergJS.sh index 816800f83d0b..f8b60d443daf 100755 --- a/Scripts/BuildPhases/CopyGutenbergJS.sh +++ b/Scripts/BuildPhases/CopyGutenbergJS.sh @@ -24,8 +24,12 @@ elif [[ -d $PODS_BUNDLE_ROOT ]]; then cp "$PODS_BUNDLE_ROOT/App.js" "$BUNDLE_FILE" cp -r "$PODS_BUNDLE_ROOT/assets" "$BUNDLE_ASSETS" else - echo "error: Could not find Gutenberg bundle in either XCFramework or Pods." - exit 1 + if [[ "$CONFIGURATION" = *Debug* ]]; then + echo "warning: Could not find Gutenberg bundle in either XCFramework or Pods. But running in Debug configuration so will assume you are working with a local version of Gutenberg." + else + echo "error: Could not find Gutenberg bundle in either XCFramework or Pods." + exit 1 + fi fi if [[ "$CONFIGURATION" = *Debug* && ! "$PLATFORM_NAME" == *simulator ]]; then From b6b8d9cbc139a8c61fbb8d92e8836f7901bd9b69 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Thu, 6 Jul 2023 16:57:52 +0200 Subject: [PATCH 23/48] Shrink inline comment of `gutenberg_post_install` helper --- Gutenberg/cocoapods_helpers.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gutenberg/cocoapods_helpers.rb b/Gutenberg/cocoapods_helpers.rb index 5d688c2c61bd..bb673c6ca789 100644 --- a/Gutenberg/cocoapods_helpers.rb +++ b/Gutenberg/cocoapods_helpers.rb @@ -112,7 +112,7 @@ def gutenberg_post_install(installer:) # # [!] An error occurred while processing the post-install hook of the Podfile. # - # No such file or directory @ rb_sysopen - /Users/gio/Developer/a8c/wpios/Users/gio/Developer/a8c/wpios/Gutenberg/../../gutenberg-mobile/gutenberg/node_modules/react-native/package.json + # No such file or directory @ rb_sysopen - /gutenberg/node_modules/react-native/package.json # # To workaround, we make sure the path is relative to Dir.pwd react_native_path = Pathname.new(react_native_path).relative_path_from(Dir.pwd) From d6dd34e073029140dd5ae95c6e10d142aea7f02a Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Thu, 6 Jul 2023 16:59:01 +0200 Subject: [PATCH 24/48] Update `Podfile.lock` file --- Podfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Podfile.lock b/Podfile.lock index 344e1cbb268c..83f5845af2aa 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -254,7 +254,7 @@ SPEC CHECKSUMS: Gridicons: 17d660b97ce4231d582101b02f8280628b141c9a GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd GTMSessionFetcher: 5595ec75acf5be50814f81e9189490412bad82ba - Gutenberg: cf0107fac4110a45ec3c643dde69b29f647148bb + Gutenberg: e0639aa7b05e5fd745d5a61ffa64d5980a2c3b3f JTAppleCalendar: 932cadea40b1051beab10f67843451d48ba16c99 Kanvas: f932eaed3d3f47aae8aafb6c2d27c968bdd49030 MediaEditor: d08314cfcbfac74361071a306b4bc3a39b3356ae @@ -288,6 +288,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: ae5b4b813d216d3bf0a148773267fff14bd51d37 -PODFILE CHECKSUM: e319af03b936262b0933a0c736855b627be12fe1 +PODFILE CHECKSUM: e12ae26ad8eb60082225f1a23857d10ebfd9feb9 COCOAPODS: 1.12.1 From d81f4661171bcf16053c600302fc862bb0b6b3e4 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Tue, 18 Jul 2023 17:15:59 +1000 Subject: [PATCH 25/48] Add build phase to prevent nested frameworks --- Scripts/BuildPhases/LintNestedFrameworks.sh | 27 +++++++++++++ WordPress/WordPress.xcodeproj/project.pbxproj | 39 +++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100755 Scripts/BuildPhases/LintNestedFrameworks.sh diff --git a/Scripts/BuildPhases/LintNestedFrameworks.sh b/Scripts/BuildPhases/LintNestedFrameworks.sh new file mode 100755 index 000000000000..cbb5137f72df --- /dev/null +++ b/Scripts/BuildPhases/LintNestedFrameworks.sh @@ -0,0 +1,27 @@ +#!/bin/sh -eu + +set pipefail + +# Nested frameworks (i.e. having a Frameworks/ folder inside *.app/Frameworks/.framework) is invalid and will make the build be rejected during TestFlight validation. +# +# See also https://github.com/woocommerce/woocommerce-ios/pull/4226 + +# This script is intended to be used as a Build Phase on the main app target, as the very last build phase (and especially after the "Embed Frameworks" phase) + +NESTED_FMKS_DIRS=$(find "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" -name Frameworks -depth 2) +if [ -z "$NESTED_FMKS_DIRS" ]; then + echo "✅ No nested framework found, you're good to go!" +else + echo "❌ Found nested \`Frameworks\` folder inside frameworks of final bundle." + for fmk_dir in $NESTED_FMKS_DIRS; do + # Extract the name of the parent framework containing the nested ones + parent_fmk=$(basename $(dirname $fmk_dir) .framework) + # Extract the list of frameworks nested inside that parent framework. In the next command: + # * `-depth 1` is to avoid logging cases of "C nested in B itself nested in A" (2+ levels of nesting), since C nested in B will already be logged when looping on fmk_dir=B, so no need to log it during fmk_dir=A too. + # * The `sed` command removes the leading `./` in the paths returned by `find`, then quote the results in backticks for nicer formatting in final message. + # * The `tr` command joins all the lines (= found frameworks) with a `,`. Note that this will result in an extra comma at the end of the list too, but we'll get rid of that in the final message using ${nested_fmks%,} bash substitution. + nested_fmks=$(cd "${fmk_dir}" && find . -name '*.framework' -depth 1 | sed "s:^./\(.*\)$:\`\1\`:" | tr '\n' ',') + echo "error: Found nested frameworks in ${fmk_dir} -- Such a configuration is invalid and will be rejected by TestFlight. Please fix by choosing 'Do Not Embed' for the nested framework(s) ${nested_fmks%,} within the \`${parent_fmk}\` Xcode project which links to them. You might need to use Xcode 12.5 to fix this, due to an Xcode 12.4 bug – see paNNhX-ee-p2" + done + exit 1 +fi diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index da744d7caef0..b395c72c66fd 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -18311,6 +18311,7 @@ 37399571B0D91BBEAE911024 /* [CP] Embed Pods Frameworks */, 920B9A6DAD47189622A86A9C /* [CP] Copy Pods Resources */, E1C5456F219F10E000896227 /* Copy Gutenberg JS */, + 3FF795712A6671DB00F27B17 /* Lint against nested frameworks */, ); buildRules = ( ); @@ -18607,6 +18608,7 @@ FABB264A2602FC2C00C8785C /* [CP] Embed Pods Frameworks */, FABB264B2602FC2C00C8785C /* [CP] Copy Pods Resources */, FABB264C2602FC2C00C8785C /* Copy Gutenberg JS */, + 3FF795732A66730200F27B17 /* Lint against nested frameworks */, ); buildRules = ( ); @@ -20120,6 +20122,43 @@ shellPath = /bin/sh; shellScript = "$SRCROOT/../Scripts/BuildPhases/GenerateCredentials.sh\n"; }; + 3FF795712A6671DB00F27B17 /* Lint against nested frameworks */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Lint against nested frameworks"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$SRCROOT/../Scripts/BuildPhases/LintNestedFrameworks.sh\"\n"; + }; + 3FF795732A66730200F27B17 /* Lint against nested frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Lint against nested frameworks"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$SRCROOT/../Scripts/BuildPhases/LintNestedFrameworks.sh\"\n"; + }; 49AE9271B82C7D67430387FA /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; From f8759684b0aa10c0ef389e16e40e3551e23a6bb2 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Wed, 19 Jul 2023 10:27:16 +1000 Subject: [PATCH 26/48] Remove outdated Xcode 12.5 mention from nested frameworks linter --- Scripts/BuildPhases/LintNestedFrameworks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Scripts/BuildPhases/LintNestedFrameworks.sh b/Scripts/BuildPhases/LintNestedFrameworks.sh index cbb5137f72df..c0a1dfdb3af6 100755 --- a/Scripts/BuildPhases/LintNestedFrameworks.sh +++ b/Scripts/BuildPhases/LintNestedFrameworks.sh @@ -21,7 +21,7 @@ else # * The `sed` command removes the leading `./` in the paths returned by `find`, then quote the results in backticks for nicer formatting in final message. # * The `tr` command joins all the lines (= found frameworks) with a `,`. Note that this will result in an extra comma at the end of the list too, but we'll get rid of that in the final message using ${nested_fmks%,} bash substitution. nested_fmks=$(cd "${fmk_dir}" && find . -name '*.framework' -depth 1 | sed "s:^./\(.*\)$:\`\1\`:" | tr '\n' ',') - echo "error: Found nested frameworks in ${fmk_dir} -- Such a configuration is invalid and will be rejected by TestFlight. Please fix by choosing 'Do Not Embed' for the nested framework(s) ${nested_fmks%,} within the \`${parent_fmk}\` Xcode project which links to them. You might need to use Xcode 12.5 to fix this, due to an Xcode 12.4 bug – see paNNhX-ee-p2" + echo "error: Found nested frameworks in ${fmk_dir} -- Such a configuration is invalid and will be rejected by TestFlight. Please fix by choosing 'Do Not Embed' for the nested framework(s) ${nested_fmks%,} within the \`${parent_fmk}\` Xcode project which links to them." done exit 1 fi From 381d49aa1a53fff88bf89fb7210b26d70cf4342f Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Wed, 5 Jul 2023 17:17:56 +0200 Subject: [PATCH 27/48] Update RNReanimated pod source to `wp-fork-2.17.0` --- Gutenberg/cocoapods_helpers.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gutenberg/cocoapods_helpers.rb b/Gutenberg/cocoapods_helpers.rb index bb673c6ca789..ff1b3c3020a8 100644 --- a/Gutenberg/cocoapods_helpers.rb +++ b/Gutenberg/cocoapods_helpers.rb @@ -76,7 +76,7 @@ def gutenberg_dependencies(options:) # Use a custom RNReanimated version while we coordinate a fix upstream computed_dependencies.delete('RNReanimated') - pod 'RNReanimated', git: 'https://github.com/wordpress-mobile/react-native-reanimated', branch: 'mokagio/fix-custom-node_modules-bypass-multiple-versions-check-2.17.0' + pod 'RNReanimated', git: 'https://github.com/wordpress-mobile/react-native-reanimated', branch: 'wp-fork-2.17.0' computed_dependencies.each do |pod_name| pod pod_name, podspec: "#{podspec_prefix}/#{pod_name}.#{podspec_extension}" From ebd4cca0971e0ec3261b19f38da380a569567614 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Thu, 6 Jul 2023 17:31:15 +0200 Subject: [PATCH 28/48] Add `gutenberg_local_pod` helper --- Gutenberg/cocoapods_helpers.rb | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/Gutenberg/cocoapods_helpers.rb b/Gutenberg/cocoapods_helpers.rb index ff1b3c3020a8..b494ef57aa2a 100644 --- a/Gutenberg/cocoapods_helpers.rb +++ b/Gutenberg/cocoapods_helpers.rb @@ -33,32 +33,34 @@ ].freeze def gutenberg_pod(config: GUTENBERG_CONFIG) + # We check local_gutenberg first because it should take precedence, being an override set by the user. + return gutenberg_local_pod if should_use_local_gutenberg + options = config - # We check local_gutenberg first because it should take precedence, being an override set by the user. - if should_use_local_gutenberg - options = { path: local_gutenberg_path } + id = options[:tag] || options[:commit] - raise "Could not find Gutenberg pod at #{options[:path]}. You can configure the path using the #{LOCAL_GUTENBERG_KEY} environment variable." unless File.exist?(options[:path]) + # Notice there's no period at the end of the message as CocoaPods will add it. + raise 'Neither tag nor commit to use for Gutenberg found' unless id - puts "[Gutenberg] Installing pods using local Gutenberg version from #{local_gutenberg_path}" + pod 'Gutenberg', podspec: "https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-#{id}.podspec" +end - react_native_path = require_react_native_helpers!(gutenberg_path: local_gutenberg_path) +def gutenberg_local_pod + options = { path: local_gutenberg_path } - use_react_native! path: react_native_path + raise "Could not find Gutenberg pod at #{options[:path]}. You can configure the path using the #{LOCAL_GUTENBERG_KEY} environment variable." unless File.exist?(options[:path]) - pod 'Gutenberg', options - pod 'RNTAztecView', options + puts "[Gutenberg] Installing pods using local Gutenberg version from #{local_gutenberg_path}" - gutenberg_dependencies(options: options) - else - id = options[:tag] || options[:commit] + react_native_path = require_react_native_helpers!(gutenberg_path: local_gutenberg_path) - # Notice there's no period at the end of the message as CocoaPods will add it. - raise 'Neither tag nor commit to use for Gutenberg found' unless id + use_react_native! path: react_native_path - pod 'Gutenberg', podspec: "https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-#{id}.podspec" - end + pod 'Gutenberg', options + pod 'RNTAztecView', options + + gutenberg_dependencies(options: options) end def gutenberg_dependencies(options:) From 2b1138f0e853f558365e88d7d56de2586ca06133 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Thu, 6 Jul 2023 18:30:19 +0200 Subject: [PATCH 29/48] Tweak pod dependencies based on the React Native version --- Gutenberg/cocoapods_helpers.rb | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/Gutenberg/cocoapods_helpers.rb b/Gutenberg/cocoapods_helpers.rb index b494ef57aa2a..524c76071003 100644 --- a/Gutenberg/cocoapods_helpers.rb +++ b/Gutenberg/cocoapods_helpers.rb @@ -29,7 +29,6 @@ RNCMaskedView RNCClipboard RNFastImage - React-jsc ].freeze def gutenberg_pod(config: GUTENBERG_CONFIG) @@ -68,6 +67,7 @@ def gutenberg_dependencies(options:) return if options.key?(:tag) || options.key?(:commit) podspec_prefix = options[:path] + gutenberg_path = options[:path] raise "Unexpected Gutenberg dependencies configuration '#{options}'" if podspec_prefix.nil? @@ -76,9 +76,17 @@ def gutenberg_dependencies(options:) computed_dependencies = DEPENDENCIES.dup - # Use a custom RNReanimated version while we coordinate a fix upstream - computed_dependencies.delete('RNReanimated') - pod 'RNReanimated', git: 'https://github.com/wordpress-mobile/react-native-reanimated', branch: 'wp-fork-2.17.0' + react_native_version = react_native_version!(gutenberg_path: gutenberg_path) + #  Use different dependencies in RN 0.71+ + if react_native_version[1] >= 71 + # RNReanimated needs React-jsc + # Reference: https://github.com/WordPress/gutenberg/pull/51386/commits/9538f8eaf73dfacef17382e1ab7feda40231061f + computed_dependencies.push('React-jsc') + + # Use a custom RNReanimated version while we coordinate a fix upstream + computed_dependencies.delete('RNReanimated') + pod 'RNReanimated', git: 'https://github.com/wordpress-mobile/react-native-reanimated', branch: 'wp-fork-2.17.0' + end computed_dependencies.each do |pod_name| pod pod_name, podspec: "#{podspec_prefix}/#{pod_name}.#{podspec_extension}" @@ -157,3 +165,14 @@ def react_native_path!(gutenberg_path:) react_native_path end + +def react_native_version!(gutenberg_path:) + react_native_path = react_native_path!(gutenberg_path: gutenberg_path) + package_json_path = File.join(react_native_path, 'package.json') + package_json_content = File.read(package_json_path) + package_version_match = package_json_content.match(/"version":\s*"(.*?)"/) + + raise "[Gutenberg] Could not find React native version at #{react_native_path}" unless package_version_match + + package_version_match[1].split('.').map(&:to_i) +end From 65e54547335c228d2b35a906a7002bab763c4581 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Fri, 7 Jul 2023 19:12:00 +0200 Subject: [PATCH 30/48] Merge and fix pre-install logic into `gutenberg_dependencies` block The pre-install logic is only needed when using local Gutenberg installation. Hence, we can merge it into the `gutenberg_dependencies`, which is only used in that case. Additionally, the React Native modules path has been fixed to point to the local installation. Fix empty line after guard clause lint issue --- Gutenberg/cocoapods_helpers.rb | 23 ++++++++--------------- Podfile | 3 --- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/Gutenberg/cocoapods_helpers.rb b/Gutenberg/cocoapods_helpers.rb index 524c76071003..06428bbd2e19 100644 --- a/Gutenberg/cocoapods_helpers.rb +++ b/Gutenberg/cocoapods_helpers.rb @@ -85,6 +85,14 @@ def gutenberg_dependencies(options:) # Use a custom RNReanimated version while we coordinate a fix upstream computed_dependencies.delete('RNReanimated') + + # This is required to workaround an issue with RNReanimated after upgrading to version 2.17.0 + rn_node_modules = File.join(gutenberg_path, '..', 'gutenberg', 'node_modules') + raise "Could not find node modules at given path #{rn_node_modules}" unless File.exist? rn_node_modules + + ENV['REACT_NATIVE_NODE_MODULES_DIR'] = rn_node_modules + puts "[Gutenberg] Set REACT_NATIVE_NODE_MODULES_DIR env var for RNReanimated to #{rn_node_modules}" + pod 'RNReanimated', git: 'https://github.com/wordpress-mobile/react-native-reanimated', branch: 'wp-fork-2.17.0' end @@ -93,21 +101,6 @@ def gutenberg_dependencies(options:) end end -def gutenberg_pre_install - return unless should_use_local_gutenberg - - raise "[Gutenberg] Could not find local Gutenberg at given path #{local_gutenberg_path}" unless File.exist?(local_gutenberg_path) - - # This is required to workaround an issue with RNReanimated after upgrading to version 2.17.0 - rn_node_modules = File.join(local_gutenberg_path, 'node_modules') - - raise "Could not find node modules at given path #{rn_node_modules}" unless File.exist? rn_node_modules - - ENV['REACT_NATIVE_NODE_MODULES_DIR'] = rn_node_modules - - puts "[Gutenberg] Set REACT_NATIVE_NODE_MODULES_DIR env var for RNReanimated to #{rn_node_modules}" -end - def gutenberg_post_install(installer:) return unless should_use_local_gutenberg diff --git a/Podfile b/Podfile index f2e5d35e9c0c..d0faa34c292c 100644 --- a/Podfile +++ b/Podfile @@ -317,9 +317,6 @@ end # A future version of CocoaPods may make this easier to do. See https://github.com/CocoaPods/CocoaPods/issues/7428 shared_targets = ['WordPressFlux'] pre_install do |installer| - # Note that this call is unrelated to the static vs dynamic framework shenanigan below - gutenberg_pre_install - static = [] dynamic = [] installer.pod_targets.each do |pod| From 2d40a68a5f64179520a4b03116d1a3a6edae8526 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Fri, 7 Jul 2023 19:17:19 +0200 Subject: [PATCH 31/48] Fix typo in post install hook --- Gutenberg/cocoapods_helpers.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gutenberg/cocoapods_helpers.rb b/Gutenberg/cocoapods_helpers.rb index 06428bbd2e19..58c262751e9a 100644 --- a/Gutenberg/cocoapods_helpers.rb +++ b/Gutenberg/cocoapods_helpers.rb @@ -108,7 +108,7 @@ def gutenberg_post_install(installer:) react_native_path = require_react_native_helpers!(gutenberg_path: local_gutenberg_path) - puts "[Gutenberg] Running Gunberg post install hook (RN path: #{react_native_path})" + puts "[Gutenberg] Running Gutenberg post install hook (RN path: #{react_native_path})" # It seems like React Native prepends $PWD to the path internally in the post install hook. # When using an absolute path, we get this error, notice the duplicated "/Users/gio/Developer/a8c/wpios": From 598b0382fc59091b7b04b2ab55f79564e982b8cb Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Mon, 10 Jul 2023 17:39:20 +0200 Subject: [PATCH 32/48] Move RNReanimated dependency workaround to a separate function --- Gutenberg/cocoapods_helpers.rb | 38 ++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/Gutenberg/cocoapods_helpers.rb b/Gutenberg/cocoapods_helpers.rb index 58c262751e9a..75932db94bfc 100644 --- a/Gutenberg/cocoapods_helpers.rb +++ b/Gutenberg/cocoapods_helpers.rb @@ -77,30 +77,32 @@ def gutenberg_dependencies(options:) computed_dependencies = DEPENDENCIES.dup react_native_version = react_native_version!(gutenberg_path: gutenberg_path) - #  Use different dependencies in RN 0.71+ - if react_native_version[1] >= 71 - # RNReanimated needs React-jsc - # Reference: https://github.com/WordPress/gutenberg/pull/51386/commits/9538f8eaf73dfacef17382e1ab7feda40231061f - computed_dependencies.push('React-jsc') - - # Use a custom RNReanimated version while we coordinate a fix upstream - computed_dependencies.delete('RNReanimated') - - # This is required to workaround an issue with RNReanimated after upgrading to version 2.17.0 - rn_node_modules = File.join(gutenberg_path, '..', 'gutenberg', 'node_modules') - raise "Could not find node modules at given path #{rn_node_modules}" unless File.exist? rn_node_modules - - ENV['REACT_NATIVE_NODE_MODULES_DIR'] = rn_node_modules - puts "[Gutenberg] Set REACT_NATIVE_NODE_MODULES_DIR env var for RNReanimated to #{rn_node_modules}" - - pod 'RNReanimated', git: 'https://github.com/wordpress-mobile/react-native-reanimated', branch: 'wp-fork-2.17.0' - end + # We need to apply a workaround for the RNReanimated library when using React Native 0.71+. + apply_rnreanimated_workaround!(dependencies: computed_dependencies, gutenberg_path: gutenberg_path) unless react_native_version[1] < 71 computed_dependencies.each do |pod_name| pod pod_name, podspec: "#{podspec_prefix}/#{pod_name}.#{podspec_extension}" end end +def apply_rnreanimated_workaround!(dependencies:, gutenberg_path:) + # RNReanimated needs React-jsc + # Reference: https://github.com/WordPress/gutenberg/pull/51386/commits/9538f8eaf73dfacef17382e1ab7feda40231061f + dependencies.push('React-jsc') + + # Use a custom RNReanimated version while we coordinate a fix upstream + dependencies.delete('RNReanimated') + + # This is required to workaround an issue with RNReanimated after upgrading to version 2.17.0 + rn_node_modules = File.join(gutenberg_path, '..', 'gutenberg', 'node_modules') + raise "Could not find node modules at given path #{rn_node_modules}" unless File.exist? rn_node_modules + + ENV['REACT_NATIVE_NODE_MODULES_DIR'] = rn_node_modules + puts "[Gutenberg] Set REACT_NATIVE_NODE_MODULES_DIR env var for RNReanimated to #{rn_node_modules}" + + pod 'RNReanimated', git: 'https://github.com/wordpress-mobile/react-native-reanimated', branch: 'wp-fork-2.17.0' +end + def gutenberg_post_install(installer:) return unless should_use_local_gutenberg From 341f6175dfa15c30ac5ca10d6283aaef1717de53 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Wed, 19 Jul 2023 16:19:28 +0200 Subject: [PATCH 33/48] Fetch React Native version using JSON lib --- Gutenberg/cocoapods_helpers.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Gutenberg/cocoapods_helpers.rb b/Gutenberg/cocoapods_helpers.rb index 75932db94bfc..856305a41f43 100644 --- a/Gutenberg/cocoapods_helpers.rb +++ b/Gutenberg/cocoapods_helpers.rb @@ -2,6 +2,7 @@ # Helpers and configurations for integrating Gutenberg in Jetpack and WordPress via CocoaPods. +require 'json' require_relative './version' DEFAULT_GUTENBERG_LOCATION = File.join(__dir__, '..', '..', 'gutenberg-mobile') @@ -165,9 +166,9 @@ def react_native_version!(gutenberg_path:) react_native_path = react_native_path!(gutenberg_path: gutenberg_path) package_json_path = File.join(react_native_path, 'package.json') package_json_content = File.read(package_json_path) - package_version_match = package_json_content.match(/"version":\s*"(.*?)"/) + package_json_version = JSON.parse(package_json_content)['version'] - raise "[Gutenberg] Could not find React native version at #{react_native_path}" unless package_version_match + raise "[Gutenberg] Could not find React native version at #{react_native_path}" unless package_json_version - package_version_match[1].split('.').map(&:to_i) + package_json_version.split('.').map(&:to_i) end From 551968eda1a1e1ad3c47ae7a9d47f104d6bdae67 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Wed, 19 Jul 2023 16:21:01 +0200 Subject: [PATCH 34/48] Update Gutenberg Mobile ref to use workaround for Hermes framework --- Gutenberg/version.rb | 4 ++-- Podfile.lock | 10 +++++----- WordPress/WordPress.xcodeproj/project.pbxproj | 6 ++++++ 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Gutenberg/version.rb b/Gutenberg/version.rb index 371376554142..b4a0c8c4394e 100644 --- a/Gutenberg/version.rb +++ b/Gutenberg/version.rb @@ -11,8 +11,8 @@ # # LOCAL_GUTENBERG=../my-gutenberg-fork bundle exec pod install GUTENBERG_CONFIG = { - # commit: '' - tag: 'v1.100.0-alpha1' + commit: 'd2eab790e3c4333a059f920ce6c4ced5b9c11112' + # tag: 'v1.100.0-alpha1' } GITHUB_ORG = 'wordpress-mobile' diff --git a/Podfile.lock b/Podfile.lock index c30bb71e0981..448c3625c4c8 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -40,7 +40,7 @@ PODS: - AppAuth/Core (~> 1.6) - GTMSessionFetcher/Core (< 3.0, >= 1.5) - GTMSessionFetcher/Core (1.7.2) - - Gutenberg (1.99.0) + - Gutenberg (1.99.1) - JTAppleCalendar (8.0.3) - Kanvas (1.4.4) - MediaEditor (1.2.2): @@ -150,7 +150,7 @@ DEPENDENCIES: - FSInteractiveMap (from `https://github.com/wordpress-mobile/FSInteractiveMap.git`, tag `0.2.0`) - Gifu (= 3.2.0) - Gridicons (~> 1.1.0) - - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.100.0-alpha1.podspec`) + - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-d2eab790e3c4333a059f920ce6c4ced5b9c11112.podspec`) - JTAppleCalendar (~> 8.0.2) - Kanvas (~> 1.4.4) - MediaEditor (>= 1.2.2, ~> 1.2) @@ -227,7 +227,7 @@ EXTERNAL SOURCES: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 Gutenberg: - :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.100.0-alpha1.podspec + :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-d2eab790e3c4333a059f920ce6c4ced5b9c11112.podspec CHECKOUT OPTIONS: FSInteractiveMap: @@ -254,7 +254,7 @@ SPEC CHECKSUMS: Gridicons: 17d660b97ce4231d582101b02f8280628b141c9a GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd GTMSessionFetcher: 5595ec75acf5be50814f81e9189490412bad82ba - Gutenberg: c570bf8955cbe174af06bec982811f9483bbe74f + Gutenberg: 2e88cc1ba60ff2c46dffed6d94aaf3758cbfc646 JTAppleCalendar: 932cadea40b1051beab10f67843451d48ba16c99 Kanvas: f932eaed3d3f47aae8aafb6c2d27c968bdd49030 MediaEditor: d08314cfcbfac74361071a306b4bc3a39b3356ae @@ -288,6 +288,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: ae5b4b813d216d3bf0a148773267fff14bd51d37 -PODFILE CHECKSUM: 3e728a64a014f4eb4d75b54d470f9ee4b66e26d8 +PODFILE CHECKSUM: b995ca3ba695e70fd1f2f728800a419cf418f6ec COCOAPODS: 1.12.1 diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index 8e5c46a2ad67..701a17d89f38 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -20162,6 +20162,7 @@ "${BUILT_PRODUCTS_DIR}/Sentry/Sentry.framework", "${BUILT_PRODUCTS_DIR}/SentryPrivate/SentryPrivate.framework", "${PODS_XCFRAMEWORKS_BUILD_DIR}/Gutenberg/Gutenberg.framework/Gutenberg", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/Gutenberg/hermes.framework/hermes", "${PODS_XCFRAMEWORKS_BUILD_DIR}/ZendeskCommonUISDK/CommonUISDK.framework/CommonUISDK", "${PODS_XCFRAMEWORKS_BUILD_DIR}/ZendeskCoreSDK/ZendeskCoreSDK.framework/ZendeskCoreSDK", "${PODS_XCFRAMEWORKS_BUILD_DIR}/ZendeskMessagingAPISDK/MessagingAPI.framework/MessagingAPI", @@ -20175,6 +20176,7 @@ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sentry.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SentryPrivate.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Gutenberg.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CommonUISDK.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZendeskCoreSDK.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MessagingAPI.framework", @@ -20238,10 +20240,12 @@ inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-WordPressTest/Pods-WordPressTest-frameworks.sh", "${PODS_XCFRAMEWORKS_BUILD_DIR}/Gutenberg/Gutenberg.framework/Gutenberg", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/Gutenberg/hermes.framework/hermes", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Gutenberg.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -20765,6 +20769,7 @@ "${BUILT_PRODUCTS_DIR}/Sentry/Sentry.framework", "${BUILT_PRODUCTS_DIR}/SentryPrivate/SentryPrivate.framework", "${PODS_XCFRAMEWORKS_BUILD_DIR}/Gutenberg/Gutenberg.framework/Gutenberg", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/Gutenberg/hermes.framework/hermes", "${PODS_XCFRAMEWORKS_BUILD_DIR}/ZendeskCommonUISDK/CommonUISDK.framework/CommonUISDK", "${PODS_XCFRAMEWORKS_BUILD_DIR}/ZendeskCoreSDK/ZendeskCoreSDK.framework/ZendeskCoreSDK", "${PODS_XCFRAMEWORKS_BUILD_DIR}/ZendeskMessagingAPISDK/MessagingAPI.framework/MessagingAPI", @@ -20778,6 +20783,7 @@ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sentry.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SentryPrivate.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Gutenberg.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CommonUISDK.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZendeskCoreSDK.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MessagingAPI.framework", From 723f8ed0354db6291fac1834c5f8e9eca8161630 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Thu, 20 Jul 2023 09:47:37 +1000 Subject: [PATCH 35/48] Reintroduce link to internal doc with "Do Not Embed" explanation Co-authored-by: Olivier Halligon --- Scripts/BuildPhases/LintNestedFrameworks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Scripts/BuildPhases/LintNestedFrameworks.sh b/Scripts/BuildPhases/LintNestedFrameworks.sh index c0a1dfdb3af6..e7a42541664b 100755 --- a/Scripts/BuildPhases/LintNestedFrameworks.sh +++ b/Scripts/BuildPhases/LintNestedFrameworks.sh @@ -21,7 +21,7 @@ else # * The `sed` command removes the leading `./` in the paths returned by `find`, then quote the results in backticks for nicer formatting in final message. # * The `tr` command joins all the lines (= found frameworks) with a `,`. Note that this will result in an extra comma at the end of the list too, but we'll get rid of that in the final message using ${nested_fmks%,} bash substitution. nested_fmks=$(cd "${fmk_dir}" && find . -name '*.framework' -depth 1 | sed "s:^./\(.*\)$:\`\1\`:" | tr '\n' ',') - echo "error: Found nested frameworks in ${fmk_dir} -- Such a configuration is invalid and will be rejected by TestFlight. Please fix by choosing 'Do Not Embed' for the nested framework(s) ${nested_fmks%,} within the \`${parent_fmk}\` Xcode project which links to them." + echo "error: Found nested frameworks in ${fmk_dir} -- Such a configuration is invalid and will be rejected by TestFlight. Please fix by choosing 'Do Not Embed' for the nested framework(s) ${nested_fmks%,} within the \`${parent_fmk}\` Xcode project which links to them. See paNNhX-ee-p2." done exit 1 fi From 9ceb947031a973ec53b3adae8a6cb8db3c5831dd Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Wed, 19 Jul 2023 10:31:40 +1000 Subject: [PATCH 36/48] Use CI toolkit version 2.18.1 for better failure annotations --- .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 3e11fb963796..405b5c32eae3 100644 --- a/.buildkite/cache-builder.yml +++ b/.buildkite/cache-builder.yml @@ -7,7 +7,7 @@ common_params: # Common plugin settings to use with the `plugins` key. - &common_plugins - - automattic/a8c-ci-toolkit#2.17.0 + - automattic/a8c-ci-toolkit#2.18.1 - automattic/git-s3-cache#1.1.4: bucket: "a8c-repo-mirrors" repo: "automattic/wordpress-ios/" diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 2db9e6d19145..ac9e016e4030 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -2,7 +2,7 @@ common_params: # Common plugin settings to use with the `plugins` key. - &common_plugins - - automattic/a8c-ci-toolkit#2.17.0 + - automattic/a8c-ci-toolkit#2.18.1 - automattic/git-s3-cache#1.1.4: bucket: "a8c-repo-mirrors" repo: "automattic/wordpress-ios/" diff --git a/.buildkite/release-builds.yml b/.buildkite/release-builds.yml index 1003df4508be..53447e466cdc 100644 --- a/.buildkite/release-builds.yml +++ b/.buildkite/release-builds.yml @@ -4,7 +4,7 @@ common_params: # Common plugin settings to use with the `plugins` key. - &common_plugins - - automattic/a8c-ci-toolkit#2.17.0 + - automattic/a8c-ci-toolkit#2.18.1 - automattic/git-s3-cache#1.1.4: bucket: "a8c-repo-mirrors" repo: "automattic/wordpress-ios/" From 45308328f9edd1433c8a27cd5db50dd2773cd508 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Wed, 19 Jul 2023 14:18:04 +1000 Subject: [PATCH 37/48] Add workaround for editor UI tests failing with keyboard not available --- .../Screens/Editor/BlockEditorScreen.swift | 46 +++++++++++++++++-- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift b/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift index b0272f6fe174..bfe10257977b 100644 --- a/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift +++ b/WordPress/UITestsFoundation/Screens/Editor/BlockEditorScreen.swift @@ -57,9 +57,7 @@ public class BlockEditorScreen: ScreenObject { public func enterTextInTitle(text: String) -> BlockEditorScreen { let titleView = app.otherElements["Post title. Empty"].firstMatch // Uses a localized string XCTAssert(titleView.waitForExistence(timeout: 3), "Title View does not exist!") - - titleView.tap() - titleView.typeText(text) + type(text: text, in: titleView) return self } @@ -72,7 +70,7 @@ public class BlockEditorScreen: ScreenObject { addBlock("Paragraph block") let paragraphView = app.otherElements["Paragraph Block. Row 1. Empty"].textViews.element(boundBy: 0) - paragraphView.typeText(text) + type(text: text, in: paragraphView) return self } @@ -368,4 +366,44 @@ public class BlockEditorScreen: ScreenObject { editorCloseButton.coordinate(withNormalizedOffset: CGVector(dx: 0, dy: 0)).tap() return try BlockEditorScreen() } + + // This could be moved as an XCUIApplication method via an extension if needed elsewhere. + private func type(text: String, in element: XCUIElement) { + // A simple implementation here would be: + // + // element.tap() + // element.typeText(text) + // + // But as of a recent (but not pinpointed at the time of writing) Gutenberg update, that is not enough. + // The test would fail with: Neither element nor any descendant has keyboard focus. + // (E.g.: https://buildkite.com/automattic/wordpress-ios/builds/15598) + // + // The following is a convoluted but seemingly robust approach that bypasses the keyboard by using the pasteboard instead. + UIPasteboard.general.string = text + + // Safety check + XCTAssertTrue(element.waitForExistence(timeout: 1)) + + element.doubleTap() + + let pasteButton = app.menuItems["Paste"] + + if pasteButton.waitForExistence(timeout: 1) == false { + // Drill in hierarchy looking for it + var found = false + element.descendants(matching: .any).enumerated().forEach { e in + guard found == false else { return } + + e.element.firstMatch.doubleTap() + + if pasteButton.waitForExistence(timeout: 1) { + found = true + } + } + } + + XCTAssertTrue(pasteButton.exists, "Could not find menu item paste button.") + + pasteButton.tap() + } } From a4fe6e88f27a8c8681df2d975121998df7cfdf9a Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Thu, 20 Jul 2023 18:57:24 +0200 Subject: [PATCH 38/48] Update Gutenberg Mobile ref --- Gutenberg/version.rb | 2 +- Podfile.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Gutenberg/version.rb b/Gutenberg/version.rb index b4a0c8c4394e..cb1f3c5e3b0e 100644 --- a/Gutenberg/version.rb +++ b/Gutenberg/version.rb @@ -11,7 +11,7 @@ # # LOCAL_GUTENBERG=../my-gutenberg-fork bundle exec pod install GUTENBERG_CONFIG = { - commit: 'd2eab790e3c4333a059f920ce6c4ced5b9c11112' + commit: 'f54468c6dc1be7055dbe10594a43568bbd13a813' # tag: 'v1.100.0-alpha1' } diff --git a/Podfile.lock b/Podfile.lock index 448c3625c4c8..ca628511f580 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -150,7 +150,7 @@ DEPENDENCIES: - FSInteractiveMap (from `https://github.com/wordpress-mobile/FSInteractiveMap.git`, tag `0.2.0`) - Gifu (= 3.2.0) - Gridicons (~> 1.1.0) - - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-d2eab790e3c4333a059f920ce6c4ced5b9c11112.podspec`) + - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-f54468c6dc1be7055dbe10594a43568bbd13a813.podspec`) - JTAppleCalendar (~> 8.0.2) - Kanvas (~> 1.4.4) - MediaEditor (>= 1.2.2, ~> 1.2) @@ -227,7 +227,7 @@ EXTERNAL SOURCES: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 Gutenberg: - :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-d2eab790e3c4333a059f920ce6c4ced5b9c11112.podspec + :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-f54468c6dc1be7055dbe10594a43568bbd13a813.podspec CHECKOUT OPTIONS: FSInteractiveMap: @@ -254,7 +254,7 @@ SPEC CHECKSUMS: Gridicons: 17d660b97ce4231d582101b02f8280628b141c9a GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd GTMSessionFetcher: 5595ec75acf5be50814f81e9189490412bad82ba - Gutenberg: 2e88cc1ba60ff2c46dffed6d94aaf3758cbfc646 + Gutenberg: da6f3c2bca97f3bf4b97d60176b1477972b3898b JTAppleCalendar: 932cadea40b1051beab10f67843451d48ba16c99 Kanvas: f932eaed3d3f47aae8aafb6c2d27c968bdd49030 MediaEditor: d08314cfcbfac74361071a306b4bc3a39b3356ae From d7cf5c32767b0490eea5319e1f429ba485d43bb2 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Thu, 20 Jul 2023 18:59:23 +0200 Subject: [PATCH 39/48] Update release notes --- RELEASE-NOTES.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 47d2a19fce9f..2e423928dfea 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -6,6 +6,7 @@ * [*] [internal] Update calls to use UserDefaults singleton. [#21088] * [*] Fix memory leaks in setting up Jetpack connection. [#21052] * [*] Fix a memory leak caused by the theme customization web view. [#21051] +* [**] [internal] Upgrade React Native to 0.71.11 [#20956] 22.8 ----- From c992bcb76da42b26407b64a67f3bbc2ac37891a0 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Fri, 21 Jul 2023 13:34:41 +0200 Subject: [PATCH 40/48] Remove adding `React-jsc` Pod --- Gutenberg/cocoapods_helpers.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Gutenberg/cocoapods_helpers.rb b/Gutenberg/cocoapods_helpers.rb index 856305a41f43..cb556fec2bf7 100644 --- a/Gutenberg/cocoapods_helpers.rb +++ b/Gutenberg/cocoapods_helpers.rb @@ -87,10 +87,6 @@ def gutenberg_dependencies(options:) end def apply_rnreanimated_workaround!(dependencies:, gutenberg_path:) - # RNReanimated needs React-jsc - # Reference: https://github.com/WordPress/gutenberg/pull/51386/commits/9538f8eaf73dfacef17382e1ab7feda40231061f - dependencies.push('React-jsc') - # Use a custom RNReanimated version while we coordinate a fix upstream dependencies.delete('RNReanimated') From 7e11b1e1a895173a05197dce99d6bbffdf43908f Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Fri, 21 Jul 2023 13:57:54 +0200 Subject: [PATCH 41/48] Remove inline comment about error explanation --- Gutenberg/cocoapods_helpers.rb | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Gutenberg/cocoapods_helpers.rb b/Gutenberg/cocoapods_helpers.rb index cb556fec2bf7..3000ede9f2c6 100644 --- a/Gutenberg/cocoapods_helpers.rb +++ b/Gutenberg/cocoapods_helpers.rb @@ -110,12 +110,6 @@ def gutenberg_post_install(installer:) puts "[Gutenberg] Running Gutenberg post install hook (RN path: #{react_native_path})" # It seems like React Native prepends $PWD to the path internally in the post install hook. - # When using an absolute path, we get this error, notice the duplicated "/Users/gio/Developer/a8c/wpios": - # - # [!] An error occurred while processing the post-install hook of the Podfile. - # - # No such file or directory @ rb_sysopen - /gutenberg/node_modules/react-native/package.json - # # To workaround, we make sure the path is relative to Dir.pwd react_native_path = Pathname.new(react_native_path).relative_path_from(Dir.pwd) From 6ce7fdc781b25cd0b2c844fdb5a87c99caf6881b Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Fri, 21 Jul 2023 15:45:59 +0200 Subject: [PATCH 42/48] Update Gutenberg Mobile ref --- Gutenberg/version.rb | 2 +- Podfile.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Gutenberg/version.rb b/Gutenberg/version.rb index cb1f3c5e3b0e..edb39bc5e4c1 100644 --- a/Gutenberg/version.rb +++ b/Gutenberg/version.rb @@ -11,7 +11,7 @@ # # LOCAL_GUTENBERG=../my-gutenberg-fork bundle exec pod install GUTENBERG_CONFIG = { - commit: 'f54468c6dc1be7055dbe10594a43568bbd13a813' + commit: '77f2c68803c6b069c91932206b38e6f07da58570' # tag: 'v1.100.0-alpha1' } diff --git a/Podfile.lock b/Podfile.lock index ca628511f580..be420d20877b 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -150,7 +150,7 @@ DEPENDENCIES: - FSInteractiveMap (from `https://github.com/wordpress-mobile/FSInteractiveMap.git`, tag `0.2.0`) - Gifu (= 3.2.0) - Gridicons (~> 1.1.0) - - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-f54468c6dc1be7055dbe10594a43568bbd13a813.podspec`) + - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-77f2c68803c6b069c91932206b38e6f07da58570.podspec`) - JTAppleCalendar (~> 8.0.2) - Kanvas (~> 1.4.4) - MediaEditor (>= 1.2.2, ~> 1.2) @@ -227,7 +227,7 @@ EXTERNAL SOURCES: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 Gutenberg: - :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-f54468c6dc1be7055dbe10594a43568bbd13a813.podspec + :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-77f2c68803c6b069c91932206b38e6f07da58570.podspec CHECKOUT OPTIONS: FSInteractiveMap: @@ -254,7 +254,7 @@ SPEC CHECKSUMS: Gridicons: 17d660b97ce4231d582101b02f8280628b141c9a GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd GTMSessionFetcher: 5595ec75acf5be50814f81e9189490412bad82ba - Gutenberg: da6f3c2bca97f3bf4b97d60176b1477972b3898b + Gutenberg: 68629e8a3bdfb769936a1ca1dcfc81228ad87f0e JTAppleCalendar: 932cadea40b1051beab10f67843451d48ba16c99 Kanvas: f932eaed3d3f47aae8aafb6c2d27c968bdd49030 MediaEditor: d08314cfcbfac74361071a306b4bc3a39b3356ae From 59b6bb31ec895cde5709cb6f699e36c0f3a4b43d Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Fri, 21 Jul 2023 15:47:56 +0200 Subject: [PATCH 43/48] Fix typo in `CopyGutenbergJS.sh` script --- Scripts/BuildPhases/CopyGutenbergJS.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Scripts/BuildPhases/CopyGutenbergJS.sh b/Scripts/BuildPhases/CopyGutenbergJS.sh index f8b60d443daf..ceeea3484bfb 100755 --- a/Scripts/BuildPhases/CopyGutenbergJS.sh +++ b/Scripts/BuildPhases/CopyGutenbergJS.sh @@ -5,7 +5,7 @@ DEST="$CONFIGURATION_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH" # CocoaPods fetches Gutenberg in two possible ways: XCFramework and source. # -# We check first for the XCFramework setup, fallingback to source only if that is not there. +# We check first for the XCFramework setup, falling back to source only if that is not there. # # Because the XCFramework location is in `PODS_XCFRAMEWORKS_BUILD_DIR`, it will only appear if CocoaPods use XCFrameworks. # This makes the setup robust against having both a copy of the XCFramework and of the Gutenberg source code in the Pods folder. From 12164fc16db92d32411f233c957a1f18d9b84827 Mon Sep 17 00:00:00 2001 From: David Calhoun Date: Wed, 26 Jul 2023 21:11:17 -0400 Subject: [PATCH 44/48] build: Update Gutenberg version --- Gutenberg/version.rb | 2 +- Podfile.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Gutenberg/version.rb b/Gutenberg/version.rb index 417a8ab7aad3..3acb4bb98fca 100644 --- a/Gutenberg/version.rb +++ b/Gutenberg/version.rb @@ -11,7 +11,7 @@ # # LOCAL_GUTENBERG=../my-gutenberg-fork bundle exec pod install GUTENBERG_CONFIG = { - commit: '77f2c68803c6b069c91932206b38e6f07da58570' + commit: 'be8917c55fb6bdc33dcd8e283b9f7e59f4fc1bad' # tag: 'v1.100.1' } diff --git a/Podfile.lock b/Podfile.lock index 11c722509be8..6c043847f6f5 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -40,7 +40,7 @@ PODS: - AppAuth/Core (~> 1.6) - GTMSessionFetcher/Core (< 3.0, >= 1.5) - GTMSessionFetcher/Core (1.7.2) - - Gutenberg (1.99.1) + - Gutenberg (1.100.1) - JTAppleCalendar (8.0.3) - Kanvas (1.4.4) - MediaEditor (1.2.2): @@ -150,7 +150,7 @@ DEPENDENCIES: - FSInteractiveMap (from `https://github.com/wordpress-mobile/FSInteractiveMap.git`, tag `0.2.0`) - Gifu (= 3.3.1) - Gridicons (~> 1.1.0) - - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-77f2c68803c6b069c91932206b38e6f07da58570.podspec`) + - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-be8917c55fb6bdc33dcd8e283b9f7e59f4fc1bad.podspec`) - JTAppleCalendar (~> 8.0.2) - Kanvas (~> 1.4.4) - MediaEditor (>= 1.2.2, ~> 1.2) @@ -227,7 +227,7 @@ EXTERNAL SOURCES: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 Gutenberg: - :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-77f2c68803c6b069c91932206b38e6f07da58570.podspec + :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-be8917c55fb6bdc33dcd8e283b9f7e59f4fc1bad.podspec CHECKOUT OPTIONS: FSInteractiveMap: @@ -254,7 +254,7 @@ SPEC CHECKSUMS: Gridicons: 17d660b97ce4231d582101b02f8280628b141c9a GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd GTMSessionFetcher: 5595ec75acf5be50814f81e9189490412bad82ba - Gutenberg: 68629e8a3bdfb769936a1ca1dcfc81228ad87f0e + Gutenberg: 2e30b6b9b8423ab3f18e5dfb4bd530757052e38e JTAppleCalendar: 932cadea40b1051beab10f67843451d48ba16c99 Kanvas: f932eaed3d3f47aae8aafb6c2d27c968bdd49030 MediaEditor: d08314cfcbfac74361071a306b4bc3a39b3356ae From 4642cfb5b72afdae018fbb06c15ab3def8947522 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Thu, 27 Jul 2023 11:10:18 +0200 Subject: [PATCH 45/48] Re-introduce Gutenberg pod to remove duplicated sources in `Podfile.lock` --- Podfile.lock | 4 -- WordPress/WordPress.xcodeproj/project.pbxproj | 42 +++++++++---------- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/Podfile.lock b/Podfile.lock index 6c043847f6f5..72dfc7f518f4 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -233,10 +233,6 @@ CHECKOUT OPTIONS: FSInteractiveMap: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 - Gutenberg: - :git: https://github.com/wordpress-mobile/gutenberg-mobile.git - :submodules: true - :tag: v1.98.1 SPEC CHECKSUMS: Alamofire: 3ec537f71edc9804815215393ae2b1a8ea33a844 diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index f77430add099..6ad6db546790 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -18676,7 +18676,7 @@ E16AB92514D978240047A2E5 /* Sources */, E16AB92614D978240047A2E5 /* Frameworks */, E16AB92714D978240047A2E5 /* Resources */, - 49AE9271B82C7D67430387FA /* [CP] Embed Pods Frameworks */, + EB9D389F0D45EE518743B199 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -20304,26 +20304,6 @@ shellPath = /bin/sh; shellScript = "\"$SRCROOT/../Scripts/BuildPhases/LintNestedFrameworks.sh\"\n"; }; - 49AE9271B82C7D67430387FA /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-WordPressTest/Pods-WordPressTest-frameworks.sh", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/Gutenberg/Gutenberg.framework/Gutenberg", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/Gutenberg/hermes.framework/hermes", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Gutenberg.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-WordPressTest/Pods-WordPressTest-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 4C304224F0F810A17D96A402 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -20763,6 +20743,26 @@ shellPath = /bin/sh; shellScript = "# Close all simulators so on next launch they use the settings below\nxcrun simctl shutdown all\n\n# Disable the hardware keyboard in the simulator\ndefaults write com.apple.iphonesimulator ConnectHardwareKeyboard -bool false\n"; }; + EB9D389F0D45EE518743B199 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-WordPressTest/Pods-WordPressTest-frameworks.sh", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/Gutenberg/Gutenberg.framework/Gutenberg", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/Gutenberg/hermes.framework/hermes", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Gutenberg.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-WordPressTest/Pods-WordPressTest-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; F9C5CF0222CD5DB0007CEF56 /* Copy Alternate Internal Icons (if needed) */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; From 131057df3bd21abe20c7754dc51ae22b0772c17c Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Thu, 27 Jul 2023 11:13:00 +0200 Subject: [PATCH 46/48] Re-introduce `SDWebImage` pod --- Podfile | 1 + Podfile.lock | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Podfile b/Podfile index 6b1208872316..4a4008591880 100644 --- a/Podfile +++ b/Podfile @@ -124,6 +124,7 @@ abstract_target 'Apps' do pod 'FSInteractiveMap', git: 'https://github.com/wordpress-mobile/FSInteractiveMap.git', tag: '0.2.0' pod 'JTAppleCalendar', '~> 8.0.2' pod 'CropViewController', '2.5.3' + pod 'SDWebImage', '~> 5.11.1' ## Automattic libraries ## ==================== diff --git a/Podfile.lock b/Podfile.lock index 72dfc7f518f4..2f32b4d0c59e 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -90,6 +90,9 @@ PODS: - OHHTTPStubs/Swift (9.1.0): - OHHTTPStubs/Default - Reachability (3.2) + - SDWebImage (5.11.1): + - SDWebImage/Core (= 5.11.1) + - SDWebImage/Core (5.11.1) - Sentry (8.9.2): - Sentry/Core (= 8.9.2) - SentryPrivate (= 8.9.2) @@ -160,6 +163,7 @@ DEPENDENCIES: - OCMock (~> 3.4.3) - OHHTTPStubs/Swift (~> 9.1.0) - Reachability (= 3.2) + - SDWebImage (~> 5.11.1) - Starscream (= 3.0.6) - SVProgressHUD (= 2.2.5) - SwiftLint (~> 0.50) @@ -199,6 +203,7 @@ SPEC REPOS: - OCMock - OHHTTPStubs - Reachability + - SDWebImage - Sentry - SentryPrivate - Sodium @@ -260,6 +265,7 @@ SPEC CHECKSUMS: OCMock: 43565190abc78977ad44a61c0d20d7f0784d35ab OHHTTPStubs: 90eac6d8f2c18317baeca36698523dc67c513831 Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 + SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d Sentry: 4fe92c018ba6ed61ce1fc652dd1ccac34505a4c6 SentryPrivate: b58fc25b3a0ac7e3d4ec229be63d583e3314a47a Sodium: 23d11554ecd556196d313cf6130d406dfe7ac6da @@ -284,6 +290,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: ae5b4b813d216d3bf0a148773267fff14bd51d37 -PODFILE CHECKSUM: 7003683b2b7525f253b6f3bca7f16b039a352bae +PODFILE CHECKSUM: c5553f1db6f3be60ada4fb96f72339892573776c COCOAPODS: 1.12.1 From 40541aed0570fdfa6d7c67207d6ac5532c99bfb2 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Thu, 27 Jul 2023 16:25:52 +0200 Subject: [PATCH 47/48] Update release notes --- RELEASE-NOTES.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 00226c8aebe9..074833b1e1b4 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -1,6 +1,6 @@ 23.0 ----- - +* [**] [internal] Upgrade React Native to 0.71.11 [#20956] 22.9 ----- @@ -11,7 +11,6 @@ * [*] [internal] Update calls to use UserDefaults singleton. [#21088] * [*] Fix memory leaks in setting up Jetpack connection. [#21052] * [*] Fix a memory leak caused by the theme customization web view. [#21051] -* [**] [internal] Upgrade React Native to 0.71.11 [#20956] * [**] [internal] Updated the code that enables Gutenberg editor in all blogs when the user is in the Gutenberg rollout group. [#21146] * [**] [internal] Fix a few potential Core Data issues in Blogging Prompts & Reminders. [#21016] * [*] [Jetpack-only] Made performance improvements for Posting Activity stats. [#21136] From 66ad340d0978b8fb3b7f069fba1fd2b2b5aa2975 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Thu, 27 Jul 2023 16:26:53 +0200 Subject: [PATCH 48/48] Update Gutenberg Mobile ref with tag --- Gutenberg/version.rb | 4 ++-- Podfile.lock | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Gutenberg/version.rb b/Gutenberg/version.rb index 3acb4bb98fca..e1f427c46c8f 100644 --- a/Gutenberg/version.rb +++ b/Gutenberg/version.rb @@ -11,8 +11,8 @@ # # LOCAL_GUTENBERG=../my-gutenberg-fork bundle exec pod install GUTENBERG_CONFIG = { - commit: 'be8917c55fb6bdc33dcd8e283b9f7e59f4fc1bad' - # tag: 'v1.100.1' + # commit: '' + tag: 'v1.101.0-alpha1' } GITHUB_ORG = 'wordpress-mobile' diff --git a/Podfile.lock b/Podfile.lock index 2f32b4d0c59e..62418f53c057 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -153,7 +153,7 @@ DEPENDENCIES: - FSInteractiveMap (from `https://github.com/wordpress-mobile/FSInteractiveMap.git`, tag `0.2.0`) - Gifu (= 3.3.1) - Gridicons (~> 1.1.0) - - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-be8917c55fb6bdc33dcd8e283b9f7e59f4fc1bad.podspec`) + - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.101.0-alpha1.podspec`) - JTAppleCalendar (~> 8.0.2) - Kanvas (~> 1.4.4) - MediaEditor (>= 1.2.2, ~> 1.2) @@ -232,7 +232,7 @@ EXTERNAL SOURCES: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 Gutenberg: - :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-be8917c55fb6bdc33dcd8e283b9f7e59f4fc1bad.podspec + :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.101.0-alpha1.podspec CHECKOUT OPTIONS: FSInteractiveMap: @@ -255,7 +255,7 @@ SPEC CHECKSUMS: Gridicons: 17d660b97ce4231d582101b02f8280628b141c9a GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd GTMSessionFetcher: 5595ec75acf5be50814f81e9189490412bad82ba - Gutenberg: 2e30b6b9b8423ab3f18e5dfb4bd530757052e38e + Gutenberg: 07c2bf2c4d7543fa3cf3388c1353eae43f14707d JTAppleCalendar: 932cadea40b1051beab10f67843451d48ba16c99 Kanvas: f932eaed3d3f47aae8aafb6c2d27c968bdd49030 MediaEditor: d08314cfcbfac74361071a306b4bc3a39b3356ae