Resolve several issues in bump script/lane (#1075)

- Simplify build/version updates by moving MARKETING_VERSION and
CURRENT_PROJECT_VERSION to Config.xcconfig
- Provide Ruby (for fastlane) and Bash (for CI) versions of
xconfig-get/set
- Copy release notes atomically inside the lane to guarantee they are
included in the version commit
- Add -nt to skip the build tag
This commit is contained in:
Davide 2025-01-18 18:13:54 +01:00 committed by GitHub
parent 72c4a11c5e
commit 8972d9773e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 105 additions and 82 deletions

View File

@ -10,7 +10,6 @@ env:
FASTLANE_USERNAME: ${{ secrets.FASTLANE_USERNAME }} FASTLANE_USERNAME: ${{ secrets.FASTLANE_USERNAME }}
FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }} FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }}
TESTFLIGHT_PREFACE: ${{ vars.TESTFLIGHT_PREFACE }} TESTFLIGHT_PREFACE: ${{ vars.TESTFLIGHT_PREFACE }}
XCODEPROJ: "Passepartout.xcodeproj/project.pbxproj"
PLATFORMS: "iOS macOS tvOS" PLATFORMS: "iOS macOS tvOS"
concurrency: concurrency:
@ -29,8 +28,8 @@ jobs:
- name: Save app version - name: Save app version
id: app_version id: app_version
run: | run: |
VERSION=`ci/version-number.sh $XCODEPROJ` VERSION=`ci/version-number.sh`
BUILD=`ci/build-number.sh $XCODEPROJ` BUILD=`ci/build-number.sh`
echo "version=$VERSION" >> $GITHUB_OUTPUT echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "build=$BUILD" >> $GITHUB_OUTPUT echo "build=$BUILD" >> $GITHUB_OUTPUT
- name: Run Xcode tests - name: Run Xcode tests

View File

@ -1,6 +1,6 @@
source "https://rubygems.org" source "https://rubygems.org"
gem "fastlane", :github => "keeshux/fastlane", :ref => "57b2e988e862b14c557419210dc5bd7c9a1636cc" gem "fastlane", :github => "keeshux/fastlane", :ref => "77198d601b9237c223dfe5550ce1c20f43140c79"
gem "dotenv" gem "dotenv"
plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')

View File

@ -1,7 +1,7 @@
GIT GIT
remote: https://github.com/keeshux/fastlane.git remote: https://github.com/keeshux/fastlane.git
revision: 57b2e988e862b14c557419210dc5bd7c9a1636cc revision: 77198d601b9237c223dfe5550ce1c20f43140c79
ref: 57b2e988e862b14c557419210dc5bd7c9a1636cc ref: 77198d601b9237c223dfe5550ce1c20f43140c79
specs: specs:
fastlane (2.226.0) fastlane (2.226.0)
CFPropertyList (>= 2.3, < 4.0.0) CFPropertyList (>= 2.3, < 4.0.0)
@ -58,30 +58,30 @@ GEM
artifactory (3.0.17) artifactory (3.0.17)
atomos (0.1.3) atomos (0.1.3)
aws-eventstream (1.3.0) aws-eventstream (1.3.0)
aws-partitions (1.1022.0) aws-partitions (1.1040.0)
aws-sdk-core (3.214.0) aws-sdk-core (3.216.0)
aws-eventstream (~> 1, >= 1.3.0) aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0) aws-partitions (~> 1, >= 1.992.0)
aws-sigv4 (~> 1.9) aws-sigv4 (~> 1.9)
jmespath (~> 1, >= 1.6.1) jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.96.0) aws-sdk-kms (1.97.0)
aws-sdk-core (~> 3, >= 3.210.0) aws-sdk-core (~> 3, >= 3.216.0)
aws-sigv4 (~> 1.5) aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.176.1) aws-sdk-s3 (1.178.0)
aws-sdk-core (~> 3, >= 3.210.0) aws-sdk-core (~> 3, >= 3.216.0)
aws-sdk-kms (~> 1) aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5) aws-sigv4 (~> 1.5)
aws-sigv4 (1.10.1) aws-sigv4 (1.11.0)
aws-eventstream (~> 1, >= 1.0.2) aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4) babosa (1.0.4)
base64 (0.2.0) base64 (0.2.0)
bigdecimal (3.1.8) bigdecimal (3.1.9)
claide (1.1.0) claide (1.1.0)
colored (1.2) colored (1.2)
colored2 (3.1.2) colored2 (3.1.2)
commander (4.6.0) commander (4.6.0)
highline (~> 2.0.0) highline (~> 2.0.0)
csv (3.3.0) csv (3.3.2)
declarative (0.0.20) declarative (0.0.20)
digest-crc (0.6.5) digest-crc (0.6.5)
rake (>= 12.0.0, < 14.0.0) rake (>= 12.0.0, < 14.0.0)
@ -108,8 +108,8 @@ GEM
faraday-em_synchrony (1.0.0) faraday-em_synchrony (1.0.0)
faraday-excon (1.1.0) faraday-excon (1.1.0)
faraday-httpclient (1.0.1) faraday-httpclient (1.0.1)
faraday-multipart (1.0.4) faraday-multipart (1.1.0)
multipart-post (~> 2) multipart-post (~> 2.0)
faraday-net_http (1.0.2) faraday-net_http (1.0.2)
faraday-net_http_persistent (1.2.0) faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0) faraday-patron (1.0.0)
@ -117,11 +117,10 @@ GEM
faraday-retry (1.0.3) faraday-retry (1.0.3)
faraday_middleware (1.2.1) faraday_middleware (1.2.1)
faraday (~> 1.0) faraday (~> 1.0)
fastimage (2.3.1) fastimage (2.4.0)
fastlane-plugin-translate_gpt (0.1.8.2) fastlane-plugin-translate_gpt (0.1.8.2)
loco_strings (~> 0.1.4.1) loco_strings (~> 0.1.4.1)
ruby-openai (~> 3.7) ruby-openai (~> 3.7)
fastlane-plugin-versioning (0.7.0)
fastlane-sirp (1.0.0) fastlane-sirp (1.0.0)
sysrandom (~> 1.0) sysrandom (~> 1.0)
gh_inspector (1.1.3) gh_inspector (1.1.3)
@ -170,8 +169,8 @@ GEM
multi_xml (>= 0.5.2) multi_xml (>= 0.5.2)
httpclient (2.8.3) httpclient (2.8.3)
jmespath (1.6.2) jmespath (1.6.2)
json (2.9.0) json (2.9.1)
jwt (2.9.3) jwt (2.10.1)
base64 base64
loco_strings (0.1.4.1) loco_strings (0.1.4.1)
nokogiri (~> 1.13, >= 1.13.8) nokogiri (~> 1.13, >= 1.13.8)
@ -185,14 +184,14 @@ GEM
nanaimo (0.4.0) nanaimo (0.4.0)
naturally (2.2.1) naturally (2.2.1)
nkf (0.2.0) nkf (0.2.0)
nokogiri (1.17.2) nokogiri (1.18.1)
mini_portile2 (~> 2.8.2) mini_portile2 (~> 2.8.2)
racc (~> 1.4) racc (~> 1.4)
nokogiri (1.17.2-arm64-darwin) nokogiri (1.18.1-arm64-darwin)
racc (~> 1.4) racc (~> 1.4)
optparse (0.6.0) optparse (0.6.0)
os (1.1.4) os (1.1.4)
plist (3.7.1) plist (3.7.2)
public_suffix (6.0.1) public_suffix (6.0.1)
racc (1.8.1) racc (1.8.1)
rake (13.2.1) rake (13.2.1)
@ -201,12 +200,12 @@ GEM
trailblazer-option (>= 0.1.1, < 0.2.0) trailblazer-option (>= 0.1.1, < 0.2.0)
uber (< 0.2.0) uber (< 0.2.0)
retriable (3.1.2) retriable (3.1.2)
rexml (3.3.9) rexml (3.4.0)
rouge (3.28.0) rouge (3.28.0)
ruby-openai (3.7.0) ruby-openai (3.7.0)
httparty (>= 0.18.1) httparty (>= 0.18.1)
ruby2_keywords (0.0.5) ruby2_keywords (0.0.5)
rubyzip (2.3.2) rubyzip (2.4.1)
security (0.1.5) security (0.1.5)
signet (0.19.0) signet (0.19.0)
addressable (~> 2.8) addressable (~> 2.8)
@ -248,7 +247,6 @@ DEPENDENCIES
dotenv dotenv
fastlane! fastlane!
fastlane-plugin-translate_gpt fastlane-plugin-translate_gpt
fastlane-plugin-versioning
BUNDLED WITH BUNDLED WITH
2.5.17 2.5.17

@ -1 +1 @@
Subproject commit d46881b818ac532032324ad518c89779b7ae45a1 Subproject commit f6d85fdf1e186fa13c820166f3a414962bcc52c1

View File

@ -262,17 +262,7 @@
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedRootGroup section */ /* Begin PBXFileSystemSynchronizedRootGroup section */
0E3D7F242D347A41003F1C4B /* Packages */ = { 0E3D7F242D347A41003F1C4B /* Packages */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Packages; sourceTree = "<group>"; };
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
);
explicitFileTypes = {
};
explicitFolders = (
);
path = Packages;
sourceTree = "<group>";
};
/* End PBXFileSystemSynchronizedRootGroup section */ /* End PBXFileSystemSynchronizedRootGroup section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
@ -1229,7 +1219,6 @@
"ASSETCATALOG_COMPILER_APPICON_NAME[sdk=appletvos*]" = TV; "ASSETCATALOG_COMPILER_APPICON_NAME[sdk=appletvos*]" = TV;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = Passepartout/App/App.entitlements; CODE_SIGN_ENTITLEMENTS = Passepartout/App/App.entitlements;
CURRENT_PROJECT_VERSION = 3718;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
INFOPLIST_FILE = Passepartout/App/App.plist; INFOPLIST_FILE = Passepartout/App/App.plist;
INFOPLIST_KEY_CFBundleDisplayName = "$(TARGET_NAME)"; INFOPLIST_KEY_CFBundleDisplayName = "$(TARGET_NAME)";
@ -1250,7 +1239,6 @@
INFOPLIST_KEY_UISupportsDocumentBrowser = NO; INFOPLIST_KEY_UISupportsDocumentBrowser = NO;
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
MARKETING_VERSION = 3.0.1;
PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_APP_ID)"; PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_APP_ID)";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
@ -1268,7 +1256,6 @@
"ASSETCATALOG_COMPILER_APPICON_NAME[sdk=appletvos*]" = TV; "ASSETCATALOG_COMPILER_APPICON_NAME[sdk=appletvos*]" = TV;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = Passepartout/App/App.entitlements; CODE_SIGN_ENTITLEMENTS = Passepartout/App/App.entitlements;
CURRENT_PROJECT_VERSION = 3718;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
INFOPLIST_FILE = Passepartout/App/App.plist; INFOPLIST_FILE = Passepartout/App/App.plist;
INFOPLIST_KEY_CFBundleDisplayName = "$(TARGET_NAME)"; INFOPLIST_KEY_CFBundleDisplayName = "$(TARGET_NAME)";
@ -1289,7 +1276,6 @@
INFOPLIST_KEY_UISupportsDocumentBrowser = NO; INFOPLIST_KEY_UISupportsDocumentBrowser = NO;
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
MARKETING_VERSION = 3.0.1;
PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_APP_ID)"; PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_APP_ID)";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
@ -1329,7 +1315,6 @@
buildSettings = { buildSettings = {
CODE_SIGN_ENTITLEMENTS = Passepartout/LoginItem/LoginItem.entitlements; CODE_SIGN_ENTITLEMENTS = Passepartout/LoginItem/LoginItem.entitlements;
CODE_SIGN_STYLE = Manual; CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 3718;
ENABLE_HARDENED_RUNTIME = YES; ENABLE_HARDENED_RUNTIME = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES;
INFOPLIST_KEY_CFBundleDisplayName = "$(TARGET_NAME)"; INFOPLIST_KEY_CFBundleDisplayName = "$(TARGET_NAME)";
@ -1338,7 +1323,6 @@
INFOPLIST_KEY_NSHumanReadableCopyright = "$(CFG_COPYRIGHT)"; INFOPLIST_KEY_NSHumanReadableCopyright = "$(CFG_COPYRIGHT)";
INFOPLIST_KEY_UIRequiredDeviceCapabilities = arm64; INFOPLIST_KEY_UIRequiredDeviceCapabilities = arm64;
LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks"; LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks";
MARKETING_VERSION = 3.0.0;
PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_LOGIN_ITEM_ID)"; PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_LOGIN_ITEM_ID)";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx; SDKROOT = macosx;
@ -1354,7 +1338,6 @@
buildSettings = { buildSettings = {
CODE_SIGN_ENTITLEMENTS = Passepartout/LoginItem/LoginItem.entitlements; CODE_SIGN_ENTITLEMENTS = Passepartout/LoginItem/LoginItem.entitlements;
CODE_SIGN_STYLE = Manual; CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 3718;
ENABLE_HARDENED_RUNTIME = YES; ENABLE_HARDENED_RUNTIME = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES;
INFOPLIST_KEY_CFBundleDisplayName = "$(TARGET_NAME)"; INFOPLIST_KEY_CFBundleDisplayName = "$(TARGET_NAME)";
@ -1363,7 +1346,6 @@
INFOPLIST_KEY_NSHumanReadableCopyright = "$(CFG_COPYRIGHT)"; INFOPLIST_KEY_NSHumanReadableCopyright = "$(CFG_COPYRIGHT)";
INFOPLIST_KEY_UIRequiredDeviceCapabilities = arm64; INFOPLIST_KEY_UIRequiredDeviceCapabilities = arm64;
LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks"; LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks";
MARKETING_VERSION = 3.0.0;
PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_LOGIN_ITEM_ID)"; PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_LOGIN_ITEM_ID)";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx; SDKROOT = macosx;
@ -1408,7 +1390,6 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
CODE_SIGN_ENTITLEMENTS = Passepartout/Tunnel/Tunnel.entitlements; CODE_SIGN_ENTITLEMENTS = Passepartout/Tunnel/Tunnel.entitlements;
CURRENT_PROJECT_VERSION = 3718;
INFOPLIST_FILE = Passepartout/Tunnel/Tunnel.plist; INFOPLIST_FILE = Passepartout/Tunnel/Tunnel.plist;
INFOPLIST_KEY_CFBundleDisplayName = "$(TARGET_NAME)"; INFOPLIST_KEY_CFBundleDisplayName = "$(TARGET_NAME)";
INFOPLIST_KEY_NSHumanReadableCopyright = "$(CFG_COPYRIGHT)"; INFOPLIST_KEY_NSHumanReadableCopyright = "$(CFG_COPYRIGHT)";
@ -1418,7 +1399,6 @@
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../../../../Frameworks"; "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../../../../Frameworks";
MARKETING_VERSION = 3.0.0;
PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_TUNNEL_ID)"; PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_TUNNEL_ID)";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
@ -1434,14 +1414,12 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
CODE_SIGN_ENTITLEMENTS = Passepartout/Tunnel/Tunnel.entitlements; CODE_SIGN_ENTITLEMENTS = Passepartout/Tunnel/Tunnel.entitlements;
CURRENT_PROJECT_VERSION = 3718;
INFOPLIST_FILE = Passepartout/Tunnel/Tunnel.plist; INFOPLIST_FILE = Passepartout/Tunnel/Tunnel.plist;
INFOPLIST_KEY_CFBundleDisplayName = "$(TARGET_NAME)"; INFOPLIST_KEY_CFBundleDisplayName = "$(TARGET_NAME)";
INFOPLIST_KEY_NSHumanReadableCopyright = "$(CFG_COPYRIGHT)"; INFOPLIST_KEY_NSHumanReadableCopyright = "$(CFG_COPYRIGHT)";
INFOPLIST_KEY_UIRequiredDeviceCapabilities = arm64; INFOPLIST_KEY_UIRequiredDeviceCapabilities = arm64;
LD_RUNPATH_SEARCH_PATHS = "@executable_path/../../Frameworks"; LD_RUNPATH_SEARCH_PATHS = "@executable_path/../../Frameworks";
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../../../../Frameworks"; "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../../../../Frameworks";
MARKETING_VERSION = 3.0.0;
PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_TUNNEL_ID)"; PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_TUNNEL_ID)";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
@ -1457,7 +1435,6 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
CODE_SIGN_ENTITLEMENTS = Passepartout/Intents/Intents.entitlements; CODE_SIGN_ENTITLEMENTS = Passepartout/Intents/Intents.entitlements;
CURRENT_PROJECT_VERSION = 3718;
ENABLE_USER_SCRIPT_SANDBOXING = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = Passepartout/Intents/Intents.plist; INFOPLIST_FILE = Passepartout/Intents/Intents.plist;
@ -1469,7 +1446,6 @@
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../../../../Frameworks"; "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../../../../Frameworks";
MARKETING_VERSION = 3.0.0;
PRODUCT_BUNDLE_IDENTIFIER = com.algoritmico.ios.Passepartout.Intents; PRODUCT_BUNDLE_IDENTIFIER = com.algoritmico.ios.Passepartout.Intents;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
@ -1488,7 +1464,6 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
CODE_SIGN_ENTITLEMENTS = Passepartout/Intents/Intents.entitlements; CODE_SIGN_ENTITLEMENTS = Passepartout/Intents/Intents.entitlements;
CURRENT_PROJECT_VERSION = 3718;
ENABLE_USER_SCRIPT_SANDBOXING = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = Passepartout/Intents/Intents.plist; INFOPLIST_FILE = Passepartout/Intents/Intents.plist;
@ -1497,7 +1472,6 @@
INFOPLIST_KEY_UIRequiredDeviceCapabilities = arm64; INFOPLIST_KEY_UIRequiredDeviceCapabilities = arm64;
LD_RUNPATH_SEARCH_PATHS = "@executable_path/../../Frameworks"; LD_RUNPATH_SEARCH_PATHS = "@executable_path/../../Frameworks";
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../../../../Frameworks"; "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../../../../Frameworks";
MARKETING_VERSION = 3.0.0;
PRODUCT_BUNDLE_IDENTIFIER = com.algoritmico.ios.Passepartout.Intents; PRODUCT_BUNDLE_IDENTIFIER = com.algoritmico.ios.Passepartout.Intents;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
"PROVISIONING_PROFILE_SPECIFIER[sdk=appletvos*]" = "match AppStore com.algoritmico.ios.Passepartout.Intents tvos"; "PROVISIONING_PROFILE_SPECIFIER[sdk=appletvos*]" = "match AppStore com.algoritmico.ios.Passepartout.Intents tvos";

View File

@ -26,6 +26,9 @@
// Configuration settings file format documentation can be found at: // Configuration settings file format documentation can be found at:
// https://help.apple.com/xcode/#/dev745c5c974 // https://help.apple.com/xcode/#/dev745c5c974
MARKETING_VERSION = 3.0.1
CURRENT_PROJECT_VERSION = 3718
// tweak these based on app and team // tweak these based on app and team
CFG_APP_ID = com.algoritmico.ios.Passepartout CFG_APP_ID = com.algoritmico.ios.Passepartout
CFG_APP_STORE_ID = 1433648537 CFG_APP_STORE_ID = 1433648537

View File

@ -1,4 +1,4 @@
#!/bin/sh #!/bin/sh
cwd=`dirname $0` cwd=`dirname $0`
xcodeproj="$cwd/../Passepartout.xcodeproj/project.pbxproj" xcconfig="$cwd/../Passepartout/Config.xcconfig"
$cwd/xcode-get-setting.sh $xcodeproj CURRENT_PROJECT_VERSION "([0-9]+)" $cwd/xcconfig-get.sh $xcconfig CURRENT_PROJECT_VERSION

View File

@ -1,4 +1,4 @@
#!/bin/sh #!/bin/sh
cwd=`dirname $0` cwd=`dirname $0`
xcodeproj="$cwd/../Passepartout.xcodeproj/project.pbxproj" xcconfig="$cwd/../Passepartout/Config.xcconfig"
$cwd/xcode-get-setting.sh $xcodeproj MARKETING_VERSION "([0-9]\.[0-9]\.[0-9])" $cwd/xcconfig-get.sh $xcconfig MARKETING_VERSION

12
ci/xcconfig-get.sh Executable file
View File

@ -0,0 +1,12 @@
#!/bin/bash
if [[ -z "$1" ]]; then
echo "Path to Xcode project required"
exit 1
fi
if [[ -z "$2" ]]; then
echo "Setting key required"
exit 1
fi
xcconfig="$1"
setting_key="$2"
grep $setting_key $xcconfig | sed -E "s/^.*${setting_key} = (.*)$/\1/"

View File

@ -8,10 +8,10 @@ if [[ -z "$2" ]]; then
exit 1 exit 1
fi fi
if [[ -z "$3" ]]; then if [[ -z "$3" ]]; then
echo "Setting regex required" echo "Setting value required"
exit 1 exit 1
fi fi
xcodeproj="$1" xcconfig="$1"
setting_key="$2" setting_key="$2"
setting_pattern="$3" setting_value="$3"
grep $setting_key $xcodeproj | sed -E "s/^.*${setting_key} = ${setting_pattern};/\1/" | uniq | tr -d '\n' sed -i "" -E "s/^(.*${setting_key} =) .*$/\1 ${setting_value}/" $xcconfig

View File

@ -7,4 +7,5 @@ FL_VERSION_NUMBER_TARGET="Passepartout"
FL_BUILD_NUMBER_PROJECT="Passepartout.xcodeproj" FL_BUILD_NUMBER_PROJECT="Passepartout.xcodeproj"
PILOT_BETA_APP_DESCRIPTION="Passepartout is your go-to app for VPN and privacy." PILOT_BETA_APP_DESCRIPTION="Passepartout is your go-to app for VPN and privacy."
XCCONFIG_PATH="Passepartout/Config.xcconfig"
API_PACKAGE_PATH="Packages/App/Sources/CommonAPI/API" API_PACKAGE_PATH="Packages/App/Sources/CommonAPI/API"

View File

@ -15,9 +15,12 @@
fastlane_require "dotenv" fastlane_require "dotenv"
fastlane_require "fileutils" fastlane_require "fileutils"
load "xcconfig.rb"
Dotenv.load ".env.secret" Dotenv.load ".env.secret"
setup_ci if ENV["CI"] setup_ci if ENV["CI"]
xcconfig = ENV["XCCONFIG_PATH"]
api = ENV["API_PACKAGE_PATH"] api = ENV["API_PACKAGE_PATH"]
metadata = "fastlane/metadata" metadata = "fastlane/metadata"
logname = "CHANGELOG.txt" logname = "CHANGELOG.txt"
@ -49,23 +52,32 @@ lane :bump do |options|
UI.user_error!("CHANGELOG editor cancelled") UI.user_error!("CHANGELOG editor cancelled")
end end
end end
version = options[:version]
build = options[:build] build = options[:build]
increment_build_number(build_number: build) version = options[:version]
unless version.nil? || version.empty? if build.nil? || build.empty?
increment_version_number_in_xcodeproj(version_number: version) build = xcconfig_get("../#{xcconfig}", "CURRENT_PROJECT_VERSION").to_i + 1
end end
git_add( xcconfig_set("../#{xcconfig}", "CURRENT_PROJECT_VERSION", build)
path: [api, metadata, logname] unless version.nil? || version.empty?
) xcconfig_set("../#{xcconfig}", "MARKETING_VERSION", version)
commit_version_bump( end
message: "Bump version", system("../scripts/copy-release-notes.sh")
force: true git_commit(
) path: [
add_git_tag( xcconfig,
includes_lane: false, api,
sign: true metadata,
logname
],
message: "Bump version"
) )
unless options[:no_tag]
add_git_tag(
includes_lane: false,
sign: true,
build_number: build
)
end
end end
desc "Run Xcode tests" desc "Run Xcode tests"

View File

@ -3,4 +3,3 @@
# Ensure this file is checked in to source control! # Ensure this file is checked in to source control!
gem 'fastlane-plugin-translate_gpt' gem 'fastlane-plugin-translate_gpt'
gem 'fastlane-plugin-versioning'

23
fastlane/xcconfig.rb Normal file
View File

@ -0,0 +1,23 @@
def xcconfig_set(path, key, value)
unless File.exist?(path)
raise "File not found: #{path}"
end
content = File.read(path)
pattern = /^(#{key}) = .*$/
replacement = "\\1 = #{value}"
modified_content = content.gsub(pattern, replacement)
File.write(path, modified_content)
end
def xcconfig_get(path, key)
unless File.exist?(path)
raise "File not found: #{path}"
end
pattern = /^#{key} = (.*)$/
File.foreach(path) do |line|
if (match = line.match(pattern))
return match[1]
end
end
nil
end

View File

@ -28,6 +28,10 @@ while [[ $# -gt 0 ]]; do
opt_no_log="no_log:true" opt_no_log="no_log:true"
shift # past argument shift # past argument
;; ;;
-nt)
opt_no_tag="no_tag:true"
shift
;;
-d) -d)
opt_dry_run=1 opt_dry_run=1
shift # past argument shift # past argument
@ -47,8 +51,7 @@ set -- "${positional_args[@]}" # restore positional parameters
cwd=`dirname $0` cwd=`dirname $0`
cmd_api="$cwd/update-bundled-api.sh" cmd_api="$cwd/update-bundled-api.sh"
cmd_release_notes="$cwd/copy-release-notes.sh" cmd_fastlane="cd $cwd/.. && bundle exec fastlane bump $opt_version $opt_build $opt_since $opt_no_log $opt_no_tag"
cmd_fastlane="cd $cwd/.. && bundle exec fastlane bump $opt_version $opt_build $opt_since $opt_no_log"
if [[ -n $opt_dry_run ]]; then if [[ -n $opt_dry_run ]]; then
echo "version = $opt_version" echo "version = $opt_version"
@ -56,10 +59,10 @@ if [[ -n $opt_dry_run ]]; then
echo "since = $opt_since" echo "since = $opt_since"
echo "no_api = $opt_no_api" echo "no_api = $opt_no_api"
echo "no_log = $opt_no_log" echo "no_log = $opt_no_log"
echo "no_tag = $opt_no_tag"
if [[ -z $opt_no_api ]]; then if [[ -z $opt_no_api ]]; then
echo "$cmd_api" echo "$cmd_api"
fi fi
echo "$cmd_release_notes"
echo "$cmd_fastlane" echo "$cmd_fastlane"
exit 0 exit 0
fi fi
@ -67,5 +70,4 @@ fi
if [[ -z $opt_no_api ]]; then if [[ -z $opt_no_api ]]; then
eval "$cmd_api" eval "$cmd_api"
fi fi
eval "$cmd_release_notes"
eval "$cmd_fastlane" eval "$cmd_fastlane"