Fastlane for Android and ios (#165)

This commit is contained in:
enahum 2017-01-19 11:35:40 -03:00 committed by Harrison Healey
parent 4d9e30fb75
commit 1566a79c93
52 changed files with 1427 additions and 119 deletions

1
.gitattributes vendored Normal file
View file

@ -0,0 +1 @@
*.pbxproj -text

6
.gitignore vendored
View file

@ -22,6 +22,7 @@ xcuserdata
DerivedData
*.hmap
*.ipa
*.apk
*.xcuserstate
project.xcworkspace
@ -52,3 +53,8 @@ Session.vim
.netrwhist
*~
tags
fastlane/report.xml
*.zip
server.PID
mattermost.keystore

View file

@ -1,4 +1,9 @@
.PHONY: run run-ios run-android check-style test clean post-install
.PHONY: check-ios-target prepare-ios-build build-ios after-ios-build
.PHONY: check-android-target prepare-android-build build-android after-android-build
ios_target := $(filter-out build-ios,$(MAKECMDGOALS))
android_target := $(filter-out build-android,$(MAKECMDGOALS))
.npminstall: package.json
@if ! [ $(shell command -v npm) ]; then \
@ -24,7 +29,6 @@ dist/assets: $(BASE_ASSETS) $(OVERRIDE_ASSETS)
node scripts/make-dist-assets.js
.PHONY: prepare
pre-run: .npminstall dist/assets
run: run-ios
@ -91,3 +95,55 @@ post-install:
sed -i'' -e 's|"./lib/locales": false|"./lib/locales": "./lib/locales"|g' node_modules/intl-messageformat/package.json
sed -i'' -e 's|"./lib/locales": false|"./lib/locales": "./lib/locales"|g' node_modules/intl-relativeformat/package.json
sed -i'' -e 's|"./locale-data/complete.js": false|"./locale-data/complete.js": "./locale-data/complete.js"|g' node_modules/intl/package.json
check-ios-target:
ifneq ($(ios_target), $(filter $(ios_target), dev beta release))
@echo "Try running make build-ios TARGET\nWhere TARGET is one of dev, beta or release"
@exit 1
endif
prepare-ios-build:
# We need to do this as the react-native packager minifies the output and that is causing issues
@sed -i'' -e 's|--dev $$DEV|--dev true|g' ./node_modules/react-native/packager/react-native-xcode.sh
@node ./node_modules/react-native/local-cli/cli.js start --reset-cache & echo $$! > server.PID
do-build-ios:
@echo "Building ios $(ios_target) app"
@cd fastlane && fastlane ios $(ios_target)
after-ios-build:
@echo Cleaning up
@sed -i'' -e 's|--dev true|--dev $$DEV|g' ./node_modules/react-native/packager/react-native-xcode.sh
@kill -9 `cat server.PID` && rm server.PID
build-ios: | check-ios-target pre-run check-style prepare-ios-build do-build-ios after-ios-build
check-android-target:
ifneq ($(android_target), $(filter $(android_target), dev beta release))
@echo "Try running make build-android TARGET\nWhere TARGET is one of dev, beta or release"
@exit 1
endif
prepare-android-build:
@rm -rf ./node_modules/react-native/local-cli/templates/HelloWorld
@sed -i'' -e 's|def devEnabled = !targetName.toLowerCase().contains("release")|def devEnabled = true|g' ./node_modules/react-native/react.gradle
do-build-android:
@echo "Building android $(android_target) app"
@cd fastlane && fastlane android $(android_target)
after-android-build:
@echo Cleaning up
@sed -i'' -e 's|def devEnabled = true|def devEnabled = !targetName.toLowerCase().contains("release")|g' ./node_modules/react-native/react.gradle
build-android: | check-android-target pre-run check-style prepare-android-build do-build-android after-android-build
dev:
@:
beta:
@:
release:
@:

View file

@ -88,15 +88,24 @@ android {
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.mattermost"
applicationId "com.mattermost.react.native"
minSdkVersion 16
targetSdkVersion 22
versionCode 1
targetSdkVersion 23
versionCode 2
versionName "1.0"
multiDexEnabled true
ndk {
abiFilters "armeabi-v7a", "x86"
}
}
signingConfigs {
release {
storeFile file(MATTERMOST_RELEASE_STORE_FILE)
storePassword MATTERMOST_RELEASE_PASSWORD
keyAlias MATTERMOST_RELEASE_KEY_ALIAS
keyPassword MATTERMOST_RELEASE_PASSWORD
}
}
splits {
abi {
reset()
@ -109,6 +118,7 @@ android {
release {
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
signingConfig signingConfigs.release
}
}
// applicationVariants are e.g. debug, release
@ -127,6 +137,7 @@ android {
}
dependencies {
compile project(':react-native-vector-icons')
compile project(':react-native-svg')
compile fileTree(dir: "libs", include: ["*.jar"])
compile "com.android.support:appcompat-v7:23.0.1"
@ -136,6 +147,6 @@ dependencies {
// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) {
from configurations.compile
into 'libs'
from configurations.compile
into 'libs'
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -4,11 +4,13 @@ import android.app.Application;
import android.util.Log;
import com.facebook.react.ReactApplication;
import com.oblador.vectoricons.VectorIconsPackage;
import com.horcrux.svg.RNSvgPackage;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.shell.MainReactPackage;
import com.facebook.soloader.SoLoader;
import java.util.Arrays;
import java.util.List;
@ -25,6 +27,7 @@ public class MainApplication extends Application implements ReactApplication {
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new VectorIconsPackage(),
new RNSvgPackage()
);
}
@ -32,6 +35,12 @@ public class MainApplication extends Application implements ReactApplication {
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
return mReactNativeHost;
}
@Override
public void onCreate() {
super.onCreate();
SoLoader.init(this, /* native exopackage */ false);
}
}

View file

@ -1,4 +1,6 @@
rootProject.name = 'Mattermost'
include ':react-native-vector-icons'
project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android')
include ':app'
include ':react-native-svg'

View file

@ -5,10 +5,11 @@ import React from 'react';
import {Provider} from 'react-redux';
import configureStore from 'app/store';
import initialState from 'app/initial_state';
import Router from 'app/navigation/router';
import RootLayout from 'app/layouts/root_layout/root_layout_container';
const store = configureStore();
const store = configureStore(initialState);
export default class Mattermost extends React.Component {
render() {

395
fastlane/Fastfile Normal file
View file

@ -0,0 +1,395 @@
update_fastlane
fastlane_version '2.9.0'
skip_docs
platform :ios do
before_all do |lane|
if lane == :beta or lane == :release
ensure_git_branch(
branch: 'master'
)
sh "git checkout -b ios-#{lane}"
end
end
after_all do |lane|
if lane == :beta or lane == :release
reset_git_repo(
force: true,
skip_clean: true
)
sh 'git checkout master'
sh "git branch -D ios-#{lane}"
end
end
desc 'Build Release file'
desc 'This will also make sure the profile is up to date'
lane :dev do
match(type: 'adhoc')
build_ios({
release: false,
increment_build: false,
ensure_git_status_clean: false
})
end
desc 'Submit a new Beta Build to Apple TestFlight'
desc 'This will also make sure the profile is up to date'
lane :beta do
match(type: 'appstore')
build_ios({
release: true,
increment_build: true,
ensure_git_status_clean: true,
branch_name: 'ios-beta'
})
# pilot
if ENV['MATTERMOST_WEBHOOK_URL']
testflight_url = ENV['TESTFLIGHT_URL']
send_message_for_ios(
'#### New iOS beta published on TestFlight',
'',
"#ios-beta in #{testflight_url.nil? ? 'TestFlight' : "[TestFlight](#{testflight_url})"} on [#{Time.new.utc.to_s}]",
[],
true
)
end
end
desc 'Deploy a new version to the App Store'
lane :release do
match(type: 'appstore')
# snapshot
build_ios({
release: true,
increment_build: true,
ensure_git_status_clean: true,
branch_name: 'ios-release'
})
deliver(force: true)
# frameit
if ENV['MATTERMOST_WEBHOOK_URL']
appstore_url = ENV['APPSTORE_URL']
send_message_for_ios(
'#### New iOS release published on the App Store',
'',
"#ios-release in #{appstore_url.nil? ? 'App Store' : "[App Store](#{appstore_url})"} on [#{Time.new.utc.to_s}]",
[],
true
)
end
end
error do |lane, exception|
if ENV['MATTERMOST_WEBHOOK_URL']
send_message_for_ios('', 'Unsuccessful Build', exception.message, [:lane], false)
end
end
def build_ios(options)
if options[:ensure_git_status_clean]
ensure_git_status_clean
end
if options[:increment_build]
increment_build_number(
xcodeproj: './ios/Mattermost.xcodeproj',
build_number: latest_testflight_build_number + 1
)
commit_version_bump(xcodeproj: './ios/Mattermost.xcodeproj')
commit = last_git_commit
push_to_git_remote(
remote: 'origin',
local_branch: options[:branch_name],
force: false,
tags: false
)
unless ENV['GITHUB_TOKEN'].nil?
create_pull_request(
api_token: ENV['GITHUB_TOKEN'],
repo: 'mattermost/mattermost-mobile',
head: "mattermost:#{options[:branch_name]}",
base: 'master',
title: "IOS #{commit[:message]}"
)
end
end
update_project_team(
path: './ios/Mattermost.xcodeproj',
teamid: ENV['FASTLANE_TEAM_ID']
)
gym(
clean: true,
scheme: 'Mattermost',
configuration: (options[:release] ? 'Release' : 'Debug'),
project: './ios/Mattermost.xcodeproj'
)
end
def send_message_for_ios(pretext, title, msg, default_payloads, success)
version = get_version_number(xcodeproj: './ios/Mattermost.xcodeproj')
build_number = get_build_number(xcodeproj: './ios/Mattermost.xcodeproj')
mattermost(
pretext: pretext,
message: msg,
default_payloads: default_payloads,
username: 'Fastlane',
icon_url: 'https://s3-eu-west-1.amazonaws.com/fastlane.tools/fastlane.png',
payload: {},
attachment_properties: {
title: title,
thumb_url: 'https://lh3.googleusercontent.com/Nkbo3QohCOU8bGqSYtwB88o03XxUwRAxRHNdXPB9zFvYFzTwD7naYa-GYJaelBp-OIc=w300',
fields: [{
title: 'Version',
value: version,
short: true
},
{
title: 'Build Number',
value: build_number,
short: true
},
{
title: 'Built by',
value: 'Jenkins',
short: true
}]
},
success: success
)
end
end
platform :android do
before_all do |lane|
if lane == :beta or lane == :release
ensure_git_branch(
branch: 'master'
)
sh "git checkout -b android-#{lane}"
end
end
after_all do |lane|
if lane == :beta or lane == :release
reset_git_repo(
force: true,
skip_clean: true
)
sh 'git checkout master'
sh "git branch -D android-#{lane}"
end
end
desc 'Build Release file'
lane :dev do
build_android({release: true})
end
desc 'Submit a new Beta Build to Google Play'
lane :beta do
build_android({
release: true,
increment_build: true,
ensure_git_status_clean: true,
branch_name: 'android-beta'
})
supply(
track: 'beta',
apk: "#{lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH]}",
)
if ENV['MATTERMOST_WEBHOOK_URL']
beta_url = ENV['GOOGLE_PLAY_BETA_URL']
send_message_for_android(
'#### New Android beta published for Beta Testing',
'',
"#android-beta in #{beta_url.nil? ? 'Google Play Beta Program' : "[Google Play Beta Program](#{beta_url})"} on [#{Time.new.utc.to_s}]",
[],
true
)
end
end
desc 'Deploy a new version to Google Play'
lane :release do
build_android({
release: true,
increment_build: true,
ensure_git_status_clean: true,
branch_name: 'android-release'
})
supply(
track: "production",
apk: "#{lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH]}",
)
if ENV['MATTERMOST_WEBHOOK_URL']
google_play_url = ENV['GOOGLE_PLAY_URL']
send_message_for_android(
'#### New Android beta published for Production',
'',
"#android-beta in #{google_play_url.nil? ? 'Google Play' : "[Google Play](#{google_play_url})"} on [#{Time.new.utc.to_s}]",
[],
true
)
end
end
error do |lane, exception|
if ENV['MATTERMOST_WEBHOOK_URL']
send_message_for_android('', 'Unsuccessful Build', exception.message, [:lane], false)
end
end
def build_android(options)
if options[:ensure_git_status_clean]
ensure_git_status_clean
end
if options[:increment_build]
increment_version_code(app_folder_name: 'android/app')
commit_android_version_bump(
app_folder_name: 'android/app',
force: true
)
commit = last_git_commit
push_to_git_remote(
remote: 'origin',
local_branch: options[:branch_name],
force: false,
tags: false
)
unless ENV['GITHUB_TOKEN'].nil?
create_pull_request(
api_token: ENV['GITHUB_TOKEN'],
repo: 'mattermost/mattermost-mobile',
head: "mattermost:#{options[:branch_name]}",
base: 'master',
title: "IOS #{commit[:message]}"
)
end
end
gradle(
task: 'assemble',
build_type: (options[:release] ? 'Release' : 'Debug'),
project_dir: 'android/'
)
end
def get_version_code(app_folder_name)
version_code = '0'
Dir.glob("../#{app_folder_name}/build.gradle") do |path|
begin
UI.message(" -> Found a build.gradle file at path: (#{path})!")
file = File.new(path, 'r')
while (line = file.gets)
if line.include? 'versionCode'
versionComponents = line.strip.split(' ')
version_code = versionComponents[1].tr("\"",'')
break
end
end
file.close
rescue => err
UI.error("An exception occured while reading gradle file: #{err}")
err
end
end
if version_code == '0'
UI.user_error!("Impossible to find the version code in the current project folder #{app_folder_name} 😭")
else
# Store the version name in the shared hash
Actions.lane_context['VERSION_CODE']=version_code
UI.success("👍 Version name found: #{version_code}")
end
return version_code
end
def get_version_name(app_folder_name)
version_name = '0'
Dir.glob("../#{app_folder_name}/build.gradle") do |path|
begin
file = File.new(path, 'r')
while (line = file.gets)
if line.include? 'versionName'
versionComponents = line.strip.split(' ')
version_name = versionComponents[1].tr("\"",'')
break
end
end
file.close
rescue => err
UI.error("An exception occured while readinf gradle file: #{err}")
err
end
end
if version_name == '0'
UI.user_error!("Impossible to find the version name in the current project folder #{app_folder_name} 😭")
else
# Store the version name in the shared hash
Actions.lane_context['VERSION_NAME']=version_name
UI.success("👍 Version name found: #{version_name}")
end
return version_name
end
def send_message_for_android(pretext, title, msg, default_payloads, success)
build_number = get_version_code('android/app')
version_name = get_version_name('android/app')
mattermost(
pretext: pretext,
message: msg,
default_payloads: default_payloads,
username: 'Fastlane',
icon_url: 'https://s3-eu-west-1.amazonaws.com/fastlane.tools/fastlane.png',
payload: {},
attachment_properties: {
title: title,
thumb_url: 'http://www.concretesolutions.com.br/blog/wp-content/uploads/2015/04/Android1.png',
fields: [{
title: 'Version',
value: version_name,
short: true
},
{
title: 'Build Number',
value: build_number,
short: true
},
{
title: 'Built by',
value: 'Jenkins',
short: true
}]
},
success: success
)
end
end

6
fastlane/Gemfile Normal file
View file

@ -0,0 +1,6 @@
source "https://rubygems.org"
gem "fastlane"
plugins_path = File.join(File.dirname(__FILE__), '.', 'Pluginfile')
eval(File.read(plugins_path), binding) if File.exist?(plugins_path)

151
fastlane/Gemfile.lock Normal file
View file

@ -0,0 +1,151 @@
GEM
remote: https://rubygems.org/
specs:
CFPropertyList (2.3.4)
activesupport (4.2.7.1)
i18n (~> 0.7)
json (~> 1.7, >= 1.7.7)
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
addressable (2.5.0)
public_suffix (~> 2.0, >= 2.0.2)
babosa (1.0.2)
claide (1.0.1)
colored (1.2)
commander (4.4.3)
highline (~> 1.7.2)
domain_name (0.5.20161129)
unf (>= 0.0.5, < 1.0.0)
dotenv (2.1.2)
excon (0.54.0)
faraday (0.11.0)
multipart-post (>= 1.2, < 3)
faraday-cookie_jar (0.0.6)
faraday (>= 0.7.4)
http-cookie (~> 1.0.0)
faraday_middleware (0.11.0)
faraday (>= 0.7.4, < 1.0)
fastimage (2.0.1)
addressable (~> 2)
fastlane (2.9.0)
activesupport (< 5)
addressable (>= 2.3, < 3.0.0)
babosa (>= 1.0.2, < 2.0.0)
bundler (~> 1.12)
colored
commander (>= 4.4.0, < 5.0.0)
dotenv (>= 2.1.1, < 3.0.0)
excon (>= 0.45.0, < 1.0.0)
faraday (~> 0.9)
faraday-cookie_jar (~> 0.0.6)
faraday_middleware (~> 0.9)
fastimage (>= 1.6)
gh_inspector (>= 1.0.1, < 2.0.0)
google-api-client (~> 0.9.2)
highline (>= 1.7.2, < 2.0.0)
json (< 3.0.0)
mini_magick (~> 4.5.1)
multi_json
multi_xml (~> 0.5)
multipart-post (~> 2.0.0)
plist (>= 3.1.0, < 4.0.0)
rubyzip (>= 1.1.0, < 2.0.0)
security (= 0.1.3)
slack-notifier (>= 1.3, < 2.0.0)
terminal-notifier (>= 1.6.2, < 2.0.0)
terminal-table (>= 1.4.5, < 2.0.0)
word_wrap (~> 1.0.0)
xcodeproj (>= 0.20, < 2.0.0)
xcpretty (>= 0.2.4, < 1.0.0)
xcpretty-travis-formatter (>= 0.0.3)
fastlane-plugin-commit_android_version_bump (0.1.3)
fastlane-plugin-increment_version_code (0.3.1)
gh_inspector (1.0.3)
google-api-client (0.9.20)
addressable (~> 2.3)
googleauth (~> 0.5)
httpclient (~> 2.7)
hurley (~> 0.1)
memoist (~> 0.11)
mime-types (>= 1.6)
representable (~> 2.3.0)
retriable (~> 2.0)
googleauth (0.5.1)
faraday (~> 0.9)
jwt (~> 1.4)
logging (~> 2.0)
memoist (~> 0.12)
multi_json (~> 1.11)
os (~> 0.9)
signet (~> 0.7)
highline (1.7.8)
http-cookie (1.0.3)
domain_name (~> 0.5)
httpclient (2.8.3)
hurley (0.2)
i18n (0.7.0)
json (1.8.6)
jwt (1.5.6)
little-plugger (1.1.4)
logging (2.1.0)
little-plugger (~> 1.1)
multi_json (~> 1.10)
memoist (0.15.0)
mime-types (3.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2016.0521)
mini_magick (4.5.1)
minitest (5.10.1)
multi_json (1.12.1)
multi_xml (0.6.0)
multipart-post (2.0.0)
nanaimo (0.2.3)
os (0.9.6)
plist (3.2.0)
public_suffix (2.0.5)
representable (2.3.0)
uber (~> 0.0.7)
retriable (2.1.0)
rouge (1.11.1)
rubyzip (1.2.0)
security (0.1.3)
signet (0.7.3)
addressable (~> 2.3)
faraday (~> 0.9)
jwt (~> 1.5)
multi_json (~> 1.10)
slack-notifier (1.5.1)
terminal-notifier (1.7.1)
terminal-table (1.7.3)
unicode-display_width (~> 1.1.1)
thread_safe (0.3.5)
tzinfo (1.2.2)
thread_safe (~> 0.1)
uber (0.0.15)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.2)
unicode-display_width (1.1.3)
word_wrap (1.0.0)
xcodeproj (1.4.2)
CFPropertyList (~> 2.3.3)
activesupport (>= 3)
claide (>= 1.0.1, < 2.0)
colored (~> 1.2)
nanaimo (~> 0.2.3)
xcpretty (0.2.4)
rouge (~> 1.8)
xcpretty-travis-formatter (0.0.4)
xcpretty (~> 0.2, >= 0.0.7)
PLATFORMS
ruby
DEPENDENCIES
fastlane
fastlane-plugin-commit_android_version_bump
fastlane-plugin-increment_version_code
BUNDLED WITH
1.13.7

6
fastlane/Pluginfile Normal file
View file

@ -0,0 +1,6 @@
# Autogenerated by fastlane
#
# Ensure this file is checked in to source control!
gem 'fastlane-plugin-increment_version_code'
gem 'fastlane-plugin-commit_android_version_bump'

57
fastlane/README.md Normal file
View file

@ -0,0 +1,57 @@
fastlane documentation
================
# Installation
```
sudo gem install fastlane
```
# Available Actions
## iOS
### ios dev
```
fastlane ios dev
```
Build Release file
This will also make sure the profile is up to date
### ios beta
```
fastlane ios beta
```
Submit a new Beta Build to Apple TestFlight
This will also make sure the profile is up to date
### ios release
```
fastlane ios release
```
Deploy a new version to the App Store
### ios build
```
fastlane ios build
```
----
## Android
### android dev
```
fastlane android dev
```
### android beta
```
fastlane android beta
```
### android release
```
fastlane android release
```
----
This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run.
More information about fastlane can be found on [https://fastlane.tools](https://fastlane.tools).
The documentation of fastlane can be found on [GitHub](https://github.com/fastlane/fastlane/tree/master/fastlane).

View file

@ -0,0 +1,251 @@
# rubocop:disable Style/CaseEquality
# rubocop:disable Style/MultilineTernaryOperator
# rubocop:disable Style/NestedTernaryOperator
module Fastlane
module Actions
class MattermostAction < Action
def self.is_supported?(platform)
true
end
# As there is a text limit in the notifications, we are
# usually interested in the last part of the message
# e.g. for tests
def self.trim_message(message)
# We want the last 7000 characters, instead of the first 7000, as the error is at the bottom
start_index = [message.length - 7000, 0].max
message = message[start_index..-1]
message
end
def self.run(options)
require 'slack-notifier'
options[:message] = self.trim_message(options[:message].to_s || '')
options[:message] = Slack::Notifier::LinkFormatter.format(options[:message])
notifier = Slack::Notifier.new(options[:mattermost_url])
notifier.username = options[:overwrite_webhook_username_and_icon] ? nil : options[:username]
icon_url = options[:overwrite_webhook_username_and_icon] ? nil : options[:icon_url]
if options[:channel].to_s.length > 0
notifier.channel = options[:channel]
notifier.channel = ('#' + notifier.channel) unless ['#', '@'].include?(notifier.channel[0]) # send message to channel by default
end
mattermost_attachment = generate_mattermost_attachments(options)
return [notifier, mattermost_attachment] if Helper.is_test? # tests will verify the mattermost attachments and other properties
result = notifier.ping '',
icon_url: icon_url,
attachments: [mattermost_attachment]
if result.code.to_i == 200
UI.success('Successfully sent Mattermost notification')
else
UI.verbose(result)
UI.user_error!("Error pushing Mattermost message, maybe the integration has no permission to post on this channel? Try removing the channel parameter in your Fastfile.")
end
end
def self.description
"Send a success/error message to your Mattermost channel"
end
def self.available_options
[
FastlaneCore::ConfigItem.new(key: :pretext,
env_name: "MATTERMOST_PRETEXT",
description: "An optional line of text that will be shown above the attachment. This supports the standard Mattermost markup language",
optional: true),
FastlaneCore::ConfigItem.new(key: :message,
env_name: "MATTERMOST_MESSAGE",
description: "The message that should be displayed on Mattermost. This supports the standard Mattermost markup language",
optional: true),
FastlaneCore::ConfigItem.new(key: :channel,
env_name: "MATTERMOST_CHANNEL",
description: "channel or @username",
optional: true),
FastlaneCore::ConfigItem.new(key: :overwrite_webhook_username_and_icon,
env_name: "MATTERMOST_USE_WEBHOOK_CONFIGURED_USERNAME_AND_ICON",
description: "Use webook's default username and icon settings? (true/false)",
default_value: false,
is_string: false,
optional: true),
FastlaneCore::ConfigItem.new(key: :mattermost_url,
env_name: "MATTERMOST_URL",
sensitive: true,
description: "Create an Incoming WebHook for your Mattermost channel",
verify_block: proc do |value|
UI.user_error!("Invalid URL, must start with https:// or http://") unless value.start_with? "https://" or value.start_with? "http://"
end),
FastlaneCore::ConfigItem.new(key: :username,
env_name: "MATTERMOST_USERNAME",
description: "Overrides the webook's username property if overwrite_webhook_username_and_icon is false",
default_value: "fastlane",
is_string: true,
optional: true),
FastlaneCore::ConfigItem.new(key: :icon_url,
env_name: "MATTERMOST_ICON_URL",
description: "Overrides the webook's image property if overwrite_webhook_username_and_icon is false",
default_value: "https://s3-eu-west-1.amazonaws.com/fastlane.tools/fastlane.png",
is_string: true,
optional: true),
FastlaneCore::ConfigItem.new(key: :payload,
env_name: "MATTERMOST_PAYLOAD",
description: "Add additional information to this post. payload must be a hash containg any key with any value",
default_value: {},
is_string: false),
FastlaneCore::ConfigItem.new(key: :default_payloads,
env_name: "MATTERMOST_DEFAULT_PAYLOADS",
description: "Remove some of the default payloads. More information about the available payloads on GitHub",
optional: true,
is_string: false),
FastlaneCore::ConfigItem.new(key: :attachment_properties,
env_name: "MATTERMOST_ATTACHMENT_PROPERTIES",
description: "Merge additional properties in the Mattermost attachment, see https://docs.mattermost.com/developer/message-attachments.html",
default_value: {},
is_string: false),
FastlaneCore::ConfigItem.new(key: :success,
env_name: "MATTERMOST_SUCCESS",
description: "Was this build successful? (true/false)",
optional: true,
default_value: true,
is_string: false)
]
end
def self.author
"Mattermost base on the Slack action by KrauseFx"
end
def self.example_code
[
'mattermost(message: "App successfully released!")',
'mattermost(
message: "App successfully released!",
channel: "channel", # Optional, by default will post to the default channel configured for the POST URL.
success: true, # Optional, defaults to true.
payload: { # Optional, lets you specify any number of your own Mattermost attachments.
"Build Date" => Time.new.to_s,
"Built by" => "Jenkins",
},
default_payloads: [:git_branch, :git_author], # Optional, lets you specify a whitelist of default payloads to include. Pass an empty array to suppress all the default payloads.
# Don\'t add this key, or pass nil, if you want all the default payloads. The available default payloads are: `lane`, `test_result`, `git_branch`, `git_author`, `last_git_commit_message`.
attachment_properties: { # Optional, lets you specify any other properties available for attachments in the Mattermost API (see https://docs.mattermost.com/developer/message-attachments.html).
# This hash is deep merged with the existing properties set using the other properties above. This allows your own fields properties to be appended to the existing fields that were created using the `payload` property for instance.
thumb_url: "http://example.com/path/to/thumb.png",
fields: [{
title: "My Field",
value: "My Value",
short: true
}]
}
)'
]
end
def self.category
:notifications
end
def self.details
"Create an Incoming WebHook and export this as `MATTERMOST_URL`. Can send a message to **channel** (by default), a direct message to **@username** or a message to a private group **group** with success (green) or failure (red) status."
end
#####################################################
# @!group Helper
#####################################################
def self.generate_mattermost_attachments(options)
color = (options[:success] ? 'good' : 'danger')
should_add_payload = ->(payload_name) { options[:default_payloads].nil? || options[:default_payloads].join(" ").include?(payload_name.to_s) }
mattermost_attachment = {
fallback: options[:message],
pretext: options[:pretext],
text: options[:message],
color: color,
fields: []
}
# custom user payloads
mattermost_attachment[:fields] += options[:payload].map do |k, v|
{
title: k.to_s,
value: Slack::Notifier::LinkFormatter.format(v.to_s),
short: false
}
end
# Add the lane to the Mattermost message
# This might be nil, if mattermost is called as "one-off" action
if should_add_payload[:lane] && Actions.lane_context[Actions::SharedValues::LANE_NAME]
mattermost_attachment[:fields] << {
title: 'Lane',
value: Actions.lane_context[Actions::SharedValues::LANE_NAME],
short: true
}
end
# test_result
if should_add_payload[:test_result]
mattermost_attachment[:fields] << {
title: 'Result',
value: (options[:success] ? 'Success' : 'Error'),
short: true
}
end
# git branch
if Actions.git_branch && should_add_payload[:git_branch]
mattermost_attachment[:fields] << {
title: 'Git Branch',
value: Actions.git_branch,
short: true
}
end
# git_author
if Actions.git_author_email && should_add_payload[:git_author]
if FastlaneCore::Env.truthy?('FASTLANE_MATTERMOST_HIDE_AUTHOR_ON_SUCCESS') && options[:success]
# We only show the git author if the build failed
else
mattermost_attachment[:fields] << {
title: 'Git Author',
value: Actions.git_author_email,
short: true
}
end
end
# last_git_commit
if Actions.last_git_commit_message && should_add_payload[:last_git_commit]
mattermost_attachment[:fields] << {
title: 'Git Commit',
value: Actions.last_git_commit_message,
short: false
}
end
# merge additional properties
deep_merge(mattermost_attachment, options[:attachment_properties])
end
# Adapted from https://stackoverflow.com/a/30225093/158525
def self.deep_merge(a, b)
merger = proc do |key, v1, v2|
Hash === v1 && Hash === v2 ?
v1.merge(v2, &merger) : Array === v1 && Array === v2 ?
v1 | v2 : [:undefined, nil, :nil].include?(v2) ? v1 : v2
end
a.merge(b, &merger)
end
end
end
end
# rubocop:enable Style/CaseEquality
# rubocop:enable Style/MultilineTernaryOperator
# rubocop:enable Style/NestedTernaryOperator

View file

@ -0,0 +1,13 @@
Mattermost is secure, workplace messaging from behind your firewall.
- Discuss topics in private groups, one-to-one or team-wide
- Find what you're looking for with full text search, filters and #hashtags
- Easily share images, video, audio and files
- Personalize your experience with custom colors, formatting and fonts
- Connect in-house systems with webhooks and Slack-compatible integrations
To use this app, you need a "Team URL" from a Mattermost server. To host your own server go to http://www.mattermost.org/download/
Find the Terms of Service for this app here: https://about.mattermost.com/terms
This is a reference implementation of an open source Mattermost Android app available at: https://github.com/mattermost/android

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

View file

@ -0,0 +1 @@
Secure, self-hosted workplace messaging

View file

@ -0,0 +1 @@
Mattermost RN

View file

@ -0,0 +1 @@

View file

@ -0,0 +1 @@

View file

@ -0,0 +1 @@

View file

@ -0,0 +1 @@

View file

@ -0,0 +1 @@
Mattermost RN

View file

@ -0,0 +1 @@

View file

@ -0,0 +1 @@

View file

@ -0,0 +1 @@

View file

@ -0,0 +1 @@

View file

@ -0,0 +1 @@

View file

@ -0,0 +1 @@

View file

@ -0,0 +1 @@

View file

@ -0,0 +1 @@

View file

@ -0,0 +1 @@

View file

@ -0,0 +1,7 @@
Put all screenshots you want to use inside the folder of its language (e.g. en-US).
The device type will automatically be recognized using the image resolution. Apple TV screenshots
should be stored in a subdirectory named appleTV with language folders inside of it. iMessage
screenshots, like Apple TV screenshots, should also be stored in a subdirectory named iMessage
with language folders inside of it.
The screenshots can be named whatever you want, but keep in mind they are sorted alphabetically.

View file

@ -5,6 +5,7 @@
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; };
00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; };
@ -17,20 +18,24 @@
139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; };
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
1EA2B0031DB7E9620013B2DB /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1EA2AFFB1DB7E9620013B2DB /* Entypo.ttf */; };
1EA2B0041DB7E9620013B2DB /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1EA2AFFC1DB7E9620013B2DB /* EvilIcons.ttf */; };
1EA2B0051DB7E9620013B2DB /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1EA2AFFD1DB7E9620013B2DB /* FontAwesome.ttf */; };
1EA2B0061DB7E9620013B2DB /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1EA2AFFE1DB7E9620013B2DB /* Foundation.ttf */; };
1EA2B0071DB7E9620013B2DB /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1EA2AFFF1DB7E9620013B2DB /* Ionicons.ttf */; };
1EA2B0081DB7E9620013B2DB /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1EA2B0001DB7E9620013B2DB /* MaterialIcons.ttf */; };
1EA2B0091DB7E9620013B2DB /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1EA2B0011DB7E9620013B2DB /* Octicons.ttf */; };
1EA2B00A1DB7E9620013B2DB /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1EA2B0021DB7E9620013B2DB /* Zocial.ttf */; };
7F55909D1DE33E62008E7FC5 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
1BCA51319AC6442991C6A208 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0A091BF1A3D04650AD306A0D /* Zocial.ttf */; };
2B4C9B708010475DA575B81D /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F1F071EE85494E269A50AE88 /* SimpleLineIcons.ttf */; };
382D94CF15EE4FC292C3F341 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 51F5A483EA9F4A9A87ACFB59 /* Foundation.ttf */; };
3D38ABA732A34A9BB3294F90 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 349FBA7338E74D9BBD709528 /* EvilIcons.ttf */; };
420A7328E12C4B72AEF420CE /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = EDC04CBCF81642219D199CBB /* Octicons.ttf */; };
5E1AF7B72B8D4A4E9E53FF9D /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 005346E5C0E542BFABAE1411 /* FontAwesome.ttf */; };
5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; };
7FBB5E9A1E1F5A4B000DE18A /* libRNSVG.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7FDF28E11E1F4B1F00DBBE56 /* libRNSVG.a */; };
7FBB5E9B1E1F5A4B000DE18A /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7FDF290C1E1F4B4E00DBBE56 /* libRNVectorIcons.a */; };
832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
6D451C9F2CCA47089433C8C5 /* libRNSVG.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 054B6299E0894F978806187D /* libRNSVG.a */; };
895C9A56B94A45C1BAF568FE /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AC6EB561E1F64C17A69D2FAD /* Entypo.ttf */; };
C035DB50ED2045F09923FFAE /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 04AA5E8EF3B54735A11E3B95 /* MaterialCommunityIcons.ttf */; };
C337E8708D2845C6A8DBB47E /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2DCFD31D3F4A4154822AB532 /* Ionicons.ttf */; };
F006936FC2884C24A1321FC0 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 356C9186FA374641A00EB2EA /* MaterialIcons.ttf */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@ -97,6 +102,111 @@
remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192;
remoteInfo = React;
};
3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 2D2A283A1D9B042B00D4039D;
remoteInfo = "RCTImage-tvOS";
};
3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 2D2A28471D9B043800D4039D;
remoteInfo = "RCTLinking-tvOS";
};
3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 2D2A28541D9B044C00D4039D;
remoteInfo = "RCTNetwork-tvOS";
};
3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 2D2A28611D9B046600D4039D;
remoteInfo = "RCTSettings-tvOS";
};
3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 2D2A287B1D9B048500D4039D;
remoteInfo = "RCTText-tvOS";
};
3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 2D2A28881D9B049200D4039D;
remoteInfo = "RCTWebSocket-tvOS";
};
3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 2D2A28131D9B038B00D4039D;
remoteInfo = "React-tvOS";
};
3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 3D3C059A1DE3340900C268FA;
remoteInfo = yoga;
};
3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 3D3C06751DE3340C00C268FA;
remoteInfo = "yoga-tvOS";
};
3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 3D3CD9251DE5FBEC00167DC4;
remoteInfo = cxxreact;
};
3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4;
remoteInfo = "cxxreact-tvOS";
};
3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 3D3CD90B1DE5FBD600167DC4;
remoteInfo = jschelpers;
};
3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 3D3CD9181DE5FBD800167DC4;
remoteInfo = "jschelpers-tvOS";
};
5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 134814201AA4EA6300B7C361;
remoteInfo = RCTAnimation;
};
5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 2D2A28201D9B03D100D4039D;
remoteInfo = "RCTAnimation-tvOS";
};
78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
@ -104,6 +214,20 @@
remoteGlobalIDString = 134814201AA4EA6300B7C361;
remoteInfo = RCTLinking;
};
7FDF28E01E1F4B1F00DBBE56 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 2CBE9C0FB56E4FDA96C30792 /* RNSVG.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 0CF68AC11AF0540F00FF9E5C;
remoteInfo = RNSVG;
};
7FDF290B1E1F4B4E00DBBE56 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 2B25899FDAC149EB96ED3305 /* RNVectorIcons.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 5DBEB1501B18CEA900B34395;
remoteInfo = RNVectorIcons;
};
832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
@ -114,7 +238,7 @@
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = "<group>"; };
005346E5C0E542BFABAE1411 /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = "<group>"; };
00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = "<group>"; };
00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = "<group>"; };
00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = "<group>"; };
@ -123,6 +247,8 @@
00E356EE1AD99517003FC87E /* MattermostTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MattermostTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
00E356F21AD99517003FC87E /* MattermostTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MattermostTests.m; sourceTree = "<group>"; };
04AA5E8EF3B54735A11E3B95 /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialCommunityIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = "<group>"; };
0A091BF1A3D04650AD306A0D /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = "<group>"; };
139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = "<group>"; };
139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = "<group>"; };
13B07F961A680F5B00A75B9A /* Mattermost.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Mattermost.app; sourceTree = BUILT_PRODUCTS_DIR; };
@ -133,18 +259,18 @@
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Mattermost/Info.plist; sourceTree = "<group>"; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Mattermost/main.m; sourceTree = "<group>"; };
146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = "<group>"; };
1EA2AFFB1DB7E9620013B2DB /* Entypo.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Entypo.ttf; sourceTree = "<group>"; };
1EA2AFFC1DB7E9620013B2DB /* EvilIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = EvilIcons.ttf; sourceTree = "<group>"; };
1EA2AFFD1DB7E9620013B2DB /* FontAwesome.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = FontAwesome.ttf; sourceTree = "<group>"; };
1EA2AFFE1DB7E9620013B2DB /* Foundation.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Foundation.ttf; sourceTree = "<group>"; };
1EA2AFFF1DB7E9620013B2DB /* Ionicons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Ionicons.ttf; sourceTree = "<group>"; };
1EA2B0001DB7E9620013B2DB /* MaterialIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = MaterialIcons.ttf; sourceTree = "<group>"; };
1EA2B0011DB7E9620013B2DB /* Octicons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Octicons.ttf; sourceTree = "<group>"; };
1EA2B0021DB7E9620013B2DB /* Zocial.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Zocial.ttf; sourceTree = "<group>"; };
2B25899FDAC149EB96ED3305 /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNVectorIcons.xcodeproj; path = "../node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = "<group>"; };
2CBE9C0FB56E4FDA96C30792 /* RNSVG.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNSVG.xcodeproj; path = "../node_modules/react-native-svg/ios/RNSVG.xcodeproj"; sourceTree = "<group>"; };
2DCFD31D3F4A4154822AB532 /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = "<group>"; };
349FBA7338E74D9BBD709528 /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = "<group>"; };
356C9186FA374641A00EB2EA /* MaterialIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = "<group>"; };
51F5A483EA9F4A9A87ACFB59 /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = "<group>"; };
5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = "<group>"; };
78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = "<group>"; };
832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = "<group>"; };
EFA9957A8DD4430C85C9D4D5 /* RNSVG.xcodeproj */ = {isa = PBXFileReference; name = "RNSVG.xcodeproj"; path = "../node_modules/react-native-svg/ios/RNSVG.xcodeproj"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; };
054B6299E0894F978806187D /* libRNSVG.a */ = {isa = PBXFileReference; name = "libRNSVG.a"; path = "libRNSVG.a"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; };
AC6EB561E1F64C17A69D2FAD /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = "<group>"; };
EDC04CBCF81642219D199CBB /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = "<group>"; };
F1F071EE85494E269A50AE88 /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -160,6 +286,9 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
7FBB5E9A1E1F5A4B000DE18A /* libRNSVG.a in Frameworks */,
7FBB5E9B1E1F5A4B000DE18A /* libRNVectorIcons.a in Frameworks */,
5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */,
146834051AC3E58100842450 /* libReact.a in Frameworks */,
00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */,
00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */,
@ -170,7 +299,6 @@
832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */,
00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */,
139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */,
6D451C9F2CCA47089433C8C5 /* libRNSVG.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -197,6 +325,7 @@
isa = PBXGroup;
children = (
00C302C01ABCB91800DB3ED1 /* libRCTImage.a */,
3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */,
);
name = Products;
sourceTree = "<group>";
@ -205,6 +334,7 @@
isa = PBXGroup;
children = (
00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */,
3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */,
);
name = Products;
sourceTree = "<group>";
@ -234,10 +364,28 @@
name = "Supporting Files";
sourceTree = "<group>";
};
0156F464626F49C2977D7982 /* Resources */ = {
isa = PBXGroup;
children = (
AC6EB561E1F64C17A69D2FAD /* Entypo.ttf */,
349FBA7338E74D9BBD709528 /* EvilIcons.ttf */,
005346E5C0E542BFABAE1411 /* FontAwesome.ttf */,
51F5A483EA9F4A9A87ACFB59 /* Foundation.ttf */,
2DCFD31D3F4A4154822AB532 /* Ionicons.ttf */,
04AA5E8EF3B54735A11E3B95 /* MaterialCommunityIcons.ttf */,
356C9186FA374641A00EB2EA /* MaterialIcons.ttf */,
EDC04CBCF81642219D199CBB /* Octicons.ttf */,
F1F071EE85494E269A50AE88 /* SimpleLineIcons.ttf */,
0A091BF1A3D04650AD306A0D /* Zocial.ttf */,
);
name = Resources;
sourceTree = "<group>";
};
139105B71AF99BAD00B5F7CC /* Products */ = {
isa = PBXGroup;
children = (
139105C11AF99BAD00B5F7CC /* libRCTSettings.a */,
3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */,
);
name = Products;
sourceTree = "<group>";
@ -246,6 +394,7 @@
isa = PBXGroup;
children = (
139FDEF41B06529B00C62182 /* libRCTWebSocket.a */,
3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */,
);
name = Products;
sourceTree = "<group>";
@ -253,7 +402,6 @@
13B07FAE1A68108700A75B9A /* Mattermost */ = {
isa = PBXGroup;
children = (
008F07F21AC5B25A0029DE68 /* main.jsbundle */,
13B07FAF1A68108700A75B9A /* AppDelegate.h */,
13B07FB01A68108700A75B9A /* AppDelegate.m */,
13B07FB51A68108700A75B9A /* Images.xcassets */,
@ -268,29 +416,47 @@
isa = PBXGroup;
children = (
146834041AC3E56700842450 /* libReact.a */,
3DAD3EA31DF850E9000B6D8A /* libReact.a */,
3DAD3EA51DF850E9000B6D8A /* libyoga.a */,
3DAD3EA71DF850E9000B6D8A /* libyoga.a */,
3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */,
3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */,
3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */,
3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */,
);
name = Products;
sourceTree = "<group>";
};
1EA2AFFA1DB7E9620013B2DB /* Fonts */ = {
5E91572E1DD0AC6500FF2AA8 /* Products */ = {
isa = PBXGroup;
children = (
1EA2AFFB1DB7E9620013B2DB /* Entypo.ttf */,
1EA2AFFC1DB7E9620013B2DB /* EvilIcons.ttf */,
1EA2AFFD1DB7E9620013B2DB /* FontAwesome.ttf */,
1EA2AFFE1DB7E9620013B2DB /* Foundation.ttf */,
1EA2AFFF1DB7E9620013B2DB /* Ionicons.ttf */,
1EA2B0001DB7E9620013B2DB /* MaterialIcons.ttf */,
1EA2B0011DB7E9620013B2DB /* Octicons.ttf */,
1EA2B0021DB7E9620013B2DB /* Zocial.ttf */,
5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */,
5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */,
);
path = Fonts;
name = Products;
sourceTree = "<group>";
};
78C398B11ACF4ADC00677621 /* Products */ = {
isa = PBXGroup;
children = (
78C398B91ACF4ADC00677621 /* libRCTLinking.a */,
3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */,
);
name = Products;
sourceTree = "<group>";
};
7FDF28C41E1F4B1F00DBBE56 /* Products */ = {
isa = PBXGroup;
children = (
7FDF28E11E1F4B1F00DBBE56 /* libRNSVG.a */,
);
name = Products;
sourceTree = "<group>";
};
7FDF28EE1E1F4B4E00DBBE56 /* Products */ = {
isa = PBXGroup;
children = (
7FDF290C1E1F4B4E00DBBE56 /* libRNVectorIcons.a */,
);
name = Products;
sourceTree = "<group>";
@ -298,6 +464,7 @@
832341AE1AAA6A7D00B99B32 /* Libraries */ = {
isa = PBXGroup;
children = (
5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */,
146833FF1AC3E56700842450 /* React.xcodeproj */,
00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */,
00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */,
@ -308,7 +475,8 @@
832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */,
00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */,
139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */,
EFA9957A8DD4430C85C9D4D5 /* RNSVG.xcodeproj */,
2CBE9C0FB56E4FDA96C30792 /* RNSVG.xcodeproj */,
2B25899FDAC149EB96ED3305 /* RNVectorIcons.xcodeproj */,
);
name = Libraries;
sourceTree = "<group>";
@ -317,6 +485,7 @@
isa = PBXGroup;
children = (
832341B51AAA6A8300B99B32 /* libRCTText.a */,
3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */,
);
name = Products;
sourceTree = "<group>";
@ -324,11 +493,11 @@
83CBB9F61A601CBA00E9B192 = {
isa = PBXGroup;
children = (
1EA2AFFA1DB7E9620013B2DB /* Fonts */,
13B07FAE1A68108700A75B9A /* Mattermost */,
832341AE1AAA6A7D00B99B32 /* Libraries */,
00E356EF1AD99517003FC87E /* MattermostTests */,
83CBBA001A601CBA00E9B192 /* Products */,
0156F464626F49C2977D7982 /* Resources */,
);
indentWidth = 2;
sourceTree = "<group>";
@ -388,13 +557,16 @@
83CBB9F71A601CBA00E9B192 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 810;
LastUpgradeCheck = 820;
ORGANIZATIONNAME = Facebook;
TargetAttributes = {
00E356ED1AD99517003FC87E = {
CreatedOnToolsVersion = 6.2;
TestTargetID = 13B07F861A680F5B00A75B9A;
};
13B07F861A680F5B00A75B9A = {
ProvisioningStyle = Automatic;
};
};
};
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Mattermost" */;
@ -413,6 +585,10 @@
ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */;
ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;
},
{
ProductGroup = 5E91572E1DD0AC6500FF2AA8 /* Products */;
ProjectRef = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
},
{
ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */;
ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;
@ -449,6 +625,14 @@
ProductGroup = 146834001AC3E56700842450 /* Products */;
ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */;
},
{
ProductGroup = 7FDF28C41E1F4B1F00DBBE56 /* Products */;
ProjectRef = 2CBE9C0FB56E4FDA96C30792 /* RNSVG.xcodeproj */;
},
{
ProductGroup = 7FDF28EE1E1F4B4E00DBBE56 /* Products */;
ProjectRef = 2B25899FDAC149EB96ED3305 /* RNVectorIcons.xcodeproj */;
},
);
projectRoot = "";
targets = (
@ -515,6 +699,111 @@
remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libRCTImage-tvOS.a";
remoteRef = 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libRCTLinking-tvOS.a";
remoteRef = 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libRCTNetwork-tvOS.a";
remoteRef = 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libRCTSettings-tvOS.a";
remoteRef = 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libRCTText-tvOS.a";
remoteRef = 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libRCTWebSocket-tvOS.a";
remoteRef = 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3EA31DF850E9000B6D8A /* libReact.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libReact.a;
remoteRef = 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3EA51DF850E9000B6D8A /* libyoga.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libyoga.a;
remoteRef = 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3EA71DF850E9000B6D8A /* libyoga.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libyoga.a;
remoteRef = 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libcxxreact.a;
remoteRef = 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libcxxreact.a;
remoteRef = 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libjschelpers.a;
remoteRef = 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libjschelpers.a;
remoteRef = 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libRCTAnimation.a;
remoteRef = 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libRCTAnimation-tvOS.a";
remoteRef = 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
@ -522,6 +811,20 @@
remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
7FDF28E11E1F4B1F00DBBE56 /* libRNSVG.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libRNSVG.a;
remoteRef = 7FDF28E01E1F4B1F00DBBE56 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
7FDF290C1E1F4B4E00DBBE56 /* libRNVectorIcons.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libRNVectorIcons.a;
remoteRef = 7FDF290B1E1F4B4E00DBBE56 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
832341B51AAA6A8300B99B32 /* libRCTText.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
@ -543,16 +846,18 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
1EA2B0081DB7E9620013B2DB /* MaterialIcons.ttf in Resources */,
7F55909D1DE33E62008E7FC5 /* Images.xcassets in Resources */,
1EA2B0091DB7E9620013B2DB /* Octicons.ttf in Resources */,
1EA2B00A1DB7E9620013B2DB /* Zocial.ttf in Resources */,
1EA2B0051DB7E9620013B2DB /* FontAwesome.ttf in Resources */,
1EA2B0041DB7E9620013B2DB /* EvilIcons.ttf in Resources */,
1EA2B0071DB7E9620013B2DB /* Ionicons.ttf in Resources */,
1EA2B0061DB7E9620013B2DB /* Foundation.ttf in Resources */,
1EA2B0031DB7E9620013B2DB /* Entypo.ttf in Resources */,
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */,
895C9A56B94A45C1BAF568FE /* Entypo.ttf in Resources */,
3D38ABA732A34A9BB3294F90 /* EvilIcons.ttf in Resources */,
5E1AF7B72B8D4A4E9E53FF9D /* FontAwesome.ttf in Resources */,
382D94CF15EE4FC292C3F341 /* Foundation.ttf in Resources */,
C337E8708D2845C6A8DBB47E /* Ionicons.ttf in Resources */,
C035DB50ED2045F09923FFAE /* MaterialCommunityIcons.ttf in Resources */,
F006936FC2884C24A1321FC0 /* MaterialIcons.ttf in Resources */,
420A7328E12C4B72AEF420CE /* Octicons.ttf in Resources */,
2B4C9B708010475DA575B81D /* SimpleLineIcons.ttf in Resources */,
1BCA51319AC6442991C6A208 /* Zocial.ttf in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -620,6 +925,7 @@
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
DEVELOPMENT_TEAM = "";
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
@ -627,13 +933,14 @@
INFOPLIST_FILE = MattermostTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Mattermost.app/Mattermost";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
);
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Mattermost.app/Mattermost";
};
name = Debug;
};
@ -642,16 +949,18 @@
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
COPY_PHASE_STRIP = NO;
DEVELOPMENT_TEAM = "";
INFOPLIST_FILE = MattermostTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Mattermost.app/Mattermost";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
);
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Mattermost.app/Mattermost";
};
name = Release;
};
@ -659,14 +968,10 @@
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = 1;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CURRENT_PROJECT_VERSION = 5;
DEAD_CODE_STRIPPING = NO;
HEADER_SEARCH_PATHS = (
"$(inherited)",
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
"$(SRCROOT)/../node_modules/react-native/React/**",
"$(SRCROOT)/../node_modules/react-native-svg/ios/**",
);
DEVELOPMENT_TEAM = "";
INFOPLIST_FILE = Mattermost/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = (
@ -674,8 +979,10 @@
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_BUNDLE_IDENTIFIER = com.mattermost.react.native;
PRODUCT_NAME = Mattermost;
PROVISIONING_PROFILE = "";
PROVISIONING_PROFILE_SPECIFIER = "";
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
@ -684,13 +991,10 @@
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = 1;
HEADER_SEARCH_PATHS = (
"$(inherited)",
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
"$(SRCROOT)/../node_modules/react-native/React/**",
"$(SRCROOT)/../node_modules/react-native-svg/ios/**",
);
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CURRENT_PROJECT_VERSION = 5;
DEAD_CODE_STRIPPING = NO;
DEVELOPMENT_TEAM = "";
INFOPLIST_FILE = Mattermost/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = (
@ -698,8 +1002,10 @@
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_BUNDLE_IDENTIFIER = com.mattermost.react.native;
PRODUCT_NAME = Mattermost;
PROVISIONING_PROFILE = "";
PROVISIONING_PROFILE_SPECIFIER = "";
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
@ -742,12 +1048,6 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
"$(inherited)",
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
"$(SRCROOT)/../node_modules/react-native/React/**",
"$(SRCROOT)/../node_modules/react-native-svg/ios/**",
);
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
@ -786,12 +1086,6 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
"$(inherited)",
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
"$(SRCROOT)/../node_modules/react-native/React/**",
"$(SRCROOT)/../node_modules/react-native-svg/ios/**",
);
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;

View file

@ -1,11 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0810"
LastUpgradeVersion = "0820"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
parallelizeBuildables = "NO"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "83CBBA2D1A601D0E00E9B192"
BuildableName = "libReact.a"
BlueprintName = "React"
ReferencedContainer = "container:../node_modules/react-native/React/React.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
@ -66,7 +80,7 @@
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
buildConfiguration = "Release"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"

View file

@ -9,8 +9,8 @@
#import "AppDelegate.h"
#import "RCTBundleURLProvider.h"
#import "RCTRootView.h"
#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>
@implementation AppDelegate

View file

@ -19,7 +19,7 @@
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<string>5</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSAppTransportSecurity</key>
@ -28,7 +28,7 @@
<dict>
<key>localhost</key>
<dict>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
@ -45,6 +45,16 @@
<string>MaterialIcons.ttf</string>
<string>Octicons.ttf</string>
<string>Zocial.ttf</string>
<string>Entypo.ttf</string>
<string>EvilIcons.ttf</string>
<string>FontAwesome.ttf</string>
<string>Foundation.ttf</string>
<string>Ionicons.ttf</string>
<string>MaterialCommunityIcons.ttf</string>
<string>MaterialIcons.ttf</string>
<string>Octicons.ttf</string>
<string>SimpleLineIcons.ttf</string>
<string>Zocial.ttf</string>
</array>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
@ -60,5 +70,7 @@
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
</dict>
</plist>

View file

@ -19,6 +19,6 @@
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<string>5</string>
</dict>
</plist>

View file

@ -10,8 +10,8 @@
#import <UIKit/UIKit.h>
#import <XCTest/XCTest.h>
#import "RCTLog.h"
#import "RCTRootView.h"
#import <React/RCTLog.h>
#import <React/RCTRootView.h>
#define TIMEOUT_SECONDS 600
#define TEXT_TO_LOOK_FOR @"Welcome to React Native!"

View file

@ -5,38 +5,38 @@
"dependencies": {
"intl": "1.2.5",
"isomorphic-fetch": "2.2.1",
"react": "15.3.2",
"react-addons-pure-render-mixin": "15.3.2",
"react-intl": "2.1.5",
"react-native": "0.34.1",
"react": "15.4.1",
"react-addons-pure-render-mixin": "15.4.1",
"react-intl": "2.2.2",
"react-native": "0.40.0",
"react-native-button": "1.7.1",
"react-native-drawer": "2.3.0",
"react-native-keyboard-spacer": "0.3.0",
"react-native-svg": "4.3.3",
"react-native-vector-icons": "2.1.0",
"react-redux": "4.4.5",
"react-native-keyboard-spacer": "0.3.1",
"react-native-svg": "4.5.0",
"react-native-vector-icons": "4.0.0",
"react-redux": "5.0.1",
"redux": "3.6.0",
"redux-batched-actions": "0.1.3",
"redux-batched-actions": "0.1.5",
"redux-thunk": "2.1.0",
"reselect": "2.5.4"
},
"devDependencies": {
"babel-eslint": "7.0.0",
"babel-eslint": "7.1.1",
"babel-plugin-module-resolver": "2.4.0",
"babel-preset-es2015": "6.18.0",
"babel-preset-react-native": "1.9.0",
"babel-register": "6.16.3",
"babel-preset-react-native": "1.9.1",
"babel-register": "6.18.0",
"deep-freeze": "0.0.1",
"eslint": "3.7.1",
"eslint-plugin-mocha": "4.7.0",
"eslint-plugin-react": "6.3.0",
"fetch-mock": "5.5.0",
"mocha": "3.1.0",
"react-native-mock": "0.2.7",
"react-test-renderer": "15.3.2",
"redux-logger": "2.7.0",
"remote-redux-devtools": "0.5.0",
"remote-redux-devtools-on-debugger": "0.6.2",
"eslint": "3.12.2",
"eslint-plugin-mocha": "4.8.0",
"eslint-plugin-react": "6.8.0",
"fetch-mock": "5.8.1",
"mocha": "3.2.0",
"react-native-mock": "0.2.9",
"react-test-renderer": "15.4.1",
"redux-logger": "2.7.4",
"remote-redux-devtools": "0.5.7",
"remote-redux-devtools-on-debugger": "0.7.0",
"ws": "1.1.1"
},
"scripts": {