From cd76dd99d98e7b6dfbcec04e8f427e630cc60436 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 14 Dec 2020 13:20:32 -0300 Subject: [PATCH] [CHORE] Build official apps on CI (#2701) * Duplicated target and changed Bridging Header * Display name * Unnecessary dumb swift file removed * Buildable name * Reorder Info.plist * Rename Official target's bundle id * Ignore .mobileprovision * Fix provisioning of official app * Starting signing * stash fastfile * starting official ci iOS * Uncomment Fastfile keychain * Fix CI config * allowProvisioningUpdates * Changing AppIcon and Splash Screen * Remove unnecessary folder inside of Images.xcassets * Reorder notificationservice and shareextension plists * Fix signing * Manual signing style for official * Split official signing * Update project provisioning * Use ENV as profile * Output match * Keys * TestFlight refactor * Setting up android * android-official-play-build job * Start removing unnecessary fastlane tasks on Android * Trying to refactor Android jobs * android-env * Remove foss build for now * Fork * Fix if conditions * Fix push * ios-build command * Rename Android builds * Upload dSYMs * Refactoring workflow * Reorder upload-to-testflight * upload-to-google-play-beta command * Fix ci * Fix android fork build * Fix keystore * Fix options on fastlane android * Fix keystore * Check isOfficial on iOS * Check isOfficial on db * Remove unused imports * Database names on Android * Tag fix * Minor fixes * Set IS_OFFICIAL on CI * Fix detox * follow review suggestions Co-authored-by: Djorkaeff Alexandre --- .circleci/config.yml | 562 ++++++++++-------- .gitignore | 1 + android/app/build.gradle | 34 +- android/app/google-services.json | 83 +++ .../ic_launcher-web.png | Bin .../drawable-v24/ic_launcher_background.xml | 0 .../res/drawable-xxhdpi/splash.png | Bin .../res/drawable/ic_launcher_foreground.xml | 0 .../res/mipmap-anydpi-v26/ic_launcher.xml | 0 .../mipmap-anydpi-v26/ic_launcher_round.xml | 0 .../res/mipmap-hdpi/ic_launcher.png | Bin .../res/mipmap-hdpi/ic_launcher_round.png | Bin .../res/mipmap-mdpi/ic_launcher.png | Bin .../res/mipmap-mdpi/ic_launcher_round.png | Bin .../res/mipmap-xhdpi/ic_launcher.png | Bin .../res/mipmap-xhdpi/ic_launcher_round.png | Bin .../res/mipmap-xxhdpi/ic_launcher.png | Bin .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin .../res/mipmap-xxxhdpi/ic_launcher.png | Bin .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin .../res/values/colors.xml | 0 .../res/values/strings.xml | 0 .../app/src/foss/res/values-night/colors.xml | 4 - android/app/src/foss/res/values/styles.xml | 28 - .../app/src/main/res/values-night/colors.xml | 3 +- .../{foss => official}/ic_launcher-web.png | Bin .../res/drawable-xxhdpi/splash.png | Bin .../res/drawable/ic_launcher_background.xml | 0 .../res/drawable/ic_launcher_foreground.xml | 0 .../res/drawable/launch_screen.xml | 0 .../res/mipmap-anydpi-v26/ic_launcher.xml | 0 .../mipmap-anydpi-v26/ic_launcher_round.xml | 0 .../res/mipmap-hdpi/ic_launcher.png | Bin .../res/mipmap-hdpi/ic_launcher_round.png | Bin .../res/mipmap-mdpi/ic_launcher.png | Bin .../res/mipmap-mdpi/ic_launcher_round.png | Bin .../res/mipmap-xhdpi/ic_launcher.png | Bin .../res/mipmap-xhdpi/ic_launcher_round.png | Bin .../res/mipmap-xxhdpi/ic_launcher.png | Bin .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin .../res/mipmap-xxxhdpi/ic_launcher.png | Bin .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin .../{foss => official}/res/values/colors.xml | 0 .../{foss => official}/res/values/strings.xml | 0 android/app/src/play/google-services.json | 40 -- .../chat/rocket/reactnative/Encryption.java | 50 +- android/fastlane/Fastfile | 34 +- app/constants/environment.js | 2 + app/lib/database/index.js | 9 +- .../AppIcon.appiconset/100.png | Bin .../AppIcon.appiconset/1024.png | Bin .../AppIcon.appiconset/114.png | Bin .../AppIcon.appiconset/120.png | Bin .../AppIcon.appiconset/144.png | Bin .../AppIcon.appiconset/152.png | Bin .../AppIcon.appiconset/167.png | Bin .../AppIcon.appiconset/180.png | Bin .../AppIcon.appiconset/20.png | Bin .../AppIcon.appiconset/29.png | Bin .../AppIcon.appiconset/40.png | Bin .../AppIcon.appiconset/50.png | Bin .../AppIcon.appiconset/57.png | Bin .../AppIcon.appiconset/58.png | Bin .../AppIcon.appiconset/60.png | Bin .../AppIcon.appiconset/72.png | Bin .../AppIcon.appiconset/76.png | Bin .../AppIcon.appiconset/80.png | Bin .../AppIcon.appiconset/87.png | Bin .../AppIcon.appiconset/Contents.json | 0 ios/Experimental.xcassets/Contents.json | 6 + .../Contents.json | 0 .../Launch Screen Icon.imageset/icon.png | Bin .../Launch Screen Icon.imageset/icon@2x.png | Bin .../Launch Screen Icon.imageset/icon@3x.png | Bin .../Contents.json | 59 ++ ios/LaunchScreen.storyboard | 8 +- ios/NotificationService/Info.plist | 4 +- .../AppIcon.appiconset/100.png | Bin 0 -> 5570 bytes .../AppIcon.appiconset/1024.png | Bin 0 -> 57100 bytes .../AppIcon.appiconset/114.png | Bin 0 -> 6320 bytes .../AppIcon.appiconset/120.png | Bin 0 -> 6816 bytes .../AppIcon.appiconset/144.png | Bin 0 -> 8138 bytes .../AppIcon.appiconset/152.png | Bin 0 -> 8614 bytes .../AppIcon.appiconset/167.png | Bin 0 -> 9506 bytes .../AppIcon.appiconset/180.png | Bin 0 -> 10223 bytes .../AppIcon.appiconset/20.png | Bin 0 -> 853 bytes .../AppIcon.appiconset/29.png | Bin 0 -> 1348 bytes .../AppIcon.appiconset/40.png | Bin 0 -> 2005 bytes .../AppIcon.appiconset/50.png | Bin 0 -> 2541 bytes .../AppIcon.appiconset/57.png | Bin 0 -> 2967 bytes .../AppIcon.appiconset/58.png | Bin 0 -> 3044 bytes .../AppIcon.appiconset/60.png | Bin 0 -> 3126 bytes .../AppIcon.appiconset/72.png | Bin 0 -> 3861 bytes .../AppIcon.appiconset/76.png | Bin 0 -> 4062 bytes .../AppIcon.appiconset/80.png | Bin 0 -> 4389 bytes .../AppIcon.appiconset/87.png | Bin 0 -> 4722 bytes .../AppIcon.appiconset/Contents.json | 158 +++++ ios/Official.xcassets/Contents.json | 6 + .../Launch Screen Icon.imageset/Contents.json | 23 + .../Launch Screen Icon.imageset/Icon.png | Bin 0 -> 2149 bytes .../Launch Screen Icon.imageset/Icon@2x.png | Bin 0 -> 4689 bytes .../Launch Screen Icon.imageset/Icon@3x.png | Bin 0 -> 7697 bytes .../Contents.json | 12 +- ios/RocketChatRN.xcodeproj/project.pbxproj | 496 +++++++++++++++- .../xcschemes/NotificationService.xcscheme | 6 +- .../xcschemes/RocketChat.xcscheme | 78 +++ .../xcschemes/RocketChatRN.xcscheme | 8 +- .../xcschemes/ShareRocketChatRN.xcscheme | 6 +- .../Images.xcassets/Contents.json | 6 +- .../Images.xcassets/Icons/Contents.json | 6 - .../Contents.json | 12 - .../message_empty_dark.imageset/Contents.json | 12 - .../Contents.json | 12 - .../audio_thumb.imageset/Contents.json | 12 +- .../audio_thumb.imageset/audio_thumb.png | Bin .../audio_thumb.imageset/audio_thumb@2x.png | Bin .../audio_thumb.imageset/audio_thumb@3x.png | Bin .../Contents.json | 0 .../{Icons => }/logo.imageset/icon.png | Bin .../{Icons => }/logo.imageset/icon@2x.png | Bin .../{Icons => }/logo.imageset/icon@3x.png | Bin .../Contents.json | 12 + .../Message Empty Black Theme.pdf | Bin .../message_empty_dark.imageset/Contents.json | 12 + .../Message Empty Dark Theme.pdf | Bin .../Contents.json | 12 + .../Message Empty.pdf | Bin ios/RocketChatRN/Info.plist | 32 +- ios/ShareRocketChatRN/Info.plist | 8 +- ios/Shared/RocketChat/Database.swift | 3 +- ios/Watermelon.swift | 9 - ios/fastlane/Fastfile | 54 +- ios/fastlane/README.md | 18 +- package.json | 4 +- scripts/prepare_ios_official.sh | 9 + 135 files changed, 1433 insertions(+), 520 deletions(-) create mode 100644 android/app/google-services.json rename android/app/src/{play => experimental}/ic_launcher-web.png (100%) rename android/app/src/{play => experimental}/res/drawable-v24/ic_launcher_background.xml (100%) rename android/app/src/{play => experimental}/res/drawable-xxhdpi/splash.png (100%) rename android/app/src/{play => experimental}/res/drawable/ic_launcher_foreground.xml (100%) rename android/app/src/{foss => experimental}/res/mipmap-anydpi-v26/ic_launcher.xml (100%) rename android/app/src/{foss => experimental}/res/mipmap-anydpi-v26/ic_launcher_round.xml (100%) rename android/app/src/{play => experimental}/res/mipmap-hdpi/ic_launcher.png (100%) rename android/app/src/{play => experimental}/res/mipmap-hdpi/ic_launcher_round.png (100%) rename android/app/src/{play => experimental}/res/mipmap-mdpi/ic_launcher.png (100%) rename android/app/src/{play => experimental}/res/mipmap-mdpi/ic_launcher_round.png (100%) rename android/app/src/{play => experimental}/res/mipmap-xhdpi/ic_launcher.png (100%) rename android/app/src/{play => experimental}/res/mipmap-xhdpi/ic_launcher_round.png (100%) rename android/app/src/{play => experimental}/res/mipmap-xxhdpi/ic_launcher.png (100%) rename android/app/src/{play => experimental}/res/mipmap-xxhdpi/ic_launcher_round.png (100%) rename android/app/src/{play => experimental}/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename android/app/src/{play => experimental}/res/mipmap-xxxhdpi/ic_launcher_round.png (100%) rename android/app/src/{main => experimental}/res/values/colors.xml (100%) rename android/app/src/{main => experimental}/res/values/strings.xml (100%) delete mode 100644 android/app/src/foss/res/values-night/colors.xml delete mode 100644 android/app/src/foss/res/values/styles.xml rename android/app/src/{foss => official}/ic_launcher-web.png (100%) rename android/app/src/{foss => official}/res/drawable-xxhdpi/splash.png (100%) rename android/app/src/{foss => official}/res/drawable/ic_launcher_background.xml (100%) rename android/app/src/{foss => official}/res/drawable/ic_launcher_foreground.xml (100%) rename android/app/src/{foss => official}/res/drawable/launch_screen.xml (100%) rename android/app/src/{play => official}/res/mipmap-anydpi-v26/ic_launcher.xml (100%) rename android/app/src/{play => official}/res/mipmap-anydpi-v26/ic_launcher_round.xml (100%) rename android/app/src/{foss => official}/res/mipmap-hdpi/ic_launcher.png (100%) rename android/app/src/{foss => official}/res/mipmap-hdpi/ic_launcher_round.png (100%) rename android/app/src/{foss => official}/res/mipmap-mdpi/ic_launcher.png (100%) rename android/app/src/{foss => official}/res/mipmap-mdpi/ic_launcher_round.png (100%) rename android/app/src/{foss => official}/res/mipmap-xhdpi/ic_launcher.png (100%) rename android/app/src/{foss => official}/res/mipmap-xhdpi/ic_launcher_round.png (100%) rename android/app/src/{foss => official}/res/mipmap-xxhdpi/ic_launcher.png (100%) rename android/app/src/{foss => official}/res/mipmap-xxhdpi/ic_launcher_round.png (100%) rename android/app/src/{foss => official}/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename android/app/src/{foss => official}/res/mipmap-xxxhdpi/ic_launcher_round.png (100%) rename android/app/src/{foss => official}/res/values/colors.xml (100%) rename android/app/src/{foss => official}/res/values/strings.xml (100%) delete mode 100644 android/app/src/play/google-services.json rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/AppIcon.appiconset/100.png (100%) rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/AppIcon.appiconset/1024.png (100%) rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/AppIcon.appiconset/114.png (100%) rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/AppIcon.appiconset/120.png (100%) rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/AppIcon.appiconset/144.png (100%) rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/AppIcon.appiconset/152.png (100%) rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/AppIcon.appiconset/167.png (100%) rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/AppIcon.appiconset/180.png (100%) rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/AppIcon.appiconset/20.png (100%) rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/AppIcon.appiconset/29.png (100%) rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/AppIcon.appiconset/40.png (100%) rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/AppIcon.appiconset/50.png (100%) rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/AppIcon.appiconset/57.png (100%) rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/AppIcon.appiconset/58.png (100%) rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/AppIcon.appiconset/60.png (100%) rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/AppIcon.appiconset/72.png (100%) rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/AppIcon.appiconset/76.png (100%) rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/AppIcon.appiconset/80.png (100%) rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/AppIcon.appiconset/87.png (100%) rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/AppIcon.appiconset/Contents.json (100%) create mode 100644 ios/Experimental.xcassets/Contents.json rename ios/{RocketChatRN/Images.xcassets/Icons/logo.imageset => Experimental.xcassets/Launch Screen Icon.imageset}/Contents.json (100%) rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/Launch Screen Icon.imageset/icon.png (100%) rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/Launch Screen Icon.imageset/icon@2x.png (100%) rename ios/{RocketChatRN/Images.xcassets => Experimental.xcassets}/Launch Screen Icon.imageset/icon@3x.png (100%) create mode 100644 ios/Experimental.xcassets/splashBackgroundColor.colorset/Contents.json create mode 100644 ios/Official.xcassets/AppIcon.appiconset/100.png create mode 100644 ios/Official.xcassets/AppIcon.appiconset/1024.png create mode 100644 ios/Official.xcassets/AppIcon.appiconset/114.png create mode 100644 ios/Official.xcassets/AppIcon.appiconset/120.png create mode 100644 ios/Official.xcassets/AppIcon.appiconset/144.png create mode 100644 ios/Official.xcassets/AppIcon.appiconset/152.png create mode 100644 ios/Official.xcassets/AppIcon.appiconset/167.png create mode 100644 ios/Official.xcassets/AppIcon.appiconset/180.png create mode 100644 ios/Official.xcassets/AppIcon.appiconset/20.png create mode 100644 ios/Official.xcassets/AppIcon.appiconset/29.png create mode 100644 ios/Official.xcassets/AppIcon.appiconset/40.png create mode 100644 ios/Official.xcassets/AppIcon.appiconset/50.png create mode 100644 ios/Official.xcassets/AppIcon.appiconset/57.png create mode 100644 ios/Official.xcassets/AppIcon.appiconset/58.png create mode 100644 ios/Official.xcassets/AppIcon.appiconset/60.png create mode 100644 ios/Official.xcassets/AppIcon.appiconset/72.png create mode 100644 ios/Official.xcassets/AppIcon.appiconset/76.png create mode 100644 ios/Official.xcassets/AppIcon.appiconset/80.png create mode 100644 ios/Official.xcassets/AppIcon.appiconset/87.png create mode 100644 ios/Official.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/Official.xcassets/Contents.json create mode 100644 ios/Official.xcassets/Launch Screen Icon.imageset/Contents.json create mode 100644 ios/Official.xcassets/Launch Screen Icon.imageset/Icon.png create mode 100644 ios/Official.xcassets/Launch Screen Icon.imageset/Icon@2x.png create mode 100644 ios/Official.xcassets/Launch Screen Icon.imageset/Icon@3x.png rename ios/{RocketChatRN/Images.xcassets => Official.xcassets}/splashBackgroundColor.colorset/Contents.json (85%) create mode 100644 ios/RocketChatRN.xcodeproj/xcshareddata/xcschemes/RocketChat.xcscheme delete mode 100644 ios/RocketChatRN/Images.xcassets/Icons/Contents.json delete mode 100644 ios/RocketChatRN/Images.xcassets/Icons/message_empty_black.imageset/Contents.json delete mode 100644 ios/RocketChatRN/Images.xcassets/Icons/message_empty_dark.imageset/Contents.json delete mode 100644 ios/RocketChatRN/Images.xcassets/Icons/message_empty_light.imageset/Contents.json rename ios/RocketChatRN/Images.xcassets/{Icons => }/audio_thumb.imageset/Contents.json (88%) rename ios/RocketChatRN/Images.xcassets/{Icons => }/audio_thumb.imageset/audio_thumb.png (100%) rename ios/RocketChatRN/Images.xcassets/{Icons => }/audio_thumb.imageset/audio_thumb@2x.png (100%) rename ios/RocketChatRN/Images.xcassets/{Icons => }/audio_thumb.imageset/audio_thumb@3x.png (100%) rename ios/RocketChatRN/Images.xcassets/{Launch Screen Icon.imageset => logo.imageset}/Contents.json (100%) rename ios/RocketChatRN/Images.xcassets/{Icons => }/logo.imageset/icon.png (100%) rename ios/RocketChatRN/Images.xcassets/{Icons => }/logo.imageset/icon@2x.png (100%) rename ios/RocketChatRN/Images.xcassets/{Icons => }/logo.imageset/icon@3x.png (100%) create mode 100644 ios/RocketChatRN/Images.xcassets/message_empty_black.imageset/Contents.json rename ios/RocketChatRN/Images.xcassets/{Icons => }/message_empty_black.imageset/Message Empty Black Theme.pdf (100%) create mode 100644 ios/RocketChatRN/Images.xcassets/message_empty_dark.imageset/Contents.json rename ios/RocketChatRN/Images.xcassets/{Icons => }/message_empty_dark.imageset/Message Empty Dark Theme.pdf (100%) create mode 100644 ios/RocketChatRN/Images.xcassets/message_empty_light.imageset/Contents.json rename ios/RocketChatRN/Images.xcassets/{Icons => }/message_empty_light.imageset/Message Empty.pdf (100%) delete mode 100644 ios/Watermelon.swift create mode 100755 scripts/prepare_ios_official.sh diff --git a/.circleci/config.yml b/.circleci/config.yml index 548febfda..2541bbeb6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -8,6 +8,11 @@ macos: &macos bash-env: &bash-env BASH_ENV: "~/.nvm/nvm.sh" +android-env: &android-env + JAVA_OPTS: '-Xms512m -Xmx2g' + GRADLE_OPTS: '-Xmx3g -Dorg.gradle.daemon=false -Dorg.gradle.jvmargs="-Xmx2g -XX:+HeapDumpOnOutOfMemoryError"' + TERM: dumb + install-npm-modules: &install-npm-modules name: Install NPM modules command: yarn @@ -75,6 +80,231 @@ restore_cache: &restore-gradle-cache name: Restore gradle cache key: android-{{ checksum "android/build.gradle" }}-{{ checksum "android/app/build.gradle" }} +# COMMANDS +commands: + + android-build: + description: "Build Android app" + steps: + - checkout + + - run: *install-node + + - restore_cache: *restore-npm-cache-linux + + - run: *install-npm-modules + + - restore_cache: *restore-gradle-cache + + - run: + name: Configure Gradle + command: | + echo -e "" > ./gradle.properties + # echo -e "android.enableAapt2=false" >> ./gradle.properties + echo -e "android.useAndroidX=true" >> ./gradle.properties + echo -e "android.enableJetifier=true" >> ./gradle.properties + echo -e "FLIPPER_VERSION=0.51.0" >> ./gradle.properties + echo -e "VERSIONCODE=$CIRCLE_BUILD_NUM" >> ./gradle.properties + + if [[ $CIRCLE_JOB == "android-build-official" ]]; then + echo -e "APPLICATION_ID=chat.rocket.android" >> ./gradle.properties + echo -e "BugsnagAPIKey=$BUGSNAG_KEY_OFFICIAL" >> ./gradle.properties + echo $CHAT_ROCKET_ANDROID_STORE_FILE_BASE64_JKS | base64 --decode > ./app/$KEYSTORE_OFFICIAL + echo -e "KEYSTORE=$KEYSTORE_OFFICIAL" >> ./gradle.properties + echo -e "KEYSTORE_PASSWORD=$CHAT_ROCKET_ANDROID_STORE_PASSWORD" >> ./gradle.properties + echo -e "KEY_ALIAS=$CHAT_ROCKET_ANDROID_KEY_ALIAS" >> ./gradle.properties + echo -e "KEY_PASSWORD=$CHAT_ROCKET_ANDROID_KEY_PASSWORD" >> ./gradle.properties + else + echo -e "APPLICATION_ID=chat.rocket.reactnative" >> ./gradle.properties + echo -e "BugsnagAPIKey=$BUGSNAG_KEY" >> ./gradle.properties + echo $KEYSTORE_BASE64 | base64 --decode > ./app/$KEYSTORE + echo -e "KEYSTORE=$KEYSTORE" >> ./gradle.properties + echo -e "KEYSTORE_PASSWORD=$KEYSTORE_PASSWORD" >> ./gradle.properties + echo -e "KEY_ALIAS=$KEY_ALIAS" >> ./gradle.properties + echo -e "KEY_PASSWORD=$KEYSTORE_PASSWORD" >> ./gradle.properties + fi + working_directory: android + + - run: + name: Set Google Services + command: | + if [[ $KEYSTORE ]]; then + echo $GOOGLE_SERVICES_ANDROID | base64 --decode > google-services.json + fi + working_directory: android/app + + - run: + name: Config variables + command: | + if [[ $CIRCLE_JOB == "android-build-official" ]]; then + echo -e "export default { BUGSNAG_API_KEY: '$BUGSNAG_KEY_OFFICIAL' };" > ./config.js + else + echo -e "export default { BUGSNAG_API_KEY: '$BUGSNAG_KEY' };" > ./config.js + fi + + - run: + name: Build App + command: | + if [[ $CIRCLE_JOB == "android-build-official" ]]; then + ./gradlew bundleOfficialPlayRelease + fi + if [[ $CIRCLE_JOB == "android-build-experimental" ]]; then + ./gradlew bundleExperimentalPlayRelease + fi + if [[ ! $KEYSTORE ]]; then + ./gradlew assembleExperimentalPlayDebug + fi + working_directory: android + + - run: + name: Upload sourcemaps to Bugsnag + command: | + if [[ $CIRCLE_JOB == "android-build-official" ]]; then + yarn generate-source-maps-android upload \ + --api-key=$BUGSNAG_KEY_OFFICIAL \ + --app-version=$CIRCLE_BUILD_NUM \ + --minifiedFile=android/app/build/generated/assets/react/officialPlay/release/app.bundle \ + --source-map=android/app/build/generated/sourcemaps/react/officialPlay/release/app.bundle.map \ + --minified-url=app.bundle \ + --upload-sources + fi + if [[ $CIRCLE_JOB == "android-build-experimental" ]]; then + yarn generate-source-maps-android upload \ + --api-key=$BUGSNAG_KEY \ + --app-version=$CIRCLE_BUILD_NUM \ + --minifiedFile=android/app/build/generated/assets/react/experimentalPlay/release/app.bundle \ + --source-map=android/app/build/generated/sourcemaps/react/experimentalPlay/release/app.bundle.map \ + --minified-url=app.bundle \ + --upload-sources + fi + + - store_artifacts: + path: android/app/build/outputs + + - save_cache: *save-npm-cache-linux + + - save_cache: *save-gradle-cache + + - persist_to_workspace: + root: . + paths: + - android/app/build/outputs + + ios-build: + description: "Build iOS app" + steps: + - checkout + - restore_cache: *restore-gems-cache + - restore_cache: *restore-npm-cache-mac + - run: *install-node + - run: *install-npm-modules + - run: *update-fastlane-ios + - run: + name: Set Google Services + command: | + if [[ $KEYSTORE ]]; then + echo $GOOGLE_SERVICES_IOS | base64 --decode > GoogleService-Info.plist + fi + working_directory: ios + - run: + name: Upload sourcemaps to Bugsnag + command: | + if [[ $CIRCLE_JOB == "ios-build-official" ]]; then + yarn generate-source-maps-ios + curl https://upload.bugsnag.com/react-native-source-map \ + -F apiKey=$BUGSNAG_KEY_OFFICIAL \ + -F appBundleVersion=$CIRCLE_BUILD_NUM \ + -F dev=false \ + -F platform=ios \ + -F sourceMap=@ios-release.bundle.map \ + -F bundle=@ios-release.bundle + fi + if [[ $CIRCLE_JOB == "ios-build-experimental" ]]; then + yarn generate-source-maps-ios + curl https://upload.bugsnag.com/react-native-source-map \ + -F apiKey=$BUGSNAG_KEY \ + -F appBundleVersion=$CIRCLE_BUILD_NUM \ + -F dev=false \ + -F platform=ios \ + -F sourceMap=@ios-release.bundle.map \ + -F bundle=@ios-release.bundle + fi + - run: + name: Fastlane Build + no_output_timeout: 1200 + command: | + agvtool new-version -all $CIRCLE_BUILD_NUM + if [[ $CIRCLE_JOB == "ios-build-official" ]]; then + /usr/libexec/PlistBuddy -c "Set BugsnagAPIKey $BUGSNAG_KEY_OFFICIAL" ./RocketChatRN/Info.plist + /usr/libexec/PlistBuddy -c "Set IS_OFFICIAL YES" ./RocketChatRN/Info.plist + else + /usr/libexec/PlistBuddy -c "Set BugsnagAPIKey $BUGSNAG_KEY" ./RocketChatRN/Info.plist + /usr/libexec/PlistBuddy -c "Set IS_OFFICIAL NO" ./RocketChatRN/Info.plist + fi + + if [[ $APP_STORE_CONNECT_API_KEY ]]; then + echo $APP_STORE_CONNECT_API_KEY | base64 --decode > ./fastlane/app_store_connect_api_key.p8 + if [[ $CIRCLE_JOB == "ios-build-official" ]]; then + bundle exec fastlane ios build_official + else + if [[ $KEYSTORE ]]; then + bundle exec fastlane ios release # TODO: rename + else + bundle exec fastlane ios build_fork + fi + fi + fi + working_directory: ios + - save_cache: *save-npm-cache-mac + - save_cache: *save-gems-cache + - store_artifacts: + path: ios/Rocket.Chat.ipa + - store_artifacts: + path: ios/Rocket.Chat.app.dSYM.zip + - persist_to_workspace: + root: . + paths: + - ios/*.ipa + - ios/*.zip + + upload-to-google-play-beta: + description: "Upload to Google Play beta" + parameters: + official: + type: boolean + steps: + - checkout + - attach_workspace: + at: android + - run: + name: Store the google service account key + command: echo "$FASTLANE_GOOGLE_SERVICE_ACCOUNT" | base64 --decode > service_account.json + working_directory: android + - run: *update-fastlane-android + - run: + name: Fastlane Play Store Upload + command: bundle exec fastlane android beta official:<< parameters.official >> + working_directory: android + + upload-to-testflight: + description: "Upload to TestFlight" + parameters: + official: + type: boolean + steps: + - checkout + - attach_workspace: + at: ios + - restore_cache: *restore-gems-cache + - run: *update-fastlane-ios + - run: + name: Fastlane Tesflight Upload + command: | + echo $APP_STORE_CONNECT_API_KEY | base64 --decode > ./fastlane/app_store_connect_api_key.p8 + bundle exec fastlane ios beta official:<< parameters.official >> + working_directory: ios + - save_cache: *save-gems-cache + version: 2.1 # EXECUTORS @@ -119,304 +349,124 @@ jobs: - save_cache: *save-npm-cache-linux # Android builds - android-play-build: + android-build-experimental: <<: *defaults docker: - image: circleci/android:api-28-node - environment: - JAVA_OPTS: '-Xms512m -Xmx2g' - GRADLE_OPTS: '-Xmx3g -Dorg.gradle.daemon=false -Dorg.gradle.jvmargs="-Xmx2g -XX:+HeapDumpOnOutOfMemoryError"' - TERM: dumb + <<: *android-env <<: *bash-env - steps: - - checkout - - - run: *install-node - - - restore_cache: *restore-npm-cache-linux - - - run: *install-npm-modules - - - run: *update-fastlane-android - - - restore_cache: *restore-gradle-cache - - - run: - name: Configure Gradle - command: | - echo -e "" > ./gradle.properties - # echo -e "android.enableAapt2=false" >> ./gradle.properties - echo -e "android.useAndroidX=true" >> ./gradle.properties - echo -e "android.enableJetifier=true" >> ./gradle.properties - echo -e "FLIPPER_VERSION=0.51.0" >> ./gradle.properties - echo -e "APPLICATION_ID=chat.rocket.reactnative" >> ./gradle.properties - echo -e "VERSIONCODE=$CIRCLE_BUILD_NUM" >> ./gradle.properties - echo -e "BugsnagAPIKey=$BUGSNAG_KEY" >> ./gradle.properties - - if [[ $KEYSTORE ]]; then - echo $KEYSTORE_BASE64 | base64 --decode > ./app/$KEYSTORE - echo -e "KEYSTORE=$KEYSTORE" >> ./gradle.properties - echo -e "KEYSTORE_PASSWORD=$KEYSTORE_PASSWORD" >> ./gradle.properties - echo -e "KEY_ALIAS=$KEY_ALIAS" >> ./gradle.properties - echo -e "KEY_PASSWORD=$KEYSTORE_PASSWORD" >> ./gradle.properties - fi - working_directory: android - - - run: - name: Set Google Services - command: | - if [[ $KEYSTORE ]]; then - echo $GOOGLE_SERVICES_ANDROID | base64 --decode > google-services.json - fi - working_directory: android/app/src/play - - - run: - name: Config variables - command: | - echo -e "export default { BUGSNAG_API_KEY: '$BUGSNAG_KEY' };" > ./config.js - - - run: - name: Build Android Play App - command: | - if [[ $KEYSTORE ]]; then - bundle exec fastlane android playRelease - else - bundle exec fastlane android playBuild - fi - working_directory: android - - - run: - name: Upload sourcemaps to Bugsnag - command: | - if [[ $BUGSNAG_KEY ]]; then - yarn generate-source-maps-android upload \ - --api-key=$BUGSNAG_KEY \ - --app-version=$CIRCLE_BUILD_NUM \ - --minifiedFile=android/app/build/generated/assets/react/play/release/app.bundle \ - --source-map=android/app/build/generated/sourcemaps/react/play/release/app.bundle.map \ - --minified-url=app.bundle \ - --upload-sources - fi - - - store_artifacts: - path: android/app/build/outputs - - - save_cache: *save-npm-cache-linux - - - save_cache: *save-gradle-cache - - - persist_to_workspace: - root: . - paths: - - android/fastlane/report.xml - - android/app/build/outputs - - android-foss-build: + - android-build + + android-build-official: <<: *defaults docker: - image: circleci/android:api-28-node - environment: - JAVA_OPTS: '-Xms512m -Xmx2g' - GRADLE_OPTS: '-Xmx3g -Dorg.gradle.daemon=false -Dorg.gradle.jvmargs="-Xmx2g -XX:+HeapDumpOnOutOfMemoryError"' - TERM: dumb + <<: *android-env <<: *bash-env - steps: - - checkout + - android-build - - run: *install-node - - - restore_cache: *restore-npm-cache-linux - - - run: *install-npm-modules - - - run: *update-fastlane-android - - - restore_cache: *restore-gradle-cache - - - run: - name: Configure Gradle - command: | - echo -e "" > ./gradle.properties - # echo -e "android.enableAapt2=false" >> ./gradle.properties - echo -e "android.useAndroidX=true" >> ./gradle.properties - echo -e "android.enableJetifier=true" >> ./gradle.properties - echo -e "FLIPPER_VERSION=0.51.0" >> ./gradle.properties - echo -e "VERSIONCODE=$CIRCLE_BUILD_NUM" >> ./gradle.properties - echo -e "APPLICATION_ID=chat.rocket.android" >> ./gradle.properties - - if [[ $KEYSTORE ]]; then - echo $KEYSTORE_BASE64 | base64 --decode > ./app/$KEYSTORE - echo -e "KEYSTORE=$KEYSTORE" >> ./gradle.properties - echo -e "KEYSTORE_PASSWORD=$KEYSTORE_PASSWORD" >> ./gradle.properties - echo -e "KEY_ALIAS=$KEY_ALIAS" >> ./gradle.properties - echo -e "KEY_PASSWORD=$KEYSTORE_PASSWORD" >> ./gradle.properties - fi - working_directory: android - - - run: - name: Build Android Foss App - command: bundle exec fastlane android fossRelease - working_directory: android - - - store_artifacts: - path: android/app/build/outputs - - - save_cache: *save-npm-cache-linux - - - save_cache: *save-gradle-cache - - - persist_to_workspace: - root: . - paths: - - android/fastlane/report.xml - - android/app/build/outputs - - android-google-play-beta: + android-google-play-beta-experimental: <<: *defaults docker: - image: circleci/android:api-28-node steps: - - checkout + - upload-to-google-play-beta: + official: false - - attach_workspace: - at: android + android-google-play-beta-official: + <<: *defaults + docker: + - image: circleci/android:api-28-node - - run: - name: Store the google service account key - command: echo "$FASTLANE_GOOGLE_SERVICE_ACCOUNT" | base64 --decode > service_account.json - working_directory: android - - - run: *update-fastlane-android - - - run: - name: Fastlane Play Store Upload - command: bundle exec fastlane android beta - working_directory: android + steps: + - upload-to-google-play-beta: + official: true # iOS builds - ios-build: + ios-build-experimental: executor: mac-env - steps: - - checkout + - ios-build - - restore_cache: *restore-gems-cache - - - restore_cache: *restore-npm-cache-mac - - - run: *install-node - - - run: *install-npm-modules - - - run: *update-fastlane-ios - - - run: - name: Set Google Services - command: | - if [[ $KEYSTORE ]]; then - echo $GOOGLE_SERVICES_REACTNATIVE | base64 --decode > GoogleService-Info.plist - fi - working_directory: ios - - - run: - name: Upload sourcemaps to Bugsnag - command: | - if [[ $BUGSNAG_KEY ]]; then - yarn generate-source-maps-ios - curl https://upload.bugsnag.com/react-native-source-map \ - -F apiKey=$BUGSNAG_KEY \ - -F appBundleVersion=$CIRCLE_BUILD_NUM \ - -F dev=false \ - -F platform=ios \ - -F sourceMap=@ios-release.bundle.map \ - -F bundle=@ios-release.bundle - fi - - - run: - name: Fastlane Build - no_output_timeout: 1200 - command: | - agvtool new-version -all $CIRCLE_BUILD_NUM - /usr/libexec/PlistBuddy -c "Set BugsnagAPIKey $BUGSNAG_KEY" ./RocketChatRN/Info.plist - - if [[ $APP_STORE_CONNECT_API_KEY ]]; then - echo $APP_STORE_CONNECT_API_KEY | base64 --decode > ./fastlane/app_store_connect_api_key.p8 - bundle exec fastlane ios release - else - bundle exec fastlane ios build_fork - fi - working_directory: ios - - - save_cache: *save-npm-cache-mac - - - save_cache: *save-gems-cache - - - store_artifacts: - path: ios/RocketChatRN.ipa - - - persist_to_workspace: - root: . - paths: - - ios/*.ipa - - ios/fastlane/report.xml - - ios-testflight: + ios-build-official: executor: mac-env - steps: - - checkout + - ios-build - - attach_workspace: - at: ios + ios-testflight-experimental: + executor: mac-env + steps: + - upload-to-testflight: + official: false - - restore_cache: *restore-gems-cache - - - run: *update-fastlane-ios - - - run: - name: Fastlane Tesflight Upload - command: | - echo $APP_STORE_CONNECT_API_KEY | base64 --decode > ./fastlane/app_store_connect_api_key.p8 - bundle exec fastlane ios beta - working_directory: ios - - - save_cache: *save-gems-cache + ios-testflight-official: + executor: mac-env + steps: + - upload-to-testflight: + official: true workflows: build-and-test: jobs: - lint-testunit - - ios-build: + # iOS Experimental + - ios-build-experimental: requires: - lint-testunit - - ios-hold-testflight: + - ios-hold-testflight-experimental: type: approval requires: - - ios-build - - ios-testflight: + - ios-build-experimental + - ios-testflight-experimental: requires: - - ios-hold-testflight + - ios-hold-testflight-experimental - - android-play-build: - requires: - - lint-testunit - - android-hold-google-play-beta: - type: approval - requires: - - android-play-build - - android-google-play-beta: - requires: - - android-hold-google-play-beta - - android-hold-foss-build: + # iOS Official + - ios-hold-build-official: type: approval requires: - lint-testunit - - android-foss-build: + - ios-build-official: requires: - - android-hold-foss-build + - ios-hold-build-official + - ios-hold-testflight-official: + type: approval + requires: + - ios-build-official + - ios-testflight-official: + requires: + - ios-hold-testflight-official + + # Android Experimental + - android-build-experimental: + requires: + - lint-testunit + - android-hold-google-play-beta-experimental: + type: approval + requires: + - android-build-experimental + - android-google-play-beta-experimental: + requires: + - android-hold-google-play-beta-experimental + + # Android Official + - android-hold-build-official: + type: approval + requires: + - lint-testunit + - android-build-official: + requires: + - android-hold-build-official + - android-hold-google-play-beta-official: + type: approval + requires: + - android-build-official + - android-google-play-beta-official: + requires: + - android-hold-google-play-beta-official diff --git a/.gitignore b/.gitignore index 3d1baa215..d34d28671 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ DerivedData *.ipa *.xcuserstate project.xcworkspace +*.mobileprovision # Android/IntelliJ # diff --git a/android/app/build.gradle b/android/app/build.gradle index 28518d655..d25d0425f 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,10 +1,10 @@ def taskRequests = getGradle().getStartParameter().getTaskRequests().toString().toLowerCase() -def isPlay = !taskRequests.contains("foss") +def isFoss = taskRequests.contains("foss") apply plugin: "com.android.application" apply plugin: 'kotlin-android' -if (isPlay) { +if (!isFoss) { apply plugin: 'com.google.firebase.crashlytics' apply plugin: 'com.bugsnag.android.gradle' } @@ -146,7 +146,7 @@ android { versionCode VERSIONCODE as Integer versionName "4.13.0" vectorDrawables.useSupportLibrary = true - if (isPlay) { + if (!isFoss) { manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String] missingDimensionStrategy "RNNotifications.reactNativeVersion", "reactNative60" // See note below! } @@ -176,7 +176,7 @@ android { minifyEnabled enableProguardInReleaseBuilds setProguardFiles([getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro']) signingConfig signingConfigs.release - if (isPlay) { + if (!isFoss) { firebaseCrashlytics { nativeSymbolUploadEnabled true } @@ -193,10 +193,17 @@ android { // applicationVariants are e.g. debug, release - flavorDimensions "type" + flavorDimensions "app", "type" productFlavors { + official { + dimension = "app" + buildConfigField "boolean", "IS_OFFICIAL", "true" + } + experimental { + dimension = "app" + buildConfigField "boolean", "IS_OFFICIAL", "false" + } foss { - applicationId APPLICATION_ID dimension = "type" buildConfigField "boolean", "FDROID_BUILD", "true" } @@ -206,11 +213,20 @@ android { } } sourceSets { - playDebug { + // TODO: refactor making sure notifications are working properly both on debug and release + experimentalPlayDebug { java.srcDirs = ['src/main/java', 'src/play/java'] manifest.srcFile 'src/play/AndroidManifest.xml' } - playRelease { + experimentalPlayRelease { + java.srcDirs = ['src/main/java', 'src/play/java'] + manifest.srcFile 'src/play/AndroidManifest.xml' + } + officialPlayDebug { + java.srcDirs = ['src/main/java', 'src/play/java'] + manifest.srcFile 'src/play/AndroidManifest.xml' + } + officialPlayRelease { java.srcDirs = ['src/main/java', 'src/play/java'] manifest.srcFile 'src/play/AndroidManifest.xml' } @@ -287,6 +303,6 @@ task copyDownloadableDepsToLibs(type: Copy) { } apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) -if (isPlay) { +if (!isFoss) { apply plugin: 'com.google.gms.google-services' } diff --git a/android/app/google-services.json b/android/app/google-services.json new file mode 100644 index 000000000..f5014f14c --- /dev/null +++ b/android/app/google-services.json @@ -0,0 +1,83 @@ +{ + "project_info": { + "project_number": "115198584049", + "firebase_url": "https://rocketchat-reactnative-test.firebaseio.com", + "project_id": "rocketchat-reactnative-test", + "storage_bucket": "rocketchat-reactnative-test.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:115198584049:android:a79216ae48935d2c9ab550", + "android_client_info": { + "package_name": "chat.rocket.android" + } + }, + "oauth_client": [ + { + "client_id": "115198584049-ack609b1338b827fta26s9rd2ab1aad5.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyAWwowhAfACHBw3YxmDOXY3QyakgjhJLqc" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "115198584049-ack609b1338b827fta26s9rd2ab1aad5.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "115198584049-0efgfvm0oh9ap55g7epmqnjm27mq3j4e.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "chat.rocket.reactnative" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:115198584049:android:8be27b1f7c42a2ed", + "android_client_info": { + "package_name": "chat.rocket.reactnative" + } + }, + "oauth_client": [ + { + "client_id": "115198584049-ack609b1338b827fta26s9rd2ab1aad5.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyAWwowhAfACHBw3YxmDOXY3QyakgjhJLqc" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "115198584049-ack609b1338b827fta26s9rd2ab1aad5.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "115198584049-0efgfvm0oh9ap55g7epmqnjm27mq3j4e.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "chat.rocket.reactnative" + } + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/android/app/src/play/ic_launcher-web.png b/android/app/src/experimental/ic_launcher-web.png similarity index 100% rename from android/app/src/play/ic_launcher-web.png rename to android/app/src/experimental/ic_launcher-web.png diff --git a/android/app/src/play/res/drawable-v24/ic_launcher_background.xml b/android/app/src/experimental/res/drawable-v24/ic_launcher_background.xml similarity index 100% rename from android/app/src/play/res/drawable-v24/ic_launcher_background.xml rename to android/app/src/experimental/res/drawable-v24/ic_launcher_background.xml diff --git a/android/app/src/play/res/drawable-xxhdpi/splash.png b/android/app/src/experimental/res/drawable-xxhdpi/splash.png similarity index 100% rename from android/app/src/play/res/drawable-xxhdpi/splash.png rename to android/app/src/experimental/res/drawable-xxhdpi/splash.png diff --git a/android/app/src/play/res/drawable/ic_launcher_foreground.xml b/android/app/src/experimental/res/drawable/ic_launcher_foreground.xml similarity index 100% rename from android/app/src/play/res/drawable/ic_launcher_foreground.xml rename to android/app/src/experimental/res/drawable/ic_launcher_foreground.xml diff --git a/android/app/src/foss/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/experimental/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from android/app/src/foss/res/mipmap-anydpi-v26/ic_launcher.xml rename to android/app/src/experimental/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/android/app/src/foss/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/app/src/experimental/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 100% rename from android/app/src/foss/res/mipmap-anydpi-v26/ic_launcher_round.xml rename to android/app/src/experimental/res/mipmap-anydpi-v26/ic_launcher_round.xml diff --git a/android/app/src/play/res/mipmap-hdpi/ic_launcher.png b/android/app/src/experimental/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from android/app/src/play/res/mipmap-hdpi/ic_launcher.png rename to android/app/src/experimental/res/mipmap-hdpi/ic_launcher.png diff --git a/android/app/src/play/res/mipmap-hdpi/ic_launcher_round.png b/android/app/src/experimental/res/mipmap-hdpi/ic_launcher_round.png similarity index 100% rename from android/app/src/play/res/mipmap-hdpi/ic_launcher_round.png rename to android/app/src/experimental/res/mipmap-hdpi/ic_launcher_round.png diff --git a/android/app/src/play/res/mipmap-mdpi/ic_launcher.png b/android/app/src/experimental/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from android/app/src/play/res/mipmap-mdpi/ic_launcher.png rename to android/app/src/experimental/res/mipmap-mdpi/ic_launcher.png diff --git a/android/app/src/play/res/mipmap-mdpi/ic_launcher_round.png b/android/app/src/experimental/res/mipmap-mdpi/ic_launcher_round.png similarity index 100% rename from android/app/src/play/res/mipmap-mdpi/ic_launcher_round.png rename to android/app/src/experimental/res/mipmap-mdpi/ic_launcher_round.png diff --git a/android/app/src/play/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/experimental/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from android/app/src/play/res/mipmap-xhdpi/ic_launcher.png rename to android/app/src/experimental/res/mipmap-xhdpi/ic_launcher.png diff --git a/android/app/src/play/res/mipmap-xhdpi/ic_launcher_round.png b/android/app/src/experimental/res/mipmap-xhdpi/ic_launcher_round.png similarity index 100% rename from android/app/src/play/res/mipmap-xhdpi/ic_launcher_round.png rename to android/app/src/experimental/res/mipmap-xhdpi/ic_launcher_round.png diff --git a/android/app/src/play/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/experimental/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from android/app/src/play/res/mipmap-xxhdpi/ic_launcher.png rename to android/app/src/experimental/res/mipmap-xxhdpi/ic_launcher.png diff --git a/android/app/src/play/res/mipmap-xxhdpi/ic_launcher_round.png b/android/app/src/experimental/res/mipmap-xxhdpi/ic_launcher_round.png similarity index 100% rename from android/app/src/play/res/mipmap-xxhdpi/ic_launcher_round.png rename to android/app/src/experimental/res/mipmap-xxhdpi/ic_launcher_round.png diff --git a/android/app/src/play/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/experimental/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from android/app/src/play/res/mipmap-xxxhdpi/ic_launcher.png rename to android/app/src/experimental/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/android/app/src/play/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/app/src/experimental/res/mipmap-xxxhdpi/ic_launcher_round.png similarity index 100% rename from android/app/src/play/res/mipmap-xxxhdpi/ic_launcher_round.png rename to android/app/src/experimental/res/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/android/app/src/main/res/values/colors.xml b/android/app/src/experimental/res/values/colors.xml similarity index 100% rename from android/app/src/main/res/values/colors.xml rename to android/app/src/experimental/res/values/colors.xml diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/experimental/res/values/strings.xml similarity index 100% rename from android/app/src/main/res/values/strings.xml rename to android/app/src/experimental/res/values/strings.xml diff --git a/android/app/src/foss/res/values-night/colors.xml b/android/app/src/foss/res/values-night/colors.xml deleted file mode 100644 index 3c1a14f89..000000000 --- a/android/app/src/foss/res/values-night/colors.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #000000 - diff --git a/android/app/src/foss/res/values/styles.xml b/android/app/src/foss/res/values/styles.xml deleted file mode 100644 index 50861d8e0..000000000 --- a/android/app/src/foss/res/values/styles.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - diff --git a/android/app/src/main/res/values-night/colors.xml b/android/app/src/main/res/values-night/colors.xml index d5d36f2f5..3c1a14f89 100644 --- a/android/app/src/main/res/values-night/colors.xml +++ b/android/app/src/main/res/values-night/colors.xml @@ -1,5 +1,4 @@ #000000 - #1D74F5 - \ No newline at end of file + diff --git a/android/app/src/foss/ic_launcher-web.png b/android/app/src/official/ic_launcher-web.png similarity index 100% rename from android/app/src/foss/ic_launcher-web.png rename to android/app/src/official/ic_launcher-web.png diff --git a/android/app/src/foss/res/drawable-xxhdpi/splash.png b/android/app/src/official/res/drawable-xxhdpi/splash.png similarity index 100% rename from android/app/src/foss/res/drawable-xxhdpi/splash.png rename to android/app/src/official/res/drawable-xxhdpi/splash.png diff --git a/android/app/src/foss/res/drawable/ic_launcher_background.xml b/android/app/src/official/res/drawable/ic_launcher_background.xml similarity index 100% rename from android/app/src/foss/res/drawable/ic_launcher_background.xml rename to android/app/src/official/res/drawable/ic_launcher_background.xml diff --git a/android/app/src/foss/res/drawable/ic_launcher_foreground.xml b/android/app/src/official/res/drawable/ic_launcher_foreground.xml similarity index 100% rename from android/app/src/foss/res/drawable/ic_launcher_foreground.xml rename to android/app/src/official/res/drawable/ic_launcher_foreground.xml diff --git a/android/app/src/foss/res/drawable/launch_screen.xml b/android/app/src/official/res/drawable/launch_screen.xml similarity index 100% rename from android/app/src/foss/res/drawable/launch_screen.xml rename to android/app/src/official/res/drawable/launch_screen.xml diff --git a/android/app/src/play/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/official/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from android/app/src/play/res/mipmap-anydpi-v26/ic_launcher.xml rename to android/app/src/official/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/android/app/src/play/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/app/src/official/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 100% rename from android/app/src/play/res/mipmap-anydpi-v26/ic_launcher_round.xml rename to android/app/src/official/res/mipmap-anydpi-v26/ic_launcher_round.xml diff --git a/android/app/src/foss/res/mipmap-hdpi/ic_launcher.png b/android/app/src/official/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from android/app/src/foss/res/mipmap-hdpi/ic_launcher.png rename to android/app/src/official/res/mipmap-hdpi/ic_launcher.png diff --git a/android/app/src/foss/res/mipmap-hdpi/ic_launcher_round.png b/android/app/src/official/res/mipmap-hdpi/ic_launcher_round.png similarity index 100% rename from android/app/src/foss/res/mipmap-hdpi/ic_launcher_round.png rename to android/app/src/official/res/mipmap-hdpi/ic_launcher_round.png diff --git a/android/app/src/foss/res/mipmap-mdpi/ic_launcher.png b/android/app/src/official/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from android/app/src/foss/res/mipmap-mdpi/ic_launcher.png rename to android/app/src/official/res/mipmap-mdpi/ic_launcher.png diff --git a/android/app/src/foss/res/mipmap-mdpi/ic_launcher_round.png b/android/app/src/official/res/mipmap-mdpi/ic_launcher_round.png similarity index 100% rename from android/app/src/foss/res/mipmap-mdpi/ic_launcher_round.png rename to android/app/src/official/res/mipmap-mdpi/ic_launcher_round.png diff --git a/android/app/src/foss/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/official/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from android/app/src/foss/res/mipmap-xhdpi/ic_launcher.png rename to android/app/src/official/res/mipmap-xhdpi/ic_launcher.png diff --git a/android/app/src/foss/res/mipmap-xhdpi/ic_launcher_round.png b/android/app/src/official/res/mipmap-xhdpi/ic_launcher_round.png similarity index 100% rename from android/app/src/foss/res/mipmap-xhdpi/ic_launcher_round.png rename to android/app/src/official/res/mipmap-xhdpi/ic_launcher_round.png diff --git a/android/app/src/foss/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/official/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from android/app/src/foss/res/mipmap-xxhdpi/ic_launcher.png rename to android/app/src/official/res/mipmap-xxhdpi/ic_launcher.png diff --git a/android/app/src/foss/res/mipmap-xxhdpi/ic_launcher_round.png b/android/app/src/official/res/mipmap-xxhdpi/ic_launcher_round.png similarity index 100% rename from android/app/src/foss/res/mipmap-xxhdpi/ic_launcher_round.png rename to android/app/src/official/res/mipmap-xxhdpi/ic_launcher_round.png diff --git a/android/app/src/foss/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/official/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from android/app/src/foss/res/mipmap-xxxhdpi/ic_launcher.png rename to android/app/src/official/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/android/app/src/foss/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/app/src/official/res/mipmap-xxxhdpi/ic_launcher_round.png similarity index 100% rename from android/app/src/foss/res/mipmap-xxxhdpi/ic_launcher_round.png rename to android/app/src/official/res/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/android/app/src/foss/res/values/colors.xml b/android/app/src/official/res/values/colors.xml similarity index 100% rename from android/app/src/foss/res/values/colors.xml rename to android/app/src/official/res/values/colors.xml diff --git a/android/app/src/foss/res/values/strings.xml b/android/app/src/official/res/values/strings.xml similarity index 100% rename from android/app/src/foss/res/values/strings.xml rename to android/app/src/official/res/values/strings.xml diff --git a/android/app/src/play/google-services.json b/android/app/src/play/google-services.json deleted file mode 100644 index 4b3f409be..000000000 --- a/android/app/src/play/google-services.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "project_info": { - "project_number": "115198584049", - "firebase_url": "https://rocketchat-reactnative-test.firebaseio.com", - "project_id": "rocketchat-reactnative-test", - "storage_bucket": "rocketchat-reactnative-test.appspot.com" - }, - "client": [ - { - "client_info": { - "mobilesdk_app_id": "1:115198584049:android:8be27b1f7c42a2ed", - "android_client_info": { - "package_name": "chat.rocket.reactnative" - } - }, - "oauth_client": [ - { - "client_id": "115198584049-ack609b1338b827fta26s9rd2ab1aad5.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyAWwowhAfACHBw3YxmDOXY3QyakgjhJLqc" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "115198584049-ack609b1338b827fta26s9rd2ab1aad5.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - } - ], - "configuration_version": "1" -} \ No newline at end of file diff --git a/android/app/src/play/java/chat/rocket/reactnative/Encryption.java b/android/app/src/play/java/chat/rocket/reactnative/Encryption.java index 83c2559cd..bb7b12ff6 100644 --- a/android/app/src/play/java/chat/rocket/reactnative/Encryption.java +++ b/android/app/src/play/java/chat/rocket/reactnative/Encryption.java @@ -1,28 +1,22 @@ package chat.rocket.reactnative; -import android.util.Log; -import android.util.Base64; import android.database.Cursor; +import android.util.Base64; +import android.util.Log; -import com.pedrouid.crypto.RSA; +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.WritableMap; +import com.google.gson.Gson; +import com.nozbe.watermelondb.Database; import com.pedrouid.crypto.RCTAes; import com.pedrouid.crypto.RCTRsaUtils; +import com.pedrouid.crypto.RSA; import com.pedrouid.crypto.Util; -import com.google.gson.Gson; - -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.Arguments; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.bridge.WritableMap; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; - -import com.nozbe.watermelondb.Database; - -import java.util.Arrays; +import java.lang.reflect.Field; import java.security.SecureRandom; +import java.util.Arrays; class Message { String _id; @@ -69,8 +63,24 @@ class Encryption { public static Encryption shared = new Encryption(); private ReactApplicationContext reactContext; - public Room readRoom(final Ejson ejson) { - Database database = new Database(ejson.serverURL().replace("https://", "") + "-experimental.db", reactContext); + public Room readRoom(final Ejson ejson) throws NoSuchFieldException { + int resId = reactContext.getResources().getIdentifier("rn_config_reader_custom_package", "string", reactContext.getPackageName()); + String className = reactContext.getString(resId); + Class clazz = null; + Boolean isOfficial = false; + try { + clazz = Class.forName(className + ".BuildConfig"); + Field IS_OFFICIAL = clazz.getField("IS_OFFICIAL"); + isOfficial = (Boolean) IS_OFFICIAL.get(null); + } catch (ClassNotFoundException | IllegalAccessException e) { + e.printStackTrace(); + } + String dbName = ejson.serverURL().replace("https://", ""); + if (!isOfficial) { + dbName += "-experimental"; + } + dbName += ".db"; + Database database = new Database(dbName, reactContext); String[] query = {ejson.rid}; Cursor cursor = database.rawQuery("select * from subscriptions where id == ? limit 1", query); @@ -152,7 +162,7 @@ class Encryption { return m.text; } catch (Exception e) { - Log.d("[ROCKETCHAT][ENCRYPTION]", Log.getStackTraceString(e)); + Log.d("[ROCKETCHAT][E2E]", Log.getStackTraceString(e)); } return null; @@ -182,7 +192,7 @@ class Encryption { return keyId + Base64.encodeToString(concat(bytes, data), Base64.NO_WRAP); } catch (Exception e) { - Log.d("[ROCKETCHAT][ENCRYPTION]", Log.getStackTraceString(e)); + Log.d("[ROCKETCHAT][E2E]", Log.getStackTraceString(e)); } return message; diff --git a/android/fastlane/Fastfile b/android/fastlane/Fastfile index d73d3381f..1ac6d1fa7 100644 --- a/android/fastlane/Fastfile +++ b/android/fastlane/Fastfile @@ -16,26 +16,20 @@ default_platform(:android) platform :android do - desc "Play build for development" - lane :playBuild do - gradle(task: "assemblePlayDebug") - end - - desc "Foss build for release" - lane :fossRelease do - gradle(task: "assembleFossRelease") - end - - desc "Play build for release" - lane :playRelease do - gradle(task: "bundlePlayRelease") - end - desc "Upload App to Play Store Internal" - lane :beta do - upload_to_play_store( - track: 'internal', - aab: 'android/app/build/outputs/bundle/playRelease/app-play-release.aab' - ) + lane :beta do |options| + if options[:official] + upload_to_play_store( + package_name: 'chat.rocket.android', + track: 'internal', + aab: 'android/app/build/outputs/bundle/officialPlayRelease/app-official-play-release.aab' + ) + else + upload_to_play_store( + package_name: 'chat.rocket.reactnative', + track: 'internal', + aab: 'android/app/build/outputs/bundle/experimentalPlayRelease/app-experimental-play-release.aab' + ) + end end end diff --git a/app/constants/environment.js b/app/constants/environment.js index 099d27d1c..43a1dc49f 100644 --- a/app/constants/environment.js +++ b/app/constants/environment.js @@ -1,3 +1,5 @@ import RNConfigReader from 'react-native-config-reader'; export const isFDroidBuild = RNConfigReader.FDROID_BUILD; + +export const isOfficial = RNConfigReader.IS_OFFICIAL; diff --git a/app/lib/database/index.js b/app/lib/database/index.js index 41f135551..67ae9782c 100644 --- a/app/lib/database/index.js +++ b/app/lib/database/index.js @@ -28,6 +28,7 @@ import serversMigrations from './model/servers/migrations'; import { isIOS } from '../../utils/deviceInfo'; import appGroup from '../../utils/appGroup'; +import { isOfficial } from '../../constants/environment'; const appGroupPath = isIOS ? appGroup.path : ''; @@ -35,9 +36,11 @@ if (__DEV__ && isIOS) { console.log(appGroupPath); } +const getDatabasePath = name => `${ appGroupPath }${ name }${ isOfficial ? '' : '-experimental' }.db`; + export const getDatabase = (database = '') => { const path = database.replace(/(^\w+:|^)\/\//, '').replace(/\//g, '.'); - const dbName = `${ appGroupPath }${ path }-experimental.db`; + const dbName = getDatabasePath(path); const adapter = new SQLiteAdapter({ dbName, @@ -70,7 +73,7 @@ class DB { databases = { serversDB: new Database({ adapter: new SQLiteAdapter({ - dbName: `${ appGroupPath }default-experimental.db`, + dbName: getDatabasePath('default'), schema: serversSchema, migrations: serversMigrations }), @@ -97,7 +100,7 @@ class DB { setShareDB(database = '') { const path = database.replace(/(^\w+:|^)\/\//, '').replace(/\//g, '.'); - const dbName = `${ appGroupPath }${ path }-experimental.db`; + const dbName = getDatabasePath(path); const adapter = new SQLiteAdapter({ dbName, diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/100.png b/ios/Experimental.xcassets/AppIcon.appiconset/100.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/100.png rename to ios/Experimental.xcassets/AppIcon.appiconset/100.png diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/1024.png b/ios/Experimental.xcassets/AppIcon.appiconset/1024.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/1024.png rename to ios/Experimental.xcassets/AppIcon.appiconset/1024.png diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/114.png b/ios/Experimental.xcassets/AppIcon.appiconset/114.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/114.png rename to ios/Experimental.xcassets/AppIcon.appiconset/114.png diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/120.png b/ios/Experimental.xcassets/AppIcon.appiconset/120.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/120.png rename to ios/Experimental.xcassets/AppIcon.appiconset/120.png diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/144.png b/ios/Experimental.xcassets/AppIcon.appiconset/144.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/144.png rename to ios/Experimental.xcassets/AppIcon.appiconset/144.png diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/152.png b/ios/Experimental.xcassets/AppIcon.appiconset/152.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/152.png rename to ios/Experimental.xcassets/AppIcon.appiconset/152.png diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/167.png b/ios/Experimental.xcassets/AppIcon.appiconset/167.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/167.png rename to ios/Experimental.xcassets/AppIcon.appiconset/167.png diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/180.png b/ios/Experimental.xcassets/AppIcon.appiconset/180.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/180.png rename to ios/Experimental.xcassets/AppIcon.appiconset/180.png diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/20.png b/ios/Experimental.xcassets/AppIcon.appiconset/20.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/20.png rename to ios/Experimental.xcassets/AppIcon.appiconset/20.png diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/29.png b/ios/Experimental.xcassets/AppIcon.appiconset/29.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/29.png rename to ios/Experimental.xcassets/AppIcon.appiconset/29.png diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/40.png b/ios/Experimental.xcassets/AppIcon.appiconset/40.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/40.png rename to ios/Experimental.xcassets/AppIcon.appiconset/40.png diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/50.png b/ios/Experimental.xcassets/AppIcon.appiconset/50.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/50.png rename to ios/Experimental.xcassets/AppIcon.appiconset/50.png diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/57.png b/ios/Experimental.xcassets/AppIcon.appiconset/57.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/57.png rename to ios/Experimental.xcassets/AppIcon.appiconset/57.png diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/58.png b/ios/Experimental.xcassets/AppIcon.appiconset/58.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/58.png rename to ios/Experimental.xcassets/AppIcon.appiconset/58.png diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/60.png b/ios/Experimental.xcassets/AppIcon.appiconset/60.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/60.png rename to ios/Experimental.xcassets/AppIcon.appiconset/60.png diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/72.png b/ios/Experimental.xcassets/AppIcon.appiconset/72.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/72.png rename to ios/Experimental.xcassets/AppIcon.appiconset/72.png diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/76.png b/ios/Experimental.xcassets/AppIcon.appiconset/76.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/76.png rename to ios/Experimental.xcassets/AppIcon.appiconset/76.png diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/80.png b/ios/Experimental.xcassets/AppIcon.appiconset/80.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/80.png rename to ios/Experimental.xcassets/AppIcon.appiconset/80.png diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/87.png b/ios/Experimental.xcassets/AppIcon.appiconset/87.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/87.png rename to ios/Experimental.xcassets/AppIcon.appiconset/87.png diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/Contents.json b/ios/Experimental.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/Contents.json rename to ios/Experimental.xcassets/AppIcon.appiconset/Contents.json diff --git a/ios/Experimental.xcassets/Contents.json b/ios/Experimental.xcassets/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/ios/Experimental.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/RocketChatRN/Images.xcassets/Icons/logo.imageset/Contents.json b/ios/Experimental.xcassets/Launch Screen Icon.imageset/Contents.json similarity index 100% rename from ios/RocketChatRN/Images.xcassets/Icons/logo.imageset/Contents.json rename to ios/Experimental.xcassets/Launch Screen Icon.imageset/Contents.json diff --git a/ios/RocketChatRN/Images.xcassets/Launch Screen Icon.imageset/icon.png b/ios/Experimental.xcassets/Launch Screen Icon.imageset/icon.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/Launch Screen Icon.imageset/icon.png rename to ios/Experimental.xcassets/Launch Screen Icon.imageset/icon.png diff --git a/ios/RocketChatRN/Images.xcassets/Launch Screen Icon.imageset/icon@2x.png b/ios/Experimental.xcassets/Launch Screen Icon.imageset/icon@2x.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/Launch Screen Icon.imageset/icon@2x.png rename to ios/Experimental.xcassets/Launch Screen Icon.imageset/icon@2x.png diff --git a/ios/RocketChatRN/Images.xcassets/Launch Screen Icon.imageset/icon@3x.png b/ios/Experimental.xcassets/Launch Screen Icon.imageset/icon@3x.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/Launch Screen Icon.imageset/icon@3x.png rename to ios/Experimental.xcassets/Launch Screen Icon.imageset/icon@3x.png diff --git a/ios/Experimental.xcassets/splashBackgroundColor.colorset/Contents.json b/ios/Experimental.xcassets/splashBackgroundColor.colorset/Contents.json new file mode 100644 index 000000000..76ebb74fc --- /dev/null +++ b/ios/Experimental.xcassets/splashBackgroundColor.colorset/Contents.json @@ -0,0 +1,59 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.945", + "green" : "0.937", + "red" : "0.933" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "light" + } + ], + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.961", + "green" : "0.455", + "red" : "0.114" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.000", + "green" : "0.000", + "red" : "0.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "localizable" : true + } +} diff --git a/ios/LaunchScreen.storyboard b/ios/LaunchScreen.storyboard index 4cf51f288..f6ec6adeb 100644 --- a/ios/LaunchScreen.storyboard +++ b/ios/LaunchScreen.storyboard @@ -1,9 +1,9 @@ - + - + @@ -24,6 +24,7 @@ + @@ -32,7 +33,6 @@ - @@ -43,7 +43,7 @@ - + diff --git a/ios/NotificationService/Info.plist b/ios/NotificationService/Info.plist index 5705853e5..d2f1244d4 100644 --- a/ios/NotificationService/Info.plist +++ b/ios/NotificationService/Info.plist @@ -2,8 +2,6 @@ - KeychainGroup - $(AppIdentifierPrefix)chat.rocket.reactnative AppGroup group.ios.chat.rocket CFBundleDevelopmentRegion @@ -24,6 +22,8 @@ $(MARKETING_VERSION) CFBundleVersion 1 + KeychainGroup + $(AppIdentifierPrefix)chat.rocket.reactnative NSExtension NSExtensionPointIdentifier diff --git a/ios/Official.xcassets/AppIcon.appiconset/100.png b/ios/Official.xcassets/AppIcon.appiconset/100.png new file mode 100644 index 0000000000000000000000000000000000000000..7f24a267978e6d691d032c25024d53f83efe99e5 GIT binary patch literal 5570 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Ώ_b(VGnL!|0P#O30mQn_YZ{RE_U2W5!|sAGaV8InN7255 z30m-!r=LROQh0SQ9EP%ahqhT_1U0Y?8K`YE{^ap|ld`!&JH?{F5|$Em%XjON80_(` zN_p!J?eY-uRE|IzK9qr!1haeESa_H_gwej1K5DUa1mQjuyCdUG2AN~gTJV2kK=Noa{)Z)iw` zo^FBF)WW-CS**I!J*?LkA~^eTNE61S?ef|S2yM2u4(ic*c(;BTT|Apb^MC!rrn1_& zP)O>8BKA}zF;)5$^+i0nB;iQ$D)j&6J&0q;1LN+zp>L0ZR<^xlDlf$)*e4-eN+Qck zko(rNrU^#W)ZvE#6Va2d7I-MN(e|yHmigmwAn@%<dZ_4+bmgw`(Ptr13D?FeclHB9s})7mttdgC7TW3xCb z+YTEHbhm%qnUN4KCF&19LanYr-jAzIML#g(W|p=Wil}I1#|Hx}93s8Rnn(}VK;FI! zLXHcr2X5E8^vxba=e~c)RKSy?<;84SbL@nf1BBTV5y9e8bT3~LO}!hgw*{`fn%M&{`!mVKo|_s&`XKrij;=HcS5rTB+V zVKo+k0^DSUHd90`92EYZ2_VLotq)|r4r;dEfV?eV0=;`CCLJ%I1xggMR)4cP3EdCe zy_Ypl3vL&LuK5rsKSeIH)5)(C(9Ar~-*jt=KvMvJfc;ZgTBi;O$q);BLpoA{b_zX|Yi*O~xlv+|;JIqY`=hRz_785>l3UpKSR9j1)3U&A;CN&X5J^ICc?r6H@;W5C%B&kky?tioIy9Vn zZEX9DLux zN8|UmVya$-@2VJW0*%*nwLx<@jE}ni5E|#afXMtsEc>h7xZ>`5O6*Nf{bxo(BndUe zt58__nRZi2R|m!#dEo@Do!=jTykig4h9Epo@N3k>fH)P>l#C=}tyzi058A|Vm?6MP z`PBmx#zq!?itxMz%-dsMdN`g`sM+VCQbMKG#P$Q?kRTVA!g4t0h z!VhtRD;Gl7E^y7f7_PtG8>KY{WbrqeTD?^b9QuS*_={zbKl_^XX;IBZqzgiHwSXil zC3n{9VysJzy?{_nq+%BYZ*JmO9CQyT7(&COOX0Zmd`K5hV~ugKy2Ieb8lF-eSOO`cdB?u5GUdi=9?3%CD*eQmgwYD1w%}a}YfHa1n?A(LA zJu6!N*bKX%!wXb~GH=t@dGx#K4FUKkT?S?Een=CjXUdRU(v3QEMYTo-tsRt?jhQ3G zy(!(8$2bC3)r}o=ZLP9MRc+kDzS_V(?`LdA(9;)Y`_g@TVpyEl6MEr)5q#hYNQ3%A z7|`F=6t^8L&eRz8NC@v*7fu=u&w}R@*Gd32eGrCwM@c@}6j|^I8vpzp%Qvyq26;Sb zCGo7E&P*{mm2vF>gzIZ{*AJ}yhT3wZi_V5Xt)mtm^2);Re2B>0qJyG;Nv__HhtyFKqTf9NTimSJ<(NLRvgxL zS%m$77`MSv7u?%1dOb!DDI=25F1)m5(#!%9(|48q>cSR|ra4FpfOIl3P5!3*dWIz= z<@Fr%FK|HGQxe*9ZoBbMe=i+KLek%?-R#fAcqssqEF~C$2vQK)Czb zj$eIFm;D{#{S*P|2wUpdYitKVvQJI4456KCZmW7o%e(5Nu)u*7CB*7Uu}WuQg{>yZ zhBc(V_!I$2eS*$6l5xQNz#QX%WSn2_2g$sW8xPTAKi|ds)Zs zc%6V)#$K0tJETAP7@dGv2Bd8W(*(qh)6zB@?I^RP2}noTrX7jVw#ioiKh2}aAjwgF QTL1t607*qoM6N<$f>6@5MgRZ+ literal 0 HcmV?d00001 diff --git a/ios/Official.xcassets/AppIcon.appiconset/1024.png b/ios/Official.xcassets/AppIcon.appiconset/1024.png new file mode 100644 index 0000000000000000000000000000000000000000..e737a61ea6f4767936172c3271ff4aa0e125305c GIT binary patch literal 57100 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 Pz`sk%+DdN~%zghKA>Z() literal 0 HcmV?d00001 diff --git a/ios/Official.xcassets/AppIcon.appiconset/114.png b/ios/Official.xcassets/AppIcon.appiconset/114.png new file mode 100644 index 0000000000000000000000000000000000000000..7b5b7e31f0716c6c4c51566aff681ae953c8773c GIT binary patch literal 6320 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 literal 0 HcmV?d00001 diff --git a/ios/Official.xcassets/AppIcon.appiconset/152.png b/ios/Official.xcassets/AppIcon.appiconset/152.png new file mode 100644 index 0000000000000000000000000000000000000000..ece9c43b4ed6ea6ca0fd1f190d38cd4f418f085f GIT binary patch literal 8614 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 literal 0 HcmV?d00001 diff --git a/ios/Official.xcassets/AppIcon.appiconset/167.png b/ios/Official.xcassets/AppIcon.appiconset/167.png new file mode 100644 index 0000000000000000000000000000000000000000..c10c5fae9ab311fcbe3893742bc540954174f316 GIT binary patch literal 9506 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%0D;FmLr+mj{=$DTn^uin9Pe0W>p+aFM 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 Al>h($ literal 0 HcmV?d00001 diff --git a/ios/Official.xcassets/AppIcon.appiconset/180.png b/ios/Official.xcassets/AppIcon.appiconset/180.png new file mode 100644 index 0000000000000000000000000000000000000000..e883fea3111ad31f0552a66c1f8cd814fd7122c8 GIT binary patch literal 10223 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 literal 0 HcmV?d00001 diff --git a/ios/Official.xcassets/AppIcon.appiconset/20.png b/ios/Official.xcassets/AppIcon.appiconset/20.png new file mode 100644 index 0000000000000000000000000000000000000000..580f31abf68debee42cabbafe4ba4ad8a2663e31 GIT binary patch literal 853 zcmV-b1FHOqP){zg0i?W%W*EH+`erhgEDZa23=O*TL}y^`uk=^kfsT9V^b31?qi4 z{MibZvH(NJN~XXxAW(yBSp{Pdk5Ui$tLxPZD2x=!$ioruN;tkejlKhID~4p18o zfu$f6LM9eKQyh?BgU>h>z;fCuH9~!=&*P%dkDY{I9il0Yl^n#l+=u?4pPJUih}M=_ zpl*gzqDG&iCbMW`cVva_QCs=R;#KGRxLG5w+o)Fv9p|bg*BB$OZ8FQdxXgo=g^uK zV!eI~N+5zY1XgttK7Smv2>GqMF&{oger(gVr`^{Si5hwab+yz#>fvRylg6KaB>4Sz zbBqvVySh>16Ua|ifMvS!GQE1Hi5eNFe(<^vpmg*P2m}y`1z3YmF)!bs^xqJ{_EuQZ zG}mBP)W$HNSfX}YH)2r&mCjK5^*Gk(I3lWnvLGBP*EHT(ww;~!E0b^aY$xl<5adfv zR`SCZXl!uBK?x6#S1(;@^QcYbT|l~&?Ls^9HB(UMv!_>YZn2!R8?)5iui6#Gu3pZk f&hyFsEb-!hR*!DZQGC3600000NkvXXu0mjf41t!@ literal 0 HcmV?d00001 diff --git a/ios/Official.xcassets/AppIcon.appiconset/29.png b/ios/Official.xcassets/AppIcon.appiconset/29.png new file mode 100644 index 0000000000000000000000000000000000000000..075803b018db9546af93b0c0fe3d0380a447f770 GIT binary patch literal 1348 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 literal 0 HcmV?d00001 diff --git a/ios/Official.xcassets/AppIcon.appiconset/50.png b/ios/Official.xcassets/AppIcon.appiconset/50.png new file mode 100644 index 0000000000000000000000000000000000000000..4b68ad4618eca36d464da6bd3ce3c91bb983aba7 GIT binary patch literal 2541 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 D7ec^( literal 0 HcmV?d00001 diff --git a/ios/Official.xcassets/AppIcon.appiconset/57.png b/ios/Official.xcassets/AppIcon.appiconset/57.png new file mode 100644 index 0000000000000000000000000000000000000000..5af4cfb70a51d3726d5cf2a028b8cc24250d1149 GIT binary patch literal 2967 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 XBelefF!6qv00000NkvXXu0mjfmS;x} literal 0 HcmV?d00001 diff --git a/ios/Official.xcassets/AppIcon.appiconset/76.png b/ios/Official.xcassets/AppIcon.appiconset/76.png new file mode 100644 index 0000000000000000000000000000000000000000..caef08f4d2430ebc687fe23e1d714b0064b3c8d7 GIT binary patch literal 4062 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 literal 0 HcmV?d00001 diff --git a/ios/Official.xcassets/AppIcon.appiconset/87.png b/ios/Official.xcassets/AppIcon.appiconset/87.png new file mode 100644 index 0000000000000000000000000000000000000000..17381abce125c774d3f392a0a03d1026d924d217 GIT binary patch literal 4722 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 A4FCWD literal 0 HcmV?d00001 diff --git a/ios/Official.xcassets/AppIcon.appiconset/Contents.json b/ios/Official.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..4fdf88263 --- /dev/null +++ b/ios/Official.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,158 @@ +{ + "images" : [ + { + "filename" : "40.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "filename" : "60.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "filename" : "29.png", + "idiom" : "iphone", + "scale" : "1x", + "size" : "29x29" + }, + { + "filename" : "58.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "filename" : "87.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "filename" : "80.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "filename" : "120.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "filename" : "57.png", + "idiom" : "iphone", + "scale" : "1x", + "size" : "57x57" + }, + { + "filename" : "114.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "57x57" + }, + { + "filename" : "120.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "filename" : "180.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "filename" : "20.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "filename" : "40.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "filename" : "29.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "filename" : "58.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "filename" : "40.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "filename" : "80.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "filename" : "50.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "50x50" + }, + { + "filename" : "100.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "50x50" + }, + { + "filename" : "72.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "72x72" + }, + { + "filename" : "144.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "72x72" + }, + { + "filename" : "76.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "filename" : "152.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "filename" : "167.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "filename" : "1024.png", + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/Official.xcassets/Contents.json b/ios/Official.xcassets/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/ios/Official.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/Official.xcassets/Launch Screen Icon.imageset/Contents.json b/ios/Official.xcassets/Launch Screen Icon.imageset/Contents.json new file mode 100644 index 000000000..a7e677576 --- /dev/null +++ b/ios/Official.xcassets/Launch Screen Icon.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/Official.xcassets/Launch Screen Icon.imageset/Icon.png b/ios/Official.xcassets/Launch Screen Icon.imageset/Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..624302b848425ee1d13c8510920c7bc7c301e59f GIT binary patch literal 2149 zcmai0`#%$k1D!l4Omw{;33<$;gfe0inb)`^W?b{Cu`Ocr3hPsw<&`(rW8&s{y}wB2 zj+7>igb6LL%A4eonAg|+3-0-R&N-iRemFm$L}!GJsIZ(c000oRg(5;#$! z8GwCaz)(0c8~`{i`7e0@1w}F^B~Q4EjU}M|y~5H-;JX8JgaH6eX{Qf-`2heyuB{d9 zW)#obhH>KeKzZds@D1Y^frsV#O%m(#Tp)>!1AgmaETp*B~f~o?M>P zFdes7F}J!}E8(fH3|;8-;%*M*p$P6wx^O9RL;BFo3C2F_h0qL%$+%RnI3Dace?@kx zJ*DPHV6PO|Rmi_mV&uc!omS^R4y+k38~v*;m^QY)OYSP+uW;jrsbqslFdzSz)l-6o zF@7UHAHc_(b``A~i9?Y`47M#B($4MA)7VV+B5EvGW!3+^IcF0)8n&=9vBngXl^yqVoO%t`11DSF zaFX-wOIB_KvllFJTj(CHqjpzJwc@KB@ zJ1t3)pr4?HcIO8_#yGvUqp+GRe%PNHJF&gmV6&DMji}uikwFo` z)SAqZWSm!5wd>#S#}B@r1ZM3cnR zkT`FeG-h#s1 z*3?->4wDY?#*A0~4x-aBDX{j-3M0f-LVhT2B;Y7@oc1|UU!Xy<@YE#z(C#)`4@?CI z0eyA8N_3Vl3CvcH)4pzd{GD!C*TEpm%W3cy*h2>rvzAga*lV#Gaqnb!-1-__oSa8C zrpvmx+P0UOBFS$Avng4*ey&|kySez+U6pF?U4{gsvCIgbE_?gNX?2jC^E2ocKD^R2 zt#dsT{q*)%5h6Z?h%e(ER}S%J4a@4MXNi3%qH5Jy@IFUoSWr$m_pW6j!Ou&CN&= z!CWb4i-1`_@ug2M?U(NKeUw*rXqF`ps+SaPy!Z$<{zAz%HmxL_=_oxfMT=i4Q_j&p zPC48+%(sUkB}1#R^WRnaIaADrb-!!$fFS+ZS2wTW)xW9nrNn1e9w8_q&7s?m$e@3)NXc(SPSu8&RdFK8DuWDmykl%OvS(Fo&rR;jI zybtvXl)Z9JB*|zG`PN`b2J!3G3%}%Sp&-dsdG|4{fAKR^MYJ}zm>5V@VJoeIELaIK zbTc^3F45r;CQ}dO`_fAWbi55$q>yZ@@7U##i}I#CRynwPjI+-cO2u!V@pJ`1B4VVv z)-Qgo^+xCMVCPu!K#p?oVZmd+lV|@Z zFRo+I_;jlFm~7#Fpwk?<^Z;Gd<4?O6VYzpG{7yJEev%0x9?Gpx-9{(%RAf;nQhxR` zvmH4r6S-qtqb-XqgFM+ngyrTB_huy{v^KEswcX?Y1owxsTimpCi0|UtlUD$+wMJOg ITcRKSAHzcp6#xJL literal 0 HcmV?d00001 diff --git a/ios/Official.xcassets/Launch Screen Icon.imageset/Icon@2x.png b/ios/Official.xcassets/Launch Screen Icon.imageset/Icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..46b4dedd4d0fb663be51752337d6ba6b40fcb971 GIT binary patch literal 4689 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 literal 0 HcmV?d00001 diff --git a/ios/Official.xcassets/Launch Screen Icon.imageset/Icon@3x.png b/ios/Official.xcassets/Launch Screen Icon.imageset/Icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9ff1d336fb1b09b8865b80949ccbf5c9f0f882c1 GIT binary patch literal 7697 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 YSdH%2MyF5yTjOOgGBDLg>AJl9A2dPvA^-pY literal 0 HcmV?d00001 diff --git a/ios/RocketChatRN/Images.xcassets/splashBackgroundColor.colorset/Contents.json b/ios/Official.xcassets/splashBackgroundColor.colorset/Contents.json similarity index 85% rename from ios/RocketChatRN/Images.xcassets/splashBackgroundColor.colorset/Contents.json rename to ios/Official.xcassets/splashBackgroundColor.colorset/Contents.json index 0e90a95d4..07fb2c4e4 100644 --- a/ios/RocketChatRN/Images.xcassets/splashBackgroundColor.colorset/Contents.json +++ b/ios/Official.xcassets/splashBackgroundColor.colorset/Contents.json @@ -23,9 +23,9 @@ "color-space" : "extended-srgb", "components" : { "alpha" : "1.000", - "blue" : "0xF5", - "green" : "0x74", - "red" : "0x1D" + "blue" : "0x5C", + "green" : "0x45", + "red" : "0xF5" } }, "idiom" : "universal" @@ -41,9 +41,9 @@ "color-space" : "srgb", "components" : { "alpha" : "1.000", - "blue" : "0x00", - "green" : "0x00", - "red" : "0x00" + "blue" : "0.000", + "green" : "0.000", + "red" : "0.000" } }, "idiom" : "universal" diff --git a/ios/RocketChatRN.xcodeproj/project.pbxproj b/ios/RocketChatRN.xcodeproj/project.pbxproj index b9004681a..2b0d27008 100644 --- a/ios/RocketChatRN.xcodeproj/project.pbxproj +++ b/ios/RocketChatRN.xcodeproj/project.pbxproj @@ -87,10 +87,58 @@ 50046CB6BDA69B9232CF66D9 /* libPods-RocketChatRN.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C235DC7B31A4D1578EDEF219 /* libPods-RocketChatRN.a */; }; 7A006F14229C83B600803143 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 7A006F13229C83B600803143 /* GoogleService-Info.plist */; }; 7A0D62D2242AB187006D5C06 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7A0D62D1242AB187006D5C06 /* LaunchScreen.storyboard */; }; + 7A14FCED257FEB3A005BDCD4 /* Experimental.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7A14FCEC257FEB3A005BDCD4 /* Experimental.xcassets */; }; + 7A14FCF4257FEB59005BDCD4 /* Official.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7A14FCF3257FEB59005BDCD4 /* Official.xcassets */; }; 7A3268F624F04FFE0050E241 /* custom.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7A3268F524F04FFE0050E241 /* custom.ttf */; }; 7A3268F724F04FFE0050E241 /* custom.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7A3268F524F04FFE0050E241 /* custom.ttf */; }; - 7AAA749E23043B1E00F1ADE9 /* Watermelon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AAA749D23043B1E00F1ADE9 /* Watermelon.swift */; }; - 7AC99C1C2339361F0000A0CB /* Watermelon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AAA749D23043B1E00F1ADE9 /* Watermelon.swift */; }; + 7AAB3E15257E6A6E00707CF6 /* Sender.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E01C8282511304100FEF824 /* Sender.swift */; }; + 7AAB3E16257E6A6E00707CF6 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E680ED82512990700C9257A /* Request.swift */; }; + 7AAB3E17257E6A6E00707CF6 /* ReplyNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ED00BB02513E04400A1331F /* ReplyNotification.swift */; }; + 7AAB3E18257E6A6E00707CF6 /* Storage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EB8EF712510F1EE00F352B7 /* Storage.swift */; }; + 7AAB3E19257E6A6E00707CF6 /* Push.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E2F61652512958900871711 /* Push.swift */; }; + 7AAB3E1A257E6A6E00707CF6 /* RoomType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E0426E5251A5467008F022C /* RoomType.swift */; }; + 7AAB3E1B257E6A6E00707CF6 /* MessageType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E51D961251263CD00DC95DE /* MessageType.swift */; }; + 7AAB3E1C257E6A6E00707CF6 /* PushResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E01C8202511301400FEF824 /* PushResponse.swift */; }; + 7AAB3E1D257E6A6E00707CF6 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; + 7AAB3E1E257E6A6E00707CF6 /* Encryption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EF5FBD0250C109E00614FEA /* Encryption.swift */; }; + 7AAB3E1F257E6A6E00707CF6 /* RocketChat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E470E822513A71E00E3DD1D /* RocketChat.swift */; }; + 7AAB3E20257E6A6E00707CF6 /* HTTPMethod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E2F61632512955D00871711 /* HTTPMethod.swift */; }; + 7AAB3E21257E6A6E00707CF6 /* Payload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E01C8262511303900FEF824 /* Payload.swift */; }; + 7AAB3E23257E6A6E00707CF6 /* Data+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E598AE625150660002BDFBD /* Data+Extensions.swift */; }; + 7AAB3E24257E6A6E00707CF6 /* Date+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E598AE32515057D002BDFBD /* Date+Extensions.swift */; }; + 7AAB3E25257E6A6E00707CF6 /* Database.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E1C2F7F250FCB69005DCE7D /* Database.swift */; }; + 7AAB3E26257E6A6E00707CF6 /* String+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E67380324DC529B0009E081 /* String+Extensions.swift */; }; + 7AAB3E27257E6A6E00707CF6 /* Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E01C8242511303100FEF824 /* Notification.swift */; }; + 7AAB3E28257E6A6E00707CF6 /* API.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E2F615A25128F9A00871711 /* API.swift */; }; + 7AAB3E29257E6A6E00707CF6 /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E2F615C25128FA300871711 /* Response.swift */; }; + 7AAB3E2A257E6A6E00707CF6 /* AppGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E068D0024FD2E0500A0FFC1 /* AppGroup.m */; }; + 7AAB3E2B257E6A6E00707CF6 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 7AAB3E2C257E6A6E00707CF6 /* URL+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E01C81B2511208400FEF824 /* URL+Extensions.swift */; }; + 7AAB3E2D257E6A6E00707CF6 /* AppGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E068CFD24FD2DC700A0FFC1 /* AppGroup.swift */; }; + 7AAB3E2E257E6A6E00707CF6 /* RoomKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E01C82C2511337700FEF824 /* RoomKey.swift */; }; + 7AAB3E2F257E6A6E00707CF6 /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E01C82A2511335A00FEF824 /* Message.swift */; }; + 7AAB3E30257E6A6E00707CF6 /* NotificationType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E51D964251263D600DC95DE /* NotificationType.swift */; }; + 7AAB3E31257E6A6E00707CF6 /* SendMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E598AE825151A63002BDFBD /* SendMessage.swift */; }; + 7AAB3E33257E6A6E00707CF6 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B37C79D9BD0742CE936B6982 /* libc++.tbd */; }; + 7AAB3E34257E6A6E00707CF6 /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E1EA8192326CD5100E22452 /* libsqlite3.tbd */; }; + 7AAB3E35257E6A6E00707CF6 /* libc.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E1EA8172326CD4B00E22452 /* libc.tbd */; }; + 7AAB3E36257E6A6E00707CF6 /* VideoToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E1EA8152326CD4500E22452 /* VideoToolbox.framework */; }; + 7AAB3E37257E6A6E00707CF6 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E1EA8132326CD3E00E22452 /* CoreVideo.framework */; }; + 7AAB3E38257E6A6E00707CF6 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E1EA8112326CD3900E22452 /* CoreAudio.framework */; }; + 7AAB3E39257E6A6E00707CF6 /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E1EA80F2326CD3300E22452 /* GLKit.framework */; }; + 7AAB3E3A257E6A6E00707CF6 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E1EA80D2326CD2F00E22452 /* CoreGraphics.framework */; }; + 7AAB3E3B257E6A6E00707CF6 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E1EA80B2326CD2800E22452 /* AudioToolbox.framework */; }; + 7AAB3E3C257E6A6E00707CF6 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E1EA8092326CD2200E22452 /* AVFoundation.framework */; }; + 7AAB3E3D257E6A6E00707CF6 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACD4853222860DE00442C55 /* JavaScriptCore.framework */; }; + 7AAB3E3E257E6A6E00707CF6 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 06BB44DD4855498082A744AD /* libz.tbd */; }; + 7AAB3E3F257E6A6E00707CF6 /* libWatermelonDB.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BA7E862283664608B3894E34 /* libWatermelonDB.a */; }; + 7AAB3E40257E6A6E00707CF6 /* libPods-RocketChatRN.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C235DC7B31A4D1578EDEF219 /* libPods-RocketChatRN.a */; }; + 7AAB3E42257E6A6E00707CF6 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; + 7AAB3E43257E6A6E00707CF6 /* custom.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7A3268F524F04FFE0050E241 /* custom.ttf */; }; + 7AAB3E44257E6A6E00707CF6 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 7A006F13229C83B600803143 /* GoogleService-Info.plist */; }; + 7AAB3E45257E6A6E00707CF6 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7A0D62D1242AB187006D5C06 /* LaunchScreen.storyboard */; }; + 7AAB3E49257E6A6E00707CF6 /* ShareRocketChatRN.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 1EC6ACB022CB9FC300A41C61 /* ShareRocketChatRN.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 7AAB3E4A257E6A6E00707CF6 /* NotificationService.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 1EFEB5952493B6640072EDC0 /* NotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 7ACD4897222860DE00442C55 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACD4853222860DE00442C55 /* JavaScriptCore.framework */; }; DD2BA30A89E64F189C2C24AC /* libWatermelonDB.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BA7E862283664608B3894E34 /* libWatermelonDB.a */; }; /* End PBXBuildFile section */ @@ -117,6 +165,20 @@ remoteGlobalIDString = 6E660D5E213BCCD300189354; remoteInfo = WatermelonDB; }; + 7AAB3E0F257E6A6E00707CF6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1EC6ACAF22CB9FC300A41C61; + remoteInfo = ShareRocketChatRN; + }; + 7AAB3E11257E6A6E00707CF6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1EFEB5942493B6640072EDC0; + remoteInfo = NotificationService; + }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -132,6 +194,18 @@ name = "Embed App Extensions"; runOnlyForDeploymentPostprocessing = 0; }; + 7AAB3E48257E6A6E00707CF6 /* Embed App Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 7AAB3E49257E6A6E00707CF6 /* ShareRocketChatRN.appex in Embed App Extensions */, + 7AAB3E4A257E6A6E00707CF6 /* NotificationService.appex in Embed App Extensions */, + ); + name = "Embed App Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ @@ -139,7 +213,7 @@ 037C33B0D9A54FB4CB670FB7 /* Pods-ShareRocketChatRN.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ShareRocketChatRN.release.xcconfig"; path = "Pods/Target Support Files/Pods-ShareRocketChatRN/Pods-ShareRocketChatRN.release.xcconfig"; sourceTree = ""; }; 0383633C4523666C176CAA52 /* Pods-ShareRocketChatRN.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ShareRocketChatRN.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ShareRocketChatRN/Pods-ShareRocketChatRN.debug.xcconfig"; sourceTree = ""; }; 06BB44DD4855498082A744AD /* libz.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; - 13B07F961A680F5B00A75B9A /* RocketChatRN.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RocketChatRN.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07F961A680F5B00A75B9A /* Rocket.Chat Experimental.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Rocket.Chat Experimental.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = RocketChatRN/AppDelegate.h; sourceTree = ""; }; 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = RocketChatRN/AppDelegate.m; sourceTree = ""; }; 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = RocketChatRN/Images.xcassets; sourceTree = ""; }; @@ -197,9 +271,11 @@ 66D6B1D0567051BE541450C9 /* Pods-RocketChatRN.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RocketChatRN.release.xcconfig"; path = "Pods/Target Support Files/Pods-RocketChatRN/Pods-RocketChatRN.release.xcconfig"; sourceTree = ""; }; 7A006F13229C83B600803143 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 7A0D62D1242AB187006D5C06 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; + 7A14FCEC257FEB3A005BDCD4 /* Experimental.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Experimental.xcassets; sourceTree = ""; }; + 7A14FCF3257FEB59005BDCD4 /* Official.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Official.xcassets; sourceTree = ""; }; 7A3268F524F04FFE0050E241 /* custom.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = custom.ttf; sourceTree = ""; }; 7AAA749C23043B1D00F1ADE9 /* RocketChatRN-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RocketChatRN-Bridging-Header.h"; sourceTree = ""; }; - 7AAA749D23043B1E00F1ADE9 /* Watermelon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Watermelon.swift; sourceTree = ""; }; + 7AAB3E52257E6A6E00707CF6 /* Rocket.Chat.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Rocket.Chat.app; sourceTree = BUILT_PRODUCTS_DIR; }; 7ACD4853222860DE00442C55 /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; 81411D280138EF5344596C2F /* libPods-NotificationService.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NotificationService.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 9730F55A254AC78BC5361659 /* Pods-NotificationService.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationService.release.xcconfig"; path = "Pods/Target Support Files/Pods-NotificationService/Pods-NotificationService.release.xcconfig"; sourceTree = ""; }; @@ -251,6 +327,27 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 7AAB3E32257E6A6E00707CF6 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7AAB3E33257E6A6E00707CF6 /* libc++.tbd in Frameworks */, + 7AAB3E34257E6A6E00707CF6 /* libsqlite3.tbd in Frameworks */, + 7AAB3E35257E6A6E00707CF6 /* libc.tbd in Frameworks */, + 7AAB3E36257E6A6E00707CF6 /* VideoToolbox.framework in Frameworks */, + 7AAB3E37257E6A6E00707CF6 /* CoreVideo.framework in Frameworks */, + 7AAB3E38257E6A6E00707CF6 /* CoreAudio.framework in Frameworks */, + 7AAB3E39257E6A6E00707CF6 /* GLKit.framework in Frameworks */, + 7AAB3E3A257E6A6E00707CF6 /* CoreGraphics.framework in Frameworks */, + 7AAB3E3B257E6A6E00707CF6 /* AudioToolbox.framework in Frameworks */, + 7AAB3E3C257E6A6E00707CF6 /* AVFoundation.framework in Frameworks */, + 7AAB3E3D257E6A6E00707CF6 /* JavaScriptCore.framework in Frameworks */, + 7AAB3E3E257E6A6E00707CF6 /* libz.tbd in Frameworks */, + 7AAB3E3F257E6A6E00707CF6 /* libWatermelonDB.a in Frameworks */, + 7AAB3E40257E6A6E00707CF6 /* libPods-RocketChatRN.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -263,9 +360,10 @@ 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 13B07FB01A68108700A75B9A /* AppDelegate.m */, 13B07FB51A68108700A75B9A /* Images.xcassets */, + 7A14FCEC257FEB3A005BDCD4 /* Experimental.xcassets */, + 7A14FCF3257FEB59005BDCD4 /* Official.xcassets */, 13B07FB61A68108700A75B9A /* Info.plist */, 13B07FB71A68108700A75B9A /* main.m */, - 7AAA749D23043B1E00F1ADE9 /* Watermelon.swift */, 7AAA749C23043B1D00F1ADE9 /* RocketChatRN-Bridging-Header.h */, 7A0D62D1242AB187006D5C06 /* LaunchScreen.storyboard */, 1ED00BB02513E04400A1331F /* ReplyNotification.swift */, @@ -426,9 +524,10 @@ 83CBBA001A601CBA00E9B192 /* Products */ = { isa = PBXGroup; children = ( - 13B07F961A680F5B00A75B9A /* RocketChatRN.app */, + 13B07F961A680F5B00A75B9A /* Rocket.Chat Experimental.app */, 1EC6ACB022CB9FC300A41C61 /* ShareRocketChatRN.appex */, 1EFEB5952493B6640072EDC0 /* NotificationService.appex */, + 7AAB3E52257E6A6E00707CF6 /* Rocket.Chat.app */, ); name = Products; sourceTree = ""; @@ -499,7 +598,7 @@ ); name = RocketChatRN; productName = "Hello World"; - productReference = 13B07F961A680F5B00A75B9A /* RocketChatRN.app */; + productReference = 13B07F961A680F5B00A75B9A /* Rocket.Chat Experimental.app */; productType = "com.apple.product-type.application"; }; 1EC6ACAF22CB9FC300A41C61 /* ShareRocketChatRN */ = { @@ -545,6 +644,34 @@ productReference = 1EFEB5952493B6640072EDC0 /* NotificationService.appex */; productType = "com.apple.product-type.app-extension"; }; + 7AAB3E0D257E6A6E00707CF6 /* Rocket.Chat */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7AAB3E4F257E6A6E00707CF6 /* Build configuration list for PBXNativeTarget "Rocket.Chat" */; + buildPhases = ( + 7AAB3E12257E6A6E00707CF6 /* [CP] Check Pods Manifest.lock */, + 7AAB3E13257E6A6E00707CF6 /* Start Packager */, + 7AAB3E14257E6A6E00707CF6 /* Sources */, + 7AAB3E32257E6A6E00707CF6 /* Frameworks */, + 7AAB3E41257E6A6E00707CF6 /* Resources */, + 7AAB3E46257E6A6E00707CF6 /* Bundle React Native code and images */, + 7AAB3E47257E6A6E00707CF6 /* [CP] Copy Pods Resources */, + 7AAB3E48257E6A6E00707CF6 /* Embed App Extensions */, + 7AAB3E4B257E6A6E00707CF6 /* ShellScript */, + 7AAB3E4C257E6A6E00707CF6 /* [CP] Embed Pods Frameworks */, + 7AAB3E4D257E6A6E00707CF6 /* [CP-User] [RNFB] Core Configuration */, + 7AAB3E4E257E6A6E00707CF6 /* [CP-User] [RNFB] Crashlytics Configuration */, + ); + buildRules = ( + ); + dependencies = ( + 7AAB3E0E257E6A6E00707CF6 /* PBXTargetDependency */, + 7AAB3E10257E6A6E00707CF6 /* PBXTargetDependency */, + ); + name = Rocket.Chat; + productName = "Hello World"; + productReference = 7AAB3E52257E6A6E00707CF6 /* Rocket.Chat.app */; + productType = "com.apple.product-type.application"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -590,6 +717,10 @@ DevelopmentTeam = S6UPZG7ZR3; ProvisioningStyle = Manual; }; + 7AAB3E0D257E6A6E00707CF6 = { + DevelopmentTeam = S6UPZG7ZR3; + ProvisioningStyle = Manual; + }; }; }; buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "RocketChatRN" */; @@ -615,6 +746,7 @@ 13B07F861A680F5B00A75B9A /* RocketChatRN */, 1EC6ACAF22CB9FC300A41C61 /* ShareRocketChatRN */, 1EFEB5942493B6640072EDC0 /* NotificationService */, + 7AAB3E0D257E6A6E00707CF6 /* Rocket.Chat */, ); }; /* End PBXProject section */ @@ -636,6 +768,7 @@ files = ( 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 7A3268F624F04FFE0050E241 /* custom.ttf in Resources */, + 7A14FCED257FEB3A005BDCD4 /* Experimental.xcassets in Resources */, 7A006F14229C83B600803143 /* GoogleService-Info.plist in Resources */, 7A0D62D2242AB187006D5C06 /* LaunchScreen.storyboard in Resources */, ); @@ -659,6 +792,18 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 7AAB3E41257E6A6E00707CF6 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7A14FCF4257FEB59005BDCD4 /* Official.xcassets in Resources */, + 7AAB3E42257E6A6E00707CF6 /* Images.xcassets in Resources */, + 7AAB3E43257E6A6E00707CF6 /* custom.ttf in Resources */, + 7AAB3E44257E6A6E00707CF6 /* GoogleService-Info.plist in Resources */, + 7AAB3E45257E6A6E00707CF6 /* LaunchScreen.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -868,6 +1013,167 @@ shellPath = /bin/sh; shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n"; }; + 7AAB3E12257E6A6E00707CF6 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RocketChatRN-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 7AAB3E13257E6A6E00707CF6 /* Start Packager */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Start Packager"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n"; + }; + 7AAB3E46257E6A6E00707CF6 /* Bundle React Native code and images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 12; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native code and images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; + }; + 7AAB3E47257E6A6E00707CF6 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-RocketChatRN/Pods-RocketChatRN-resources.sh", + "${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/QBImagePicker.bundle", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/QBImagePicker.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RocketChatRN/Pods-RocketChatRN-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 7AAB3E4B257E6A6E00707CF6 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"Target architectures: $ARCHS\"\n\nAPP_PATH=\"${TARGET_BUILD_DIR}/${WRAPPER_NAME}\"\n\nfind \"$APP_PATH\" -name '*.framework' -type d | while read -r FRAMEWORK\ndo\nFRAMEWORK_EXECUTABLE_NAME=$(defaults read \"$FRAMEWORK/Info.plist\" CFBundleExecutable)\nFRAMEWORK_EXECUTABLE_PATH=\"$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME\"\necho \"Executable is $FRAMEWORK_EXECUTABLE_PATH\"\necho $(lipo -info \"$FRAMEWORK_EXECUTABLE_PATH\")\n\nFRAMEWORK_TMP_PATH=\"$FRAMEWORK_EXECUTABLE_PATH-tmp\"\n\n# remove simulator's archs if location is not simulator's directory\ncase \"${TARGET_BUILD_DIR}\" in\n*\"iphonesimulator\")\necho \"No need to remove archs\"\n;;\n*)\nif $(lipo \"$FRAMEWORK_EXECUTABLE_PATH\" -verify_arch \"i386\") ; then\nlipo -output \"$FRAMEWORK_TMP_PATH\" -remove \"i386\" \"$FRAMEWORK_EXECUTABLE_PATH\"\necho \"i386 architecture removed\"\nrm \"$FRAMEWORK_EXECUTABLE_PATH\"\nmv \"$FRAMEWORK_TMP_PATH\" \"$FRAMEWORK_EXECUTABLE_PATH\"\nfi\nif $(lipo \"$FRAMEWORK_EXECUTABLE_PATH\" -verify_arch \"x86_64\") ; then\nlipo -output \"$FRAMEWORK_TMP_PATH\" -remove \"x86_64\" \"$FRAMEWORK_EXECUTABLE_PATH\"\necho \"x86_64 architecture removed\"\nrm \"$FRAMEWORK_EXECUTABLE_PATH\"\nmv \"$FRAMEWORK_TMP_PATH\" \"$FRAMEWORK_EXECUTABLE_PATH\"\nfi\n;;\nesac\n\necho \"Completed for executable $FRAMEWORK_EXECUTABLE_PATH\"\necho $\n\ndone\n"; + }; + 7AAB3E4C257E6A6E00707CF6 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-RocketChatRN/Pods-RocketChatRN-frameworks.sh", + "${PODS_ROOT}/JitsiMeetSDK/Frameworks/JitsiMeet.framework", + "${PODS_ROOT}/JitsiMeetSDK/Frameworks/WebRTC.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/JitsiMeet.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WebRTC.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RocketChatRN/Pods-RocketChatRN-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 7AAB3E4D257E6A6E00707CF6 /* [CP-User] [RNFB] Core Configuration */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + name = "[CP-User] [RNFB] Core Configuration"; + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"info: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"info: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"info: -> RNFB build script started\"\necho \"info: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n _RN_ROOT_EXISTS=$(ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\" || echo '')\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n _JSON_OUTPUT_BASE64=$(python -c 'import json,sys,base64;print(base64.b64encode(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"').read())['${_JSON_ROOT}'])))' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes usful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\n\n # config.admob_delay_app_measurement_init\n _ADMOB_DELAY_APP_MEASUREMENT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"admob_delay_app_measurement_init\")\n if [[ $_ADMOB_DELAY_APP_MEASUREMENT == \"true\" ]]; then\n _PLIST_ENTRY_KEYS+=(\"GADDelayAppMeasurementInit\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"YES\")\n fi\n\n # config.admob_ios_app_id\n _ADMOB_IOS_APP_ID=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"admob_ios_app_id\")\n if [[ $_ADMOB_IOS_APP_ID ]]; then\n _PLIST_ENTRY_KEYS+=(\"GADApplicationIdentifier\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_ADMOB_IOS_APP_ID\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"info: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally \n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"info: <- RNFB build script finished\"\n\n"; + }; + 7AAB3E4E257E6A6E00707CF6 /* [CP-User] [RNFB] Crashlytics Configuration */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + name = "[CP-User] [RNFB] Crashlytics Configuration"; + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\nif [[ ${PODS_ROOT} ]]; then\n echo \"info: Exec FirebaseCrashlytics Run from Pods\"\n \"${PODS_ROOT}/FirebaseCrashlytics/run\"\nelse\n echo \"info: Exec FirebaseCrashlytics Run from framework\"\n \"${PROJECT_DIR}/FirebaseCrashlytics.framework/run\"\nfi\n"; + }; 9558AC195A3506BB8472CE99 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1052,7 +1358,6 @@ 1E76CBC825152C070067298C /* RocketChat.swift in Sources */, 1E76CBD725152C840067298C /* HTTPMethod.swift in Sources */, 1E76CBC725152BFF0067298C /* Payload.swift in Sources */, - 7AAA749E23043B1E00F1ADE9 /* Watermelon.swift in Sources */, 1E76CBD225152C730067298C /* Data+Extensions.swift in Sources */, 1E76CBD125152C710067298C /* Date+Extensions.swift in Sources */, 1E76CBD425152C790067298C /* Database.swift in Sources */, @@ -1077,7 +1382,6 @@ files = ( 1EC6ACF622CBA01500A41C61 /* ShareRocketChatRN.m in Sources */, 1E068CFF24FD2DC700A0FFC1 /* AppGroup.swift in Sources */, - 7AC99C1C2339361F0000A0CB /* Watermelon.swift in Sources */, 1E068D0224FD2E0500A0FFC1 /* AppGroup.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1113,6 +1417,41 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 7AAB3E14257E6A6E00707CF6 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7AAB3E15257E6A6E00707CF6 /* Sender.swift in Sources */, + 7AAB3E16257E6A6E00707CF6 /* Request.swift in Sources */, + 7AAB3E17257E6A6E00707CF6 /* ReplyNotification.swift in Sources */, + 7AAB3E18257E6A6E00707CF6 /* Storage.swift in Sources */, + 7AAB3E19257E6A6E00707CF6 /* Push.swift in Sources */, + 7AAB3E1A257E6A6E00707CF6 /* RoomType.swift in Sources */, + 7AAB3E1B257E6A6E00707CF6 /* MessageType.swift in Sources */, + 7AAB3E1C257E6A6E00707CF6 /* PushResponse.swift in Sources */, + 7AAB3E1D257E6A6E00707CF6 /* AppDelegate.m in Sources */, + 7AAB3E1E257E6A6E00707CF6 /* Encryption.swift in Sources */, + 7AAB3E1F257E6A6E00707CF6 /* RocketChat.swift in Sources */, + 7AAB3E20257E6A6E00707CF6 /* HTTPMethod.swift in Sources */, + 7AAB3E21257E6A6E00707CF6 /* Payload.swift in Sources */, + 7AAB3E23257E6A6E00707CF6 /* Data+Extensions.swift in Sources */, + 7AAB3E24257E6A6E00707CF6 /* Date+Extensions.swift in Sources */, + 7AAB3E25257E6A6E00707CF6 /* Database.swift in Sources */, + 7AAB3E26257E6A6E00707CF6 /* String+Extensions.swift in Sources */, + 7AAB3E27257E6A6E00707CF6 /* Notification.swift in Sources */, + 7AAB3E28257E6A6E00707CF6 /* API.swift in Sources */, + 7AAB3E29257E6A6E00707CF6 /* Response.swift in Sources */, + 7AAB3E2A257E6A6E00707CF6 /* AppGroup.m in Sources */, + 7AAB3E2B257E6A6E00707CF6 /* main.m in Sources */, + 7AAB3E2C257E6A6E00707CF6 /* URL+Extensions.swift in Sources */, + 7AAB3E2D257E6A6E00707CF6 /* AppGroup.swift in Sources */, + 7AAB3E2E257E6A6E00707CF6 /* RoomKey.swift in Sources */, + 7AAB3E2F257E6A6E00707CF6 /* Message.swift in Sources */, + 7AAB3E30257E6A6E00707CF6 /* NotificationType.swift in Sources */, + 7AAB3E31257E6A6E00707CF6 /* SendMessage.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ @@ -1126,6 +1465,16 @@ target = 1EFEB5942493B6640072EDC0 /* NotificationService */; targetProxy = 1EFEB59A2493B6640072EDC0 /* PBXContainerItemProxy */; }; + 7AAB3E0E257E6A6E00707CF6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 1EC6ACAF22CB9FC300A41C61 /* ShareRocketChatRN */; + targetProxy = 7AAB3E0F257E6A6E00707CF6 /* PBXContainerItemProxy */; + }; + 7AAB3E10257E6A6E00707CF6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 1EFEB5942493B6640072EDC0 /* NotificationService */; + targetProxy = 7AAB3E11257E6A6E00707CF6 /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ @@ -1153,7 +1502,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 100; + CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = NO; DEVELOPMENT_TEAM = S6UPZG7ZR3; ENABLE_BITCODE = NO; @@ -1183,9 +1532,10 @@ "-lc++", ); PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.reactnative; - PRODUCT_NAME = RocketChatRN; - PROVISIONING_PROFILE_SPECIFIER = "chat.rocket.reactnative Development"; + PRODUCT_NAME = "Rocket.Chat Experimental"; + PROVISIONING_PROFILE_SPECIFIER = "match Development chat.rocket.reactnative"; SWIFT_OBJC_BRIDGING_HEADER = "RocketChatRN-Bridging-Header.h"; + SWIFT_OBJC_INTERFACE_HEADER_NAME = "RocketChatRN-Swift.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1206,7 +1556,7 @@ CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 100; + CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = NO; DEVELOPMENT_TEAM = S6UPZG7ZR3; ENABLE_BITCODE = NO; @@ -1236,9 +1586,10 @@ "-lc++", ); PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.reactnative; - PRODUCT_NAME = RocketChatRN; + PRODUCT_NAME = "Rocket.Chat Experimental"; PROVISIONING_PROFILE_SPECIFIER = "match AppStore chat.rocket.reactnative"; SWIFT_OBJC_BRIDGING_HEADER = "RocketChatRN-Bridging-Header.h"; + SWIFT_OBJC_INTERFACE_HEADER_NAME = "RocketChatRN-Swift.h"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; @@ -1304,7 +1655,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.reactnative.ShareExtension; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = "chat.rocket.reactnative.ShareExtension Development"; + PROVISIONING_PROFILE_SPECIFIER = "match Development chat.rocket.reactnative.ShareExtension"; SKIP_INSTALL = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1401,7 +1752,7 @@ MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.reactnative.NotificationService; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = "chat.rocket.reactnative.NotificationService Development"; + PROVISIONING_PROFILE_SPECIFIER = "match Development chat.rocket.reactnative.NotificationService"; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OBJC_BRIDGING_HEADER = "NotificationService/NotificationService-Bridging-Header.h"; @@ -1446,6 +1797,110 @@ }; name = Release; }; + 7AAB3E50257E6A6E00707CF6 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = ACD75701AFD1CB848CAB0CB3 /* Pods-RocketChatRN.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + APPLICATION_EXTENSION_API_ONLY = NO; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = ""; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = RocketChatRN/RocketChatRN.entitlements; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = NO; + DEVELOPMENT_TEAM = S6UPZG7ZR3; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../../../react-native/React/**", + "$(SRCROOT)/../node_modules/@nozbe/watermelondb/native/ios/WatermelonDB/SupportingFiles/**", + ); + INFOPLIST_FILE = RocketChatRN/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)", + "$(inherited)", + ); + OTHER_CFLAGS = ( + "$(inherited)", + "-DFB_SONARKIT_ENABLED=1", + ); + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.ios; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = "match Development chat.rocket.ios"; + SWIFT_OBJC_BRIDGING_HEADER = "RocketChatRN-Bridging-Header.h"; + SWIFT_OBJC_INTERFACE_HEADER_NAME = "RocketChatRN-Swift.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 7AAB3E51257E6A6E00707CF6 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 66D6B1D0567051BE541450C9 /* Pods-RocketChatRN.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + APPLICATION_EXTENSION_API_ONLY = NO; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = ""; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = RocketChatRN/RocketChatRN.entitlements; + CODE_SIGN_IDENTITY = "Apple Distribution"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = NO; + DEVELOPMENT_TEAM = S6UPZG7ZR3; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../../../react-native/React/**", + "$(SRCROOT)/../node_modules/@nozbe/watermelondb/native/ios/WatermelonDB/SupportingFiles/**", + ); + INFOPLIST_FILE = RocketChatRN/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)", + "$(inherited)", + ); + OTHER_CFLAGS = ( + "$(inherited)", + "-DFB_SONARKIT_ENABLED=1", + ); + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.ios; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = "match AppStore chat.rocket.ios"; + SWIFT_OBJC_BRIDGING_HEADER = "RocketChatRN-Bridging-Header.h"; + SWIFT_OBJC_INTERFACE_HEADER_NAME = "RocketChatRN-Swift.h"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; 83CBBA201A601CBA00E9B192 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1578,6 +2033,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 7AAB3E4F257E6A6E00707CF6 /* Build configuration list for PBXNativeTarget "Rocket.Chat" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7AAB3E50257E6A6E00707CF6 /* Debug */, + 7AAB3E51257E6A6E00707CF6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "RocketChatRN" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/ios/RocketChatRN.xcodeproj/xcshareddata/xcschemes/NotificationService.xcscheme b/ios/RocketChatRN.xcodeproj/xcshareddata/xcschemes/NotificationService.xcscheme index 3fd37eb6a..0bd04dfdb 100644 --- a/ios/RocketChatRN.xcodeproj/xcshareddata/xcschemes/NotificationService.xcscheme +++ b/ios/RocketChatRN.xcodeproj/xcshareddata/xcschemes/NotificationService.xcscheme @@ -30,7 +30,7 @@ @@ -66,7 +66,7 @@ @@ -84,7 +84,7 @@ diff --git a/ios/RocketChatRN.xcodeproj/xcshareddata/xcschemes/RocketChat.xcscheme b/ios/RocketChatRN.xcodeproj/xcshareddata/xcschemes/RocketChat.xcscheme new file mode 100644 index 000000000..5f4de25a3 --- /dev/null +++ b/ios/RocketChatRN.xcodeproj/xcshareddata/xcschemes/RocketChat.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/RocketChatRN.xcodeproj/xcshareddata/xcschemes/RocketChatRN.xcscheme b/ios/RocketChatRN.xcodeproj/xcshareddata/xcschemes/RocketChatRN.xcscheme index a0a55dc16..dbff852ea 100644 --- a/ios/RocketChatRN.xcodeproj/xcshareddata/xcschemes/RocketChatRN.xcscheme +++ b/ios/RocketChatRN.xcodeproj/xcshareddata/xcschemes/RocketChatRN.xcscheme @@ -29,7 +29,7 @@ @@ -59,7 +59,7 @@ @@ -92,7 +92,7 @@ @@ -126,7 +126,7 @@ diff --git a/ios/RocketChatRN.xcodeproj/xcshareddata/xcschemes/ShareRocketChatRN.xcscheme b/ios/RocketChatRN.xcodeproj/xcshareddata/xcschemes/ShareRocketChatRN.xcscheme index 5771aad3f..6db82c337 100644 --- a/ios/RocketChatRN.xcodeproj/xcshareddata/xcschemes/ShareRocketChatRN.xcscheme +++ b/ios/RocketChatRN.xcodeproj/xcshareddata/xcschemes/ShareRocketChatRN.xcscheme @@ -30,7 +30,7 @@ @@ -75,7 +75,7 @@ @@ -93,7 +93,7 @@ diff --git a/ios/RocketChatRN/Images.xcassets/Contents.json b/ios/RocketChatRN/Images.xcassets/Contents.json index da4a164c9..73c00596a 100644 --- a/ios/RocketChatRN/Images.xcassets/Contents.json +++ b/ios/RocketChatRN/Images.xcassets/Contents.json @@ -1,6 +1,6 @@ { "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/ios/RocketChatRN/Images.xcassets/Icons/Contents.json b/ios/RocketChatRN/Images.xcassets/Icons/Contents.json deleted file mode 100644 index da4a164c9..000000000 --- a/ios/RocketChatRN/Images.xcassets/Icons/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/RocketChatRN/Images.xcassets/Icons/message_empty_black.imageset/Contents.json b/ios/RocketChatRN/Images.xcassets/Icons/message_empty_black.imageset/Contents.json deleted file mode 100644 index 850782707..000000000 --- a/ios/RocketChatRN/Images.xcassets/Icons/message_empty_black.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "Message Empty Black Theme.pdf" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/RocketChatRN/Images.xcassets/Icons/message_empty_dark.imageset/Contents.json b/ios/RocketChatRN/Images.xcassets/Icons/message_empty_dark.imageset/Contents.json deleted file mode 100644 index d414a4c13..000000000 --- a/ios/RocketChatRN/Images.xcassets/Icons/message_empty_dark.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "Message Empty Dark Theme.pdf" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/RocketChatRN/Images.xcassets/Icons/message_empty_light.imageset/Contents.json b/ios/RocketChatRN/Images.xcassets/Icons/message_empty_light.imageset/Contents.json deleted file mode 100644 index d1ff3f57b..000000000 --- a/ios/RocketChatRN/Images.xcassets/Icons/message_empty_light.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "Message Empty.pdf" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/RocketChatRN/Images.xcassets/Icons/audio_thumb.imageset/Contents.json b/ios/RocketChatRN/Images.xcassets/audio_thumb.imageset/Contents.json similarity index 88% rename from ios/RocketChatRN/Images.xcassets/Icons/audio_thumb.imageset/Contents.json rename to ios/RocketChatRN/Images.xcassets/audio_thumb.imageset/Contents.json index eed49b149..371d769fb 100644 --- a/ios/RocketChatRN/Images.xcassets/Icons/audio_thumb.imageset/Contents.json +++ b/ios/RocketChatRN/Images.xcassets/audio_thumb.imageset/Contents.json @@ -1,23 +1,23 @@ { "images" : [ { - "idiom" : "universal", "filename" : "audio_thumb.png", + "idiom" : "universal", "scale" : "1x" }, { - "idiom" : "universal", "filename" : "audio_thumb@2x.png", + "idiom" : "universal", "scale" : "2x" }, { - "idiom" : "universal", "filename" : "audio_thumb@3x.png", + "idiom" : "universal", "scale" : "3x" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/ios/RocketChatRN/Images.xcassets/Icons/audio_thumb.imageset/audio_thumb.png b/ios/RocketChatRN/Images.xcassets/audio_thumb.imageset/audio_thumb.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/Icons/audio_thumb.imageset/audio_thumb.png rename to ios/RocketChatRN/Images.xcassets/audio_thumb.imageset/audio_thumb.png diff --git a/ios/RocketChatRN/Images.xcassets/Icons/audio_thumb.imageset/audio_thumb@2x.png b/ios/RocketChatRN/Images.xcassets/audio_thumb.imageset/audio_thumb@2x.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/Icons/audio_thumb.imageset/audio_thumb@2x.png rename to ios/RocketChatRN/Images.xcassets/audio_thumb.imageset/audio_thumb@2x.png diff --git a/ios/RocketChatRN/Images.xcassets/Icons/audio_thumb.imageset/audio_thumb@3x.png b/ios/RocketChatRN/Images.xcassets/audio_thumb.imageset/audio_thumb@3x.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/Icons/audio_thumb.imageset/audio_thumb@3x.png rename to ios/RocketChatRN/Images.xcassets/audio_thumb.imageset/audio_thumb@3x.png diff --git a/ios/RocketChatRN/Images.xcassets/Launch Screen Icon.imageset/Contents.json b/ios/RocketChatRN/Images.xcassets/logo.imageset/Contents.json similarity index 100% rename from ios/RocketChatRN/Images.xcassets/Launch Screen Icon.imageset/Contents.json rename to ios/RocketChatRN/Images.xcassets/logo.imageset/Contents.json diff --git a/ios/RocketChatRN/Images.xcassets/Icons/logo.imageset/icon.png b/ios/RocketChatRN/Images.xcassets/logo.imageset/icon.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/Icons/logo.imageset/icon.png rename to ios/RocketChatRN/Images.xcassets/logo.imageset/icon.png diff --git a/ios/RocketChatRN/Images.xcassets/Icons/logo.imageset/icon@2x.png b/ios/RocketChatRN/Images.xcassets/logo.imageset/icon@2x.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/Icons/logo.imageset/icon@2x.png rename to ios/RocketChatRN/Images.xcassets/logo.imageset/icon@2x.png diff --git a/ios/RocketChatRN/Images.xcassets/Icons/logo.imageset/icon@3x.png b/ios/RocketChatRN/Images.xcassets/logo.imageset/icon@3x.png similarity index 100% rename from ios/RocketChatRN/Images.xcassets/Icons/logo.imageset/icon@3x.png rename to ios/RocketChatRN/Images.xcassets/logo.imageset/icon@3x.png diff --git a/ios/RocketChatRN/Images.xcassets/message_empty_black.imageset/Contents.json b/ios/RocketChatRN/Images.xcassets/message_empty_black.imageset/Contents.json new file mode 100644 index 000000000..dff142af8 --- /dev/null +++ b/ios/RocketChatRN/Images.xcassets/message_empty_black.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Message Empty Black Theme.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/RocketChatRN/Images.xcassets/Icons/message_empty_black.imageset/Message Empty Black Theme.pdf b/ios/RocketChatRN/Images.xcassets/message_empty_black.imageset/Message Empty Black Theme.pdf similarity index 100% rename from ios/RocketChatRN/Images.xcassets/Icons/message_empty_black.imageset/Message Empty Black Theme.pdf rename to ios/RocketChatRN/Images.xcassets/message_empty_black.imageset/Message Empty Black Theme.pdf diff --git a/ios/RocketChatRN/Images.xcassets/message_empty_dark.imageset/Contents.json b/ios/RocketChatRN/Images.xcassets/message_empty_dark.imageset/Contents.json new file mode 100644 index 000000000..90d210a02 --- /dev/null +++ b/ios/RocketChatRN/Images.xcassets/message_empty_dark.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Message Empty Dark Theme.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/RocketChatRN/Images.xcassets/Icons/message_empty_dark.imageset/Message Empty Dark Theme.pdf b/ios/RocketChatRN/Images.xcassets/message_empty_dark.imageset/Message Empty Dark Theme.pdf similarity index 100% rename from ios/RocketChatRN/Images.xcassets/Icons/message_empty_dark.imageset/Message Empty Dark Theme.pdf rename to ios/RocketChatRN/Images.xcassets/message_empty_dark.imageset/Message Empty Dark Theme.pdf diff --git a/ios/RocketChatRN/Images.xcassets/message_empty_light.imageset/Contents.json b/ios/RocketChatRN/Images.xcassets/message_empty_light.imageset/Contents.json new file mode 100644 index 000000000..defdb34c9 --- /dev/null +++ b/ios/RocketChatRN/Images.xcassets/message_empty_light.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Message Empty.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/RocketChatRN/Images.xcassets/Icons/message_empty_light.imageset/Message Empty.pdf b/ios/RocketChatRN/Images.xcassets/message_empty_light.imageset/Message Empty.pdf similarity index 100% rename from ios/RocketChatRN/Images.xcassets/Icons/message_empty_light.imageset/Message Empty.pdf rename to ios/RocketChatRN/Images.xcassets/message_empty_light.imageset/Message Empty.pdf diff --git a/ios/RocketChatRN/Info.plist b/ios/RocketChatRN/Info.plist index e0cf55711..5fd2e90d1 100644 --- a/ios/RocketChatRN/Info.plist +++ b/ios/RocketChatRN/Info.plist @@ -2,14 +2,16 @@ - KeychainGroup - $(AppIdentifierPrefix)chat.rocket.reactnative + IS_OFFICIAL + + AppGroup + group.ios.chat.rocket BugsnagAPIKey CFBundleDevelopmentRegion en CFBundleDisplayName - Rocket.Chat Experimental + $(PRODUCT_NAME) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -38,9 +40,18 @@ CFBundleVersion - 100 + $(CURRENT_PROJECT_VERSION) ITSAppUsesNonExemptEncryption + KeychainGroup + $(AppIdentifierPrefix)chat.rocket.reactnative + LSApplicationQueriesSchemes + + googlechrome + googlechromes + firefox + brave + LSRequiresIPhoneOS NSAppTransportSecurity @@ -60,6 +71,8 @@ Take photos to share with other users NSContactsUsageDescription Allow $(PRODUCT_NAME) to access your contacts + NSFaceIDUsageDescription + Unlock the app with FaceID NSLocationAlwaysAndWhenInUseUsageDescription This permission stems from a library we use and will never be called anyway. If you see this, deny access NSLocationAlwaysUsageDescription @@ -76,8 +89,6 @@ Upload photos to share with other users or to change your avatar NSRemindersUsageDescription Allow $(PRODUCT_NAME) to access your reminders - NSFaceIDUsageDescription - Unlock the app with FaceID UIAppFonts custom.ttf @@ -107,14 +118,5 @@ UIViewControllerBasedStatusBarAppearance - LSApplicationQueriesSchemes - - googlechrome - googlechromes - firefox - brave - - AppGroup - group.ios.chat.rocket diff --git a/ios/ShareRocketChatRN/Info.plist b/ios/ShareRocketChatRN/Info.plist index 60da51fe8..35791ba38 100644 --- a/ios/ShareRocketChatRN/Info.plist +++ b/ios/ShareRocketChatRN/Info.plist @@ -2,8 +2,8 @@ - KeychainGroup - $(AppIdentifierPrefix)chat.rocket.reactnative + AppGroup + group.ios.chat.rocket CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName @@ -22,6 +22,8 @@ 4.13.0 CFBundleVersion 1 + KeychainGroup + $(AppIdentifierPrefix)chat.rocket.reactnative NSAppTransportSecurity NSAllowsArbitraryLoads @@ -62,7 +64,5 @@ custom.ttf - AppGroup - group.ios.chat.rocket diff --git a/ios/Shared/RocketChat/Database.swift b/ios/Shared/RocketChat/Database.swift index 4dcf295d5..7e7928506 100644 --- a/ios/Shared/RocketChat/Database.swift +++ b/ios/Shared/RocketChat/Database.swift @@ -25,7 +25,8 @@ final class Database { init(server: String) { if let url = URL(string: server) { if let domain = url.domain, let directory = directory { - self.database = WatermelonDB.Database(path: "\(directory)/\(domain)-experimental.db") + let isOfficial = Bundle.main.object(forInfoDictionaryKey: "IS_OFFICIAL") as? Bool ?? false + self.database = WatermelonDB.Database(path: "\(directory)/\(domain)\(isOfficial ? "" : "-experimental").db") } } } diff --git a/ios/Watermelon.swift b/ios/Watermelon.swift deleted file mode 100644 index 5008e2369..000000000 --- a/ios/Watermelon.swift +++ /dev/null @@ -1,9 +0,0 @@ -// -// Watermelon.swift -// RocketChatRN -// -// Created by Diego Mello on 14/08/19. -// Copyright © 2019 Facebook. All rights reserved. -// - -import Foundation diff --git a/ios/fastlane/Fastfile b/ios/fastlane/Fastfile index 456a8a2c0..6b6dd11cc 100644 --- a/ios/fastlane/Fastfile +++ b/ios/fastlane/Fastfile @@ -25,13 +25,8 @@ platform :ios do ) end - desc "Runs all the tests" - lane :test do - scan - end - desc "Submit a new Beta Build to Apple TestFlight" - lane :beta do + lane :beta do |options| api_key = app_store_connect_api_key( key_id: "F296L2294Y", issuer_id: "69a6de8e-75cf-47e3-e053-5b8c7c11a4d1", @@ -39,12 +34,14 @@ platform :ios do in_house: false ) pilot( - ipa: 'ios/RocketChatRN.ipa', + ipa: 'ios/Rocket.Chat.ipa', + app_identifier: options[:official] ? 'chat.rocket.ios' : 'chat.rocket.reactnative', skip_waiting_for_build_processing: true ) + upload_symbols_to_crashlytics(dsym_path: "./ios/Rocket.Chat.app.dSYM.zip") end - desc "Build App for release" + desc "Build Experimental app" lane :release do api_key = app_store_connect_api_key( key_id: "F296L2294Y", @@ -56,7 +53,11 @@ platform :ios do get_provisioning_profile(app_identifier: "chat.rocket.reactnative.ShareExtension") get_provisioning_profile(app_identifier: "chat.rocket.reactnative.NotificationService") # pem(api_key: api_key) # still uses Spaceship http://docs.fastlane.tools/actions/pem/#how-does-it-work - gym(scheme: "RocketChatRN", workspace: "RocketChatRN.xcworkspace") + gym( + scheme: "RocketChatRN", + workspace: "RocketChatRN.xcworkspace", + output_name: "Rocket.Chat" + ) end desc "Build fork app" @@ -64,6 +65,41 @@ platform :ios do gym(scheme: "RocketChatRN", workspace: "RocketChatRN.xcworkspace", skip_codesigning: true, skip_archive: true) end + desc "Build Official app" + lane :build_official do + sh "../../scripts/prepare_ios_official.sh" + + match( + type: "appstore", + app_identifier: ["chat.rocket.ios", "chat.rocket.ios.NotificationService", "chat.rocket.ios.Rocket-Chat-ShareExtension"], + readonly: true, + output_path: './' + ) + + update_project_provisioning( + xcodeproj: 'RocketChatRN.xcodeproj', + profile: "AppStore_chat.rocket.ios.NotificationService.mobileprovision", + target_filter: "NotificationService", + build_configuration: 'Release', + code_signing_identity: 'iPhone Distribution' + ) + + update_project_provisioning( + xcodeproj: 'RocketChatRN.xcodeproj', + profile: "AppStore_chat.rocket.ios.Rocket-Chat-ShareExtension.mobileprovision", + target_filter: "ShareRocketChatRN", + build_configuration: 'Release', + code_signing_identity: 'iPhone Distribution' + ) + + gym( + scheme: "RocketChat", + workspace: "RocketChatRN.xcworkspace", + xcargs: "-allowProvisioningUpdates", + output_name: "Rocket.Chat" + ) + end + after_all do |lane| delete_keychain(name: ENV["MATCH_KEYCHAIN_NAME"]) end diff --git a/ios/fastlane/README.md b/ios/fastlane/README.md index 82c024be6..275f6ac1e 100644 --- a/ios/fastlane/README.md +++ b/ios/fastlane/README.md @@ -16,11 +16,6 @@ or alternatively using `brew install fastlane` # Available Actions ## iOS -### ios test -``` -fastlane ios test -``` -Runs all the tests ### ios beta ``` fastlane ios beta @@ -30,12 +25,17 @@ Submit a new Beta Build to Apple TestFlight ``` fastlane ios release ``` -Build App for release -### ios build +Build Experimental app +### ios build_fork ``` -fastlane ios build +fastlane ios build_fork ``` -Build App for development +Build fork app +### ios build_official +``` +fastlane ios build_official +``` +Build Official app ---- diff --git a/package.json b/package.json index c8cafd9b6..6fc1fed65 100644 --- a/package.json +++ b/package.json @@ -190,7 +190,7 @@ "specs": "e2e/tests", "configurations": { "ios.sim.debug": { - "binaryPath": "ios/build/Build/Products/Debug-iphonesimulator/RocketChatRN.app", + "binaryPath": "ios/build/Build/Products/Debug-iphonesimulator/Rocket.Chat Experimental.app", "build": "xcodebuild -workspace ios/RocketChatRN.xcworkspace -scheme RocketChatRN -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build", "type": "ios.simulator", "device": { @@ -198,7 +198,7 @@ } }, "ios.sim.release": { - "binaryPath": "ios/build/Build/Products/Release-iphonesimulator/RocketChatRN.app", + "binaryPath": "ios/build/Build/Products/Release-iphonesimulator/Rocket.Chat Experimental.app", "build": "xcodebuild -workspace ios/RocketChatRN.xcworkspace -scheme RocketChatRN -configuration Release -sdk iphonesimulator -derivedDataPath ios/build", "type": "ios.simulator", "device": { diff --git a/scripts/prepare_ios_official.sh b/scripts/prepare_ios_official.sh new file mode 100755 index 000000000..8750c1803 --- /dev/null +++ b/scripts/prepare_ios_official.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +sed -i '' \ + 's/PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.reactnative.ShareExtension;/PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.ios.Rocket-Chat-ShareExtension;/' \ + ../RocketChatRN.xcodeproj/project.pbxproj + +sed -i '' \ + 's/PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.reactnative.NotificationService;/PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.ios.NotificationService;/' \ + ../RocketChatRN.xcodeproj/project.pbxproj \ No newline at end of file