mirror of
https://github.com/luxwallet/ios.git
synced 2026-10-30 20:33:27 +00:00
202 lines
5.0 KiB
Ruby
202 lines
5.0 KiB
Ruby
default_platform(:ios)
|
|
|
|
APP_ID = ENV["APP_ID"]
|
|
TEMP_KEYCHAIN_USER = ENV["TEMP_KEYCHAIN_USER"]
|
|
TEMP_KEYCHAIN_PASSWORD = ENV["TEMP_KEYCHAIN_PASSWORD"]
|
|
APPLE_ISSUER_ID = ENV["APPLE_ISSUER_ID"]
|
|
APPLE_KEY_ID = ENV["APPLE_KEY_ID"]
|
|
APPLE_KEY_CONTENT = ENV["APPLE_KEY_CONTENT"]
|
|
GIT_AUTHORIZATION = ENV["GIT_AUTHORIZATION"]
|
|
|
|
TEAM_ID = "HC4MCAXJ66"
|
|
|
|
WORKSPACE = "Wallet.xcworkspace"
|
|
XCODEPROJ = "./Unstoppable/Unstoppable.xcodeproj"
|
|
XCCONFIG_PATH = "Unstoppable/Unstoppable/Configuration/Config.xcconfig"
|
|
|
|
BASE_APP_ID = "io.horizontalsystems.bank-wallet"
|
|
|
|
PROD_APP_IDS = [
|
|
BASE_APP_ID,
|
|
"#{BASE_APP_ID}.widget",
|
|
"#{BASE_APP_ID}.intent"
|
|
].freeze
|
|
|
|
DEV_APP_IDS = [
|
|
"#{BASE_APP_ID}.dev",
|
|
"#{BASE_APP_ID}.dev.widget",
|
|
"#{BASE_APP_ID}.dev.intent"
|
|
].freeze
|
|
|
|
ALL_APP_IDS = (PROD_APP_IDS + DEV_APP_IDS).freeze
|
|
|
|
MATCH_TYPE_PROFILE_NAMES = {
|
|
'development' => 'Development',
|
|
'adhoc' => 'AdHoc',
|
|
'appstore' => 'AppStore'
|
|
}.freeze
|
|
|
|
XCCONFIG_KEYS = %w[
|
|
ARBISCAN_API_KEYS
|
|
BASESCAN_API_KEYS
|
|
BSCSCAN_API_KEYS
|
|
CHAINALYSIS_API_KEY
|
|
DEFIYIELD_API_KEY
|
|
ERA_ZKSYNC_API_KEYS
|
|
ETHERSCAN_API_KEYS
|
|
FTMSCAN_API_KEYS
|
|
GNOSISSCAN_API_KEYS
|
|
HASHDIT_API_KEY
|
|
HS_PROVIDER_API_KEY
|
|
JUPITER_API_KEY
|
|
MERKLE_API_PATH
|
|
ONE_INCH_API_KEY
|
|
OPEN_SEA_API_KEY
|
|
OPTIMISM_ETHERSCAN_API_KEYS
|
|
POLYGONSCAN_API_KEYS
|
|
SNOWTRACE_API_KEYS
|
|
SOLANA_ALCHEMY_API_KEYS
|
|
TRONGRID_API_KEYS
|
|
TWITTER_BEARER_TOKEN
|
|
UNSTOPPABLE_DOMAINS_API_KEY
|
|
USWAP_API_KEY
|
|
WALLET_CONNECT_V2_PROJECT_KEY
|
|
|
|
MAYA_AFFILIATE
|
|
MAYA_AFFILIATE_BPS
|
|
ONE_INCH_COMMISSION
|
|
ONE_INCH_COMMISSION_ADDRESS
|
|
THORCHAIN_AFFILIATE
|
|
THORCHAIN_AFFILIATE_BPS
|
|
].freeze
|
|
|
|
def with_temp_keychain
|
|
name = TEMP_KEYCHAIN_USER
|
|
delete_temp_keychain(name)
|
|
create_keychain(name: name, password: TEMP_KEYCHAIN_PASSWORD, unlock: false, timeout: 0)
|
|
yield name
|
|
ensure
|
|
delete_temp_keychain(name) if name
|
|
end
|
|
|
|
def delete_temp_keychain(name)
|
|
delete_keychain(name: name) if File.exist?(File.expand_path("~/Library/Keychains/#{name}-db"))
|
|
end
|
|
|
|
def app_store_api_key
|
|
app_store_connect_api_key(
|
|
key_id: APPLE_KEY_ID,
|
|
issuer_id: APPLE_ISSUER_ID,
|
|
key_content: APPLE_KEY_CONTENT,
|
|
duration: 1200,
|
|
in_house: false
|
|
)
|
|
end
|
|
|
|
def apply_xcconfig
|
|
template_path = XCCONFIG_PATH.sub(/Config\.xcconfig\z/, 'Config.template.xcconfig')
|
|
sh("cp ../#{template_path} ../#{XCCONFIG_PATH}")
|
|
|
|
XCCONFIG_KEYS.each do |key|
|
|
update_xcconfig_value(path: XCCONFIG_PATH, name: key, value: ENV["XCCONFIG_#{key}"])
|
|
end
|
|
end
|
|
|
|
def provisioning_profiles_for(app_ids, match_type)
|
|
profile_name = MATCH_TYPE_PROFILE_NAMES.fetch(match_type)
|
|
app_ids.map { |id| [id, "match #{profile_name} #{id}"] }.to_h
|
|
end
|
|
|
|
def build_and_sign(match_type:, export_method:, app_ids:, scheme:, keychain_name:, icloud_env:)
|
|
apply_xcconfig
|
|
increment_build_number(build_number: ENV['BUILD_NUMBER'], xcodeproj: XCODEPROJ)
|
|
|
|
match(
|
|
type: match_type,
|
|
app_identifier: app_ids,
|
|
git_basic_authorization: Base64.strict_encode64(GIT_AUTHORIZATION),
|
|
readonly: true,
|
|
keychain_name: keychain_name,
|
|
keychain_password: TEMP_KEYCHAIN_PASSWORD,
|
|
api_key: app_store_api_key
|
|
)
|
|
|
|
gym(
|
|
workspace: WORKSPACE,
|
|
scheme: scheme,
|
|
export_method: export_method,
|
|
clean: true,
|
|
include_symbols: true,
|
|
export_options: {
|
|
compileBitcode: false,
|
|
iCloudContainerEnvironment: icloud_env,
|
|
provisioningProfiles: provisioning_profiles_for(app_ids, match_type)
|
|
}
|
|
)
|
|
end
|
|
|
|
def run_match(type:, options: {})
|
|
app_ids = type == 'appstore' ? PROD_APP_IDS : ALL_APP_IDS
|
|
match(app_identifier: app_ids, type: type, **options)
|
|
end
|
|
|
|
platform :ios do
|
|
lane :dev do
|
|
with_temp_keychain do |keychain_name|
|
|
build_and_sign(
|
|
match_type: 'adhoc',
|
|
export_method: 'ad-hoc',
|
|
app_ids: DEV_APP_IDS,
|
|
scheme: 'Development',
|
|
icloud_env: 'Development',
|
|
keychain_name: keychain_name
|
|
)
|
|
|
|
firebase_app_distribution(
|
|
app: "1:407994911754:ios:8bdd4910f96ecaee69e3f3",
|
|
groups: "dev-testers",
|
|
release_notes: last_git_commit[:message],
|
|
service_credentials_json_data: ENV["FIREBASE_CREDENTIALS"]
|
|
)
|
|
end
|
|
end
|
|
|
|
lane :release do
|
|
with_temp_keychain do |keychain_name|
|
|
build_and_sign(
|
|
match_type: 'appstore',
|
|
export_method: 'app-store',
|
|
app_ids: PROD_APP_IDS,
|
|
scheme: 'Production',
|
|
icloud_env: 'Production',
|
|
keychain_name: keychain_name
|
|
)
|
|
|
|
pilot(
|
|
apple_id: APP_ID,
|
|
app_identifier: BASE_APP_ID,
|
|
skip_waiting_for_build_processing: true,
|
|
skip_submission: true,
|
|
distribute_external: false,
|
|
notify_external_testers: false
|
|
)
|
|
end
|
|
end
|
|
|
|
lane :match_readonly do
|
|
%w[development adhoc appstore].each do |type|
|
|
run_match(type: type, options: { readonly: true })
|
|
end
|
|
end
|
|
|
|
lane :match_generate do |options|
|
|
base = { username: options[:username], team_id: TEAM_ID }
|
|
|
|
%w[development adhoc].each do |type|
|
|
run_match(type: type, options: base.merge(force_for_new_devices: true))
|
|
end
|
|
|
|
run_match(type: 'appstore', options: base)
|
|
end
|
|
end
|