├── .eslintignore
├── .eslintrc.js
├── .gitattributes
├── .github
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ ├── feature_request.md
│ └── question.md
└── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── .npmignore
├── .prettierrc
├── .releaserc
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE.md
├── README.md
├── babel.config.js
├── example
├── index.tsx
├── ios
│ ├── ImagePickerIOSExample-tvOS
│ │ └── Info.plist
│ ├── ImagePickerIOSExample-tvOSTests
│ │ └── Info.plist
│ ├── ImagePickerIOSExample.xcodeproj
│ │ ├── project.pbxproj
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ ├── ImagePickerIOSExample-tvOS.xcscheme
│ │ │ └── ImagePickerIOSExample.xcscheme
│ ├── ImagePickerIOSExample
│ │ ├── AppDelegate.h
│ │ ├── AppDelegate.m
│ │ ├── Base.lproj
│ │ │ └── LaunchScreen.xib
│ │ ├── Images.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── Info.plist
│ │ └── main.m
│ └── ImagePickerIOSExampleTests
│ │ ├── ImagePickerIOSExampleTests.m
│ │ └── Info.plist
├── metro.config.js
└── yarn.lock
├── index.js
├── ios
├── RNCImagePickerIOS.h
├── RNCImagePickerIOS.m
└── RNCImagePickerIOS.xcodeproj
│ ├── project.pbxproj
│ └── xcshareddata
│ └── xcschemes
│ └── RNCImagePickerIOS.xcscheme
├── jest.config.js
├── jest.setup.js
├── package.json
├── react-native-image-picker-ios.podspec
├── src
├── __tests__
│ ├── canRecordVideos.ts
│ ├── canUseCamera.ts
│ ├── openCameraDialog.ts
│ └── openSelectDialog.ts
├── index.ts
└── internal
│ ├── nativeInterface.ts
│ ├── privateTypes.ts
│ └── types.ts
├── tsconfig.json
└── yarn.lock
/.eslintignore:
--------------------------------------------------------------------------------
1 | typings
2 | node_modules
3 | example/ios-bundle.js
4 |
5 | # generated by bob
6 | lib/
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | *
7 | * @format
8 | */
9 |
10 | const typescriptEslintRecommended = require('@typescript-eslint/eslint-plugin/dist/configs/recommended.json');
11 | const typescriptEslintPrettier = require('eslint-config-prettier/@typescript-eslint');
12 |
13 | module.exports = {
14 | extends: ['@react-native-community'],
15 | overrides: [
16 | {
17 | files: ['*.ts', '*.tsx'],
18 | // Apply the recommended Typescript defaults and the prettier overrides to all Typescript files
19 | rules: Object.assign(
20 | typescriptEslintRecommended.rules,
21 | typescriptEslintPrettier.rules,
22 | {
23 | '@typescript-eslint/explicit-member-accessibility': 'off',
24 | },
25 | ),
26 | },
27 | {
28 | files: ['example/**/*.ts', 'example/**/*.tsx'],
29 | rules: {
30 | // Turn off rules which are useless and annoying for the example files files
31 | '@typescript-eslint/explicit-function-return-type': 'off',
32 | 'react-native/no-inline-styles': 'off',
33 | },
34 | },
35 | {
36 | files: ['**/__tests__/**/*.ts', '**/*.spec.ts'],
37 | env: {
38 | jest: true,
39 | },
40 | rules: {
41 | // Turn off rules which are useless and annoying for unit test files
42 | '@typescript-eslint/explicit-function-return-type': 'off',
43 | },
44 | },
45 | ],
46 | };
47 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | *.pbxproj -text
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: 🐛 Report a bug
3 | about: Report a reproducible or regression bug.
4 | labels: 'bug'
5 | ---
6 |
7 |
8 |
9 | ## Environment
10 |
11 |
12 | ## Versions
13 |
14 | - iOS:
15 | - react-native-image-picker-ios:
16 | - react-native:
17 | - react:
18 |
19 | ## Description
20 |
21 |
22 |
23 | ## Reproducible Demo
24 |
25 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: ✨ Feature request
3 | about: Suggest an idea.
4 | labels: 'enhancement'
5 | ---
6 |
7 | ## Describe the Feature
8 |
9 |
10 | ## Possible Implementations
11 |
12 |
13 | ## Related Issues
14 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/question.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: 💬 Question
3 | about: You need help with the library.
4 | labels: 'question'
5 | ---
6 |
7 | ## Ask your Question
8 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | # Overview
2 |
3 |
4 |
5 |
6 | # Test Plan
7 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # OSX
2 | #
3 | .DS_Store
4 |
5 | # node.js
6 | #
7 | node_modules/
8 | npm-debug.log
9 | yarn-error.log
10 |
11 |
12 | # Xcode
13 | #
14 | build/
15 | *.pbxuser
16 | !default.pbxuser
17 | *.mode1v3
18 | !default.mode1v3
19 | *.mode2v3
20 | !default.mode2v3
21 | *.perspectivev3
22 | !default.perspectivev3
23 | xcuserdata
24 | *.xccheckout
25 | *.moved-aside
26 | DerivedData
27 | *.hmap
28 | *.ipa
29 | *.xcuserstate
30 | project.xcworkspace
31 |
32 | # BUCK
33 | buck-out/
34 | \.buckd/
35 | debug.keystore
36 |
37 | # Editor config
38 | .vscode
39 |
40 | # Outputs
41 | coverage
42 |
43 | .tmp
44 | example/ios-bundle.js
45 | index.ios.bundle
46 |
47 | # generated by bob
48 | lib/
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | __tests__
2 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "requirePragma": true,
3 | "singleQuote": true,
4 | "trailingComma": "all",
5 | "bracketSpacing": false,
6 | "jsxBracketSameLine": true
7 | }
8 |
--------------------------------------------------------------------------------
/.releaserc:
--------------------------------------------------------------------------------
1 | {
2 | "plugins": [
3 | "@semantic-release/commit-analyzer",
4 | "@semantic-release/release-notes-generator",
5 | "@semantic-release/changelog",
6 | "@semantic-release/npm",
7 | "@semantic-release/github",
8 | [
9 | "@semantic-release/git",
10 | {
11 | "assets": ["CHANGELOG.md", "package.json"],
12 | "message": "chore(release): ${nextRelease.version} [skip ci] \n\n${nextRelease.notes}"
13 | }
14 | ]
15 | ]
16 | }
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # [x.x.x](https://github.com/react-native-community/react-native-image-picker-ios) (2019-05-25)
2 |
3 | Migrate native module to community module.
4 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing to React Native ImagePickerIOS
2 |
3 | ## Development Process
4 | All work on React Native ImagePickerIOS happens directly on GitHub. Contributors send pull requests which go through a review process.
5 |
6 | > **Working on your first pull request?** You can learn how from this *free* series: [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github).
7 |
8 | 1. Fork the repo and create your branch from `master` (a guide on [how to fork a repository](https://help.github.com/articles/fork-a-repo/)).
9 | 2. Run `yarn` or `npm install` to install all required dependencies.
10 | 3. Now you are ready to make your changes!
11 |
12 | ## Tests & Verifications
13 | Currently we use `flow` for typechecking, `eslint` with `prettier` for linting and formatting the code, and `jest` for unit testing. All of these are run on CircleCI for all opened pull requests, but you should use them locally when making changes.
14 |
15 | * `yarn test`: Run all tests and validations.
16 | * `yarn validate:eslint`: Run `eslint`.
17 | * `yarn validate:eslint --fix`: Run `eslint` and automatically fix issues. This is useful for correcting code formatting.
18 | * `yarn validate:typescript`: Run `typescript` typechecking.
19 | * `yarn test:jest`: Run unit tests with `jest`.
20 |
21 | ## Sending a pull request
22 | When you're sending a pull request:
23 |
24 | * Prefer small pull requests focused on one change.
25 | * Verify that all tests and validations are passing.
26 | * Follow the pull request template when opening a pull request.
27 |
28 | ## Commit message convention
29 | We prefix our commit messages with one of the following to signify the kind of change:
30 |
31 | * **build**: Changes that affect the build system or external dependencies.
32 | * **ci**, **chore**: Changes to our CI configuration files and scripts.
33 | * **docs**: Documentation only changes.
34 | * **feat**: A new feature.
35 | * **fix**: A bug fix.
36 | * **perf**: A code change that improves performance.
37 | * **refactor**: A code change that neither fixes a bug nor adds a feature.
38 | * **style**: Changes that do not affect the meaning of the code.
39 | * **test**: Adding missing tests or correcting existing tests.
40 |
41 | ## Release process
42 | We use [Semantic Release](http://semantic-release.org) to automatically release new versions of the library when changes are merged into master. Using the commit message convention described above, it will detect if we need to release a patch, minor, or major version of the library.
43 |
44 | ## Reporting issues
45 | You can report issues on our [bug tracker](https://github.com/react-native-community/react-native-image-picker-ios/issues). Please search for existing issues and follow the issue template when opening an issue.
46 |
47 | ## License
48 | By contributing to React Native ImagePickerIOS, you agree that your contributions will be licensed under the **MIT** license.
49 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2015-present, Facebook, Inc.
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.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # `@react-native-community/image-picker-ios`
2 |
3 | [](https://circleci.com/gh/react-native-community/workflows/react-native-image-picker-ios/tree/master)  
4 |
5 |
6 | ## Notice
7 | ___
8 | This module was pulled out of React Native core part of the [☂️Lean Core](https://github.com/facebook/react-native/issues/23313) movement and is considered deprecated.
9 |
10 | We recommend you use either [react-native-image-picker](https://github.com/react-native-community/react-native-image-picker) or [expo-image-picker](https://docs.expo.io/versions/latest/sdk/imagepicker/). Both packages are well maintainer and have better cross platform support.
11 | ___
12 |
13 | React Native ImagePicker for iOS. It allows you to get information on:
14 |
15 | * Can you use the Camera
16 | * Can you record video
17 |
18 | ## Getting started
19 | Install the library using either Yarn:
20 |
21 | ```
22 | yarn add @react-native-community/image-picker-ios
23 | ```
24 |
25 | or npm:
26 |
27 | ```
28 | npm install --save @react-native-community/image-picker-ios
29 | ```
30 |
31 | You then need to link the native parts of the library for the platforms you are using. The easiest way to link the library is using the CLI tool by running this command from the root of your project:
32 |
33 | ```
34 | react-native link @react-native-community/image-picker-ios
35 | ```
36 |
37 | If you can't or don't want to use the CLI tool, you can also manually link the library using the instructions below (click on the arrow to show them):
38 |
39 |
40 | Manually link the library on iOS
41 |
42 | Either follow the [instructions in the React Native documentation](https://facebook.github.io/react-native/docs/linking-libraries-ios#manual-linking) to manually link the framework or link using [Cocoapods](https://cocoapods.org) by adding this to your `Podfile`:
43 |
44 | ```ruby
45 | pod 'react-native-image-picker-ios', :path => '../node_modules/@react-native-community/image-picker-ios'
46 | ```
47 |
48 |
49 |
50 |
51 |
52 | ## Migrating from the core `react-native` module
53 | This module was created when the ImagePickerIOS was split out from the core of React Native. To migrate to this module you need to follow the installation instructions above and then change you imports from:
54 |
55 | ```javascript
56 | import { ImagePickerIOS } from "react-native";
57 | ```
58 |
59 | to:
60 |
61 | ```javascript
62 | import ImagePickerIOS from "@react-native-community/image-picker-ios";
63 | ```
64 |
65 | Note that the API was updated after it was extracted from ImagePickerIOS to support some new features, however, the previous API is still available and works with no updates to your code.
66 |
67 | ## Usage
68 | Import the library:
69 |
70 | ```javascript
71 | import ImagePickerIOS from "@react-native-community/image-picker-ios";
72 | ```
73 |
74 | Can you use the camera:
75 |
76 | ```javascript
77 | ImagePickerIOS.canUseCamera(canUseCamera => {
78 | console.log("canUseCamera", canUseCamera);
79 | });
80 | ```
81 |
82 | Can you record videos:
83 |
84 | ```javascript
85 | ImagePickerIOS.canRecordVideos(canRecordVideos => {
86 | console.log("canRecordVideos", canRecordVideos);
87 | });
88 | ```
89 |
90 | ## API
91 | * **Types:**
92 | * [`OpenCameraDialogOptions`](#OpenCameraDialogOptions)
93 | * [`OpenSelectDialogOptions`](#OpenSelectDialogOptions)
94 | * **Methods:**
95 | * [`canUseCamera(callback)`](#canUseCamera)
96 | * [`canRecordVideos(callback)`](#canRecordVideos)
97 | * [`openCameraDialog(options, successCallback, cancelCallback)`](#openCameraDialog)
98 | * [`openSelectDialog(options, successCallback, cancelCallback)`](#openCameraDialog)
99 |
100 | ### Types
101 |
102 | #### `OpenCameraDialogOptions`
103 | Describes the settings for the camera:
104 |
105 | | Property | Type | Description |
106 | | --------------- | ------------------------------------------------ | -------------------------------------------------------------------------------------------------- |
107 | | `videoMode` | `boolean` | Should the camera open in video mode. |
108 |
109 | #### `OpenSelectDialogOptions`
110 | Describes the settings for the camera:
111 |
112 | | Property | Type | Description |
113 | | --------------- | ------------------------------------------------ | -------------------------------------------------------------------------------------------------- |
114 | | `showImages` | `boolean` | Should the results include images |
115 | | `showVideos` | `boolean` | Should the results include videos|
116 |
117 | ### Methods
118 |
119 | #### `canUseCamera()`
120 |
121 | Executes a callback with the a boolean value stating whether or not you can use the camera.
122 |
123 | **Example:**
124 | ```javascript
125 | ImagePickerIOS.canUseCamera(canUseCamera => {
126 | console.log("canUseCamera", canUseCamera);
127 | });
128 | ```
129 |
130 | #### `canRecordVideos()`
131 |
132 | Executes a callback with the a boolean value stating whether or not you can record videos.
133 |
134 | **Example:**
135 | ```javascript
136 | ImagePickerIOS.canRecordVideos(canRecordVideos => {
137 | console.log("canRecordVideos", canRecordVideos);
138 | });
139 | ```
140 |
141 | #### `openCameraDialog()`
142 |
143 | Opens the camera dialog with the specified [`OpenCameraDialogOptions`](#OpenCameraDialogOptions) and two callbacks, one for success and one for cancel.
144 |
145 | **Example:**
146 | ```javascript
147 | ImagePickerIOS.openCameraDialog({
148 | unmirrorFrontFacingCamera: false
149 | videoMode: false
150 | }, () => {
151 | // success
152 | }, (error) => {
153 | // cancel
154 | });
155 | ```
156 |
157 | #### `openSelectDialog()`
158 |
159 | Opens the camera dialog with the specified [`OpenSelectDialogOptions`](#OpenSelectDialogOptions) and two callbacks, one for success and one for cancel.
160 |
161 | **Example:**
162 | ```javascript
163 | ImagePickerIOS.openCameraDialog({
164 | showImages: true,
165 | showVideos: false
166 | }, (imageUrl, height, width) => {
167 | // success
168 | }, (error) => {
169 | // cancel
170 | });
171 | ```
172 | ## Troubleshooting
173 |
174 | ### Errors while running Jest tests
175 |
176 | If you do not have a Jest Setup file configured, you should add the following to your Jest settings and create the `jest.setup.js` file in project root:
177 |
178 | ```js
179 | setupFiles: ['/jest.setup.js']
180 | ```
181 |
182 | You should then add the following to your Jest setup file to mock the ImagePickerIOS Native Module:
183 |
184 | ```js
185 | import { NativeModules } from 'react-native';
186 |
187 | NativeModules.RNCImagePickerIOS = {
188 | canRecordVideos: jest.fn(),
189 | canUseCamera: jest.fn(),
190 | openCameraDialog: jest.fn(),
191 | openSelectDialog: jest.fn(),
192 | };
193 | ```
194 |
195 | ### Issues with the iOS simulator
196 |
197 | As your simulator doesn't have a camera, there is no way to open the camera on the simulator.
198 |
199 | ## Maintainers
200 |
201 | * [Johan du Toit](https://github.com/johan-dutoit) - [Freelance React Native Developer]()
202 |
203 | ## Contributing
204 |
205 | Please see the [contributing guide](/CONTRIBUTING.md).
206 |
207 | ## License
208 |
209 | The library is released under the MIT license. For more information see [`LICENSE`](/LICENSE).
210 |
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ['module:metro-react-native-babel-preset'],
3 | };
4 |
--------------------------------------------------------------------------------
/example/index.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | *
7 | * @format
8 | * @flow
9 | */
10 |
11 | import * as React from 'react';
12 | import {
13 | AppRegistry,
14 | SafeAreaView,
15 | ScrollView,
16 | StyleSheet,
17 | Text,
18 | View,
19 | Alert,
20 | Button,
21 | } from 'react-native';
22 |
23 | import ImagePickerIOS from '../src/index';
24 | import {
25 | OpenCameraDialogOptions,
26 | OpenSelectDialogOptions,
27 | } from '../src/internal/types';
28 |
29 | const styles = StyleSheet.create({
30 | container: {
31 | flex: 1,
32 | backgroundColor: '#F5FCFF',
33 | },
34 | sectionTitle: {
35 | fontSize: 24,
36 | marginHorizontal: 8,
37 | marginTop: 24,
38 | },
39 | exampleContainer: {
40 | padding: 16,
41 | marginVertical: 4,
42 | backgroundColor: '#FFF',
43 | borderColor: '#EEE',
44 | borderTopWidth: 1,
45 | borderBottomWidth: 1,
46 | },
47 | exampleTitle: {
48 | fontSize: 18,
49 | marginHorizontal: 8,
50 | },
51 | label: {
52 | fontWeight: 'bold',
53 | },
54 | });
55 |
56 | interface State {
57 | canUseCamera: boolean;
58 | canRecordVideos: boolean;
59 |
60 | imageUrl: string | null;
61 | height: number | null;
62 | width: number | null;
63 | }
64 |
65 | class ExampleApp extends React.Component<{}, State> {
66 | constructor(props: {}) {
67 | super(props);
68 |
69 | this.state = {
70 | canUseCamera: false,
71 | canRecordVideos: false,
72 |
73 | imageUrl: null,
74 | height: null,
75 | width: null,
76 | };
77 | }
78 |
79 | componentDidMount() {
80 | ImagePickerIOS.canUseCamera(value =>
81 | this.setState(() => ({canUseCamera: value})),
82 | );
83 | ImagePickerIOS.canRecordVideos(value =>
84 | this.setState(() => ({canRecordVideos: value})),
85 | );
86 | }
87 |
88 | render() {
89 | const {canUseCamera, canRecordVideos, imageUrl, height, width} = this.state;
90 | return (
91 |
92 |
93 | Static methods
94 |
95 | {`Can use camera: ${canUseCamera}!`}
96 | {`Can record video: ${canRecordVideos}!`}
97 |
98 |
99 | Open Camera Dialog
100 | (doesn't work on a simulator)
101 |
102 |
106 |
110 |
111 | Select Dialog
112 |
113 |
120 |
127 |
134 |
135 | Selected Image details
136 |
137 |
138 | ImageUrl/Tag: {imageUrl}
139 | {'\n'}
140 | Height: {height}
141 | {'\n'}
142 | Width: {width}
143 |
144 |
145 |
146 | );
147 | }
148 |
149 | onOpenCameraDialogPress = (config: OpenCameraDialogOptions) => () => {
150 | ImagePickerIOS.openCameraDialog(
151 | config,
152 | () => {},
153 | error => {
154 | Alert.alert(error ? error : 'cancelled');
155 | },
156 | );
157 | };
158 |
159 | onOpenSelectDialogPress = (config: OpenSelectDialogOptions) => () => {
160 | ImagePickerIOS.openSelectDialog(
161 | config,
162 | (imageUrl, height, width) => {
163 | this.setState(() => ({
164 | imageUrl,
165 | height,
166 | width,
167 | }));
168 | },
169 | error => {
170 | Alert.alert(error ? error : 'cancelled');
171 | },
172 | );
173 | };
174 | }
175 |
176 | AppRegistry.registerComponent('ImagePickerIOSExample', () => ExampleApp);
177 |
--------------------------------------------------------------------------------
/example/ios/ImagePickerIOSExample-tvOS/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UIViewControllerBasedStatusBarAppearance
38 |
39 | NSLocationWhenInUseUsageDescription
40 |
41 | NSAppTransportSecurity
42 |
43 |
44 | NSExceptionDomains
45 |
46 | localhost
47 |
48 | NSExceptionAllowsInsecureHTTPLoads
49 |
50 |
51 |
52 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/example/ios/ImagePickerIOSExample-tvOSTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)
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 |
--------------------------------------------------------------------------------
/example/ios/ImagePickerIOSExample.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 /* ImagePickerIOSExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* ImagePickerIOSExampleTests.m */; };
16 | 11D1A2F320CAFA9E000508D9 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; };
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 | 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
27 | 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
28 | 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
29 | 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */; };
30 | 2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */; };
31 | 2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */; };
32 | 2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */; };
33 | 2D02E4C61E0B4AEC006451C7 /* libRCTSettings-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */; };
34 | 2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */; };
35 | 2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */; };
36 | 2D16E6881FA4F8E400B85C8A /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D16E6891FA4F8E400B85C8A /* libReact.a */; };
37 | 2DCD954D1E0B4F2C00145EB5 /* ImagePickerIOSExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* ImagePickerIOSExampleTests.m */; };
38 | 2DF0FFEE2056DD460020B375 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3EA31DF850E9000B6D8A /* libReact.a */; };
39 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
40 | ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; };
41 | DCE5EBBB22982BA9003067E3 /* libRNCImagePickerIOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DCE5EBBA22982B9A003067E3 /* libRNCImagePickerIOS.a */; };
42 | ED297163215061F000B7C4FE /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED297162215061F000B7C4FE /* JavaScriptCore.framework */; };
43 | ED2971652150620600B7C4FE /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED2971642150620600B7C4FE /* JavaScriptCore.framework */; };
44 | /* End PBXBuildFile section */
45 |
46 | /* Begin PBXContainerItemProxy section */
47 | 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = {
48 | isa = PBXContainerItemProxy;
49 | containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;
50 | proxyType = 2;
51 | remoteGlobalIDString = 134814201AA4EA6300B7C361;
52 | remoteInfo = RCTActionSheet;
53 | };
54 | 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = {
55 | isa = PBXContainerItemProxy;
56 | containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;
57 | proxyType = 2;
58 | remoteGlobalIDString = 134814201AA4EA6300B7C361;
59 | remoteInfo = RCTGeolocation;
60 | };
61 | 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = {
62 | isa = PBXContainerItemProxy;
63 | containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
64 | proxyType = 2;
65 | remoteGlobalIDString = 58B5115D1A9E6B3D00147676;
66 | remoteInfo = RCTImage;
67 | };
68 | 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = {
69 | isa = PBXContainerItemProxy;
70 | containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
71 | proxyType = 2;
72 | remoteGlobalIDString = 58B511DB1A9E6C8500147676;
73 | remoteInfo = RCTNetwork;
74 | };
75 | 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = {
76 | isa = PBXContainerItemProxy;
77 | containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */;
78 | proxyType = 2;
79 | remoteGlobalIDString = 832C81801AAF6DEF007FA2F7;
80 | remoteInfo = RCTVibration;
81 | };
82 | 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
83 | isa = PBXContainerItemProxy;
84 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
85 | proxyType = 1;
86 | remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
87 | remoteInfo = ImagePickerIOSExample;
88 | };
89 | 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = {
90 | isa = PBXContainerItemProxy;
91 | containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
92 | proxyType = 2;
93 | remoteGlobalIDString = 134814201AA4EA6300B7C361;
94 | remoteInfo = RCTSettings;
95 | };
96 | 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = {
97 | isa = PBXContainerItemProxy;
98 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
99 | proxyType = 2;
100 | remoteGlobalIDString = 3C86DF461ADF2C930047B81A;
101 | remoteInfo = RCTWebSocket;
102 | };
103 | 146834031AC3E56700842450 /* PBXContainerItemProxy */ = {
104 | isa = PBXContainerItemProxy;
105 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
106 | proxyType = 2;
107 | remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192;
108 | remoteInfo = React;
109 | };
110 | 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = {
111 | isa = PBXContainerItemProxy;
112 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
113 | proxyType = 1;
114 | remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7;
115 | remoteInfo = "ImagePickerIOSExample-tvOS";
116 | };
117 | 2D16E6711FA4F8DC00B85C8A /* PBXContainerItemProxy */ = {
118 | isa = PBXContainerItemProxy;
119 | containerPortal = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */;
120 | proxyType = 2;
121 | remoteGlobalIDString = ADD01A681E09402E00F6D226;
122 | remoteInfo = "RCTBlob-tvOS";
123 | };
124 | 2D16E6831FA4F8DC00B85C8A /* PBXContainerItemProxy */ = {
125 | isa = PBXContainerItemProxy;
126 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
127 | proxyType = 2;
128 | remoteGlobalIDString = 3DBE0D001F3B181A0099AA32;
129 | remoteInfo = fishhook;
130 | };
131 | 2D16E6851FA4F8DC00B85C8A /* PBXContainerItemProxy */ = {
132 | isa = PBXContainerItemProxy;
133 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
134 | proxyType = 2;
135 | remoteGlobalIDString = 3DBE0D0D1F3B181C0099AA32;
136 | remoteInfo = "fishhook-tvOS";
137 | };
138 | 2DF0FFDE2056DD460020B375 /* PBXContainerItemProxy */ = {
139 | isa = PBXContainerItemProxy;
140 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
141 | proxyType = 2;
142 | remoteGlobalIDString = EBF21BDC1FC498900052F4D5;
143 | remoteInfo = jsinspector;
144 | };
145 | 2DF0FFE02056DD460020B375 /* PBXContainerItemProxy */ = {
146 | isa = PBXContainerItemProxy;
147 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
148 | proxyType = 2;
149 | remoteGlobalIDString = EBF21BFA1FC4989A0052F4D5;
150 | remoteInfo = "jsinspector-tvOS";
151 | };
152 | 2DF0FFE22056DD460020B375 /* PBXContainerItemProxy */ = {
153 | isa = PBXContainerItemProxy;
154 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
155 | proxyType = 2;
156 | remoteGlobalIDString = 139D7ECE1E25DB7D00323FB7;
157 | remoteInfo = "third-party";
158 | };
159 | 2DF0FFE42056DD460020B375 /* PBXContainerItemProxy */ = {
160 | isa = PBXContainerItemProxy;
161 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
162 | proxyType = 2;
163 | remoteGlobalIDString = 3D383D3C1EBD27B6005632C8;
164 | remoteInfo = "third-party-tvOS";
165 | };
166 | 2DF0FFE62056DD460020B375 /* PBXContainerItemProxy */ = {
167 | isa = PBXContainerItemProxy;
168 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
169 | proxyType = 2;
170 | remoteGlobalIDString = 139D7E881E25C6D100323FB7;
171 | remoteInfo = "double-conversion";
172 | };
173 | 2DF0FFE82056DD460020B375 /* PBXContainerItemProxy */ = {
174 | isa = PBXContainerItemProxy;
175 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
176 | proxyType = 2;
177 | remoteGlobalIDString = 3D383D621EBD27B9005632C8;
178 | remoteInfo = "double-conversion-tvOS";
179 | };
180 | 2DF0FFEA2056DD460020B375 /* PBXContainerItemProxy */ = {
181 | isa = PBXContainerItemProxy;
182 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
183 | proxyType = 2;
184 | remoteGlobalIDString = 9936F3131F5F2E4B0010BF04;
185 | remoteInfo = privatedata;
186 | };
187 | 2DF0FFEC2056DD460020B375 /* PBXContainerItemProxy */ = {
188 | isa = PBXContainerItemProxy;
189 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
190 | proxyType = 2;
191 | remoteGlobalIDString = 9936F32F1F5F2E5B0010BF04;
192 | remoteInfo = "privatedata-tvOS";
193 | };
194 | 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = {
195 | isa = PBXContainerItemProxy;
196 | containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
197 | proxyType = 2;
198 | remoteGlobalIDString = 2D2A283A1D9B042B00D4039D;
199 | remoteInfo = "RCTImage-tvOS";
200 | };
201 | 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */ = {
202 | isa = PBXContainerItemProxy;
203 | containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
204 | proxyType = 2;
205 | remoteGlobalIDString = 2D2A28471D9B043800D4039D;
206 | remoteInfo = "RCTLinking-tvOS";
207 | };
208 | 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
209 | isa = PBXContainerItemProxy;
210 | containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
211 | proxyType = 2;
212 | remoteGlobalIDString = 2D2A28541D9B044C00D4039D;
213 | remoteInfo = "RCTNetwork-tvOS";
214 | };
215 | 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
216 | isa = PBXContainerItemProxy;
217 | containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
218 | proxyType = 2;
219 | remoteGlobalIDString = 2D2A28611D9B046600D4039D;
220 | remoteInfo = "RCTSettings-tvOS";
221 | };
222 | 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */ = {
223 | isa = PBXContainerItemProxy;
224 | containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
225 | proxyType = 2;
226 | remoteGlobalIDString = 2D2A287B1D9B048500D4039D;
227 | remoteInfo = "RCTText-tvOS";
228 | };
229 | 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */ = {
230 | isa = PBXContainerItemProxy;
231 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
232 | proxyType = 2;
233 | remoteGlobalIDString = 2D2A28881D9B049200D4039D;
234 | remoteInfo = "RCTWebSocket-tvOS";
235 | };
236 | 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */ = {
237 | isa = PBXContainerItemProxy;
238 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
239 | proxyType = 2;
240 | remoteGlobalIDString = 2D2A28131D9B038B00D4039D;
241 | remoteInfo = "React-tvOS";
242 | };
243 | 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */ = {
244 | isa = PBXContainerItemProxy;
245 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
246 | proxyType = 2;
247 | remoteGlobalIDString = 3D3C059A1DE3340900C268FA;
248 | remoteInfo = yoga;
249 | };
250 | 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */ = {
251 | isa = PBXContainerItemProxy;
252 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
253 | proxyType = 2;
254 | remoteGlobalIDString = 3D3C06751DE3340C00C268FA;
255 | remoteInfo = "yoga-tvOS";
256 | };
257 | 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */ = {
258 | isa = PBXContainerItemProxy;
259 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
260 | proxyType = 2;
261 | remoteGlobalIDString = 3D3CD9251DE5FBEC00167DC4;
262 | remoteInfo = cxxreact;
263 | };
264 | 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
265 | isa = PBXContainerItemProxy;
266 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
267 | proxyType = 2;
268 | remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4;
269 | remoteInfo = "cxxreact-tvOS";
270 | };
271 | 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
272 | isa = PBXContainerItemProxy;
273 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
274 | proxyType = 2;
275 | remoteGlobalIDString = 3D3CD90B1DE5FBD600167DC4;
276 | remoteInfo = jschelpers;
277 | };
278 | 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
279 | isa = PBXContainerItemProxy;
280 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
281 | proxyType = 2;
282 | remoteGlobalIDString = 3D3CD9181DE5FBD800167DC4;
283 | remoteInfo = "jschelpers-tvOS";
284 | };
285 | 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = {
286 | isa = PBXContainerItemProxy;
287 | containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
288 | proxyType = 2;
289 | remoteGlobalIDString = 134814201AA4EA6300B7C361;
290 | remoteInfo = RCTAnimation;
291 | };
292 | 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = {
293 | isa = PBXContainerItemProxy;
294 | containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
295 | proxyType = 2;
296 | remoteGlobalIDString = 2D2A28201D9B03D100D4039D;
297 | remoteInfo = "RCTAnimation-tvOS";
298 | };
299 | 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = {
300 | isa = PBXContainerItemProxy;
301 | containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
302 | proxyType = 2;
303 | remoteGlobalIDString = 134814201AA4EA6300B7C361;
304 | remoteInfo = RCTLinking;
305 | };
306 | 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = {
307 | isa = PBXContainerItemProxy;
308 | containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
309 | proxyType = 2;
310 | remoteGlobalIDString = 58B5119B1A9E6C1200147676;
311 | remoteInfo = RCTText;
312 | };
313 | ADBDB9261DFEBF0700ED6528 /* PBXContainerItemProxy */ = {
314 | isa = PBXContainerItemProxy;
315 | containerPortal = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */;
316 | proxyType = 2;
317 | remoteGlobalIDString = 358F4ED71D1E81A9004DF814;
318 | remoteInfo = RCTBlob;
319 | };
320 | DCE5EBB922982B9A003067E3 /* PBXContainerItemProxy */ = {
321 | isa = PBXContainerItemProxy;
322 | containerPortal = DCE5EBB522982B9A003067E3 /* RNCImagePickerIOS.xcodeproj */;
323 | proxyType = 2;
324 | remoteGlobalIDString = 134814201AA4EA6300B7C361;
325 | remoteInfo = RNCImagePickerIOS;
326 | };
327 | /* End PBXContainerItemProxy section */
328 |
329 | /* Begin PBXFileReference section */
330 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; };
331 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; };
332 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; };
333 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; };
334 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; };
335 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = ""; };
336 | 00E356EE1AD99517003FC87E /* ImagePickerIOSExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ImagePickerIOSExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
337 | 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
338 | 00E356F21AD99517003FC87E /* ImagePickerIOSExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ImagePickerIOSExampleTests.m; sourceTree = ""; };
339 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; };
340 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; };
341 | 13B07F961A680F5B00A75B9A /* ImagePickerIOSExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ImagePickerIOSExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
342 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = ImagePickerIOSExample/AppDelegate.h; sourceTree = ""; };
343 | 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = ImagePickerIOSExample/AppDelegate.m; sourceTree = ""; };
344 | 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; };
345 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = ImagePickerIOSExample/Images.xcassets; sourceTree = ""; };
346 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = ImagePickerIOSExample/Info.plist; sourceTree = ""; };
347 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ImagePickerIOSExample/main.m; sourceTree = ""; };
348 | 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; };
349 | 2D02E47B1E0B4A5D006451C7 /* ImagePickerIOSExample-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ImagePickerIOSExample-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
350 | 2D02E4901E0B4A5D006451C7 /* ImagePickerIOSExample-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "ImagePickerIOSExample-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
351 | 2D16E6891FA4F8E400B85C8A /* libReact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReact.a; sourceTree = BUILT_PRODUCTS_DIR; };
352 | 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = ""; };
353 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; };
354 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; };
355 | ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTBlob.xcodeproj; path = "../../node_modules/react-native/Libraries/Blob/RCTBlob.xcodeproj"; sourceTree = ""; };
356 | DCE5EBB522982B9A003067E3 /* RNCImagePickerIOS.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNCImagePickerIOS.xcodeproj; path = ../../ios/RNCImagePickerIOS.xcodeproj; sourceTree = ""; };
357 | ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
358 | ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; };
359 | /* End PBXFileReference section */
360 |
361 | /* Begin PBXFrameworksBuildPhase section */
362 | 00E356EB1AD99517003FC87E /* Frameworks */ = {
363 | isa = PBXFrameworksBuildPhase;
364 | buildActionMask = 2147483647;
365 | files = (
366 | 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */,
367 | );
368 | runOnlyForDeploymentPostprocessing = 0;
369 | };
370 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
371 | isa = PBXFrameworksBuildPhase;
372 | buildActionMask = 2147483647;
373 | files = (
374 | DCE5EBBB22982BA9003067E3 /* libRNCImagePickerIOS.a in Frameworks */,
375 | ED297163215061F000B7C4FE /* JavaScriptCore.framework in Frameworks */,
376 | ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */,
377 | 11D1A2F320CAFA9E000508D9 /* libRCTAnimation.a in Frameworks */,
378 | 146834051AC3E58100842450 /* libReact.a in Frameworks */,
379 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */,
380 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */,
381 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */,
382 | 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */,
383 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */,
384 | 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */,
385 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */,
386 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */,
387 | 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */,
388 | );
389 | runOnlyForDeploymentPostprocessing = 0;
390 | };
391 | 2D02E4781E0B4A5D006451C7 /* Frameworks */ = {
392 | isa = PBXFrameworksBuildPhase;
393 | buildActionMask = 2147483647;
394 | files = (
395 | ED2971652150620600B7C4FE /* JavaScriptCore.framework in Frameworks */,
396 | 2D16E6881FA4F8E400B85C8A /* libReact.a in Frameworks */,
397 | 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation.a in Frameworks */,
398 | 2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */,
399 | 2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */,
400 | 2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */,
401 | 2D02E4C61E0B4AEC006451C7 /* libRCTSettings-tvOS.a in Frameworks */,
402 | 2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */,
403 | 2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */,
404 | );
405 | runOnlyForDeploymentPostprocessing = 0;
406 | };
407 | 2D02E48D1E0B4A5D006451C7 /* Frameworks */ = {
408 | isa = PBXFrameworksBuildPhase;
409 | buildActionMask = 2147483647;
410 | files = (
411 | 2DF0FFEE2056DD460020B375 /* libReact.a in Frameworks */,
412 | );
413 | runOnlyForDeploymentPostprocessing = 0;
414 | };
415 | /* End PBXFrameworksBuildPhase section */
416 |
417 | /* Begin PBXGroup section */
418 | 00C302A81ABCB8CE00DB3ED1 /* Products */ = {
419 | isa = PBXGroup;
420 | children = (
421 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */,
422 | );
423 | name = Products;
424 | sourceTree = "";
425 | };
426 | 00C302B61ABCB90400DB3ED1 /* Products */ = {
427 | isa = PBXGroup;
428 | children = (
429 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */,
430 | );
431 | name = Products;
432 | sourceTree = "";
433 | };
434 | 00C302BC1ABCB91800DB3ED1 /* Products */ = {
435 | isa = PBXGroup;
436 | children = (
437 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */,
438 | 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */,
439 | );
440 | name = Products;
441 | sourceTree = "";
442 | };
443 | 00C302D41ABCB9D200DB3ED1 /* Products */ = {
444 | isa = PBXGroup;
445 | children = (
446 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */,
447 | 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */,
448 | );
449 | name = Products;
450 | sourceTree = "";
451 | };
452 | 00C302E01ABCB9EE00DB3ED1 /* Products */ = {
453 | isa = PBXGroup;
454 | children = (
455 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */,
456 | );
457 | name = Products;
458 | sourceTree = "";
459 | };
460 | 00E356EF1AD99517003FC87E /* ImagePickerIOSExampleTests */ = {
461 | isa = PBXGroup;
462 | children = (
463 | 00E356F21AD99517003FC87E /* ImagePickerIOSExampleTests.m */,
464 | 00E356F01AD99517003FC87E /* Supporting Files */,
465 | );
466 | path = ImagePickerIOSExampleTests;
467 | sourceTree = "";
468 | };
469 | 00E356F01AD99517003FC87E /* Supporting Files */ = {
470 | isa = PBXGroup;
471 | children = (
472 | 00E356F11AD99517003FC87E /* Info.plist */,
473 | );
474 | name = "Supporting Files";
475 | sourceTree = "";
476 | };
477 | 139105B71AF99BAD00B5F7CC /* Products */ = {
478 | isa = PBXGroup;
479 | children = (
480 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */,
481 | 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */,
482 | );
483 | name = Products;
484 | sourceTree = "";
485 | };
486 | 139FDEE71B06529A00C62182 /* Products */ = {
487 | isa = PBXGroup;
488 | children = (
489 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */,
490 | 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */,
491 | 2D16E6841FA4F8DC00B85C8A /* libfishhook.a */,
492 | 2D16E6861FA4F8DC00B85C8A /* libfishhook-tvOS.a */,
493 | );
494 | name = Products;
495 | sourceTree = "";
496 | };
497 | 13B07FAE1A68108700A75B9A /* ImagePickerIOSExample */ = {
498 | isa = PBXGroup;
499 | children = (
500 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */,
501 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */,
502 | 13B07FB01A68108700A75B9A /* AppDelegate.m */,
503 | 13B07FB51A68108700A75B9A /* Images.xcassets */,
504 | 13B07FB61A68108700A75B9A /* Info.plist */,
505 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */,
506 | 13B07FB71A68108700A75B9A /* main.m */,
507 | );
508 | name = ImagePickerIOSExample;
509 | sourceTree = "";
510 | };
511 | 146834001AC3E56700842450 /* Products */ = {
512 | isa = PBXGroup;
513 | children = (
514 | 146834041AC3E56700842450 /* libReact.a */,
515 | 3DAD3EA31DF850E9000B6D8A /* libReact.a */,
516 | 3DAD3EA51DF850E9000B6D8A /* libyoga.a */,
517 | 3DAD3EA71DF850E9000B6D8A /* libyoga.a */,
518 | 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */,
519 | 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */,
520 | 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */,
521 | 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */,
522 | 2DF0FFDF2056DD460020B375 /* libjsinspector.a */,
523 | 2DF0FFE12056DD460020B375 /* libjsinspector-tvOS.a */,
524 | 2DF0FFE32056DD460020B375 /* libthird-party.a */,
525 | 2DF0FFE52056DD460020B375 /* libthird-party.a */,
526 | 2DF0FFE72056DD460020B375 /* libdouble-conversion.a */,
527 | 2DF0FFE92056DD460020B375 /* libdouble-conversion.a */,
528 | 2DF0FFEB2056DD460020B375 /* libprivatedata.a */,
529 | 2DF0FFED2056DD460020B375 /* libprivatedata-tvOS.a */,
530 | );
531 | name = Products;
532 | sourceTree = "";
533 | };
534 | 2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
535 | isa = PBXGroup;
536 | children = (
537 | ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
538 | ED2971642150620600B7C4FE /* JavaScriptCore.framework */,
539 | 2D16E6891FA4F8E400B85C8A /* libReact.a */,
540 | );
541 | name = Frameworks;
542 | sourceTree = "";
543 | };
544 | 5E91572E1DD0AC6500FF2AA8 /* Products */ = {
545 | isa = PBXGroup;
546 | children = (
547 | 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */,
548 | 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */,
549 | );
550 | name = Products;
551 | sourceTree = "";
552 | };
553 | 78C398B11ACF4ADC00677621 /* Products */ = {
554 | isa = PBXGroup;
555 | children = (
556 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */,
557 | 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */,
558 | );
559 | name = Products;
560 | sourceTree = "";
561 | };
562 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = {
563 | isa = PBXGroup;
564 | children = (
565 | 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */,
566 | 146833FF1AC3E56700842450 /* React.xcodeproj */,
567 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */,
568 | ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */,
569 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */,
570 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */,
571 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */,
572 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */,
573 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */,
574 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */,
575 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */,
576 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */,
577 | DCE5EBB522982B9A003067E3 /* RNCImagePickerIOS.xcodeproj */,
578 | );
579 | name = Libraries;
580 | sourceTree = "";
581 | };
582 | 832341B11AAA6A8300B99B32 /* Products */ = {
583 | isa = PBXGroup;
584 | children = (
585 | 832341B51AAA6A8300B99B32 /* libRCTText.a */,
586 | 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */,
587 | );
588 | name = Products;
589 | sourceTree = "";
590 | };
591 | 83CBB9F61A601CBA00E9B192 = {
592 | isa = PBXGroup;
593 | children = (
594 | 13B07FAE1A68108700A75B9A /* ImagePickerIOSExample */,
595 | 832341AE1AAA6A7D00B99B32 /* Libraries */,
596 | 00E356EF1AD99517003FC87E /* ImagePickerIOSExampleTests */,
597 | 83CBBA001A601CBA00E9B192 /* Products */,
598 | 2D16E6871FA4F8E400B85C8A /* Frameworks */,
599 | );
600 | indentWidth = 2;
601 | sourceTree = "";
602 | tabWidth = 2;
603 | usesTabs = 0;
604 | };
605 | 83CBBA001A601CBA00E9B192 /* Products */ = {
606 | isa = PBXGroup;
607 | children = (
608 | 13B07F961A680F5B00A75B9A /* ImagePickerIOSExample.app */,
609 | 00E356EE1AD99517003FC87E /* ImagePickerIOSExampleTests.xctest */,
610 | 2D02E47B1E0B4A5D006451C7 /* ImagePickerIOSExample-tvOS.app */,
611 | 2D02E4901E0B4A5D006451C7 /* ImagePickerIOSExample-tvOSTests.xctest */,
612 | );
613 | name = Products;
614 | sourceTree = "";
615 | };
616 | ADBDB9201DFEBF0600ED6528 /* Products */ = {
617 | isa = PBXGroup;
618 | children = (
619 | ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */,
620 | 2D16E6721FA4F8DC00B85C8A /* libRCTBlob-tvOS.a */,
621 | );
622 | name = Products;
623 | sourceTree = "";
624 | };
625 | DCE5EBB622982B9A003067E3 /* Products */ = {
626 | isa = PBXGroup;
627 | children = (
628 | DCE5EBBA22982B9A003067E3 /* libRNCImagePickerIOS.a */,
629 | );
630 | name = Products;
631 | sourceTree = "";
632 | };
633 | /* End PBXGroup section */
634 |
635 | /* Begin PBXNativeTarget section */
636 | 00E356ED1AD99517003FC87E /* ImagePickerIOSExampleTests */ = {
637 | isa = PBXNativeTarget;
638 | buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "ImagePickerIOSExampleTests" */;
639 | buildPhases = (
640 | 00E356EA1AD99517003FC87E /* Sources */,
641 | 00E356EB1AD99517003FC87E /* Frameworks */,
642 | 00E356EC1AD99517003FC87E /* Resources */,
643 | );
644 | buildRules = (
645 | );
646 | dependencies = (
647 | 00E356F51AD99517003FC87E /* PBXTargetDependency */,
648 | );
649 | name = ImagePickerIOSExampleTests;
650 | productName = ImagePickerIOSExampleTests;
651 | productReference = 00E356EE1AD99517003FC87E /* ImagePickerIOSExampleTests.xctest */;
652 | productType = "com.apple.product-type.bundle.unit-test";
653 | };
654 | 13B07F861A680F5B00A75B9A /* ImagePickerIOSExample */ = {
655 | isa = PBXNativeTarget;
656 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "ImagePickerIOSExample" */;
657 | buildPhases = (
658 | 13B07F871A680F5B00A75B9A /* Sources */,
659 | 13B07F8C1A680F5B00A75B9A /* Frameworks */,
660 | 13B07F8E1A680F5B00A75B9A /* Resources */,
661 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
662 | );
663 | buildRules = (
664 | );
665 | dependencies = (
666 | );
667 | name = ImagePickerIOSExample;
668 | productName = "Hello World";
669 | productReference = 13B07F961A680F5B00A75B9A /* ImagePickerIOSExample.app */;
670 | productType = "com.apple.product-type.application";
671 | };
672 | 2D02E47A1E0B4A5D006451C7 /* ImagePickerIOSExample-tvOS */ = {
673 | isa = PBXNativeTarget;
674 | buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "ImagePickerIOSExample-tvOS" */;
675 | buildPhases = (
676 | 2D02E4771E0B4A5D006451C7 /* Sources */,
677 | 2D02E4781E0B4A5D006451C7 /* Frameworks */,
678 | 2D02E4791E0B4A5D006451C7 /* Resources */,
679 | 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */,
680 | );
681 | buildRules = (
682 | );
683 | dependencies = (
684 | );
685 | name = "ImagePickerIOSExample-tvOS";
686 | productName = "ImagePickerIOSExample-tvOS";
687 | productReference = 2D02E47B1E0B4A5D006451C7 /* ImagePickerIOSExample-tvOS.app */;
688 | productType = "com.apple.product-type.application";
689 | };
690 | 2D02E48F1E0B4A5D006451C7 /* ImagePickerIOSExample-tvOSTests */ = {
691 | isa = PBXNativeTarget;
692 | buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "ImagePickerIOSExample-tvOSTests" */;
693 | buildPhases = (
694 | 2D02E48C1E0B4A5D006451C7 /* Sources */,
695 | 2D02E48D1E0B4A5D006451C7 /* Frameworks */,
696 | 2D02E48E1E0B4A5D006451C7 /* Resources */,
697 | );
698 | buildRules = (
699 | );
700 | dependencies = (
701 | 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */,
702 | );
703 | name = "ImagePickerIOSExample-tvOSTests";
704 | productName = "ImagePickerIOSExample-tvOSTests";
705 | productReference = 2D02E4901E0B4A5D006451C7 /* ImagePickerIOSExample-tvOSTests.xctest */;
706 | productType = "com.apple.product-type.bundle.unit-test";
707 | };
708 | /* End PBXNativeTarget section */
709 |
710 | /* Begin PBXProject section */
711 | 83CBB9F71A601CBA00E9B192 /* Project object */ = {
712 | isa = PBXProject;
713 | attributes = {
714 | LastUpgradeCheck = 0940;
715 | ORGANIZATIONNAME = Facebook;
716 | TargetAttributes = {
717 | 00E356ED1AD99517003FC87E = {
718 | CreatedOnToolsVersion = 6.2;
719 | TestTargetID = 13B07F861A680F5B00A75B9A;
720 | };
721 | 2D02E47A1E0B4A5D006451C7 = {
722 | CreatedOnToolsVersion = 8.2.1;
723 | ProvisioningStyle = Automatic;
724 | };
725 | 2D02E48F1E0B4A5D006451C7 = {
726 | CreatedOnToolsVersion = 8.2.1;
727 | ProvisioningStyle = Automatic;
728 | TestTargetID = 2D02E47A1E0B4A5D006451C7;
729 | };
730 | };
731 | };
732 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "ImagePickerIOSExample" */;
733 | compatibilityVersion = "Xcode 3.2";
734 | developmentRegion = English;
735 | hasScannedForEncodings = 0;
736 | knownRegions = (
737 | English,
738 | en,
739 | Base,
740 | );
741 | mainGroup = 83CBB9F61A601CBA00E9B192;
742 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
743 | projectDirPath = "";
744 | projectReferences = (
745 | {
746 | ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */;
747 | ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;
748 | },
749 | {
750 | ProductGroup = 5E91572E1DD0AC6500FF2AA8 /* Products */;
751 | ProjectRef = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
752 | },
753 | {
754 | ProductGroup = ADBDB9201DFEBF0600ED6528 /* Products */;
755 | ProjectRef = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */;
756 | },
757 | {
758 | ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */;
759 | ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;
760 | },
761 | {
762 | ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */;
763 | ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
764 | },
765 | {
766 | ProductGroup = 78C398B11ACF4ADC00677621 /* Products */;
767 | ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
768 | },
769 | {
770 | ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */;
771 | ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
772 | },
773 | {
774 | ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */;
775 | ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
776 | },
777 | {
778 | ProductGroup = 832341B11AAA6A8300B99B32 /* Products */;
779 | ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
780 | },
781 | {
782 | ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */;
783 | ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */;
784 | },
785 | {
786 | ProductGroup = 139FDEE71B06529A00C62182 /* Products */;
787 | ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
788 | },
789 | {
790 | ProductGroup = 146834001AC3E56700842450 /* Products */;
791 | ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */;
792 | },
793 | {
794 | ProductGroup = DCE5EBB622982B9A003067E3 /* Products */;
795 | ProjectRef = DCE5EBB522982B9A003067E3 /* RNCImagePickerIOS.xcodeproj */;
796 | },
797 | );
798 | projectRoot = "";
799 | targets = (
800 | 13B07F861A680F5B00A75B9A /* ImagePickerIOSExample */,
801 | 00E356ED1AD99517003FC87E /* ImagePickerIOSExampleTests */,
802 | 2D02E47A1E0B4A5D006451C7 /* ImagePickerIOSExample-tvOS */,
803 | 2D02E48F1E0B4A5D006451C7 /* ImagePickerIOSExample-tvOSTests */,
804 | );
805 | };
806 | /* End PBXProject section */
807 |
808 | /* Begin PBXReferenceProxy section */
809 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = {
810 | isa = PBXReferenceProxy;
811 | fileType = archive.ar;
812 | path = libRCTActionSheet.a;
813 | remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */;
814 | sourceTree = BUILT_PRODUCTS_DIR;
815 | };
816 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = {
817 | isa = PBXReferenceProxy;
818 | fileType = archive.ar;
819 | path = libRCTGeolocation.a;
820 | remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */;
821 | sourceTree = BUILT_PRODUCTS_DIR;
822 | };
823 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = {
824 | isa = PBXReferenceProxy;
825 | fileType = archive.ar;
826 | path = libRCTImage.a;
827 | remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */;
828 | sourceTree = BUILT_PRODUCTS_DIR;
829 | };
830 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = {
831 | isa = PBXReferenceProxy;
832 | fileType = archive.ar;
833 | path = libRCTNetwork.a;
834 | remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */;
835 | sourceTree = BUILT_PRODUCTS_DIR;
836 | };
837 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = {
838 | isa = PBXReferenceProxy;
839 | fileType = archive.ar;
840 | path = libRCTVibration.a;
841 | remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */;
842 | sourceTree = BUILT_PRODUCTS_DIR;
843 | };
844 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = {
845 | isa = PBXReferenceProxy;
846 | fileType = archive.ar;
847 | path = libRCTSettings.a;
848 | remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */;
849 | sourceTree = BUILT_PRODUCTS_DIR;
850 | };
851 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = {
852 | isa = PBXReferenceProxy;
853 | fileType = archive.ar;
854 | path = libRCTWebSocket.a;
855 | remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */;
856 | sourceTree = BUILT_PRODUCTS_DIR;
857 | };
858 | 146834041AC3E56700842450 /* libReact.a */ = {
859 | isa = PBXReferenceProxy;
860 | fileType = archive.ar;
861 | path = libReact.a;
862 | remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */;
863 | sourceTree = BUILT_PRODUCTS_DIR;
864 | };
865 | 2D16E6721FA4F8DC00B85C8A /* libRCTBlob-tvOS.a */ = {
866 | isa = PBXReferenceProxy;
867 | fileType = archive.ar;
868 | path = "libRCTBlob-tvOS.a";
869 | remoteRef = 2D16E6711FA4F8DC00B85C8A /* PBXContainerItemProxy */;
870 | sourceTree = BUILT_PRODUCTS_DIR;
871 | };
872 | 2D16E6841FA4F8DC00B85C8A /* libfishhook.a */ = {
873 | isa = PBXReferenceProxy;
874 | fileType = archive.ar;
875 | path = libfishhook.a;
876 | remoteRef = 2D16E6831FA4F8DC00B85C8A /* PBXContainerItemProxy */;
877 | sourceTree = BUILT_PRODUCTS_DIR;
878 | };
879 | 2D16E6861FA4F8DC00B85C8A /* libfishhook-tvOS.a */ = {
880 | isa = PBXReferenceProxy;
881 | fileType = archive.ar;
882 | path = "libfishhook-tvOS.a";
883 | remoteRef = 2D16E6851FA4F8DC00B85C8A /* PBXContainerItemProxy */;
884 | sourceTree = BUILT_PRODUCTS_DIR;
885 | };
886 | 2DF0FFDF2056DD460020B375 /* libjsinspector.a */ = {
887 | isa = PBXReferenceProxy;
888 | fileType = archive.ar;
889 | path = libjsinspector.a;
890 | remoteRef = 2DF0FFDE2056DD460020B375 /* PBXContainerItemProxy */;
891 | sourceTree = BUILT_PRODUCTS_DIR;
892 | };
893 | 2DF0FFE12056DD460020B375 /* libjsinspector-tvOS.a */ = {
894 | isa = PBXReferenceProxy;
895 | fileType = archive.ar;
896 | path = "libjsinspector-tvOS.a";
897 | remoteRef = 2DF0FFE02056DD460020B375 /* PBXContainerItemProxy */;
898 | sourceTree = BUILT_PRODUCTS_DIR;
899 | };
900 | 2DF0FFE32056DD460020B375 /* libthird-party.a */ = {
901 | isa = PBXReferenceProxy;
902 | fileType = archive.ar;
903 | path = "libthird-party.a";
904 | remoteRef = 2DF0FFE22056DD460020B375 /* PBXContainerItemProxy */;
905 | sourceTree = BUILT_PRODUCTS_DIR;
906 | };
907 | 2DF0FFE52056DD460020B375 /* libthird-party.a */ = {
908 | isa = PBXReferenceProxy;
909 | fileType = archive.ar;
910 | path = "libthird-party.a";
911 | remoteRef = 2DF0FFE42056DD460020B375 /* PBXContainerItemProxy */;
912 | sourceTree = BUILT_PRODUCTS_DIR;
913 | };
914 | 2DF0FFE72056DD460020B375 /* libdouble-conversion.a */ = {
915 | isa = PBXReferenceProxy;
916 | fileType = archive.ar;
917 | path = "libdouble-conversion.a";
918 | remoteRef = 2DF0FFE62056DD460020B375 /* PBXContainerItemProxy */;
919 | sourceTree = BUILT_PRODUCTS_DIR;
920 | };
921 | 2DF0FFE92056DD460020B375 /* libdouble-conversion.a */ = {
922 | isa = PBXReferenceProxy;
923 | fileType = archive.ar;
924 | path = "libdouble-conversion.a";
925 | remoteRef = 2DF0FFE82056DD460020B375 /* PBXContainerItemProxy */;
926 | sourceTree = BUILT_PRODUCTS_DIR;
927 | };
928 | 2DF0FFEB2056DD460020B375 /* libprivatedata.a */ = {
929 | isa = PBXReferenceProxy;
930 | fileType = archive.ar;
931 | path = libprivatedata.a;
932 | remoteRef = 2DF0FFEA2056DD460020B375 /* PBXContainerItemProxy */;
933 | sourceTree = BUILT_PRODUCTS_DIR;
934 | };
935 | 2DF0FFED2056DD460020B375 /* libprivatedata-tvOS.a */ = {
936 | isa = PBXReferenceProxy;
937 | fileType = archive.ar;
938 | path = "libprivatedata-tvOS.a";
939 | remoteRef = 2DF0FFEC2056DD460020B375 /* PBXContainerItemProxy */;
940 | sourceTree = BUILT_PRODUCTS_DIR;
941 | };
942 | 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = {
943 | isa = PBXReferenceProxy;
944 | fileType = archive.ar;
945 | path = "libRCTImage-tvOS.a";
946 | remoteRef = 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */;
947 | sourceTree = BUILT_PRODUCTS_DIR;
948 | };
949 | 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */ = {
950 | isa = PBXReferenceProxy;
951 | fileType = archive.ar;
952 | path = "libRCTLinking-tvOS.a";
953 | remoteRef = 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */;
954 | sourceTree = BUILT_PRODUCTS_DIR;
955 | };
956 | 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */ = {
957 | isa = PBXReferenceProxy;
958 | fileType = archive.ar;
959 | path = "libRCTNetwork-tvOS.a";
960 | remoteRef = 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */;
961 | sourceTree = BUILT_PRODUCTS_DIR;
962 | };
963 | 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */ = {
964 | isa = PBXReferenceProxy;
965 | fileType = archive.ar;
966 | path = "libRCTSettings-tvOS.a";
967 | remoteRef = 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */;
968 | sourceTree = BUILT_PRODUCTS_DIR;
969 | };
970 | 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */ = {
971 | isa = PBXReferenceProxy;
972 | fileType = archive.ar;
973 | path = "libRCTText-tvOS.a";
974 | remoteRef = 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */;
975 | sourceTree = BUILT_PRODUCTS_DIR;
976 | };
977 | 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */ = {
978 | isa = PBXReferenceProxy;
979 | fileType = archive.ar;
980 | path = "libRCTWebSocket-tvOS.a";
981 | remoteRef = 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */;
982 | sourceTree = BUILT_PRODUCTS_DIR;
983 | };
984 | 3DAD3EA31DF850E9000B6D8A /* libReact.a */ = {
985 | isa = PBXReferenceProxy;
986 | fileType = archive.ar;
987 | path = libReact.a;
988 | remoteRef = 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */;
989 | sourceTree = BUILT_PRODUCTS_DIR;
990 | };
991 | 3DAD3EA51DF850E9000B6D8A /* libyoga.a */ = {
992 | isa = PBXReferenceProxy;
993 | fileType = archive.ar;
994 | path = libyoga.a;
995 | remoteRef = 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */;
996 | sourceTree = BUILT_PRODUCTS_DIR;
997 | };
998 | 3DAD3EA71DF850E9000B6D8A /* libyoga.a */ = {
999 | isa = PBXReferenceProxy;
1000 | fileType = archive.ar;
1001 | path = libyoga.a;
1002 | remoteRef = 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */;
1003 | sourceTree = BUILT_PRODUCTS_DIR;
1004 | };
1005 | 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */ = {
1006 | isa = PBXReferenceProxy;
1007 | fileType = archive.ar;
1008 | path = libcxxreact.a;
1009 | remoteRef = 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */;
1010 | sourceTree = BUILT_PRODUCTS_DIR;
1011 | };
1012 | 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */ = {
1013 | isa = PBXReferenceProxy;
1014 | fileType = archive.ar;
1015 | path = libcxxreact.a;
1016 | remoteRef = 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */;
1017 | sourceTree = BUILT_PRODUCTS_DIR;
1018 | };
1019 | 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */ = {
1020 | isa = PBXReferenceProxy;
1021 | fileType = archive.ar;
1022 | path = libjschelpers.a;
1023 | remoteRef = 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */;
1024 | sourceTree = BUILT_PRODUCTS_DIR;
1025 | };
1026 | 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */ = {
1027 | isa = PBXReferenceProxy;
1028 | fileType = archive.ar;
1029 | path = libjschelpers.a;
1030 | remoteRef = 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */;
1031 | sourceTree = BUILT_PRODUCTS_DIR;
1032 | };
1033 | 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = {
1034 | isa = PBXReferenceProxy;
1035 | fileType = archive.ar;
1036 | path = libRCTAnimation.a;
1037 | remoteRef = 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */;
1038 | sourceTree = BUILT_PRODUCTS_DIR;
1039 | };
1040 | 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */ = {
1041 | isa = PBXReferenceProxy;
1042 | fileType = archive.ar;
1043 | path = libRCTAnimation.a;
1044 | remoteRef = 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */;
1045 | sourceTree = BUILT_PRODUCTS_DIR;
1046 | };
1047 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = {
1048 | isa = PBXReferenceProxy;
1049 | fileType = archive.ar;
1050 | path = libRCTLinking.a;
1051 | remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */;
1052 | sourceTree = BUILT_PRODUCTS_DIR;
1053 | };
1054 | 832341B51AAA6A8300B99B32 /* libRCTText.a */ = {
1055 | isa = PBXReferenceProxy;
1056 | fileType = archive.ar;
1057 | path = libRCTText.a;
1058 | remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */;
1059 | sourceTree = BUILT_PRODUCTS_DIR;
1060 | };
1061 | ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */ = {
1062 | isa = PBXReferenceProxy;
1063 | fileType = archive.ar;
1064 | path = libRCTBlob.a;
1065 | remoteRef = ADBDB9261DFEBF0700ED6528 /* PBXContainerItemProxy */;
1066 | sourceTree = BUILT_PRODUCTS_DIR;
1067 | };
1068 | DCE5EBBA22982B9A003067E3 /* libRNCImagePickerIOS.a */ = {
1069 | isa = PBXReferenceProxy;
1070 | fileType = archive.ar;
1071 | path = libRNCImagePickerIOS.a;
1072 | remoteRef = DCE5EBB922982B9A003067E3 /* PBXContainerItemProxy */;
1073 | sourceTree = BUILT_PRODUCTS_DIR;
1074 | };
1075 | /* End PBXReferenceProxy section */
1076 |
1077 | /* Begin PBXResourcesBuildPhase section */
1078 | 00E356EC1AD99517003FC87E /* Resources */ = {
1079 | isa = PBXResourcesBuildPhase;
1080 | buildActionMask = 2147483647;
1081 | files = (
1082 | );
1083 | runOnlyForDeploymentPostprocessing = 0;
1084 | };
1085 | 13B07F8E1A680F5B00A75B9A /* Resources */ = {
1086 | isa = PBXResourcesBuildPhase;
1087 | buildActionMask = 2147483647;
1088 | files = (
1089 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
1090 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */,
1091 | );
1092 | runOnlyForDeploymentPostprocessing = 0;
1093 | };
1094 | 2D02E4791E0B4A5D006451C7 /* Resources */ = {
1095 | isa = PBXResourcesBuildPhase;
1096 | buildActionMask = 2147483647;
1097 | files = (
1098 | 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */,
1099 | );
1100 | runOnlyForDeploymentPostprocessing = 0;
1101 | };
1102 | 2D02E48E1E0B4A5D006451C7 /* Resources */ = {
1103 | isa = PBXResourcesBuildPhase;
1104 | buildActionMask = 2147483647;
1105 | files = (
1106 | );
1107 | runOnlyForDeploymentPostprocessing = 0;
1108 | };
1109 | /* End PBXResourcesBuildPhase section */
1110 |
1111 | /* Begin PBXShellScriptBuildPhase section */
1112 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
1113 | isa = PBXShellScriptBuildPhase;
1114 | buildActionMask = 2147483647;
1115 | files = (
1116 | );
1117 | inputPaths = (
1118 | );
1119 | name = "Bundle React Native code and images";
1120 | outputPaths = (
1121 | );
1122 | runOnlyForDeploymentPostprocessing = 0;
1123 | shellPath = /bin/sh;
1124 | shellScript = "export NODE_BINARY=node\n../../node_modules/react-native/scripts/react-native-xcode.sh";
1125 | };
1126 | 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = {
1127 | isa = PBXShellScriptBuildPhase;
1128 | buildActionMask = 2147483647;
1129 | files = (
1130 | );
1131 | inputPaths = (
1132 | );
1133 | name = "Bundle React Native Code And Images";
1134 | outputPaths = (
1135 | );
1136 | runOnlyForDeploymentPostprocessing = 0;
1137 | shellPath = /bin/sh;
1138 | shellScript = "export NODE_BINARY=node\n../../node_modules/react-native/scripts/react-native-xcode.sh";
1139 | };
1140 | /* End PBXShellScriptBuildPhase section */
1141 |
1142 | /* Begin PBXSourcesBuildPhase section */
1143 | 00E356EA1AD99517003FC87E /* Sources */ = {
1144 | isa = PBXSourcesBuildPhase;
1145 | buildActionMask = 2147483647;
1146 | files = (
1147 | 00E356F31AD99517003FC87E /* ImagePickerIOSExampleTests.m in Sources */,
1148 | );
1149 | runOnlyForDeploymentPostprocessing = 0;
1150 | };
1151 | 13B07F871A680F5B00A75B9A /* Sources */ = {
1152 | isa = PBXSourcesBuildPhase;
1153 | buildActionMask = 2147483647;
1154 | files = (
1155 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
1156 | 13B07FC11A68108700A75B9A /* main.m in Sources */,
1157 | );
1158 | runOnlyForDeploymentPostprocessing = 0;
1159 | };
1160 | 2D02E4771E0B4A5D006451C7 /* Sources */ = {
1161 | isa = PBXSourcesBuildPhase;
1162 | buildActionMask = 2147483647;
1163 | files = (
1164 | 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */,
1165 | 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */,
1166 | );
1167 | runOnlyForDeploymentPostprocessing = 0;
1168 | };
1169 | 2D02E48C1E0B4A5D006451C7 /* Sources */ = {
1170 | isa = PBXSourcesBuildPhase;
1171 | buildActionMask = 2147483647;
1172 | files = (
1173 | 2DCD954D1E0B4F2C00145EB5 /* ImagePickerIOSExampleTests.m in Sources */,
1174 | );
1175 | runOnlyForDeploymentPostprocessing = 0;
1176 | };
1177 | /* End PBXSourcesBuildPhase section */
1178 |
1179 | /* Begin PBXTargetDependency section */
1180 | 00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
1181 | isa = PBXTargetDependency;
1182 | target = 13B07F861A680F5B00A75B9A /* ImagePickerIOSExample */;
1183 | targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
1184 | };
1185 | 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = {
1186 | isa = PBXTargetDependency;
1187 | target = 2D02E47A1E0B4A5D006451C7 /* ImagePickerIOSExample-tvOS */;
1188 | targetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */;
1189 | };
1190 | /* End PBXTargetDependency section */
1191 |
1192 | /* Begin PBXVariantGroup section */
1193 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = {
1194 | isa = PBXVariantGroup;
1195 | children = (
1196 | 13B07FB21A68108700A75B9A /* Base */,
1197 | );
1198 | name = LaunchScreen.xib;
1199 | path = ImagePickerIOSExample;
1200 | sourceTree = "";
1201 | };
1202 | /* End PBXVariantGroup section */
1203 |
1204 | /* Begin XCBuildConfiguration section */
1205 | 00E356F61AD99517003FC87E /* Debug */ = {
1206 | isa = XCBuildConfiguration;
1207 | buildSettings = {
1208 | BUNDLE_LOADER = "$(TEST_HOST)";
1209 | GCC_PREPROCESSOR_DEFINITIONS = (
1210 | "DEBUG=1",
1211 | "$(inherited)",
1212 | );
1213 | INFOPLIST_FILE = ImagePickerIOSExampleTests/Info.plist;
1214 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
1215 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
1216 | OTHER_LDFLAGS = (
1217 | "-ObjC",
1218 | "-lc++",
1219 | );
1220 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
1221 | PRODUCT_NAME = "$(TARGET_NAME)";
1222 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ImagePickerIOSExample.app/ImagePickerIOSExample";
1223 | };
1224 | name = Debug;
1225 | };
1226 | 00E356F71AD99517003FC87E /* Release */ = {
1227 | isa = XCBuildConfiguration;
1228 | buildSettings = {
1229 | BUNDLE_LOADER = "$(TEST_HOST)";
1230 | COPY_PHASE_STRIP = NO;
1231 | INFOPLIST_FILE = ImagePickerIOSExampleTests/Info.plist;
1232 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
1233 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
1234 | OTHER_LDFLAGS = (
1235 | "-ObjC",
1236 | "-lc++",
1237 | );
1238 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
1239 | PRODUCT_NAME = "$(TARGET_NAME)";
1240 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ImagePickerIOSExample.app/ImagePickerIOSExample";
1241 | };
1242 | name = Release;
1243 | };
1244 | 13B07F941A680F5B00A75B9A /* Debug */ = {
1245 | isa = XCBuildConfiguration;
1246 | buildSettings = {
1247 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
1248 | CURRENT_PROJECT_VERSION = 1;
1249 | DEAD_CODE_STRIPPING = NO;
1250 | INFOPLIST_FILE = ImagePickerIOSExample/Info.plist;
1251 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
1252 | OTHER_LDFLAGS = (
1253 | "$(inherited)",
1254 | "-ObjC",
1255 | "-lc++",
1256 | );
1257 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
1258 | PRODUCT_NAME = ImagePickerIOSExample;
1259 | VERSIONING_SYSTEM = "apple-generic";
1260 | };
1261 | name = Debug;
1262 | };
1263 | 13B07F951A680F5B00A75B9A /* Release */ = {
1264 | isa = XCBuildConfiguration;
1265 | buildSettings = {
1266 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
1267 | CURRENT_PROJECT_VERSION = 1;
1268 | INFOPLIST_FILE = ImagePickerIOSExample/Info.plist;
1269 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
1270 | OTHER_LDFLAGS = (
1271 | "$(inherited)",
1272 | "-ObjC",
1273 | "-lc++",
1274 | );
1275 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
1276 | PRODUCT_NAME = ImagePickerIOSExample;
1277 | VERSIONING_SYSTEM = "apple-generic";
1278 | };
1279 | name = Release;
1280 | };
1281 | 2D02E4971E0B4A5E006451C7 /* Debug */ = {
1282 | isa = XCBuildConfiguration;
1283 | buildSettings = {
1284 | ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
1285 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
1286 | CLANG_ANALYZER_NONNULL = YES;
1287 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
1288 | CLANG_WARN_INFINITE_RECURSION = YES;
1289 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
1290 | DEBUG_INFORMATION_FORMAT = dwarf;
1291 | ENABLE_TESTABILITY = YES;
1292 | GCC_NO_COMMON_BLOCKS = YES;
1293 | INFOPLIST_FILE = "ImagePickerIOSExample-tvOS/Info.plist";
1294 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
1295 | OTHER_LDFLAGS = (
1296 | "-ObjC",
1297 | "-lc++",
1298 | );
1299 | PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.ImagePickerIOSExample-tvOS";
1300 | PRODUCT_NAME = "$(TARGET_NAME)";
1301 | SDKROOT = appletvos;
1302 | TARGETED_DEVICE_FAMILY = 3;
1303 | TVOS_DEPLOYMENT_TARGET = 9.2;
1304 | };
1305 | name = Debug;
1306 | };
1307 | 2D02E4981E0B4A5E006451C7 /* Release */ = {
1308 | isa = XCBuildConfiguration;
1309 | buildSettings = {
1310 | ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
1311 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
1312 | CLANG_ANALYZER_NONNULL = YES;
1313 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
1314 | CLANG_WARN_INFINITE_RECURSION = YES;
1315 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
1316 | COPY_PHASE_STRIP = NO;
1317 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
1318 | GCC_NO_COMMON_BLOCKS = YES;
1319 | INFOPLIST_FILE = "ImagePickerIOSExample-tvOS/Info.plist";
1320 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
1321 | OTHER_LDFLAGS = (
1322 | "-ObjC",
1323 | "-lc++",
1324 | );
1325 | PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.ImagePickerIOSExample-tvOS";
1326 | PRODUCT_NAME = "$(TARGET_NAME)";
1327 | SDKROOT = appletvos;
1328 | TARGETED_DEVICE_FAMILY = 3;
1329 | TVOS_DEPLOYMENT_TARGET = 9.2;
1330 | };
1331 | name = Release;
1332 | };
1333 | 2D02E4991E0B4A5E006451C7 /* Debug */ = {
1334 | isa = XCBuildConfiguration;
1335 | buildSettings = {
1336 | BUNDLE_LOADER = "$(TEST_HOST)";
1337 | CLANG_ANALYZER_NONNULL = YES;
1338 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
1339 | CLANG_WARN_INFINITE_RECURSION = YES;
1340 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
1341 | DEBUG_INFORMATION_FORMAT = dwarf;
1342 | ENABLE_TESTABILITY = YES;
1343 | GCC_NO_COMMON_BLOCKS = YES;
1344 | INFOPLIST_FILE = "ImagePickerIOSExample-tvOSTests/Info.plist";
1345 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
1346 | OTHER_LDFLAGS = (
1347 | "-ObjC",
1348 | "-lc++",
1349 | );
1350 | PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.ImagePickerIOSExample-tvOSTests";
1351 | PRODUCT_NAME = "$(TARGET_NAME)";
1352 | SDKROOT = appletvos;
1353 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ImagePickerIOSExample-tvOS.app/ImagePickerIOSExample-tvOS";
1354 | TVOS_DEPLOYMENT_TARGET = 10.1;
1355 | };
1356 | name = Debug;
1357 | };
1358 | 2D02E49A1E0B4A5E006451C7 /* Release */ = {
1359 | isa = XCBuildConfiguration;
1360 | buildSettings = {
1361 | BUNDLE_LOADER = "$(TEST_HOST)";
1362 | CLANG_ANALYZER_NONNULL = YES;
1363 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
1364 | CLANG_WARN_INFINITE_RECURSION = YES;
1365 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
1366 | COPY_PHASE_STRIP = NO;
1367 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
1368 | GCC_NO_COMMON_BLOCKS = YES;
1369 | INFOPLIST_FILE = "ImagePickerIOSExample-tvOSTests/Info.plist";
1370 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
1371 | OTHER_LDFLAGS = (
1372 | "-ObjC",
1373 | "-lc++",
1374 | );
1375 | PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.ImagePickerIOSExample-tvOSTests";
1376 | PRODUCT_NAME = "$(TARGET_NAME)";
1377 | SDKROOT = appletvos;
1378 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ImagePickerIOSExample-tvOS.app/ImagePickerIOSExample-tvOS";
1379 | TVOS_DEPLOYMENT_TARGET = 10.1;
1380 | };
1381 | name = Release;
1382 | };
1383 | 83CBBA201A601CBA00E9B192 /* Debug */ = {
1384 | isa = XCBuildConfiguration;
1385 | buildSettings = {
1386 | ALWAYS_SEARCH_USER_PATHS = NO;
1387 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
1388 | CLANG_CXX_LIBRARY = "libc++";
1389 | CLANG_ENABLE_MODULES = YES;
1390 | CLANG_ENABLE_OBJC_ARC = YES;
1391 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
1392 | CLANG_WARN_BOOL_CONVERSION = YES;
1393 | CLANG_WARN_COMMA = YES;
1394 | CLANG_WARN_CONSTANT_CONVERSION = YES;
1395 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
1396 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
1397 | CLANG_WARN_EMPTY_BODY = YES;
1398 | CLANG_WARN_ENUM_CONVERSION = YES;
1399 | CLANG_WARN_INFINITE_RECURSION = YES;
1400 | CLANG_WARN_INT_CONVERSION = YES;
1401 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
1402 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
1403 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
1404 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
1405 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
1406 | CLANG_WARN_STRICT_PROTOTYPES = YES;
1407 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
1408 | CLANG_WARN_UNREACHABLE_CODE = YES;
1409 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
1410 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
1411 | COPY_PHASE_STRIP = NO;
1412 | ENABLE_STRICT_OBJC_MSGSEND = YES;
1413 | ENABLE_TESTABILITY = YES;
1414 | GCC_C_LANGUAGE_STANDARD = gnu99;
1415 | GCC_DYNAMIC_NO_PIC = NO;
1416 | GCC_NO_COMMON_BLOCKS = YES;
1417 | GCC_OPTIMIZATION_LEVEL = 0;
1418 | GCC_PREPROCESSOR_DEFINITIONS = (
1419 | "DEBUG=1",
1420 | "$(inherited)",
1421 | );
1422 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
1423 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
1424 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
1425 | GCC_WARN_UNDECLARED_SELECTOR = YES;
1426 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
1427 | GCC_WARN_UNUSED_FUNCTION = YES;
1428 | GCC_WARN_UNUSED_VARIABLE = YES;
1429 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
1430 | MTL_ENABLE_DEBUG_INFO = YES;
1431 | ONLY_ACTIVE_ARCH = YES;
1432 | SDKROOT = iphoneos;
1433 | };
1434 | name = Debug;
1435 | };
1436 | 83CBBA211A601CBA00E9B192 /* Release */ = {
1437 | isa = XCBuildConfiguration;
1438 | buildSettings = {
1439 | ALWAYS_SEARCH_USER_PATHS = NO;
1440 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
1441 | CLANG_CXX_LIBRARY = "libc++";
1442 | CLANG_ENABLE_MODULES = YES;
1443 | CLANG_ENABLE_OBJC_ARC = YES;
1444 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
1445 | CLANG_WARN_BOOL_CONVERSION = YES;
1446 | CLANG_WARN_COMMA = YES;
1447 | CLANG_WARN_CONSTANT_CONVERSION = YES;
1448 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
1449 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
1450 | CLANG_WARN_EMPTY_BODY = YES;
1451 | CLANG_WARN_ENUM_CONVERSION = YES;
1452 | CLANG_WARN_INFINITE_RECURSION = YES;
1453 | CLANG_WARN_INT_CONVERSION = YES;
1454 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
1455 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
1456 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
1457 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
1458 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
1459 | CLANG_WARN_STRICT_PROTOTYPES = YES;
1460 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
1461 | CLANG_WARN_UNREACHABLE_CODE = YES;
1462 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
1463 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
1464 | COPY_PHASE_STRIP = YES;
1465 | ENABLE_NS_ASSERTIONS = NO;
1466 | ENABLE_STRICT_OBJC_MSGSEND = YES;
1467 | GCC_C_LANGUAGE_STANDARD = gnu99;
1468 | GCC_NO_COMMON_BLOCKS = YES;
1469 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
1470 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
1471 | GCC_WARN_UNDECLARED_SELECTOR = YES;
1472 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
1473 | GCC_WARN_UNUSED_FUNCTION = YES;
1474 | GCC_WARN_UNUSED_VARIABLE = YES;
1475 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
1476 | MTL_ENABLE_DEBUG_INFO = NO;
1477 | SDKROOT = iphoneos;
1478 | VALIDATE_PRODUCT = YES;
1479 | };
1480 | name = Release;
1481 | };
1482 | /* End XCBuildConfiguration section */
1483 |
1484 | /* Begin XCConfigurationList section */
1485 | 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "ImagePickerIOSExampleTests" */ = {
1486 | isa = XCConfigurationList;
1487 | buildConfigurations = (
1488 | 00E356F61AD99517003FC87E /* Debug */,
1489 | 00E356F71AD99517003FC87E /* Release */,
1490 | );
1491 | defaultConfigurationIsVisible = 0;
1492 | defaultConfigurationName = Release;
1493 | };
1494 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "ImagePickerIOSExample" */ = {
1495 | isa = XCConfigurationList;
1496 | buildConfigurations = (
1497 | 13B07F941A680F5B00A75B9A /* Debug */,
1498 | 13B07F951A680F5B00A75B9A /* Release */,
1499 | );
1500 | defaultConfigurationIsVisible = 0;
1501 | defaultConfigurationName = Release;
1502 | };
1503 | 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "ImagePickerIOSExample-tvOS" */ = {
1504 | isa = XCConfigurationList;
1505 | buildConfigurations = (
1506 | 2D02E4971E0B4A5E006451C7 /* Debug */,
1507 | 2D02E4981E0B4A5E006451C7 /* Release */,
1508 | );
1509 | defaultConfigurationIsVisible = 0;
1510 | defaultConfigurationName = Release;
1511 | };
1512 | 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "ImagePickerIOSExample-tvOSTests" */ = {
1513 | isa = XCConfigurationList;
1514 | buildConfigurations = (
1515 | 2D02E4991E0B4A5E006451C7 /* Debug */,
1516 | 2D02E49A1E0B4A5E006451C7 /* Release */,
1517 | );
1518 | defaultConfigurationIsVisible = 0;
1519 | defaultConfigurationName = Release;
1520 | };
1521 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "ImagePickerIOSExample" */ = {
1522 | isa = XCConfigurationList;
1523 | buildConfigurations = (
1524 | 83CBBA201A601CBA00E9B192 /* Debug */,
1525 | 83CBBA211A601CBA00E9B192 /* Release */,
1526 | );
1527 | defaultConfigurationIsVisible = 0;
1528 | defaultConfigurationName = Release;
1529 | };
1530 | /* End XCConfigurationList section */
1531 | };
1532 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
1533 | }
1534 |
--------------------------------------------------------------------------------
/example/ios/ImagePickerIOSExample.xcodeproj/xcshareddata/xcschemes/ImagePickerIOSExample-tvOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
43 |
49 |
50 |
51 |
52 |
53 |
58 |
59 |
61 |
67 |
68 |
69 |
70 |
71 |
77 |
78 |
79 |
80 |
81 |
82 |
92 |
94 |
100 |
101 |
102 |
103 |
104 |
105 |
111 |
113 |
119 |
120 |
121 |
122 |
124 |
125 |
128 |
129 |
130 |
--------------------------------------------------------------------------------
/example/ios/ImagePickerIOSExample.xcodeproj/xcshareddata/xcschemes/ImagePickerIOSExample.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
43 |
49 |
50 |
51 |
52 |
53 |
58 |
59 |
61 |
67 |
68 |
69 |
70 |
71 |
77 |
78 |
79 |
80 |
81 |
82 |
92 |
94 |
100 |
101 |
102 |
103 |
104 |
105 |
111 |
113 |
119 |
120 |
121 |
122 |
124 |
125 |
128 |
129 |
130 |
--------------------------------------------------------------------------------
/example/ios/ImagePickerIOSExample/AppDelegate.h:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | #import
9 | #import
10 |
11 | @interface AppDelegate : UIResponder
12 |
13 | @property (nonatomic, strong) UIWindow *window;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/example/ios/ImagePickerIOSExample/AppDelegate.m:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | #import "AppDelegate.h"
9 |
10 | #import
11 | #import
12 | #import
13 |
14 | @implementation AppDelegate
15 |
16 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
17 | {
18 | RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
19 | RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
20 | moduleName:@"ImagePickerIOSExample"
21 | initialProperties:nil];
22 |
23 | rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
24 |
25 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
26 | UIViewController *rootViewController = [UIViewController new];
27 | rootViewController.view = rootView;
28 | self.window.rootViewController = rootViewController;
29 | [self.window makeKeyAndVisible];
30 | return YES;
31 | }
32 |
33 | - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
34 | {
35 | #if DEBUG
36 | return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"example/index" fallbackResource:nil];
37 | #else
38 | return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
39 | #endif
40 | }
41 |
42 | @end
43 |
--------------------------------------------------------------------------------
/example/ios/ImagePickerIOSExample/Base.lproj/LaunchScreen.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
21 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/example/ios/ImagePickerIOSExample/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "29x29",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "29x29",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "40x40",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "40x40",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "60x60",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "60x60",
31 | "scale" : "3x"
32 | }
33 | ],
34 | "info" : {
35 | "version" : 1,
36 | "author" : "xcode"
37 | }
38 | }
--------------------------------------------------------------------------------
/example/ios/ImagePickerIOSExample/Images.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/example/ios/ImagePickerIOSExample/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleDisplayName
8 | ImagePickerIOSExample
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
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | 1
25 | LSRequiresIPhoneOS
26 |
27 | NSLocationWhenInUseUsageDescription
28 |
29 | UILaunchStoryboardName
30 | LaunchScreen
31 | UIRequiredDeviceCapabilities
32 |
33 | armv7
34 |
35 | UISupportedInterfaceOrientations
36 |
37 | UIInterfaceOrientationPortrait
38 | UIInterfaceOrientationLandscapeLeft
39 | UIInterfaceOrientationLandscapeRight
40 |
41 | UIViewControllerBasedStatusBarAppearance
42 |
43 | NSLocationWhenInUseUsageDescription
44 |
45 | NSAppTransportSecurity
46 |
47 |
48 | NSAllowsArbitraryLoads
49 |
50 | NSExceptionDomains
51 |
52 | localhost
53 |
54 | NSExceptionAllowsInsecureHTTPLoads
55 |
56 |
57 |
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/example/ios/ImagePickerIOSExample/main.m:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | #import
9 |
10 | #import "AppDelegate.h"
11 |
12 | int main(int argc, char * argv[]) {
13 | @autoreleasepool {
14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/example/ios/ImagePickerIOSExampleTests/ImagePickerIOSExampleTests.m:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | #import
9 | #import
10 |
11 | #import
12 | #import
13 |
14 | #define TIMEOUT_SECONDS 600
15 | #define TEXT_TO_LOOK_FOR @"Welcome to React Native!"
16 |
17 | @interface ImagePickerIOSExampleTests : XCTestCase
18 |
19 | @end
20 |
21 | @implementation ImagePickerIOSExampleTests
22 |
23 | - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test
24 | {
25 | if (test(view)) {
26 | return YES;
27 | }
28 | for (UIView *subview in [view subviews]) {
29 | if ([self findSubviewInView:subview matching:test]) {
30 | return YES;
31 | }
32 | }
33 | return NO;
34 | }
35 |
36 | - (void)testRendersWelcomeScreen
37 | {
38 | UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController];
39 | NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS];
40 | BOOL foundElement = NO;
41 |
42 | __block NSString *redboxError = nil;
43 | RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
44 | if (level >= RCTLogLevelError) {
45 | redboxError = message;
46 | }
47 | });
48 |
49 | while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {
50 | [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
51 | [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
52 |
53 | foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) {
54 | if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
55 | return YES;
56 | }
57 | return NO;
58 | }];
59 | }
60 |
61 | RCTSetLogFunction(RCTDefaultLogFunction);
62 |
63 | XCTAssertNil(redboxError, @"RedBox error: %@", redboxError);
64 | XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
65 | }
66 |
67 |
68 | @end
69 |
--------------------------------------------------------------------------------
/example/ios/ImagePickerIOSExampleTests/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 |
--------------------------------------------------------------------------------
/example/metro.config.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | *
7 | * @format
8 | */
9 |
10 | module.exports = {
11 | transformer: {
12 | getTransformOptions: async () => ({
13 | transform: {
14 | experimentalImportSupport: false,
15 | inlineRequires: false,
16 | },
17 | }),
18 | },
19 | };
20 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 |
2 | import { NativeModules } from 'react-native';
3 |
4 | const { RNCImagePickerIOS } = NativeModules;
5 |
6 | export default RNCImagePickerIOS;
7 |
--------------------------------------------------------------------------------
/ios/RNCImagePickerIOS.h:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | #import
9 |
10 | @interface RNCImagePickerIOS : NSObject
11 |
12 | @end
13 |
--------------------------------------------------------------------------------
/ios/RNCImagePickerIOS.m:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | *
7 | */
8 |
9 | #import "RNCImagePickerIOS.h"
10 |
11 | #import
12 | #import
13 |
14 | #import
15 | #import
16 | #import
17 | #import
18 |
19 | @interface RCTImagePickerController : UIImagePickerController
20 |
21 | @property (nonatomic, assign) BOOL unmirrorFrontFacingCamera;
22 |
23 | @end
24 |
25 | @implementation RCTImagePickerController
26 |
27 | @end
28 |
29 | @interface RNCImagePickerIOS ()
30 |
31 | @end
32 |
33 | @implementation RNCImagePickerIOS
34 | {
35 | NSMutableArray *_pickers;
36 | NSMutableArray *_pickerCallbacks;
37 | NSMutableArray *_pickerCancelCallbacks;
38 | }
39 |
40 | RCT_EXPORT_MODULE();
41 |
42 | @synthesize bridge = _bridge;
43 |
44 | - (id)init
45 | {
46 | if (self = [super init]) {
47 | [[NSNotificationCenter defaultCenter] addObserver:self
48 | selector:@selector(cameraChanged:)
49 | name:@"AVCaptureDeviceDidStartRunningNotification"
50 | object:nil];
51 | }
52 | return self;
53 | }
54 |
55 | + (BOOL)requiresMainQueueSetup
56 | {
57 | return NO;
58 | }
59 |
60 | - (void)dealloc
61 | {
62 | [[NSNotificationCenter defaultCenter] removeObserver:self name:@"AVCaptureDeviceDidStartRunningNotification" object:nil];
63 | }
64 |
65 | - (dispatch_queue_t)methodQueue
66 | {
67 | return dispatch_get_main_queue();
68 | }
69 |
70 | RCT_EXPORT_METHOD(canRecordVideos:(RCTResponseSenderBlock)callback)
71 | {
72 | NSArray *availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
73 | callback(@[@([availableMediaTypes containsObject:(NSString *)kUTTypeMovie])]);
74 | }
75 |
76 | RCT_EXPORT_METHOD(canUseCamera:(RCTResponseSenderBlock)callback)
77 | {
78 | callback(@[@([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])]);
79 | }
80 |
81 | RCT_EXPORT_METHOD(openCameraDialog:(NSDictionary *)config
82 | successCallback:(RCTResponseSenderBlock)callback
83 | cancelCallback:(RCTResponseSenderBlock)cancelCallback)
84 | {
85 | if (RCTRunningInAppExtension()) {
86 | cancelCallback(@[@"Camera access is unavailable in an app extension"]);
87 | return;
88 | }
89 |
90 | RCTImagePickerController *imagePicker = [RCTImagePickerController new];
91 | imagePicker.delegate = self;
92 | imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
93 | NSArray *availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
94 | imagePicker.mediaTypes = availableMediaTypes;
95 | imagePicker.unmirrorFrontFacingCamera = [RCTConvert BOOL:config[@"unmirrorFrontFacingCamera"]];
96 |
97 | if ([RCTConvert BOOL:config[@"videoMode"]]) {
98 | imagePicker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeVideo;
99 | }
100 |
101 | [self _presentPicker:imagePicker
102 | successCallback:callback
103 | cancelCallback:cancelCallback];
104 | }
105 |
106 | RCT_EXPORT_METHOD(openSelectDialog:(NSDictionary *)config
107 | successCallback:(RCTResponseSenderBlock)callback
108 | cancelCallback:(RCTResponseSenderBlock)cancelCallback)
109 | {
110 | if (RCTRunningInAppExtension()) {
111 | cancelCallback(@[@"Image picker is currently unavailable in an app extension"]);
112 | return;
113 | }
114 |
115 | UIImagePickerController *imagePicker = [UIImagePickerController new];
116 | imagePicker.delegate = self;
117 | imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
118 |
119 | NSMutableArray *allowedTypes = [NSMutableArray new];
120 | if ([RCTConvert BOOL:config[@"showImages"]]) {
121 | [allowedTypes addObject:(NSString *)kUTTypeImage];
122 | }
123 | if ([RCTConvert BOOL:config[@"showVideos"]]) {
124 | [allowedTypes addObject:(NSString *)kUTTypeMovie];
125 | }
126 |
127 | imagePicker.mediaTypes = allowedTypes;
128 |
129 | [self _presentPicker:imagePicker
130 | successCallback:callback
131 | cancelCallback:cancelCallback];
132 | }
133 |
134 | - (void)imagePickerController:(UIImagePickerController *)picker
135 | didFinishPickingMediaWithInfo:(NSDictionary *)info
136 | {
137 | NSString *mediaType = info[UIImagePickerControllerMediaType];
138 | BOOL isMovie = [mediaType isEqualToString:(NSString *)kUTTypeMovie];
139 | NSString *key = isMovie ? UIImagePickerControllerMediaURL : UIImagePickerControllerReferenceURL;
140 | NSURL *imageURL = info[key];
141 | UIImage *image = info[UIImagePickerControllerOriginalImage];
142 | NSNumber *width = 0;
143 | NSNumber *height = 0;
144 | if (image) {
145 | height = @(image.size.height);
146 | width = @(image.size.width);
147 | }
148 | if (imageURL) {
149 | [self _dismissPicker:picker args:@[imageURL.absoluteString, RCTNullIfNil(height), RCTNullIfNil(width)]];
150 | return;
151 | }
152 |
153 | // This is a newly taken image, and doesn't have a URL yet.
154 | // We need to save it to the image store first.
155 | UIImage *originalImage = info[UIImagePickerControllerOriginalImage];
156 |
157 | // WARNING: Using ImageStoreManager may cause a memory leak because the
158 | // image isn't automatically removed from store once we're done using it.
159 | [_bridge.imageStoreManager storeImage:originalImage withBlock:^(NSString *tempImageTag) {
160 | [self _dismissPicker:picker args:tempImageTag ? @[tempImageTag, RCTNullIfNil(height), RCTNullIfNil(width)] : nil];
161 | }];
162 | }
163 |
164 | - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
165 | {
166 | [self _dismissPicker:picker args:nil];
167 | }
168 |
169 | - (void)_presentPicker:(UIImagePickerController *)imagePicker
170 | successCallback:(RCTResponseSenderBlock)callback
171 | cancelCallback:(RCTResponseSenderBlock)cancelCallback
172 | {
173 | if (!_pickers) {
174 | _pickers = [NSMutableArray new];
175 | _pickerCallbacks = [NSMutableArray new];
176 | _pickerCancelCallbacks = [NSMutableArray new];
177 | }
178 |
179 | [_pickers addObject:imagePicker];
180 | [_pickerCallbacks addObject:callback];
181 | [_pickerCancelCallbacks addObject:cancelCallback];
182 |
183 | UIViewController *rootViewController = RCTPresentedViewController();
184 | [rootViewController presentViewController:imagePicker animated:YES completion:nil];
185 | }
186 |
187 | - (void)_dismissPicker:(UIImagePickerController *)picker args:(NSArray *)args
188 | {
189 | NSUInteger index = [_pickers indexOfObject:picker];
190 | if (index == NSNotFound) {
191 | // This happens if the user selects multiple items in succession.
192 | return;
193 | }
194 |
195 | RCTResponseSenderBlock successCallback = _pickerCallbacks[index];
196 | RCTResponseSenderBlock cancelCallback = _pickerCancelCallbacks[index];
197 |
198 | [_pickers removeObjectAtIndex:index];
199 | [_pickerCallbacks removeObjectAtIndex:index];
200 | [_pickerCancelCallbacks removeObjectAtIndex:index];
201 |
202 | UIViewController *rootViewController = RCTPresentedViewController();
203 | [rootViewController dismissViewControllerAnimated:YES completion:nil];
204 |
205 | if (args) {
206 | successCallback(args);
207 | } else {
208 | cancelCallback(@[]);
209 | }
210 | }
211 |
212 | - (void)cameraChanged:(NSNotification *)notification
213 | {
214 | for (UIImagePickerController *picker in _pickers) {
215 | if ([picker isKindOfClass:[RCTImagePickerController class]]
216 | && ((RCTImagePickerController *)picker).unmirrorFrontFacingCamera
217 | && picker.cameraDevice == UIImagePickerControllerCameraDeviceFront) {
218 | picker.cameraViewTransform = CGAffineTransformScale(CGAffineTransformIdentity, -1, 1);
219 | } else {
220 | picker.cameraViewTransform = CGAffineTransformIdentity;
221 | }
222 | }
223 | }
224 |
225 | @end
226 |
--------------------------------------------------------------------------------
/ios/RNCImagePickerIOS.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | DCFDE780229830EC0098D630 /* RNCImagePickerIOS.m in Sources */ = {isa = PBXBuildFile; fileRef = DCFDE77F229830EC0098D630 /* RNCImagePickerIOS.m */; };
11 | /* End PBXBuildFile section */
12 |
13 | /* Begin PBXCopyFilesBuildPhase section */
14 | 58B511D91A9E6C8500147676 /* CopyFiles */ = {
15 | isa = PBXCopyFilesBuildPhase;
16 | buildActionMask = 2147483647;
17 | dstPath = "include/$(PRODUCT_NAME)";
18 | dstSubfolderSpec = 16;
19 | files = (
20 | );
21 | runOnlyForDeploymentPostprocessing = 0;
22 | };
23 | /* End PBXCopyFilesBuildPhase section */
24 |
25 | /* Begin PBXFileReference section */
26 | 134814201AA4EA6300B7C361 /* libRNCImagePickerIOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRNCImagePickerIOS.a; sourceTree = BUILT_PRODUCTS_DIR; };
27 | DCFDE77E229830DE0098D630 /* RNCImagePickerIOS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RNCImagePickerIOS.h; sourceTree = ""; };
28 | DCFDE77F229830EC0098D630 /* RNCImagePickerIOS.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RNCImagePickerIOS.m; sourceTree = ""; };
29 | /* End PBXFileReference section */
30 |
31 | /* Begin PBXFrameworksBuildPhase section */
32 | 58B511D81A9E6C8500147676 /* Frameworks */ = {
33 | isa = PBXFrameworksBuildPhase;
34 | buildActionMask = 2147483647;
35 | files = (
36 | );
37 | runOnlyForDeploymentPostprocessing = 0;
38 | };
39 | /* End PBXFrameworksBuildPhase section */
40 |
41 | /* Begin PBXGroup section */
42 | 134814211AA4EA7D00B7C361 /* Products */ = {
43 | isa = PBXGroup;
44 | children = (
45 | 134814201AA4EA6300B7C361 /* libRNCImagePickerIOS.a */,
46 | );
47 | name = Products;
48 | sourceTree = "";
49 | };
50 | 58B511D21A9E6C8500147676 = {
51 | isa = PBXGroup;
52 | children = (
53 | DCFDE77E229830DE0098D630 /* RNCImagePickerIOS.h */,
54 | DCFDE77F229830EC0098D630 /* RNCImagePickerIOS.m */,
55 | 134814211AA4EA7D00B7C361 /* Products */,
56 | );
57 | sourceTree = "";
58 | };
59 | /* End PBXGroup section */
60 |
61 | /* Begin PBXNativeTarget section */
62 | 58B511DA1A9E6C8500147676 /* RNCImagePickerIOS */ = {
63 | isa = PBXNativeTarget;
64 | buildConfigurationList = 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "RNCImagePickerIOS" */;
65 | buildPhases = (
66 | 58B511D71A9E6C8500147676 /* Sources */,
67 | 58B511D81A9E6C8500147676 /* Frameworks */,
68 | 58B511D91A9E6C8500147676 /* CopyFiles */,
69 | );
70 | buildRules = (
71 | );
72 | dependencies = (
73 | );
74 | name = RNCImagePickerIOS;
75 | productName = RCTDataManager;
76 | productReference = 134814201AA4EA6300B7C361 /* libRNCImagePickerIOS.a */;
77 | productType = "com.apple.product-type.library.static";
78 | };
79 | /* End PBXNativeTarget section */
80 |
81 | /* Begin PBXProject section */
82 | 58B511D31A9E6C8500147676 /* Project object */ = {
83 | isa = PBXProject;
84 | attributes = {
85 | LastUpgradeCheck = 0830;
86 | ORGANIZATIONNAME = Facebook;
87 | TargetAttributes = {
88 | 58B511DA1A9E6C8500147676 = {
89 | CreatedOnToolsVersion = 6.1.1;
90 | };
91 | };
92 | };
93 | buildConfigurationList = 58B511D61A9E6C8500147676 /* Build configuration list for PBXProject "RNCImagePickerIOS" */;
94 | compatibilityVersion = "Xcode 3.2";
95 | developmentRegion = English;
96 | hasScannedForEncodings = 0;
97 | knownRegions = (
98 | English,
99 | en,
100 | );
101 | mainGroup = 58B511D21A9E6C8500147676;
102 | productRefGroup = 58B511D21A9E6C8500147676;
103 | projectDirPath = "";
104 | projectRoot = "";
105 | targets = (
106 | 58B511DA1A9E6C8500147676 /* RNCImagePickerIOS */,
107 | );
108 | };
109 | /* End PBXProject section */
110 |
111 | /* Begin PBXSourcesBuildPhase section */
112 | 58B511D71A9E6C8500147676 /* Sources */ = {
113 | isa = PBXSourcesBuildPhase;
114 | buildActionMask = 2147483647;
115 | files = (
116 | DCFDE780229830EC0098D630 /* RNCImagePickerIOS.m in Sources */,
117 | );
118 | runOnlyForDeploymentPostprocessing = 0;
119 | };
120 | /* End PBXSourcesBuildPhase section */
121 |
122 | /* Begin XCBuildConfiguration section */
123 | 58B511ED1A9E6C8500147676 /* Debug */ = {
124 | isa = XCBuildConfiguration;
125 | buildSettings = {
126 | ALWAYS_SEARCH_USER_PATHS = NO;
127 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
128 | CLANG_CXX_LIBRARY = "libc++";
129 | CLANG_ENABLE_MODULES = YES;
130 | CLANG_ENABLE_OBJC_ARC = YES;
131 | CLANG_WARN_BOOL_CONVERSION = YES;
132 | CLANG_WARN_CONSTANT_CONVERSION = YES;
133 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
134 | CLANG_WARN_EMPTY_BODY = YES;
135 | CLANG_WARN_ENUM_CONVERSION = YES;
136 | CLANG_WARN_INFINITE_RECURSION = YES;
137 | CLANG_WARN_INT_CONVERSION = YES;
138 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
139 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
140 | CLANG_WARN_UNREACHABLE_CODE = YES;
141 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
142 | COPY_PHASE_STRIP = NO;
143 | ENABLE_STRICT_OBJC_MSGSEND = YES;
144 | ENABLE_TESTABILITY = YES;
145 | GCC_C_LANGUAGE_STANDARD = gnu99;
146 | GCC_DYNAMIC_NO_PIC = NO;
147 | GCC_NO_COMMON_BLOCKS = YES;
148 | GCC_OPTIMIZATION_LEVEL = 0;
149 | GCC_PREPROCESSOR_DEFINITIONS = (
150 | "DEBUG=1",
151 | "$(inherited)",
152 | );
153 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
154 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
155 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
156 | GCC_WARN_UNDECLARED_SELECTOR = YES;
157 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
158 | GCC_WARN_UNUSED_FUNCTION = YES;
159 | GCC_WARN_UNUSED_VARIABLE = YES;
160 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
161 | MTL_ENABLE_DEBUG_INFO = YES;
162 | ONLY_ACTIVE_ARCH = YES;
163 | SDKROOT = iphoneos;
164 | };
165 | name = Debug;
166 | };
167 | 58B511EE1A9E6C8500147676 /* Release */ = {
168 | isa = XCBuildConfiguration;
169 | buildSettings = {
170 | ALWAYS_SEARCH_USER_PATHS = NO;
171 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
172 | CLANG_CXX_LIBRARY = "libc++";
173 | CLANG_ENABLE_MODULES = YES;
174 | CLANG_ENABLE_OBJC_ARC = YES;
175 | CLANG_WARN_BOOL_CONVERSION = YES;
176 | CLANG_WARN_CONSTANT_CONVERSION = YES;
177 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
178 | CLANG_WARN_EMPTY_BODY = YES;
179 | CLANG_WARN_ENUM_CONVERSION = YES;
180 | CLANG_WARN_INFINITE_RECURSION = YES;
181 | CLANG_WARN_INT_CONVERSION = YES;
182 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
183 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
184 | CLANG_WARN_UNREACHABLE_CODE = YES;
185 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
186 | COPY_PHASE_STRIP = YES;
187 | ENABLE_NS_ASSERTIONS = NO;
188 | ENABLE_STRICT_OBJC_MSGSEND = YES;
189 | GCC_C_LANGUAGE_STANDARD = gnu99;
190 | GCC_NO_COMMON_BLOCKS = YES;
191 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
192 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
193 | GCC_WARN_UNDECLARED_SELECTOR = YES;
194 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
195 | GCC_WARN_UNUSED_FUNCTION = YES;
196 | GCC_WARN_UNUSED_VARIABLE = YES;
197 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
198 | MTL_ENABLE_DEBUG_INFO = NO;
199 | SDKROOT = iphoneos;
200 | VALIDATE_PRODUCT = YES;
201 | };
202 | name = Release;
203 | };
204 | 58B511F01A9E6C8500147676 /* Debug */ = {
205 | isa = XCBuildConfiguration;
206 | buildSettings = {
207 | HEADER_SEARCH_PATHS = (
208 | "$(inherited)",
209 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
210 | "$(SRCROOT)/../../../React/**",
211 | "$(SRCROOT)/../../react-native/React/**",
212 | );
213 | LIBRARY_SEARCH_PATHS = "$(inherited)";
214 | OTHER_LDFLAGS = "-ObjC";
215 | PRODUCT_NAME = RNCImagePickerIOS;
216 | SKIP_INSTALL = YES;
217 | };
218 | name = Debug;
219 | };
220 | 58B511F11A9E6C8500147676 /* Release */ = {
221 | isa = XCBuildConfiguration;
222 | buildSettings = {
223 | HEADER_SEARCH_PATHS = (
224 | "$(inherited)",
225 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
226 | "$(SRCROOT)/../../../React/**",
227 | "$(SRCROOT)/../../react-native/React/**",
228 | );
229 | LIBRARY_SEARCH_PATHS = "$(inherited)";
230 | OTHER_LDFLAGS = "-ObjC";
231 | PRODUCT_NAME = RNCImagePickerIOS;
232 | SKIP_INSTALL = YES;
233 | };
234 | name = Release;
235 | };
236 | /* End XCBuildConfiguration section */
237 |
238 | /* Begin XCConfigurationList section */
239 | 58B511D61A9E6C8500147676 /* Build configuration list for PBXProject "RNCImagePickerIOS" */ = {
240 | isa = XCConfigurationList;
241 | buildConfigurations = (
242 | 58B511ED1A9E6C8500147676 /* Debug */,
243 | 58B511EE1A9E6C8500147676 /* Release */,
244 | );
245 | defaultConfigurationIsVisible = 0;
246 | defaultConfigurationName = Release;
247 | };
248 | 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "RNCImagePickerIOS" */ = {
249 | isa = XCConfigurationList;
250 | buildConfigurations = (
251 | 58B511F01A9E6C8500147676 /* Debug */,
252 | 58B511F11A9E6C8500147676 /* Release */,
253 | );
254 | defaultConfigurationIsVisible = 0;
255 | defaultConfigurationName = Release;
256 | };
257 | /* End XCConfigurationList section */
258 | };
259 | rootObject = 58B511D31A9E6C8500147676 /* Project object */;
260 | }
261 |
--------------------------------------------------------------------------------
/ios/RNCImagePickerIOS.xcodeproj/xcshareddata/xcschemes/RNCImagePickerIOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
34 |
35 |
45 |
46 |
52 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
70 |
71 |
72 |
73 |
75 |
76 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/jest.config.js:
--------------------------------------------------------------------------------
1 | // jest.config.js
2 | const { defaults: tsjPreset } = require('ts-jest/presets');
3 |
4 | module.exports = {
5 | ...tsjPreset,
6 | preset: 'react-native',
7 | transform: {
8 | ...tsjPreset.transform,
9 | '\\.js$': '/node_modules/react-native/jest/preprocessor.js',
10 | },
11 | testPathIgnorePatterns: ['/lib/', '/node_modules/', '/example/'],
12 | globals: {
13 | 'ts-jest': {
14 | babelConfig: true,
15 | },
16 | },
17 | setupFilesAfterEnv: [
18 | '/jest.setup.js',
19 | ],
20 | };
21 |
--------------------------------------------------------------------------------
/jest.setup.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | *
7 | * @format
8 | */
9 | /* eslint-env jest */
10 |
11 | import {NativeModules} from 'react-native';
12 |
13 | // Mock the RNCImagePickerIOS native module to allow us to unit test the JavaScript code
14 | NativeModules.RNCImagePickerIOS = {
15 | canRecordVideos: jest.fn(),
16 | canUseCamera: jest.fn(),
17 | openCameraDialog: jest.fn(),
18 | openSelectDialog: jest.fn(),
19 | };
20 |
21 | // Reset the mocks before each test
22 | global.beforeEach(() => {
23 | jest.resetAllMocks();
24 | });
25 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@react-native-community/image-picker-ios",
3 | "version": "1.0.1",
4 | "description": "React Native Image Picker for iOS",
5 | "react-native": "src/index.ts",
6 | "types": "src/index.ts",
7 | "main": "lib/commonjs/index.js",
8 | "module": "lib/module/index.js",
9 | "files": [
10 | "/ios",
11 | "/src",
12 | "/lib",
13 | "/*.podspec"
14 | ],
15 | "author": "Johan du Toit ",
16 | "contributors": [
17 | "Johan du Toit (johan.dev)"
18 | ],
19 | "homepage": "https://github.com/react-native-community/react-native-image-picker-ios#readme",
20 | "license": "MIT",
21 | "scripts": {
22 | "start": "react-native start",
23 | "test": "yarn validate:eslint && yarn validate:typescript && yarn test:jest",
24 | "validate:eslint": "eslint 'src/**/*.{js,ts,tsx}' 'example/**/*.{js,ts,tsx}'",
25 | "validate:typescript": "tsc --project ./ --noEmit",
26 | "test:jest": "jest '/src/'",
27 | "ci:publish": "yarn semantic-release",
28 | "semantic-release": "semantic-release",
29 | "prepare": "bob build"
30 | },
31 | "keywords": [
32 | "react-native",
33 | "react native",
34 | "image",
35 | "imagepicker",
36 | "image picker",
37 | "picker"
38 | ],
39 | "peerDependencies": {
40 | "react-native": ">=0.59"
41 | },
42 | "dependencies": {},
43 | "devDependencies": {
44 | "@babel/core": "^7.4.3",
45 | "@babel/runtime": "^7.4.3",
46 | "@react-native-community/bob": "^0.4.1",
47 | "@react-native-community/eslint-config": "^0.0.5",
48 | "@semantic-release/changelog": "^3.0.2",
49 | "@semantic-release/git": "7.0.8",
50 | "@types/jest": "^24.0.12",
51 | "@types/react-native": "^0.57.51",
52 | "@typescript-eslint/eslint-plugin": "^1.7.0",
53 | "@typescript-eslint/parser": "^1.7.0",
54 | "babel-jest": "^24.7.1",
55 | "eslint": "5.16.0",
56 | "eslint-config-prettier": "^4.2.0",
57 | "eslint-plugin-prettier": "3.0.1",
58 | "husky": "^2.3.0",
59 | "jest": "^24.8.0",
60 | "lint-staged": "^8.1.7",
61 | "metro-react-native-babel-preset": "^0.53.1",
62 | "prettier": "^1.17.0",
63 | "react": "16.8.3",
64 | "react-native": "0.59.5",
65 | "react-test-renderer": "16.8.3",
66 | "rimraf": "^2.6.3",
67 | "semantic-release": "15.13.3",
68 | "ts-jest": "^24.0.2",
69 | "typescript": "^3.4.1"
70 | },
71 | "repository": {
72 | "type": "git",
73 | "url": "git+https://github.com/react-native-community/react-native-image-picker-ios.git"
74 | },
75 | "@react-native-community/bob": {
76 | "source": "src",
77 | "output": "lib",
78 | "targets": [
79 | "commonjs",
80 | "module"
81 | ]
82 | },
83 | "husky": {
84 | "hooks": {
85 | "pre-commit": "lint-staged",
86 | "pre-push": "yarn test"
87 | }
88 | },
89 | "lint-staged": {
90 | "*.{js,ts,tsx}": [
91 | "yarn eslint --fix",
92 | "git add"
93 | ]
94 | },
95 | "bugs": {
96 | "url": "https://github.com/react-native-community/react-native-image-picker-ios/issues"
97 | },
98 | "directories": {
99 | "example": "example",
100 | "lib": "lib"
101 | }
102 | }
103 |
--------------------------------------------------------------------------------
/react-native-image-picker-ios.podspec:
--------------------------------------------------------------------------------
1 | require 'json'
2 |
3 | package = JSON.parse(File.read(File.join(__dir__, 'package.json')))
4 |
5 | Pod::Spec.new do |s|
6 | s.name = "react-native-image-picker-ios"
7 | s.version = package['version']
8 | s.summary = package['description']
9 | s.license = package['license']
10 |
11 | s.authors = package['author']
12 | s.homepage = package['homepage']
13 | s.platform = :ios, "9.0"
14 |
15 | s.source = { :git => "https://github.com/react-native-community/react-native-image-picker-ios.git", :tag => "#{s.version}" }
16 | s.source_files = "ios/**/*.{h,m}"
17 |
18 | s.dependency 'React'
19 | end
--------------------------------------------------------------------------------
/src/__tests__/canRecordVideos.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | *
7 | * @format
8 | */
9 |
10 | import ImagePickerIOS from '../index';
11 | import NativeInterface from '../internal/nativeInterface';
12 |
13 | type JestMockNativeInterface = jest.Mocked;
14 | // @ts-ignore
15 | const MockNativeInterface: JestMockNativeInterface = NativeInterface;
16 |
17 | describe('@react-native-community/image-picker-ios', () => {
18 | describe('canRecordVideos', () => {
19 | it('should pass on the responses when the library executes the callback', () => {
20 | expect.assertions(2);
21 |
22 | MockNativeInterface.canRecordVideos
23 | .mockImplementationOnce(cb => cb(true))
24 | .mockImplementationOnce(cb => cb(false));
25 |
26 | ImagePickerIOS.canRecordVideos(value => {
27 | expect(value).toBeTruthy();
28 | });
29 |
30 | ImagePickerIOS.canRecordVideos(value => {
31 | expect(value).toBeFalsy();
32 | });
33 | });
34 | });
35 | });
36 |
--------------------------------------------------------------------------------
/src/__tests__/canUseCamera.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | *
7 | * @format
8 | */
9 |
10 | import ImagePickerIOS from '../index';
11 | import NativeInterface from '../internal/nativeInterface';
12 |
13 | type JestMockNativeInterface = jest.Mocked;
14 | // @ts-ignore
15 | const MockNativeInterface: JestMockNativeInterface = NativeInterface;
16 |
17 | describe('@react-native-community/image-picker-ios', () => {
18 | describe('canUseCamera', () => {
19 | it('should pass on the responses when the library executes the callback', () => {
20 | expect.assertions(2);
21 |
22 | MockNativeInterface.canUseCamera
23 | .mockImplementationOnce(cb => cb(true))
24 | .mockImplementationOnce(cb => cb(false));
25 |
26 | ImagePickerIOS.canUseCamera(value => {
27 | expect(value).toBeTruthy();
28 | });
29 |
30 | ImagePickerIOS.canUseCamera(value => {
31 | expect(value).toBeFalsy();
32 | });
33 | });
34 | });
35 | });
36 |
--------------------------------------------------------------------------------
/src/__tests__/openCameraDialog.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | *
7 | * @format
8 | */
9 |
10 | import ImagePickerIOS from '../index';
11 | import NativeInterface from '../internal/nativeInterface';
12 | import {OpenCameraDialogOptions} from '../internal/types';
13 |
14 | type JestMockNativeInterface = jest.Mocked;
15 | // @ts-ignore
16 | const MockNativeInterface: JestMockNativeInterface = NativeInterface;
17 |
18 | describe('@react-native-community/image-picker-ios', () => {
19 | describe('openCameraDialog', () => {
20 | it('should pass on the responses when the library executes the callback', () => {
21 | expect.assertions(3);
22 |
23 | const expectedUrl = 'url/to/file';
24 | const expectedSize = 100;
25 |
26 | const config: OpenCameraDialogOptions = {
27 | videoMode: false,
28 | };
29 | MockNativeInterface.openCameraDialog.mockImplementationOnce(
30 | (cfg, successCb, errorCb) => {
31 | successCb(expectedUrl, expectedSize, expectedSize);
32 | },
33 | );
34 |
35 | ImagePickerIOS.openCameraDialog(
36 | config,
37 | (imageUrl, height, width) => {
38 | expect(imageUrl).toEqual(expectedUrl);
39 | expect(height).toEqual(expectedSize);
40 | expect(width).toEqual(expectedSize);
41 | },
42 | () => {},
43 | );
44 | });
45 |
46 | it('should pass on errors through the callback', () => {
47 | expect.assertions(1);
48 |
49 | const expectedError = new Error('Test error');
50 | MockNativeInterface.openCameraDialog.mockImplementationOnce(
51 | (cfg, successCb, errorCb) => {
52 | errorCb(expectedError);
53 | },
54 | );
55 |
56 | ImagePickerIOS.openCameraDialog(
57 | {},
58 | () => {},
59 | error => {
60 | expect(error).toEqual(expectedError);
61 | },
62 | );
63 | });
64 | });
65 | });
66 |
--------------------------------------------------------------------------------
/src/__tests__/openSelectDialog.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | *
7 | * @format
8 | */
9 |
10 | import ImagePickerIOS from '../index';
11 | import NativeInterface from '../internal/nativeInterface';
12 | import {OpenSelectDialogOptions} from '../internal/types';
13 |
14 | type JestMockNativeInterface = jest.Mocked;
15 | // @ts-ignore
16 | const MockNativeInterface: JestMockNativeInterface = NativeInterface;
17 |
18 | describe('@react-native-community/image-picker-ios', () => {
19 | describe('openSelectDialog', () => {
20 | it('should pass on the responses when the library executes the callback', () => {
21 | expect.assertions(3);
22 |
23 | const expectedUrl = 'url/to/file';
24 | const expectedSize = 100;
25 |
26 | const config: OpenSelectDialogOptions = {
27 | showImages: true,
28 | showVideos: false,
29 | };
30 | MockNativeInterface.openSelectDialog.mockImplementationOnce(
31 | (cfg, successCb, errorCb) => {
32 | successCb(expectedUrl, expectedSize, expectedSize);
33 | },
34 | );
35 |
36 | ImagePickerIOS.openSelectDialog(
37 | config,
38 | (imageUrl, height, width) => {
39 | expect(imageUrl).toEqual(expectedUrl);
40 | expect(height).toEqual(expectedSize);
41 | expect(width).toEqual(expectedSize);
42 | },
43 | () => {},
44 | );
45 | });
46 |
47 | it('should pass on errors through the callback', () => {
48 | expect.assertions(1);
49 |
50 | const expectedError = new Error('Test error');
51 | MockNativeInterface.openSelectDialog.mockImplementationOnce(
52 | (cfg, successCb, errorCb) => {
53 | errorCb([expectedError]);
54 | },
55 | );
56 |
57 | ImagePickerIOS.openSelectDialog(
58 | {},
59 | () => {},
60 | ([error]) => {
61 | expect(error).toEqual(expectedError);
62 | },
63 | );
64 | });
65 | });
66 | });
67 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | *
7 | * @format
8 | */
9 |
10 | 'use strict';
11 |
12 | import NativeInterface from './internal/nativeInterface';
13 | import {
14 | OpenCameraDialogOptions,
15 | OpenSelectDialogOptions,
16 | } from './internal/types';
17 |
18 | const ImagePickerIOS = {
19 | canRecordVideos: function(callback: (value: boolean) => void) {
20 | NativeInterface.canRecordVideos(callback);
21 | },
22 | canUseCamera: function(callback: (value: boolean) => void) {
23 | NativeInterface.canUseCamera(callback);
24 | },
25 | openCameraDialog: function(
26 | config: OpenCameraDialogOptions,
27 | successCallback: (
28 | imageUrlOrTag: string,
29 | height: number,
30 | width: number,
31 | ) => void,
32 | cancelCallback: (args: any) => void,
33 | ) {
34 | config = {
35 | videoMode: false,
36 | ...config,
37 | };
38 | NativeInterface.openCameraDialog(config, successCallback, cancelCallback);
39 | },
40 | openSelectDialog: function(
41 | config: OpenSelectDialogOptions,
42 | successCallback: (
43 | imageUrlOrTag: string,
44 | height: number,
45 | width: number,
46 | ) => void,
47 | cancelCallback: (args: any) => void,
48 | ) {
49 | config = {
50 | showImages: true,
51 | showVideos: false,
52 | ...config,
53 | };
54 | NativeInterface.openSelectDialog(config, successCallback, cancelCallback);
55 | },
56 | };
57 |
58 | export default ImagePickerIOS;
59 |
--------------------------------------------------------------------------------
/src/internal/nativeInterface.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | *
7 | * @format
8 | */
9 |
10 | import {NativeModules} from 'react-native';
11 | import {ImagePickerIOSNativeModule} from './privateTypes';
12 |
13 | const RNCImagePickerIOS: ImagePickerIOSNativeModule | undefined =
14 | NativeModules.RNCImagePickerIOS;
15 |
16 | // Produce an error if we don't have the native module
17 | if (!RNCImagePickerIOS) {
18 | throw new Error(`@react-native-community/imagepickerios: NativeModule.RNCImagePickerIOS is null. To fix this issue try these steps:
19 | • Run \`react-native link @react-native-community/imagepickerios\` in the project root.
20 | • Rebuild and re-run the app.
21 | • If you are using CocoaPods on iOS, run \`pod install\` in the \`ios\` directory and then rebuild and re-run the app. You may also need to re-open Xcode to get the new pods.
22 | • Check that the library was linked correctly when you used the link command by running through the manual installation instructions in the README.
23 | * If you are getting this error while unit testing you need to mock the native module. Follow the guide in the README.
24 | If none of these fix the issue, please open an issue on the Github repository: https://github.com/react-native-community/react-native-image-picker-ios`);
25 | }
26 |
27 | /**
28 | * We export the native interface in this way to give easy shared access to it between the
29 | * JavaScript code and the tests
30 | */
31 | export default {
32 | ...RNCImagePickerIOS,
33 | };
34 |
--------------------------------------------------------------------------------
/src/internal/privateTypes.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | *
7 | * @format
8 | */
9 | import {OpenCameraDialogOptions, OpenSelectDialogOptions} from './types';
10 |
11 | export interface ImagePickerIOSNativeModule {
12 | canRecordVideos(callback: (value: boolean) => void): void;
13 | canUseCamera(callback: (value: boolean) => void): void;
14 | openCameraDialog(
15 | config: OpenCameraDialogOptions,
16 | successCallback: (
17 | imageUrlOrTag: string,
18 | height: number,
19 | width: number,
20 | ) => void,
21 | cancelCallback: (args: any) => void,
22 | ): void;
23 | openSelectDialog(
24 | config: OpenSelectDialogOptions,
25 | successCallback: (
26 | imageUrlOrTag: string,
27 | height: number,
28 | width: number,
29 | ) => void,
30 | cancelCallback: (args: any) => void,
31 | ): void;
32 | }
33 |
--------------------------------------------------------------------------------
/src/internal/types.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | *
7 | * @format
8 | */
9 |
10 | export interface OpenCameraDialogOptions {
11 | /** Defaults to false */
12 | videoMode?: boolean;
13 | }
14 | export interface OpenSelectDialogOptions {
15 | /** Defaults to true */
16 | showImages?: boolean;
17 | /** Defaults to false */
18 | showVideos?: boolean;
19 | }
20 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "include": ["src/**/*.ts", "example/**/*.ts", "example/**/*.tsx"],
3 | "compilerOptions": {
4 | "target": "es6",
5 | "module": "es6",
6 | "strict": true,
7 | "downlevelIteration": true,
8 | "moduleResolution": "node",
9 | "lib": ["es2015", "es2016", "esnext"],
10 | "jsx": "react-native"
11 | },
12 | "exclude": ["node_modules"]
13 | }
14 |
--------------------------------------------------------------------------------