Compare commits

..
Author SHA1 Message Date
Andrea Maria Piana 4e8bb68f38 Bump version to 1.12.2 2021-03-26 08:22:10 +01:00
Samuel Hawksby-Robinson 43fc6498c2 Updated status-go version from branch to tag 2021-03-25 16:24:37 +00:00
Samuel Hawksby-Robinson 0b5dd66a1a Updated status-go version 2021-03-25 16:09:28 +00:00
Samuel Hawksby-Robinson a71dc8406e Removed region from on-ramping we don't want it (#11920)
* Removed region from on-ramping we don't want it

* Updated status-go version

* revert change make ios made to keycard version

* Updated status-go version

* Updated status-go version

* Updated status-go version
2021-03-25 16:07:04 +00:00
Andrea Maria Piana cd7b7ec9b7 Bump version to 1.12.1 2021-03-15 18:50:22 +01:00
Andrea Maria Piana 8be6bbba46 Upgrade status-go 2021-03-15 15:55:41 +01:00
andrey 1771c3cf59 [#11843] "Enable all" is disabled after relogin for 3 or 4 chat link previews after relogin
Signed-off-by: andrey <motor4ik@gmail.com>
(cherry picked from commit 51178ab1b2)
2021-03-08 15:22:36 +01:00
andrey 6fa6f65c8e [#11822] Own status updates are shown on other user profiles 2021-03-08 08:52:31 +01:00
Andrea Maria Piana 3d802115b9 Dont push notification if chat is not in cofx
Signed-off-by: andrey <motor4ik@gmail.com>
2021-03-08 08:52:13 +01:00
Roman Volosovskyi 1632880302 [#11842] Fix login after restoring existing account 2021-03-05 15:01:48 +02:00
Roman Volosovskyi b3f34d1ea9 [#11823] Fix balances fetching on recovering kk multiacc 2021-03-04 18:45:12 +02:00
987 changed files with 30964 additions and 56716 deletions
+1
View File
@@ -1,5 +1,6 @@
status-im.utils.build/warning-handler
status-im.utils.build/get-current-sha
status-im.ethereum.resolver/name
status-im.chat.constants/spacing-char
status-im.chat.constants/arg-wrapping-char
status-im.ios.core/init
+1 -7
View File
@@ -27,11 +27,5 @@ ENABLE_QUO_PREVIEW=1
MAX_IMAGES_BATCH=5
APN_TOPIC=im.status.ethereum.pr
COMMUNITIES_ENABLED=1
COMMUNITIES_MANAGEMENT_ENABLED=1
DATABASE_MANAGEMENT_ENABLED=1
METRICS_ENABLED=0
DELETE_MESSAGE_ENABLED=1
COLLECTIBLES_ENABLED=1
COMMANDS_ENABLED=1
TWO_MINUTES_SYNCING=1
SWAP_ENABLED=1
STICKERS_TEST_ENABLED=1
+1 -7
View File
@@ -26,12 +26,6 @@ ENABLE_REFERRAL_INVITE=1
MAX_IMAGES_BATCH=5
APN_TOPIC=im.status.ethereum.pr
VERIFY_TRANSACTION_CHAIN_ID=3
VERIFY_ENS_CHAIN_ID=3
TEST_STATEOFUS=1
DATABASE_MANAGEMENT_ENABLED=1
COMMUNITIES_ENABLED=1
DATABASE_MANAGEMENT_ENABLED=1
COMMUNITIES_MANAGEMENT_ENABLED=1
METRICS_ENABLED=0
DELETE_MESSAGE_ENABLED=1
TWO_MINUTES_SYNCING=1
STICKERS_TEST_ENABLED=1
+2 -11
View File
@@ -1,6 +1,6 @@
CACHED_WEBVIEWS_ENABLED=1
DEBUG_WEBVIEW=1
DEFAULT_NETWORK=testnet_rpc
DEFAULT_NETWORK=mainnet_rpc
ERC20_CONTRACT_WARNINGS=0
ETHEREUM_DEV_CLUSTER=1
EXTENSIONS=0
@@ -18,23 +18,14 @@ RPC_NETWORKS_ONLY=0
PARTITIONED_TOPIC=0
CONTRACT_NODES=1
STATUS_GO_ENABLE_NIMBUS=0
COMMANDS_ENABLED=1
KEYCARD_TEST_MENU=0
ENABLE_ROOT_ALERT=1
ENABLE_REFERRAL_INVITE=1
DISABLE_WALLET_ON_MOBILE_NETWORK=1
APN_TOPIC=im.status.ethereum.pr
VERIFY_TRANSACTION_CHAIN_ID=3
VERIFY_ENS_CHAIN_ID=3
TEST_STATEOFUS=1
BLANK_PREVIEW=0
MAX_IMAGES_BATCH=5
GOOGLE_FREE=0
DATABASE_MANAGEMENT_ENABLED=1
COMMUNITIES_ENABLED=1
DATABASE_MANAGEMENT_ENABLED=1
COMMUNITIES_MANAGEMENT_ENABLED=1
METRICS_ENABLED=0
DELETE_MESSAGE_ENABLED=1
TWO_MINUTES_SYNCING=1
ENABLE_QUO_PREVIEW=1
STICKERS_TEST_ENABLED=1
+1 -2
View File
@@ -22,5 +22,4 @@ MAX_IMAGES_BATCH=5
BLANK_PREVIEW=0
COMMUNITIES_ENABLED=1
DATABASE_MANAGEMENT_ENABLED=1
METRICS_ENABLED=0
DELETE_MESSAGE_ENABLED=1
COMMUNITIES_MANAGEMENT_ENABLED=1
-3
View File
@@ -18,6 +18,3 @@ PARTITIONED_TOPIC=0
ENABLE_ROOT_ALERT=1
MAX_IMAGES_BATCH=1
ENABLE_REFERRAL_INVITE=0
METRICS_ENABLED=0
DELETE_MESSAGE_ENABLED=1
COLLECTIBLES_ENABLED=1
+3 -2
View File
@@ -8,9 +8,10 @@ These are just guidelines, not rules. Use your best judgment, and feel free to p
#### What should I know before I get started?
* [Mission and Principles](https://status.im/about)
* [Mission and Core Values](https://status.im/contribute)
* [Principles](https://status.im/contribute/our_principles.html)
* [Read our FAQ](https://status.im/docs/FAQs.html)
* [Join our Chat](http://join.status.im/chat/public/status-core-dev)
* [Developer Introduction](https://status.im/developer_tools/)
* [Build Status Yourself](https://status.im/technical/build_status)
* [Build Status Yourself](https://status.im/build_status)
* [Find issues to work on](https://github.com/status-im/)
+27 -8
View File
@@ -9,27 +9,46 @@ assignees: ''
# Bug Report
## Problem
## Problem
[comment]: # (A problem description)
An overview of the background required to understand the problem.
A problem description.
#### Expected behavior
[comment]: # (Describe what you expected to happen. Please include designs if possible.)
#### Actual behavior
[comment]: # (Describe what actually happened. Please include screenshots if possible.)
#### Notes
For the developer who will be investigating. Is it related to another PR? Tips on where to start?
#### Acceptance Criteria
Rules for the future PR to be accepted.
### Reproduction
1) Open Status
2)
[comment]: # (Describe how we can replicate the bug step by step.)
- Open Status
- ...
- Step 3, etc.
### Additional Information
- Status version: nightly
- Operating System: Android, iOS
[comment]: # (Please do your best to fill this out.)
- Status version: ...
[comment]: # (Android or iOS.)
- Operating System: <Android|iOS>
#### Logs
[comment]: # (Please, add logs/notes if necessary)
[comment]: # (if on Android please replicate bug whilst running adb logcat)
```
...
```
-77
View File
@@ -1,77 +0,0 @@
---
name: Release umbrella issue
about: Release Issue
title: 'Mobile release '
labels: release
assignees: ''
---
Issue to manage mobile release <version>
### Scope
[comment]: # (Add milestone from github)
https://github.com/status-im/status-react/milestone/
- release notes:
- release branch:
### Testing info
[comment]: # (TestRail info, added by QA)
Main test suite:
Upgrade (e2e):
### Builds in TestFlight and PlayStore to push as a release
[comment]: # (Will be added by QA after testing approving of build)
### Process
#### 1) Kick-off
- [ ] 1. Translation PRs is merged before cutting branch (Jinho)
- [ ] 2. Prepare scope of visible changes based on commits history, started from previous release branch cut ([guide](https://notes.status.im/how-to-prepare-release-notes))
- [ ] 3. Update [RELEASES.md](https://github.com/status-im/status-react/blob/develop/RELEASES.md) with release notes (make PR based on previous step)
- [ ] 4. Create release branch using this [guide](https://github.com/status-im/status-react/blob/develop/doc/RELEASE_GUIDE.md), bump VERSION (merge created PR ([example](https://github.com/status-im/status-react/pull/12504) ) to develop) and get successful release builds (so, testing can be started)
- [ ] 5. Based on release scope, ask for comms (Jonny)
- [ ] 6. Make sure that assets (screenshots, video) in stores are up-to-date, more info [here](https://notes.status.im/how-to-update-assets)
#### 2) Testing
[comment]: # (Section will be maintained by QA)
- [ ] Dogfooding (add notes, if it was held)
- [ ] Regression testing for release candidate build
- [ ] Upgrade tests
- [ ] Fix known blocker(s) found during regression testing
##### Blockers
[comment]: # (Section for blocker issues; should be fixed and merged by release-manager. Remove if no blockers found)
- [ ] 1 blocker:
=============================================================================================
- [ ] Cherry-pick fix(es) to the release branch
- [ ] Verify fix(es) on new release candidate build
- [ ] Retest
- [ ] Keep release build forever (button in Jenkins)
#### 3) Submission
- [ ] 1. Prepare PR for F-droid build ([instruction]( https://github.com/status-im/status-react/blob/develop/doc/FDROID.md))
- [ ] 2. Release notes written and added (500 character limit for updates (Android) and PR for [RELEASES.md](https://github.com/status-im/status-react/blob/develop/RELEASES.md) is ready to be merged (from 1.3 step)
- [ ] 3. Submit beta version for Android (Open Testing in Play Store)
- [ ] 4. Submit iOS build to Apple review ([instruction](https://drive.google.com/file/d/10Cl7PBB7TFPkZiVbfzdFGpfMRP9bxXuq/view?usp=sharing), be careful - low quality of audio)
- [ ] 5. Play store content reviewed and updated
- [ ] 6. Privacy policy reviewed and updated (ask in channel)
- [ ] 7. Countries to be excluded (ask in channel)
- [ ] 8. Changes to our FAQ made (should be checked and if any changes needed, ask Jakub to made them)
#### 4) Before publishing
- [ ] 1. Translations for comms available (marketing, ask in the channel)
- [ ] 2. Promotional content ready (marketing, ask in channel)
- [ ] 3. Upload builds for DO store, https://dev.status.im/ (Jakub)
#### 5) At time of publishing
- [ ] 1. Notify marketing to push comms and blog post (Jonny + get review on blog from QA team)
- [ ] 2. Publish release to app store and playstore
- [ ] 3. Final push to update prod site https://status.im/, [instructions](https://github.com/status-im/infra-docs/blob/master/articles/status_release_upload.md) (Jakub - requires credentials to upload)
- [ ] 4. Add the link to the post about the release and publish the release: https://github.com/status-im/status-react/releases (Jakub)
- [ ] 5. Merge PR for updating [RELEASES.md](https://github.com/status-im/status-react/blob/develop/RELEASES.md) (from 1.3 step)
+1 -1
View File
@@ -10,7 +10,7 @@ project-board:
automated-tests:
repo-full-name: 'status-im/status-react'
job-full-name: 'status-react/e2e/status-app-prs'
job-full-name: 'end-to-end-tests/status-app-prs'
kickoff-column-name: 'E2E Tests'
github-team:
+1 -2
View File
@@ -168,5 +168,4 @@ project.clj
##appium
test/appium/report/
result.xml
test/appium/tests/users.py
result.xml
+8 -34
View File
@@ -1,4 +1,4 @@
.PHONY: nix-add-gcroots clean nix-clean run-metro test release _list _fix-node-perms _tmpdir-mk _tmpdir-rm _install-hooks
.PHONY: nix-add-gcroots clean nix-clean run-metro test release _list _fix-node-perms _tmpdir-mk _tmpdir-rm
help: SHELL := /bin/sh
help: ##@other Show this help
@@ -42,7 +42,7 @@ export NIX_CONF_DIR = $(PWD)/nix
# Location of symlinks to derivations that should not be garbage collected
export _NIX_GCROOTS = /nix/var/nix/gcroots/per-user/$(USER)/status-react
# Defines which variables will be kept for Nix pure shell, use semicolon as divider
export _NIX_KEEP ?= TMPDIR,BUILD_ENV,STATUS_GO_SRC_OVERRIDE
export _NIX_KEEP ?= TMPDIR,BUILD_ENV,STATUS_GO_SRC_OVERRIDE,NIMBUS_SRC_OVERRIDE
# Useful for Andoird release builds
TMP_BUILD_NUMBER := $(shell ./scripts/version/gen_build_no.sh | cut -c1-10)
@@ -57,10 +57,13 @@ endif
# Nix targets
#----------------
# WARNING: This has to be located right before all the targets.
# WARNING: This has to be located right before the targets
ifdef IN_NIX_SHELL
SHELL := env bash
else
SHELL := ./nix/scripts/shell.sh
endif
shell: export TARGET ?= default
shell: ##@prepare Enter into a pre-configured shell
ifndef IN_NIX_SHELL
@ENTER_NIX_SHELL
@@ -124,11 +127,6 @@ _tmpdir-rm: SHELL := /bin/sh
_tmpdir-rm: ##@prepare Remove TMPDIR
rm -fr "$(TMPDIR)"
_install-hooks: SHELL := /bin/sh
_install-hooks: ##@prepare Create prepare-commit-msg git hook symlink
@ln -s -f ../../scripts/hooks/prepare-commit-msg .git/hooks
-include _install-hooks
# Remove directories and ignored files
clean: SHELL := /bin/sh
clean: _fix-node-perms _tmpdir-rm ##@prepare Remove all output folders
@@ -158,33 +156,10 @@ keystore: export KEYSTORE_PATH ?= $(HOME)/.gradle/status-im.keystore
keystore: ##@prepare Generate a Keystore for signing Android APKs
@./scripts/generate-keystore.sh
fdroid-max-watches: SHELL := /bin/sh
fdroid-max-watches: ##@prepare Bump max_user_watches to avoid ENOSPC errors
sysctl fs.inotify.max_user_watches=524288
fdroid-nix-dir: SHELL := /bin/sh
fdroid-nix-dir: ##@prepare Create /nix directory for F-Droid Vagrant builders
mkdir -m 0755 /nix
chown vagrant /nix
fdroid-fix-tmp: SHELL := /bin/sh
fdroid-fix-tmp: ##@prepare Fix TMPDIR permissions so Vagrant user is the owner
chown -R vagrant "$(TMPDIR)"
fdroid-build-env: fdroid-max-watches fdroid-nix-dir fdroid-fix-tmp ##@prepare Setup build environment for F-Droud build
fdroid-pr: export TARGET := android
fdroid-pr: ##@prepare Create F-Droid release PR
ifndef APK
$(error APK env var not defined)
endif
scripts/fdroid-pr.sh "$(APK)"
xcode-clean: SHELL := /bin/sh
xcode-clean: XCODE_HOME := $(HOME)/Library/Developer/Xcode
xcode-clean: ##@prepare Clean XCode derived data and archives
rm -fr $(XCODE_HOME)/DerivedData/StatusIm-* $(XCODE_HOME)/Archives/*/StatusIm*
#----------------
# Release builds
#----------------
@@ -205,9 +180,8 @@ release-fdroid: export BUILD_TYPE = release
release-fdroid: export ANDROID_APK_SIGNED = false
release-fdroid: export ANDROID_ABI_SPLIT = false
release-fdroid: export ANDROID_ABI_INCLUDE = armeabi-v7a;arm64-v8a;x86;x86_64
release-fdroid: export READER_FEATURES = google-free
release-fdroid: ##@build Build release for F-Droid
scripts/google-free.sh
echo "GOOGLE_FREE=1" >> .env.release
scripts/release-android.sh
release-ios: export TARGET := ios
+1 -1
View File
@@ -27,7 +27,7 @@ Developers are the heart of software and to keep Status beating we need all the
Want to learn more about it? Start by reading our [Developer Introduction](https://status.im/developer_tools/) which guides you through the technology stack and start browsing [beginner issues](https://github.com/status-im/status-react/issues?utf8=%E2%9C%93&q=is%3Aopen%20is%3Aissue%20label%3A%22good%20first%20issue%22%20). Then you can read how to [Build Status](https://status.im/technical/build_status/), which talks about managing project dependencies, coding guidelines and testing procedures.
- **Community Management**
Metcalfe's law states that the value of a network is proportional to the square of the number of connected users of the system - without community Status is meaningless. We're looking to create a positive, fun environment to explore new ideas, experiment and grow the Status community. Building a community takes a lot of work but the people you'll meet and long lasting relationships you form will be well worth it, check out our [Mission and Community Principles](https://status.im/about)
Metcalfe's law states that the value of a network is proportional to the square of the number of connected users of the system - without community Status is meaningless. We're looking to create a positive, fun environment to explore new ideas, experiment and grow the Status community. Building a community takes a lot of work but the people you'll meet and long lasting relationships you form will be well worth it, check out our [Community Principles](https://status.im/contribute/our_principles.html)
- **Specification / Documentation**
John Dewey once said "Education is not preparation for life; education is life *itself* ". Developers & Designers need guidance and it all starts from documentation and specifications. Our software is only as good as its documentation, head over to our [docs](https://status.im/docs) and see how you can improve what we have.
-285
View File
@@ -1,288 +1,3 @@
## 1.19 Release notes
### Features
* 💬 Re-open app on the last open chat ([details](https://github.com/status-im/status-react/issues/12782))
* 🪙 Support \$UBI token ([details](https://github.com/status-im/status-react/issues/12975))
* 🔔 Implementation of remote android notifications ([details](https://github.com/status-im/status-react/issues/12866))
* 🔁 Sync clear history on paired devices ([details](https://github.com/status-im/status-react/issues/13004))
* 📑 Synchronize browser bookmarks/favorites across devices ([details](https://github.com/status-im/status-react/issues/12961))
* 🔕 Add mute option to android ([details](https://github.com/status-im/status-react/issues/12890))
* 👛 Wallet Connect 2.0 integration ([details](https://github.com/status-im/status-react/issues/12546))
* 💰 Implement Wallet Connect 1.0 ([details](https://github.com/status-im/status-react/issues/12870))
* ⚙️ Sync settings ([details](https://github.com/status-im/status-react/pull/13053))
### Improvements
* Improve order of mailserver requests ([details](https://github.com/status-im/status-react/issues/12783))
* Load images from an https server ([details](https://github.com/status-im/status-react/issues/12855))
* Load audio messages from https server ([details](https://github.com/status-im/status-react/issues/13116))
* Show message timestamps on tap, remove from bubbles 🕙 ([details](https://github.com/status-im/status-react/pull/12915))
* support PUK and seed recovery during onboarding ([details](https://github.com/status-im/status-react/pull/12955))
* update react-native-webview ([details](https://github.com/status-im/status-react/pull/12987))
* Add group members to mentionable list ([details](https://github.com/status-im/status-react/pull/12994))
* always use english for fallback text ([details](https://github.com/status-im/status-react/pull/13019))
* Disable chat input for chats with a blocked user ([details](https://github.com/status-im/status-react/pull/13162))
* Handle timeouts on mailserver requests ([details](https://github.com/status-im/status-react/issues/13022))
* Human Readable data display when signing using eth_signTypedData_v3 ([details](https://github.com/status-im/status-react/issues/12535))
### Bug Fixes
* Bug/fix opensea api ([details](https://github.com/status-im/status-react/pull/13021))
* Show "Fetch more messages" only in public chats and communities ([details](https://github.com/status-im/status-react/pull/12927))
* Chats are not synced if delete and re-add them on the first device while the second device is offline ([details](https://github.com/status-im/status-react/issues/12913))
* fix distortion of app theme due to change in system theme ([details](https://github.com/status-im/status-react/pull/12934))
* Unable to perform swap on 1inch.exchange if initial swap was cancelled by closing bottom sheet ([details](https://github.com/status-im/status-react/issues/12920))
* Error when trying to edit 'per-gas price limit' on 1inch.exchange ([details](https://github.com/status-im/status-react/issues/12991))
* Allow adding emoji in status input even if it exceeds limit ([details](https://github.com/status-im/status-react/pull/12949))
* Allow adding emoji to group intro message if it exceeds limit ([details](https://github.com/status-im/status-react/pull/13024))
* Use higher base fee value for default tx fee calculation ([details](https://github.com/status-im/status-react/pull/13020))
* Profile QR code overlaps share menu during sharing (IOS) ([details](https://github.com/status-im/status-react/pull/13050))
* No value in 'Gas amount limit' field in NFT dapps ([details](https://github.com/status-im/status-react/pull/13051))
* Stop showing fetch more button for cleared history ([details](https://github.com/status-im/status-react/pull/13084))
* fix ens resolve issue while following deep link ([details](https://github.com/status-im/status-react/pull/13080))
* Fix deadlock on syncing all data ([details](https://github.com/status-im/status-react/pull/13128))
* Fix broken username and timestamp layout for long usernames ([details](https://github.com/status-im/status-react/pull/13174))
## 1.18.0 Release notes :package:
### Features
* 🚦Online status indicator <https://github.com/status-im/status-react/issues/12547>
* 👛 Add possibility to select wallet for ENS names <https://github.com/status-im/status-react/pull/12761>
* 🐞 Bug reporting and logs sharing improvements <https://github.com/status-im/status-react/pull/12773>
* 🍳 Simplify Keycard onboarding by using defaults for pairing password <https://github.com/status-im/status-react/issues/12685>
* 💾 Backup contacts via Waku <https://github.com/status-im/status-react/issues/12550>
* 🪙 Added ENS token <https://github.com/status-im/status-react/issues/12807>
* 🌠 Using react-native-fast-image for stickers <https://github.com/status-im/status-react/pull/12769>
#### Message reliability improvements
* 𝌗 Show loading until all messages are processed <https://github.com/status-im/status-react/pull/12834>
* 💪🏼 More robust message confirmations handling <https://github.com/status-im/status-react/pull/12824>
* 📶 Allow sending messages when offline <https://github.com/status-im/status-react/issues/11889>
#### Improvements on device pairing
* 🔔💻 Notification in activity centre now sync across devices <https://github.com/status-im/status-react/issues/12571>
* ✅💻 Sync read messages across devices <https://github.com/status-im/status-react/pull/12698>
#### Network settings improvements
* ✨ Add Binance Smart chain <https://github.com/status-im/status-react/pull/12809>
* ♏︎ Added custom network symbol <https://github.com/status-im/status-react/commit/c16b0860ec921a61c119857de27c6f29e301e4f6>
* 💰 Network fee on xDai chain <https://github.com/status-im/status-react/pull/12845>
* 📇 Support tx history (in a way) when on BSC chains <https://github.com/status-im/status-react/pull/12843>
* 🙅🏻 Remove POA network from the list <https://github.com/status-im/status-react/pull/12887>
### Bug Fixes
* Fix activity center community invite preview <https://github.com/status-im/status-react/pull/12803>
* Missing notifications for some contacts <https://github.com/status-im/status-react/issues/12776>
* Fixes scrolling issues on the 'Max priority fee' bottom sheet <https://github.com/status-im/status-react/issues/12530>
* Handle Keycard timeout on iOS 15 <https://github.com/status-im/status-react/pull/12826>
* Allow user to be reinvited to the same group after leaving <https://github.com/status-im/status-react/pull/12814>
* Fix for "TypeError: Network request failed" when switching to Goerli network <https://github.com/status-im/status-react/issues/11964>
* Fix for Spin of death on adding custom NFT token contract <https://github.com/status-im/status-react/issues/12365>
* Changing screen orientation results in breaking images / layout <https://github.com/status-im/status-react/issues/12858>
## 1.17
### For iOS and Android
### Features
- 🖼️ Add ability to Share image from Status ([details](https://github.com/status-im/status-react/pull/12528))
- 🕵️ Private Profile Photos ([details](https://github.com/status-im/status-react/pull/11768))
- 🥥 Custom Emoji Thumbnails for Community Channels ([details](https://github.com/status-im/status-react/pull/12594))
- 🔄 Sync deleted chats ([details](https://github.com/status-im/status-react/pull/12662))
- 🔃 Sync removed/deleted/blocked contacts ([details](https://github.com/status-im/status-react/pull/12541))
- 💸 Allow overriding nonce when sending transaction ([details](https://github.com/status-im/status-react/pull/12679))
- 🗑️ Delete messages ([details](https://github.com/status-im/status-react/pull/12390))
- 🎨 NFT Support via OpenSea ([details](https://github.com/status-im/status-react/pull/12485))
- 🤳🏻 Enable collectibles and NFT as profile picture ([details](https://github.com/status-im/status-react/pull/12615))
### Improvements
- Move pull to refresh to the account overview screen ([details](https://github.com/status-im/status-react/pull/12479))
- Add $RARE token to our default list ([details](https://github.com/status-im/status-react/pull/12521))
- Small UI Design Improvements ([details](https://github.com/status-im/status-react/pull/12544))
- Chats list performance ([details](https://github.com/status-im/status-react/pull/12554))
- Add push notification on group chat invite ([details](https://github.com/status-im/status-react/pull/12440))
- Contacts performance ([details](https://github.com/status-im/status-react/pull/12643))
- Add profile image in push notifications ([details](https://github.com/status-im/status-react/pull/12427))
- Enable UI for signing legacy txs on networks without eip1559 ([details](https://github.com/status-im/status-react/pull/12692))
- Doubled the character limit on timeline posts ([details](https://github.com/status-im/status-react/commit/a9333ad52ca71f512d5306f802927d0c20d63944))
### Bugfixes
- Don't show notifications from self ([details](https://github.com/status-im/status-react/pull/12505))
- Request permissions before saving images ([details](https://github.com/status-im/status-react/pull/12516))
- Re-enable amount/fee validation on tx signing ([details](https://github.com/status-im/status-react/pull/12537))
- Fix browser history sorting ([details](https://github.com/status-im/status-react/pull/12497))
- Fix show/hide password on Android ([details](https://github.com/status-im/status-react/pull/12536))
- Fix connecting autofarm.network dapps with status wallet freezes ([details](https://github.com/status-im/status-react/pull/12529))
- RPC URL is lower-cased when entered in URL field when adding ([details](https://github.com/status-im/status-react/pull/12574))
- Allow retrieving of profile updates after removing contact ([details](https://github.com/status-im/status-react/pull/12581))
- Fetch history on receiving pubchat installation ([details](https://github.com/status-im/status-react/pull/12644))
- Can't send funds to multisig - Out of gas ([details](https://github.com/status-im/status-react/pull/12648))
- Fix handling errors on eth_gasPrice ([details](https://github.com/status-im/status-react/pull/12710))
## 1.16
### For iOS and Android
### Features
- EIP-1159 support ([#12369](https://github.com/status-im/status-react/pull/12369))
- Hide/show option for accounts in the wallet ([#12438](https://github.com/status-im/status-react/pull/12438))
- Delete accounts in wallet ([#12444](https://github.com/status-im/status-react/pull/12444))
- Enable keeping database when migrating account to keycard ([#12306](https://github.com/status-im/status-react/pull/12306))
- Replies from group chat in activity centre ([#12266](https://github.com/status-im/status-react/pull/12266))
### Improvements
- Remove clear history from non-public chats ([#12384](https://github.com/status-im/status-react/pull/12384))
- Clearing push notifications on read (Android) ([#12464](https://github.com/status-im/status-react/pull/12464))
- Enable migration to keycard from signed-in state ([#11778](https://github.com/status-im/status-react/issues/11778))
### Bug Fixes
#### Chat
- Fix Error when opening 1-1 chat in Activity center for blocked user ([#12399](https://github.com/status-im/status-react/pull/12399))
- Long press is long and it makes the message disappear entirely ([#12445](https://github.com/status-im/status-react/pull/12445))
- Sort pinned messages by time of pinning ([#12402](https://github.com/status-im/status-react/pull/12402))
- Screens with overlapping long usernames ([#12471](https://github.com/status-im/status-react/pull/12471))
#### Browser (Dapp)
- Fix some token swap errors in Uniswap ([#12417](https://github.com/status-im/status-react/pull/12417))
- Update react-native-webview for better SSL handling ([#12409](https://github.com/status-im/status-react/pull/12409))
#### Keycard
- App freezes until reopening when signing tx with frozen Keycard ([#12473](https://github.com/status-im/status-react/pull/12473))
#### Wallet
- Allow to add assets with same name ([#12466](https://github.com/status-im/status-react/pull/12466))
- Update DATAcoin name ([#12454](https://github.com/status-im/status-react/pull/12454))
## 1.15
### For iOS and Android
### Features
- New improved native navigation, its very fast :dash: [[details](https://github.com/status-im/status-react/pull/12141)]
- Pinned messages in chats :pushpin: [[details](https://github.com/status-im/status-react/issues/11699)]
- Add support for ETH2x-FLI ERC20 token ⚫ [[details](https://github.com/status-im/status-react/issues/11885)]
- Add support for HEZ ERC20 token ⚫ [[details](https://github.com/status-im/status-react/issues/12233)]
- Show number of unread mentions in public and communities chats :bell: [[details](https://github.com/status-im/status-react/issues/12061)]
- QR code scanner for browser :ticket: [[details](https://github.com/status-im/status-react/issues/12195)]
- Edit messages after sending :pencil2: [[details](https://github.com/status-im/status-react/issues/12067)]
- Allow password reset :abcd: [[details](https://github.com/status-im/status-react/pull/12245)]
### Improvements
- Native modals and tabs :house_with_garden:
- Improved time to show login screen :timer_clock:
- New, human friendly, terms of use :pencil: [[details](https://github.com/status-im/status-react/issues/12206)]
### Bug Fixes
- No contact request in Activity Center after 1-1 chat deleted of non-contact user :no_good: [[details](https://github.com/status-im/status-react/issues/12218)]
## 1.14
### For iOS and Android
### Features
- Highlight posts that mention you ([details](https://github.com/status-im/status-react/pull/12146))
- Remove PUK and Pairing Code screen from Keycard onboarding
[details](https://github.com/status-im/status-react/pull/12155))
- Added unread messages count for messages with mentions in public chats ([details](https://github.com/status-im/status-react/pull/12152))
- Sync history setting allowing to sync chat history up to 1 month ([details](https://github.com/status-im/status-react/pull/12166))
### Improvements
- "My profile" button for simplification of finding own public key ([details](https://github.com/status-im/status-react/pull/12044))
- Factory reset option is available on account creation and recovery flows ([details](https://github.com/status-im/status-react/pull/12055))
- Allow the creation of recovery/backup Keycard from the login interface ([details](https://github.com/status-im/status-react/pull/12115))
- Reset blocked and/or frozen Keycards ([details](https://github.com/status-im/status-react/pull/12127))
- Show cached balance ([details](https://github.com/status-im/status-react/pull/12134))
### Bugfixes
- Pending transactions are stored in the database and shown on history screen after re-login ([details](https://github.com/status-im/status-react/pull/12032))
- Multiple fixes for keycard
- Fixes for resolving ENS name from chat key ([details](https://github.com/status-im/status-react/pull/12100))
## 1.13
### For iOS and Android
### Features
- New activity manager https://github.com/status-im/status-react/issues/11958
New chats and group chat invitation will appear in a new section, the activity center, where a user will be able to accept or decline the request.
https://www.figma.com/file/r59kCQxl6tlC0dHkcAJOpP/Action-center-MVP---Mobile?node-id=2%3A8012 (not fully implemented)
- Receive messages from contacts only option
Under privacy in settings a user will be able to select whether they want to receive messages and group chat invitations from contacts only.
- Added delivered confirmation for private groups
Messages sent to private groups will now be marked as confirmed if at least one of the members received it.
- New keycard functionalities: reset a keycard, changing PUK of a card, changing pairing code, create a new keycard backup card.
### Improvements
- Improved UI for starting a new private chat
### Bugfixes
- Fixed issue with crypto on ramp and requiring camera access
- Removed Wyre from list of services in buy crypto feature
- Added support for SOCKS token
## 1.12
### iOS
#### Excerpt
V1.12 Release - Keycard on iOS, Crypto Onramps, and More
Keycard can now be used on iOS devices for hardware enforced security to your keys and accounts! Status v1.12 also introduces simpler access to obtaining crypto via onramps providers as well as some key updates to the messaging experience
##### Added
Keycard iOS integration
Link previews for our.status.im and medium.om
List of Crypto onramps
Add “delivered” message confirmations to 1:1 messages
Keycard banner on login screen
#### Fixed
UI issue showing up a chat on a paired device when it should not
UI issue was showing messages as pending if no one is part of the group chat*
Push notification is generated on paired account when you send message to 1-1
UI issue for wrong notification when using two paired devices with same accounts
Improve keycard login time
### Android
#### Excerpt
V1.12 Release - Crypto Onramps and Improved Messaging
Status v1.12 introduces simpler access to obtaining crypto via onramp providers as well as some key updates to the messaging experience including delivered message confirmations in 1:1 private chats
##### Added
Link previews for our.status.im and medium.om
List of Crypto onramps
Add “delivered” message confirmations to 1:1 messages
Keycard banner on login screen
Local notifications for Mentions
#### Fixed
UI issue showing up a chat on a paired device when it should not
UI issue was showing messages as pending if no one is part of the group chat*
Push notification is generated on paired account when you send message to 1-1
UI issue for wrong notification when using two paired devices with same accounts
Improve keycard login time
## 1.11
### iOS
#### Excerpt
+1 -1
View File
@@ -1 +1 @@
1.19.0
1.12.2
+4 -19
View File
@@ -126,14 +126,7 @@ def enableHermes = project.ext.react.get("enableHermes", false);
/**
* Exclude google library so we can publish to external android stores
*/
def googleFree = project.env.get("GOOGLE_FREE", 0) == '1'
def getCommitHash = { ->
if (project.hasProperty("commitHash")) {
return project.commitHash
}
return "unknown"
}
def googleFree = project.env.get("GOOGLE_FREE", false)
def getVersionCode = { ->
new ByteArrayOutputStream().withStream { stdOut ->
@@ -191,7 +184,6 @@ android {
versionCode getVersionCode()
versionName getVersionName()
missingDimensionStrategy 'react-native-camera', 'general'
manifestPlaceholders = [commitHash: getCommitHash()]
/* this needs to be empty if we want APKs split by ABIs */
if (!getEnvOrConfig('ANDROID_ABI_SPLIT').toBoolean()) {
ndk {
@@ -341,8 +333,6 @@ dependencies {
exclude group: 'com.google.android.gms'
exclude group: 'com.android.installreferrer'
}
} else {
implementation 'com.google.firebase:firebase-messaging:23.0.0'
}
// react-native-screens
@@ -358,9 +348,8 @@ dependencies {
implementation project(':react-native-status')
implementation project(':react-native-status-keycard')
implementation 'com.github.status-im:function:0.0.1'
implementation 'com.facebook.fresco:fresco:2.2.0'
implementation 'com.facebook.fresco:animated-gif:2.2.0'
implementation "com.squareup.okhttp3:okhttp-tls:3.12.12"
implementation 'com.facebook.fresco:fresco:2.0.0'
implementation 'com.facebook.fresco:animated-gif:2.0.0'
}
def getLocalNDKDir = { ->
@@ -382,7 +371,7 @@ task hemroidBuild(type: Exec) {
def localNdkDir = getLocalNDKDir()
def ndkDir = System.env.ANDROID_NDK_ROOT
if (localNdkDir != null) {
ndkDir = localNdkDir
ndkDir = localNdkDir
}
def execPath = "$ndkDir/ndk-build"
@@ -396,7 +385,3 @@ task hemroidBuild(type: Exec) {
preBuild.dependsOn hemroidBuild
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
if (!googleFree) {
apply plugin: "com.google.gms.google-services"
}
-119
View File
@@ -1,119 +0,0 @@
{
"project_info": {
"project_number": "854811651919",
"firebase_url": "https://status-react-app.firebaseio.com",
"project_id": "status-react-app",
"storage_bucket": "status-react-app.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:854811651919:android:11ee7444ded8a00a",
"android_client_info": {
"package_name": "im.status.ethereum"
}
},
"oauth_client": [
{
"client_id": "854811651919-gua52csicclb5p9gr4eeu33ukk0aaphj.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAOF4W1j8GYeXzzVKRfNKlXywD6bx0rJtQ"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "854811651919-gua52csicclb5p9gr4eeu33ukk0aaphj.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "854811651919-30s20e3l0me0ins0vc4185jbnj7ja49o.apps.googleusercontent.com",
"client_type": 2,
"ios_info": {
"bundle_id": "im.status.ethereum"
}
}
]
}
}
},
{
"client_info": {
"mobilesdk_app_id": "1:854811651919:android:15dbe4af1e06ca3e005f3a",
"android_client_info": {
"package_name": "im.status.ethereum.debug"
}
},
"oauth_client": [
{
"client_id": "854811651919-gua52csicclb5p9gr4eeu33ukk0aaphj.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAOF4W1j8GYeXzzVKRfNKlXywD6bx0rJtQ"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "854811651919-gua52csicclb5p9gr4eeu33ukk0aaphj.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "854811651919-30s20e3l0me0ins0vc4185jbnj7ja49o.apps.googleusercontent.com",
"client_type": 2,
"ios_info": {
"bundle_id": "im.status.ethereum"
}
}
]
}
}
},
{
"client_info": {
"mobilesdk_app_id": "1:854811651919:android:1d0d69fe8c1bb89b005f3a",
"android_client_info": {
"package_name": "im.status.ethereum.pr"
}
},
"oauth_client": [
{
"client_id": "854811651919-gua52csicclb5p9gr4eeu33ukk0aaphj.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAOF4W1j8GYeXzzVKRfNKlXywD6bx0rJtQ"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "854811651919-gua52csicclb5p9gr4eeu33ukk0aaphj.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "854811651919-30s20e3l0me0ins0vc4185jbnj7ja49o.apps.googleusercontent.com",
"client_type": 2,
"ios_info": {
"bundle_id": "im.status.ethereum"
}
}
]
}
}
}
],
"configuration_version": "1"
}
-12
View File
@@ -64,15 +64,3 @@
-dontwarn java.nio.file.*
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn okio.**
# fast-image
-keep public class com.dylanvann.fastimage.* {*;}
-keep public class com.dylanvann.fastimage.** {*;}
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class com.bumptech.glide.annotation.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
+1 -4
View File
@@ -2,10 +2,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<!-- These are added by React Native for debug mode, but actually aren't needed in release mode -->
<uses-permission tools:node="remove" android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<!-- Remove licensing permission since we don't license our app and it blocks F-Droid submissions. -->
<uses-permission tools:node="remove" android:name="com.android.vending.CHECK_LICENSE"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application tools:targetApi="28" tools:ignore="GoogleAppIndexingWarning" android:usesCleartextTraffic="true" />
</manifest>
+6 -10
View File
@@ -17,13 +17,14 @@
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="28" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="com.android.vending.BILLING" />
<application
tools:replace="android:allowBackup"
android:allowBackup="false"
@@ -32,8 +33,8 @@
android:theme="@style/AppTheme"
android:name=".MainApplication"
android:largeHeap="true"
android:usesCleartextTraffic="true">
<meta-data android:name="commitHash" android:value="${commitHash}"/>
android:usesCleartextTraffic="true"
android:requestLegacyExternalStorage="true">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
@@ -70,6 +71,7 @@
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity"/>
<service android:name="im.status.ethereum.pushnotifications.ForegroundService"></service>
<service android:name="im.status.ethereum.module.LocalNotificationsService" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
@@ -81,12 +83,6 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_provider_paths" />
</provider>
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/notification_icon" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/notification_icon_color" />
</application>
</manifest>
@@ -23,21 +23,17 @@ import android.provider.Settings;
import android.os.Bundle;
import com.facebook.react.ReactActivityDelegate;
import com.facebook.react.ReactRootView;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.WritableMap;
import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;
import com.facebook.react.ReactFragmentActivity;
import com.reactnativenavigation.NavigationActivity;
import com.facebook.react.ReactActivity;
import com.facebook.react.modules.core.PermissionListener;
import org.devio.rn.splashscreen.SplashScreen;
import java.util.Properties;
import im.status.ethereum.module.StatusThreadPoolExecutor;
import im.status.ethereum.MainApplication;
public class MainActivity extends NavigationActivity
public class MainActivity extends ReactFragmentActivity
implements ActivityCompat.OnRequestPermissionsResultCallback{
@@ -101,16 +97,6 @@ public class MainActivity extends NavigationActivity
return intent;
}
private void tryToEmit(String eventName, WritableMap event) {
try {
((MainApplication) getApplication()).getReactNativeHost()
.getReactInstanceManager()
.getCurrentReactContext()
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit("url", event);
} catch(Exception e) {/* we expect NPE on first start, which is OK because we have a fallback */}
}
@Override
public void onNewIntent(final Intent intent) {
super.onNewIntent(intent);
@@ -181,16 +167,6 @@ public class MainActivity extends NavigationActivity
@Override
public void run() {
System.loadLibrary("status-logs");
// when app is started but the Activity has been destroyed, the deep linking url event is
// not emitted when coming back to foreground. This is a workaround. If the problem is
// resolved in react-native this code should be removed
if (getIntent().getData() != null) {
WritableMap event = Arguments.createMap();
event.putString("url", getIntent().getDataString());
// on first start emit will (silently) fail, but the regular deep linking handler will work
tryToEmit("url", event);
}
}
};
@@ -202,7 +178,14 @@ public class MainActivity extends NavigationActivity
super.onDestroy();
}
/**
* Returns the name of the main component registered from JavaScript.
* This is used to schedule rendering of the component.
*/
@Override
protected String getMainComponentName() {
return "StatusIm";
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
@@ -259,4 +242,14 @@ public class MainActivity extends NavigationActivity
mPermissionListener = null;
}
}
@Override
protected ReactActivityDelegate createReactActivityDelegate() {
return new ReactActivityDelegate(this, getMainComponentName()) {
@Override
protected ReactRootView createRootView() {
return new RNGestureHandlerEnabledRootView(MainActivity.this);
}
};
}
}
@@ -9,24 +9,20 @@ import com.facebook.react.PackageList;
import com.aakashns.reactnativedialogs.ReactNativeDialogsPackage;
import com.facebook.react.ReactApplication;
import cl.json.RNSharePackage;
import com.facebook.react.ReactNativeHost;
import com.reactnativenavigation.NavigationApplication;
import com.reactnativenavigation.react.NavigationReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.soloader.SoLoader;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.modules.network.OkHttpClientProvider;
import java.util.List;
import im.status.ethereum.keycard.RNStatusKeycardPackage;
import im.status.ethereum.module.StatusPackage;
import im.status.ethereum.pushnotifications.PushNotificationPackage;
import im.status.ethereum.StatusOkHttpClientFactory;
public class MainApplication extends NavigationApplication {
public class MainApplication extends MultiDexApplication implements ReactApplication {
private final ReactNativeHost mReactNativeHost = new NavigationReactNativeHost(this) {
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
@@ -58,9 +54,7 @@ public class MainApplication extends NavigationApplication {
@Override
public void onCreate() {
super.onCreate();
OkHttpClientProvider.setOkHttpClientFactory(new StatusOkHttpClientFactory());
SoLoader.init(this, /* native exopackage */ false);
WebView.setWebContentsDebuggingEnabled(BuildConfig.DEBUG_WEBVIEW == "1");
initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
}
@@ -1,44 +0,0 @@
package im.status.ethereum;
import android.util.Log;
import com.facebook.react.modules.network.OkHttpClientFactory;
import com.facebook.react.modules.network.OkHttpClientProvider;
import okhttp3.OkHttpClient;
import okhttp3.Interceptor;
import okhttp3.tls.HandshakeCertificates;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.lang.RuntimeException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import im.status.ethereum.module.StatusPackage;
class StatusOkHttpClientFactory implements OkHttpClientFactory {
public OkHttpClient createNewNetworkModuleClient() {
String certPem = StatusPackage.getImageTLSCert();
X509Certificate cert;
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
cert = (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(certPem.getBytes()));
} catch(Exception e) {
Log.e("StatusOkHttpClientFactory", "Could not parse certificate");
cert = null;
}
HandshakeCertificates clientCertificates = new HandshakeCertificates.Builder()
.addPlatformTrustedCertificates()
.addTrustedCertificate(cert)
.build();
return OkHttpClientProvider.createClientBuilder()
.sslSocketFactory(clientCertificates.sslSocketFactory(), clientCertificates.trustManager())
.build();
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 482 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 975 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 495 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 826 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 826 B

@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="alert_background">#141414</color>
<color name="alert_text">#ffffff</color>
</resources>
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="alert_background">#ffffff</color>
<color name="alert_text">#000000</color>
<color name="notification_icon_color">#4360DF</color>
</resources>
@@ -8,7 +8,6 @@
<item name="android:forceDarkAllowed">true</item>
<item name="android:windowTranslucentStatus">false</item>
<item name="android:statusBarColor">?attr/backgroundColor</item>
<item name="android:alertDialogTheme">@style/AlertDialogTheme</item>
</style>
<style name="LightTheme" parent="AppTheme">
@@ -22,10 +21,4 @@
<item name="backgroundColor">#000000</item>
<item name="android:windowLightStatusBar">false</item>
</style>
<style name="AlertDialogTheme" parent="Theme.AppCompat.DayNight.Dialog.Alert">
<item name="android:textColor">@color/alert_text</item>
<item name="android:textColorPrimary">@color/alert_text</item>
<item name="android:background">@color/alert_background</item>
</style>
</resources>
-2
View File
@@ -3,7 +3,5 @@
<!-- These are added by React Native for debug mode, but actually aren't needed in release mode -->
<uses-permission tools:node="remove" android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<!-- Remove licensing permission since we don't license our app and it blocks F-Droid submissions. -->
<uses-permission tools:node="remove" android:name="com.android.vending.CHECK_LICENSE"/>
</manifest>
+1 -3
View File
@@ -3,7 +3,5 @@
<!-- These are added by React Native for debug mode, but actually aren't needed in release mode -->
<uses-permission tools:node="remove" android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<!-- Remove licensing permission since we don't license our app and it blocks F-Droid submissions. -->
<uses-permission tools:node="remove" android:name="com.android.vending.CHECK_LICENSE"/>
</manifest>
</manifest>
+17 -15
View File
@@ -4,7 +4,6 @@
* Project-wide gradle configuration properties for use by all modules
*/
ext {
RNNKotlinVersion = "1.4.31"
buildToolsVersion = project.buildToolsVersion
minSdkVersion = Integer.valueOf(project.minSdkVersion)
compileSdkVersion = Integer.valueOf(project.compileSdkVersion)
@@ -17,12 +16,10 @@ buildscript {
repositories {
flatDir { dirs "libs", "${rootDir}/app/libs" }
google()
mavenCentral()
jcenter()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.31"
classpath "com.android.tools.build:gradle:${project.ext.gradlePluginVersion}"
classpath "com.google.gms:google-services:4.3.10"
// WARNING: Do not place your application dependencies here!
// They belong in the individual module build.gradle files.
}
@@ -45,22 +42,27 @@ subprojects {
allprojects {
beforeEvaluate {
if (System.env.STATUS_GO_ANDROID_LIBDIR == null || System.env.STATUS_GO_ANDROID_LIBDIR == "") {
throw new GradleException('STATUS_GO_ANDROID_LIBDIR environment variable is not valid!')
}
if (System.env.STATUS_GO_ANDROID_LIBDIR == null || System.env.STATUS_GO_ANDROID_LIBDIR == "") {
throw new GradleException('STATUS_GO_ANDROID_LIBDIR environment variable is not valid!')
}
}
repositories {
mavenLocal()
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
maven { url("$rootDir/../node_modules/react-native/android") }
// Android JSC is installed from npm
maven { url("$rootDir/../node_modules/jsc-android/dist") }
// For geth, function, and status-go
flatDir { dirs "libs", System.env.STATUS_GO_ANDROID_LIBDIR }
// Everything Else
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url("$rootDir/../node_modules/react-native/android")
}
maven {
// Android JSC is installed from npm
url("$rootDir/../node_modules/jsc-android/dist")
}
google()
mavenCentral()
jcenter()
// for geth, function, and status-go
flatDir { dirs "libs", System.env.STATUS_GO_ANDROID_LIBDIR }
maven { url "https://www.jitpack.io" }
}
}
+4 -5
View File
@@ -23,12 +23,12 @@
# Version requirements used throughout the Gradle scripts
kotlinVersion=1.3.50
minSdkVersion=23
compileSdkVersion=30
targetSdkVersion=30
buildToolsVersion=31.0.0
compileSdkVersion=29
targetSdkVersion=29
buildToolsVersion=30.0.3
supportLibVersion=28.0.0
# This should match version from nix/mobile/android/maven-and-npm-deps/maven/default.nix
gradlePluginVersion=3.5.4
gradlePluginVersion=3.5.3
android.useAndroidX=true
android.enableJetifier=true
@@ -48,7 +48,6 @@ ANDROID_APK_SIGNED=true
org.gradle.jvmargs=-Xmx8704M
versionCode=9999
commitHash=unknown
# Flipper
FLIPPER_VERSION=0.54.0
-2
View File
@@ -1,6 +1,4 @@
pluginManagement {
include ':react-native-share'
project(':react-native-share').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-share/android')
repositories {
mavenLocal() // Let's prioritize local Maven repos so that Nix can provide them offline
gradlePluginPortal()
+3 -3
View File
@@ -1,12 +1,12 @@
library 'status-jenkins-lib@v1.4.1'
library 'status-react-jenkins@v1.2.11'
pipeline {
agent { label 'linux && x86_64 && nix-2.8' }
agent { label 'linux' }
options {
timestamps()
/* Prevent Jenkins jobs from running forever */
timeout(time: 30, unit: 'MINUTES')
timeout(time: 20, unit: 'MINUTES')
/* Limit builds retained */
buildDiscarder(logRotator(
numToKeepStr: '10',
+9 -9
View File
@@ -1,4 +1,4 @@
library 'status-jenkins-lib@v1.4.1'
library 'status-react-jenkins@v1.2.11'
pipeline {
agent { label 'linux' }
@@ -41,13 +41,13 @@ pipeline {
stage('Build') {
parallel {
stage('iOS') { steps { script {
ios = jenkins.Build('status-react/platforms/ios')
ios = jenkins.Build('status-react/combined/mobile-ios')
} } }
stage('Android') { steps { script {
apk = jenkins.Build('status-react/platforms/android')
apk = jenkins.Build('status-react/combined/mobile-android')
} } }
stage('Android e2e') { steps { script {
apke2e = jenkins.Build('status-react/platforms/android-e2e')
apke2e = jenkins.Build('status-react/combined/mobile-android-e2e')
} } }
}
}
@@ -58,7 +58,7 @@ pipeline {
//jenkins.copyArts(iose2e)
jenkins.copyArts(apk)
jenkins.copyArts(apke2e)
sha = "pkg/${utils.pkgFilename(ext: 'sha256')}"
sha = "pkg/${utils.pkgFilename('sha256')}"
dir('pkg') {
/* generate sha256 checksums for upload */
sh "sha256sum * | tee ../${sha}"
@@ -88,20 +88,20 @@ pipeline {
case 'nightly':
/* Create JSON file with newest build URLs */
s3.updateBucketJSON(urls, 'latest.json');
build(job: 'website/status.im', wait: false);
build(job: 'misc/status.im', wait: false);
break;
case 'release':
github.publishReleaseFiles(repo: 'status-react');
github.publishReleaseMobile();
break;
}
} }
}
stage('Run e2e') {
when { expression { btype == 'nightly' && params.PUBLISH } }
when { expression { btype == 'nightly' } }
steps { script {
e2eApk = utils.getEnv(apke2e, 'SAUCE_URL')
build(
job: 'status-react/e2e/status-app-nightly',
job: 'end-to-end-tests/status-app-nightly',
parameters: [string(name: 'APK_NAME', value: e2eApk)],
wait: false
)
+2 -2
View File
@@ -1,7 +1,7 @@
library 'status-jenkins-lib@v1.4.1'
library 'status-react-jenkins@v1.2.11'
pipeline {
agent { label 'macos && x86_64 && nix-2.8 && xcode-13.3' }
agent { label 'macos-xcode-12.3' }
parameters {
string(
+7 -18
View File
@@ -1,26 +1,16 @@
library 'status-jenkins-lib@v1.4.1'
library 'status-react-jenkins@v1.2.11'
pipeline {
agent { label params.AGENT_LABEL }
parameters {
string(
name: 'NIX_CACHE_HOST',
description: 'FQDN of Nix binary cache host.',
defaultValue: params.NIX_CACHE_HOST ?: 'cache-01.do-ams3.nix.ci.statusim.net'
)
string(
name: 'NIX_CACHE_USER',
description: 'Username for Nix binary cache host.',
defaultValue: params.NIX_CACHE_USER ?: 'nix-cache'
)
}
environment {
/* See nix/README.md */
NIX_IGNORE_SYMLINK_STORE = 1
/* we source .bash_profile to be able to use nix-store */
NIX_SSHOPTS = "-o StrictHostKeyChecking=no source .profile;"
NIX_SSHOPTS = "-o StrictHostKeyChecking=no source .bash_profile;"
/* where our /nix/store is hosted */
NIX_CACHE_USER = 'nix-cache'
NIX_CACHE_HOST = 'master-01.do-ams3.ci.misc.statusim.net'
NIX_CONF_DIR = "${env.WORKSPACE}/nix"
}
@@ -39,7 +29,7 @@ pipeline {
stages {
stage('Setup') {
steps { script {
nix.shell('nix-env -i openssh', sandbox: false, pure: false)
nix.shell('nix-env -i openssh', pure: false)
/* some build targets don't build on MacOS */
uname = sh(script: 'uname', returnStdout: true)
} }
@@ -98,8 +88,7 @@ pipeline {
nix.shell("""
find /nix/store/ -mindepth 1 -maxdepth 1 -type d \
-not -name '*.links' -and -not -name '*-status-react-*' \
| xargs nix copy \
--to ssh-ng://${params.NIX_CACHE_USER}@${params.NIX_CACHE_HOST}
| xargs nix-copy-closure -v --to ${NIX_CACHE_USER}@${NIX_CACHE_HOST}
""",
pure: false
)
+2 -2
View File
@@ -6,11 +6,11 @@ This folder contains files defininf [Jenkins pipelines](https://jenkins.io/doc/b
All `Jenkinsfile`s contain the following line:
```groovy
library 'status-jenkins-lib@master'
library 'status-react-jenkins@master'
```
Which loads the used methods - like `nix.shell()` - from a separate private repo:
https://github.com/status-im/status-jenkins-lib
https://github.com/status-im/status-react-jenkins
This is done to improve security of our CI setup.
+8 -14
View File
@@ -4,13 +4,13 @@ pipeline {
parameters {
string(
name: 'APK_NAME',
description: 'Filename of APK uploaded to SauceLabs.',
name: 'NETWORK',
description: 'Name of test network to use.',
defaultValue: 'ropsten',
)
string(
name: 'KEYWORD_EXPRESSION',
description: 'This will run tests which contain names that match the given string expression (Optional)',
defaultValue: '',
name: 'APK_NAME',
description: 'Filename of APK uploaded to SauceLabs.',
)
}
@@ -48,22 +48,16 @@ pipeline {
credentialsId: 'infura-e2e-token',
variable: 'WEB3_INFURA_PROJECT_ID'
),
file(
credentialsId: "mobile-tests-eth-accounts",
variable: 'TEST_ETH_ACCOUNTS_FILE'
),
]) {
dir('test/appium/tests') {
/* Provide Eth test accounts secrets. */
sh 'cp -f $TEST_ETH_ACCOUNTS_FILE users.py'
sh """
python3 -m pytest \
--numprocesses 9 \
--numprocesses 15 \
--rerun_count=2 \
--testrail_report=True \
-m testrail_id \
-m \"not upgrade\" \
-k \"${params.KEYWORD_EXPRESSION}\" \
-m "not upgrade" \
--network=${params.NETWORK} \
--apk=${params.APK_NAME}
"""
}
+13 -22
View File
@@ -1,5 +1,3 @@
library 'status-jenkins-lib@v1.4.1'
pipeline {
agent { label 'linux' }
@@ -10,12 +8,16 @@ pipeline {
description: 'Name of the branch to checkout and build.',
defaultValue: 'develop',
)
/* Commented to use TEST_MARKERS values from job params
string(
name: 'NETWORK',
description: 'Name of test network to use.',
defaultValue: 'ropsten',
)
string(
name: 'TEST_MARKERS',
description: 'Marker expression for matching tests to run.',
defaultValue: 'critical',
) */
defaultValue: 'critical or high',
)
string(
name: 'APK_NAME',
description: 'Filename of APK uploaded to SauceLabs, path, or URL.',
@@ -24,14 +26,9 @@ pipeline {
name: 'PR_ID',
description: 'ID of the Pull Request triggering this build.',
)
string(
name: 'KEYWORD_EXPRESSION',
description: 'This will run tests which contain names that match the given string expression (Optional)',
defaultValue: '',
)
string(
name: 'TR_CASE_IDS',
description: 'IDs of the TestRail case, separated by a comma (Optional)',
description: 'IDs of the TestRail case, separated by a comma. (Optional)',
defaultValue: '',
)
}
@@ -65,7 +62,7 @@ pipeline {
withCredentials([
usernamePassword(
credentialsId: 'status-im-auto',
credentialsId: 'status-im-auto-token',
usernameVariable: 'GIT_HUB_USER', /* ignored */
passwordVariable: 'GIT_HUB_TOKEN'
),
@@ -87,23 +84,17 @@ pipeline {
credentialsId: 'infura-e2e-token',
variable: 'WEB3_INFURA_PROJECT_ID'
),
file(
credentialsId: "mobile-tests-eth-accounts",
variable: 'TEST_ETH_ACCOUNTS_FILE'
),
]) {
dir('test/appium/tests') {
/* Provide Eth test account secrets. */
sh 'cp -f $TEST_ETH_ACCOUNTS_FILE users.py'
sh """
python3 -m pytest \
--numprocesses 9 \
--numprocesses 15 \
--rerun_count=2 \
--testrail_report=True \
-m \"${params.TEST_MARKERS}\" \
-k \"${params.KEYWORD_EXPRESSION}\" \
-m "${params.TEST_MARKERS}" \
--network=${params.NETWORK} \
--apk=${params.APK_NAME} \
--build=PR-${params.PR_ID}-${utils.timestamp()} \
--build=PR-${params.PR_ID} \
--pr_number=${params.PR_ID} \
${extraPytestOpts}
"""
+10 -27
View File
@@ -3,6 +3,11 @@ pipeline {
agent { label 'linux' }
parameters {
string(
name: 'NETWORK',
description: 'Name of test network to use',
defaultValue: 'ropsten',
)
string(
name: 'APK_NAME',
description: 'Filename of APK uploaded to SauceLabs (base for upgrade, usually release build)',
@@ -11,16 +16,6 @@ pipeline {
name: 'APK_NAME_UPGRADE',
description: 'Filename of APK of upgraded application (installed on top of base)',
)
string(
name: 'KEYWORD_EXPRESSION',
description: 'This will run tests which contain names that match the given string expression (Optional)',
defaultValue: '',
)
string(
name: 'TR_CASE_IDS',
description: 'IDs of the TestRail case, separated by a comma (Optional)',
defaultValue: '',
)
}
options {
@@ -37,12 +32,7 @@ pipeline {
} }
}
stage('Test') {
steps { script {
/* for managing optional arguments */
def extraPytestOpts = ''
if (params.TR_CASE_IDS != '') {
extraPytestOpts = "--run_testrail_ids='${params.TR_CASE_IDS}'"
}
steps {
withCredentials([
usernamePassword(
credentialsId: 'test-rail-api',
@@ -62,29 +52,22 @@ pipeline {
credentialsId: 'infura-e2e-token',
variable: 'WEB3_INFURA_PROJECT_ID'
),
file(
credentialsId: "mobile-tests-eth-accounts",
variable: 'TEST_ETH_ACCOUNTS_FILE'
),
]) {
dir('test/appium/tests') {
/* Provide Eth test accounts secrets. */
sh 'cp -f $TEST_ETH_ACCOUNTS_FILE users.py'
sh """
python3 -m pytest \
-m "upgrade" \
-k \"${params.KEYWORD_EXPRESSION}\" \
-m upgrade \
--numprocesses 15 \
--rerun_count=2 \
--testrail_report=True \
--network=${params.NETWORK} \
--apk=${params.APK_NAME} \
--apk_upgrade=${params.APK_NAME_UPGRADE} \
${extraPytestOpts}
--apk_upgrade=${params.APK_NAME_UPGRADE}
"""
}
}
}
} }
}
}
post {
+1 -1
View File
@@ -1,4 +1,4 @@
library 'status-jenkins-lib@v1.4.1'
library 'status-react-jenkins@v1.2.11'
pipeline {
agent { label 'macos' }
+2 -2
View File
@@ -1,4 +1,4 @@
library 'status-jenkins-lib@v1.4.1'
library 'status-react-jenkins@v1.2.11'
pipeline {
agent { label 'linux' }
@@ -38,7 +38,7 @@ pipeline {
steps { script {
withCredentials([
string(
credentialsId: 'google-play-api-key-json',
credentialsId: 'SUPPLY_JSON_KEY_DATA',
variable: 'GOOGLE_PLAY_JSON_KEY'
),
]) {
-43
View File
@@ -1,43 +0,0 @@
/**
* This job runs daily and executes `pod repo update` on MacOS
* This is done to avoid issues with out of date repo causing errors like:
*
* Failed with exit code 1 (in target 'StatusImPR' from project 'StatusIm')
**/
pipeline {
agent {
label params.HOST_LABEL
}
triggers {
/* Run daily at 2am */
cron('H 2 * * *')
}
options {
timestamps()
/* Prevent Jenkins jobs from running forever */
timeout(time: 5, unit: 'MINUTES')
/* Limit builds retained */
buildDiscarder(logRotator(
numToKeepStr: '20',
))
}
parameters {
string(
name: 'HOST_LABEL',
description: 'Label of host to run on',
/* Using startTimeInMillis to randomize which host gets the update. */
defaultValue: "maci7-0${(currentBuild.startTimeInMillis % 3) + 1}",
)
}
stages {
stage('Update') {
steps {
sh 'pod repo update'
}
}
}
}
-8
View File
@@ -160,11 +160,3 @@ fixed because even bugfix version upgrade causes runtime errors with current ver
## "web3-utils": "^1.2.1"
used for some abi encoding primitives
## "rn-emoji-keyboard": "https://github.com/status-im/rn-emoji-keyboard"
Used for taking emoji input, for custom emoji thumbnails for community channels
## "react-native-draggable-flatlist": "https://github.com/computerjazz/react-native-draggable-flatlist"
A drag-and-drop-enabled FlatList component for React Native
+7 -50
View File
@@ -10,42 +10,8 @@ The app builds defined this way run on servers that generate the unsigned APKs u
First release of Status app was merged in [fdroid/fdroiddata#7179](https://gitlab.com/fdroid/fdroiddata/-/merge_requests/7179).
:warning: __WARNING__: Once changes are commited into `fdroiddata` repo they __cannot be changed__.
# Adding New Versions
There are two ways - automated and manual - described below.
## Automated
The script will analyze a provided APK, update the metadata file based on that information, and commit the change to [`fdroiddata`](https://gitlab.com/fdroid/fdroiddata) repo. The creation of merge request is manual.
#### Requirements:
- GitLab account
- Forked copy of the [`fdroiddata`](https://gitlab.com/fdroid/fdroiddata) repo
- Link to the release published
#### Steps
1. Use the F-Droid PR update script via `make`:
```sh
make fdroid-pr APK=StatusIm-Mobile-v1.16.0-ef34af.apk
```
The script also accepts a URL.
2. Add a fork repo:
```sh
git remote add john https://gitlab.com/john/fdroiddata.git
```
3. Push:
```sh
git push john status-im/v1.16.0
```
4. [Create a PR via the GitLab interface.](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
## Manual
You can find our configuration file at [`metadata/im.status.ethereum.yml`](https://gitlab.com/fdroid/fdroiddata/-/blob/master/metadata/im.status.ethereum.yml)
The file defines all the necessary metadata like `SourceCode`, `Website`, or `License`, but the most important key is `Builds`, which looks like this:
@@ -54,27 +20,22 @@ Builds:
- versionName: 1.12.0
versionCode: 2021022512
commit: cfb825a11b61d312af8cb5d36686af540c31f481
sudo:
- cd build/im.status.ethereum
- make fdroid-build-env
sudo: make fdroid-nix-dir
init: nix/scripts/setup.sh
output: result/app-release-unsigned.apk
scanignore:
- android/build.gradle
scandelete:
- ios
scanignore: android/build.gradle
scandelete: ios
build: make release-fdroid BUILD_NUMBER=$$VERCODE$$
```
It contains a list of objects defining each release of the application. In order to add a new release simply copy a previous release object and adjust the following values:
* `versionName` - String version like `1.12.0`.
* `versionCode` - Android `versionCode`. Normally it is generated from timestamp at build time.
* `versionCode` - Android `versionCode`. We use a timestamp generated by [a script](../scripts/version/gen_build_no.sh).
* `commit` - Specific commit SHA1 from which the given release was built.
The `versionCode` should be the same as the one in build that was uploaded to Play Store.
It can be found in the build logs or by using:
```
> make shell TARGET=android
> apkanalyzer manifest version-code StatusIm-Mobile-v1.12.0.apk
2021022512
```
@@ -86,8 +47,6 @@ At the bottom of the file you should also update the following keys:
Then submit a merge request to the [fdroid/fdroiddata](https://gitlab.com/fdroid/fdroiddata) repository.
:warning: __WARNING__: Currently GitLab PR builds will fail due to running as `root` instead of `vagrant` and failing to install Nix.
# Checking Builds
The simplest way to test if the app builds via F-Droid is to use the Docker image:
@@ -117,14 +76,14 @@ docker run --rm \
-v $PWD/fdroiddata:/repo \
-v $PWD/fdroidserver:/fdroidserver \
statusteam/docker-executable-fdroidserver:latest \
build im.status.ethereum
build im.status.ethereum:1.12.0
```
We have to create a user and specify the UID because Nix cannot run as `root` and that is the default user for the F-Droid Docker image. By adding our own user and setting the UID we also make it possible to mount folders like `fdroiddata` and `fdroidserver`.
You can specify a `--verbose` flag for `build` command for additional information.
You can specify a `--vebose` flag for `build` command for additional information.
You can provide `--storage-opt size=30G` flag if Docker complains about running out of space.
You should also run `lint` and `rewritemeta` for the App ID to verify and fix the YAML metadata formatting.
You should also run `lint im.status.ethereum` to verify the YAML format is correct.
# Details
@@ -132,8 +91,6 @@ The original research was done in [#8512](https://github.com/status-im/status-re
Normally F-Droid server wants to run Gradle itself, but we do not specify the `gradle` key in order to run `make release-fdroid` ourselves in `build` step. We also add `android/build.gradle` to `scanignore` to avoid F-Droid trying to use Gradle directly.
The Android metadata like description or screenshots is [loaded from our repository](https://f-droid.org/en/docs/All_About_Descriptions_Graphics_and_Screenshots/#fastlane-structure) based on the Fastlane [`supply`](https://docs.fastlane.tools/actions/supply/) tool folder structure for updating Google Play store metadata.
Once the PR is merged it may take a few days for the F-Droid server farm to build and deploy the new version to their site and app. You can look up the current state of builds [here](https://f-droid.org/wiki/index.php?title=Special:RecentChanges&days=7&from=&hidebots=0&hideanons=1&hideliu=1&limit=500) and look for your App ID and a `deploy` change after it.
# F-Droid Build
-147
View File
@@ -1,147 +0,0 @@
# Using IntelliJ IDEA and Cursive
## Table of Contents
- [Install Cursive](#install-cursive)
- [Getting Cursive to understand `status-react`](#getting-cursive-to-understand-status-react)
- [I get a lot of `cannot be resolved`](#i-get-a-lot-of-cannot-be-resolved)
- [REPL!](#repl)
- [Connecting to REPL to IntelliJ](#connecting-to-repl-to-intellij)
- [Connecting REPL and IntelliJ to `status-react`](#connecting-repl-and-intellij-to-status-react)
## Install Cursive
See https://cursive-ide.com/userguide/index.html
## Getting Cursive to understand `status-react`
- Add this file to the root of the `status-react` project dir
- https://gist.github.com/Samyoul/f71a0593ba7a12d24dd0d5ef986ebbec
- Right click and "add as leiningen project"
<img src="images/IDE_SETUP/1_fake_project_file.png" width=75% />
## I get a lot of `cannot be resolved`
Are you getting problems where you get a lot of `cannot be resolved` on everything?
<img src="images/IDE_SETUP/2_resolve.jpeg" width=75% />
See https://cursive-ide.com/userguide/macros.html
- opt+enter (on macOS)
- resolve defview as fn and letsubs as let
- move selection on resolve and hit enter
- and select defn for defview and let for letsubs
## REPL!
### Connecting to REPL to IntelliJ
I had a number of problems connecting to REPL, the solution is as follows:
At the top of IntelliJ IDEA click on the `Add Configuration...` option:
<img src="images/IDE_SETUP/3_REPL_1.png" width=75% />
This will load the following menu:
<img src="images/IDE_SETUP/4_REPL_2.png" width=75% />
Click on the `+` icon in the top left corner of the menu.
Select `Clojure REPL > Remote`
<img src="images/IDE_SETUP/5_REPL_3.png" width=75% />
Which will load the following menu
<img src="images/IDE_SETUP/6_REPL_4.png" width=75% />
Enter the below options:
- Name = status-react
- Display Name = status-react
- Connection type = nREPL
- Connection details
- Host = 127.0.0.1
- Port = 7888
<img src="images/IDE_SETUP/7_REPL_5.png" width=75% />
Press `OK`
Now the below option will be visible.
Press the green run button
<img src="images/IDE_SETUP/8_REPL_6.png" width=75% />
You should now see an dialog with the following message:
```shell
Connecting to remote nREPL server...
Clojure 1.10.1
```
To confirm you have a working connection with REPL enter the following command in the input box below the output:
```shell
(prn 1)
```
Which should output
```shell
(prn 1)
1
=> nil
```
See below:
<img src="images/IDE_SETUP/9_REPL_7.png" width=75% />
### Connecting REPL and IntelliJ to `status-react`
**The important next step is telling REPL the context in which to interact with the code.**
Do the following:
Ensure you have 3 terminals running the following
- `make run-clojure`
- `make run-metro`
- `make run-ios` / `make run-android`
[See the STARTING GUIDE for details](STARTING_GUIDE.md#development)
Next go back to the REPL input and enter the following commands:
```clojure
(shadow/watch :mobile)
(shadow/repl :mobile)
```
See Below
<img src="images/IDE_SETUP/10_REPL_8.png" width="75%" />
Which should switch the clj file type target to cljs as shown above
Finally you are ready to test REPL.
Create a sample function to evaluate something simple like `(prn "I'm working")`, move your cursor to one of the outer parentheses. Right or `control` click and select the `REPL` option. From there select `Sync files in REPL` and then `Send '...' to REPL'`.
<img src="images/IDE_SETUP/11_REPL_9.png" width="75%" />
Alternatively you can use the shortcut commands `⇧⌘M` to sync your files and `⇧⌘P` to send the statement to REPL. You may also need to switch the REPL namespace to match the current file, which can be done manually from the dialogue box or using the `⇧⌘N` shortcut key.
Following the above should give you the below result:
<img src="images/IDE_SETUP/12_REPL_10.png" width="75%" />
🎉 Tada! Working! 🎉
---
For additional details on issues you may face when setting up REPL with Cursive [see this document](https://notes.status.im/9Gr7kqF8SzC_SmYK0eB7uQ?view#Connecting-Cursive--IntelliJ-IDEA-to-REPL-Problems)
+4 -108
View File
@@ -1,115 +1,11 @@
# Description
This document explains some of the steps that are involved in releases.
This document explains some of the steps that are involved in relseases.
# Release process
## PlayStore Metadata Updates
## Coordination
All the coordination is done in the `#release` channel on discord.
Release readiness can be tracked by watching an appropriate milestone at [milestones](https://github.com/status-im/status-react/milestones) section in github.
When release is building you can check the progress in a testrail. Ask @churik for access if you don't have it
## Preparing branches
Special branches should be created at the start of a release process. That can be done manually or with the script
### Prepare branches with the script
You can use the script to cut a release branch. No arguments needed, the new release version will be deducted automatically:
`scripts/cut-release.sh`
Upon script call two branches will be created:
- `release/a.b.x`
- `chore/update-release-to-$version`
The first one is the main release branch. All bugfixes should be cherry-picked from `develop` to it. Jenkins treats that branch specially and prepares release builds from it.
The second branch only updates the `VERSION` file and all you need to do is to merge it to `develop`. If you have the `gh` command installed, `cut-release` script will automatically create a PR for this.
### Prepare branches manually
#### Create a branch
First, we need to create a release branch cut from develop.
The name of the branch should be `release/a.b.x` where `x` is actually `x`, not a variable, and `a` and `b` are the `MAJOR` and `MINOR` version of the app.
For example, valid branch names are:
`release/1.12.x` or `release/3.12.x`
#### Update version
We need to update the `VERSION` file to reflect the release we want to build.
## Building
Jenkins will automatically build this branch and create release candidates.
Those will go through the QA process and the QA team will let us know when
tested successfully.
## Bugfixes before an app is released
Because both `status-react` and `status-go` might have newer commits that we don't want to include, bug fixes should be applied separately to develop and the release branch.
The best workflow is to send a PR to develop, get it merged, and the cherry-pick on the
release branch.
It is a release manager's responsibility to cherry-pick bugfix from `develop` to release branch. In order to do this, you should be a part of a `release group` on github. Contact @jakubgs to be added.
If cherry-picking not practical for some reason (i.e develop has diverged significantly from release)
other workflows are possible.
To change status-go, a similar workflow applies.
First checkout the tag used in `status-go-version.json` of release branch.
`git checkout v0.62.3`
Create a branch on status-go named: `release/vx.y.z+hotfix.w` where (make sure branch name is not the same as the tag)
`x` is the `MAJOR` version
`y` is the `MINOR` version
`z` is the `PATCH` version
`w` is the `HOTFIX` version
For example valid names are:
`release/v0.62.3+hotfix.2`
`release/v1.3.4+hotfix.4`
Once the branch is ready to use and tested successfully, tag the branch:
`git tag v0.62.3+hotfix.2`
Push the branch and then the tag to origin:
`git push --set-upstream origin release/v0.62.3+hotfix.2`
`git push origin v0.62.3+hotfix.2`
Switch to status-react release branch, and cherry pick the commit you need.
Once that's done, update the status-react release branch with the new tag:
`make shell`
`scripts/update-status-go.sh v0.62.3+hotfix.2`
And commit and push the changes
# Hotfix process
The hotfix process is basically identical to the workflow of a bugfix:
1) Add the changes on status-react
2) Make sure you use a hotfix branch for status-go (unless we are happy to release from develop)
3) Update the `VERSION` in status-react
# PlayStore Metadata Updates
This section is relevant only for the marketing team, no developer participation is required.
You can update Play Store release metadata using `fastlane android upload_metadata`.
You can update Play Store releae metadata using `fastlane android upload_metadata`.
But that requires credentials necessary for accessing Play Store API. The simpler way is to edit files contained within [`fastlane/metadata`](metadata) and run the following CI job:
https://ci.status.im/job/status-react/job/tools/job/update-playstore-metadata/
https://ci.status.im/job/status-tools/job/update-playstore-metadata/
+7 -19
View File
@@ -10,6 +10,13 @@ make shell TARGET=android
```
This step will take a while the first time as it will download all dependencies.
To build the app, your can simply run on of the following:
```
make release-android
make release-ios
```
For more `make` targets run `make help`.
# Development
There are three steps necessary to start development, in this case for Android:
@@ -21,25 +28,6 @@ There are three steps necessary to start development, in this case for Android:
The first two will continue watching for changes and keep re-building the app. They need to be ready first.
The last one will exit once the app is up and ready.
You need to have your emulator or real devices running and visible to adb, before you run `make run-android`.
# Build release
To build the app, your can simply run on of the following:
```
make release-android
make release-ios
```
For more `make` targets run `make help`.
# Updating Dependencies
* `make nix-update-pods` - iOS CocoaPods dependencies (updates `ios/Podfile` and `ios/Podfile.loc`)
* `make nix-update-gradle` - Android Gradle/Maven dependencies (updates `nix/deps/gradle/deps.json`)
* `make nix-update-clojure` - Clojure Maven dependencies (updates `nix/deps/clojure/deps.json`)
* `make nix-update-gems` - Fastlane Ruby dependencies (updates `fastlane/Gemfile.lock` and `fastlane/gemset.nix`)
# Manual Steps
There are a few manual steps you might want to do in order to start contributing.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 439 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 285 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 290 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 655 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 203 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 583 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 585 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

+1 -1
View File
@@ -103,7 +103,7 @@ def asc_api_key()
key_id: ENV['FASTLANE_ASC_API_KEY_ID'],
issuer_id: ENV['FASTLANE_ASC_API_ISSUER_ID'],
key_filepath: ENV['FASTLANE_ASC_API_KEY_FILE_PATH'],
duration: 1200, # seconds, session length
duration: 1500, # seconds, session length
in_house: false,
)
end
+75 -113
View File
@@ -1,80 +1,58 @@
GEM
remote: https://rubygems.org/
specs:
CFPropertyList (3.0.5)
rexml
addressable (2.8.0)
CFPropertyList (3.0.2)
addressable (2.7.0)
public_suffix (>= 2.0.2, < 5.0)
artifactory (3.0.15)
atomos (0.1.3)
aws-eventstream (1.2.0)
aws-partitions (1.579.0)
aws-sdk-core (3.130.2)
aws-eventstream (1.1.0)
aws-partitions (1.383.0)
aws-sdk-core (3.109.1)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.525.0)
aws-partitions (~> 1, >= 1.239.0)
aws-sigv4 (~> 1.1)
jmespath (~> 1.0)
aws-sdk-kms (1.56.0)
aws-sdk-core (~> 3, >= 3.127.0)
aws-sdk-kms (1.39.0)
aws-sdk-core (~> 3, >= 3.109.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.113.1)
aws-sdk-core (~> 3, >= 3.127.0)
aws-sdk-s3 (1.83.1)
aws-sdk-core (~> 3, >= 3.109.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.4)
aws-sigv4 (1.5.0)
aws-sigv4 (~> 1.1)
aws-sigv4 (1.2.2)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
claide (1.1.0)
claide (1.0.3)
colored (1.2)
colored2 (3.1.2)
commander (4.6.0)
highline (~> 2.0.0)
commander-fastlane (4.4.6)
highline (~> 1.7.2)
declarative (0.0.20)
digest-crc (0.6.4)
rake (>= 12.0.0, < 14.0.0)
declarative-option (0.1.0)
digest-crc (0.6.1)
rake (~> 13.0)
domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
dotenv (2.7.6)
emoji_regex (3.2.3)
excon (0.92.2)
faraday (1.10.0)
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)
emoji_regex (3.0.0)
excon (0.78.0)
faraday (1.1.0)
multipart-post (>= 1.2, < 3)
ruby2_keywords
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.3)
multipart-post (>= 1.2, < 3)
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_middleware (1.0.0)
faraday (~> 1.0)
fastimage (2.2.6)
fastlane (2.205.2)
fastimage (2.2.0)
fastlane (2.164.0)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
addressable (>= 2.3, < 3.0.0)
aws-sdk-s3 (~> 1.0)
babosa (>= 1.0.3, < 2.0.0)
bundler (>= 1.12.0, < 3.0.0)
colored
commander (~> 4.6)
commander-fastlane (>= 4.4.6, < 5.0.0)
dotenv (>= 2.1.1, < 3.0.0)
emoji_regex (>= 0.1, < 4.0)
excon (>= 0.71.0, < 1.0.0)
@@ -83,20 +61,18 @@ GEM
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)
google-api-client (>= 0.37.0, < 0.39.0)
google-cloud-storage (>= 1.15.0, < 2.0.0)
highline (>= 1.7.2, < 2.0.0)
json (< 3.0.0)
jwt (>= 2.1.0, < 3)
mini_magick (>= 4.9.4, < 5.0.0)
multipart-post (~> 2.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)
slack-notifier (>= 2.0.0, < 3.0.0)
terminal-notifier (>= 2.0.0, < 3.0.0)
terminal-table (>= 1.4.5, < 2.0.0)
tty-screen (>= 0.6.3, < 1.0.0)
@@ -109,71 +85,60 @@ GEM
fastlane-plugin-diawi (2.1.0)
rest-client (>= 2.0.0)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.19.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-core (0.4.2)
google-api-client (0.38.0)
addressable (~> 2.5, >= 2.5.1)
googleauth (>= 0.16.2, < 2.a)
httpclient (>= 2.8.1, < 3.a)
googleauth (~> 0.9)
httpclient (>= 2.8.1, < 3.0)
mini_mime (~> 1.0)
representable (~> 3.0)
retriable (>= 2.0, < 4.a)
rexml
webrick
google-apis-iamcredentials_v1 (0.10.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-playcustomapp_v1 (0.7.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-storage_v1 (0.13.0)
google-apis-core (>= 0.4, < 2.a)
google-cloud-core (1.6.0)
retriable (>= 2.0, < 4.0)
signet (~> 0.12)
google-cloud-core (1.5.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.36.2)
addressable (~> 2.8)
google-cloud-env (1.4.0)
faraday (>= 0.17.3, < 2.0)
google-cloud-errors (1.0.1)
google-cloud-storage (1.29.1)
addressable (~> 2.5)
digest-crc (~> 0.4)
google-apis-iamcredentials_v1 (~> 0.1)
google-apis-storage_v1 (~> 0.1)
google-cloud-core (~> 1.6)
googleauth (>= 0.16.2, < 2.a)
google-api-client (~> 0.33)
google-cloud-core (~> 1.2)
googleauth (~> 0.9)
mini_mime (~> 1.0)
googleauth (1.1.3)
faraday (>= 0.17.3, < 3.a)
googleauth (0.14.0)
faraday (>= 0.17.3, < 2.0)
jwt (>= 1.4, < 3.0)
memoist (~> 0.16)
multi_json (~> 1.11)
os (>= 0.9, < 2.0)
signet (>= 0.16, < 2.a)
highline (2.0.3)
signet (~> 0.14)
highline (1.7.10)
http-accept (1.7.0)
http-cookie (1.0.4)
http-cookie (1.0.3)
domain_name (~> 0.5)
httpclient (2.8.3)
jmespath (1.6.1)
json (2.6.1)
jwt (2.3.0)
jmespath (1.4.0)
json (2.3.1)
jwt (2.2.2)
memoist (0.16.2)
mime-types (3.4.1)
mime-types (3.3.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2022.0105)
mini_magick (4.11.0)
mini_mime (1.1.2)
mime-types-data (3.2020.0512)
mini_magick (4.10.1)
mini_mime (1.0.2)
multi_json (1.15.0)
multipart-post (2.0.0)
nanaimo (0.3.0)
naturally (2.2.1)
naturally (2.2.0)
netrc (0.11.0)
optparse (0.1.1)
os (1.1.4)
plist (3.6.0)
public_suffix (4.0.7)
rake (13.0.6)
representable (3.1.1)
os (1.1.1)
plist (3.5.0)
public_suffix (4.0.6)
rake (13.0.1)
representable (3.0.4)
declarative (< 0.1.0)
trailblazer-option (>= 0.1.1, < 0.2.0)
declarative-option (< 0.2.0)
uber (< 0.2.0)
rest-client (2.1.0)
http-accept (>= 1.7.0, < 2.0)
@@ -181,23 +146,22 @@ GEM
mime-types (>= 1.16, < 4.0)
netrc (~> 0.8)
retriable (3.1.2)
rexml (3.2.5)
rouge (2.0.7)
ruby2_keywords (0.0.5)
rubyzip (2.3.2)
ruby2_keywords (0.0.2)
rubyzip (2.3.0)
security (0.1.3)
signet (0.16.1)
addressable (~> 2.8)
faraday (>= 0.17.5, < 3.0)
signet (0.14.0)
addressable (~> 2.3)
faraday (>= 0.17.3, < 2.0)
jwt (>= 1.5, < 3.0)
multi_json (~> 1.10)
simctl (1.6.8)
CFPropertyList
naturally
slack-notifier (2.3.2)
terminal-notifier (2.0.0)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
trailblazer-option (0.1.2)
tty-cursor (0.7.1)
tty-screen (0.8.1)
tty-spinner (0.9.3)
@@ -205,20 +169,18 @@ GEM
uber (0.1.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.8.1)
unicode-display_width (1.8.0)
webrick (1.7.0)
unf_ext (0.0.7.7)
unicode-display_width (1.7.0)
word_wrap (1.0.0)
xcodeproj (1.21.0)
xcodeproj (1.19.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-travis-formatter (1.0.0)
xcpretty (~> 0.2, >= 0.0.7)
PLATFORMS
+2 -2
View File
@@ -1,4 +1,4 @@
{ stdenv, lib, bundlerEnv, ruby, makeWrapper }:
{ stdenv, bundlerEnv, ruby, makeWrapper }:
let
fastlane = stdenv.mkDerivation rec {
@@ -28,7 +28,7 @@ let
export FASTLANE_PLUGINFILE_PATH=$STATUS_REACT_HOME/fastlane/Pluginfile
'';
meta = with lib; {
meta = with stdenv.lib; {
description = "A tool to automate building and releasing iOS and Android apps";
longDescription = "fastlane is a tool for iOS and Android developers to automate tedious tasks like generating screenshots, dealing with provisioning profiles, and releasing your application.";
homepage = https://github.com/fastlane/fastlane;
+118 -294
View File
@@ -5,20 +5,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "022r3m9wdxljpbya69y2i3h9g3dhhfaqzidf95m6qjzms792jvgp";
sha256 = "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy";
type = "gem";
};
version = "2.8.0";
};
artifactory = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0wify8rhjwr5bw5y6ary61vba290vk766cxw9a9mg05yswmaisls";
type = "gem";
};
version = "3.0.15";
version = "2.7.0";
};
atomos = {
groups = ["default"];
@@ -35,20 +25,20 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1pyis1nvnbjxk12a43xvgj2gv0mvp4cnkc1gzw0v1018r61399gz";
sha256 = "0r0pn66yqrdkrfdin7qdim0yj2x75miyg4wp6mijckhzhrjb7cv5";
type = "gem";
};
version = "1.2.0";
version = "1.1.0";
};
aws-partitions = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1ilhspsph7icrrz94f3qngjkj585hsyv9bnxr44iabcqqwymr79w";
sha256 = "1as2xr2yjsylrjys084bm2q90la0nw7rm1cgwx57wcds58i9zrwb";
type = "gem";
};
version = "1.579.0";
version = "1.383.0";
};
aws-sdk-core = {
dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath"];
@@ -56,10 +46,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0hajbavfngn99hcz6n20162jygvwdflldvnlrza7z32hizawaaan";
sha256 = "0xmppcxq7jm8lffqibkhq257hfwfbv82zm2y1fbhwm3icgxzwlfx";
type = "gem";
};
version = "3.130.2";
version = "3.109.1";
};
aws-sdk-kms = {
dependencies = ["aws-sdk-core" "aws-sigv4"];
@@ -67,10 +57,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "14dcfqqdx1dy7qwrdyqdvqjs53kswm4njvg34f61jpl9xi3h2yf3";
sha256 = "0ly1m631qm2ciif7sysbzrgczjvz95ga3g6w6vrzvfdv31jjnl9a";
type = "gem";
};
version = "1.56.0";
version = "1.39.0";
};
aws-sdk-s3 = {
dependencies = ["aws-sdk-core" "aws-sdk-kms" "aws-sigv4"];
@@ -78,10 +68,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0kxcc3abjxld66ryrivfq9wxxpik8ngr2b2dr7shgrsgf5zmrkh8";
sha256 = "021yqghdb1i980vn249hv44jajr0v3hq4ik4r6fqh9kwp04fsbqv";
type = "gem";
};
version = "1.113.1";
version = "1.83.1";
};
aws-sigv4 = {
dependencies = ["aws-eventstream"];
@@ -89,10 +79,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0xp7diwq7nv4vvxrl9x3lis2l4x6bissrfzbfyy6rv5bmj5w109z";
sha256 = "1ll9382c1x2hp750cilh01h1cycgyhdr4cmmgx23k94hyyb8chv5";
type = "gem";
};
version = "1.5.0";
version = "1.2.2";
};
babosa = {
groups = ["default"];
@@ -105,25 +95,24 @@
version = "1.0.4";
};
CFPropertyList = {
dependencies = ["rexml"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "193l8r1ycd3dcxa7lsb4pqcghbk56dzc5244m6y8xmv88z6m31d7";
sha256 = "1825ll26p28swjiw8n3x2pnh5ygsmg83spf82fnzcjn2p87vc5lf";
type = "gem";
};
version = "3.0.5";
version = "3.0.2";
};
claide = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0bpqhc0kqjp1bh9b7ffc395l9gfls0337rrhmab4v46ykl45qg3d";
sha256 = "0kasxsms24fgcdsq680nz99d5lazl9rmz1qkil2y5gbbssx89g0z";
type = "gem";
};
version = "1.1.0";
version = "1.0.3";
};
colored = {
groups = ["default"];
@@ -145,16 +134,16 @@
};
version = "3.1.2";
};
commander = {
commander-fastlane = {
dependencies = ["highline"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1n8k547hqq9hvbyqbx2qi08g0bky20bbjca1df8cqq5frhzxq7bx";
sha256 = "0y8d3ac9qwm1cg6rnpf8rcdsy1yxacrd2g2kl809xsp2vi973g65";
type = "gem";
};
version = "4.6.0";
version = "4.4.6";
};
declarative = {
groups = ["default"];
@@ -166,16 +155,26 @@
};
version = "0.0.20";
};
declarative-option = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1g4ibxq566f1frnhdymzi9hxxcm4g2gw4n21mpjk2mhwym4q6l0p";
type = "gem";
};
version = "0.1.0";
};
digest-crc = {
dependencies = ["rake"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1czaak53w8n13y1fr0q23gp0fhklvxjac5n562qj3xk6sh5ad0x2";
sha256 = "1nygbn680kmya9vnz0pr9681z8lszr2whln0rxk168vaxbcnga8d";
type = "gem";
};
version = "0.6.4";
version = "0.6.1";
};
domain_name = {
dependencies = ["unf"];
@@ -203,31 +202,31 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0jsnrkfy345v66jlm2xrz8znivfnamg3mfzkddn414bndf2vxn7c";
sha256 = "0mjl5g6fv8iyf3nnbfyzd64bhl8l1qxyh452797km1aj4c682ia3";
type = "gem";
};
version = "3.2.3";
version = "3.0.0";
};
excon = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "01pcl1vx60x3f28rs6iw1lgqxycgb2yxq2p45k7b4a8liadykhba";
sha256 = "1hi89v53pm2abfv9j8lgqdd7hgkr7fr0gwrczr940iwbb3xv7rrs";
type = "gem";
};
version = "0.92.2";
version = "0.78.0";
};
faraday = {
dependencies = ["faraday-em_http" "faraday-em_synchrony" "faraday-excon" "faraday-httpclient" "faraday-multipart" "faraday-net_http" "faraday-net_http_persistent" "faraday-patron" "faraday-rack" "faraday-retry" "ruby2_keywords"];
dependencies = ["multipart-post" "ruby2_keywords"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "00palwawk897p5gypw5wjrh93d4p0xz2yl9w93yicb4kq7amh8d4";
sha256 = "16dapwi5pivrl25r4lkr1mxjrzkznj4wlcb08fzkmxnj4g5c6y35";
type = "gem";
};
version = "1.10.0";
version = "1.1.0";
};
faraday-cookie_jar = {
dependencies = ["faraday" "http-cookie"];
@@ -240,138 +239,37 @@
};
version = "0.0.7";
};
faraday-em_http = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "12cnqpbak4vhikrh2cdn94assh3yxza8rq2p9w2j34bqg5q4qgbs";
type = "gem";
};
version = "1.0.0";
};
faraday-em_synchrony = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1vgrbhkp83sngv6k4mii9f2s9v5lmp693hylfxp2ssfc60fas3a6";
type = "gem";
};
version = "1.0.0";
};
faraday-excon = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0h09wkb0k0bhm6dqsd47ac601qiaah8qdzjh8gvxfd376x1chmdh";
type = "gem";
};
version = "1.1.0";
};
faraday-httpclient = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0fyk0jd3ks7fdn8nv3spnwjpzx2lmxmg2gh4inz3by1zjzqg33sc";
type = "gem";
};
version = "1.0.1";
};
faraday-multipart = {
dependencies = ["multipart-post"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "03qfi9020ynf7hkdiaq01sd2mllvw7fg4qiin3pk028b4wv23j3j";
type = "gem";
};
version = "1.0.3";
};
faraday-net_http = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1fi8sda5hc54v1w3mqfl5yz09nhx35kglyx72w7b8xxvdr0cwi9j";
type = "gem";
};
version = "1.0.1";
};
faraday-net_http_persistent = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0dc36ih95qw3rlccffcb0vgxjhmipsvxhn6cw71l7ffs0f7vq30b";
type = "gem";
};
version = "1.2.0";
};
faraday-patron = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "19wgsgfq0xkski1g7m96snv39la3zxz6x7nbdgiwhg5v82rxfb6w";
type = "gem";
};
version = "1.0.0";
};
faraday-rack = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1h184g4vqql5jv9s9im6igy00jp6mrah2h14py6mpf9bkabfqq7g";
type = "gem";
};
version = "1.0.0";
};
faraday-retry = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "153i967yrwnswqgvnnajgwp981k9p50ys1h80yz3q94rygs59ldd";
type = "gem";
};
version = "1.0.3";
};
faraday_middleware = {
dependencies = ["faraday"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1bw8mfh4yin2xk7138rg3fhb2p5g2dlmdma88k82psah9mbmvlfy";
sha256 = "0jik2kgfinwnfi6fpp512vlvs0mlggign3gkbpkg5fw1jr9his0r";
type = "gem";
};
version = "1.2.0";
version = "1.0.0";
};
fastimage = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0nnggg20za5vamdpkgrxxa32z33d8hf0g2bciswkhqnc6amb3yjr";
sha256 = "11ny2pj0j6pljszrf1w3iqdv2pcl2iwwghjbgcjlizy424zbh0hb";
type = "gem";
};
version = "2.2.6";
version = "2.2.0";
};
fastlane = {
dependencies = ["CFPropertyList" "addressable" "artifactory" "aws-sdk-s3" "babosa" "colored" "commander" "dotenv" "emoji_regex" "excon" "faraday" "faraday-cookie_jar" "faraday_middleware" "fastimage" "gh_inspector" "google-apis-androidpublisher_v3" "google-apis-playcustomapp_v1" "google-cloud-storage" "highline" "json" "jwt" "mini_magick" "multipart-post" "naturally" "optparse" "plist" "rubyzip" "security" "simctl" "terminal-notifier" "terminal-table" "tty-screen" "tty-spinner" "word_wrap" "xcodeproj" "xcpretty" "xcpretty-travis-formatter"];
dependencies = ["CFPropertyList" "addressable" "aws-sdk-s3" "babosa" "colored" "commander-fastlane" "dotenv" "emoji_regex" "excon" "faraday" "faraday-cookie_jar" "faraday_middleware" "fastimage" "gh_inspector" "google-api-client" "google-cloud-storage" "highline" "json" "jwt" "mini_magick" "multipart-post" "plist" "rubyzip" "security" "simctl" "slack-notifier" "terminal-notifier" "terminal-table" "tty-screen" "tty-spinner" "word_wrap" "xcodeproj" "xcpretty" "xcpretty-travis-formatter"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "091l4vl909rv6alydwlzhbk0lfmfphb7n2sjybdfy2azr07b6a0d";
sha256 = "1mr143fx505iwgci6v9bl4pd6v305wrc4q1s329sjmy67jfbm47w";
type = "gem";
};
version = "2.205.2";
version = "2.164.0";
};
fastlane-plugin-clean_testflight_testers = {
groups = ["default"];
@@ -404,60 +302,16 @@
};
version = "1.1.3";
};
google-apis-androidpublisher_v3 = {
dependencies = ["google-apis-core"];
google-api-client = {
dependencies = ["addressable" "googleauth" "httpclient" "mini_mime" "representable" "retriable" "signet"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0qc501qhgks10qr7dm42bjcsm6yrbg1lxy28akpxindvjk61zh9i";
sha256 = "1jybks8i00rxrxx9mkx90dbdk6pczh2w757wchlavmrkrk0dp9s1";
type = "gem";
};
version = "0.19.0";
};
google-apis-core = {
dependencies = ["addressable" "googleauth" "httpclient" "mini_mime" "representable" "retriable" "rexml" "webrick"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "19v15vkgg86k79l51gfs7fab4h7fkv8358ckmkyp33jgsx3zr17b";
type = "gem";
};
version = "0.4.2";
};
google-apis-iamcredentials_v1 = {
dependencies = ["google-apis-core"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1yibminaffzz5npq605m0vqc024dcybiw7xk5vr0jxzlsh8nxvhn";
type = "gem";
};
version = "0.10.0";
};
google-apis-playcustomapp_v1 = {
dependencies = ["google-apis-core"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "15wnkbn6kzijbyqkqrh7s6apjf5630yvf2v8zy93zk0x87n2drcd";
type = "gem";
};
version = "0.7.0";
};
google-apis-storage_v1 = {
dependencies = ["google-apis-core"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0lcb9jkjipz1kgg8zyp8a6741andads55bxbldg3x8qmzkv9pv31";
type = "gem";
};
version = "0.13.0";
version = "0.38.0";
};
google-cloud-core = {
dependencies = ["google-cloud-env" "google-cloud-errors"];
@@ -465,10 +319,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0amp8vd16pzbdrfbp7k0k38rqxpwd88bkyp35l3x719hbb6l85za";
sha256 = "1qjn7vs8f85vxi1nkikbjfja6bv9snrj26vzscjii0cm8n4dy0i1";
type = "gem";
};
version = "1.6.0";
version = "1.5.0";
};
google-cloud-env = {
dependencies = ["faraday"];
@@ -476,31 +330,31 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "05gshdqscg4kil6ppfzmikyavsx449bxyj47j33r4n4p8swsqyb1";
sha256 = "0bjgxyvagy6hjj8yg7fqq24rwdjxb6hx7fdd1bmn4mwd846lci2i";
type = "gem";
};
version = "1.6.0";
version = "1.4.0";
};
google-cloud-errors = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0nakfswnck6grjpyhckzl40qccyys3sy999h5axk0rldx96fnivd";
sha256 = "1hvs1x39g77hbdqjxmzcl6gq8160pv3kskvzbbch0ww1np6qwm67";
type = "gem";
};
version = "1.2.0";
version = "1.0.1";
};
google-cloud-storage = {
dependencies = ["addressable" "digest-crc" "google-apis-iamcredentials_v1" "google-apis-storage_v1" "google-cloud-core" "googleauth" "mini_mime"];
dependencies = ["addressable" "digest-crc" "google-api-client" "google-cloud-core" "googleauth" "mini_mime"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "09d1bvxma4czbgay9lhcqsrhh6pd8s9i5djflzpsn00h4isdilw3";
sha256 = "1d8yc807dbd4pcwrrg2pdl30hghcnjid55qrjl2shffhzgiyl54h";
type = "gem";
};
version = "1.36.2";
version = "1.29.1";
};
googleauth = {
dependencies = ["faraday" "jwt" "memoist" "multi_json" "os" "signet"];
@@ -508,20 +362,20 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1y80y72bpz04piiskfn93i5rzfy02mjchp3ym77yf2811gzz33d9";
sha256 = "0cm60nbmwzf83fzy06f3iyn5a6sw91siw8x9bdvpwwmjsmivana6";
type = "gem";
};
version = "1.1.3";
version = "0.14.0";
};
highline = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0yclf57n2j3cw8144ania99h1zinf8q3f5zrhqa754j6gl95rp9d";
sha256 = "01ib7jp85xjc4gh4jg0wyzllm46hwv8p0w1m4c75pbgi41fps50y";
type = "gem";
};
version = "2.0.3";
version = "1.7.10";
};
http-accept = {
groups = ["default"];
@@ -539,10 +393,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "19370bc97gsy2j4hanij246hv1ddc85hw0xjb6sj7n1ykqdlx9l9";
sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g";
type = "gem";
};
version = "1.0.4";
version = "1.0.3";
};
httpclient = {
groups = ["default"];
@@ -559,30 +413,30 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1mnvb80cdg7fzdcs3xscv21p28w4igk5sj5m7m81xp8v2ks87jj0";
sha256 = "1d4wac0dcd1jf6kc57891glih9w57552zgqswgy74d1xhgnk0ngf";
type = "gem";
};
version = "1.6.1";
version = "1.4.0";
};
json = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1z9grvjyfz16ag55hg522d3q4dh07hf391sf9s96npc0vfi85xkz";
sha256 = "158fawfwmv2sq4whqqaksfykkiad2xxrrj0nmpnc6vnlzi1bp7iz";
type = "gem";
};
version = "2.6.1";
version = "2.3.1";
};
jwt = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0bg8pjx0mpvl10k6d8a6gc8dzlv2z5jkqcjbjcirnk032iriq838";
sha256 = "14ynyq1q483spj20ffl4xayfqx1a8qr761mqjfxczf8lwlap392n";
type = "gem";
};
version = "2.3.0";
version = "2.2.2";
};
memoist = {
groups = ["default"];
@@ -600,40 +454,40 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0ipw892jbksbxxcrlx9g5ljq60qx47pm24ywgfbyjskbcl78pkvb";
sha256 = "1zj12l9qk62anvk9bjvandpa6vy4xslil15wl6wlivyf51z773vh";
type = "gem";
};
version = "3.4.1";
version = "3.3.1";
};
mime-types-data = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "003gd7mcay800k2q4pb2zn8lwwgci4bhi42v2jvlidm8ksx03i6q";
sha256 = "1z75svngyhsglx0y2f9rnil2j08f9ab54b3l95bpgz67zq2if753";
type = "gem";
};
version = "3.2022.0105";
version = "3.2020.0512";
};
mini_magick = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1aj604x11d9pksbljh0l38f70b558rhdgji1s9i763hiagvvx2hs";
sha256 = "0lpq12z70n10c1qshcddd5nib2pkcbkwzvmiqqzj60l01k3x4fg9";
type = "gem";
};
version = "4.11.0";
version = "4.10.1";
};
mini_mime = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0lbim375gw2dk6383qirz13hgdmxlan0vc5da2l072j3qw6fqjm5";
sha256 = "1axm0rxyx3ss93wbmfkm78a6x03l8y4qy60rhkkiq0aza0vwq3ha";
type = "gem";
};
version = "1.1.2";
version = "1.0.2";
};
multi_json = {
groups = ["default"];
@@ -670,10 +524,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "04x1nkx6gkqzlc4phdvq05v3vjds6mgqhjqzqpcs6vdh5xyqrf59";
sha256 = "0dzqdawqr4agx7zr1fr5zxdwl8vb5rhpz57l1lk7d2y46ha6l4l7";
type = "gem";
};
version = "2.2.1";
version = "2.2.0";
};
netrc = {
groups = ["default"];
@@ -685,66 +539,56 @@
};
version = "0.11.0";
};
optparse = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0j9l5a1zszvrlggp1ldx82i4kkqx34g4g3amwp488s499w5l1cvj";
type = "gem";
};
version = "0.1.1";
};
os = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0gwd20smyhxbm687vdikfh1gpi96h8qb1x28s2pdcysf6dm6v0ap";
sha256 = "12fli64wz5j9868gpzv5wqsingk1jk457qyqksv9ksmq9b0zpc9x";
type = "gem";
};
version = "1.1.4";
version = "1.1.1";
};
plist = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1whhr897z6z6av85x2cipyjk46bwh6s4wx6nbrcd3iifnzvbqs7l";
sha256 = "0ra0910xxbhfsmdi0ig36pr3q0khdqzwb5da3wg7y3n8d1sh9ffp";
type = "gem";
};
version = "3.6.0";
version = "3.5.0";
};
public_suffix = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1f3knlwfwm05sfbaihrxm4g772b79032q14c16q4b38z8bi63qcb";
sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9";
type = "gem";
};
version = "4.0.7";
version = "4.0.6";
};
rake = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "15whn7p9nrkxangbs9hh75q585yfn66lv0v2mhj6q6dl6x8bzr2w";
sha256 = "0w6qza25bq1s825faaglkx1k6d59aiyjjk3yw3ip5sb463mhhai9";
type = "gem";
};
version = "13.0.6";
version = "13.0.1";
};
representable = {
dependencies = ["declarative" "trailblazer-option" "uber"];
dependencies = ["declarative" "declarative-option" "uber"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "09xwzz94ryp57wyjrqysiz1sslnxd4r4m9wayy63jb7f8qfx1kys";
sha256 = "0qm9rgi1j5a6nv726ka4mmixivlxfsg91h8rpp72wwd4vqbkkm07";
type = "gem";
};
version = "3.1.1";
version = "3.0.4";
};
rest-client = {
dependencies = ["http-accept" "http-cookie" "mime-types" "netrc"];
@@ -767,16 +611,6 @@
};
version = "3.1.2";
};
rexml = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
type = "gem";
};
version = "3.2.5";
};
rouge = {
groups = ["default"];
platforms = [];
@@ -792,20 +626,20 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
sha256 = "17pcc0wgvh3ikrkr7bm3nx0qhyiqwidd13ij0fa50k7gsbnr2p0l";
type = "gem";
};
version = "0.0.5";
version = "0.0.2";
};
rubyzip = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0grps9197qyxakbpw02pda59v45lfgbgiyw48i0mq9f2bn9y6mrz";
sha256 = "0590m2pr9i209pp5z4mx0nb1961ishdiqb28995hw1nln1d1b5ji";
type = "gem";
};
version = "2.3.2";
version = "2.3.0";
};
security = {
groups = ["default"];
@@ -823,10 +657,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1jwyggz80xb3yi2hycmmw214c4072g8i56y0b0gsmpkiyk5d0vh1";
sha256 = "10g2667fvxnc50hcd1aywgsbf8j7nrckg3n7zjvywmyz82pwmpqp";
type = "gem";
};
version = "0.16.1";
version = "0.14.0";
};
simctl = {
dependencies = ["CFPropertyList" "naturally"];
@@ -839,6 +673,16 @@
};
version = "1.6.8";
};
slack-notifier = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1pkfn99dhy5s526r6k8d87fwwb6j287ga9s7lxqmh60z28xqh3bv";
type = "gem";
};
version = "2.3.2";
};
terminal-notifier = {
groups = ["default"];
platforms = [];
@@ -860,16 +704,6 @@
};
version = "1.8.0";
};
trailblazer-option = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "18s48fndi2kfvrfzmq6rxvjfwad347548yby0341ixz1lhpg3r10";
type = "gem";
};
version = "0.1.2";
};
tty-cursor = {
groups = ["default"];
platforms = [];
@@ -927,27 +761,17 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0bf120xbq23zjyf8zi8h1576d71g58srr8rndig0whn10w72vrxz";
sha256 = "0wc47r23h063l8ysws8sy24gzh74mks81cak3lkzlrw4qkqb3sg4";
type = "gem";
};
version = "0.0.8.1";
version = "0.0.7.7";
};
unicode-display_width = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1204c1jx2g89pc25qk5150mk7j5k90692i7ihgfzqnad6qni74h2";
type = "gem";
};
version = "1.8.0";
};
webrick = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1d4cvgmxhfczxiq5fr534lmizkhigd15bsx5719r5ds7k7ivisc7";
sha256 = "06i3id27s60141x6fdnjn5rar1cywdwy64ilc59cz937303q3mna";
type = "gem";
};
version = "1.7.0";
@@ -963,15 +787,15 @@
version = "1.0.0";
};
xcodeproj = {
dependencies = ["CFPropertyList" "atomos" "claide" "colored2" "nanaimo" "rexml"];
dependencies = ["CFPropertyList" "atomos" "claide" "colored2" "nanaimo"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0xmzb1mdsnkpf7v07whz0n2wc8kg6785sc7i5zyawd8dl8517rp4";
sha256 = "1411j6sfnz0cx4fiw52f0yqx4bgcn8cmpgi3i5rwmmahayyjz2fn";
type = "gem";
};
version = "1.21.0";
version = "1.19.0";
};
xcpretty = {
dependencies = ["rouge"];
@@ -990,9 +814,9 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "14rg4f70klrs910n7rsgfa4dn8s2qyny55194ax2qyyb2wpk7k5a";
sha256 = "15b5c0lxz2blmichfdlabzlbyw5nlh1ci898pxwb661m9bahz3ml";
type = "gem";
};
version = "1.0.1";
version = "1.0.0";
};
}
}
@@ -1,26 +1,12 @@
الحاله هي أداة اتصال خاصة وآمنة. يمكنك الدردشة مع الأصدقاء وتخزين الأصول واستكشاف مستقبل الويب دون استغلالها لبياناتك.
يجمع Status بين برنامج المراسلة الخاص ومحفظة التشفير الآمنة ومتصفح لتطبيقات إيثريوم اللامركزية في أداة اتصال واحدة قوية. الدردشة مع الأصدقاء والمجتمعات المتزايدة. شراء الأصول الرقمية وبيعها وتخزينها وتبادلها. تصفح الإنترنت اللامركزي دون استغلال بياناتك.
Status هو نظام تشغيل إيثريوم الخاص بك
برنامج المراسلة الخاص
أرسل دردشات خاصة 1: 1 ، ومجموعات خاصة ، ودردشات عامة دون وسطاء غير ضروريين في اتصالاتك. Status عبارة عن تطبيق نصي يزيل نقاط الاختناق المركزية من رسائلك يمنحك لمزيد من الخصوصية والمراسلة الآمنة. تطبيق مراسلة مشفر مع تشفير شامل وخصوصية بشكل افتراضي بحيث لا يمكن لأي شخص آخر غيرك والمرسل إليه استعراض رسائلك - ولا حتى Status. يعتبره البعض برنامج مراسلات سريًه.
مع الحاله ، أنت وحدك تتحكم في معلوماتك.
مدفوعات بلا حدود، من النظير إلى النظير
يتيح ماسنجر Status لأي شخص في أي مكان إرسال مدفوعات عالمية مباشرة في الدردشة حيث انه متكامل بسلاسة مع محفظة العملات المشفرة.
دردشة
تزيل الحاله جهات خارجية مركزية من رسائلك. ليس المحتوى الخاص بك محميًا فحسب ، بل أيضًا البيانات الوصفية الخاصة بك - للحصول على الخصوصية المطلقة.
محفظة إيثريوم آمنة
تتيح لك محفظة تشفير Status إرسال أصول إيثريوم وتخزينها وتداولها وتبادلها بأمان مثل ETH و SNT والعملات المستقرة القيمة مثل DAI و NFTs. يمكنك التحكم بكل ثقة في عملتك المشفرة والأصول الرقمية باستخدام تطبيق محفظة إيثريوم هذه . تدعم محفظة البلوكتشين الخاصة Status حاليًا أصول ERC-20 و ERC-721 فقط ؛ لا تدعم البيتكوين.
اكسب مع DEFI
دع عملاتك المشفرة تعمل مع أحدث تطبيقات التمويل اللامركزية والتبادلات اللامركزية (DEX) مثل Maker و Aave و Uniswap و Synthetix و PoolTogether و Zerion و Kyber وغيرهم الكثير.
المعاملات
تخزين الأصول الرقمية في محفظة الحالة الخاصة بك. إرسال الرموز المميزة من الأصدقاء وطلبها أو التعامل مع التطبيقات اللامركزية.
متصفح تطبيقات الويب 3 اللامركزية
تصفح الويب الآمن وأدنو من النظام الإيكولوجي المتنامي للتطبيقات اللامركزية باستخدام المتصفح الآمن. يتيح Status الوصول إلى أكثر من مجرد DeFi - اكتشف أحدث الأسواق والمقتنيات والألعاب والشبكات الاجتماعية مثل SuperRare و Gitcoin و Dragonereum و Axie Infinity و Open Sea و CryptoKitties و Decentraland وغيرهم الكثير.
تواصل مع مجتمعك
استكشف وتواصل ودردش مع مجتمعاتك و أصدقائك المفضلين لديك. سواء كانت مجموعة صغيرة من الأصدقاء ، أو مجموعة فنانين ، أو تجار تشفير ، أو المؤسسة الكبيرة التالية - أرسل رسائل نصية وتواصل مع مجتمعات Status.
بثّ اﻷنشطة اﻹجتماعية
شارك ما يدور في ذهنك وانشر التحديثات مع جهات الاتصال الخاصة بك في شبكة تواصل اجتماعية لامركزية حديثة ومقاومة للرقابة.
إنشاء حساب خاص
حافظ على خصوصيتك مع إنشاء حساب مستعار. عند إنشاء حسابك المجاني ، لن تضطر أبدًا إلى إدخال رقم هاتف أو عنوان بريد إلكتروني أو حساب مصرفي. يتم إنشاء المفاتيح الخاصة بالمحفظة الخاصة بك وتخزينها على جهازك لضمان وصولك إلى أموالك ومعاملاتك المالية فقط.
يكتشف
الوصول إلى التطبيقات المستندة إلى الايثريوم على الويب٣ . لعب الألعاب وتبادل الأصول الرقمية وأكثر من ذلك.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 451 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 424 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 602 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 556 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 520 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 837 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

@@ -1 +1 @@
Cryptocurrency wallet, Private messenger, and Ethereum DApp Browser
الدردشة والتعامل بشكل آمن
+1 -1
View File
@@ -1 +1 @@
Status: محفظة تشفير ، ماسنجر ، متصفح إيثريوم
الحاله - الاتصالات الخاصة
@@ -1,28 +1,12 @@
Status kombiniert einen privaten Messenger, eine sichere Krypto-Wallet und einen Ethereum Web3 DApp-Browser in einem leistungsstarken Kommunikationswerkzeug. Chatten Sie mit Freunden und wachsenden Communities. Kaufen, verkaufen, speichern und tauschen Sie digitale Assets. Surfen Sie im dezentralen Internet, ohne dass Ihre Daten ausgebeutet werden.
Status ist eine App für private und sichere Kommunikation. Chatten Sie mit Freunden, bewahren Sie Assets auf und erkunden Sie die Zukunft des Internets, ohne Ihre Privatsphäre aufzugeben.
Status ist Ihr Betriebssystem für Ethereum.
In Status haben nur Sie die volle Kontrolle über Ihre Informationen.
PRIVATER MESSENGER
Senden Sie private 1:1, private Gruppen und öffentliche Chats ohne unnötige Vermittler in Ihrer Kommunikation. Status ist eine Messenger-App, die zentralisierte Drosselstellen aus Ihren Nachrichten entfernt und so für mehr Privatsphäre und sicheres Messaging sorgt. Eine verschlüsselte Messaging-App mit Ende-zu-Ende-Verschlüsselung und standardmäßigem Datenschutz, so dass niemand außer Ihnen und dem gewünschten Empfänger Ihre Nachrichten sehen kann - nicht einmal Status. Einige betrachten es als einen geheimen Messenger.
CHATTEN
Status entfernt unnötige Mittelmänner beim Chatten. Nicht nur ihre Nachrichten sind geschützt, sondern auch auch ihre Metadaten - für ultimative Privatsphäre
PEER-TO-PEER, GRENZÜBERSCHREITENDE ZAHLUNGEN
Nahtlos in die Kryptowährungs-Wallet integriert, ermöglicht der Status-Messenger jedem und überall, globale Zahlungen direkt in einem Chat zu senden.
SICHERE ETHEREUM-WALLET
Mit der Krypto-Wallet Status können Sie Ethereum-Assets wie ETH, SNT, stable Coins wie DAI sowie NFTs sicher senden, speichern, handeln und tauschen. Übernehmen Sie selbstbewusst die Kontrolle über Ihre Kryptowährungen und digitalen Assets mit dieser Ethereum-Wallet-App. Die Status-Blockchain-Wallet unterstützt derzeit nur ERC-20- und ERC-721-Vermögenswerte; sie unterstützt keine Bitcoin.
VERDIENEN MIT DEFI
Setzen Sie Ihre Kryptowährung mit den neuesten dezentralen Finanz-Apps und dezentralen Börsen (DEX) wie Maker, Aave, Uniswap, Synthetix, PoolTogether, Zerion, Kyber und mehr ein.
WEB3 DAPP BROWSER
Surfen Sie im sicheren Web und greifen Sie auf das wachsende Ökosystem dezentraler Anwendungen mit dem sicheren Browser zu. Status ermöglicht den Zugriff auf mehr als nur DeFi - erkunden Sie die neuesten Marktplätze, Sammlerstücke, Spiele und sozialen Netzwerke wie SuperRare, Gitcoin, Dragonereum, Axie Infinity, Open Sea, CryptoKitties, Decentraland und mehr.
VERNETZEN SIE SICH MIT IHRER COMMUNITY
Erforschen, verbinden und chatten Sie mit Ihren Lieblings-Communities und Freunden. Ob es sich um eine kleine Gruppe von Freunden, ein Künstlerkollektiv, Krypto-Händler oder die nächste große Organisation handelt - texten und kommunizieren Sie mit Status-Communities.
SOZIALE NETZE
Teilen Sie mit Ihren Kontakten, was Sie auf dem Herzen haben und posten Sie Updates in einem wirklich offenen, hochmodernen dezentralen sozialen Netzwerk.
PRIVATE ACCOUNT ERSTELLUNG
Bleiben Sie privat mit pseudo-anonymer Kontoerstellung. Wenn Sie Ihr kostenloses Konto erstellen, müssen Sie NIEMALS eine Telefonnummer, E-Mail-Adresse oder ein Bankkonto angeben. Ihre privaten Wallet-Schlüssel werden lokal generiert und gespeichert, um sicherzustellen, dass nur Sie Zugriff auf Ihr Geld und Ihre finanziellen Transaktionen haben.
TRANSAKTIONEN
Bewahren Sie digitale Assets in Ihrer Status-Wallet auf. Senden und erhalten Sie Tokens von Ihren Freunden oder interagieren Sie mit DApps.
ERKUNDEN
Greifen Sie auf Ethereum-basierte Web3-Apps zu. Spielen Sie Spiele, konvertieren Sie Assets u.v.m.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 536 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 424 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 653 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 622 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 593 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 920 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

@@ -1 +1 @@
Wallet für Kryptowährungen, Privater Messenger und Ethereum DApp Browser - Alles in Einem
Chatten und Transaktionen sicher tätigen
+1 -1
View File
@@ -1 +1 @@
Status: Krypto-Wallet, Messenger, Ethereum-Browser
Status - Private Kommunikation
@@ -1,27 +1,12 @@
Status combines a private messenger, secure crypto wallet, and Ethereum Web3 DApp browser into one powerful communication tool. Chat with friends and growing communities. Buy, sell, store, and exchange digital assets. Browse the decentralized internet without being exploited for your data.
Status is a private and secure communication tool. Chat with friends, store assets and explore the future of the web without being exploited for your data.
Status is your operating system for Ethereum.
With Status, you alone control your information.
PRIVATE MESSENGER
Send private 1:1, private group, and public chats without unnecessary middlemen in your communication. Status is a text app that removes centralized choke points from your messages for greater privacy and secure messaging. An encrypted messaging app with end-to-end encryption and privacy by default so nobody other than you and your intended recipient can view your messages not even Status. Some consider it a secret messenger.
CHAT
Status removes centralized third parties from your messages. Not only is your content protected, but so is your metadata for ultimate privacy.
PEER-TO-PEER, BORDERLESS PAYMENTS
Seamlessly integrated with the cryptocurrency wallet, the Status Messenger enables anyone, anywhere to send global payments directly in a chat.
TRANSACT
Store digital assets in your Status wallet. Send and request tokens from friends, or transact with decentralized applications.
SECURE ETHEREUM WALLET
The Status crypto wallet allows you to securely send, store, trade, and exchange ethereum assets such as ETH, SNT, stable coins such as DAI, as well as NFTs. Confidently take control of your cryptocurrency and digital assets with this ethereum wallet app. The Status blockchain wallet currently only supports ERC-20 and ERC-721 assets; it does not support Bitcoin.
EARN WITH DEFI
Put your crypto to work with the latest decentralized finance apps and decentralized exchanges (DEX) such as Maker, Aave, Uniswap, Synthetix, PoolTogether, Zerion, Kyber and more.
WEB3 DAPP BROWSER
Browse the secure web and access the growing ecosystem of decentralized applications with the secure browser. Status enables access to more than just DeFi explore the latest marketplaces, collectibles, games, and social networks such as SuperRare, Gitcoin, Dragonereum, Axie Infinity, Open Sea, CryptoKitties, Decentraland and more.
CONNECT WITH YOUR COMMUNITY
Explore, connect, and chat with your favorite communities and friends. Whether it is a small group of friends, an artist collective, crypto traders, or the next big organization - text and communicate with Status communities.
SOCIAL FEEDS
Share whats on your mind and post updates with your contacts in a truly censorship resistant, state-of-the-art decentralized social network.
PRIVATE ACCOUNT CREATION
Stay private with pseudo-anonymous account creation. When creating your free account, you will NEVER have to enter a phone number, email address, or bank account. Your wallet private keys are locally generated and stored to ensure only you have access to your funds and financial transactions.
EXPLORE
Access Ethereum based applications on web3. Play games, exchange digital assets and more.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 534 KiB

After

Width:  |  Height:  |  Size: 534 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 424 KiB

After

Width:  |  Height:  |  Size: 458 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 508 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 657 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 614 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 609 KiB

Some files were not shown because too many files have changed in this diff Show More