mirror of
https://github.com/element-hq/element-x-ios.git
synced 2025-03-10 13:37:11 +00:00
Xcode Cloud Support (#234)
* Removed now unnecessary code from alpha builds * Add nightly build configuration * Update ruby dependencies * Stop changing the app name for PRs and Nightly, the icon is sufficient * Add ITSAppUsesNonExemptEncryption flag as per https://developer.apple.com/documentation/bundleresources/information_property_list/itsappusesnonexemptencryption and https://stackoverflow.com/questions/35841117/missing-compliance-status-in-testflight * Updated app groups to reflect various environments: production, nightly and PR. Remove keychain access group as they should be inferred from the access groups
This commit is contained in:
parent
aa5a2e0ee8
commit
80babf1cd8
11
.github/workflows/release-alpha.yml
vendored
11
.github/workflows/release-alpha.yml
vendored
@ -36,7 +36,7 @@ jobs:
|
||||
# Common setup
|
||||
- name: Brew bundle
|
||||
run:
|
||||
brew update && brew bundle && brew upgrade swiftformat
|
||||
brew bundle
|
||||
|
||||
- name: SwiftFormat
|
||||
run:
|
||||
@ -46,13 +46,6 @@ jobs:
|
||||
run: |
|
||||
bundle config path vendor/bundle
|
||||
bundle install --jobs 4 --retry 3
|
||||
|
||||
- uses: actions/setup-python@v3
|
||||
with:
|
||||
python-version: '3.x'
|
||||
cache: 'pip'
|
||||
|
||||
- run: pip install -r requirements.txt
|
||||
|
||||
# Import alpha release private signing certificate
|
||||
- name: Import signing certificate
|
||||
@ -85,7 +78,5 @@ jobs:
|
||||

|
||||
|
||||
If you can't scan the QR code you can install the build via this link: ${{ env.DIAWI_FILE_LINK }}
|
||||
# Enables to identify and update existing Ad-hoc release message on new commit in the PR
|
||||
identifier: "GITHUB_COMMENT_ADHOC_RELEASE"
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
@ -2845,7 +2845,6 @@
|
||||
62E1B7866DF0ED442C39A83B /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
APP_GROUP_IDENTIFIER = group.io.element;
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_ENTITLEMENTS = ElementX/SupportingFiles/ElementX.entitlements;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
@ -2857,7 +2856,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0.4;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = io.element.elementx;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "$(BASE_BUNDLE_IDENTIFIER)";
|
||||
PRODUCT_NAME = ElementX;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "ElementX/SupportingFiles/ElementX-Bridging-Header.h";
|
||||
@ -2869,7 +2868,6 @@
|
||||
6897D5BC19A2EA6ABD57DE7E /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
APP_GROUP_IDENTIFIER = group.io.element;
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_ENTITLEMENTS = ElementX/SupportingFiles/ElementX.entitlements;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
@ -2881,7 +2879,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0.4;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = io.element.elementx;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "$(BASE_BUNDLE_IDENTIFIER)";
|
||||
PRODUCT_NAME = ElementX;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "ElementX/SupportingFiles/ElementX-Bridging-Header.h";
|
||||
@ -2900,7 +2898,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = io.element.elementx.unit.tests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.unit.tests";
|
||||
PRODUCT_NAME = UnitTests;
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
@ -2912,6 +2910,9 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
APP_GROUP_IDENTIFIER = "group.$(BASE_APP_GROUP_IDENTIFIER)";
|
||||
BASE_APP_GROUP_IDENTIFIER = io.element;
|
||||
BASE_BUNDLE_IDENTIFIER = io.element.elementx;
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
@ -2971,6 +2972,9 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
APP_GROUP_IDENTIFIER = "group.$(BASE_APP_GROUP_IDENTIFIER)";
|
||||
BASE_APP_GROUP_IDENTIFIER = io.element;
|
||||
BASE_BUNDLE_IDENTIFIER = io.element.elementx;
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
@ -3043,7 +3047,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = io.element.elementx.unit.tests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.unit.tests";
|
||||
PRODUCT_NAME = UnitTests;
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
@ -3061,7 +3065,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = io.element.elementx.ui.tests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.ui.tests";
|
||||
PRODUCT_NAME = UITests;
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
@ -3079,7 +3083,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = io.element.elementx.ui.tests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.ui.tests";
|
||||
PRODUCT_NAME = UITests;
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
@ -3097,7 +3101,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = io.element.elementx.integration.tests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.integration.tests";
|
||||
PRODUCT_NAME = IntegrationTests;
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
@ -3115,7 +3119,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = io.element.elementx.integration.tests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.integration.tests";
|
||||
PRODUCT_NAME = IntegrationTests;
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
|
@ -10,9 +10,5 @@
|
||||
</array>
|
||||
<key>com.apple.security.network.client</key>
|
||||
<true/>
|
||||
<key>keychain-access-groups</key>
|
||||
<array>
|
||||
<string>$(AppIdentifierPrefix)io.element.elementx</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
@ -20,6 +20,8 @@
|
||||
<string>$(MARKETING_VERSION)</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
|
@ -46,12 +46,12 @@ targets:
|
||||
UIInterfaceOrientationLandscapeRight
|
||||
]
|
||||
appGroupIdentifier: $(APP_GROUP_IDENTIFIER)
|
||||
ITSAppUsesNonExemptEncryption: false
|
||||
|
||||
settings:
|
||||
base:
|
||||
PRODUCT_NAME: ElementX
|
||||
PRODUCT_BUNDLE_IDENTIFIER: io.element.elementx
|
||||
APP_GROUP_IDENTIFIER: group.io.element
|
||||
PRODUCT_BUNDLE_IDENTIFIER: $(BASE_BUNDLE_IDENTIFIER)
|
||||
MARKETING_VERSION: 1.0.4
|
||||
CURRENT_PROJECT_VERSION: 1
|
||||
DEVELOPMENT_TEAM: 7J4U792NQT
|
||||
|
59
Gemfile.lock
59
Gemfile.lock
@ -3,19 +3,18 @@ GEM
|
||||
specs:
|
||||
CFPropertyList (3.0.5)
|
||||
rexml
|
||||
activesupport (7.0.3.1)
|
||||
activesupport (7.0.4)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 1.6, < 2)
|
||||
minitest (>= 5.1)
|
||||
tzinfo (~> 2.0)
|
||||
zeitwerk (~> 2.3)
|
||||
addressable (2.8.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
addressable (2.8.1)
|
||||
public_suffix (>= 2.0.2, < 6.0)
|
||||
artifactory (3.0.15)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.2.0)
|
||||
aws-partitions (1.610.0)
|
||||
aws-sdk-core (3.131.3)
|
||||
aws-partitions (1.647.0)
|
||||
aws-sdk-core (3.161.0)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
aws-partitions (~> 1, >= 1.525.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
@ -27,7 +26,7 @@ GEM
|
||||
aws-sdk-core (~> 3, >= 3.127.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.4)
|
||||
aws-sigv4 (1.5.1)
|
||||
aws-sigv4 (1.5.2)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
babosa (1.0.4)
|
||||
claide (1.1.0)
|
||||
@ -42,10 +41,10 @@ GEM
|
||||
rake (>= 12.0.0, < 14.0.0)
|
||||
domain_name (0.5.20190701)
|
||||
unf (>= 0.0.5, < 1.0.0)
|
||||
dotenv (2.7.6)
|
||||
dotenv (2.8.1)
|
||||
emoji_regex (3.2.3)
|
||||
excon (0.92.4)
|
||||
faraday (1.10.0)
|
||||
excon (0.93.0)
|
||||
faraday (1.10.2)
|
||||
faraday-em_http (~> 1.0)
|
||||
faraday-em_synchrony (~> 1.0)
|
||||
faraday-excon (~> 1.1)
|
||||
@ -74,7 +73,7 @@ GEM
|
||||
faraday_middleware (1.2.0)
|
||||
faraday (~> 1.0)
|
||||
fastimage (2.2.6)
|
||||
fastlane (2.208.0)
|
||||
fastlane (2.210.1)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.8, < 3.0.0)
|
||||
artifactory (~> 3.0)
|
||||
@ -116,13 +115,14 @@ GEM
|
||||
fastlane-plugin-brew (0.1.1)
|
||||
fastlane-plugin-diawi (2.1.0)
|
||||
rest-client (>= 2.0.0)
|
||||
fastlane-plugin-sentry (1.12.2)
|
||||
fastlane-plugin-sentry (1.14.0)
|
||||
os (~> 1.1, >= 1.1.4)
|
||||
fastlane-plugin-xcodegen (1.1.0)
|
||||
fastlane-plugin-brew (~> 0.1.1)
|
||||
gh_inspector (1.1.3)
|
||||
google-apis-androidpublisher_v3 (0.25.0)
|
||||
google-apis-core (>= 0.7, < 2.a)
|
||||
google-apis-core (0.7.0)
|
||||
google-apis-androidpublisher_v3 (0.29.0)
|
||||
google-apis-core (>= 0.9.0, < 2.a)
|
||||
google-apis-core (0.9.1)
|
||||
addressable (~> 2.5, >= 2.5.1)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
httpclient (>= 2.8.1, < 3.a)
|
||||
@ -131,27 +131,27 @@ GEM
|
||||
retriable (>= 2.0, < 4.a)
|
||||
rexml
|
||||
webrick
|
||||
google-apis-iamcredentials_v1 (0.13.0)
|
||||
google-apis-core (>= 0.7, < 2.a)
|
||||
google-apis-playcustomapp_v1 (0.10.0)
|
||||
google-apis-core (>= 0.7, < 2.a)
|
||||
google-apis-storage_v1 (0.18.0)
|
||||
google-apis-core (>= 0.7, < 2.a)
|
||||
google-apis-iamcredentials_v1 (0.15.0)
|
||||
google-apis-core (>= 0.9.0, < 2.a)
|
||||
google-apis-playcustomapp_v1 (0.11.0)
|
||||
google-apis-core (>= 0.9.0, < 2.a)
|
||||
google-apis-storage_v1 (0.19.0)
|
||||
google-apis-core (>= 0.9.0, < 2.a)
|
||||
google-cloud-core (1.6.0)
|
||||
google-cloud-env (~> 1.0)
|
||||
google-cloud-errors (~> 1.0)
|
||||
google-cloud-env (1.6.0)
|
||||
faraday (>= 0.17.3, < 3.0)
|
||||
google-cloud-errors (1.2.0)
|
||||
google-cloud-storage (1.37.0)
|
||||
google-cloud-errors (1.3.0)
|
||||
google-cloud-storage (1.43.0)
|
||||
addressable (~> 2.8)
|
||||
digest-crc (~> 0.4)
|
||||
google-apis-iamcredentials_v1 (~> 0.1)
|
||||
google-apis-storage_v1 (~> 0.1)
|
||||
google-apis-storage_v1 (~> 0.19.0)
|
||||
google-cloud-core (~> 1.6)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
mini_mime (~> 1.0)
|
||||
googleauth (1.2.0)
|
||||
googleauth (1.3.0)
|
||||
faraday (>= 0.17.3, < 3.a)
|
||||
jwt (>= 1.4, < 3.0)
|
||||
memoist (~> 0.16)
|
||||
@ -167,7 +167,7 @@ GEM
|
||||
concurrent-ruby (~> 1.0)
|
||||
jmespath (1.6.1)
|
||||
json (2.6.2)
|
||||
jwt (2.4.1)
|
||||
jwt (2.5.0)
|
||||
memoist (0.16.2)
|
||||
mime-types (3.4.1)
|
||||
mime-types-data (~> 3.2015)
|
||||
@ -175,19 +175,19 @@ GEM
|
||||
mini_magick (4.11.0)
|
||||
mini_mime (1.1.2)
|
||||
mini_portile2 (2.8.0)
|
||||
minitest (5.16.2)
|
||||
minitest (5.16.3)
|
||||
multi_json (1.15.0)
|
||||
multipart-post (2.0.0)
|
||||
nanaimo (0.3.0)
|
||||
naturally (2.2.1)
|
||||
netrc (0.11.0)
|
||||
nokogiri (1.13.8)
|
||||
nokogiri (1.13.9)
|
||||
mini_portile2 (~> 2.8.0)
|
||||
racc (~> 1.4)
|
||||
optparse (0.1.1)
|
||||
os (1.1.4)
|
||||
plist (3.6.0)
|
||||
public_suffix (4.0.7)
|
||||
public_suffix (5.0.0)
|
||||
racc (1.6.0)
|
||||
rake (13.0.6)
|
||||
representable (3.2.0)
|
||||
@ -250,7 +250,6 @@ GEM
|
||||
rouge (~> 2.0.7)
|
||||
xcpretty-travis-formatter (1.0.1)
|
||||
xcpretty (~> 0.2, >= 0.0.7)
|
||||
zeitwerk (2.6.0)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
@ -32,7 +32,7 @@ targets:
|
||||
settings:
|
||||
base:
|
||||
PRODUCT_NAME: IntegrationTests
|
||||
PRODUCT_BUNDLE_IDENTIFIER: io.element.elementx.integration.tests
|
||||
PRODUCT_BUNDLE_IDENTIFIER: ${BASE_BUNDLE_IDENTIFIER}.integration.tests
|
||||
debug:
|
||||
release:
|
||||
|
||||
|
@ -60,7 +60,7 @@ targets:
|
||||
settings:
|
||||
base:
|
||||
PRODUCT_NAME: UITests
|
||||
PRODUCT_BUNDLE_IDENTIFIER: io.element.elementx.ui.tests
|
||||
PRODUCT_BUNDLE_IDENTIFIER: ${BASE_BUNDLE_IDENTIFIER}.ui.tests
|
||||
debug:
|
||||
release:
|
||||
|
||||
|
@ -40,7 +40,7 @@ targets:
|
||||
settings:
|
||||
base:
|
||||
PRODUCT_NAME: UnitTests
|
||||
PRODUCT_BUNDLE_IDENTIFIER: io.element.elementx.unit.tests
|
||||
PRODUCT_BUNDLE_IDENTIFIER: ${BASE_BUNDLE_IDENTIFIER}.unit.tests
|
||||
debug:
|
||||
release:
|
||||
|
||||
|
37
ci_scripts/ci_common.sh
Executable file
37
ci_scripts/ci_common.sh
Executable file
@ -0,0 +1,37 @@
|
||||
#!/bin/sh
|
||||
|
||||
setup_environment () {
|
||||
# Return on failures
|
||||
# Fail when expanding unset variables
|
||||
# Trace each command before executing it
|
||||
set -eEu
|
||||
|
||||
# Move to the project root
|
||||
cd ..
|
||||
|
||||
# Prevent installing dependencies in system directories
|
||||
echo 'export GEM_HOME=$HOME/.gem' >>~/.zshrc
|
||||
echo 'export PATH=$GEM_HOME/bin:$PATH' >>~/.zshrc
|
||||
echo 'export PATH="/usr/local/opt/ruby@2.7/bin:$PATH"' >> ~/.zshrc
|
||||
|
||||
export GEM_HOME=$HOME/.gem
|
||||
export PATH=$GEM_HOME/bin:$PATH
|
||||
export PATH="/usr/local/opt/ruby@2.7/bin:$PATH"
|
||||
|
||||
# Things don't work well on the default ruby version
|
||||
brew install "ruby@2.7"
|
||||
|
||||
gem install bundler
|
||||
|
||||
bundle config path vendor/bundle
|
||||
bundle install --jobs 4 --retry 3
|
||||
}
|
||||
|
||||
install_brew_dependencies () {
|
||||
brew install "xcodegen"
|
||||
brew install "imagemagick"
|
||||
}
|
||||
|
||||
install_python_dependencies () {
|
||||
pip3 install -r requirements.txt # Install towncrier for generating changelogs
|
||||
}
|
11
ci_scripts/ci_post_clone.sh
Executable file
11
ci_scripts/ci_post_clone.sh
Executable file
@ -0,0 +1,11 @@
|
||||
#!/bin/sh
|
||||
|
||||
source ci_common.sh
|
||||
|
||||
if [ "$CI_WORKFLOW" = "Nightly" ]; then
|
||||
setup_environment
|
||||
|
||||
install_brew_dependencies
|
||||
|
||||
bundle exec fastlane config_nightly
|
||||
fi
|
15
ci_scripts/ci_post_xcodebuild.sh
Executable file
15
ci_scripts/ci_post_xcodebuild.sh
Executable file
@ -0,0 +1,15 @@
|
||||
#!/bin/sh
|
||||
|
||||
source ci_common.sh
|
||||
|
||||
setup_environment
|
||||
|
||||
if [ "$CI_WORKFLOW" = "Release" ]; then
|
||||
install_python_dependencies
|
||||
|
||||
bundle exec fastlane release_to_github
|
||||
bundle exec fastlane prepare_next_release
|
||||
fi
|
||||
|
||||
# Upload dsyms no matter the workflow
|
||||
bundle exec fastlane upload_dsyms_to_sentry dsym_path:"$CI_ARCHIVE_PATH/dSYMs"
|
@ -6,11 +6,8 @@ before_all do
|
||||
end
|
||||
|
||||
lane :alpha do
|
||||
|
||||
config_xcodegen_alpha()
|
||||
|
||||
xcodegen(spec: "project.yml")
|
||||
|
||||
provisioning_profile_name = "ElementX PR Ad Hoc"
|
||||
bundle_identifier = "io.element.elementx.pr"
|
||||
code_signing_identity = "Apple Distribution: Vector Creations Limited (7J4U792NQT)"
|
||||
@ -29,12 +26,6 @@ lane :alpha do
|
||||
adhoc: true
|
||||
)
|
||||
|
||||
version = ENV["GITHUB_PR_NUMBER"]
|
||||
|
||||
update_app_icon(caption_text: "PR #{version}")
|
||||
|
||||
bump_build_number()
|
||||
|
||||
build_ios_app(
|
||||
scheme: "ElementX",
|
||||
clean: true,
|
||||
@ -48,19 +39,6 @@ lane :alpha do
|
||||
)
|
||||
|
||||
upload_to_diawi()
|
||||
|
||||
end
|
||||
|
||||
lane :github_release do
|
||||
build_adhoc()
|
||||
|
||||
upload_to_diawi()
|
||||
|
||||
release_to_github()
|
||||
|
||||
prepare_next_release()
|
||||
|
||||
upload_dsyms_to_sentry()
|
||||
end
|
||||
|
||||
lane :app_store_release do
|
||||
@ -70,24 +48,7 @@ lane :app_store_release do
|
||||
|
||||
prepare_next_release()
|
||||
|
||||
upload_dsyms_to_sentry()
|
||||
end
|
||||
|
||||
|
||||
lane :build_adhoc do
|
||||
bump_build_number()
|
||||
|
||||
build_ios_app(
|
||||
scheme: "ElementX",
|
||||
clean: true,
|
||||
export_method: "ad-hoc",
|
||||
output_directory: "build",
|
||||
export_options: {
|
||||
provisioningProfiles: {
|
||||
"io.element.elementx" => "ElementX Ad Hoc",
|
||||
}
|
||||
}
|
||||
)
|
||||
upload_dsyms_to_sentry(dsym_path: './build/ElementX.app.dSYM.zip')
|
||||
end
|
||||
|
||||
lane :build_release do
|
||||
@ -141,47 +102,41 @@ lane :integration_tests do
|
||||
)
|
||||
end
|
||||
|
||||
private_lane :bump_build_number do
|
||||
# Increment build number to current date
|
||||
build_number = Time.now.strftime("%Y%m%d%H%M")
|
||||
increment_build_number(build_number: build_number)
|
||||
end
|
||||
|
||||
private_lane :config_xcodegen_alpha do
|
||||
target_file_path = "../ElementX/SupportingFiles/target.yml"
|
||||
lane :config_nightly do
|
||||
target_file_path = "../project.yml"
|
||||
data = YAML.load_file target_file_path
|
||||
data["targets"]["ElementX"]["settings"]["base"]["PRODUCT_NAME"] = "ElementX PR"
|
||||
data["targets"]["ElementX"]["settings"]["base"]["PRODUCT_BUNDLE_IDENTIFIER"] = "io.element.elementx.pr"
|
||||
data["settings"]["BASE_APP_GROUP_IDENTIFIER"] = "io.element.nightly"
|
||||
data["settings"]["BASE_BUNDLE_IDENTIFIER"] = "io.element.elementx.nightly"
|
||||
File.open(target_file_path, 'w') { |f| YAML.dump(data, f) }
|
||||
|
||||
xcodegen(spec: "project.yml")
|
||||
|
||||
# Automatically done by Xcode Cloud. Cannot override
|
||||
# https://developer.apple.com/documentation/xcode/setting-the-next-build-number-for-xcode-cloud-builds
|
||||
# bump_build_number()
|
||||
|
||||
release_version = get_version_number()
|
||||
|
||||
update_app_icon(caption_text: "Nightly #{release_version}", modulate: "100,20,100")
|
||||
end
|
||||
|
||||
desc "Upload IPA to Diawi"
|
||||
private_lane :upload_to_diawi do
|
||||
api_token = ENV["DIAWI_API_TOKEN"]
|
||||
UI.user_error!("Invalid Diawi API token.") unless !api_token.to_s.empty?
|
||||
lane :upload_dsyms_to_sentry do |options|
|
||||
auth_token = ENV["SENTRY_AUTH_TOKEN"]
|
||||
UI.user_error!("Invalid Sentry Auth token.") unless !auth_token.to_s.empty?
|
||||
|
||||
# Upload to Diawi
|
||||
diawi(
|
||||
token: api_token,
|
||||
wall_of_apps: false,
|
||||
file: lane_context[SharedValues::IPA_OUTPUT_PATH]
|
||||
dsym_path = options[:dsym_path]
|
||||
UI.user_error!("Invalid DSYM path.") unless !dsym_path.to_s.empty?
|
||||
|
||||
sentry_upload_dif(
|
||||
auth_token: auth_token,
|
||||
org_slug: 'element',
|
||||
project_slug: 'elementx',
|
||||
url: 'https://sentry.tools.element.io/',
|
||||
path: dsym_path,
|
||||
)
|
||||
|
||||
# Get the Diawi link from Diawi action shared value
|
||||
diawi_link = lane_context[SharedValues::UPLOADED_FILE_LINK_TO_DIAWI]
|
||||
UI.command_output("Diawi link: " + diawi_link.to_s)
|
||||
|
||||
# Generate the Diawi QR code file link
|
||||
diawi_app_id = URI(diawi_link).path.split('/').last
|
||||
diawi_qr_code_link = "https://www.diawi.com/qrcode/link/#{diawi_app_id}"
|
||||
|
||||
# Set "DIAWI_FILE_LINK" to GitHub environment variables for Github actions
|
||||
sh("echo DIAWI_FILE_LINK=#{diawi_link} >> $GITHUB_ENV")
|
||||
sh("echo DIAWI_QR_CODE_LINK=#{diawi_qr_code_link} >> $GITHUB_ENV")
|
||||
end
|
||||
|
||||
desc "Create GitHub Release"
|
||||
private_lane :release_to_github do
|
||||
lane :release_to_github do
|
||||
api_token = ENV["GITHUB_TOKEN"]
|
||||
UI.user_error!("Invalid GitHub API token.") unless !api_token.to_s.empty?
|
||||
|
||||
@ -216,7 +171,7 @@ private_lane :release_to_github do
|
||||
|
||||
end
|
||||
|
||||
private_lane :prepare_next_release do
|
||||
lane :prepare_next_release do
|
||||
target_file_path = "../ElementX/SupportingFiles/target.yml"
|
||||
xcode_project_file_path = "../ElementX.xcodeproj"
|
||||
|
||||
@ -233,6 +188,54 @@ private_lane :prepare_next_release do
|
||||
sh("git add #{target_file_path} #{xcode_project_file_path}")
|
||||
|
||||
sh("git commit -m 'Prepare next release'")
|
||||
|
||||
sh("git push")
|
||||
end
|
||||
|
||||
private_lane :config_xcodegen_alpha do
|
||||
target_file_path = "../project.yml"
|
||||
data = YAML.load_file target_file_path
|
||||
data["settings"]["BASE_APP_GROUP_IDENTIFIER"] = "io.element.pr"
|
||||
data["settings"]["BASE_BUNDLE_IDENTIFIER"] = "io.element.elementx.pr"
|
||||
File.open(target_file_path, 'w') { |f| YAML.dump(data, f) }
|
||||
|
||||
xcodegen(spec: "project.yml")
|
||||
|
||||
version = ENV["GITHUB_PR_NUMBER"]
|
||||
|
||||
update_app_icon(caption_text: "PR #{version}", modulate: "100,100,200")
|
||||
|
||||
bump_build_number()
|
||||
end
|
||||
|
||||
private_lane :upload_to_diawi do
|
||||
api_token = ENV["DIAWI_API_TOKEN"]
|
||||
UI.user_error!("Invalid Diawi API token.") unless !api_token.to_s.empty?
|
||||
|
||||
# Upload to Diawi
|
||||
diawi(
|
||||
token: api_token,
|
||||
wall_of_apps: false,
|
||||
file: lane_context[SharedValues::IPA_OUTPUT_PATH]
|
||||
)
|
||||
|
||||
# Get the Diawi link from Diawi action shared value
|
||||
diawi_link = lane_context[SharedValues::UPLOADED_FILE_LINK_TO_DIAWI]
|
||||
UI.command_output("Diawi link: " + diawi_link.to_s)
|
||||
|
||||
# Generate the Diawi QR code file link
|
||||
diawi_app_id = URI(diawi_link).path.split('/').last
|
||||
diawi_qr_code_link = "https://www.diawi.com/qrcode/link/#{diawi_app_id}"
|
||||
|
||||
# Set "DIAWI_FILE_LINK" to GitHub environment variables for Github actions
|
||||
sh("echo DIAWI_FILE_LINK=#{diawi_link} >> $GITHUB_ENV")
|
||||
sh("echo DIAWI_QR_CODE_LINK=#{diawi_qr_code_link} >> $GITHUB_ENV")
|
||||
end
|
||||
|
||||
private_lane :bump_build_number do
|
||||
# Increment build number to current date
|
||||
build_number = Time.now.strftime("%Y%m%d%H%M")
|
||||
increment_build_number(build_number: build_number)
|
||||
end
|
||||
|
||||
private_lane :export_version_changes do |options|
|
||||
@ -246,9 +249,12 @@ private_lane :update_app_icon do |options|
|
||||
caption_text = options[:caption_text]
|
||||
UI.user_error!("Invalid caption text.") unless !caption_text.to_s.empty?
|
||||
|
||||
modulate = options[:modulate]
|
||||
UI.user_error!("Invalid icon modulate parameters.") unless !modulate.to_s.empty?
|
||||
|
||||
Dir.glob("../ElementX/Resources/Assets.xcassets/AppIcon.appiconset/**/*.png") do |file_name|
|
||||
# Change the icons color
|
||||
sh("convert '#{file_name}' -modulate 100,100,200 '#{file_name}'")
|
||||
sh("convert '#{file_name}' -modulate #{modulate} '#{file_name}'")
|
||||
|
||||
caption_width = sh("identify -format %w '#{file_name}'")
|
||||
caption_height = file_name.end_with?("@2x.png") ? 60 : 30
|
||||
@ -259,16 +265,3 @@ private_lane :update_app_icon do |options|
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private_lane :upload_dsyms_to_sentry do
|
||||
auth_token = ENV["SENTRY_AUTH_TOKEN"]
|
||||
UI.user_error!("Invalid Sentry Auth token.") unless !auth_token.to_s.empty?
|
||||
|
||||
sentry_upload_dif(
|
||||
auth_token: auth_token,
|
||||
org_slug: 'element',
|
||||
project_slug: 'elementx',
|
||||
url: 'https://sentry.tools.element.io/',
|
||||
path: './build/ElementX.app.dSYM.zip',
|
||||
)
|
||||
end
|
||||
|
@ -21,14 +21,6 @@ For _fastlane_ installation instructions, see [Installing _fastlane_](https://do
|
||||
|
||||
|
||||
|
||||
### github_release
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane github_release
|
||||
```
|
||||
|
||||
|
||||
|
||||
### app_store_release
|
||||
|
||||
```sh
|
||||
@ -37,14 +29,6 @@ For _fastlane_ installation instructions, see [Installing _fastlane_](https://do
|
||||
|
||||
|
||||
|
||||
### build_adhoc
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane build_adhoc
|
||||
```
|
||||
|
||||
|
||||
|
||||
### build_release
|
||||
|
||||
```sh
|
||||
@ -77,6 +61,38 @@ For _fastlane_ installation instructions, see [Installing _fastlane_](https://do
|
||||
|
||||
|
||||
|
||||
### config_nightly
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane config_nightly
|
||||
```
|
||||
|
||||
|
||||
|
||||
### upload_dsyms_to_sentry
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane upload_dsyms_to_sentry
|
||||
```
|
||||
|
||||
|
||||
|
||||
### release_to_github
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane release_to_github
|
||||
```
|
||||
|
||||
|
||||
|
||||
### prepare_next_release
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane prepare_next_release
|
||||
```
|
||||
|
||||
|
||||
|
||||
----
|
||||
|
||||
This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run.
|
||||
|
@ -22,7 +22,9 @@ options:
|
||||
settings:
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED: YES
|
||||
ENABLE_BITCODE: NO
|
||||
|
||||
BASE_APP_GROUP_IDENTIFIER: io.element
|
||||
APP_GROUP_IDENTIFIER: group.$(BASE_APP_GROUP_IDENTIFIER)
|
||||
BASE_BUNDLE_IDENTIFIER: io.element.elementx
|
||||
|
||||
include:
|
||||
- path: ElementX/SupportingFiles/target.yml
|
||||
|
Loading…
x
Reference in New Issue
Block a user