From 8c49217142cf6dde9387f9f0f5bed2caeb295272 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Mon, 29 Jul 2024 15:24:28 +1000 Subject: [PATCH 01/16] Use shared vars in Buildkite pipilines and explicitly set `mac` queue --- .buildkite/pipeline.yml | 27 ++++++++++++--------------- .buildkite/release-builds.yml | 17 +++++------------ .buildkite/shared-pipeline-vars | 11 +++++++++++ .xcode-version | 1 + 4 files changed, 29 insertions(+), 27 deletions(-) create mode 100755 .buildkite/shared-pipeline-vars create mode 100644 .xcode-version diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index b61b4daec..58fe2ae5a 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -1,29 +1,26 @@ -# Nodes with values to reuse in the pipeline. -common_params: - # Common plugin settings to use with the `plugins` key. - - &common_plugins - - automattic/a8c-ci-toolkit#3.1.0 - # Common environment values to use with the `env` key. - - &common_env - IMAGE_ID: xcode-15.4 - # This is the default pipeline – it will build and test the app + +env: + IMAGE_ID: $IMAGE_ID + steps: - label: "🔬 Build and Test" command: .buildkite/commands/build-and-test.sh - env: *common_env - plugins: *common_plugins + plugins: [$CI_TOOLKIT_PLUGIN] + agents: + queue: mac - label: ":swift: SwiftLint" command: run_swiftlint --strict - plugins: *common_plugins + plugins: [$CI_TOOLKIT_PLUGIN] notify: - github_commit_status: context: "SwiftLint" agents: - queue: "default" + queue: default - label: "🛠 Verify App Store Target Builds" command: .buildkite/commands/build-and-test-app-store.sh - env: *common_env - plugins: *common_plugins + plugins: [$CI_TOOLKIT_PLUGIN] + agents: + queue: mac diff --git a/.buildkite/release-builds.yml b/.buildkite/release-builds.yml index d50740905..606a249c3 100644 --- a/.buildkite/release-builds.yml +++ b/.buildkite/release-builds.yml @@ -1,16 +1,9 @@ -# Nodes with values to reuse in the pipeline. -common_params: - # Common plugin settings to use with the `plugins` key. - - &common_plugins - - automattic/a8c-ci-toolkit#3.1.0 - # Common environment values to use with the `env` key. - - &common_env - IMAGE_ID: xcode-15.4 - -# This is the default pipeline – it will build and test the app steps: - label: "🛠 App Store Upload" command: .buildkite/commands/build-and-upload-release.sh priority: 1 - env: *common_env - plugins: *common_plugins + plugins: [$CI_TOOLKIT_PLUGIN] + agents: + queue: mac + env: + IMAGE_ID: $IMAGE_ID diff --git a/.buildkite/shared-pipeline-vars b/.buildkite/shared-pipeline-vars new file mode 100755 index 000000000..41b493b39 --- /dev/null +++ b/.buildkite/shared-pipeline-vars @@ -0,0 +1,11 @@ +#!/bin/sh + +# This file is `source`'d before calling `buildkite-agent pipeline upload`, and can be used +# to set up some variables that will be interpolated in the `.yml` pipeline before uploading it. + +# The ~> modifier is not currently used, but we check for it just in case +XCODE_VERSION=$(sed -E -n 's/^(~> )?(.*)/xcode-\2/p' .xcode-version) +CI_TOOLKIT_PLUGIN_VERSION="3.4.2" + +export IMAGE_ID="$XCODE_VERSION" +export CI_TOOLKIT_PLUGIN="automattic/a8c-ci-toolkit#$CI_TOOLKIT_PLUGIN_VERSION" diff --git a/.xcode-version b/.xcode-version new file mode 100644 index 000000000..232a7fc1a --- /dev/null +++ b/.xcode-version @@ -0,0 +1 @@ +15.4 From 733a8ec4d04d7c9961c8015aa8bf3f11d952c4b7 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Mon, 29 Jul 2024 15:27:23 +1000 Subject: [PATCH 02/16] Use `set_milestone_frozen_marker` over `setfrozentag` --- fastlane/Fastfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 67c4c2436..733259471 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -140,7 +140,7 @@ lane :code_freeze do |options| from_branch: DEFAULT_BRANCH, to_branch: "release/#{new_version}" ) - setfrozentag( + set_milestone_frozen_marker( repository: GITHUB_REPO, milestone: new_version ) From 242f5094edbeafee850c2d81788cd21f61f16b88 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Mon, 29 Jul 2024 15:42:40 +1000 Subject: [PATCH 03/16] Use `xcconfig` to set `DEVELOPMENT_TEAM` --- Simplenote.xcodeproj/project.pbxproj | 18 ++++++------------ config/Project.Debug.xcconfig | 1 + config/Project.Release.xcconfig | 1 + Base.xcconfig => config/Project.xcconfig | 2 +- config/Simplenote.debug.xcconfig | 5 +---- config/Simplenote.release.xcconfig | 5 +---- 6 files changed, 11 insertions(+), 21 deletions(-) create mode 100644 config/Project.Debug.xcconfig create mode 100644 config/Project.Release.xcconfig rename Base.xcconfig => config/Project.xcconfig (100%) diff --git a/Simplenote.xcodeproj/project.pbxproj b/Simplenote.xcodeproj/project.pbxproj index 5d14b9008..dedfdde49 100644 --- a/Simplenote.xcodeproj/project.pbxproj +++ b/Simplenote.xcodeproj/project.pbxproj @@ -450,7 +450,9 @@ 37F742EA202A382400A47D3A /* AboutViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutViewController.swift; sourceTree = ""; }; 39ACEAE8218A03C6C22DC662 /* Pods-Automattic-Simplenote.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Automattic-Simplenote.release.xcconfig"; path = "Target Support Files/Pods-Automattic-Simplenote/Pods-Automattic-Simplenote.release.xcconfig"; sourceTree = ""; }; 3F1FC4212C0EBEF10066B187 /* Simplenote.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = Simplenote.xctestplan; sourceTree = ""; }; - 3F6C39912C33C11100776C37 /* Base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Base.xcconfig; sourceTree = ""; }; + 3FD478252C5762250071B8B9 /* Project.Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Project.Release.xcconfig; path = config/Project.Release.xcconfig; sourceTree = ""; }; + 3FD478262C5762350071B8B9 /* Project.Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Project.Debug.xcconfig; path = config/Project.Debug.xcconfig; sourceTree = ""; }; + 3FD478272C5762400071B8B9 /* Project.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Project.xcconfig; path = config/Project.xcconfig; sourceTree = ""; }; 466FFF2F17CC10A800399652 /* Simplenote.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Simplenote.app; sourceTree = BUILT_PRODUCTS_DIR; }; 469512CB17CD23100014A2BF /* Simplenote-Info-Hockey.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Simplenote-Info-Hockey.plist"; sourceTree = ""; }; 46A0BEB8175BFD540050E864 /* Simplenote.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = Simplenote.entitlements; sourceTree = SOURCE_ROOT; }; @@ -1134,7 +1136,9 @@ 8C902F8C22D3EE350018D654 /* Version.public.xcconfig */, 8C902F8722D3ED910018D654 /* Simplenote.release.xcconfig */, 8C902F8E22D3EFE60018D654 /* Simplenote.debug.xcconfig */, - 3F6C39912C33C11100776C37 /* Base.xcconfig */, + 3FD478252C5762250071B8B9 /* Project.Release.xcconfig */, + 3FD478262C5762350071B8B9 /* Project.Debug.xcconfig */, + 3FD478272C5762400071B8B9 /* Project.xcconfig */, ); name = config; sourceTree = ""; @@ -2573,7 +2577,6 @@ ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-Beta"; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Simplenote/SimplenoteDebug.entitlements; - CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; @@ -2624,7 +2627,6 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Simplenote.entitlements; - CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; DEAD_CODE_STRIPPING = YES; FRAMEWORK_SEARCH_PATHS = ( @@ -2667,7 +2669,6 @@ B52D0EC6230DCAD7003F799D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CODE_SIGN_STYLE = Manual; DEAD_CODE_STRIPPING = YES; MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2677,7 +2678,6 @@ B52D0EC7230DCAD7003F799D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CODE_SIGN_STYLE = Manual; DEAD_CODE_STRIPPING = YES; MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2700,12 +2700,9 @@ CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = PZYM8XX95Q; - "DEVELOPMENT_TEAM[sdk=macosx*]" = PZYM8XX95Q; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; @@ -2744,12 +2741,9 @@ CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; DEAD_CODE_STRIPPING = YES; - DEVELOPMENT_TEAM = PZYM8XX95Q; - "DEVELOPMENT_TEAM[sdk=macosx*]" = PZYM8XX95Q; ENABLE_NS_ASSERTIONS = NO; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; diff --git a/config/Project.Debug.xcconfig b/config/Project.Debug.xcconfig new file mode 100644 index 000000000..9dbeb7233 --- /dev/null +++ b/config/Project.Debug.xcconfig @@ -0,0 +1 @@ +#include "Project.xcconfig" diff --git a/config/Project.Release.xcconfig b/config/Project.Release.xcconfig new file mode 100644 index 000000000..9dbeb7233 --- /dev/null +++ b/config/Project.Release.xcconfig @@ -0,0 +1 @@ +#include "Project.xcconfig" diff --git a/Base.xcconfig b/config/Project.xcconfig similarity index 100% rename from Base.xcconfig rename to config/Project.xcconfig index c6e1326f3..1060f850f 100644 --- a/Base.xcconfig +++ b/config/Project.xcconfig @@ -1,4 +1,4 @@ #include "Version.public.xcconfig" -CODE_SIGN_STYLE = Manual DEVELOPMENT_TEAM = PZYM8XX95Q +CODE_SIGN_STYLE = Manual diff --git a/config/Simplenote.debug.xcconfig b/config/Simplenote.debug.xcconfig index f6c364f6f..fb60a0433 100644 --- a/config/Simplenote.debug.xcconfig +++ b/config/Simplenote.debug.xcconfig @@ -1,6 +1,3 @@ -#include "Base.xcconfig" +#include "Project.Debug.xcconfig" CODE_SIGN_IDENTITY = Apple Development - -// Notice we don't have a PROVISIONING_PROFILE_SPECIFIER defined here because this xcconfig is used at the project-level but that settings need to be target-level. -// Once we'll have target-level xcconfigs, we shall add the setting there diff --git a/config/Simplenote.release.xcconfig b/config/Simplenote.release.xcconfig index aea1d7bf6..61e3c7b19 100644 --- a/config/Simplenote.release.xcconfig +++ b/config/Simplenote.release.xcconfig @@ -1,6 +1,3 @@ -#include "Base.xcconfig" +#include "Project.Release.xcconfig" CODE_SIGN_IDENTITY = Apple Distribution - -// Notice we don't have a PROVISIONING_PROFILE_SPECIFIER defined here because this xcconfig is used at the project-level but that settings need to be target-level. -// Once we'll have target-level xcconfigs, we shall add the setting there From 01eff69454830c4ba01ba2660b5cc0c3ef7d7a1b Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Mon, 29 Jul 2024 15:43:34 +1000 Subject: [PATCH 04/16] Remove unused `PROVISIONING_PROFILE` build setting --- Simplenote.xcodeproj/project.pbxproj | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Simplenote.xcodeproj/project.pbxproj b/Simplenote.xcodeproj/project.pbxproj index dedfdde49..7e0e1341c 100644 --- a/Simplenote.xcodeproj/project.pbxproj +++ b/Simplenote.xcodeproj/project.pbxproj @@ -2609,8 +2609,8 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.automattic.SimplenoteMac.Development; PRODUCT_NAME = Simplenote; - PROVISIONING_PROFILE = ""; - PROVISIONING_PROFILE_SPECIFIER = "Simplenote Mac - Development"; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = "Simplenote Mac - Development"; SDKROOT = macosx; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -2657,8 +2657,6 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.automattic.SimplenoteMac; PRODUCT_NAME = Simplenote; - PROVISIONING_PROFILE = ""; - "PROVISIONING_PROFILE[sdk=macosx*]" = ""; PROVISIONING_PROFILE_SPECIFIER = "match AppStore com.automattic.SimplenoteMac macos"; SDKROOT = macosx; SWIFT_VERSION = 5.0; From 6a6f110d8212956051a80be677a7c64d073d7583 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Mon, 29 Jul 2024 15:49:23 +1000 Subject: [PATCH 05/16] Use `xcconfig` to define provisioning profile for release builds We'll thinking about dev builds later, at the moment, we're focused on the release workflow --- Simplenote.xcodeproj/project.pbxproj | 2 -- config/Project.Release.xcconfig | 3 +++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Simplenote.xcodeproj/project.pbxproj b/Simplenote.xcodeproj/project.pbxproj index 7e0e1341c..7757ef0dd 100644 --- a/Simplenote.xcodeproj/project.pbxproj +++ b/Simplenote.xcodeproj/project.pbxproj @@ -2657,7 +2657,6 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.automattic.SimplenoteMac; PRODUCT_NAME = Simplenote; - PROVISIONING_PROFILE_SPECIFIER = "match AppStore com.automattic.SimplenoteMac macos"; SDKROOT = macosx; SWIFT_VERSION = 5.0; WRAPPER_EXTENSION = app; @@ -2851,7 +2850,6 @@ MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.automattic.SimplenoteMac.IntentsExtension; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = "match AppStore com.automattic.SimplenoteMac.IntentsExtension macos"; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = APP_EXTENSION; SWIFT_EMIT_LOC_STRINGS = YES; diff --git a/config/Project.Release.xcconfig b/config/Project.Release.xcconfig index 9dbeb7233..e95d9f4ae 100644 --- a/config/Project.Release.xcconfig +++ b/config/Project.Release.xcconfig @@ -1 +1,4 @@ #include "Project.xcconfig" + +// Each target using this will interpolate its own computed value for the bundle id +PROVISIONING_PROFILE_SPECIFIER = match AppStore $(PRODUCT_BUNDLE_IDENTIFIER) macos From c4be38b3bbd685952e99b1c020dcd270df322555 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Mon, 29 Jul 2024 18:01:36 +1000 Subject: [PATCH 06/16] Use `xcconfig` to specify code sign identity and make explicit --- config/Project.Debug.xcconfig | 2 ++ config/Project.Release.xcconfig | 2 ++ config/Simplenote.debug.xcconfig | 2 -- config/Simplenote.release.xcconfig | 2 -- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/Project.Debug.xcconfig b/config/Project.Debug.xcconfig index 9dbeb7233..bb17621fb 100644 --- a/config/Project.Debug.xcconfig +++ b/config/Project.Debug.xcconfig @@ -1 +1,3 @@ #include "Project.xcconfig" + +CODE_SIGN_IDENTITY = Apple Development diff --git a/config/Project.Release.xcconfig b/config/Project.Release.xcconfig index e95d9f4ae..5759879de 100644 --- a/config/Project.Release.xcconfig +++ b/config/Project.Release.xcconfig @@ -2,3 +2,5 @@ // Each target using this will interpolate its own computed value for the bundle id PROVISIONING_PROFILE_SPECIFIER = match AppStore $(PRODUCT_BUNDLE_IDENTIFIER) macos + +CODE_SIGN_IDENTITY = Apple Distribution: Automattic, Inc. (PZYM8XX95Q) diff --git a/config/Simplenote.debug.xcconfig b/config/Simplenote.debug.xcconfig index fb60a0433..964d9226f 100644 --- a/config/Simplenote.debug.xcconfig +++ b/config/Simplenote.debug.xcconfig @@ -1,3 +1 @@ #include "Project.Debug.xcconfig" - -CODE_SIGN_IDENTITY = Apple Development diff --git a/config/Simplenote.release.xcconfig b/config/Simplenote.release.xcconfig index 61e3c7b19..39855e9e0 100644 --- a/config/Simplenote.release.xcconfig +++ b/config/Simplenote.release.xcconfig @@ -1,3 +1 @@ #include "Project.Release.xcconfig" - -CODE_SIGN_IDENTITY = Apple Distribution From 3f189506522bf4fd29885ef192e97155ff36e274 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Mon, 29 Jul 2024 21:30:20 +1000 Subject: [PATCH 07/16] Update Fastlane to latest version 2.222.0 --- Gemfile | 2 +- Gemfile.lock | 26 +++++++++++++------------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Gemfile b/Gemfile index d1704395d..a26be8d03 100644 --- a/Gemfile +++ b/Gemfile @@ -4,7 +4,7 @@ source 'https://rubygems.org' gem 'cocoapods', '~> 1.14' gem 'danger-dangermattic', '~> 1.0' -gem 'fastlane', '~> 2.219' +gem 'fastlane', '~> 2.222' gem 'fastlane-plugin-appcenter', '~> 1.11' gem 'fastlane-plugin-sentry', '~> 1.14' gem 'fastlane-plugin-wpmreleasetoolkit', '~> 9.2' diff --git a/Gemfile.lock b/Gemfile.lock index 51f3644ac..138450405 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -24,20 +24,20 @@ GEM ast (2.4.2) atomos (0.1.3) aws-eventstream (1.3.0) - aws-partitions (1.940.0) - aws-sdk-core (3.197.0) + aws-partitions (1.958.0) + aws-sdk-core (3.201.3) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) aws-sigv4 (~> 1.8) jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.83.0) - aws-sdk-core (~> 3, >= 3.197.0) - aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.152.0) - aws-sdk-core (~> 3, >= 3.197.0) + aws-sdk-kms (1.88.0) + aws-sdk-core (~> 3, >= 3.201.0) + aws-sigv4 (~> 1.5) + aws-sdk-s3 (1.156.0) + aws-sdk-core (~> 3, >= 3.201.0) aws-sdk-kms (~> 1) - aws-sigv4 (~> 1.8) - aws-sigv4 (1.8.0) + aws-sigv4 (~> 1.5) + aws-sigv4 (1.9.0) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) base64 (0.2.0) @@ -142,7 +142,7 @@ GEM escape (0.0.4) ethon (0.16.0) ffi (>= 1.15.0) - excon (0.110.0) + excon (0.111.0) faraday (1.10.3) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) @@ -174,7 +174,7 @@ GEM faraday_middleware (1.2.0) faraday (~> 1.0) fastimage (2.3.1) - fastlane (2.220.0) + fastlane (2.222.0) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) @@ -294,7 +294,7 @@ GEM kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) language_server-protocol (3.17.0.3) - mini_magick (4.12.0) + mini_magick (4.13.2) mini_mime (1.1.5) mini_portile2 (2.8.7) minitest (5.23.1) @@ -408,7 +408,7 @@ PLATFORMS DEPENDENCIES cocoapods (~> 1.14) danger-dangermattic (~> 1.0) - fastlane (~> 2.219) + fastlane (~> 2.222) fastlane-plugin-appcenter (~> 1.11) fastlane-plugin-sentry (~> 1.14) fastlane-plugin-wpmreleasetoolkit (~> 9.2) From 57a6c4ff9f7e6ed511d3120d9a8e289b2f8c21c7 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Wed, 31 Jul 2024 11:02:21 +1000 Subject: [PATCH 08/16] Use full path for build folder --- fastlane/Fastfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 733259471..37a57b137 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -12,7 +12,7 @@ PROJECT_FOLDER = Pathname.new(File.join(Dir.pwd, '..')).expand_path.to_s WORKSPACE = 'Simplenote.xcworkspace' INTERNAL_SCHEME = 'Simplenote' APP_STORE_SCHEME = 'Simplenote' -BUILD_FOLDER = 'build' +BUILD_FOLDER = File.join(PROJECT_FOLDER, 'build') APP_STORE_BUNDLE_IDENTIFIER = 'com.automattic.SimplenoteMac' APP_STORE_BUNDLE_IDENTIFIER_INTENTS = "#{APP_STORE_BUNDLE_IDENTIFIER}.IntentsExtension".freeze VERSION_FILE_PATH = File.join(PROJECT_FOLDER, 'config', 'Version.Public.xcconfig') From 7a2d8200dbef0c4123475a73a19e16c6f1b14313 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Wed, 31 Jul 2024 19:43:30 +1000 Subject: [PATCH 09/16] Enable hardened runtime for release, and move to `xcconfig` Required for notarization in Xcode 15.4 --- Simplenote.xcodeproj/project.pbxproj | 3 --- config/Project.xcconfig | 3 +++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Simplenote.xcodeproj/project.pbxproj b/Simplenote.xcodeproj/project.pbxproj index 7757ef0dd..af98db64c 100644 --- a/Simplenote.xcodeproj/project.pbxproj +++ b/Simplenote.xcodeproj/project.pbxproj @@ -2580,7 +2580,6 @@ COMBINE_HIDPI_IMAGES = YES; DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_HARDENED_RUNTIME = YES; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/External\"/**", @@ -2779,7 +2778,6 @@ CODE_SIGN_ENTITLEMENTS = "IntentsExtension/Support Files/IntentsExtensionDebug.entitlements"; CURRENT_PROJECT_VERSION = $BUILD_NUMBER; DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_HARDENED_RUNTIME = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; @@ -2828,7 +2826,6 @@ CODE_SIGN_ENTITLEMENTS = "IntentsExtension/Support Files/IntentsExtension.entitlements"; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = $BUILD_NUMBER; - ENABLE_HARDENED_RUNTIME = YES; ENABLE_NS_ASSERTIONS = NO; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; diff --git a/config/Project.xcconfig b/config/Project.xcconfig index 1060f850f..db9025ba1 100644 --- a/config/Project.xcconfig +++ b/config/Project.xcconfig @@ -2,3 +2,6 @@ DEVELOPMENT_TEAM = PZYM8XX95Q CODE_SIGN_STYLE = Manual + +// Required to export for Notarization +ENABLE_HARDENED_RUNTIME = YES From 8fe3fd8e516730698c1d1aa322c934646dc4fcb9 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Wed, 31 Jul 2024 20:26:33 +1000 Subject: [PATCH 10/16] Add lanes for getting Developer ID as well as ASC certificates --- fastlane/Fastfile | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 37a57b137..e63dda3e7 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -395,7 +395,7 @@ lane :build_and_upload_app_store do |options| setup_ci - app_store_code_signing + configure_code_signing_release archive_path = File.join(BUILD_FOLDER, 'Simplenote-Mac.xcarchive') build_simplenote( @@ -499,13 +499,20 @@ lane :download_strings_files_from_glotpress do ) end -# Downloads all the required certificates and profiles for the production build. -# Optionally, it can create any new necessary certificates or profiles. -# -# @option [Boolean] readonly (default: true) Whether to only fetch existing certificates and profiles, without generating new ones. -lane :app_store_code_signing do |options| - # Fail early if secrets not available via `get_required_env`. - # Otherwise, Fastlane will prompt to type them. +lane :configure_code_signing do |readonly: true| + configure_code_signing_app_center(readonly: readonly) + configure_code_signing_app_store(readonly: readonly) +end + +lane :configure_code_signing_app_center do |readonly: true| + configure_code_signing(type: 'developer_id', readonly: readonly) +end + +lane :configure_code_signing_app_store do |readonly: true| + configure_code_signing(type: 'appstore', readonly: readonly) +end + +def configure_code_signing(type:, readonly: true) access_key = get_required_env('MATCH_S3_ACCESS_KEY') secret_access_key = get_required_env('MATCH_S3_SECRET_ACCESS_KEY') @@ -516,11 +523,9 @@ lane :app_store_code_signing do |options| s3_access_key: access_key, s3_secret_access_key: secret_access_key, team_id: APPLE_TEAM_ID, - type: 'appstore', + type: type, platform: 'macos', - # This Mac app also needs a Mac Installer Distribution certificate - additional_cert_types: 'mac_installer_distribution', - readonly: options.fetch(:readonly, true), + readonly: readonly, app_identifier: [ APP_STORE_BUNDLE_IDENTIFIER, APP_STORE_BUNDLE_IDENTIFIER_INTENTS From 1c44bce5c9f1c03e6677bd3d18d948c6c1521876 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Wed, 31 Jul 2024 20:28:47 +1000 Subject: [PATCH 11/16] Bump version number --- config/Version.public.xcconfig | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/Version.public.xcconfig b/config/Version.public.xcconfig index 1464122ef..5553965b1 100644 --- a/config/Version.public.xcconfig +++ b/config/Version.public.xcconfig @@ -1,9 +1,9 @@ -VERSION_SHORT=2.20 +VERSION_SHORT=2.21 // Public long version. Example: 2.0.0.0. The last 0 means the first build for // version 2.0.0 -VERSION_LONG=2.20.0.4 +VERSION_LONG=2.21.0.0 // This is the value for the CFBundleVersion it should be incremented on every // build that gets distributed -BUILD_NUMBER=11258 +BUILD_NUMBER=11259 From 2c6bcb25cdfff1b9d8a7fd48b1ce1d0cfd45291d Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Wed, 31 Jul 2024 20:28:47 +1000 Subject: [PATCH 12/16] Release Notes: add new section for next version (2.22) --- RELEASE-NOTES.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index a7feda813..3a226b62e 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -1,3 +1,7 @@ +2.22 +----- + + 2.21 ----- - Added shortcuts to Simplenote Mac!! From e9b92f2fc9030daa6850f74b89fe0c1ff6bd79c3 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Wed, 31 Jul 2024 20:33:23 +1000 Subject: [PATCH 13/16] Revert "Use `set_milestone_frozen_marker` over `setfrozentag`" This reverts commit 733a8ec4d04d7c9961c8015aa8bf3f11d952c4b7. --- fastlane/Fastfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastlane/Fastfile b/fastlane/Fastfile index e63dda3e7..2fb12d70b 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -140,7 +140,7 @@ lane :code_freeze do |options| from_branch: DEFAULT_BRANCH, to_branch: "release/#{new_version}" ) - set_milestone_frozen_marker( + setfrozentag( repository: GITHUB_REPO, milestone: new_version ) From 40f4bd5aa603bfbacfeb75b355997eb44bd7df39 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Wed, 31 Jul 2024 20:35:38 +1000 Subject: [PATCH 14/16] Freeze strings for localization --- Simplenote/en.lproj/Localizable.strings | 88 +++++++++++++++++++++---- 1 file changed, 77 insertions(+), 11 deletions(-) diff --git a/Simplenote/en.lproj/Localizable.strings b/Simplenote/en.lproj/Localizable.strings index 04f1b7777..806ec4ea0 100644 --- a/Simplenote/en.lproj/Localizable.strings +++ b/Simplenote/en.lproj/Localizable.strings @@ -13,6 +13,9 @@ /* A link to more information about our privacy policy */ "About Analytics and Privacy" = "About Analytics and Privacy"; +/* Accept Message */ +"Accept" = "Accept"; + /* Email verification required alert title */ "Account Verification Required" = "Account Verification Required"; @@ -41,10 +44,8 @@ /* Hiring Details */ "Are you a developer? Automattic is Hiring." = "Are you a developer? Automattic is Hiring."; -/* Error for authorization failure */ -"Authorization failed" = "Authorization failed"; - -/* Error for bad email or password */ +/* Error for authorization failure + Error for bad email or password */ "Bad email or password" = "Bad email or password"; /* Delete account confirmation alert message */ @@ -71,11 +72,14 @@ /* Number of characters in the note */ "Characters" = "Characters"; +/* Title for delete account succes alert */ +"Check Your Email" = "Check Your Email"; + /* Vefification sent alert title */ "Check your Email" = "Check your Email"; -/* Title for delete account succes alert */ -"Check Your Email" = "Check Your Email"; +/* Placeholder text for code field */ +"Code" = "Code"; /* Collaborate Menu Action */ "Collaborate" = "Collaborate"; @@ -95,6 +99,9 @@ /* Placeholder text for confirmation field */ "Confirm Password" = "Confirm Password"; +/* Continue with Password Action */ +"Continue with password" = "Continue with password"; + /* Copy Link Menu Action */ "Copy Internal Link" = "Copy Internal Link"; @@ -141,6 +148,15 @@ /* Empty Trash Action */ "Empty Trash" = "Empty Trash"; +/* LogIn Interface Title */ +"Enter Code" = "Enter Code"; + +/* Enter Password fallback Action */ +"Enter password" = "Enter password"; + +/* Header for Login With Password. Please preserve the {{EMAIL}} substring */ +"Enter the password for the account {{EMAIL}}" = "Enter the password for the account {{EMAIL}}"; + /* Deletion Error Title */ "Error" = "Error"; @@ -153,6 +169,9 @@ /* Forgot Password Button */ "Forgot your Password?" = "Forgot your Password?"; +/* Forgot Password Button */ +"Forgot your password?" = "Forgot your password?"; + /* Full line length button label */ "Full" = "Full"; @@ -186,11 +205,24 @@ /* Light theme name */ "Light" = "Light"; -/* Title of button for logging in +/* Title of button for logging in */ +"Log in" = "Log in"; + +/* LogIn Interface Title + Title of button for logging in Title of button for login */ "Log In" = "Log In"; -/* button title for wp.com sign in button */ +/* Title of button for logging in */ +"Log in with email" = "Log in with email"; + +/* Header for Enter Password UI, when the user performed too many requests */ +"Log in with email failed, please enter the password for {{EMAIL}}" = "Log in with email failed, please enter the password for {{EMAIL}}"; + +/* LogIn Interface Title */ +"Log In with Password" = "Log In with Password"; + +/* Title to use wordpress login instead of email */ "Log in with WordPress.com" = "Log in with WordPress.com"; /* Log out button label */ @@ -199,6 +231,12 @@ /* Displayed temporarily while logging in */ "Logging In..." = "Logging In..."; +/* Title of button for logging in */ +"Logging in..." = "Logging in..."; + +/* Message displayed when a login code is too short */ +"Login Code is too short" = "Login Code is too short"; + /* Markdown Menu Action */ "Markdown" = "Markdown"; @@ -257,13 +295,13 @@ /* Note Sort Order label */ "Note sort order:" = "Note sort order:"; -/* Email unverified alert dismiss */ -"Ok" = "Ok"; - /* Dismisses an AlertController OK button in error alert dialog */ "OK" = "OK"; +/* Email unverified alert dismiss */ +"Ok" = "Ok"; + /* Placeholder text for password field */ "Password" = "Password"; @@ -304,6 +342,9 @@ /* Displayed during a Publish Operation */ "Publishing..." = "Publishing..."; +/* Header to put on any files that need to be recovered */ +"Recovered Note Cotent - " = "Recovered Note Cotent - "; + /* References Title */ "References" = "References"; @@ -316,6 +357,9 @@ /* Request error alert title */ "Request Error" = "Request Error"; +/* Title of button for logging in */ +"Requesting email..." = "Requesting email..."; + /* Resend email button -> Verify your email screen */ "Resend Email" = "Resend Email"; @@ -354,17 +398,27 @@ "Show Status Bar" = "Show Status Bar"; /* Title of button for signing up */ +"Sign up" = "Sign up"; + +/* SignUp Interface Title + Title of button for signing up */ "Sign Up" = "Sign Up"; /* Alert message displayed when an account has unsynced notes */ "Signing out will delete any unsynced notes. Check your connection and verify your synced notes by signing in to the Web App." = "Signing out will delete any unsynced notes. Check your connection and verify your synced notes by signing in to the Web App."; +/* Title of button for logging in */ +"Signing up..." = "Signing up..."; + /* Displayed temoprarily while signing up */ "Signing Up..." = "Signing Up..."; /* Text to display on OSX cancel button */ "Skip" = "Skip"; +/* LoginCode Expired Title */ +"Sorry!" = "Sorry!"; + /* Sort tags alphabetically checkbox label */ "Sort Tags Alphabetically" = "Sort Tags Alphabetically"; @@ -386,6 +440,15 @@ /* Error when address is in use */ "That email is already being used" = "That email is already being used"; +/* LoginCode Expired Message */ +"The authentication code you've requested has expired. Please request a new one" = "The authentication code you've requested has expired. Please request a new one"; + +/* Login po sCode Invalid Error */ +"The code you've entered is invalid." = "The code you've entered is invalid."; + +/* Simplenote subtitle */ +"The simplest way to keep notes." = "The simplest way to keep notes."; + /* Theme label */ "Theme:" = "Theme:"; @@ -441,6 +504,9 @@ /* Generic error */ "We're having problems. Please try again soon." = "We're having problems. Please try again soon."; +/* Header for the Login with Code UI. Please preserve the {{EMAIL}} string as is! */ +"We've sent a code to {{EMAIL}}. The code will be valid for a few minutes." = "We've sent a code to {{EMAIL}}. The code will be valid for a few minutes."; + /* Confirmation that an email has been sent Message -> Verify your email screen. Parameter: %1$@ - email address */ "We’ve sent a verification email to %1$@. Please check your inbox and follow the instructions." = "We’ve sent a verification email to %1$@. Please check your inbox and follow the instructions."; From 23b0bac7011c706795ab4a3bb32be2ef3f16d5d9 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Wed, 31 Jul 2024 20:41:14 +1000 Subject: [PATCH 15/16] Update release notes for 2.21 --- Simplenote/Resources/release_notes.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Simplenote/Resources/release_notes.txt b/Simplenote/Resources/release_notes.txt index 81d1894ea..0c3c6af1d 100644 --- a/Simplenote/Resources/release_notes.txt +++ b/Simplenote/Resources/release_notes.txt @@ -1 +1,2 @@ -• Behind-the-scenes reliability improvements +- Added shortcuts to Simplenote Mac!! +- New Magic Link Authentication support From ea76fa04167a94020520a37ee7f47801adb44bb0 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Wed, 31 Jul 2024 20:41:31 +1000 Subject: [PATCH 16/16] Update metadata strings --- Simplenote/Resources/AppStoreStrings.pot | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Simplenote/Resources/AppStoreStrings.pot b/Simplenote/Resources/AppStoreStrings.pot index edc1db29b..9b19b17d5 100644 --- a/Simplenote/Resources/AppStoreStrings.pot +++ b/Simplenote/Resources/AppStoreStrings.pot @@ -46,8 +46,9 @@ msgctxt "app_store_keywords" msgid "simplenote,note,notes,sync,syncing,list,todo,simple,markdown,ideas" msgstr "" -msgctxt "v2.20-whats-new" +msgctxt "v2.21-whats-new" msgid "" -"• Behind-the-scenes reliability improvements\n" +"- Added shortcuts to Simplenote Mac!!\n" +"- New Magic Link Authentication support\n" msgstr ""