diff --git a/.github/workflows/deploy_appstore.yml b/.github/workflows/deploy_appstore.yml
index 49f913919b..10d9b63b4f 100644
--- a/.github/workflows/deploy_appstore.yml
+++ b/.github/workflows/deploy_appstore.yml
@@ -56,6 +56,7 @@ jobs:
APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }}
APPLE_KEY_CONTENT: ${{ secrets.APPLE_KEY_CONTENT }}
+ XCCONFIG_PROD_SWAP_ENABLED: false
XCCONFIG_PROD_INFURA_PROJECT_ID: ${{ secrets.XCCONFIG_PROD_INFURA_PROJECT_ID }}
XCCONFIG_PROD_INFURA_PROJECT_SECRET: ${{ secrets.XCCONFIG_PROD_INFURA_PROJECT_SECRET }}
XCCONFIG_PROD_ETHERSCAN_API_KEY: ${{ secrets.XCCONFIG_PROD_ETHERSCAN_API_KEY }}
diff --git a/.github/workflows/deploy_test_flight.yml b/.github/workflows/deploy_test_flight.yml
new file mode 100644
index 0000000000..758a8e4295
--- /dev/null
+++ b/.github/workflows/deploy_test_flight.yml
@@ -0,0 +1,77 @@
+name: Deploy Production to TestFlight Testers
+
+on:
+ push:
+ branches: [ master ]
+ workflow_dispatch:
+
+jobs:
+ build_and_deploy:
+ name: Build and Deploy to TestFlight Testers
+ runs-on: macos-12
+
+ steps:
+ - name: Setup Xcode to 14.2
+ uses: maxim-lobanov/setup-xcode@v1
+ with:
+ xcode-version: '14.2'
+
+ - name: Checkout repository
+ uses: actions/checkout@v2
+
+ - name: Setup Ruby v3
+ uses: ruby/setup-ruby@v1
+ with:
+ ruby-version: 3.0.2
+
+ - name: Setup Rust and Cargo
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: stable
+
+ - name: Install Lipo via Cargo
+ run: cargo install cargo-lipo
+
+ - name: Add iOS targets to Rust
+ run: rustup target add aarch64-apple-ios x86_64-apple-ios
+
+ - name: Run Fastlane (build, upload to TestFlight)
+ uses: maierj/fastlane-action@v2.0.1
+ with:
+ lane: release
+ env:
+ BUILD_NUMBER: ${{ github.run_number }}.tf
+ APP_STORE_CONNECT_TEAM_ID: ${{ secrets.APP_STORE_CONNECT_TEAM_ID }}
+ APP_ID: ${{ secrets.APP_ID }}
+ APP_IDENTIFIER_RELEASE: ${{ secrets.APP_IDENTIFIER_RELEASE }}
+ DEVELOPER_PORTAL_TEAM_ID: ${{ secrets.DEVELOPER_PORTAL_TEAM_ID }}
+ FASTLANE_APPLE_ID: ${{ secrets.FASTLANE_APPLE_ID }}
+ FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD: ${{ secrets.FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD }}
+ MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
+ GIT_AUTHORIZATION: ${{ secrets.GIT_AUTHORIZATION }}
+ PROVISIONING_PROFILE_SPECIFIER_APPSTORE: ${{ secrets.PROVISIONING_PROFILE_SPECIFIER_APPSTORE }}
+ TEMP_KEYCHAIN_PASSWORD: ${{ secrets.TEMP_KEYCHAIN_PASSWORD }}
+ TEMP_KEYCHAIN_USER: ${{ secrets.TEMP_KEYCHAIN_USER }}
+ APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }}
+ APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }}
+ APPLE_KEY_CONTENT: ${{ secrets.APPLE_KEY_CONTENT }}
+
+ XCCONFIG_PROD_SWAP_ENABLED: true
+ XCCONFIG_PROD_INFURA_PROJECT_ID: ${{ secrets.XCCONFIG_PROD_INFURA_PROJECT_ID }}
+ XCCONFIG_PROD_INFURA_PROJECT_SECRET: ${{ secrets.XCCONFIG_PROD_INFURA_PROJECT_SECRET }}
+ XCCONFIG_PROD_ETHERSCAN_API_KEY: ${{ secrets.XCCONFIG_PROD_ETHERSCAN_API_KEY }}
+ XCCONFIG_PROD_ARBISCAN_API_KEY: ${{ secrets.XCCONFIG_PROD_ARBISCAN_API_KEY }}
+ XCCONFIG_PROD_OPTIMISM_ETHERSCAN_API_KEY: ${{ secrets.XCCONFIG_PROD_OPTIMISM_ETHERSCAN_API_KEY }}
+ XCCONFIG_PROD_BSCSCAN_API_KEY: ${{ secrets.XCCONFIG_PROD_BSCSCAN_API_KEY }}
+ XCCONFIG_PROD_POLYGONSCAN_API_KEY: ${{ secrets.XCCONFIG_PROD_POLYGONSCAN_API_KEY }}
+ XCCONFIG_PROD_SNOWTRACE_API_KEY: ${{ secrets.XCCONFIG_PROD_SNOWTRACE_API_KEY }}
+ XCCONFIG_PROD_GNOSISSCAN_API_KEY: ${{ secrets.XCCONFIG_PROD_GNOSISSCAN_API_KEY }}
+ XCCONFIG_PROD_FTMSCAN_API_KEY: ${{ secrets.XCCONFIG_PROD_FTMSCAN_API_KEY }}
+ XCCONFIG_PROD_DEFIYIELD_API_KEY: ${{ secrets.XCCONFIG_PROD_DEFIYIELD_API_KEY }}
+ XCCONFIG_PROD_TWITTER_BEARER_TOKEN: ${{ secrets.XCCONFIG_PROD_TWITTER_BEARER_TOKEN }}
+ XCCONFIG_PROD_HS_PROVIDER_API_KEY: ${{ secrets.XCCONFIG_PROD_HS_PROVIDER_API_KEY }}
+ XCCONFIG_PROD_WALLET_CONNECT_V2_PROJECT_KEY: ${{ secrets.XCCONFIG_PROD_WALLET_CONNECT_V2_PROJECT_KEY }}
+ XCCONFIG_PROD_OPEN_SEA_API_KEY: ${{ secrets.XCCONFIG_PROD_OPEN_SEA_API_KEY }}
+ XCCONFIG_PROD_TRONGRID_API_KEY: ${{ secrets.XCCONFIG_PROD_TRONGRID_API_KEY }}
+ XCCONFIG_PROD_UNSTOPPABLE_DOMAINS_API_KEY: ${{ secrets.XCCONFIG_PROD_UNSTOPPABLE_DOMAINS_API_KEY }}
+ XCCONFIG_PROD_ONE_INCH_API_KEY: ${{ secrets.XCCONFIG_PROD_ONE_INCH_API_KEY }}
diff --git a/UnstoppableWallet/UnstoppableWallet/Configuration/Development.template.xcconfig b/UnstoppableWallet/UnstoppableWallet/Configuration/Development.template.xcconfig
index d9c8238510..d839724610 100644
--- a/UnstoppableWallet/UnstoppableWallet/Configuration/Development.template.xcconfig
+++ b/UnstoppableWallet/UnstoppableWallet/Configuration/Development.template.xcconfig
@@ -19,5 +19,6 @@ private_cloud_container_id = iCloud.io.horizontalsystems.bank-wallet.dev
open_sea_api_key =
unstoppable_domains_api_key =
one_inch_api_key =
+swap_enabled = true
default_words =
diff --git a/UnstoppableWallet/UnstoppableWallet/Configuration/Production.template.xcconfig b/UnstoppableWallet/UnstoppableWallet/Configuration/Production.template.xcconfig
index 576878fb05..e4536da3c9 100644
--- a/UnstoppableWallet/UnstoppableWallet/Configuration/Production.template.xcconfig
+++ b/UnstoppableWallet/UnstoppableWallet/Configuration/Production.template.xcconfig
@@ -19,3 +19,4 @@ private_cloud_container_id = iCloud.io.horizontalsystems.bank-wallet
open_sea_api_key =
unstoppable_domains_api_key =
one_inch_api_key =
+swap_enabled = true
diff --git a/UnstoppableWallet/UnstoppableWallet/Core/Adapters/Evm/EvmTransactionsAdapter.swift b/UnstoppableWallet/UnstoppableWallet/Core/Adapters/Evm/EvmTransactionsAdapter.swift
index 6c366be6f8..4c82f2402f 100644
--- a/UnstoppableWallet/UnstoppableWallet/Core/Adapters/Evm/EvmTransactionsAdapter.swift
+++ b/UnstoppableWallet/UnstoppableWallet/Core/Adapters/Evm/EvmTransactionsAdapter.swift
@@ -42,7 +42,7 @@ class EvmTransactionsAdapter: BaseEvmAdapter {
case .all: ()
case .incoming: type = .incoming
case .outgoing: type = .outgoing
-// case .swap: type = .swap
+ case .swap: type = .swap
case .approve: type = .approve
}
diff --git a/UnstoppableWallet/UnstoppableWallet/Core/Adapters/Tron/TronTransactionAdapter.swift b/UnstoppableWallet/UnstoppableWallet/Core/Adapters/Tron/TronTransactionAdapter.swift
index ff7ec2fc83..5979fa29b2 100644
--- a/UnstoppableWallet/UnstoppableWallet/Core/Adapters/Tron/TronTransactionAdapter.swift
+++ b/UnstoppableWallet/UnstoppableWallet/Core/Adapters/Tron/TronTransactionAdapter.swift
@@ -38,7 +38,7 @@ class TronTransactionsAdapter: BaseTronAdapter {
case .all: ()
case .incoming: type = .incoming
case .outgoing: type = .outgoing
-// case .swap: type = .swap
+ case .swap: type = .swap
case .approve: type = .approve
}
diff --git a/UnstoppableWallet/UnstoppableWallet/Core/Providers/AppConfig.swift b/UnstoppableWallet/UnstoppableWallet/Core/Providers/AppConfig.swift
index c0aada1326..2d311df8a6 100644
--- a/UnstoppableWallet/UnstoppableWallet/Core/Providers/AppConfig.swift
+++ b/UnstoppableWallet/UnstoppableWallet/Core/Providers/AppConfig.swift
@@ -153,4 +153,8 @@ struct AppConfig {
(Bundle.main.object(forInfoDictionaryKey: "OpenSeaApiKey") as? String) ?? ""
}
+ static var swapEnabled: Bool {
+ Bundle.main.object(forInfoDictionaryKey: "SwapEnabled") as? String == "true"
+ }
+
}
diff --git a/UnstoppableWallet/UnstoppableWallet/Info.plist b/UnstoppableWallet/UnstoppableWallet/Info.plist
index 6a3360b420..21ef5f94bd 100644
--- a/UnstoppableWallet/UnstoppableWallet/Info.plist
+++ b/UnstoppableWallet/UnstoppableWallet/Info.plist
@@ -87,7 +87,9 @@
${ShowTestNetSwitcher}
SnowtraceApiKey
${snowtrace_api_key}
- TwitterBearerToken
+ SwapEnabled
+ ${swap_enabled}
+ TwitterBearerToken
${twitter_bearer_token}
UIApplicationSceneManifest
diff --git a/UnstoppableWallet/UnstoppableWallet/Modules/Transactions/TransactionTypeFilter.swift b/UnstoppableWallet/UnstoppableWallet/Modules/Transactions/TransactionTypeFilter.swift
index 95eaad76f6..5210461828 100644
--- a/UnstoppableWallet/UnstoppableWallet/Modules/Transactions/TransactionTypeFilter.swift
+++ b/UnstoppableWallet/UnstoppableWallet/Modules/Transactions/TransactionTypeFilter.swift
@@ -1,4 +1,7 @@
-enum TransactionTypeFilter: String, CaseIterable {
-// case all, incoming, outgoing, swap, approve
- case all, incoming, outgoing, approve
+enum TransactionTypeFilter: String {
+ case all, incoming, outgoing, swap, approve
+
+ static var allCases: [TransactionTypeFilter] {
+ AppConfig.swapEnabled ? [all, incoming, outgoing, swap, approve] : [all, incoming, outgoing, approve]
+ }
}
diff --git a/UnstoppableWallet/UnstoppableWallet/Modules/Wallet/Token/DataSources/WalletTokenBalance/WalletTokenBalanceViewItemFactory.swift b/UnstoppableWallet/UnstoppableWallet/Modules/Wallet/Token/DataSources/WalletTokenBalance/WalletTokenBalanceViewItemFactory.swift
index 577304d5f2..54fec63d29 100644
--- a/UnstoppableWallet/UnstoppableWallet/Modules/Wallet/Token/DataSources/WalletTokenBalance/WalletTokenBalanceViewItemFactory.swift
+++ b/UnstoppableWallet/UnstoppableWallet/Modules/Wallet/Token/DataSources/WalletTokenBalance/WalletTokenBalanceViewItemFactory.swift
@@ -25,7 +25,7 @@ class WalletTokenBalanceViewItemFactory {
buttons[.send] = sendButtonState
buttons[.receive] = .enabled
- if wallet.token.swappable {
+ if AppConfig.swapEnabled, wallet.token.swappable {
buttons[.swap] = sendButtonState
}
}
diff --git a/UnstoppableWallet/UnstoppableWallet/Modules/Wallet/WalletViewItemFactory.swift b/UnstoppableWallet/UnstoppableWallet/Modules/Wallet/WalletViewItemFactory.swift
index e656e0ab3e..0d8af6bb32 100644
--- a/UnstoppableWallet/UnstoppableWallet/Modules/Wallet/WalletViewItemFactory.swift
+++ b/UnstoppableWallet/UnstoppableWallet/Modules/Wallet/WalletViewItemFactory.swift
@@ -152,7 +152,7 @@ class WalletViewItemFactory {
return [
.send: .enabled,
.receive: .enabled,
- .swap: .enabled
+ .swap: AppConfig.swapEnabled ? .enabled : .hidden
]
case .evmAddress, .tronAddress: return [:]
}
diff --git a/fastlane/Fastfile b/fastlane/Fastfile
index 5a3bf55ff6..08d88d536a 100644
--- a/fastlane/Fastfile
+++ b/fastlane/Fastfile
@@ -32,6 +32,7 @@ XCCONFIG_DEV_TRONGRID_API_KEY = ENV["XCCONFIG_DEV_TRONGRID_API_KEY"]
XCCONFIG_DEV_UNSTOPPABLE_DOMAINS_API_KEY = ENV["XCCONFIG_DEV_UNSTOPPABLE_DOMAINS_API_KEY"]
XCCONFIG_DEV_ONE_INCH_API_KEY = ENV["XCCONFIG_DEV_ONE_INCH_API_KEY"]
+XCCONFIG_PROD_SWAP_ENABLED = ENV["XCCONFIG_PROD_SWAP_ENABLED"]
XCCONFIG_PROD_INFURA_PROJECT_ID = ENV["XCCONFIG_PROD_INFURA_PROJECT_ID"]
XCCONFIG_PROD_INFURA_PROJECT_SECRET = ENV["XCCONFIG_PROD_INFURA_PROJECT_SECRET"]
XCCONFIG_PROD_ETHERSCAN_API_KEY = ENV["XCCONFIG_PROD_ETHERSCAN_API_KEY"]
@@ -129,6 +130,7 @@ def apply_dev_xcconfig
end
def apply_prod_xcconfig
+ update_prod_xcconfig('swap_enabled', XCCONFIG_PROD_SWAP_ENABLED)
update_prod_xcconfig('infura_project_id', XCCONFIG_PROD_INFURA_PROJECT_ID)
update_prod_xcconfig('infura_project_secret', XCCONFIG_PROD_INFURA_PROJECT_SECRET)
update_prod_xcconfig('etherscan_api_key', XCCONFIG_PROD_ETHERSCAN_API_KEY)