├── .gitignore ├── LICENSE ├── README.md ├── domain ├── .babelrc ├── .gitignore ├── .npmignore ├── .yangpao.toml ├── README.md ├── index.js ├── package.json ├── src │ ├── notificatable-timer.js │ └── presets.js └── test │ ├── mocha.opts │ └── spec │ ├── notificatable-timer.js │ └── presets.js ├── react-native ├── .buckconfig ├── .flowconfig ├── .gitignore ├── .node-version ├── .watchmanconfig ├── .yangpao.toml ├── LICENSE ├── README.md ├── android │ ├── app │ │ ├── BUCK │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── assets │ │ │ └── fonts │ │ │ │ ├── Entypo.ttf │ │ │ │ ├── EvilIcons.ttf │ │ │ │ ├── FontAwesome.ttf │ │ │ │ ├── Foundation.ttf │ │ │ │ ├── Ionicons.ttf │ │ │ │ ├── MaterialIcons.ttf │ │ │ │ ├── Octicons.ttf │ │ │ │ └── Zocial.ttf │ │ │ ├── java │ │ │ └── com │ │ │ │ └── builderscon │ │ │ │ └── sessiontimer │ │ │ │ ├── MainActivity.java │ │ │ │ └── MainApplication.java │ │ │ └── res │ │ │ ├── drawable │ │ │ ├── hex_base.png │ │ │ ├── hex_logo.png │ │ │ └── logo.png │ │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── raw │ │ │ ├── tin2.mp3 │ │ │ └── ting_twice.mp3 │ │ │ ├── values-sw600dp │ │ │ └── bools.xml │ │ │ ├── values-xlarge │ │ │ └── bools.xml │ │ │ └── values │ │ │ ├── bools.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── keystores │ │ ├── BUCK │ │ └── debug.keystore.properties │ └── settings.gradle ├── index.android.js ├── index.ios.js ├── ios │ ├── SessionTimer.xcodeproj │ │ ├── project.pbxproj │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ ├── SessionTimer-Release.xcscheme │ │ │ └── SessionTimer.xcscheme │ ├── SessionTimer │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ ├── Base.lproj │ │ │ └── LaunchScreen.xib │ │ ├── Images.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── app@2x.png │ │ │ │ ├── app@3x.png │ │ │ │ ├── ipad-app.png │ │ │ │ ├── ipad-app@2x.png │ │ │ │ ├── ipad-pro-app.png │ │ │ │ ├── ipad-settings.png │ │ │ │ ├── ipad-settings@2x.png │ │ │ │ ├── ipad-spotlight.png │ │ │ │ ├── ipad-spotlight@2x.png │ │ │ │ ├── settings.png │ │ │ │ ├── settings@2x.png │ │ │ │ ├── settings@3x.png │ │ │ │ ├── spotlight@2x.png │ │ │ │ └── spotlight@3x.png │ │ │ ├── Contents.json │ │ │ ├── hex_logo.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── hex_logo.png │ │ │ │ ├── hex_logo@2x.png │ │ │ │ └── hex_logo@3x.png │ │ │ └── logo.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── logo.png │ │ │ │ ├── logo@2x.png │ │ │ │ └── logo@3x.png │ │ ├── Info.plist │ │ └── main.m │ └── SessionTimerTests │ │ ├── Info.plist │ │ └── SessionTimerTests.m ├── package.json ├── react-redux │ ├── actions │ │ ├── creators.js │ │ └── types.js │ ├── components │ │ ├── app.js │ │ ├── copyright.js │ │ ├── footer.js │ │ ├── header │ │ │ ├── index.js │ │ │ ├── logo.js │ │ │ └── presets.js │ │ ├── presets.js │ │ ├── spacer.android.js │ │ ├── spacer.ios.js │ │ ├── timer.android.js │ │ └── timer.ios.js │ ├── containers │ │ └── app.js │ ├── lib │ │ ├── device.js │ │ ├── sound.android.js │ │ ├── sound.ios.js │ │ └── util.js │ └── reducers │ │ ├── index.js │ │ ├── modal.js │ │ └── timer.js └── resources │ └── tin2.mp3 └── react ├── .babelrc ├── .gitignore ├── README.md ├── package.json ├── public ├── apple-touch-icon.png ├── index.html ├── logo-flat.png ├── se.wav └── tos.txt ├── server.js ├── src ├── js │ ├── app.jsx │ ├── config.jsx │ ├── header.jsx │ ├── index.jsx │ ├── se.jsx │ ├── timer.jsx │ ├── toolbar.jsx │ └── util.js └── stylesheets │ └── all.scss ├── test ├── app.spec.js ├── helper.js ├── timer.spec.js └── util.spec.js └── webpack.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Builderscon session timer 2 | ========================= 3 | 4 | public session timer for [Builderscon](http://builderscon.io/) 5 | 6 | available platform 7 | ------------------ 8 | 9 | - [web](http://web.timer.builderscon.io/) 10 | - [Android](https://play.google.com/store/apps/details?id=io.builderscon.sessiontimer) 11 | - iOS is in preparation to publish... 12 | 13 | future works 14 | ------------ 15 | 16 | - sync web and smartphone app with FireBase ? 17 | - [#2](https://github.com/builderscon/session-timer/issues/2) 18 | - and more... ? 19 | 20 | terms of use 21 | ------------ 22 | 23 | These tools are provided under MIT license. However, when/if you are going to modify them for use in your own conference/meetup, we ask you that you include the words "Powered by builderscon" linked to https://builderscon.io (possibly along with one of our logos) somewhere visible in the screen. This is not a strict requirement, but we would like to kindly ask that you mention us. 24 | -------------------------------------------------------------------------------- /domain/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | "es2015" 4 | ], 5 | "plugins": [ 6 | "add-module-exports" 7 | ], 8 | "env": { 9 | "development": { 10 | "presets": [ 11 | "power-assert" 12 | ] 13 | }, 14 | "production": { 15 | "plugins": [ 16 | "babel-plugin-unassert" 17 | ] 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /domain/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | -------------------------------------------------------------------------------- /domain/.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | test 3 | .babelrc 4 | .gitignore 5 | -------------------------------------------------------------------------------- /domain/.yangpao.toml: -------------------------------------------------------------------------------- 1 | Current = "0.0.4" 2 | 3 | [[Files]] 4 | Path = "package.json" 5 | Prefix = "\"version\": \"" 6 | Postfix = "\"," 7 | IsNumber = false 8 | -------------------------------------------------------------------------------- /domain/README.md: -------------------------------------------------------------------------------- 1 | domain logics for Builderscon session timer 2 | =========================================== 3 | 4 | This package contains domain logics that be used in public session timer for [Builderscon](http://builderscon.io/). 5 | 6 | Usage 7 | ----- 8 | 9 | ```sh 10 | npm install builderscon-session-timer-domain --save 11 | ``` 12 | 13 | ```js 14 | import { 15 | NotificatableTimer, 16 | PRESETS, 17 | } from 'builderscon-session-timer-domain' 18 | 19 | // Properties of second argument are all required. 20 | const timer = new NotificatableTimer(PRESETS[0], { 21 | sound: { 22 | play: () => { 23 | // codes to play sound 24 | } 25 | playTwice: () => { 26 | // codes to play sound twice 27 | } 28 | }, 29 | onTerminate: { 30 | // clean-ups 31 | } 32 | }) 33 | 34 | timer.start() 35 | ``` 36 | 37 | NotificatableTimer 38 | ------------------ 39 | 40 | Timer that notifies by calling arbitrary callback functions at arbitrary timings. 41 | 42 | ### constructor 43 | 44 | ```js 45 | new NotificatableTimer(, ) 46 | ``` 47 | 48 | #### <settings> 49 | 50 | An Object for timer settings. Time unit is millisecond. 51 | 52 | - total 53 | - number 54 | - required 55 | - total time to count down 56 | - terminateCallback 57 | - Function 58 | - optional 59 | - an callback function at terminating 60 | - <context is passed 61 | - notifications 62 | - Object 63 | - optional 64 | - keys must be timing to notify 65 | - values must be Function, <context is passed 66 | - interval 67 | - number 68 | - optional 69 | - default is 100 70 | - interval to update internal state 71 | 72 | #### <context> 73 | 74 | An object to capsule context informations. 75 | Properties below are required. 76 | 77 | - sound 78 | - must be Object that has methods "play", "playTwice" 79 | - onTerminate 80 | - must be Function 81 | 82 | ### methods 83 | 84 | - start 85 | - starts timer 86 | - stop 87 | - stops timer 88 | - reset 89 | - resets timer to initial state 90 | 91 | ### property 92 | 93 | - elapsed 94 | - read only 95 | - shows elapsed time from starting timer 96 | 97 | PRESETS 98 | ------- 99 | 100 | General presets for timer by Builderscon. 101 | And it's a sample to use this package. 102 | 103 | 104 | Builderscon session timer 105 | ------------------------- 106 | 107 | - [web](http://web.timer.builderscon.io/) 108 | - [Android](https://play.google.com/store/apps/details?id=io.builderscon.sessiontimer) 109 | - iOS is in preparation to publish... 110 | -------------------------------------------------------------------------------- /domain/index.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NotificatableTimer: require('./dist/notificatable-timer'), 3 | PRESETS: require('./dist/presets') 4 | } 5 | -------------------------------------------------------------------------------- /domain/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "builderscon-session-timer-domain", 3 | "version": "0.0.4", 4 | "description": "domain logics for Builderscon session timer", 5 | "main": "index.js", 6 | "scripts": { 7 | "build": "babel src -d dist", 8 | "build:watch": "babel src -d dist -w", 9 | "test": "mocha test/spec", 10 | "test:watch": "nodemon --watch ./src --watch ./test --exec npm test", 11 | "prepublish": "npm run build" 12 | }, 13 | "repository": { 14 | "type": "git", 15 | "url": "https://github.com/builderscon/session-timer/domain" 16 | }, 17 | "author": "januswel", 18 | "license": "MIT", 19 | "devDependencies": { 20 | "babel-cli": "^6.10.1", 21 | "babel-plugin-add-module-exports": "^0.2.1", 22 | "babel-plugin-unassert": "^2.1.0", 23 | "babel-preset-es2015": "^6.9.0", 24 | "babel-preset-power-assert": "^1.0.0", 25 | "babel-preset-stage-0": "^6.5.0", 26 | "mocha": "^2.5.3", 27 | "nodemon": "^1.9.2", 28 | "power-assert": "^1.4.1" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /domain/src/notificatable-timer.js: -------------------------------------------------------------------------------- 1 | const DEFAULT_INTERVAL = 100 2 | 3 | // unit is milliseconds 4 | export default class NotificatableTimer { 5 | constructor ({ 6 | total, 7 | terminateCallback, 8 | notifications, 9 | interval = DEFAULT_INTERVAL, 10 | }, context) { 11 | this.context = context 12 | this.total = total 13 | this.terminater = { 14 | callback: terminateCallback 15 | } 16 | this.notifications = notifications 17 | this.interval = interval 18 | 19 | this.reset() 20 | } 21 | 22 | reset () { 23 | this.consumed = 0 24 | this.elapsed = 0 25 | } 26 | 27 | start () { 28 | this.base = new Date() 29 | this.setupTerminater() 30 | this.setupNotifications() 31 | this.setupInterval() 32 | } 33 | 34 | setupTerminater () { 35 | this.terminater.timeoutId = setTimeout(() => { 36 | this.stop() 37 | if (this.terminater.callback != null) { 38 | this.terminater.callback(this.context) 39 | } 40 | }, this.total - this.consumed) 41 | } 42 | 43 | setupNotifications () { 44 | if (this.notifications == null) { 45 | this.notificationTimeoutIds = [] 46 | return 47 | } 48 | 49 | this.notificationTimeoutIds = Object.keys(this.notifications).map((at) => { 50 | const remaining = parseInt(at, 10) - this.consumed 51 | if (remaining < 0) { 52 | return null 53 | } 54 | return setTimeout(() => { 55 | this.notifications[at](this.context) 56 | }, remaining) 57 | }) 58 | } 59 | 60 | setupInterval () { 61 | this.intervalId = setInterval(() => { 62 | let elapsed = new Date() - this.base + this.consumed 63 | if (this.total < elapsed) { 64 | elapsed = this.total 65 | } 66 | this.elapsed = elapsed 67 | }, this.interval) 68 | } 69 | 70 | stop () { 71 | this.consumed += (new Date() - this.base) 72 | clearInterval(this.intervalId) 73 | clearTimeout(this.terminater.timeoutId) 74 | this.notificationTimeoutIds.forEach((timeoutId) => { 75 | if (timeoutId != null) { 76 | clearTimeout(timeoutId) 77 | } 78 | }) 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /domain/src/presets.js: -------------------------------------------------------------------------------- 1 | const SECONDS = 1000 2 | const MINUTES = 60 * SECONDS 3 | 4 | const PRESETS = [ 5 | { 6 | total: 60 * MINUTES, 7 | terminateCallback: context => { 8 | context.sound.playTwice() 9 | context.onTerminate() 10 | }, 11 | notifications: { 12 | [30 * MINUTES]: context => context.sound.play(), 13 | [45 * MINUTES]: context => context.sound.play(), 14 | [50 * MINUTES]: context => context.sound.playTwice(), 15 | }, 16 | }, 17 | { 18 | total: 30 * MINUTES, 19 | terminateCallback: context => { 20 | context.sound.playTwice() 21 | context.onTerminate() 22 | }, 23 | notifications: { 24 | [15 * MINUTES]: context => context.sound.play(), 25 | [25 * MINUTES]: context => context.sound.playTwice(), 26 | }, 27 | }, 28 | { 29 | total: 15 * MINUTES, 30 | terminateCallback: context => { 31 | context.sound.playTwice() 32 | context.onTerminate() 33 | }, 34 | notifications: { 35 | [10 * MINUTES]: context => context.sound.play(), 36 | }, 37 | }, 38 | { 39 | total: 5 * MINUTES, 40 | terminateCallback: context => { 41 | context.sound.playTwice() 42 | context.onTerminate() 43 | }, 44 | notifications: { 45 | [4 * MINUTES]: context => context.sound.play(), 46 | }, 47 | }, 48 | { 49 | total: 1 * MINUTES, 50 | terminateCallback: context => { 51 | context.sound.playTwice() 52 | context.onTerminate() 53 | }, 54 | notifications: { 55 | [50 * SECONDS]: context => context.sound.play(), 56 | }, 57 | }, 58 | ] 59 | 60 | Object.freeze(PRESETS) 61 | 62 | export default PRESETS 63 | -------------------------------------------------------------------------------- /domain/test/mocha.opts: -------------------------------------------------------------------------------- 1 | --compilers js:babel-core/register 2 | -------------------------------------------------------------------------------- /domain/test/spec/notificatable-timer.js: -------------------------------------------------------------------------------- 1 | import assert from 'assert' 2 | 3 | import NotificatableTimer from '../../src/notificatable-timer' 4 | 5 | const TIMER_SETTINGS = { 6 | WITHOUT_CONTEXT: { 7 | total: 100, 8 | interval: 10, 9 | }, 10 | WITH_CONTEXT: { 11 | total: 300, 12 | terminateCallback: context => { 13 | context.terminated = true 14 | }, 15 | notifications: { 16 | [100]: context => { context.first = true }, 17 | [200]: context => { context.second = true }, 18 | }, 19 | }, 20 | } 21 | 22 | describe('NotificatableTimer', function () { 23 | it('can build instances', function () { 24 | const timer = new NotificatableTimer(TIMER_SETTINGS.WITHOUT_CONTEXT) 25 | assert(timer instanceof NotificatableTimer) 26 | }) 27 | 28 | it('can start & stop', function (done) { 29 | const timer = new NotificatableTimer(TIMER_SETTINGS.WITHOUT_CONTEXT) 30 | timer.start() 31 | const timeoutId = setTimeout(() => { 32 | timer.stop() 33 | 34 | assert(50 <= timer.elapsed) 35 | 36 | clearTimeout(timeoutId) 37 | done() 38 | }, 60) 39 | }) 40 | 41 | it('can notify', function (done) { 42 | const context = { 43 | first: false, 44 | second: false, 45 | terminated: false, 46 | } 47 | const timer = new NotificatableTimer(TIMER_SETTINGS.WITH_CONTEXT, context) 48 | timer.start() 49 | const timeoutId = setTimeout(() => { 50 | timer.stop() 51 | 52 | assert(context.first === true) 53 | assert(context.second === true) 54 | assert(context.terminated === true) 55 | 56 | clearTimeout(timeoutId) 57 | done() 58 | }, 310) 59 | }) 60 | }) 61 | -------------------------------------------------------------------------------- /domain/test/spec/presets.js: -------------------------------------------------------------------------------- 1 | import assert from 'assert' 2 | import PRESETS from '../../src/presets' 3 | 4 | describe('PRESETS', function () { 5 | it('is array', function () { 6 | assert(PRESETS instanceof Array) 7 | assert(0 < PRESETS.length) 8 | }) 9 | 10 | it('does not allow change', function () { 11 | assert.throws(() => { 12 | PRESETS[0] = 0 13 | }) 14 | }) 15 | 16 | it('has objects that have properties "total", "terminateCallback", "notifications"', function () { 17 | PRESETS.forEach(PRESET => { 18 | assert(PRESET instanceof Object) 19 | assert('total' in PRESET) 20 | assert('terminateCallback' in PRESET) 21 | assert('notifications' in PRESET) 22 | }) 23 | }) 24 | }) 25 | -------------------------------------------------------------------------------- /react-native/.buckconfig: -------------------------------------------------------------------------------- 1 | 2 | [android] 3 | target = Google Inc.:Google APIs:23 4 | 5 | [maven_repositories] 6 | central = https://repo1.maven.org/maven2 7 | -------------------------------------------------------------------------------- /react-native/.flowconfig: -------------------------------------------------------------------------------- 1 | [ignore] 2 | 3 | # We fork some components by platform. 4 | .*/*.android.js 5 | 6 | # Ignore templates with `@flow` in header 7 | .*/local-cli/generator.* 8 | 9 | # Ignore malformed json 10 | .*/node_modules/y18n/test/.*\.json 11 | 12 | # Ignore the website subdir 13 | /website/.* 14 | 15 | # Ignore BUCK generated dirs 16 | /\.buckd/ 17 | 18 | # Ignore unexpected extra @providesModule 19 | .*/node_modules/commoner/test/source/widget/share.js 20 | 21 | # Ignore duplicate module providers 22 | # For RN Apps installed via npm, "Libraries" folder is inside node_modules/react-native but in the source repo it is in the root 23 | .*/Libraries/react-native/React.js 24 | .*/Libraries/react-native/ReactNative.js 25 | .*/node_modules/jest-runtime/build/__tests__/.* 26 | 27 | [include] 28 | 29 | [libs] 30 | node_modules/react-native/Libraries/react-native/react-native-interface.js 31 | node_modules/react-native/flow 32 | flow/ 33 | 34 | [options] 35 | module.system=haste 36 | 37 | esproposal.class_static_fields=enable 38 | esproposal.class_instance_fields=enable 39 | 40 | experimental.strict_type_args=true 41 | 42 | munge_underscores=true 43 | 44 | module.name_mapper='^image![a-zA-Z0-9$_-]+$' -> 'GlobalImageStub' 45 | module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub' 46 | 47 | suppress_type=$FlowIssue 48 | suppress_type=$FlowFixMe 49 | suppress_type=$FixMe 50 | 51 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(2[0-9]\\|1[0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) 52 | suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(2[0-9]\\|1[0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ 53 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy 54 | 55 | unsafe.enable_getters_and_setters=true 56 | 57 | [version] 58 | ^0.29.0 59 | -------------------------------------------------------------------------------- /react-native/.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | # 3 | .DS_Store 4 | 5 | # Xcode 6 | # 7 | build/ 8 | *.pbxuser 9 | !default.pbxuser 10 | *.mode1v3 11 | !default.mode1v3 12 | *.mode2v3 13 | !default.mode2v3 14 | *.perspectivev3 15 | !default.perspectivev3 16 | xcuserdata 17 | *.xccheckout 18 | *.moved-aside 19 | DerivedData 20 | *.hmap 21 | *.ipa 22 | *.xcuserstate 23 | project.xcworkspace 24 | 25 | # Android/IJ 26 | # 27 | *.iml 28 | .idea 29 | .gradle 30 | local.properties 31 | *.keystore 32 | 33 | # node.js 34 | # 35 | node_modules/ 36 | npm-debug.log 37 | 38 | # BUCK 39 | buck-out/ 40 | \.buckd/ 41 | android/app/libs 42 | android/keystores/debug.keystore 43 | -------------------------------------------------------------------------------- /react-native/.node-version: -------------------------------------------------------------------------------- 1 | 6.2.2 2 | -------------------------------------------------------------------------------- /react-native/.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /react-native/.yangpao.toml: -------------------------------------------------------------------------------- 1 | Current = "1.0.4" 2 | 3 | [[Files]] 4 | Path = "package.json" 5 | Prefix = "\"version\": \"" 6 | Postfix = "\"" 7 | IsNumber = false 8 | 9 | [[Files]] 10 | Path = "android/app/build.gradle" 11 | Prefix = "versionCode " 12 | Postfix = "" 13 | IsNumber = true 14 | 15 | [[Files]] 16 | Path = "android/app/build.gradle" 17 | Prefix = "versionName \"" 18 | Postfix = "\"" 19 | IsNumber = false 20 | 21 | [[Files]] 22 | Path = "android/app/src/main/AndroidManifest.xml" 23 | Prefix = "android:versionCode=\"" 24 | Postfix = "\"" 25 | IsNumber = true 26 | 27 | [[Files]] 28 | Path = "android/app/src/main/AndroidManifest.xml" 29 | Prefix = "android:versionName=\"" 30 | Postfix = "\"" 31 | IsNumber = false 32 | 33 | [[Files]] 34 | Path = "ios/SessionTimer/Info.plist" 35 | Prefix = "" 36 | Postfix = "" 37 | IsNumber = false 38 | 39 | [[Files]] 40 | Path = "ios/SessionTimer/Info.plist" 41 | Prefix = "" 42 | Postfix = "" 43 | IsNumber = true 44 | -------------------------------------------------------------------------------- /react-native/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 janus_wel 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /react-native/README.md: -------------------------------------------------------------------------------- 1 | session timer react native 2 | ========================== 3 | 4 | usage 5 | ----- 6 | 7 | ### Setup 8 | 9 | Run below commands on project root 10 | 11 | 0. `rm -rf react-native/node_modules/builderscon-session-timer-domain` 12 | - if you have the directory 13 | 1. `cd domain` 14 | 2. `npm install` 15 | 3. `cd ../react-native` 16 | 4. `npm install` 17 | 18 | If you want to change alert timings, edit `domain/src/presets.js` and re-run these commands. 19 | 20 | ### iOS 21 | 22 | 1. open "ios/App.xcodeproj" 23 | 2. click Run on Xcode 24 | 25 | ### Android 26 | 27 | 1. `react-native run-android` 28 | 29 | screen shots 30 | ------------ 31 | 32 | ## iOS 33 | 34 | ![ios](https://raw.githubusercontent.com/builderscon/session-timer/images/react-native/images/ios.gif) 35 | 36 | ## Android 37 | 38 | react-native-progress is not fully supported for Android. 39 | 40 | ![android](https://raw.githubusercontent.com/builderscon/session-timer/images/react-native/images/android.gif) 41 | 42 | sound 43 | ----- 44 | 45 | ©効果音ラボ 46 | http://soundeffect-lab.info/ 47 | -------------------------------------------------------------------------------- /react-native/android/app/BUCK: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | # To learn about Buck see [Docs](https://buckbuild.com/). 4 | # To run your application with Buck: 5 | # - install Buck 6 | # - `npm start` - to start the packager 7 | # - `cd android` 8 | # - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US` 9 | # - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck 10 | # - `buck install -r android/app` - compile, install and run application 11 | # 12 | 13 | lib_deps = [] 14 | for jarfile in glob(['libs/*.jar']): 15 | name = 'jars__' + re.sub(r'^.*/([^/]+)\.jar$', r'\1', jarfile) 16 | lib_deps.append(':' + name) 17 | prebuilt_jar( 18 | name = name, 19 | binary_jar = jarfile, 20 | ) 21 | 22 | for aarfile in glob(['libs/*.aar']): 23 | name = 'aars__' + re.sub(r'^.*/([^/]+)\.aar$', r'\1', aarfile) 24 | lib_deps.append(':' + name) 25 | android_prebuilt_aar( 26 | name = name, 27 | aar = aarfile, 28 | ) 29 | 30 | android_library( 31 | name = 'all-libs', 32 | exported_deps = lib_deps 33 | ) 34 | 35 | android_library( 36 | name = 'app-code', 37 | srcs = glob([ 38 | 'src/main/java/**/*.java', 39 | ]), 40 | deps = [ 41 | ':all-libs', 42 | ':build_config', 43 | ':res', 44 | ], 45 | ) 46 | 47 | android_build_config( 48 | name = 'build_config', 49 | package = 'io.builderscon.sessiontimer', 50 | ) 51 | 52 | android_resource( 53 | name = 'res', 54 | res = 'src/main/res', 55 | package = 'io.builderscon.sessiontimer', 56 | ) 57 | 58 | android_binary( 59 | name = 'app', 60 | package_type = 'debug', 61 | manifest = 'src/main/AndroidManifest.xml', 62 | keystore = '//android/keystores:debug', 63 | deps = [ 64 | ':app-code', 65 | ], 66 | ) 67 | -------------------------------------------------------------------------------- /react-native/android/app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: "com.android.application" 2 | 3 | import com.android.build.OutputFile 4 | 5 | /** 6 | * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets 7 | * and bundleReleaseJsAndAssets). 8 | * These basically call `react-native bundle` with the correct arguments during the Android build 9 | * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the 10 | * bundle directly from the development server. Below you can see all the possible configurations 11 | * and their defaults. If you decide to add a configuration block, make sure to add it before the 12 | * `apply from: "../../node_modules/react-native/react.gradle"` line. 13 | * 14 | * project.ext.react = [ 15 | * // the name of the generated asset file containing your JS bundle 16 | * bundleAssetName: "index.android.bundle", 17 | * 18 | * // the entry file for bundle generation 19 | * entryFile: "index.android.js", 20 | * 21 | * // whether to bundle JS and assets in debug mode 22 | * bundleInDebug: false, 23 | * 24 | * // whether to bundle JS and assets in release mode 25 | * bundleInRelease: true, 26 | * 27 | * // whether to bundle JS and assets in another build variant (if configured). 28 | * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants 29 | * // The configuration property can be in the following formats 30 | * // 'bundleIn${productFlavor}${buildType}' 31 | * // 'bundleIn${buildType}' 32 | * // bundleInFreeDebug: true, 33 | * // bundleInPaidRelease: true, 34 | * // bundleInBeta: true, 35 | * 36 | * // the root of your project, i.e. where "package.json" lives 37 | * root: "../../", 38 | * 39 | * // where to put the JS bundle asset in debug mode 40 | * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", 41 | * 42 | * // where to put the JS bundle asset in release mode 43 | * jsBundleDirRelease: "$buildDir/intermediates/assets/release", 44 | * 45 | * // where to put drawable resources / React Native assets, e.g. the ones you use via 46 | * // require('./image.png')), in debug mode 47 | * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", 48 | * 49 | * // where to put drawable resources / React Native assets, e.g. the ones you use via 50 | * // require('./image.png')), in release mode 51 | * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", 52 | * 53 | * // by default the gradle tasks are skipped if none of the JS files or assets change; this means 54 | * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to 55 | * // date; if you have any other folders that you want to ignore for performance reasons (gradle 56 | * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ 57 | * // for example, you might want to remove it from here. 58 | * inputExcludes: ["android/**", "ios/**"], 59 | * 60 | * // override which node gets called and with what additional arguments 61 | * nodeExecutableAndArgs: ["node"] 62 | * 63 | * // supply additional arguments to the packager 64 | * extraPackagerArgs: [] 65 | * ] 66 | */ 67 | 68 | apply from: "../../node_modules/react-native/react.gradle" 69 | 70 | /** 71 | * Set this to true to create two separate APKs instead of one: 72 | * - An APK that only works on ARM devices 73 | * - An APK that only works on x86 devices 74 | * The advantage is the size of the APK is reduced by about 4MB. 75 | * Upload all the APKs to the Play Store and people will download 76 | * the correct one based on the CPU architecture of their device. 77 | */ 78 | def enableSeparateBuildPerCPUArchitecture = false 79 | 80 | /** 81 | * Run Proguard to shrink the Java bytecode in release builds. 82 | */ 83 | def enableProguardInReleaseBuilds = false 84 | 85 | android { 86 | compileSdkVersion 23 87 | buildToolsVersion "23.0.1" 88 | 89 | defaultConfig { 90 | applicationId "io.builderscon.sessiontimer" 91 | minSdkVersion 16 92 | targetSdkVersion 22 93 | versionCode 10004 94 | versionName "1.0.4" 95 | ndk { 96 | abiFilters "armeabi-v7a", "x86" 97 | } 98 | } 99 | signingConfigs { 100 | release { 101 | storeFile file(BUILDERSCON_SESSION_TIMER_RELEASE_STORE_FILE) 102 | storePassword BUILDERSCON_SESSION_TIMER_RELEASE_STORE_PASSWORD 103 | keyAlias BUILDERSCON_SESSION_TIMER_RELEASE_KEY_ALIAS 104 | keyPassword BUILDERSCON_SESSION_TIMER_RELEASE_KEY_PASSWORD 105 | } 106 | } 107 | splits { 108 | abi { 109 | reset() 110 | enable enableSeparateBuildPerCPUArchitecture 111 | universalApk false // If true, also generate a universal APK 112 | include "armeabi-v7a", "x86" 113 | } 114 | } 115 | buildTypes { 116 | release { 117 | minifyEnabled enableProguardInReleaseBuilds 118 | proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" 119 | signingConfig signingConfigs.release 120 | } 121 | } 122 | // applicationVariants are e.g. debug, release 123 | applicationVariants.all { variant -> 124 | variant.outputs.each { output -> 125 | // For each separate APK per architecture, set a unique version code as described here: 126 | // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits 127 | def versionCodes = ["armeabi-v7a":1, "x86":2] 128 | def abi = output.getFilter(OutputFile.ABI) 129 | if (abi != null) { // null for the universal-debug, universal-release variants 130 | output.versionCodeOverride = 131 | versionCodes.get(abi) * 1048576 + defaultConfig.versionCode 132 | } 133 | } 134 | } 135 | } 136 | 137 | dependencies { 138 | compile project(':RNSound') 139 | compile project(':react-native-vector-icons') 140 | compile fileTree(dir: "libs", include: ["*.jar"]) 141 | compile "com.android.support:appcompat-v7:23.0.1" 142 | compile "com.facebook.react:react-native:+" // From node_modules 143 | } 144 | 145 | // Run this once to be able to run the application with BUCK 146 | // puts all compile dependencies into folder libs for BUCK to use 147 | task copyDownloadableDepsToLibs(type: Copy) { 148 | from configurations.compile 149 | into 'libs' 150 | } 151 | -------------------------------------------------------------------------------- /react-native/android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | 19 | # Disabling obfuscation is useful if you collect stack traces from production crashes 20 | # (unless you are using a system that supports de-obfuscate the stack traces). 21 | -dontobfuscate 22 | 23 | # React Native 24 | 25 | # Keep our interfaces so they can be used by other ProGuard rules. 26 | # See http://sourceforge.net/p/proguard/bugs/466/ 27 | -keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip 28 | -keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters 29 | -keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip 30 | 31 | # Do not strip any method/class that is annotated with @DoNotStrip 32 | -keep @com.facebook.proguard.annotations.DoNotStrip class * 33 | -keep @com.facebook.common.internal.DoNotStrip class * 34 | -keepclassmembers class * { 35 | @com.facebook.proguard.annotations.DoNotStrip *; 36 | @com.facebook.common.internal.DoNotStrip *; 37 | } 38 | 39 | -keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * { 40 | void set*(***); 41 | *** get*(); 42 | } 43 | 44 | -keep class * extends com.facebook.react.bridge.JavaScriptModule { *; } 45 | -keep class * extends com.facebook.react.bridge.NativeModule { *; } 46 | -keepclassmembers,includedescriptorclasses class * { native ; } 47 | -keepclassmembers class * { @com.facebook.react.uimanager.UIProp ; } 48 | -keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp ; } 49 | -keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup ; } 50 | 51 | -dontwarn com.facebook.react.** 52 | 53 | # okhttp 54 | 55 | -keepattributes Signature 56 | -keepattributes *Annotation* 57 | -keep class okhttp3.** { *; } 58 | -keep interface okhttp3.** { *; } 59 | -dontwarn okhttp3.** 60 | 61 | # okio 62 | 63 | -keep class sun.misc.Unsafe { *; } 64 | -dontwarn java.nio.file.* 65 | -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 66 | -dontwarn okio.** 67 | -------------------------------------------------------------------------------- /react-native/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 12 | 13 | 19 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /react-native/android/app/src/main/assets/fonts/Entypo.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/android/app/src/main/assets/fonts/Entypo.ttf -------------------------------------------------------------------------------- /react-native/android/app/src/main/assets/fonts/EvilIcons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/android/app/src/main/assets/fonts/EvilIcons.ttf -------------------------------------------------------------------------------- /react-native/android/app/src/main/assets/fonts/FontAwesome.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/android/app/src/main/assets/fonts/FontAwesome.ttf -------------------------------------------------------------------------------- /react-native/android/app/src/main/assets/fonts/Foundation.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/android/app/src/main/assets/fonts/Foundation.ttf -------------------------------------------------------------------------------- /react-native/android/app/src/main/assets/fonts/Ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/android/app/src/main/assets/fonts/Ionicons.ttf -------------------------------------------------------------------------------- /react-native/android/app/src/main/assets/fonts/MaterialIcons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/android/app/src/main/assets/fonts/MaterialIcons.ttf -------------------------------------------------------------------------------- /react-native/android/app/src/main/assets/fonts/Octicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/android/app/src/main/assets/fonts/Octicons.ttf -------------------------------------------------------------------------------- /react-native/android/app/src/main/assets/fonts/Zocial.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/android/app/src/main/assets/fonts/Zocial.ttf -------------------------------------------------------------------------------- /react-native/android/app/src/main/java/com/builderscon/sessiontimer/MainActivity.java: -------------------------------------------------------------------------------- 1 | package io.builderscon.sessiontimer; 2 | 3 | import android.os.Bundle; 4 | import android.content.pm.ActivityInfo; 5 | 6 | import com.facebook.react.ReactActivity; 7 | 8 | public class MainActivity extends ReactActivity { 9 | @Override 10 | protected void onCreate(Bundle savedInstanceState) { 11 | super.onCreate(savedInstanceState); 12 | 13 | if(getResources().getBoolean(R.bool.portrait_only)){ 14 | setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 15 | } 16 | } 17 | 18 | /** 19 | * Returns the name of the main component registered from JavaScript. 20 | * This is used to schedule rendering of the component. 21 | */ 22 | @Override 23 | protected String getMainComponentName() { 24 | return "SessionTimer"; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /react-native/android/app/src/main/java/com/builderscon/sessiontimer/MainApplication.java: -------------------------------------------------------------------------------- 1 | package io.builderscon.sessiontimer; 2 | 3 | import android.app.Application; 4 | import android.util.Log; 5 | 6 | import com.facebook.react.ReactApplication; 7 | import com.facebook.react.ReactInstanceManager; 8 | import com.facebook.react.ReactNativeHost; 9 | import com.facebook.react.ReactPackage; 10 | import com.facebook.react.shell.MainReactPackage; 11 | 12 | import com.zmxv.RNSound.RNSoundPackage; 13 | import com.oblador.vectoricons.VectorIconsPackage; 14 | 15 | import java.util.Arrays; 16 | import java.util.List; 17 | 18 | public class MainApplication extends Application implements ReactApplication { 19 | 20 | private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { 21 | @Override 22 | protected boolean getUseDeveloperSupport() { 23 | return BuildConfig.DEBUG; 24 | } 25 | 26 | @Override 27 | protected List getPackages() { 28 | return Arrays.asList( 29 | new MainReactPackage(), 30 | new RNSoundPackage(), 31 | new VectorIconsPackage() 32 | ); 33 | } 34 | }; 35 | 36 | @Override 37 | public ReactNativeHost getReactNativeHost() { 38 | return mReactNativeHost; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/drawable/hex_base.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/android/app/src/main/res/drawable/hex_base.png -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/drawable/hex_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/android/app/src/main/res/drawable/hex_logo.png -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/drawable/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/android/app/src/main/res/drawable/logo.png -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/raw/tin2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/android/app/src/main/res/raw/tin2.mp3 -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/raw/ting_twice.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/android/app/src/main/res/raw/ting_twice.mp3 -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/values-sw600dp/bools.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | false 4 | 5 | -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/values-xlarge/bools.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | false 4 | 5 | -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/values/bools.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | true 4 | 5 | -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Session Timer 3 | 4 | -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /react-native/android/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | repositories { 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:1.2.3' 9 | 10 | // NOTE: Do not place your application dependencies here; they belong 11 | // in the individual module build.gradle files 12 | } 13 | } 14 | 15 | allprojects { 16 | repositories { 17 | mavenLocal() 18 | jcenter() 19 | maven { 20 | // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm 21 | url "$rootDir/../node_modules/react-native/android" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /react-native/android/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m 13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | 20 | android.useDeprecatedNdk=true 21 | -------------------------------------------------------------------------------- /react-native/android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /react-native/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip 6 | -------------------------------------------------------------------------------- /react-native/android/gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 10 | DEFAULT_JVM_OPTS="" 11 | 12 | APP_NAME="Gradle" 13 | APP_BASE_NAME=`basename "$0"` 14 | 15 | # Use the maximum available, or set MAX_FD != -1 to use that value. 16 | MAX_FD="maximum" 17 | 18 | warn ( ) { 19 | echo "$*" 20 | } 21 | 22 | die ( ) { 23 | echo 24 | echo "$*" 25 | echo 26 | exit 1 27 | } 28 | 29 | # OS specific support (must be 'true' or 'false'). 30 | cygwin=false 31 | msys=false 32 | darwin=false 33 | case "`uname`" in 34 | CYGWIN* ) 35 | cygwin=true 36 | ;; 37 | Darwin* ) 38 | darwin=true 39 | ;; 40 | MINGW* ) 41 | msys=true 42 | ;; 43 | esac 44 | 45 | # For Cygwin, ensure paths are in UNIX format before anything is touched. 46 | if $cygwin ; then 47 | [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 48 | fi 49 | 50 | # Attempt to set APP_HOME 51 | # Resolve links: $0 may be a link 52 | PRG="$0" 53 | # Need this for relative symlinks. 54 | while [ -h "$PRG" ] ; do 55 | ls=`ls -ld "$PRG"` 56 | link=`expr "$ls" : '.*-> \(.*\)$'` 57 | if expr "$link" : '/.*' > /dev/null; then 58 | PRG="$link" 59 | else 60 | PRG=`dirname "$PRG"`"/$link" 61 | fi 62 | done 63 | SAVED="`pwd`" 64 | cd "`dirname \"$PRG\"`/" >&- 65 | APP_HOME="`pwd -P`" 66 | cd "$SAVED" >&- 67 | 68 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 69 | 70 | # Determine the Java command to use to start the JVM. 71 | if [ -n "$JAVA_HOME" ] ; then 72 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 73 | # IBM's JDK on AIX uses strange locations for the executables 74 | JAVACMD="$JAVA_HOME/jre/sh/java" 75 | else 76 | JAVACMD="$JAVA_HOME/bin/java" 77 | fi 78 | if [ ! -x "$JAVACMD" ] ; then 79 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 80 | 81 | Please set the JAVA_HOME variable in your environment to match the 82 | location of your Java installation." 83 | fi 84 | else 85 | JAVACMD="java" 86 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 87 | 88 | Please set the JAVA_HOME variable in your environment to match the 89 | location of your Java installation." 90 | fi 91 | 92 | # Increase the maximum file descriptors if we can. 93 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then 94 | MAX_FD_LIMIT=`ulimit -H -n` 95 | if [ $? -eq 0 ] ; then 96 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 97 | MAX_FD="$MAX_FD_LIMIT" 98 | fi 99 | ulimit -n $MAX_FD 100 | if [ $? -ne 0 ] ; then 101 | warn "Could not set maximum file descriptor limit: $MAX_FD" 102 | fi 103 | else 104 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 105 | fi 106 | fi 107 | 108 | # For Darwin, add options to specify how the application appears in the dock 109 | if $darwin; then 110 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 111 | fi 112 | 113 | # For Cygwin, switch paths to Windows format before running java 114 | if $cygwin ; then 115 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 116 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 117 | 118 | # We build the pattern for arguments to be converted via cygpath 119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 120 | SEP="" 121 | for dir in $ROOTDIRSRAW ; do 122 | ROOTDIRS="$ROOTDIRS$SEP$dir" 123 | SEP="|" 124 | done 125 | OURCYGPATTERN="(^($ROOTDIRS))" 126 | # Add a user-defined pattern to the cygpath arguments 127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 129 | fi 130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 131 | i=0 132 | for arg in "$@" ; do 133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 135 | 136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 138 | else 139 | eval `echo args$i`="\"$arg\"" 140 | fi 141 | i=$((i+1)) 142 | done 143 | case $i in 144 | (0) set -- ;; 145 | (1) set -- "$args0" ;; 146 | (2) set -- "$args0" "$args1" ;; 147 | (3) set -- "$args0" "$args1" "$args2" ;; 148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 154 | esac 155 | fi 156 | 157 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules 158 | function splitJvmOpts() { 159 | JVM_OPTS=("$@") 160 | } 161 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS 162 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" 163 | 164 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" 165 | -------------------------------------------------------------------------------- /react-native/android/gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 12 | set DEFAULT_JVM_OPTS= 13 | 14 | set DIRNAME=%~dp0 15 | if "%DIRNAME%" == "" set DIRNAME=. 16 | set APP_BASE_NAME=%~n0 17 | set APP_HOME=%DIRNAME% 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windowz variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | if "%@eval[2+2]" == "4" goto 4NT_args 53 | 54 | :win9xME_args 55 | @rem Slurp the command line arguments. 56 | set CMD_LINE_ARGS= 57 | set _SKIP=2 58 | 59 | :win9xME_args_slurp 60 | if "x%~1" == "x" goto execute 61 | 62 | set CMD_LINE_ARGS=%* 63 | goto execute 64 | 65 | :4NT_args 66 | @rem Get arguments from the 4NT Shell from JP Software 67 | set CMD_LINE_ARGS=%$ 68 | 69 | :execute 70 | @rem Setup the command line 71 | 72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if "%ERRORLEVEL%"=="0" goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 85 | exit /b 1 86 | 87 | :mainEnd 88 | if "%OS%"=="Windows_NT" endlocal 89 | 90 | :omega 91 | -------------------------------------------------------------------------------- /react-native/android/keystores/BUCK: -------------------------------------------------------------------------------- 1 | keystore( 2 | name = 'debug', 3 | store = 'debug.keystore', 4 | properties = 'debug.keystore.properties', 5 | visibility = [ 6 | 'PUBLIC', 7 | ], 8 | ) 9 | -------------------------------------------------------------------------------- /react-native/android/keystores/debug.keystore.properties: -------------------------------------------------------------------------------- 1 | key.store=debug.keystore 2 | key.alias=androiddebugkey 3 | key.store.password=android 4 | key.alias.password=android 5 | -------------------------------------------------------------------------------- /react-native/android/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'SessionTimer' 2 | 3 | include ':app' 4 | include ':RNSound' 5 | project(':RNSound').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-sound/android') 6 | include ':react-native-vector-icons' 7 | project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android') 8 | -------------------------------------------------------------------------------- /react-native/index.android.js: -------------------------------------------------------------------------------- 1 | import { AppRegistry } from 'react-native' 2 | import AppContainer from './react-redux/containers/app' 3 | 4 | AppRegistry.registerComponent('SessionTimer', () => AppContainer) 5 | -------------------------------------------------------------------------------- /react-native/index.ios.js: -------------------------------------------------------------------------------- 1 | import { AppRegistry } from 'react-native' 2 | import AppContainer from './react-redux/containers/app' 3 | 4 | AppRegistry.registerComponent('SessionTimer', () => AppContainer) 5 | -------------------------------------------------------------------------------- /react-native/ios/SessionTimer.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; }; 11 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; }; 12 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; }; 13 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; }; 14 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; }; 15 | 00E356F31AD99517003FC87E /* SessionTimerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* SessionTimerTests.m */; }; 16 | 00FBFE86B9B84E8EA756B38E /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2E60BF24720F4E5BBA0346E6 /* EvilIcons.ttf */; }; 17 | 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; }; 18 | 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; }; 19 | 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; }; 20 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 21 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; 22 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 23 | 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 24 | 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; 25 | 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; 26 | 16488D221D21F7F300E60E9B /* libRNSound.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 16488D211D21F7DA00E60E9B /* libRNSound.a */; }; 27 | 1677A54A1D220CD1001369C1 /* tin2.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 1677A5491D220CD1001369C1 /* tin2.mp3 */; }; 28 | 16F9B8F41D21F92800F00838 /* libART.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 16F9B8E71D21F91900F00838 /* libART.a */; }; 29 | 381CD7BBCC4D4E429A63F084 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 29F48BF379FF4B08AEA4D93B /* Zocial.ttf */; }; 30 | 568CBB84132C4320AC13F19B /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F3DDBB3DF31949B5B8A65BA4 /* Foundation.ttf */; }; 31 | 75A21BE3DD854A5D879523AF /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 57784E583642439B9246E364 /* libRNVectorIcons.a */; }; 32 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; 33 | 8416E024E8EA427FB77B30D9 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 19DF876BE73D4CB6998F43D3 /* MaterialIcons.ttf */; }; 34 | 9F6C3910DC6F4478B693B7D6 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CFB5C64EB6E747AF8B564E80 /* FontAwesome.ttf */; }; 35 | A3992FCA1BD444339B874950 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ECABF398CAFD43FB9CD40F7C /* Entypo.ttf */; }; 36 | C34EA44F533C4EABBA05A6F1 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 221B6CFE1A80493991AF8234 /* Ionicons.ttf */; }; 37 | F1B606E08EA94E62A3FF2C4D /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0CA5D58E659548568D285F03 /* Octicons.ttf */; }; 38 | /* End PBXBuildFile section */ 39 | 40 | /* Begin PBXContainerItemProxy section */ 41 | 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = { 42 | isa = PBXContainerItemProxy; 43 | containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; 44 | proxyType = 2; 45 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 46 | remoteInfo = RCTActionSheet; 47 | }; 48 | 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = { 49 | isa = PBXContainerItemProxy; 50 | containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; 51 | proxyType = 2; 52 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 53 | remoteInfo = RCTGeolocation; 54 | }; 55 | 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = { 56 | isa = PBXContainerItemProxy; 57 | containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 58 | proxyType = 2; 59 | remoteGlobalIDString = 58B5115D1A9E6B3D00147676; 60 | remoteInfo = RCTImage; 61 | }; 62 | 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = { 63 | isa = PBXContainerItemProxy; 64 | containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 65 | proxyType = 2; 66 | remoteGlobalIDString = 58B511DB1A9E6C8500147676; 67 | remoteInfo = RCTNetwork; 68 | }; 69 | 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = { 70 | isa = PBXContainerItemProxy; 71 | containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; 72 | proxyType = 2; 73 | remoteGlobalIDString = 832C81801AAF6DEF007FA2F7; 74 | remoteInfo = RCTVibration; 75 | }; 76 | 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { 77 | isa = PBXContainerItemProxy; 78 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; 79 | proxyType = 1; 80 | remoteGlobalIDString = 13B07F861A680F5B00A75B9A; 81 | remoteInfo = SessionTimer; 82 | }; 83 | 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = { 84 | isa = PBXContainerItemProxy; 85 | containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 86 | proxyType = 2; 87 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 88 | remoteInfo = RCTSettings; 89 | }; 90 | 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = { 91 | isa = PBXContainerItemProxy; 92 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 93 | proxyType = 2; 94 | remoteGlobalIDString = 3C86DF461ADF2C930047B81A; 95 | remoteInfo = RCTWebSocket; 96 | }; 97 | 146834031AC3E56700842450 /* PBXContainerItemProxy */ = { 98 | isa = PBXContainerItemProxy; 99 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 100 | proxyType = 2; 101 | remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; 102 | remoteInfo = React; 103 | }; 104 | 161E1E731EBC6BF9007605CD /* PBXContainerItemProxy */ = { 105 | isa = PBXContainerItemProxy; 106 | containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 107 | proxyType = 2; 108 | remoteGlobalIDString = 2D2A283A1D9B042B00D4039D; 109 | remoteInfo = "RCTImage-tvOS"; 110 | }; 111 | 161E1E771EBC6BF9007605CD /* PBXContainerItemProxy */ = { 112 | isa = PBXContainerItemProxy; 113 | containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 114 | proxyType = 2; 115 | remoteGlobalIDString = 2D2A28471D9B043800D4039D; 116 | remoteInfo = "RCTLinking-tvOS"; 117 | }; 118 | 161E1E7B1EBC6BF9007605CD /* PBXContainerItemProxy */ = { 119 | isa = PBXContainerItemProxy; 120 | containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 121 | proxyType = 2; 122 | remoteGlobalIDString = 2D2A28541D9B044C00D4039D; 123 | remoteInfo = "RCTNetwork-tvOS"; 124 | }; 125 | 161E1E7F1EBC6BF9007605CD /* PBXContainerItemProxy */ = { 126 | isa = PBXContainerItemProxy; 127 | containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 128 | proxyType = 2; 129 | remoteGlobalIDString = 2D2A28611D9B046600D4039D; 130 | remoteInfo = "RCTSettings-tvOS"; 131 | }; 132 | 161E1E831EBC6BF9007605CD /* PBXContainerItemProxy */ = { 133 | isa = PBXContainerItemProxy; 134 | containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 135 | proxyType = 2; 136 | remoteGlobalIDString = 2D2A287B1D9B048500D4039D; 137 | remoteInfo = "RCTText-tvOS"; 138 | }; 139 | 161E1E881EBC6BF9007605CD /* PBXContainerItemProxy */ = { 140 | isa = PBXContainerItemProxy; 141 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 142 | proxyType = 2; 143 | remoteGlobalIDString = 2D2A28881D9B049200D4039D; 144 | remoteInfo = "RCTWebSocket-tvOS"; 145 | }; 146 | 161E1E8C1EBC6BF9007605CD /* PBXContainerItemProxy */ = { 147 | isa = PBXContainerItemProxy; 148 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 149 | proxyType = 2; 150 | remoteGlobalIDString = 2D2A28131D9B038B00D4039D; 151 | remoteInfo = "React-tvOS"; 152 | }; 153 | 16488D201D21F7DA00E60E9B /* PBXContainerItemProxy */ = { 154 | isa = PBXContainerItemProxy; 155 | containerPortal = 16488D121D21F7DA00E60E9B /* RNSound.xcodeproj */; 156 | proxyType = 2; 157 | remoteGlobalIDString = 19825A1E1BD4A89800EE0337; 158 | remoteInfo = RNSound; 159 | }; 160 | 16488D3C1D21F80D00E60E9B /* PBXContainerItemProxy */ = { 161 | isa = PBXContainerItemProxy; 162 | containerPortal = 1D5AB77269004A36820374D6 /* RNVectorIcons.xcodeproj */; 163 | proxyType = 2; 164 | remoteGlobalIDString = 5DBEB1501B18CEA900B34395; 165 | remoteInfo = RNVectorIcons; 166 | }; 167 | 16F9B8E61D21F91900F00838 /* PBXContainerItemProxy */ = { 168 | isa = PBXContainerItemProxy; 169 | containerPortal = 16F9B8E21D21F91900F00838 /* ART.xcodeproj */; 170 | proxyType = 2; 171 | remoteGlobalIDString = 0CF68AC11AF0540F00FF9E5C; 172 | remoteInfo = ART; 173 | }; 174 | 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = { 175 | isa = PBXContainerItemProxy; 176 | containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 177 | proxyType = 2; 178 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 179 | remoteInfo = RCTLinking; 180 | }; 181 | 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = { 182 | isa = PBXContainerItemProxy; 183 | containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 184 | proxyType = 2; 185 | remoteGlobalIDString = 58B5119B1A9E6C1200147676; 186 | remoteInfo = RCTText; 187 | }; 188 | /* End PBXContainerItemProxy section */ 189 | 190 | /* Begin PBXFileReference section */ 191 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; 192 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; }; 193 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; }; 194 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; }; 195 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; }; 196 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = ""; }; 197 | 00E356EE1AD99517003FC87E /* SessionTimerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SessionTimerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 198 | 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 199 | 00E356F21AD99517003FC87E /* SessionTimerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SessionTimerTests.m; sourceTree = ""; }; 200 | 0CA5D58E659548568D285F03 /* 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 = ""; }; 201 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; }; 202 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; }; 203 | 13B07F961A680F5B00A75B9A /* SessionTimer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SessionTimer.app; sourceTree = BUILT_PRODUCTS_DIR; }; 204 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = SessionTimer/AppDelegate.h; sourceTree = ""; }; 205 | 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = SessionTimer/AppDelegate.m; sourceTree = ""; }; 206 | 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 207 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = SessionTimer/Images.xcassets; sourceTree = ""; }; 208 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = SessionTimer/Info.plist; sourceTree = ""; }; 209 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = SessionTimer/main.m; sourceTree = ""; }; 210 | 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; 211 | 16488D121D21F7DA00E60E9B /* RNSound.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNSound.xcodeproj; path = "../node_modules/react-native-sound/RNSound.xcodeproj"; sourceTree = ""; }; 212 | 1677A5491D220CD1001369C1 /* tin2.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = tin2.mp3; path = ../resources/tin2.mp3; sourceTree = ""; }; 213 | 16F9B8E21D21F91900F00838 /* ART.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ART.xcodeproj; path = "../node_modules/react-native/Libraries/ART/ART.xcodeproj"; sourceTree = ""; }; 214 | 19DF876BE73D4CB6998F43D3 /* 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 = ""; }; 215 | 1D5AB77269004A36820374D6 /* 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 = ""; }; 216 | 221B6CFE1A80493991AF8234 /* 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 = ""; }; 217 | 29F48BF379FF4B08AEA4D93B /* 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 = ""; }; 218 | 2E60BF24720F4E5BBA0346E6 /* 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 = ""; }; 219 | 57784E583642439B9246E364 /* libRNVectorIcons.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNVectorIcons.a; sourceTree = ""; }; 220 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; }; 221 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; 222 | CFB5C64EB6E747AF8B564E80 /* 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 = ""; }; 223 | ECABF398CAFD43FB9CD40F7C /* 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 = ""; }; 224 | F3DDBB3DF31949B5B8A65BA4 /* 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 = ""; }; 225 | /* End PBXFileReference section */ 226 | 227 | /* Begin PBXFrameworksBuildPhase section */ 228 | 00E356EB1AD99517003FC87E /* Frameworks */ = { 229 | isa = PBXFrameworksBuildPhase; 230 | buildActionMask = 2147483647; 231 | files = ( 232 | 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */, 233 | ); 234 | runOnlyForDeploymentPostprocessing = 0; 235 | }; 236 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { 237 | isa = PBXFrameworksBuildPhase; 238 | buildActionMask = 2147483647; 239 | files = ( 240 | 16F9B8F41D21F92800F00838 /* libART.a in Frameworks */, 241 | 16488D221D21F7F300E60E9B /* libRNSound.a in Frameworks */, 242 | 146834051AC3E58100842450 /* libReact.a in Frameworks */, 243 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */, 244 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */, 245 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */, 246 | 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */, 247 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */, 248 | 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */, 249 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */, 250 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */, 251 | 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */, 252 | 75A21BE3DD854A5D879523AF /* libRNVectorIcons.a in Frameworks */, 253 | ); 254 | runOnlyForDeploymentPostprocessing = 0; 255 | }; 256 | /* End PBXFrameworksBuildPhase section */ 257 | 258 | /* Begin PBXGroup section */ 259 | 00C302A81ABCB8CE00DB3ED1 /* Products */ = { 260 | isa = PBXGroup; 261 | children = ( 262 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */, 263 | ); 264 | name = Products; 265 | sourceTree = ""; 266 | }; 267 | 00C302B61ABCB90400DB3ED1 /* Products */ = { 268 | isa = PBXGroup; 269 | children = ( 270 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */, 271 | ); 272 | name = Products; 273 | sourceTree = ""; 274 | }; 275 | 00C302BC1ABCB91800DB3ED1 /* Products */ = { 276 | isa = PBXGroup; 277 | children = ( 278 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */, 279 | 161E1E741EBC6BF9007605CD /* libRCTImage-tvOS.a */, 280 | ); 281 | name = Products; 282 | sourceTree = ""; 283 | }; 284 | 00C302D41ABCB9D200DB3ED1 /* Products */ = { 285 | isa = PBXGroup; 286 | children = ( 287 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */, 288 | 161E1E7C1EBC6BF9007605CD /* libRCTNetwork-tvOS.a */, 289 | ); 290 | name = Products; 291 | sourceTree = ""; 292 | }; 293 | 00C302E01ABCB9EE00DB3ED1 /* Products */ = { 294 | isa = PBXGroup; 295 | children = ( 296 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */, 297 | ); 298 | name = Products; 299 | sourceTree = ""; 300 | }; 301 | 00E356EF1AD99517003FC87E /* SessionTimerTests */ = { 302 | isa = PBXGroup; 303 | children = ( 304 | 00E356F21AD99517003FC87E /* SessionTimerTests.m */, 305 | 00E356F01AD99517003FC87E /* Supporting Files */, 306 | ); 307 | path = SessionTimerTests; 308 | sourceTree = ""; 309 | }; 310 | 00E356F01AD99517003FC87E /* Supporting Files */ = { 311 | isa = PBXGroup; 312 | children = ( 313 | 00E356F11AD99517003FC87E /* Info.plist */, 314 | ); 315 | name = "Supporting Files"; 316 | sourceTree = ""; 317 | }; 318 | 139105B71AF99BAD00B5F7CC /* Products */ = { 319 | isa = PBXGroup; 320 | children = ( 321 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */, 322 | 161E1E801EBC6BF9007605CD /* libRCTSettings-tvOS.a */, 323 | ); 324 | name = Products; 325 | sourceTree = ""; 326 | }; 327 | 139FDEE71B06529A00C62182 /* Products */ = { 328 | isa = PBXGroup; 329 | children = ( 330 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */, 331 | 161E1E891EBC6BF9007605CD /* libRCTWebSocket-tvOS.a */, 332 | ); 333 | name = Products; 334 | sourceTree = ""; 335 | }; 336 | 13B07FAE1A68108700A75B9A /* SessionTimer */ = { 337 | isa = PBXGroup; 338 | children = ( 339 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */, 340 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 341 | 13B07FB01A68108700A75B9A /* AppDelegate.m */, 342 | 13B07FB51A68108700A75B9A /* Images.xcassets */, 343 | 13B07FB61A68108700A75B9A /* Info.plist */, 344 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, 345 | 13B07FB71A68108700A75B9A /* main.m */, 346 | ); 347 | name = SessionTimer; 348 | sourceTree = ""; 349 | }; 350 | 146834001AC3E56700842450 /* Products */ = { 351 | isa = PBXGroup; 352 | children = ( 353 | 146834041AC3E56700842450 /* libReact.a */, 354 | 161E1E8D1EBC6BF9007605CD /* libReact-tvOS.a */, 355 | ); 356 | name = Products; 357 | sourceTree = ""; 358 | }; 359 | 16488D131D21F7DA00E60E9B /* Products */ = { 360 | isa = PBXGroup; 361 | children = ( 362 | 16488D211D21F7DA00E60E9B /* libRNSound.a */, 363 | ); 364 | name = Products; 365 | sourceTree = ""; 366 | }; 367 | 16488D2E1D21F80D00E60E9B /* Products */ = { 368 | isa = PBXGroup; 369 | children = ( 370 | 16488D3D1D21F80D00E60E9B /* libRNVectorIcons.a */, 371 | ); 372 | name = Products; 373 | sourceTree = ""; 374 | }; 375 | 16F9B8E31D21F91900F00838 /* Products */ = { 376 | isa = PBXGroup; 377 | children = ( 378 | 16F9B8E71D21F91900F00838 /* libART.a */, 379 | ); 380 | name = Products; 381 | sourceTree = ""; 382 | }; 383 | 78C398B11ACF4ADC00677621 /* Products */ = { 384 | isa = PBXGroup; 385 | children = ( 386 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */, 387 | 161E1E781EBC6BF9007605CD /* libRCTLinking-tvOS.a */, 388 | ); 389 | name = Products; 390 | sourceTree = ""; 391 | }; 392 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = { 393 | isa = PBXGroup; 394 | children = ( 395 | 16F9B8E21D21F91900F00838 /* ART.xcodeproj */, 396 | 16488D121D21F7DA00E60E9B /* RNSound.xcodeproj */, 397 | 146833FF1AC3E56700842450 /* React.xcodeproj */, 398 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */, 399 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */, 400 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */, 401 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */, 402 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */, 403 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */, 404 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, 405 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, 406 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */, 407 | 1D5AB77269004A36820374D6 /* RNVectorIcons.xcodeproj */, 408 | ); 409 | name = Libraries; 410 | sourceTree = ""; 411 | }; 412 | 832341B11AAA6A8300B99B32 /* Products */ = { 413 | isa = PBXGroup; 414 | children = ( 415 | 832341B51AAA6A8300B99B32 /* libRCTText.a */, 416 | 161E1E841EBC6BF9007605CD /* libRCTText-tvOS.a */, 417 | ); 418 | name = Products; 419 | sourceTree = ""; 420 | }; 421 | 83CBB9F61A601CBA00E9B192 = { 422 | isa = PBXGroup; 423 | children = ( 424 | 13B07FAE1A68108700A75B9A /* SessionTimer */, 425 | 832341AE1AAA6A7D00B99B32 /* Libraries */, 426 | 00E356EF1AD99517003FC87E /* SessionTimerTests */, 427 | 83CBBA001A601CBA00E9B192 /* Products */, 428 | F182269F59624B719296B704 /* Resources */, 429 | ); 430 | indentWidth = 2; 431 | sourceTree = ""; 432 | tabWidth = 2; 433 | }; 434 | 83CBBA001A601CBA00E9B192 /* Products */ = { 435 | isa = PBXGroup; 436 | children = ( 437 | 13B07F961A680F5B00A75B9A /* SessionTimer.app */, 438 | 00E356EE1AD99517003FC87E /* SessionTimerTests.xctest */, 439 | ); 440 | name = Products; 441 | sourceTree = ""; 442 | }; 443 | F182269F59624B719296B704 /* Resources */ = { 444 | isa = PBXGroup; 445 | children = ( 446 | 1677A5491D220CD1001369C1 /* tin2.mp3 */, 447 | ECABF398CAFD43FB9CD40F7C /* Entypo.ttf */, 448 | 2E60BF24720F4E5BBA0346E6 /* EvilIcons.ttf */, 449 | CFB5C64EB6E747AF8B564E80 /* FontAwesome.ttf */, 450 | F3DDBB3DF31949B5B8A65BA4 /* Foundation.ttf */, 451 | 221B6CFE1A80493991AF8234 /* Ionicons.ttf */, 452 | 19DF876BE73D4CB6998F43D3 /* MaterialIcons.ttf */, 453 | 0CA5D58E659548568D285F03 /* Octicons.ttf */, 454 | 29F48BF379FF4B08AEA4D93B /* Zocial.ttf */, 455 | ); 456 | name = Resources; 457 | sourceTree = ""; 458 | }; 459 | /* End PBXGroup section */ 460 | 461 | /* Begin PBXNativeTarget section */ 462 | 00E356ED1AD99517003FC87E /* SessionTimerTests */ = { 463 | isa = PBXNativeTarget; 464 | buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "SessionTimerTests" */; 465 | buildPhases = ( 466 | 00E356EA1AD99517003FC87E /* Sources */, 467 | 00E356EB1AD99517003FC87E /* Frameworks */, 468 | 00E356EC1AD99517003FC87E /* Resources */, 469 | ); 470 | buildRules = ( 471 | ); 472 | dependencies = ( 473 | 00E356F51AD99517003FC87E /* PBXTargetDependency */, 474 | ); 475 | name = SessionTimerTests; 476 | productName = SessionTimerTests; 477 | productReference = 00E356EE1AD99517003FC87E /* SessionTimerTests.xctest */; 478 | productType = "com.apple.product-type.bundle.unit-test"; 479 | }; 480 | 13B07F861A680F5B00A75B9A /* SessionTimer */ = { 481 | isa = PBXNativeTarget; 482 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "SessionTimer" */; 483 | buildPhases = ( 484 | 13B07F871A680F5B00A75B9A /* Sources */, 485 | 13B07F8C1A680F5B00A75B9A /* Frameworks */, 486 | 13B07F8E1A680F5B00A75B9A /* Resources */, 487 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 488 | ); 489 | buildRules = ( 490 | ); 491 | dependencies = ( 492 | ); 493 | name = SessionTimer; 494 | productName = "Hello World"; 495 | productReference = 13B07F961A680F5B00A75B9A /* SessionTimer.app */; 496 | productType = "com.apple.product-type.application"; 497 | }; 498 | /* End PBXNativeTarget section */ 499 | 500 | /* Begin PBXProject section */ 501 | 83CBB9F71A601CBA00E9B192 /* Project object */ = { 502 | isa = PBXProject; 503 | attributes = { 504 | LastUpgradeCheck = 0730; 505 | ORGANIZATIONNAME = Facebook; 506 | TargetAttributes = { 507 | 00E356ED1AD99517003FC87E = { 508 | CreatedOnToolsVersion = 6.2; 509 | DevelopmentTeam = V4B9899S4B; 510 | TestTargetID = 13B07F861A680F5B00A75B9A; 511 | }; 512 | 13B07F861A680F5B00A75B9A = { 513 | DevelopmentTeam = V4B9899S4B; 514 | }; 515 | }; 516 | }; 517 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "SessionTimer" */; 518 | compatibilityVersion = "Xcode 3.2"; 519 | developmentRegion = English; 520 | hasScannedForEncodings = 0; 521 | knownRegions = ( 522 | en, 523 | Base, 524 | ); 525 | mainGroup = 83CBB9F61A601CBA00E9B192; 526 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; 527 | projectDirPath = ""; 528 | projectReferences = ( 529 | { 530 | ProductGroup = 16F9B8E31D21F91900F00838 /* Products */; 531 | ProjectRef = 16F9B8E21D21F91900F00838 /* ART.xcodeproj */; 532 | }, 533 | { 534 | ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */; 535 | ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; 536 | }, 537 | { 538 | ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */; 539 | ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; 540 | }, 541 | { 542 | ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */; 543 | ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 544 | }, 545 | { 546 | ProductGroup = 78C398B11ACF4ADC00677621 /* Products */; 547 | ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 548 | }, 549 | { 550 | ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */; 551 | ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 552 | }, 553 | { 554 | ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */; 555 | ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 556 | }, 557 | { 558 | ProductGroup = 832341B11AAA6A8300B99B32 /* Products */; 559 | ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 560 | }, 561 | { 562 | ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */; 563 | ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; 564 | }, 565 | { 566 | ProductGroup = 139FDEE71B06529A00C62182 /* Products */; 567 | ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 568 | }, 569 | { 570 | ProductGroup = 146834001AC3E56700842450 /* Products */; 571 | ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */; 572 | }, 573 | { 574 | ProductGroup = 16488D131D21F7DA00E60E9B /* Products */; 575 | ProjectRef = 16488D121D21F7DA00E60E9B /* RNSound.xcodeproj */; 576 | }, 577 | { 578 | ProductGroup = 16488D2E1D21F80D00E60E9B /* Products */; 579 | ProjectRef = 1D5AB77269004A36820374D6 /* RNVectorIcons.xcodeproj */; 580 | }, 581 | ); 582 | projectRoot = ""; 583 | targets = ( 584 | 13B07F861A680F5B00A75B9A /* SessionTimer */, 585 | 00E356ED1AD99517003FC87E /* SessionTimerTests */, 586 | ); 587 | }; 588 | /* End PBXProject section */ 589 | 590 | /* Begin PBXReferenceProxy section */ 591 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = { 592 | isa = PBXReferenceProxy; 593 | fileType = archive.ar; 594 | path = libRCTActionSheet.a; 595 | remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */; 596 | sourceTree = BUILT_PRODUCTS_DIR; 597 | }; 598 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = { 599 | isa = PBXReferenceProxy; 600 | fileType = archive.ar; 601 | path = libRCTGeolocation.a; 602 | remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */; 603 | sourceTree = BUILT_PRODUCTS_DIR; 604 | }; 605 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = { 606 | isa = PBXReferenceProxy; 607 | fileType = archive.ar; 608 | path = libRCTImage.a; 609 | remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */; 610 | sourceTree = BUILT_PRODUCTS_DIR; 611 | }; 612 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = { 613 | isa = PBXReferenceProxy; 614 | fileType = archive.ar; 615 | path = libRCTNetwork.a; 616 | remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */; 617 | sourceTree = BUILT_PRODUCTS_DIR; 618 | }; 619 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = { 620 | isa = PBXReferenceProxy; 621 | fileType = archive.ar; 622 | path = libRCTVibration.a; 623 | remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */; 624 | sourceTree = BUILT_PRODUCTS_DIR; 625 | }; 626 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = { 627 | isa = PBXReferenceProxy; 628 | fileType = archive.ar; 629 | path = libRCTSettings.a; 630 | remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */; 631 | sourceTree = BUILT_PRODUCTS_DIR; 632 | }; 633 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = { 634 | isa = PBXReferenceProxy; 635 | fileType = archive.ar; 636 | path = libRCTWebSocket.a; 637 | remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */; 638 | sourceTree = BUILT_PRODUCTS_DIR; 639 | }; 640 | 146834041AC3E56700842450 /* libReact.a */ = { 641 | isa = PBXReferenceProxy; 642 | fileType = archive.ar; 643 | path = libReact.a; 644 | remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; 645 | sourceTree = BUILT_PRODUCTS_DIR; 646 | }; 647 | 161E1E741EBC6BF9007605CD /* libRCTImage-tvOS.a */ = { 648 | isa = PBXReferenceProxy; 649 | fileType = archive.ar; 650 | path = "libRCTImage-tvOS.a"; 651 | remoteRef = 161E1E731EBC6BF9007605CD /* PBXContainerItemProxy */; 652 | sourceTree = BUILT_PRODUCTS_DIR; 653 | }; 654 | 161E1E781EBC6BF9007605CD /* libRCTLinking-tvOS.a */ = { 655 | isa = PBXReferenceProxy; 656 | fileType = archive.ar; 657 | path = "libRCTLinking-tvOS.a"; 658 | remoteRef = 161E1E771EBC6BF9007605CD /* PBXContainerItemProxy */; 659 | sourceTree = BUILT_PRODUCTS_DIR; 660 | }; 661 | 161E1E7C1EBC6BF9007605CD /* libRCTNetwork-tvOS.a */ = { 662 | isa = PBXReferenceProxy; 663 | fileType = archive.ar; 664 | path = "libRCTNetwork-tvOS.a"; 665 | remoteRef = 161E1E7B1EBC6BF9007605CD /* PBXContainerItemProxy */; 666 | sourceTree = BUILT_PRODUCTS_DIR; 667 | }; 668 | 161E1E801EBC6BF9007605CD /* libRCTSettings-tvOS.a */ = { 669 | isa = PBXReferenceProxy; 670 | fileType = archive.ar; 671 | path = "libRCTSettings-tvOS.a"; 672 | remoteRef = 161E1E7F1EBC6BF9007605CD /* PBXContainerItemProxy */; 673 | sourceTree = BUILT_PRODUCTS_DIR; 674 | }; 675 | 161E1E841EBC6BF9007605CD /* libRCTText-tvOS.a */ = { 676 | isa = PBXReferenceProxy; 677 | fileType = archive.ar; 678 | path = "libRCTText-tvOS.a"; 679 | remoteRef = 161E1E831EBC6BF9007605CD /* PBXContainerItemProxy */; 680 | sourceTree = BUILT_PRODUCTS_DIR; 681 | }; 682 | 161E1E891EBC6BF9007605CD /* libRCTWebSocket-tvOS.a */ = { 683 | isa = PBXReferenceProxy; 684 | fileType = archive.ar; 685 | path = "libRCTWebSocket-tvOS.a"; 686 | remoteRef = 161E1E881EBC6BF9007605CD /* PBXContainerItemProxy */; 687 | sourceTree = BUILT_PRODUCTS_DIR; 688 | }; 689 | 161E1E8D1EBC6BF9007605CD /* libReact-tvOS.a */ = { 690 | isa = PBXReferenceProxy; 691 | fileType = archive.ar; 692 | path = "libReact-tvOS.a"; 693 | remoteRef = 161E1E8C1EBC6BF9007605CD /* PBXContainerItemProxy */; 694 | sourceTree = BUILT_PRODUCTS_DIR; 695 | }; 696 | 16488D211D21F7DA00E60E9B /* libRNSound.a */ = { 697 | isa = PBXReferenceProxy; 698 | fileType = archive.ar; 699 | path = libRNSound.a; 700 | remoteRef = 16488D201D21F7DA00E60E9B /* PBXContainerItemProxy */; 701 | sourceTree = BUILT_PRODUCTS_DIR; 702 | }; 703 | 16488D3D1D21F80D00E60E9B /* libRNVectorIcons.a */ = { 704 | isa = PBXReferenceProxy; 705 | fileType = archive.ar; 706 | path = libRNVectorIcons.a; 707 | remoteRef = 16488D3C1D21F80D00E60E9B /* PBXContainerItemProxy */; 708 | sourceTree = BUILT_PRODUCTS_DIR; 709 | }; 710 | 16F9B8E71D21F91900F00838 /* libART.a */ = { 711 | isa = PBXReferenceProxy; 712 | fileType = archive.ar; 713 | path = libART.a; 714 | remoteRef = 16F9B8E61D21F91900F00838 /* PBXContainerItemProxy */; 715 | sourceTree = BUILT_PRODUCTS_DIR; 716 | }; 717 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = { 718 | isa = PBXReferenceProxy; 719 | fileType = archive.ar; 720 | path = libRCTLinking.a; 721 | remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */; 722 | sourceTree = BUILT_PRODUCTS_DIR; 723 | }; 724 | 832341B51AAA6A8300B99B32 /* libRCTText.a */ = { 725 | isa = PBXReferenceProxy; 726 | fileType = archive.ar; 727 | path = libRCTText.a; 728 | remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */; 729 | sourceTree = BUILT_PRODUCTS_DIR; 730 | }; 731 | /* End PBXReferenceProxy section */ 732 | 733 | /* Begin PBXResourcesBuildPhase section */ 734 | 00E356EC1AD99517003FC87E /* Resources */ = { 735 | isa = PBXResourcesBuildPhase; 736 | buildActionMask = 2147483647; 737 | files = ( 738 | ); 739 | runOnlyForDeploymentPostprocessing = 0; 740 | }; 741 | 13B07F8E1A680F5B00A75B9A /* Resources */ = { 742 | isa = PBXResourcesBuildPhase; 743 | buildActionMask = 2147483647; 744 | files = ( 745 | 1677A54A1D220CD1001369C1 /* tin2.mp3 in Resources */, 746 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 747 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, 748 | A3992FCA1BD444339B874950 /* Entypo.ttf in Resources */, 749 | 00FBFE86B9B84E8EA756B38E /* EvilIcons.ttf in Resources */, 750 | 9F6C3910DC6F4478B693B7D6 /* FontAwesome.ttf in Resources */, 751 | 568CBB84132C4320AC13F19B /* Foundation.ttf in Resources */, 752 | C34EA44F533C4EABBA05A6F1 /* Ionicons.ttf in Resources */, 753 | 8416E024E8EA427FB77B30D9 /* MaterialIcons.ttf in Resources */, 754 | F1B606E08EA94E62A3FF2C4D /* Octicons.ttf in Resources */, 755 | 381CD7BBCC4D4E429A63F084 /* Zocial.ttf in Resources */, 756 | ); 757 | runOnlyForDeploymentPostprocessing = 0; 758 | }; 759 | /* End PBXResourcesBuildPhase section */ 760 | 761 | /* Begin PBXShellScriptBuildPhase section */ 762 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { 763 | isa = PBXShellScriptBuildPhase; 764 | buildActionMask = 2147483647; 765 | files = ( 766 | ); 767 | inputPaths = ( 768 | ); 769 | name = "Bundle React Native code and images"; 770 | outputPaths = ( 771 | ); 772 | runOnlyForDeploymentPostprocessing = 0; 773 | shellPath = /bin/sh; 774 | shellScript = "export NODE_BINARY=node\n../node_modules/react-native/packager/react-native-xcode.sh"; 775 | }; 776 | /* End PBXShellScriptBuildPhase section */ 777 | 778 | /* Begin PBXSourcesBuildPhase section */ 779 | 00E356EA1AD99517003FC87E /* Sources */ = { 780 | isa = PBXSourcesBuildPhase; 781 | buildActionMask = 2147483647; 782 | files = ( 783 | 00E356F31AD99517003FC87E /* SessionTimerTests.m in Sources */, 784 | ); 785 | runOnlyForDeploymentPostprocessing = 0; 786 | }; 787 | 13B07F871A680F5B00A75B9A /* Sources */ = { 788 | isa = PBXSourcesBuildPhase; 789 | buildActionMask = 2147483647; 790 | files = ( 791 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, 792 | 13B07FC11A68108700A75B9A /* main.m in Sources */, 793 | ); 794 | runOnlyForDeploymentPostprocessing = 0; 795 | }; 796 | /* End PBXSourcesBuildPhase section */ 797 | 798 | /* Begin PBXTargetDependency section */ 799 | 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { 800 | isa = PBXTargetDependency; 801 | target = 13B07F861A680F5B00A75B9A /* SessionTimer */; 802 | targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; 803 | }; 804 | /* End PBXTargetDependency section */ 805 | 806 | /* Begin PBXVariantGroup section */ 807 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { 808 | isa = PBXVariantGroup; 809 | children = ( 810 | 13B07FB21A68108700A75B9A /* Base */, 811 | ); 812 | name = LaunchScreen.xib; 813 | path = SessionTimer; 814 | sourceTree = ""; 815 | }; 816 | /* End PBXVariantGroup section */ 817 | 818 | /* Begin XCBuildConfiguration section */ 819 | 00E356F61AD99517003FC87E /* Debug */ = { 820 | isa = XCBuildConfiguration; 821 | buildSettings = { 822 | BUNDLE_LOADER = "$(TEST_HOST)"; 823 | DEVELOPMENT_TEAM = V4B9899S4B; 824 | GCC_PREPROCESSOR_DEFINITIONS = ( 825 | "DEBUG=1", 826 | "$(inherited)", 827 | ); 828 | INFOPLIST_FILE = SessionTimerTests/Info.plist; 829 | IPHONEOS_DEPLOYMENT_TARGET = 8.2; 830 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 831 | LIBRARY_SEARCH_PATHS = ( 832 | "$(inherited)", 833 | "\"$(SRCROOT)/$(TARGET_NAME)\"", 834 | ); 835 | PRODUCT_BUNDLE_IDENTIFIER = "io.builderscon.$(PRODUCT_NAME:rfc1034identifier)"; 836 | PRODUCT_NAME = "$(TARGET_NAME)"; 837 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SessionTimer.app/SessionTimer"; 838 | }; 839 | name = Debug; 840 | }; 841 | 00E356F71AD99517003FC87E /* Release */ = { 842 | isa = XCBuildConfiguration; 843 | buildSettings = { 844 | BUNDLE_LOADER = "$(TEST_HOST)"; 845 | COPY_PHASE_STRIP = NO; 846 | DEVELOPMENT_TEAM = V4B9899S4B; 847 | INFOPLIST_FILE = SessionTimerTests/Info.plist; 848 | IPHONEOS_DEPLOYMENT_TARGET = 8.2; 849 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 850 | LIBRARY_SEARCH_PATHS = ( 851 | "$(inherited)", 852 | "\"$(SRCROOT)/$(TARGET_NAME)\"", 853 | ); 854 | PRODUCT_BUNDLE_IDENTIFIER = "io.builderscon.$(PRODUCT_NAME:rfc1034identifier)"; 855 | PRODUCT_NAME = "$(TARGET_NAME)"; 856 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SessionTimer.app/SessionTimer"; 857 | }; 858 | name = Release; 859 | }; 860 | 13B07F941A680F5B00A75B9A /* Debug */ = { 861 | isa = XCBuildConfiguration; 862 | buildSettings = { 863 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 864 | DEAD_CODE_STRIPPING = NO; 865 | DEVELOPMENT_TEAM = V4B9899S4B; 866 | HEADER_SEARCH_PATHS = ( 867 | "$(inherited)", 868 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 869 | "$(SRCROOT)/../node_modules/react-native/React/**", 870 | "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", 871 | ); 872 | INFOPLIST_FILE = SessionTimer/Info.plist; 873 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 874 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 875 | OTHER_LDFLAGS = ( 876 | "-ObjC", 877 | "-lc++", 878 | ); 879 | PRODUCT_BUNDLE_IDENTIFIER = io.builderscon.timer; 880 | PRODUCT_NAME = SessionTimer; 881 | TARGETED_DEVICE_FAMILY = "1,2"; 882 | }; 883 | name = Debug; 884 | }; 885 | 13B07F951A680F5B00A75B9A /* Release */ = { 886 | isa = XCBuildConfiguration; 887 | buildSettings = { 888 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 889 | DEVELOPMENT_TEAM = V4B9899S4B; 890 | HEADER_SEARCH_PATHS = ( 891 | "$(inherited)", 892 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 893 | "$(SRCROOT)/../node_modules/react-native/React/**", 894 | "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", 895 | ); 896 | INFOPLIST_FILE = SessionTimer/Info.plist; 897 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 898 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 899 | OTHER_LDFLAGS = ( 900 | "-ObjC", 901 | "-lc++", 902 | ); 903 | PRODUCT_BUNDLE_IDENTIFIER = io.builderscon.timer; 904 | PRODUCT_NAME = SessionTimer; 905 | TARGETED_DEVICE_FAMILY = "1,2"; 906 | }; 907 | name = Release; 908 | }; 909 | 83CBBA201A601CBA00E9B192 /* Debug */ = { 910 | isa = XCBuildConfiguration; 911 | buildSettings = { 912 | ALWAYS_SEARCH_USER_PATHS = NO; 913 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 914 | CLANG_CXX_LIBRARY = "libc++"; 915 | CLANG_ENABLE_MODULES = YES; 916 | CLANG_ENABLE_OBJC_ARC = YES; 917 | CLANG_WARN_BOOL_CONVERSION = YES; 918 | CLANG_WARN_CONSTANT_CONVERSION = YES; 919 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 920 | CLANG_WARN_EMPTY_BODY = YES; 921 | CLANG_WARN_ENUM_CONVERSION = YES; 922 | CLANG_WARN_INT_CONVERSION = YES; 923 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 924 | CLANG_WARN_UNREACHABLE_CODE = YES; 925 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 926 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 927 | COPY_PHASE_STRIP = NO; 928 | ENABLE_STRICT_OBJC_MSGSEND = YES; 929 | ENABLE_TESTABILITY = YES; 930 | GCC_C_LANGUAGE_STANDARD = gnu99; 931 | GCC_DYNAMIC_NO_PIC = NO; 932 | GCC_OPTIMIZATION_LEVEL = 0; 933 | GCC_PREPROCESSOR_DEFINITIONS = ( 934 | "DEBUG=1", 935 | "$(inherited)", 936 | ); 937 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 938 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 939 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 940 | GCC_WARN_UNDECLARED_SELECTOR = YES; 941 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 942 | GCC_WARN_UNUSED_FUNCTION = YES; 943 | GCC_WARN_UNUSED_VARIABLE = YES; 944 | HEADER_SEARCH_PATHS = ( 945 | "$(inherited)", 946 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 947 | "$(SRCROOT)/../node_modules/react-native/React/**", 948 | "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", 949 | ); 950 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 951 | MTL_ENABLE_DEBUG_INFO = YES; 952 | ONLY_ACTIVE_ARCH = YES; 953 | SDKROOT = iphoneos; 954 | }; 955 | name = Debug; 956 | }; 957 | 83CBBA211A601CBA00E9B192 /* Release */ = { 958 | isa = XCBuildConfiguration; 959 | buildSettings = { 960 | ALWAYS_SEARCH_USER_PATHS = NO; 961 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 962 | CLANG_CXX_LIBRARY = "libc++"; 963 | CLANG_ENABLE_MODULES = YES; 964 | CLANG_ENABLE_OBJC_ARC = YES; 965 | CLANG_WARN_BOOL_CONVERSION = YES; 966 | CLANG_WARN_CONSTANT_CONVERSION = YES; 967 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 968 | CLANG_WARN_EMPTY_BODY = YES; 969 | CLANG_WARN_ENUM_CONVERSION = YES; 970 | CLANG_WARN_INT_CONVERSION = YES; 971 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 972 | CLANG_WARN_UNREACHABLE_CODE = YES; 973 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 974 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 975 | COPY_PHASE_STRIP = YES; 976 | ENABLE_NS_ASSERTIONS = NO; 977 | ENABLE_STRICT_OBJC_MSGSEND = YES; 978 | GCC_C_LANGUAGE_STANDARD = gnu99; 979 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 980 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 981 | GCC_WARN_UNDECLARED_SELECTOR = YES; 982 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 983 | GCC_WARN_UNUSED_FUNCTION = YES; 984 | GCC_WARN_UNUSED_VARIABLE = YES; 985 | HEADER_SEARCH_PATHS = ( 986 | "$(inherited)", 987 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 988 | "$(SRCROOT)/../node_modules/react-native/React/**", 989 | "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", 990 | ); 991 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 992 | MTL_ENABLE_DEBUG_INFO = NO; 993 | SDKROOT = iphoneos; 994 | VALIDATE_PRODUCT = YES; 995 | }; 996 | name = Release; 997 | }; 998 | /* End XCBuildConfiguration section */ 999 | 1000 | /* Begin XCConfigurationList section */ 1001 | 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "SessionTimerTests" */ = { 1002 | isa = XCConfigurationList; 1003 | buildConfigurations = ( 1004 | 00E356F61AD99517003FC87E /* Debug */, 1005 | 00E356F71AD99517003FC87E /* Release */, 1006 | ); 1007 | defaultConfigurationIsVisible = 0; 1008 | defaultConfigurationName = Release; 1009 | }; 1010 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "SessionTimer" */ = { 1011 | isa = XCConfigurationList; 1012 | buildConfigurations = ( 1013 | 13B07F941A680F5B00A75B9A /* Debug */, 1014 | 13B07F951A680F5B00A75B9A /* Release */, 1015 | ); 1016 | defaultConfigurationIsVisible = 0; 1017 | defaultConfigurationName = Release; 1018 | }; 1019 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "SessionTimer" */ = { 1020 | isa = XCConfigurationList; 1021 | buildConfigurations = ( 1022 | 83CBBA201A601CBA00E9B192 /* Debug */, 1023 | 83CBBA211A601CBA00E9B192 /* Release */, 1024 | ); 1025 | defaultConfigurationIsVisible = 0; 1026 | defaultConfigurationName = Release; 1027 | }; 1028 | /* End XCConfigurationList section */ 1029 | }; 1030 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; 1031 | } 1032 | -------------------------------------------------------------------------------- /react-native/ios/SessionTimer.xcodeproj/xcshareddata/xcschemes/SessionTimer-Release.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 47 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 65 | 66 | 67 | 68 | 78 | 80 | 86 | 87 | 88 | 89 | 90 | 91 | 97 | 99 | 105 | 106 | 107 | 108 | 110 | 111 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /react-native/ios/SessionTimer.xcodeproj/xcshareddata/xcschemes/SessionTimer.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 47 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 65 | 66 | 67 | 68 | 78 | 80 | 86 | 87 | 88 | 89 | 90 | 91 | 97 | 99 | 105 | 106 | 107 | 108 | 110 | 111 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/AppDelegate.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | @interface AppDelegate : UIResponder 13 | 14 | @property (nonatomic, strong) UIWindow *window; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/AppDelegate.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import "AppDelegate.h" 11 | 12 | #import "RCTBundleURLProvider.h" 13 | #import "RCTRootView.h" 14 | 15 | @implementation AppDelegate 16 | 17 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 18 | { 19 | NSURL *jsCodeLocation; 20 | 21 | jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil]; 22 | 23 | RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation 24 | moduleName:@"SessionTimer" 25 | initialProperties:nil 26 | launchOptions:launchOptions]; 27 | rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; 28 | 29 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 30 | UIViewController *rootViewController = [UIViewController new]; 31 | rootViewController.view = rootView; 32 | self.window.rootViewController = rootViewController; 33 | [self.window makeKeyAndVisible]; 34 | return YES; 35 | } 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "29x29", 5 | "idiom" : "iphone", 6 | "filename" : "settings.png", 7 | "scale" : "1x" 8 | }, 9 | { 10 | "size" : "29x29", 11 | "idiom" : "iphone", 12 | "filename" : "settings@2x.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "settings@3x.png", 19 | "scale" : "3x" 20 | }, 21 | { 22 | "size" : "40x40", 23 | "idiom" : "iphone", 24 | "filename" : "spotlight@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "40x40", 29 | "idiom" : "iphone", 30 | "filename" : "spotlight@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "57x57", 36 | "scale" : "1x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "57x57", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "size" : "60x60", 45 | "idiom" : "iphone", 46 | "filename" : "app@2x.png", 47 | "scale" : "2x" 48 | }, 49 | { 50 | "size" : "60x60", 51 | "idiom" : "iphone", 52 | "filename" : "app@3x.png", 53 | "scale" : "3x" 54 | }, 55 | { 56 | "size" : "29x29", 57 | "idiom" : "ipad", 58 | "filename" : "ipad-settings.png", 59 | "scale" : "1x" 60 | }, 61 | { 62 | "size" : "29x29", 63 | "idiom" : "ipad", 64 | "filename" : "ipad-settings@2x.png", 65 | "scale" : "2x" 66 | }, 67 | { 68 | "size" : "40x40", 69 | "idiom" : "ipad", 70 | "filename" : "ipad-spotlight.png", 71 | "scale" : "1x" 72 | }, 73 | { 74 | "size" : "40x40", 75 | "idiom" : "ipad", 76 | "filename" : "ipad-spotlight@2x.png", 77 | "scale" : "2x" 78 | }, 79 | { 80 | "idiom" : "ipad", 81 | "size" : "50x50", 82 | "scale" : "1x" 83 | }, 84 | { 85 | "idiom" : "ipad", 86 | "size" : "50x50", 87 | "scale" : "2x" 88 | }, 89 | { 90 | "idiom" : "ipad", 91 | "size" : "72x72", 92 | "scale" : "1x" 93 | }, 94 | { 95 | "idiom" : "ipad", 96 | "size" : "72x72", 97 | "scale" : "2x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "ipad-app.png", 103 | "scale" : "1x" 104 | }, 105 | { 106 | "size" : "76x76", 107 | "idiom" : "ipad", 108 | "filename" : "ipad-app@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "83.5x83.5", 113 | "idiom" : "ipad", 114 | "filename" : "ipad-pro-app.png", 115 | "scale" : "2x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/app@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/app@2x.png -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/app@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/app@3x.png -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/ipad-app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/ipad-app.png -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/ipad-app@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/ipad-app@2x.png -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/ipad-pro-app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/ipad-pro-app.png -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/ipad-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/ipad-settings.png -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/ipad-settings@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/ipad-settings@2x.png -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/ipad-spotlight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/ipad-spotlight.png -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/ipad-spotlight@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/ipad-spotlight@2x.png -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/settings.png -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/settings@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/settings@2x.png -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/settings@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/settings@3x.png -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/spotlight@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/spotlight@2x.png -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/spotlight@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/ios/SessionTimer/Images.xcassets/AppIcon.appiconset/spotlight@3x.png -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/hex_logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "hex_logo.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "hex_logo@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "hex_logo@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/hex_logo.imageset/hex_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/ios/SessionTimer/Images.xcassets/hex_logo.imageset/hex_logo.png -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/hex_logo.imageset/hex_logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/ios/SessionTimer/Images.xcassets/hex_logo.imageset/hex_logo@2x.png -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/hex_logo.imageset/hex_logo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/ios/SessionTimer/Images.xcassets/hex_logo.imageset/hex_logo@3x.png -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "logo.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "logo@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "logo@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/logo.imageset/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/ios/SessionTimer/Images.xcassets/logo.imageset/logo.png -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/logo.imageset/logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/ios/SessionTimer/Images.xcassets/logo.imageset/logo@2x.png -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Images.xcassets/logo.imageset/logo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builderscon/session-timer/96d17cc8e988db9729b6cd569ea04641ee268e8d/react-native/ios/SessionTimer/Images.xcassets/logo.imageset/logo@3x.png -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | Session Timer 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0.4 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 10004 25 | LSRequiresIPhoneOS 26 | 27 | NSAppTransportSecurity 28 | 29 | NSExceptionDomains 30 | 31 | localhost 32 | 33 | NSTemporaryExceptionAllowsInsecureHTTPLoads 34 | 35 | 36 | 37 | 38 | NSLocationWhenInUseUsageDescription 39 | 40 | UIAppFonts 41 | 42 | Entypo.ttf 43 | EvilIcons.ttf 44 | FontAwesome.ttf 45 | Foundation.ttf 46 | Ionicons.ttf 47 | MaterialIcons.ttf 48 | Octicons.ttf 49 | Zocial.ttf 50 | 51 | UILaunchStoryboardName 52 | LaunchScreen 53 | UIRequiredDeviceCapabilities 54 | 55 | armv7 56 | 57 | UISupportedInterfaceOrientations 58 | 59 | UIInterfaceOrientationPortrait 60 | 61 | UISupportedInterfaceOrientations~ipad 62 | 63 | UIInterfaceOrientationPortrait 64 | UIInterfaceOrientationLandscapeRight 65 | UIInterfaceOrientationLandscapeLeft 66 | UIInterfaceOrientationPortraitUpsideDown 67 | 68 | UIViewControllerBasedStatusBarAppearance 69 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /react-native/ios/SessionTimer/main.m: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Copyright (c) 2015-present, Facebook, Inc. 4 | * All rights reserved. 5 | * 6 | * This source code is licensed under the BSD-style license found in the 7 | * LICENSE file in the root directory of this source tree. An additional grant 8 | * of patent rights can be found in the PATENTS file in the same directory. 9 | */ 10 | 11 | #import 12 | 13 | #import "AppDelegate.h" 14 | 15 | int main(int argc, char * argv[]) { 16 | @autoreleasepool { 17 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /react-native/ios/SessionTimerTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /react-native/ios/SessionTimerTests/SessionTimerTests.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | #import 12 | 13 | #import "RCTLog.h" 14 | #import "RCTRootView.h" 15 | 16 | #define TIMEOUT_SECONDS 600 17 | #define TEXT_TO_LOOK_FOR @"Welcome to React Native!" 18 | 19 | @interface SessionTimerTests : XCTestCase 20 | 21 | @end 22 | 23 | @implementation SessionTimerTests 24 | 25 | - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test 26 | { 27 | if (test(view)) { 28 | return YES; 29 | } 30 | for (UIView *subview in [view subviews]) { 31 | if ([self findSubviewInView:subview matching:test]) { 32 | return YES; 33 | } 34 | } 35 | return NO; 36 | } 37 | 38 | - (void)testRendersWelcomeScreen 39 | { 40 | UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController]; 41 | NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; 42 | BOOL foundElement = NO; 43 | 44 | __block NSString *redboxError = nil; 45 | RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { 46 | if (level >= RCTLogLevelError) { 47 | redboxError = message; 48 | } 49 | }); 50 | 51 | while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { 52 | [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 53 | [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 54 | 55 | foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) { 56 | if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { 57 | return YES; 58 | } 59 | return NO; 60 | }]; 61 | } 62 | 63 | RCTSetLogFunction(RCTDefaultLogFunction); 64 | 65 | XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); 66 | XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); 67 | } 68 | 69 | 70 | @end 71 | -------------------------------------------------------------------------------- /react-native/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SessionTimer", 3 | "version": "1.0.4", 4 | "private": true, 5 | "scripts": { 6 | "start": "node node_modules/react-native/local-cli/cli.js start" 7 | }, 8 | "dependencies": { 9 | "builderscon-session-timer-domain": "../domain", 10 | "react": "~15.3.1", 11 | "react-native": "^0.37.0", 12 | "react-native-modalbox": "^1.3.3", 13 | "react-native-progress": "^3.0.0", 14 | "react-native-sound": "^0.8.3", 15 | "react-native-vector-icons": "^2.0.3", 16 | "react-redux": "^4.4.5", 17 | "redux": "^3.5.2" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /react-native/react-redux/actions/creators.js: -------------------------------------------------------------------------------- 1 | import types from './types' 2 | 3 | export function sync (timer) { 4 | return { 5 | type: types.SYNC, 6 | progress: timer.elapsed / timer.total, 7 | } 8 | } 9 | 10 | export function start () { 11 | return { 12 | type: types.START 13 | } 14 | } 15 | 16 | export function stop () { 17 | return { 18 | type: types.STOP 19 | } 20 | } 21 | 22 | export function reset () { 23 | return { 24 | type: types.RESET 25 | } 26 | } 27 | 28 | export function terminate() { 29 | return { 30 | type: types.TERMINATE 31 | } 32 | } 33 | 34 | export function openPresetModal() { 35 | return { 36 | type: types.OPEN_PRESET_MODAL 37 | } 38 | } 39 | 40 | export function closePresetModal() { 41 | return { 42 | type: types.CLOSE_PRESET_MODAL 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /react-native/react-redux/actions/types.js: -------------------------------------------------------------------------------- 1 | const actionKinds = [ 2 | 'SYNC', 3 | 'START', 4 | 'STOP', 5 | 'RESET', 6 | 'TERMINATE', 7 | 'OPEN_PRESET_MODAL', 8 | 'CLOSE_PRESET_MODAL', 9 | ] 10 | 11 | function buildActionTypes(kinds) { 12 | const result = {} 13 | kinds.forEach(type => { 14 | result[type] = type 15 | }) 16 | return result 17 | } 18 | 19 | export default buildActionTypes(actionKinds) 20 | -------------------------------------------------------------------------------- /react-native/react-redux/components/app.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { 3 | StyleSheet, 4 | View, 5 | } from 'react-native' 6 | import Spacer from './spacer' 7 | import Header from './header' 8 | import Timer from './timer' 9 | import Footer from './footer' 10 | import Modal from 'react-native-modalbox' 11 | import Presets from './presets' 12 | import Copyright from './copyright' 13 | import { 14 | NotificatableTimer, 15 | PRESETS, 16 | } from 'builderscon-session-timer-domain' 17 | import sound from '../lib/sound' 18 | 19 | const FPS = 10 20 | 21 | const styles = StyleSheet.create({ 22 | container: { 23 | flex: 1, 24 | backgroundColor: '#eeeeee', 25 | }, 26 | app: { 27 | flex: 1, 28 | justifyContent: 'space-between', 29 | }, 30 | horizontalContainer: { 31 | flexDirection: 'row', 32 | justifyContent: 'center', 33 | }, 34 | timer: { 35 | flex: 1, 36 | }, 37 | modalPresets: { 38 | height: 428, 39 | width: 300, 40 | borderRadius: 16, 41 | }, 42 | modalCopyright: { 43 | height: 300, 44 | width: 300, 45 | borderRadius: 16, 46 | }, 47 | }) 48 | 49 | export default class App extends React.Component { 50 | constructor(props) { 51 | super(props) 52 | 53 | this.timerContext = { 54 | sound, 55 | onTerminate: () => { 56 | this.stop() 57 | this.props.actions.terminate() 58 | }, 59 | } 60 | 61 | this.timer = new NotificatableTimer( 62 | PRESETS[0], 63 | this.timerContext 64 | ) 65 | } 66 | 67 | start() { 68 | this.timer.start() 69 | const { actions } = this.props 70 | actions.start() 71 | this.intervalId = setInterval(() => actions.sync(this.timer), 1000 / FPS) 72 | } 73 | 74 | stop() { 75 | this.timer.stop() 76 | this.props.actions.stop() 77 | clearInterval(this.intervalId) 78 | } 79 | 80 | reset() { 81 | this.props.actions.reset() 82 | this.timer.reset() 83 | } 84 | 85 | setPresets(index) { 86 | this.timer = new NotificatableTimer( 87 | PRESETS[index], 88 | this.timerContext 89 | ) 90 | 91 | const { actions } = this.props 92 | actions.reset() 93 | actions.sync(this.timer) 94 | actions.closePresetModal() 95 | } 96 | 97 | showCopyright() { 98 | this.refs.copyright.open() 99 | } 100 | 101 | showPresets() { 102 | this.refs.presets.open() 103 | } 104 | 105 | render() { 106 | const { state, modal } = this.props 107 | return ( 108 | 109 | 110 | 111 | 112 |
this.showCopyright()} 114 | onPressPresets={() => {state.isRunning || this.showPresets()}} 115 | /> 116 | 117 | 118 | 123 | 124 | 125 |