diff --git a/.gitignore b/.gitignore index 16b699225..9dfca0263 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,20 @@ dydx/Pods/abacus/build dydxV4/dydxV4/_Configurations/credentials.json dydxV4/dydxV4/_Configurations/GoogleService-Info-Staging.plist dydxV4/dydxV4/_Configurations/GoogleService-Info.plist -scripts/secrets \ No newline at end of file +scripts/secrets + +# fastlane specific +**/fastlane/report.xml + +# deliver temporary files +**/fastlane/Preview.html + +# scan temporary files +**/fastlane/test_output + +*.p12 +*.certSigningRequest +*.cer +*.mobileprovision +*.ipa +*.dSYM.* \ No newline at end of file diff --git a/README.md b/README.md index 5ce0ef9f7..995fe3266 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Other dependencies are specified by the Cocoapods and Swift Package Manager conf # API Keys & Secrets Unzip the `secrets.zip` from the `iOS Secrets` vault in the dYdX 1Password account. Ask a team member for access. -Add the `secrets/` folder to the native-ios-v4/scripts folder. +Add the `secrets/` folder to the v4-native-ios/scripts folder. > `mv {REPLACE_WITH_PATH_TO_UNZIPPED}/secrets {REPLACE_WITH_REPO}/scripts` @@ -45,7 +45,7 @@ Javascript code is generated in v4-client. To update Get the desired commit from v4-client Copy from {v4-client}/__native__/__ios__/v4-native-client.js -to {native-ios-v4}/dydx/dydxPresenters/_Feature/ +to {v4-native-ios}/dydx/dydxPresenters/_Feature/ To generate v4-native-client.js from the v4-client repo, run diff --git a/docs/branching_strategy.md b/docs/branching_strategy.md new file mode 100644 index 000000000..c5e028bac --- /dev/null +++ b/docs/branching_strategy.md @@ -0,0 +1,124 @@ +# Project Branching and Hotfix Strategy Guide + +This document outlines the branching strategy our project adopts, accommodating regular development, releases, and hotfixes. Following this strategy ensures an organized development process and stable production code. + +## 1. General Branching Strategy + +Our branching method involves several branches serving distinct roles in the code changes' lifecycle. Here's what our branch structure looks like: + +### 1.1 `main` Branch + +- Stores official release history. +- Every commit represents a production-ready state. + +### 1.2 `develop` Branch + +- Serves as a pre-production staging area. +- It's where code merges before it's ready for production. + +### 1.3 Feature Branches + +- Branch off from `develop` and integrate back into it when the feature is complete. +- Used for single feature development or improvements. + +### 1.4 Release Branches + +- Branch off from `develop` when it reaches a production-ready state. +- These branches are long-lived and serve for creating a release history, enabling referencing or hotfixing in the future. + +**Workflow Summary:** + +1. Regular work (features and non-critical fixes) is done in feature branches. +2. These are merged into `develop` upon completion. +3. When `develop` is ready for production, a new `release/...` branch is created. +4. Release branches may receive minor polishing and bug fixing. +5. When finalized, the `release` branch merges into `main` and is tagged with a version number if commits were made in step 4. The release branch also merges back any changes into `develop`. + +## 2. Hotfix Strategy + +Hotfixes address critical production issues, requiring immediate resolution outside the regular cycle. + +### 2.1 Hotfix Branches + +- These are created from the appropriate `release/...` branch, providing a controlled area to fix the issue. +- These are no different than a normal release branch aside from being based on a previous `release/...` branch instead of `main` +- After testing, hotfixes merge into both `main` and `develop` to update the production version and include fixes in the upcoming releases. + +**Hotfix Workflow:** + +Let's say that an issue needing a hotfix was discovered in released version `1.0.1` + +1. Locate the `release/1.0.1` branch. +2. Branch off into a new hotfix `release/1.0.2` branch. + ```sh + git checkout release/1.0.1 + git pull + git checkout -b release/1.0.2 + ``` +3. Implement and test the fix rigorously on the hotfix branch. +4. Merge the hotfix branch into `main` and deploy to production. + ```sh + git checkout main + git merge release/1.0.2 + ``` +5. Tag this new release with an updated version number. + ```sh + git tag -a v(new_version) -m "v1.0.2" + git push origin --tags + ``` +6. Merge the hotfix into `develop` to ensure it's part of future releases. + ```sh + git checkout develop + git merge release/1.0.2 + ``` + +## 3. Example +The following branching history visualization depicts a project which: +1. Released 1.0.0 based off the latest develop at the time +2. Released 1.0.1 based off 1.0.0 for a hotfix +3. Released 1.1.0 based off the latest develop at the time + + +This example can be recreated with [mermaid.live's tool](https://mermaid.live/) and the following code. +``` +gitGraph + commit id:"1.0.0" + branch "develop" + commit id:"commit_a" + commit id:"commit_b" + branch release/1.0.0 + checkout release/1.0.0 + commit id:"commit_b (same HEAD)" + checkout develop + commit id:"commit_c" + merge release/1.0.0 + commit id:"commit_d" + checkout main + merge release/1.0.0 tag:"v1.0.0" + checkout release/1.0.0 + branch release/1.0.1 + commit id:"commit_b (same HEAD) " + commit id:"commit_e (polish)" + checkout "develop" + merge release/1.0.1 + checkout main + merge release/1.0.1 tag: "v1.0.1" + checkout develop + commit id: "commit_f" + commit id: "commit_g" + commit id: "commit_h" + branch release/1.1.0 + checkout release/1.1.0 + commit id:"commit_h (same head)" + checkout main + merge release/1.1.0 tag: "v1.1.0" +``` + +## 4. Release Management + +The presence of release branches adds an extra layer of stability, as they remain available for any future needs for referencing or hotfixing that specific release. + +## 5. Conclusion + +This branching strategy and hotfix procedure ensure a robust framework for continuous development, stable production releases, and efficient deployment of critical fixes. It emphasizes the importance of team collaboration, communication, and a structured approach to managing code lifecycles. + diff --git a/docs/forced_update.md b/docs/forced_update.md new file mode 100644 index 000000000..72b21f78b --- /dev/null +++ b/docs/forced_update.md @@ -0,0 +1,62 @@ +# Forced Update Guide + +This document outlines how to force app users to update to a particular version. + +## 1. When to force an update + +When Blockchain contract changes, FE app may need to be updated to be compatible. While web apps can be updated in sync with the contracts, native app users may not always update to the latest version. +
+
+Forced update is a mechanism to make sure the native app is compatible with the contracts, and Indexer endpoints. + +## 2. Forced update strategy + +Remote configuration is used to inform the app the minimum build number required. + +### 2.1 Build number + +Each app deployment has a build number, which is automatically incremented at build time. When the remote configuration contains a higher build number than the running app, app shows an UI to force the user to update the app. + +### 2.2 Update URL + +An URL is provided in the remote configuration. This URL should lead to the App Store to either + +#### 2.2.1 + +Update the existing app + +#### 2.2.2 + +Download a different app. This is a mechanism to release completely new app and prompt users of older app to migrate to the new app. + +## 3. Remote Configuration + +The remote configuration resides inside the Environment payload in the web app deployment, which should reside in **\public\configs\env.json** + +Having the endpoint to the deployed web app is a necessary step to configure the native app deployment. + +Different environments may have different app requirements. This enables the native apps to be deployed and tested with testnets before production network is deployed. + +## 4. Sample Payload + +In each environment, there is an optional **apps** payload. + +``` +"apps": { + "ios": { + "minimalVersion": "1.0", + "build":40000, + "url": "https://apps.apple.com/app/dydx/id1234567890" + } + } + ``` + + +**ios** and **android** is used to identify the requirments for iOS or Android apps. + +**minimalVersion** used by the app to display required version. It is used for displaying only. + +**build** is the minimum build number to be compatible with the environment. + +**url** is the URL to the app on the App Store or Google Play Store. + diff --git a/dydxV4/dydxV4.xcodeproj/project.pbxproj b/dydxV4/dydxV4.xcodeproj/project.pbxproj index ff2598d76..ce38b8349 100644 --- a/dydxV4/dydxV4.xcodeproj/project.pbxproj +++ b/dydxV4/dydxV4.xcodeproj/project.pbxproj @@ -2539,7 +2539,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 0.1; + MARKETING_VERSION = 0.1.0; PRODUCT_BUNDLE_IDENTIFIER = exchangeV4.dydx.trading; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) _iOS"; @@ -2563,7 +2563,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 0.1; + MARKETING_VERSION = 0.1.0; PRODUCT_BUNDLE_IDENTIFIER = exchangeV4.dydx.trading; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -2586,6 +2586,7 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); + MARKETING_VERSION = 0.1.0; PRODUCT_BUNDLE_IDENTIFIER = www.craziapps.dydxTests; PRODUCT_NAME = "$(TARGET_NAME)"; TARGETED_DEVICE_FAMILY = "1,2"; @@ -2606,6 +2607,7 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); + MARKETING_VERSION = 0.1.0; PRODUCT_BUNDLE_IDENTIFIER = www.craziapps.dydxTests; PRODUCT_NAME = "$(TARGET_NAME)"; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/100.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/100.png deleted file mode 100644 index 2246f0df7..000000000 Binary files a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/100.png and /dev/null differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/1024.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/1024.png deleted file mode 100644 index c5e9a4575..000000000 Binary files a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/1024.png and /dev/null differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/114.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/114.png deleted file mode 100644 index 1dec7dc9a..000000000 Binary files a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/114.png and /dev/null differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/120.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/120.png deleted file mode 100644 index 28965d29f..000000000 Binary files a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/120.png and /dev/null differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/144.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/144.png deleted file mode 100644 index b420e8c16..000000000 Binary files a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/144.png and /dev/null differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/152.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/152.png deleted file mode 100644 index 8b1ff8ec4..000000000 Binary files a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/152.png and /dev/null differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/167.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/167.png deleted file mode 100644 index 882fa75fc..000000000 Binary files a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/167.png and /dev/null differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/180.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/180.png deleted file mode 100644 index fc2763f96..000000000 Binary files a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/180.png and /dev/null differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/20.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/20.png deleted file mode 100644 index eaef7401e..000000000 Binary files a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/20.png and /dev/null differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/29.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/29.png deleted file mode 100644 index ada876ae4..000000000 Binary files a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/29.png and /dev/null differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/40.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/40.png deleted file mode 100644 index 5e37f771b..000000000 Binary files a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/40.png and /dev/null differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/50.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/50.png deleted file mode 100644 index 2377fb5ea..000000000 Binary files a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/50.png and /dev/null differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/57.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/57.png deleted file mode 100644 index 5e77c85bb..000000000 Binary files a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/57.png and /dev/null differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/58.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/58.png deleted file mode 100644 index 9430edf15..000000000 Binary files a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/58.png and /dev/null differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/60.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/60.png deleted file mode 100644 index 3607b09eb..000000000 Binary files a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/60.png and /dev/null differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/72.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/72.png deleted file mode 100644 index d1197b272..000000000 Binary files a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/72.png and /dev/null differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/76.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/76.png deleted file mode 100644 index 173af0f57..000000000 Binary files a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/76.png and /dev/null differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/80.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/80.png deleted file mode 100644 index 61bb475fe..000000000 Binary files a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/80.png and /dev/null differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/87.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/87.png deleted file mode 100644 index 38c9e71bf..000000000 Binary files a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/87.png and /dev/null differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-1024x1024.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-1024x1024.png new file mode 100644 index 000000000..00db79cf4 Binary files /dev/null and b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-1024x1024.png differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-120x120.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-120x120.png new file mode 100644 index 000000000..adbaa4e8e Binary files /dev/null and b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-120x120.png differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-152x152.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-152x152.png new file mode 100644 index 000000000..c9e6a2208 Binary files /dev/null and b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-152x152.png differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-167x167.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-167x167.png new file mode 100644 index 000000000..5f066ecb6 Binary files /dev/null and b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-167x167.png differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-180x180.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-180x180.png new file mode 100644 index 000000000..fb3e9690e Binary files /dev/null and b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-180x180.png differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20.png new file mode 100644 index 000000000..5775b5bab Binary files /dev/null and b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20.png differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29.png new file mode 100644 index 000000000..f69257b66 Binary files /dev/null and b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29.png differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40.png new file mode 100644 index 000000000..612fa5c75 Binary files /dev/null and b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40.png differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-58x58.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-58x58.png new file mode 100644 index 000000000..ea13ee161 Binary files /dev/null and b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-58x58.png differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60.png new file mode 100644 index 000000000..02c592395 Binary files /dev/null and b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60.png differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76.png new file mode 100644 index 000000000..cbcddd691 Binary files /dev/null and b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76.png differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-80x80.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-80x80.png new file mode 100644 index 000000000..b215ec6bb Binary files /dev/null and b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-80x80.png differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-87x87.png b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-87x87.png new file mode 100644 index 000000000..138a2166b Binary files /dev/null and b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/AppIcon-87x87.png differ diff --git a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/Contents.json b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/Contents.json index 65b74d7ef..431a23c4f 100644 --- a/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/dydxV4/dydxV4/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1 +1,116 @@ -{"images":[{"size":"60x60","expected-size":"180","filename":"180.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"40x40","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"60x60","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"57x57","expected-size":"57","filename":"57.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"57x57","expected-size":"114","filename":"114.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"60","filename":"60.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"1024x1024","filename":"1024.png","expected-size":"1024","idiom":"ios-marketing","folder":"Assets.xcassets/AppIcon.appiconset/","scale":"1x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"72x72","expected-size":"72","filename":"72.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"76x76","expected-size":"152","filename":"152.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"50x50","expected-size":"100","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"76x76","expected-size":"76","filename":"76.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"50x50","expected-size":"50","filename":"50.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"72x72","expected-size":"144","filename":"144.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"40x40","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"83.5x83.5","expected-size":"167","filename":"167.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"20x20","expected-size":"20","filename":"20.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"}]} \ No newline at end of file +{ + "images": [ + { + "idiom": "ios-marketing", + "filename": "AppIcon-1024x1024.png", + "scale": "1x", + "size": "1024x1024" + }, + { + "idiom": "iphone", + "filename": "AppIcon-180x180.png", + "scale": "3x", + "size": "60x60" + }, + { + "idiom": "ipad", + "filename": "AppIcon-167x167.png", + "scale": "2x", + "size": "83.5x83.5" + }, + { + "idiom": "ipad", + "filename": "AppIcon-152x152.png", + "scale": "2x", + "size": "76x76" + }, + { + "idiom": "iphone", + "filename": "AppIcon-120x120.png", + "scale": "3x", + "size": "40x40" + }, + { + "idiom": "iphone", + "filename": "AppIcon-120x120.png", + "scale": "2x", + "size": "60x60" + }, + { + "idiom": "iphone", + "filename": "AppIcon-87x87.png", + "scale": "3x", + "size": "29x29" + }, + { + "idiom": "ipad", + "filename": "AppIcon-80x80.png", + "scale": "2x", + "size": "40x40" + }, + { + "idiom": "iphone", + "filename": "AppIcon-80x80.png", + "scale": "2x", + "size": "40x40" + }, + { + "idiom": "ipad", + "filename": "AppIcon-76x76.png", + "scale": "1x", + "size": "76x76" + }, + { + "idiom": "iphone", + "filename": "AppIcon-60x60.png", + "scale": "3x", + "size": "20x20" + }, + { + "idiom": "ipad", + "filename": "AppIcon-58x58.png", + "scale": "2x", + "size": "29x29" + }, + { + "idiom": "iphone", + "filename": "AppIcon-58x58.png", + "scale": "2x", + "size": "29x29" + }, + { + "idiom": "ipad", + "filename": "AppIcon-40x40.png", + "scale": "1x", + "size": "40x40" + }, + { + "idiom": "iphone", + "filename": "AppIcon-40x40.png", + "scale": "2x", + "size": "20x20" + }, + { + "idiom": "ipad", + "filename": "AppIcon-40x40.png", + "scale": "2x", + "size": "20x20" + }, + { + "idiom": "ipad", + "filename": "AppIcon-29x29.png", + "scale": "1x", + "size": "29x29" + }, + { + "idiom": "ipad", + "filename": "AppIcon-20x20.png", + "scale": "1x", + "size": "20x20" + } + ], + "info": { + "version": 1, + "author": "fastlane" + } +} \ No newline at end of file diff --git a/dydxV4/dydxV4/Info.plist b/dydxV4/dydxV4/Info.plist index a5e3043a2..34af186aa 100644 --- a/dydxV4/dydxV4/Info.plist +++ b/dydxV4/dydxV4/Info.plist @@ -44,6 +44,8 @@ RecordOnStart + ITSAppUsesNonExemptEncryption + LSApplicationQueriesSchemes rainbow diff --git a/dydxV4/fastlane/.env b/dydxV4/fastlane/.env new file mode 100644 index 000000000..f68240ee5 --- /dev/null +++ b/dydxV4/fastlane/.env @@ -0,0 +1,9 @@ +URL_SCHEME=dydxv4 +# Your App Store Connect / iTunes Connect account email. +FASTLANE_USER=user@example.come +# The App Store Connect Team ID. +FASTLANE_TEAM_ID=75C6UARB5H +# Password for services like uploading to TestFlight or accessing iTunes Connect APIs without 2-factor authentication. +FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD=password +# The application identifier, also known as the Bundle Identifier. Found in your App Store Connect -> App Information page +BUNDLE_ID=exchangeV4.dydx.trading \ No newline at end of file diff --git a/dydxV4/fastlane/Appfile b/dydxV4/fastlane/Appfile new file mode 100644 index 000000000..df80eb079 --- /dev/null +++ b/dydxV4/fastlane/Appfile @@ -0,0 +1,7 @@ +# Appfile + +# The application identifier, also known as the Bundle Identifier. +app_identifier "#{ENV["BUNDLE_ID"]}" + +# For more information about the Appfile, see: +# https://docs.fastlane.tools/advanced/#appfile diff --git a/dydxV4/fastlane/Deliverfile b/dydxV4/fastlane/Deliverfile new file mode 100644 index 000000000..5b9d53008 --- /dev/null +++ b/dydxV4/fastlane/Deliverfile @@ -0,0 +1,7 @@ +# fastlane/Deliverfile + +app_identifier "#{ENV["BUNDLE_ID"]}" + +# if you are not including screenshots or binary, set below to false +# skip_screenshots true +# skip_binary_upload true \ No newline at end of file diff --git a/dydxV4/fastlane/Fastfile b/dydxV4/fastlane/Fastfile new file mode 100644 index 000000000..8be26384b --- /dev/null +++ b/dydxV4/fastlane/Fastfile @@ -0,0 +1,202 @@ +# fastlane/Fastfile + +require 'xcodeproj' + +xcode_select "/Applications/Xcode.app" + +default_platform(:ios) +# Path to your Xcode project +project_path_from_root = "./dydxV4.xcodeproj" +project_path_from_fastlane_dir = "../dydxV4.xcodeproj" +plist_path = "./dydxV4/Info.plist" +project = Xcodeproj::Project.open(project_path_from_fastlane_dir) +workspace_path = "../dydx/dydx.xcworkspace" +target_name = "dydxV4" +scheme_name = "dydxV4" + +platform :ios do + + desc "Update PRODUCT_BUNDLE_IDENTIFIER in Xcode project with the app_identifier from the Appfile" + lane :update_bundle_identifier do + + # Get the app_identifier from the Appfile + app_id = CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier) + + # Verify we got a valid app_identifier + if app_id.nil? || app_id.empty? + UI.user_error!("No app_identifier found in the Appfile") + end + + # Iterate through all configurations for a specified target + project.targets.each do |target| + if target.name == target_name + target.build_configurations.each do |config| + # Update the PRODUCT_BUNDLE_IDENTIFIER + config.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] = app_id + end + end + end + + # Save the project file + project.save + + UI.success("Updated PRODUCT_BUNDLE_IDENTIFIER to #{app_id}") + end + + + + + desc "Increments the build number based on last build submitted to testflight" + lane :dydx_increment_build_number do + + # Fetch the most recent build number from App Store Connect + begin + cur_build_number = app_store_build_number(live: false) + rescue => ex + UI.important("Couldn't find a build number because of: #{ex}") + cur_build_number = nil + end + + if cur_build_number.nil? || cur_build_number.to_s.empty? + # If there's no previous version, we default to 1.0.0 + next_build_number = 1 + UI.message("No previous version found. Starting at #{next_build_number}") + else + next_build_number = cur_build_number + 1 + end + + increment_build_number( + build_number: next_build_number, # set a specific number + xcodeproj: project_path_from_root + ) + + UI.message("New build number to release is #{next_build_number}") + + end + + desc "Update the marketing version in the Xcode project" + lane :update_marketing_version do + + # Ask the user what kind of release they want to do + current_marketing_version = get_version_number(xcodeproj:project_path_from_root) + UI.important("Current Local Marketing Version: #{current_marketing_version}") + release_type = UI.select("How would you like to update the marketing version?", ["none", "major", "minor", "patch", "custom"]) + + # Breakdown the last version into its numeric components + market_version_components = current_marketing_version.split(".").map(&:to_i) + + # Ensure there are exactly three components, assuming "0" where components may be missing + while market_version_components.length < 3 + market_version_components.push(0) + end + + # Extract the major, minor, and patch versions safely after ensuring no component is missing + major, minor, patch = market_version_components + + # ... [rest of your lane logic] + + # Increment version numbers based on the release type + case release_type + when "major" + major += 1 + minor = 0 # Reset minor and patch for a major release + patch = 0 + when "minor" + minor += 1 + patch = 0 # Reset patch for a minor release + when "patch" + patch += 1 + when "custom" + # Ask the user what the custom version should be + next_marketing_version = UI.input("\nCurrent Marketing Version: #{current_marketing_version}\nWhat would you like to update the version to?") + when "none" + UI.message("Keeping marketing version the same") + else + UI.user_error!("Invalid selection.") + end + + + # Construct the next version string if not custom + next_marketing_version ||= [major, minor, patch].join(".") # This creates a version string unless 'next_marketing_version' was already set in 'custom' + + # Fetch the 'MARKETING_VERSION' and update it with the new version number + project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings['MARKETING_VERSION'] = next_marketing_version + end + end + + # Save the project file with updated settings + project.save + + UI.success("Updated MARKETING_VERSION to #{next_marketing_version}}") + end + + lane :dydx_update_url_schemes do + # Accessing environment variable + url_scheme = ENV["URL_SCHEME"] + + update_url_schemes( + path: plist_path, + url_schemes: url_scheme + ) + + # ... rest of your build script ... + end + + + desc "Generate app icons" + lane :generate_app_icons do + appicon( + appicon_image_file: "./fastlane/resources/AppIcon.png", + appicon_devices: [:ipad, :iphone, :ios_marketing], + appicon_path: "../dydxV4/dydxV4/Assets.xcassets/" + + ) + UI.success("Generated app icons and placed them in the Asset Catalog!") + end + + lane :enable_associated_domains do + produce( + enable_services: { + associated_domains: true # Enable associated domains + } + ) + get_certificates + get_provisioning_profile + end + + + platform :ios do + desc "Submit a new build for review" + lane :create_build_and_submit_for_review do + update_bundle_identifier + dydx_increment_build_number + update_marketing_version + generate_app_icons + # Build your app first (optional, if you haven't done this already) + get_certificates + get_provisioning_profile + build_app( + scheme: scheme_name, + workspace: workspace_path + ) + + # Upload the build to TestFlight/App Store Connect + upload_to_testflight( + skip_waiting_for_build_processing: false, # Change to false if running on CI. If true, distribute_external option won't work and no build will be distributed to testers + # Add more parameters here if needed, depending on your setup + ) + + # Submit the build for review + deliver( + submit_for_review: true, # Set to true if you want to automatically submit for App Store review. + force: false, # Skip HTMl report verification. Change to true if running on CI. + automatic_release: false, # Set to true if you want to automatically release to the App Store once the app review is done + # If you have more options for the review process or metadata, specify them here + # ... + ) + end + end + +end diff --git a/dydxV4/fastlane/Gemfile b/dydxV4/fastlane/Gemfile new file mode 100644 index 000000000..395c9da0b --- /dev/null +++ b/dydxV4/fastlane/Gemfile @@ -0,0 +1,8 @@ +source 'https://rubygems.org' + +gem 'xcodeproj' +gem 'json' +gem 'fastlane' + +plugins_path = File.join(File.dirname(__FILE__), '.', 'Pluginfile') +eval_gemfile(plugins_path) if File.exist?(plugins_path) diff --git a/dydxV4/fastlane/Gemfile.lock b/dydxV4/fastlane/Gemfile.lock new file mode 100644 index 000000000..678c6ce63 --- /dev/null +++ b/dydxV4/fastlane/Gemfile.lock @@ -0,0 +1,223 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (3.0.6) + rexml + addressable (2.8.5) + public_suffix (>= 2.0.2, < 6.0) + artifactory (3.0.15) + atomos (0.1.3) + aws-eventstream (1.2.0) + aws-partitions (1.835.0) + aws-sdk-core (3.185.1) + aws-eventstream (~> 1, >= 1.0.2) + aws-partitions (~> 1, >= 1.651.0) + aws-sigv4 (~> 1.5) + jmespath (~> 1, >= 1.6.1) + aws-sdk-kms (1.72.0) + aws-sdk-core (~> 3, >= 3.184.0) + aws-sigv4 (~> 1.1) + aws-sdk-s3 (1.136.0) + aws-sdk-core (~> 3, >= 3.181.0) + aws-sdk-kms (~> 1) + aws-sigv4 (~> 1.6) + aws-sigv4 (1.6.0) + aws-eventstream (~> 1, >= 1.0.2) + babosa (1.0.4) + claide (1.1.0) + colored (1.2) + colored2 (3.1.2) + commander (4.6.0) + highline (~> 2.0.0) + declarative (0.0.20) + digest-crc (0.6.5) + rake (>= 12.0.0, < 14.0.0) + domain_name (0.5.20190701) + unf (>= 0.0.5, < 1.0.0) + dotenv (2.8.1) + emoji_regex (3.2.3) + excon (0.104.0) + faraday (1.10.3) + faraday-em_http (~> 1.0) + faraday-em_synchrony (~> 1.0) + faraday-excon (~> 1.1) + faraday-httpclient (~> 1.0) + faraday-multipart (~> 1.0) + faraday-net_http (~> 1.0) + faraday-net_http_persistent (~> 1.0) + faraday-patron (~> 1.0) + faraday-rack (~> 1.0) + faraday-retry (~> 1.0) + ruby2_keywords (>= 0.0.4) + faraday-cookie_jar (0.0.7) + faraday (>= 0.8.0) + http-cookie (~> 1.0.0) + faraday-em_http (1.0.0) + faraday-em_synchrony (1.0.0) + faraday-excon (1.1.0) + faraday-httpclient (1.0.1) + faraday-multipart (1.0.4) + multipart-post (~> 2) + faraday-net_http (1.0.1) + faraday-net_http_persistent (1.2.0) + faraday-patron (1.0.0) + faraday-rack (1.0.0) + faraday-retry (1.0.3) + faraday_middleware (1.2.0) + faraday (~> 1.0) + fastimage (2.2.7) + fastlane (2.216.0) + CFPropertyList (>= 2.3, < 4.0.0) + addressable (>= 2.8, < 3.0.0) + artifactory (~> 3.0) + aws-sdk-s3 (~> 1.0) + babosa (>= 1.0.3, < 2.0.0) + bundler (>= 1.12.0, < 3.0.0) + colored + commander (~> 4.6) + dotenv (>= 2.1.1, < 3.0.0) + emoji_regex (>= 0.1, < 4.0) + excon (>= 0.71.0, < 1.0.0) + faraday (~> 1.0) + faraday-cookie_jar (~> 0.0.6) + faraday_middleware (~> 1.0) + fastimage (>= 2.1.0, < 3.0.0) + gh_inspector (>= 1.1.2, < 2.0.0) + google-apis-androidpublisher_v3 (~> 0.3) + google-apis-playcustomapp_v1 (~> 0.1) + google-cloud-storage (~> 1.31) + highline (~> 2.0) + http-cookie (~> 1.0.5) + json (< 3.0.0) + jwt (>= 2.1.0, < 3) + mini_magick (>= 4.9.4, < 5.0.0) + multipart-post (>= 2.0.0, < 3.0.0) + naturally (~> 2.2) + optparse (~> 0.1.1) + plist (>= 3.1.0, < 4.0.0) + rubyzip (>= 2.0.0, < 3.0.0) + security (= 0.1.3) + simctl (~> 1.6.3) + terminal-notifier (>= 2.0.0, < 3.0.0) + terminal-table (~> 3) + tty-screen (>= 0.6.3, < 1.0.0) + tty-spinner (>= 0.8.0, < 1.0.0) + word_wrap (~> 1.0.0) + xcodeproj (>= 1.13.0, < 2.0.0) + xcpretty (~> 0.3.0) + xcpretty-travis-formatter (>= 0.0.3) + fastlane-plugin-appicon (0.16.0) + json + mini_magick (>= 4.9.4, < 5.0.0) + gh_inspector (1.1.3) + google-apis-androidpublisher_v3 (0.50.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-core (0.11.1) + addressable (~> 2.5, >= 2.5.1) + googleauth (>= 0.16.2, < 2.a) + httpclient (>= 2.8.1, < 3.a) + mini_mime (~> 1.0) + representable (~> 3.0) + retriable (>= 2.0, < 4.a) + rexml + webrick + google-apis-iamcredentials_v1 (0.17.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-playcustomapp_v1 (0.13.0) + google-apis-core (>= 0.11.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.3.1) + google-cloud-storage (1.44.0) + addressable (~> 2.8) + digest-crc (~> 0.4) + google-apis-iamcredentials_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.8.1) + faraday (>= 0.17.3, < 3.a) + jwt (>= 1.4, < 3.0) + multi_json (~> 1.11) + os (>= 0.9, < 2.0) + signet (>= 0.16, < 2.a) + highline (2.0.3) + http-cookie (1.0.5) + domain_name (~> 0.5) + httpclient (2.8.3) + jmespath (1.6.2) + json (2.6.3) + jwt (2.7.1) + mini_magick (4.12.0) + mini_mime (1.1.5) + multi_json (1.15.0) + multipart-post (2.3.0) + nanaimo (0.3.0) + naturally (2.2.1) + optparse (0.1.1) + os (1.1.4) + plist (3.7.0) + public_suffix (5.0.3) + rake (13.0.6) + representable (3.2.0) + declarative (< 0.1.0) + trailblazer-option (>= 0.1.1, < 0.2.0) + uber (< 0.2.0) + retriable (3.1.2) + rexml (3.2.6) + rouge (2.0.7) + ruby2_keywords (0.0.5) + rubyzip (2.3.2) + security (0.1.3) + signet (0.18.0) + addressable (~> 2.8) + faraday (>= 0.17.5, < 3.a) + jwt (>= 1.5, < 3.0) + multi_json (~> 1.10) + simctl (1.6.10) + CFPropertyList + naturally + terminal-notifier (2.0.0) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + trailblazer-option (0.1.2) + tty-cursor (0.7.1) + tty-screen (0.8.1) + tty-spinner (0.9.3) + tty-cursor (~> 0.7) + uber (0.1.0) + unf (0.1.4) + unf_ext + unf_ext (0.0.8.2) + unicode-display_width (2.5.0) + webrick (1.8.1) + word_wrap (1.0.0) + xcodeproj (1.23.0) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.3) + claide (>= 1.0.2, < 2.0) + colored2 (~> 3.1) + nanaimo (~> 0.3.0) + rexml (~> 3.2.4) + xcpretty (0.3.0) + rouge (~> 2.0.7) + xcpretty-travis-formatter (1.0.1) + xcpretty (~> 0.2, >= 0.0.7) + +PLATFORMS + arm64-darwin-22 + +DEPENDENCIES + fastlane + fastlane-plugin-appicon + json + xcodeproj + +BUNDLED WITH + 2.4.10 diff --git a/dydxV4/fastlane/Pluginfile b/dydxV4/fastlane/Pluginfile new file mode 100644 index 000000000..95681c1e8 --- /dev/null +++ b/dydxV4/fastlane/Pluginfile @@ -0,0 +1 @@ +gem 'fastlane-plugin-appicon' diff --git a/dydxV4/fastlane/README.md b/dydxV4/fastlane/README.md new file mode 100644 index 000000000..b1cba00df --- /dev/null +++ b/dydxV4/fastlane/README.md @@ -0,0 +1,80 @@ +fastlane documentation +---- + +# Installation + +Make sure you have the latest version of the Xcode command line tools installed: + +```sh +xcode-select --install +``` + +For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane) + +# Available Actions + +## iOS + +### ios update_bundle_identifier + +```sh +[bundle exec] fastlane ios update_bundle_identifier +``` + +Update PRODUCT_BUNDLE_IDENTIFIER in Xcode project with the app_identifier from the Appfile + +### ios dydx_increment_build_number + +```sh +[bundle exec] fastlane ios dydx_increment_build_number +``` + +Increments the build number based on last build submitted to testflight + +### ios update_marketing_version + +```sh +[bundle exec] fastlane ios update_marketing_version +``` + +Update the marketing version in the Xcode project + +### ios dydx_update_url_schemes + +```sh +[bundle exec] fastlane ios dydx_update_url_schemes +``` + + + +### ios generate_app_icons + +```sh +[bundle exec] fastlane ios generate_app_icons +``` + +Generate app icons + +### ios enable_associated_domains + +```sh +[bundle exec] fastlane ios enable_associated_domains +``` + + + +### ios create_build_and_submit_for_review + +```sh +[bundle exec] fastlane ios create_build_and_submit_for_review +``` + +Submit a new build for review + +---- + +This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run. + +More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools). + +The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools). diff --git a/dydxV4/fastlane/changelog.txt b/dydxV4/fastlane/changelog.txt new file mode 100644 index 000000000..ee03ff72c --- /dev/null +++ b/dydxV4/fastlane/changelog.txt @@ -0,0 +1 @@ +what has changed since the last versoins \ No newline at end of file diff --git a/dydxV4/fastlane/metadata/copyright.txt b/dydxV4/fastlane/metadata/copyright.txt new file mode 100644 index 000000000..8a4bccd67 --- /dev/null +++ b/dydxV4/fastlane/metadata/copyright.txt @@ -0,0 +1 @@ +© dYdX Trading Inc. (subject to v4 Terms of Use, available at https://dydx.exchange/legal) \ No newline at end of file diff --git a/dydxV4/fastlane/metadata/en-US/description.txt b/dydxV4/fastlane/metadata/en-US/description.txt new file mode 100644 index 000000000..508879cf9 --- /dev/null +++ b/dydxV4/fastlane/metadata/en-US/description.txt @@ -0,0 +1,17 @@ +dYdX Chain is the world's most advanced trading software. dYdX Chain is a decentralized finance (DeFi) software that empowers you to be in full control of your assets and trades at all times. Gone are the days of unwanted interference from centralized exchanges. dYdX Chain offers exposure to over 30 unique cryptocurrency markets ranging from Bitcoin (BTC) and Ethereum (ETH) to popular alternate currencies like Aave (AAVE), Avalanche (AVAX), Cardano (ADA), Chainlink (LINK), Dogecoin (DOGE), Solana (SOL), Terra (LUNA), and Uniswap (UNI). After depositing funds to dYdX Chain, traders benefit from: + +⛽️ No gas fees for trading +💸 Low trading fees & minimum order sizes +⚙ Advanced order types +💦 Liquid order books + +dYdX Chain also offers access to an advanced trading experience with a variety of trading order types, including Market, Limit, Stop Limit, Trailing Stop, and Take Profit Limit orders. It is also compatible with all of the most popular wallets, so you can connect & start trading within minutes. + +Explore the community and connect with fellow traders around the world. +Website: +Twitter: +Discord: + +Please read the disclosures below before you begin trading on dYdX Chain. +Terms of Use: +Privacy Policy: diff --git a/dydxV4/fastlane/metadata/en-US/keywords.txt b/dydxV4/fastlane/metadata/en-US/keywords.txt new file mode 100644 index 000000000..c7fb56539 --- /dev/null +++ b/dydxV4/fastlane/metadata/en-US/keywords.txt @@ -0,0 +1 @@ +dYdX,DeFi,Decentralized,Crypto,Cryptocurrency,Trading,Gas,TC,perpetuals,perps,dYdXChain,open source \ No newline at end of file diff --git a/dydxV4/fastlane/metadata/en-US/marketing_url.txt b/dydxV4/fastlane/metadata/en-US/marketing_url.txt new file mode 100644 index 000000000..77ac0b588 --- /dev/null +++ b/dydxV4/fastlane/metadata/en-US/marketing_url.txt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/dydxV4/fastlane/metadata/en-US/name.txt b/dydxV4/fastlane/metadata/en-US/name.txt new file mode 100644 index 000000000..ad02f57d3 --- /dev/null +++ b/dydxV4/fastlane/metadata/en-US/name.txt @@ -0,0 +1 @@ +dYdX \ No newline at end of file diff --git a/dydxV4/fastlane/metadata/en-US/privacy_url.txt b/dydxV4/fastlane/metadata/en-US/privacy_url.txt new file mode 100644 index 000000000..bf77ba8aa --- /dev/null +++ b/dydxV4/fastlane/metadata/en-US/privacy_url.txt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/dydxV4/fastlane/metadata/en-US/promotional_text.txt b/dydxV4/fastlane/metadata/en-US/promotional_text.txt new file mode 100644 index 000000000..ec0b6e71b --- /dev/null +++ b/dydxV4/fastlane/metadata/en-US/promotional_text.txt @@ -0,0 +1 @@ +Trade on dYdX Chain — one of the world's most advanced DEX software \ No newline at end of file diff --git a/dydxV4/fastlane/metadata/en-US/release_notes.txt b/dydxV4/fastlane/metadata/en-US/release_notes.txt new file mode 100644 index 000000000..380d20bca --- /dev/null +++ b/dydxV4/fastlane/metadata/en-US/release_notes.txt @@ -0,0 +1 @@ +v4 open source iOS software. Bug fixes and improvements. diff --git a/dydxV4/fastlane/metadata/en-US/subtitle.txt b/dydxV4/fastlane/metadata/en-US/subtitle.txt new file mode 100644 index 000000000..6fc1a98a1 --- /dev/null +++ b/dydxV4/fastlane/metadata/en-US/subtitle.txt @@ -0,0 +1 @@ +Decentralized crypto trading \ No newline at end of file diff --git a/dydxV4/fastlane/metadata/en-US/support_url.txt b/dydxV4/fastlane/metadata/en-US/support_url.txt new file mode 100644 index 000000000..39163191e --- /dev/null +++ b/dydxV4/fastlane/metadata/en-US/support_url.txt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/dydxV4/fastlane/metadata/primary_category.txt b/dydxV4/fastlane/metadata/primary_category.txt new file mode 100644 index 000000000..236724e13 --- /dev/null +++ b/dydxV4/fastlane/metadata/primary_category.txt @@ -0,0 +1 @@ +Finance \ No newline at end of file diff --git a/dydxV4/fastlane/metadata/primary_first_sub_category.txt b/dydxV4/fastlane/metadata/primary_first_sub_category.txt new file mode 100644 index 000000000..e69de29bb diff --git a/dydxV4/fastlane/metadata/primary_second_sub_category.txt b/dydxV4/fastlane/metadata/primary_second_sub_category.txt new file mode 100644 index 000000000..e69de29bb diff --git a/dydxV4/fastlane/metadata/review_information/demo_password.txt b/dydxV4/fastlane/metadata/review_information/demo_password.txt new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/dydxV4/fastlane/metadata/review_information/demo_password.txt @@ -0,0 +1 @@ + diff --git a/dydxV4/fastlane/metadata/review_information/demo_user.txt b/dydxV4/fastlane/metadata/review_information/demo_user.txt new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/dydxV4/fastlane/metadata/review_information/demo_user.txt @@ -0,0 +1 @@ + diff --git a/dydxV4/fastlane/metadata/review_information/email_address.txt b/dydxV4/fastlane/metadata/review_information/email_address.txt new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/dydxV4/fastlane/metadata/review_information/email_address.txt @@ -0,0 +1 @@ + diff --git a/dydxV4/fastlane/metadata/review_information/first_name.txt b/dydxV4/fastlane/metadata/review_information/first_name.txt new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/dydxV4/fastlane/metadata/review_information/first_name.txt @@ -0,0 +1 @@ + diff --git a/dydxV4/fastlane/metadata/review_information/last_name.txt b/dydxV4/fastlane/metadata/review_information/last_name.txt new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/dydxV4/fastlane/metadata/review_information/last_name.txt @@ -0,0 +1 @@ + diff --git a/dydxV4/fastlane/metadata/review_information/notes.txt b/dydxV4/fastlane/metadata/review_information/notes.txt new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/dydxV4/fastlane/metadata/review_information/notes.txt @@ -0,0 +1 @@ + diff --git a/dydxV4/fastlane/metadata/review_information/phone_number.txt b/dydxV4/fastlane/metadata/review_information/phone_number.txt new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/dydxV4/fastlane/metadata/review_information/phone_number.txt @@ -0,0 +1 @@ + diff --git a/dydxV4/fastlane/metadata/secondary_category.txt b/dydxV4/fastlane/metadata/secondary_category.txt new file mode 100644 index 000000000..e2fe55956 --- /dev/null +++ b/dydxV4/fastlane/metadata/secondary_category.txt @@ -0,0 +1 @@ +Business \ No newline at end of file diff --git a/dydxV4/fastlane/metadata/secondary_first_sub_category.txt b/dydxV4/fastlane/metadata/secondary_first_sub_category.txt new file mode 100644 index 000000000..e69de29bb diff --git a/dydxV4/fastlane/metadata/secondary_second_sub_category.txt b/dydxV4/fastlane/metadata/secondary_second_sub_category.txt new file mode 100644 index 000000000..e69de29bb diff --git a/dydxV4/fastlane/resources/AppIcon.png b/dydxV4/fastlane/resources/AppIcon.png new file mode 100644 index 000000000..19ff26c60 Binary files /dev/null and b/dydxV4/fastlane/resources/AppIcon.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/0_APP_IPHONE_40_0.png b/dydxV4/fastlane/screenshots/en-US/0_APP_IPHONE_40_0.png new file mode 100644 index 000000000..cc84ba76d Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/0_APP_IPHONE_40_0.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/0_APP_IPHONE_55_0.png b/dydxV4/fastlane/screenshots/en-US/0_APP_IPHONE_55_0.png new file mode 100644 index 000000000..d2e05dc49 Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/0_APP_IPHONE_55_0.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/0_APP_IPHONE_58_0.png b/dydxV4/fastlane/screenshots/en-US/0_APP_IPHONE_58_0.png new file mode 100644 index 000000000..bc23e22e8 Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/0_APP_IPHONE_58_0.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/0_APP_IPHONE_61_0.png b/dydxV4/fastlane/screenshots/en-US/0_APP_IPHONE_61_0.png new file mode 100644 index 000000000..2a29f1447 Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/0_APP_IPHONE_61_0.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/0_APP_IPHONE_65_0.png b/dydxV4/fastlane/screenshots/en-US/0_APP_IPHONE_65_0.png new file mode 100644 index 000000000..773db4592 Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/0_APP_IPHONE_65_0.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/0_APP_IPHONE_67_0.png b/dydxV4/fastlane/screenshots/en-US/0_APP_IPHONE_67_0.png new file mode 100644 index 000000000..e3d8491d0 Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/0_APP_IPHONE_67_0.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/1_APP_IPHONE_40_1.png b/dydxV4/fastlane/screenshots/en-US/1_APP_IPHONE_40_1.png new file mode 100644 index 000000000..77114dddd Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/1_APP_IPHONE_40_1.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/1_APP_IPHONE_47_1.png b/dydxV4/fastlane/screenshots/en-US/1_APP_IPHONE_47_1.png new file mode 100644 index 000000000..68b3ee37c Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/1_APP_IPHONE_47_1.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/1_APP_IPHONE_55_1.png b/dydxV4/fastlane/screenshots/en-US/1_APP_IPHONE_55_1.png new file mode 100644 index 000000000..051a81395 Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/1_APP_IPHONE_55_1.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/1_APP_IPHONE_58_1.png b/dydxV4/fastlane/screenshots/en-US/1_APP_IPHONE_58_1.png new file mode 100644 index 000000000..bd398d7cf Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/1_APP_IPHONE_58_1.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/1_APP_IPHONE_61_1.png b/dydxV4/fastlane/screenshots/en-US/1_APP_IPHONE_61_1.png new file mode 100644 index 000000000..b619d30ae Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/1_APP_IPHONE_61_1.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/1_APP_IPHONE_65_1.png b/dydxV4/fastlane/screenshots/en-US/1_APP_IPHONE_65_1.png new file mode 100644 index 000000000..e25cc5424 Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/1_APP_IPHONE_65_1.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/1_APP_IPHONE_67_1.png b/dydxV4/fastlane/screenshots/en-US/1_APP_IPHONE_67_1.png new file mode 100644 index 000000000..a1f3140c1 Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/1_APP_IPHONE_67_1.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/2_APP_IPHONE_40_2.png b/dydxV4/fastlane/screenshots/en-US/2_APP_IPHONE_40_2.png new file mode 100644 index 000000000..4e972bbd8 Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/2_APP_IPHONE_40_2.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/2_APP_IPHONE_55_2.png b/dydxV4/fastlane/screenshots/en-US/2_APP_IPHONE_55_2.png new file mode 100644 index 000000000..2ec8e1d29 Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/2_APP_IPHONE_55_2.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/2_APP_IPHONE_58_2.png b/dydxV4/fastlane/screenshots/en-US/2_APP_IPHONE_58_2.png new file mode 100644 index 000000000..5663f2129 Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/2_APP_IPHONE_58_2.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/2_APP_IPHONE_61_2.png b/dydxV4/fastlane/screenshots/en-US/2_APP_IPHONE_61_2.png new file mode 100644 index 000000000..8dee218fb Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/2_APP_IPHONE_61_2.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/2_APP_IPHONE_65_2.png b/dydxV4/fastlane/screenshots/en-US/2_APP_IPHONE_65_2.png new file mode 100644 index 000000000..8f319cad4 Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/2_APP_IPHONE_65_2.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/2_APP_IPHONE_67_2.png b/dydxV4/fastlane/screenshots/en-US/2_APP_IPHONE_67_2.png new file mode 100644 index 000000000..8aa5f2a9d Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/2_APP_IPHONE_67_2.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/3_APP_IPHONE_40_3.png b/dydxV4/fastlane/screenshots/en-US/3_APP_IPHONE_40_3.png new file mode 100644 index 000000000..52c17dc01 Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/3_APP_IPHONE_40_3.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/3_APP_IPHONE_55_3.png b/dydxV4/fastlane/screenshots/en-US/3_APP_IPHONE_55_3.png new file mode 100644 index 000000000..555e09806 Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/3_APP_IPHONE_55_3.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/3_APP_IPHONE_58_3.png b/dydxV4/fastlane/screenshots/en-US/3_APP_IPHONE_58_3.png new file mode 100644 index 000000000..3230e7996 Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/3_APP_IPHONE_58_3.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/3_APP_IPHONE_61_3.png b/dydxV4/fastlane/screenshots/en-US/3_APP_IPHONE_61_3.png new file mode 100644 index 000000000..e96e897cd Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/3_APP_IPHONE_61_3.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/3_APP_IPHONE_65_3.png b/dydxV4/fastlane/screenshots/en-US/3_APP_IPHONE_65_3.png new file mode 100644 index 000000000..a6b905dd8 Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/3_APP_IPHONE_65_3.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/3_APP_IPHONE_67_3.png b/dydxV4/fastlane/screenshots/en-US/3_APP_IPHONE_67_3.png new file mode 100644 index 000000000..ac20bdd80 Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/3_APP_IPHONE_67_3.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/4_APP_IPHONE_40_4.png b/dydxV4/fastlane/screenshots/en-US/4_APP_IPHONE_40_4.png new file mode 100644 index 000000000..ae26cca23 Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/4_APP_IPHONE_40_4.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/4_APP_IPHONE_47_4.png b/dydxV4/fastlane/screenshots/en-US/4_APP_IPHONE_47_4.png new file mode 100644 index 000000000..a36b45c84 Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/4_APP_IPHONE_47_4.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/4_APP_IPHONE_55_4.png b/dydxV4/fastlane/screenshots/en-US/4_APP_IPHONE_55_4.png new file mode 100644 index 000000000..7ee6dc41b Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/4_APP_IPHONE_55_4.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/4_APP_IPHONE_58_4.png b/dydxV4/fastlane/screenshots/en-US/4_APP_IPHONE_58_4.png new file mode 100644 index 000000000..45ba432fd Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/4_APP_IPHONE_58_4.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/4_APP_IPHONE_61_4.png b/dydxV4/fastlane/screenshots/en-US/4_APP_IPHONE_61_4.png new file mode 100644 index 000000000..137365abb Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/4_APP_IPHONE_61_4.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/4_APP_IPHONE_65_4.png b/dydxV4/fastlane/screenshots/en-US/4_APP_IPHONE_65_4.png new file mode 100644 index 000000000..fe08840b9 Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/4_APP_IPHONE_65_4.png differ diff --git a/dydxV4/fastlane/screenshots/en-US/4_APP_IPHONE_67_4.png b/dydxV4/fastlane/screenshots/en-US/4_APP_IPHONE_67_4.png new file mode 100644 index 000000000..a5fbcdb54 Binary files /dev/null and b/dydxV4/fastlane/screenshots/en-US/4_APP_IPHONE_67_4.png differ diff --git a/scripts/bootstrap.sh b/scripts/bootstrap.sh index 0a338452c..9ee074ed6 100755 --- a/scripts/bootstrap.sh +++ b/scripts/bootstrap.sh @@ -33,8 +33,8 @@ else cd .. fi -open native-ios-v4/dydx/dydx.xcworkspace +open v4-native-ios/dydx/dydx.xcworkspace -#xcodebuild -workspace native-ios-v4/dydx/dydx.xcworkspace -scheme dydxV4 -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 11,OS=14.4' build +#xcodebuild -workspace v4-native-ios/dydx/dydx.xcworkspace -scheme dydxV4 -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 11,OS=14.4' build -#xcodebuild clean archive -archivePath build/dydxV4 -scheme dydxV4 -workspace native-ios-v4/dydx/dydx.xcworkspace -sdk iphoneos -destination 'generic/platform=iOS' CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO +#xcodebuild clean archive -archivePath build/dydxV4 -scheme dydxV4 -workspace v4-native-ios/dydx/dydx.xcworkspace -sdk iphoneos -destination 'generic/platform=iOS' CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO