├── .gitattributes ├── .gitignore ├── .npmignore ├── README.md ├── android ├── build.gradle └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── reactlibrary │ ├── RNMeiqiaModule.java │ └── RNMeiqiaPackage.java ├── examples ├── .babelrc ├── .buckconfig ├── .eslintrc.js ├── .flowconfig ├── .gitattributes ├── .gitignore ├── .prettierrc.js ├── .watchmanconfig ├── App.js ├── android │ ├── app │ │ ├── BUCK │ │ ├── build.gradle │ │ ├── build_defs.bzl │ │ ├── debug.keystore │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ └── com │ │ │ │ └── examples │ │ │ │ ├── MainActivity.java │ │ │ │ └── MainApplication.java │ │ │ └── res │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ └── values │ │ │ ├── strings.xml │ │ │ └── styles.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle ├── app.json ├── babel.config.js ├── index.js ├── ios │ ├── examples-tvOS │ │ └── Info.plist │ ├── examples-tvOSTests │ │ └── Info.plist │ ├── examples.xcodeproj │ │ ├── project.pbxproj │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ ├── examples-tvOS.xcscheme │ │ │ └── examples.xcscheme │ ├── examples │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ ├── Base.lproj │ │ │ └── LaunchScreen.xib │ │ ├── Images.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ ├── Info.plist │ │ └── main.m │ └── examplesTests │ │ ├── Info.plist │ │ └── examplesTests.m ├── metro.config.js ├── package.json └── yarn.lock ├── index.d.ts ├── index.js ├── ios-configuration.js ├── ios ├── RNMeiqia.h ├── RNMeiqia.m ├── RNMeiqia.xcodeproj │ └── project.pbxproj ├── RNMeiqia.xcworkspace │ └── contents.xcworkspacedata ├── UIColor+Hex.h └── UIColor+Hex.m ├── meiqia-react-native.podspec ├── package.json └── screenshot ├── screenshot1.png ├── screenshot2.png └── screenshot3.png /.gitattributes: -------------------------------------------------------------------------------- 1 | *.pbxproj -text -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # OSX 3 | # 4 | .DS_Store 5 | 6 | # node.js 7 | # 8 | node_modules/ 9 | npm-debug.log 10 | yarn-error.log 11 | 12 | 13 | # Xcode 14 | # 15 | build/ 16 | *.pbxuser 17 | !default.pbxuser 18 | *.mode1v3 19 | !default.mode1v3 20 | *.mode2v3 21 | !default.mode2v3 22 | *.perspectivev3 23 | !default.perspectivev3 24 | xcuserdata 25 | *.xccheckout 26 | *.moved-aside 27 | DerivedData 28 | *.hmap 29 | *.ipa 30 | *.xcuserstate 31 | project.xcworkspace 32 | 33 | 34 | # Android/IntelliJ 35 | # 36 | build/ 37 | .idea 38 | .gradle 39 | local.properties 40 | *.iml 41 | 42 | # BUCK 43 | buck-out/ 44 | \.buckd/ 45 | *.keystore 46 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | demo/ 2 | examples/ 3 | node_modules/ 4 | android/build/ 5 | android/.idea/ 6 | ios/build/ 7 | .DS_Store 8 | .idea 9 | .editorconfig 10 | .gitignore 11 | *.log 12 | *.iml 13 | *.properties 14 | .gradle 15 | build/ 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MeiQia SDK for React Native 2 | 3 | [![LICENSE](https://img.shields.io/badge/license-Anti%20996-blue.svg?style=flat-square)](https://github.com/996icu/996.ICU/blob/master/LICENSE) 4 | [![PRs welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](https://github.com/Kennytian/meiqia-react-native/pulls) 5 | [![npm](https://img.shields.io/npm/v/meiqia-react-native.svg?style=flat-square)](https://www.npmjs.com/package/meiqia-react-native) 6 | [![Downloads](https://img.shields.io/npm/dm/meiqia-react-native.svg?style=flat-square)](https://www.npmjs.com/package/meiqia-react-native) 7 | [![GitHub contributors](https://img.shields.io/github/contributors/Kennytian/meiqia-react-native.svg?style=flat-square)](https://github.com/Kennytian/meiqia-react-native/graphs/contributors) 8 | [![GitHub last commit](https://img.shields.io/github/last-commit/Kennytian/meiqia-react-native.svg?style=flat-square)](https://github.com/Kennytian/meiqia-react-native/commits/master) 9 | ![Platform - Android and iOS](https://img.shields.io/badge/platform-Android%20%7C%20iOS-yellow.svg?style=flat-square) 10 | 11 | ## Getting started 12 | 13 | `$ npm install meiqia-react-native --save` 14 | 15 | or 16 | 17 | `$ yarn add meiqia-react-native` 18 | 19 | ### Mostly automatic installation 20 | 21 | `$ react-native link meiqia-react-native` 22 | 23 | #### iOS 24 | 1. Select you app target on XCode and click the `Build Settings` tab. Go to the `Framework Search Paths` section and `add` this new entry 25 | ``` 26 | $(SRCROOT)/../node_modules/meiqia-react-native/ios 27 | ``` 28 | and make sure it is set to `recursive` 29 | 2. Select you app target on XCode and click the `Build Phases` tab. Go to the `Copy Bundle Resources` section and `add` this new entry 30 | ``` 31 | node_modules/meiqia-react-native/ios/MeiQiaSDK/MQChatViewController/Assets/MQChatViewAsset.bundle 32 | ``` 33 | ### Manual installation 34 | 35 | #### iOS 36 | 37 | 1. In XCode, in the project navigator, right click `Libraries` ➜ `Add Files to [your project's name]` 38 | 2. Go to `node_modules` ➜ `meiqia-react-native` and add `RNMeiqia.xcodeproj` 39 | 3. In XCode, in the project navigator, select your project. Add `libRNMeiqia.a` to your project's `Build Phases` ➜ `Link Binary With Libraries` 40 | 4. Select you app target on XCode and click the `Build Settings` tab. Go to the `Framework Search Paths` section and add this new entry 41 | ``` 42 | $(SRCROOT)/../node_modules/meiqia-react-native/ios 43 | ``` 44 | and make sure it is set to `recursive` 45 | 5. Select you app target on XCode and click the `Build Phases` tab. Go to the `Copy Bundle Resources` section and `add` this new entry 46 | ``` 47 | node_modules/meiqia-react-native/ios/MeiQiaSDK/MQChatViewController/Assets/MQChatViewAsset.bundle 48 | ``` 49 | 6. Run your project (`Cmd+R`)< 50 | 51 | #### Android 52 | 53 | 1. Open up `android/app/src/main/java/[...]/MainActivity.java` 54 | - Add `import com.reactlibrary.RNMeiqiaPackage;` to the imports at the top of the file 55 | - Add `new RNMeiqiaPackage()` to the list returned by the `getPackages()` method 56 | 2. Append the following lines to `android/settings.gradle`: 57 | ``` 58 | include ':meiqia-react-native' 59 | project(':meiqia-react-native').projectDir = new File(rootProject.projectDir, '../node_modules/meiqia-react-native/android') 60 | ``` 61 | 3. Insert the following lines inside the dependencies block in `android/app/build.gradle`: 62 | ``` 63 | compile project(':meiqia-react-native') 64 | ``` 65 | 66 | ## Usage 67 | 68 | #### import 69 | ```javascript 70 | import { MeiqiaInit, MeiqiaShow } from 'meiqia-react-native'; 71 | ``` 72 | 73 | #### init appKey 74 | ```javascript 75 | MeiqiaInit({ appKey:'xxx' }).then((config)=>{ 76 | console.log('config info:', config); 77 | // {"code:": 0, "clientId": "xxxxx", "message": 'success'} 78 | }); 79 | ``` 80 | 81 | #### launch chat window 82 | ```javascript 83 | MeiqiaShow({}); 84 | ``` 85 | or, if you known 86 | 87 | ```javascript 88 | MeiqiaShow({ 89 | titleColor: '', 90 | titleBarColor: '', 91 | naviColor: '', 92 | clientInfo: { 93 | name: 'Kenny锅', 94 | gender: '男', 95 | age: '20', 96 | tel: '13800138000', 97 | weixin: 'wechat007', 98 | weibo: 'weibo007', 99 | address: '湖北省武汉市xxx', 100 | email: 'kenny@china.com', 101 | avator: 'https://s3.cn-north-1.amazonaws.com.cn/pics.meiqia.bucket/1dee88eabfbd7bd4', 102 | source: '朋友推荐', 103 | comment: '全栈,就是了不起,备注也没问题' 104 | }, 105 | customId:{id:''}, 106 | clientId:{id:''}, 107 | scheduledInfo:{agentId:'', agentGroup:'', scheduleRule: 'none|group|enterprise', }, 108 | }); 109 | ``` 110 | 111 | > Now, we can see the default chat window 112 | 113 | ## APIs 114 | ### MeiqiaInit 115 | 116 | `MeiqiaInit({param1, param2, ...});` 117 | 118 | | param name | param type | default value | platform 119 | | :------: | :------ | :------ | :------: | 120 | | appKey | string | required | all 121 | 122 | ### MeiqiaShow 123 | 124 | `MeiqiaShow({param1, param2, ...});` 125 | 126 | | param name | param type | default value | platform 127 | | :------: | :------ | :------ | :------: | 128 | | titleColor | string | '#000000' | iOS 129 | | titleBarColor | string | '' | iOS 130 | | naviColor | string | '' | iOS 131 | | clientInfo | Object | {} | all 132 | | customId | Object | {} | all 133 | | clientId | Object | {} | all 134 | | scheduledInfo | Object | {} | all 135 | 136 | ### MeiqiaStartService 137 | 138 | `MeiqiaStartService();` 139 | 140 | ### MeiqiaStopService 141 | 142 | `MeiqiaStopService();` 143 | 144 | ### MeiqiaRegisterDeviceToken 145 | 146 | `MeiqiaRegisterDeviceToken('xxxx-xxx-xxx');` 147 | 148 | > NOTICE: This function only for iOS 149 | 150 | ## Screenshot 151 | 152 | ### Android 153 | 154 | ![](./screenshot/screenshot1.png) 155 | 156 | ![](./screenshot/screenshot2.png) 157 | 158 | ### iOS 159 | ![](./screenshot/screenshot3.png) 160 | 161 | ## Debugging 162 | 163 | #### iOS 164 | >Q: Why debugging on real device, the UI language is English? 165 | 166 | In order to properly recognize the App's system language, you need to add a Localizations configuration. If you need to support English, Simplified Chinese, and Traditional Chinese, you need the following configuration in the Source Code of `info.plist`: 167 | 168 | ```xml 169 | CFBundleLocalizations 170 | 171 | zh_CN 172 | zh_TW 173 | en 174 | 175 | ``` 176 | 177 | or you also can run npm script: `node ./node_modules/meiqia-react-native/ios-configuration.js YOUR_APP_NAME` 178 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | jcenter() 4 | google() 5 | maven { 6 | url 'https://dl.bintray.com/android/android-tools' 7 | } 8 | } 9 | 10 | dependencies { 11 | classpath 'com.android.tools.build:gradle:3.4.1' 12 | } 13 | } 14 | 15 | apply plugin: 'com.android.library' 16 | 17 | def safeExtGet(prop, fallback) { 18 | rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback 19 | } 20 | 21 | android { 22 | def packageJson = new groovy.json.JsonSlurper().parseText(file('../package.json').text) 23 | compileSdkVersion safeExtGet("compileSdkVersion", 25) 24 | buildToolsVersion safeExtGet("buildToolsVersion", '25.0.3') 25 | defaultConfig { 26 | minSdkVersion safeExtGet('minSdkVersion', 16) 27 | targetSdkVersion safeExtGet('targetSdkVersion', 25) 28 | versionCode 1 29 | versionName packageJson.version 30 | } 31 | lintOptions { 32 | abortOnError false 33 | } 34 | } 35 | 36 | repositories { 37 | mavenCentral() 38 | google() 39 | } 40 | 41 | dependencies { 42 | implementation 'com.facebook.react:react-native:+' 43 | implementation 'com.meiqia:meiqiasdk:3.6.0' 44 | implementation "com.android.support:support-v4:${safeExtGet('supportLibVersion', '25.3.1')}" 45 | implementation 'com.squareup.okhttp3:okhttp:3.5.0' 46 | implementation 'com.squareup.picasso:picasso:2.5.2' 47 | } 48 | -------------------------------------------------------------------------------- /android/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 22 | 23 | 24 | 31 | 32 | 33 | 40 | 41 | 48 | 49 | 50 | 57 | 58 | 59 | 66 | 67 | 68 | 75 | 76 | 83 | 84 | 85 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /android/src/main/java/com/reactlibrary/RNMeiqiaModule.java: -------------------------------------------------------------------------------- 1 | package com.reactlibrary; 2 | 3 | import android.content.Intent; 4 | 5 | import com.facebook.react.bridge.*; 6 | import com.meiqia.core.MQManager; 7 | import com.meiqia.core.MQScheduleRule; 8 | import com.meiqia.meiqiasdk.imageloader.MQPicassoImageLoader; 9 | import com.meiqia.meiqiasdk.imageloader.MQImage; 10 | import com.meiqia.meiqiasdk.util.MQConfig; 11 | import com.meiqia.core.callback.OnInitCallback; 12 | import com.meiqia.meiqiasdk.util.MQIntentBuilder; 13 | 14 | import java.util.HashMap; 15 | 16 | public class RNMeiqiaModule extends ReactContextBaseJavaModule { 17 | 18 | private final ReactApplicationContext reactContext; 19 | 20 | public RNMeiqiaModule(ReactApplicationContext reactContext) { 21 | super(reactContext); 22 | this.reactContext = reactContext; 23 | } 24 | 25 | @Override 26 | public String getName() { 27 | return "RNMeiqia"; 28 | } 29 | 30 | @ReactMethod 31 | public void init(final ReadableMap data, final Promise p) { 32 | String appKey = data.getString("appKey"); 33 | if (!appKey.equals("")) { 34 | MQConfig.init(reactContext, appKey, new OnInitCallback() { 35 | @Override 36 | public void onSuccess(String clientId) { 37 | WritableMap map = Arguments.createMap(); 38 | map.putString("message", "success"); 39 | map.putString("clientId", clientId); 40 | map.putString("code", Integer.toString(0)); 41 | p.resolve(map); 42 | } 43 | 44 | @Override 45 | public void onFailure(int code, String message) { 46 | WritableMap map = Arguments.createMap(); 47 | map.putString("message", message); 48 | map.putString("code", Integer.toString(code)); 49 | p.resolve(map); 50 | } 51 | }); 52 | } else { 53 | WritableMap map = Arguments.createMap(); 54 | map.putString("message", "appKey is missing"); 55 | map.putString("code", Integer.toString(1)); 56 | p.resolve(map); 57 | } 58 | } 59 | 60 | @ReactMethod 61 | public void show(final ReadableMap data) { 62 | if (data.hasKey("titleColor") && !data.getString("titleColor").equals("")) { 63 | } 64 | 65 | if (data.hasKey("titleBarColor") && !data.getString("titleBarColor").equals("")) { 66 | } 67 | 68 | if (data.hasKey("naviColor") && !data.getString("naviColor").equals("")) { 69 | } 70 | 71 | HashMap mapTemp = data.getMap("clientInfo").toHashMap(); 72 | HashMap clientInfo = new HashMap(); 73 | for (HashMap.Entry entry : mapTemp.entrySet()) { 74 | if (entry.getValue() instanceof String) { 75 | clientInfo.put(entry.getKey(), (String) entry.getValue()); 76 | } 77 | } 78 | 79 | MQIntentBuilder intentConfig = new MQIntentBuilder(reactContext); 80 | intentConfig.setClientInfo(clientInfo); // 设置顾客信息 PS: 这个接口只会生效一次,如果需要更新顾客信息,需要调用更新接口 81 | 82 | if (data.hasKey("customId") && data.getMap("customId").hasKey("id") && !data.getMap("customId").getString("id").equals("")) { 83 | intentConfig.setCustomizedId(data.getMap("customId").getString("id")); // 相同的 id 会被识别为同一个顾客 84 | } 85 | if (data.hasKey("clientId") && data.getMap("clientId").hasKey("id") && !data.getMap("clientId").getString("id").equals("")) { 86 | intentConfig.setClientId(data.getMap("clientId").getString("id")); 87 | } 88 | if (data.hasKey("scheduledInfo")) { 89 | if (data.getMap("scheduledInfo").hasKey("agentId") && !data.getMap("scheduledInfo").getString("agentId").equals("")) { 90 | intentConfig.setScheduledAgent(data.getMap("scheduledInfo").getString("agentId")); // agentId 可以从工作台查询 91 | } 92 | if (data.getMap("scheduledInfo").hasKey("agentGroup") && !data.getMap("scheduledInfo").getString("agentGroup").equals("")) { 93 | intentConfig.setScheduledGroup(data.getMap("scheduledInfo").getString("agentGroup")); // agentId 可以从工作台查询 94 | } 95 | if (data.getMap("scheduledInfo").hasKey("scheduleRule") && !data.getMap("scheduledInfo").getString("scheduleRule").equals("")) { 96 | String ruleStr = data.getMap("scheduledInfo").getString("scheduleRule"); 97 | if (ruleStr.equals("none")) { 98 | intentConfig.setScheduleRule(MQScheduleRule.REDIRECT_NONE); 99 | } 100 | if (ruleStr.equals("group")) { 101 | intentConfig.setScheduleRule(MQScheduleRule.REDIRECT_GROUP); 102 | } 103 | if (ruleStr.equals("enterprise")) { 104 | intentConfig.setScheduleRule(MQScheduleRule.REDIRECT_ENTERPRISE); 105 | } 106 | } else { 107 | intentConfig.setScheduleRule(MQScheduleRule.REDIRECT_ENTERPRISE); 108 | } 109 | } 110 | MQImage.setImageLoader(new MQPicassoImageLoader()); 111 | // Intent intent = intentConfig.build(); 112 | Intent intent = intentConfig.updateClientInfo(clientInfo).build(); 113 | reactContext.startActivity(intent); 114 | } 115 | 116 | @ReactMethod 117 | public void openMeiqiaService() { 118 | MQManager.getInstance(reactContext).openMeiqiaService(); 119 | } 120 | 121 | @ReactMethod 122 | public void closeMeiqiaService() { 123 | MQManager.getInstance(reactContext).closeMeiqiaService(); 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /android/src/main/java/com/reactlibrary/RNMeiqiaPackage.java: -------------------------------------------------------------------------------- 1 | package com.reactlibrary; 2 | 3 | import java.util.Arrays; 4 | import java.util.Collections; 5 | import java.util.List; 6 | 7 | import com.facebook.react.ReactPackage; 8 | import com.facebook.react.bridge.NativeModule; 9 | import com.facebook.react.bridge.ReactApplicationContext; 10 | import com.facebook.react.uimanager.ViewManager; 11 | import com.facebook.react.bridge.JavaScriptModule; 12 | 13 | public class RNMeiqiaPackage implements ReactPackage { 14 | @Override 15 | public List createNativeModules(ReactApplicationContext reactContext) { 16 | return Arrays.asList(new RNMeiqiaModule(reactContext)); 17 | } 18 | 19 | // Deprecated from RN 0.47 20 | public List> createJSModules() { 21 | return Collections.emptyList(); 22 | } 23 | 24 | @Override 25 | public List createViewManagers(ReactApplicationContext reactContext) { 26 | return Collections.emptyList(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /examples/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["module:metro-react-native-babel-preset"] 3 | } 4 | -------------------------------------------------------------------------------- /examples/.buckconfig: -------------------------------------------------------------------------------- 1 | 2 | [android] 3 | target = Google Inc.:Google APIs:23 4 | 5 | [maven_repositories] 6 | central = https://repo1.maven.org/maven2 7 | -------------------------------------------------------------------------------- /examples/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: '@react-native-community', 4 | }; 5 | -------------------------------------------------------------------------------- /examples/.flowconfig: -------------------------------------------------------------------------------- 1 | [ignore] 2 | ; We fork some components by platform 3 | .*/*[.]android.js 4 | 5 | ; Ignore "BUCK" generated dirs 6 | /\.buckd/ 7 | 8 | ; Ignore polyfills 9 | node_modules/react-native/Libraries/polyfills/.* 10 | 11 | ; These should not be required directly 12 | ; require from fbjs/lib instead: require('fbjs/lib/warning') 13 | node_modules/warning/.* 14 | 15 | ; Flow doesn't support platforms 16 | .*/Libraries/Utilities/LoadingView.js 17 | 18 | [untyped] 19 | .*/node_modules/@react-native-community/cli/.*/.* 20 | 21 | [include] 22 | 23 | [libs] 24 | node_modules/react-native/Libraries/react-native/react-native-interface.js 25 | node_modules/react-native/flow/ 26 | 27 | [options] 28 | emoji=true 29 | 30 | esproposal.optional_chaining=enable 31 | esproposal.nullish_coalescing=enable 32 | 33 | module.file_ext=.js 34 | module.file_ext=.json 35 | module.file_ext=.ios.js 36 | 37 | munge_underscores=true 38 | 39 | module.name_mapper='^react-native$' -> '/node_modules/react-native/Libraries/react-native/react-native-implementation' 40 | module.name_mapper='^react-native/\(.*\)$' -> '/node_modules/react-native/\1' 41 | module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> '/node_modules/react-native/Libraries/Image/RelativeImageStub' 42 | 43 | suppress_type=$FlowIssue 44 | suppress_type=$FlowFixMe 45 | suppress_type=$FlowFixMeProps 46 | suppress_type=$FlowFixMeState 47 | 48 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\) 49 | suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)?:? #[0-9]+ 50 | suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError 51 | 52 | [lints] 53 | sketchy-null-number=warn 54 | sketchy-null-mixed=warn 55 | sketchy-number=warn 56 | untyped-type-import=warn 57 | nonstrict-import=warn 58 | deprecated-type=warn 59 | unsafe-getters-setters=warn 60 | inexact-spread=warn 61 | unnecessary-invariant=warn 62 | signature-verification-failure=warn 63 | deprecated-utility=error 64 | 65 | [strict] 66 | deprecated-type 67 | nonstrict-import 68 | sketchy-null 69 | unclear-type 70 | unsafe-getters-setters 71 | untyped-import 72 | untyped-type-import 73 | 74 | [version] 75 | ^0.105.0 76 | -------------------------------------------------------------------------------- /examples/.gitattributes: -------------------------------------------------------------------------------- 1 | *.pbxproj -text 2 | -------------------------------------------------------------------------------- /examples/.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | # 3 | .DS_Store 4 | 5 | # Xcode 6 | # 7 | build/ 8 | *.pbxuser 9 | !default.pbxuser 10 | *.mode1v3 11 | !default.mode1v3 12 | *.mode2v3 13 | !default.mode2v3 14 | *.perspectivev3 15 | !default.perspectivev3 16 | xcuserdata 17 | *.xccheckout 18 | *.moved-aside 19 | DerivedData 20 | *.hmap 21 | *.ipa 22 | *.xcuserstate 23 | 24 | # Android/IntelliJ 25 | # 26 | build/ 27 | .idea 28 | .gradle 29 | local.properties 30 | *.iml 31 | 32 | # node.js 33 | # 34 | node_modules/ 35 | npm-debug.log 36 | yarn-error.log 37 | 38 | # BUCK 39 | buck-out/ 40 | \.buckd/ 41 | *.keystore 42 | !debug.keystore 43 | 44 | # fastlane 45 | # 46 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 47 | # screenshots whenever they are needed. 48 | # For more information about the recommended setup visit: 49 | # https://docs.fastlane.tools/best-practices/source-control/ 50 | 51 | */fastlane/report.xml 52 | */fastlane/Preview.html 53 | */fastlane/screenshots 54 | 55 | # Bundle artifact 56 | *.jsbundle 57 | 58 | # CocoaPods 59 | /ios/Pods/ 60 | -------------------------------------------------------------------------------- /examples/.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | bracketSpacing: false, 3 | jsxBracketSameLine: true, 4 | singleQuote: true, 5 | trailingComma: 'all', 6 | }; 7 | -------------------------------------------------------------------------------- /examples/.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /examples/App.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Sample React Native App 3 | * https://github.com/facebook/react-native 4 | * 5 | * @format 6 | * @flow 7 | */ 8 | 9 | import React, { useEffect } from 'react'; 10 | import { AppState, SafeAreaView, ScrollView, StatusBar, StyleSheet, Text, View, } from 'react-native'; 11 | 12 | import { Colors, DebugInstructions, Header, ReloadInstructions, } from 'react-native/Libraries/NewAppScreen'; 13 | import { MeiqiaInit, MeiqiaStartService, MeiqiaStopService, MeiqiaShow } from 'react-native-weight'; 14 | 15 | const App: () => React$Node = () => { 16 | const handleAppStateChange = (nextAppState) => { 17 | if (nextAppState === 'active') { 18 | MeiqiaStartService(); 19 | } else { 20 | MeiqiaStopService(); 21 | } 22 | }; 23 | 24 | const initSdk = () => { 25 | MeiqiaInit({appKey: 'b20bf39620fdd43f11128182ff77a551'}).then((data) => { 26 | alert(JSON.stringify(data)); 27 | 28 | MeiqiaStartService(); 29 | }); 30 | }; 31 | 32 | const letUsChat = () => { 33 | const data = { 34 | clientInfo: { 35 | name: 'Kenny锅', 36 | gender: '男', 37 | age: '20', 38 | tel: '13800138000', 39 | weixin: 'wechat007', 40 | weibo: 'weibo007', 41 | address: '湖北省武汉市xxx', 42 | email: 'kenny@china.com', 43 | avator: 'https://s3.cn-north-1.amazonaws.com.cn/pics.meiqia.bucket/1dee88eabfbd7bd4', 44 | source: '朋友推荐', 45 | comment: '全栈,就是了不起,备注也没问题' 46 | }, 47 | }; 48 | MeiqiaShow(data); 49 | }; 50 | 51 | useEffect(() => { 52 | initSdk(); 53 | 54 | AppState.addEventListener('change', handleAppStateChange); 55 | 56 | return () => { 57 | AppState.removeEventListener('change', handleAppStateChange); 58 | } 59 | }, []); 60 | 61 | return ( 62 | <> 63 | 64 | 65 | 68 |
69 | { global.HermesInternal == null ? null : ( 70 | 71 | Engine: Hermes 72 | 73 | ) } 74 | 75 | 76 | 出来吧,悟空 77 | 78 | 79 | See Your Changes 80 | 81 | 82 | 83 | 84 | 85 | Debug 86 | 87 | 88 | 89 | 90 | 91 | Learn More 92 | 93 | Read the docs to discover what to do next: 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | ); 102 | }; 103 | 104 | const styles = StyleSheet.create({ 105 | scrollView: { 106 | backgroundColor: Colors.lighter, 107 | }, 108 | engine: { 109 | position: 'absolute', 110 | right: 0, 111 | }, 112 | body: { 113 | backgroundColor: Colors.white, 114 | }, 115 | sectionContainer: { 116 | marginTop: 32, 117 | paddingHorizontal: 24, 118 | }, 119 | sectionTitle: { 120 | fontSize: 24, 121 | fontWeight: '600', 122 | color: Colors.black, 123 | }, 124 | sectionDescription: { 125 | marginTop: 8, 126 | fontSize: 18, 127 | fontWeight: '400', 128 | color: Colors.dark, 129 | }, 130 | highlight: { 131 | fontWeight: '700', 132 | }, 133 | footer: { 134 | color: Colors.dark, 135 | fontSize: 12, 136 | fontWeight: '600', 137 | padding: 4, 138 | paddingRight: 12, 139 | textAlign: 'right', 140 | }, 141 | }); 142 | 143 | export default App; 144 | -------------------------------------------------------------------------------- /examples/android/app/BUCK: -------------------------------------------------------------------------------- 1 | # To learn about Buck see [Docs](https://buckbuild.com/). 2 | # To run your application with Buck: 3 | # - install Buck 4 | # - `npm start` - to start the packager 5 | # - `cd android` 6 | # - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` 7 | # - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck 8 | # - `buck install -r android/app` - compile, install and run application 9 | # 10 | 11 | load(":build_defs.bzl", "create_aar_targets", "create_jar_targets") 12 | 13 | lib_deps = [] 14 | 15 | create_aar_targets(glob(["libs/*.aar"])) 16 | 17 | create_jar_targets(glob(["libs/*.jar"])) 18 | 19 | android_library( 20 | name = "all-libs", 21 | exported_deps = lib_deps, 22 | ) 23 | 24 | android_library( 25 | name = "app-code", 26 | srcs = glob([ 27 | "src/main/java/**/*.java", 28 | ]), 29 | deps = [ 30 | ":all-libs", 31 | ":build_config", 32 | ":res", 33 | ], 34 | ) 35 | 36 | android_build_config( 37 | name = "build_config", 38 | package = "com.examples", 39 | ) 40 | 41 | android_resource( 42 | name = "res", 43 | package = "com.examples", 44 | res = "src/main/res", 45 | ) 46 | 47 | android_binary( 48 | name = "app", 49 | keystore = "//android/keystores:debug", 50 | manifest = "src/main/AndroidManifest.xml", 51 | package_type = "debug", 52 | deps = [ 53 | ":app-code", 54 | ], 55 | ) 56 | -------------------------------------------------------------------------------- /examples/android/app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: "com.android.application" 2 | 3 | import com.android.build.OutputFile 4 | 5 | /** 6 | * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets 7 | * and bundleReleaseJsAndAssets). 8 | * These basically call `react-native bundle` with the correct arguments during the Android build 9 | * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the 10 | * bundle directly from the development server. Below you can see all the possible configurations 11 | * and their defaults. If you decide to add a configuration block, make sure to add it before the 12 | * `apply from: "../../node_modules/react-native/react.gradle"` line. 13 | * 14 | * project.ext.react = [ 15 | * // the name of the generated asset file containing your JS bundle 16 | * bundleAssetName: "index.android.bundle", 17 | * 18 | * // the entry file for bundle generation 19 | * entryFile: "index.android.js", 20 | * 21 | * // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format 22 | * bundleCommand: "ram-bundle", 23 | * 24 | * // whether to bundle JS and assets in debug mode 25 | * bundleInDebug: false, 26 | * 27 | * // whether to bundle JS and assets in release mode 28 | * bundleInRelease: true, 29 | * 30 | * // whether to bundle JS and assets in another build variant (if configured). 31 | * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants 32 | * // The configuration property can be in the following formats 33 | * // 'bundleIn${productFlavor}${buildType}' 34 | * // 'bundleIn${buildType}' 35 | * // bundleInFreeDebug: true, 36 | * // bundleInPaidRelease: true, 37 | * // bundleInBeta: true, 38 | * 39 | * // whether to disable dev mode in custom build variants (by default only disabled in release) 40 | * // for example: to disable dev mode in the staging build type (if configured) 41 | * devDisabledInStaging: true, 42 | * // The configuration property can be in the following formats 43 | * // 'devDisabledIn${productFlavor}${buildType}' 44 | * // 'devDisabledIn${buildType}' 45 | * 46 | * // the root of your project, i.e. where "package.json" lives 47 | * root: "../../", 48 | * 49 | * // where to put the JS bundle asset in debug mode 50 | * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", 51 | * 52 | * // where to put the JS bundle asset in release mode 53 | * jsBundleDirRelease: "$buildDir/intermediates/assets/release", 54 | * 55 | * // where to put drawable resources / React Native assets, e.g. the ones you use via 56 | * // require('./image.png')), in debug mode 57 | * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", 58 | * 59 | * // where to put drawable resources / React Native assets, e.g. the ones you use via 60 | * // require('./image.png')), in release mode 61 | * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", 62 | * 63 | * // by default the gradle tasks are skipped if none of the JS files or assets change; this means 64 | * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to 65 | * // date; if you have any other folders that you want to ignore for performance reasons (gradle 66 | * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ 67 | * // for example, you might want to remove it from here. 68 | * inputExcludes: ["android/**", "ios/**"], 69 | * 70 | * // override which node gets called and with what additional arguments 71 | * nodeExecutableAndArgs: ["node"], 72 | * 73 | * // supply additional arguments to the packager 74 | * extraPackagerArgs: [] 75 | * ] 76 | */ 77 | 78 | project.ext.react = [ 79 | entryFile: "index.js", 80 | enableHermes: false, // clean and rebuild if changing 81 | ] 82 | 83 | apply from: "../../node_modules/react-native/react.gradle" 84 | 85 | /** 86 | * Set this to true to create two separate APKs instead of one: 87 | * - An APK that only works on ARM devices 88 | * - An APK that only works on x86 devices 89 | * The advantage is the size of the APK is reduced by about 4MB. 90 | * Upload all the APKs to the Play Store and people will download 91 | * the correct one based on the CPU architecture of their device. 92 | */ 93 | def enableSeparateBuildPerCPUArchitecture = false 94 | 95 | /** 96 | * Run Proguard to shrink the Java bytecode in release builds. 97 | */ 98 | def enableProguardInReleaseBuilds = false 99 | 100 | /** 101 | * The preferred build flavor of JavaScriptCore. 102 | * 103 | * For example, to use the international variant, you can use: 104 | * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` 105 | * 106 | * The international variant includes ICU i18n library and necessary data 107 | * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that 108 | * give correct results when using with locales other than en-US. Note that 109 | * this variant is about 6MiB larger per architecture than default. 110 | */ 111 | def jscFlavor = 'org.webkit:android-jsc:+' 112 | 113 | /** 114 | * Whether to enable the Hermes VM. 115 | * 116 | * This should be set on project.ext.react and mirrored here. If it is not set 117 | * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode 118 | * and the benefits of using Hermes will therefore be sharply reduced. 119 | */ 120 | def enableHermes = project.ext.react.get("enableHermes", false); 121 | 122 | android { 123 | compileSdkVersion rootProject.ext.compileSdkVersion 124 | 125 | compileOptions { 126 | sourceCompatibility JavaVersion.VERSION_1_8 127 | targetCompatibility JavaVersion.VERSION_1_8 128 | } 129 | 130 | defaultConfig { 131 | applicationId "com.examples" 132 | minSdkVersion rootProject.ext.minSdkVersion 133 | targetSdkVersion rootProject.ext.targetSdkVersion 134 | versionCode 1 135 | versionName "1.0" 136 | } 137 | splits { 138 | abi { 139 | reset() 140 | enable enableSeparateBuildPerCPUArchitecture 141 | universalApk false // If true, also generate a universal APK 142 | include "armeabi-v7a", "x86", "arm64-v8a", "x86_64" 143 | } 144 | } 145 | signingConfigs { 146 | debug { 147 | storeFile file('debug.keystore') 148 | storePassword 'android' 149 | keyAlias 'androiddebugkey' 150 | keyPassword 'android' 151 | } 152 | } 153 | buildTypes { 154 | debug { 155 | signingConfig signingConfigs.debug 156 | } 157 | release { 158 | // Caution! In production, you need to generate your own keystore file. 159 | // see https://facebook.github.io/react-native/docs/signed-apk-android. 160 | signingConfig signingConfigs.debug 161 | minifyEnabled enableProguardInReleaseBuilds 162 | proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" 163 | } 164 | } 165 | // applicationVariants are e.g. debug, release 166 | applicationVariants.all { variant -> 167 | variant.outputs.each { output -> 168 | // For each separate APK per architecture, set a unique version code as described here: 169 | // https://developer.android.com/studio/build/configure-apk-splits.html 170 | def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4] 171 | def abi = output.getFilter(OutputFile.ABI) 172 | if (abi != null) { // null for the universal-debug, universal-release variants 173 | output.versionCodeOverride = 174 | versionCodes.get(abi) * 1048576 + defaultConfig.versionCode 175 | } 176 | 177 | } 178 | } 179 | } 180 | 181 | dependencies { 182 | implementation fileTree(dir: "libs", include: ["*.jar"]) 183 | implementation "com.facebook.react:react-native:+" // From node_modules 184 | 185 | if (enableHermes) { 186 | def hermesPath = "../../node_modules/hermes-engine/android/"; 187 | debugImplementation files(hermesPath + "hermes-debug.aar") 188 | releaseImplementation files(hermesPath + "hermes-release.aar") 189 | } else { 190 | implementation jscFlavor 191 | } 192 | } 193 | 194 | // Run this once to be able to run the application with BUCK 195 | // puts all compile dependencies into folder libs for BUCK to use 196 | task copyDownloadableDepsToLibs(type: Copy) { 197 | from configurations.compile 198 | into 'libs' 199 | } 200 | 201 | apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) 202 | -------------------------------------------------------------------------------- /examples/android/app/build_defs.bzl: -------------------------------------------------------------------------------- 1 | """Helper definitions to glob .aar and .jar targets""" 2 | 3 | def create_aar_targets(aarfiles): 4 | for aarfile in aarfiles: 5 | name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")] 6 | lib_deps.append(":" + name) 7 | android_prebuilt_aar( 8 | name = name, 9 | aar = aarfile, 10 | ) 11 | 12 | def create_jar_targets(jarfiles): 13 | for jarfile in jarfiles: 14 | name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")] 15 | lib_deps.append(":" + name) 16 | prebuilt_jar( 17 | name = name, 18 | binary_jar = jarfile, 19 | ) 20 | -------------------------------------------------------------------------------- /examples/android/app/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kennytian/meiqia-react-native/1ebcf838b179fe0aa7784ad6101e11c5aa5e9da4/examples/android/app/debug.keystore -------------------------------------------------------------------------------- /examples/android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | -------------------------------------------------------------------------------- /examples/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /examples/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 13 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /examples/android/app/src/main/java/com/examples/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.examples; 2 | 3 | import com.facebook.react.ReactActivity; 4 | 5 | public class MainActivity extends ReactActivity { 6 | 7 | /** 8 | * Returns the name of the main component registered from JavaScript. This is used to schedule 9 | * rendering of the component. 10 | */ 11 | @Override 12 | protected String getMainComponentName() { 13 | return "examples"; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /examples/android/app/src/main/java/com/examples/MainApplication.java: -------------------------------------------------------------------------------- 1 | package com.examples; 2 | 3 | import android.app.Application; 4 | import android.content.Context; 5 | import com.facebook.react.PackageList; 6 | import com.facebook.react.ReactApplication; 7 | import com.facebook.react.ReactNativeHost; 8 | import com.facebook.react.ReactPackage; 9 | import com.facebook.soloader.SoLoader; 10 | import java.lang.reflect.InvocationTargetException; 11 | import java.util.List; 12 | 13 | public class MainApplication extends Application implements ReactApplication { 14 | 15 | private final ReactNativeHost mReactNativeHost = 16 | new ReactNativeHost(this) { 17 | @Override 18 | public boolean getUseDeveloperSupport() { 19 | return BuildConfig.DEBUG; 20 | } 21 | 22 | @Override 23 | protected List getPackages() { 24 | @SuppressWarnings("UnnecessaryLocalVariable") 25 | List packages = new PackageList(this).getPackages(); 26 | // Packages that cannot be autolinked yet can be added manually here, for example: 27 | // packages.add(new MyReactNativePackage()); 28 | return packages; 29 | } 30 | 31 | @Override 32 | protected String getJSMainModuleName() { 33 | return "index"; 34 | } 35 | }; 36 | 37 | @Override 38 | public ReactNativeHost getReactNativeHost() { 39 | return mReactNativeHost; 40 | } 41 | 42 | @Override 43 | public void onCreate() { 44 | super.onCreate(); 45 | SoLoader.init(this, /* native exopackage */ false); 46 | initializeFlipper(this); // Remove this line if you don't want Flipper enabled 47 | } 48 | 49 | /** 50 | * Loads Flipper in React Native templates. 51 | * 52 | * @param context 53 | */ 54 | private static void initializeFlipper(Context context) { 55 | if (BuildConfig.DEBUG) { 56 | try { 57 | /* 58 | We use reflection here to pick up the class that initializes Flipper, 59 | since Flipper library is not available in release mode 60 | */ 61 | Class aClass = Class.forName("com.facebook.flipper.ReactNativeFlipper"); 62 | aClass.getMethod("initializeFlipper", Context.class).invoke(null, context); 63 | } catch (ClassNotFoundException e) { 64 | e.printStackTrace(); 65 | } catch (NoSuchMethodException e) { 66 | e.printStackTrace(); 67 | } catch (IllegalAccessException e) { 68 | e.printStackTrace(); 69 | } catch (InvocationTargetException e) { 70 | e.printStackTrace(); 71 | } 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /examples/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kennytian/meiqia-react-native/1ebcf838b179fe0aa7784ad6101e11c5aa5e9da4/examples/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /examples/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kennytian/meiqia-react-native/1ebcf838b179fe0aa7784ad6101e11c5aa5e9da4/examples/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /examples/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kennytian/meiqia-react-native/1ebcf838b179fe0aa7784ad6101e11c5aa5e9da4/examples/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /examples/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kennytian/meiqia-react-native/1ebcf838b179fe0aa7784ad6101e11c5aa5e9da4/examples/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /examples/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kennytian/meiqia-react-native/1ebcf838b179fe0aa7784ad6101e11c5aa5e9da4/examples/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /examples/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kennytian/meiqia-react-native/1ebcf838b179fe0aa7784ad6101e11c5aa5e9da4/examples/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kennytian/meiqia-react-native/1ebcf838b179fe0aa7784ad6101e11c5aa5e9da4/examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kennytian/meiqia-react-native/1ebcf838b179fe0aa7784ad6101e11c5aa5e9da4/examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kennytian/meiqia-react-native/1ebcf838b179fe0aa7784ad6101e11c5aa5e9da4/examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kennytian/meiqia-react-native/1ebcf838b179fe0aa7784ad6101e11c5aa5e9da4/examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /examples/android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | examples 3 | 4 | -------------------------------------------------------------------------------- /examples/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /examples/android/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | ext { 5 | buildToolsVersion = "28.0.3" 6 | minSdkVersion = 16 7 | compileSdkVersion = 28 8 | targetSdkVersion = 28 9 | } 10 | repositories { 11 | google() 12 | jcenter() 13 | } 14 | dependencies { 15 | classpath("com.android.tools.build:gradle:3.4.2") 16 | 17 | // NOTE: Do not place your application dependencies here; they belong 18 | // in the individual module build.gradle files 19 | } 20 | } 21 | 22 | allprojects { 23 | repositories { 24 | mavenLocal() 25 | maven { 26 | // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm 27 | url("$rootDir/../node_modules/react-native/android") 28 | } 29 | maven { 30 | // Android JSC is installed from npm 31 | url("$rootDir/../node_modules/jsc-android/dist") 32 | } 33 | 34 | google() 35 | jcenter() 36 | maven { url 'https://jitpack.io' } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /examples/android/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m 13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | 20 | android.useAndroidX=true 21 | android.enableJetifier=true 22 | -------------------------------------------------------------------------------- /examples/android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kennytian/meiqia-react-native/1ebcf838b179fe0aa7784ad6101e11c5aa5e9da4/examples/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /examples/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.5-all.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /examples/android/gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # 4 | # Copyright 2015 the original author or authors. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | ############################################################################## 20 | ## 21 | ## Gradle start up script for UN*X 22 | ## 23 | ############################################################################## 24 | 25 | # Attempt to set APP_HOME 26 | # Resolve links: $0 may be a link 27 | PRG="$0" 28 | # Need this for relative symlinks. 29 | while [ -h "$PRG" ] ; do 30 | ls=`ls -ld "$PRG"` 31 | link=`expr "$ls" : '.*-> \(.*\)$'` 32 | if expr "$link" : '/.*' > /dev/null; then 33 | PRG="$link" 34 | else 35 | PRG=`dirname "$PRG"`"/$link" 36 | fi 37 | done 38 | SAVED="`pwd`" 39 | cd "`dirname \"$PRG\"`/" >/dev/null 40 | APP_HOME="`pwd -P`" 41 | cd "$SAVED" >/dev/null 42 | 43 | APP_NAME="Gradle" 44 | APP_BASE_NAME=`basename "$0"` 45 | 46 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 47 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 48 | 49 | # Use the maximum available, or set MAX_FD != -1 to use that value. 50 | MAX_FD="maximum" 51 | 52 | warn () { 53 | echo "$*" 54 | } 55 | 56 | die () { 57 | echo 58 | echo "$*" 59 | echo 60 | exit 1 61 | } 62 | 63 | # OS specific support (must be 'true' or 'false'). 64 | cygwin=false 65 | msys=false 66 | darwin=false 67 | nonstop=false 68 | case "`uname`" in 69 | CYGWIN* ) 70 | cygwin=true 71 | ;; 72 | Darwin* ) 73 | darwin=true 74 | ;; 75 | MINGW* ) 76 | msys=true 77 | ;; 78 | NONSTOP* ) 79 | nonstop=true 80 | ;; 81 | esac 82 | 83 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 84 | 85 | # Determine the Java command to use to start the JVM. 86 | if [ -n "$JAVA_HOME" ] ; then 87 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 88 | # IBM's JDK on AIX uses strange locations for the executables 89 | JAVACMD="$JAVA_HOME/jre/sh/java" 90 | else 91 | JAVACMD="$JAVA_HOME/bin/java" 92 | fi 93 | if [ ! -x "$JAVACMD" ] ; then 94 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 95 | 96 | Please set the JAVA_HOME variable in your environment to match the 97 | location of your Java installation." 98 | fi 99 | else 100 | JAVACMD="java" 101 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 102 | 103 | Please set the JAVA_HOME variable in your environment to match the 104 | location of your Java installation." 105 | fi 106 | 107 | # Increase the maximum file descriptors if we can. 108 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 109 | MAX_FD_LIMIT=`ulimit -H -n` 110 | if [ $? -eq 0 ] ; then 111 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 112 | MAX_FD="$MAX_FD_LIMIT" 113 | fi 114 | ulimit -n $MAX_FD 115 | if [ $? -ne 0 ] ; then 116 | warn "Could not set maximum file descriptor limit: $MAX_FD" 117 | fi 118 | else 119 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 120 | fi 121 | fi 122 | 123 | # For Darwin, add options to specify how the application appears in the dock 124 | if $darwin; then 125 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 126 | fi 127 | 128 | # For Cygwin, switch paths to Windows format before running java 129 | if $cygwin ; then 130 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 131 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 132 | JAVACMD=`cygpath --unix "$JAVACMD"` 133 | 134 | # We build the pattern for arguments to be converted via cygpath 135 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 136 | SEP="" 137 | for dir in $ROOTDIRSRAW ; do 138 | ROOTDIRS="$ROOTDIRS$SEP$dir" 139 | SEP="|" 140 | done 141 | OURCYGPATTERN="(^($ROOTDIRS))" 142 | # Add a user-defined pattern to the cygpath arguments 143 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 144 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 145 | fi 146 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 147 | i=0 148 | for arg in "$@" ; do 149 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 150 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 151 | 152 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 153 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 154 | else 155 | eval `echo args$i`="\"$arg\"" 156 | fi 157 | i=$((i+1)) 158 | done 159 | case $i in 160 | (0) set -- ;; 161 | (1) set -- "$args0" ;; 162 | (2) set -- "$args0" "$args1" ;; 163 | (3) set -- "$args0" "$args1" "$args2" ;; 164 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 165 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 166 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 167 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 168 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 169 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 170 | esac 171 | fi 172 | 173 | # Escape application args 174 | save () { 175 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 176 | echo " " 177 | } 178 | APP_ARGS=$(save "$@") 179 | 180 | # Collect all arguments for the java command, following the shell quoting and substitution rules 181 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 182 | 183 | # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong 184 | if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then 185 | cd "$(dirname "$0")" 186 | fi 187 | 188 | exec "$JAVACMD" "$@" 189 | -------------------------------------------------------------------------------- /examples/android/gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem http://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%" == "" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%" == "" set DIRNAME=. 29 | set APP_BASE_NAME=%~n0 30 | set APP_HOME=%DIRNAME% 31 | 32 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 33 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 34 | 35 | @rem Find java.exe 36 | if defined JAVA_HOME goto findJavaFromJavaHome 37 | 38 | set JAVA_EXE=java.exe 39 | %JAVA_EXE% -version >NUL 2>&1 40 | if "%ERRORLEVEL%" == "0" goto init 41 | 42 | echo. 43 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 44 | echo. 45 | echo Please set the JAVA_HOME variable in your environment to match the 46 | echo location of your Java installation. 47 | 48 | goto fail 49 | 50 | :findJavaFromJavaHome 51 | set JAVA_HOME=%JAVA_HOME:"=% 52 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 53 | 54 | if exist "%JAVA_EXE%" goto init 55 | 56 | echo. 57 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 58 | echo. 59 | echo Please set the JAVA_HOME variable in your environment to match the 60 | echo location of your Java installation. 61 | 62 | goto fail 63 | 64 | :init 65 | @rem Get command-line arguments, handling Windows variants 66 | 67 | if not "%OS%" == "Windows_NT" goto win9xME_args 68 | 69 | :win9xME_args 70 | @rem Slurp the command line arguments. 71 | set CMD_LINE_ARGS= 72 | set _SKIP=2 73 | 74 | :win9xME_args_slurp 75 | if "x%~1" == "x" goto execute 76 | 77 | set CMD_LINE_ARGS=%* 78 | 79 | :execute 80 | @rem Setup the command line 81 | 82 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 83 | 84 | @rem Execute Gradle 85 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 86 | 87 | :end 88 | @rem End local scope for the variables with windows NT shell 89 | if "%ERRORLEVEL%"=="0" goto mainEnd 90 | 91 | :fail 92 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 93 | rem the _cmd.exe /c_ return code! 94 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 95 | exit /b 1 96 | 97 | :mainEnd 98 | if "%OS%"=="Windows_NT" endlocal 99 | 100 | :omega 101 | -------------------------------------------------------------------------------- /examples/android/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'examples' 2 | apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) 3 | include ':app' 4 | -------------------------------------------------------------------------------- /examples/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "examples", 3 | "displayName": "examples" 4 | } -------------------------------------------------------------------------------- /examples/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['module:metro-react-native-babel-preset'], 3 | }; 4 | -------------------------------------------------------------------------------- /examples/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @format 3 | */ 4 | 5 | import {AppRegistry} from 'react-native'; 6 | import App from './App'; 7 | import {name as appName} from './app.json'; 8 | 9 | AppRegistry.registerComponent(appName, () => App); 10 | -------------------------------------------------------------------------------- /examples/ios/examples-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 | -------------------------------------------------------------------------------- /examples/ios/examples-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 | -------------------------------------------------------------------------------- /examples/ios/examples.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 /* examplesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* examplesTests.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 /* examplesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* examplesTests.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 | B9087356228FD7A60063E8FA /* libRNMeiqia.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B90872FC228FB27C0063E8FA /* libRNMeiqia.a */; }; 42 | /* End PBXBuildFile section */ 43 | 44 | /* Begin PBXContainerItemProxy section */ 45 | 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = { 46 | isa = PBXContainerItemProxy; 47 | containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; 48 | proxyType = 2; 49 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 50 | remoteInfo = RCTActionSheet; 51 | }; 52 | 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = { 53 | isa = PBXContainerItemProxy; 54 | containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; 55 | proxyType = 2; 56 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 57 | remoteInfo = RCTGeolocation; 58 | }; 59 | 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = { 60 | isa = PBXContainerItemProxy; 61 | containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 62 | proxyType = 2; 63 | remoteGlobalIDString = 58B5115D1A9E6B3D00147676; 64 | remoteInfo = RCTImage; 65 | }; 66 | 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = { 67 | isa = PBXContainerItemProxy; 68 | containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 69 | proxyType = 2; 70 | remoteGlobalIDString = 58B511DB1A9E6C8500147676; 71 | remoteInfo = RCTNetwork; 72 | }; 73 | 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = { 74 | isa = PBXContainerItemProxy; 75 | containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; 76 | proxyType = 2; 77 | remoteGlobalIDString = 832C81801AAF6DEF007FA2F7; 78 | remoteInfo = RCTVibration; 79 | }; 80 | 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { 81 | isa = PBXContainerItemProxy; 82 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; 83 | proxyType = 1; 84 | remoteGlobalIDString = 13B07F861A680F5B00A75B9A; 85 | remoteInfo = examples; 86 | }; 87 | 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = { 88 | isa = PBXContainerItemProxy; 89 | containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 90 | proxyType = 2; 91 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 92 | remoteInfo = RCTSettings; 93 | }; 94 | 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = { 95 | isa = PBXContainerItemProxy; 96 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 97 | proxyType = 2; 98 | remoteGlobalIDString = 3C86DF461ADF2C930047B81A; 99 | remoteInfo = RCTWebSocket; 100 | }; 101 | 146834031AC3E56700842450 /* PBXContainerItemProxy */ = { 102 | isa = PBXContainerItemProxy; 103 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 104 | proxyType = 2; 105 | remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; 106 | remoteInfo = React; 107 | }; 108 | 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = { 109 | isa = PBXContainerItemProxy; 110 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; 111 | proxyType = 1; 112 | remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7; 113 | remoteInfo = "examples-tvOS"; 114 | }; 115 | 2D16E6711FA4F8DC00B85C8A /* PBXContainerItemProxy */ = { 116 | isa = PBXContainerItemProxy; 117 | containerPortal = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; 118 | proxyType = 2; 119 | remoteGlobalIDString = ADD01A681E09402E00F6D226; 120 | remoteInfo = "RCTBlob-tvOS"; 121 | }; 122 | 2D16E6831FA4F8DC00B85C8A /* PBXContainerItemProxy */ = { 123 | isa = PBXContainerItemProxy; 124 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 125 | proxyType = 2; 126 | remoteGlobalIDString = 3DBE0D001F3B181A0099AA32; 127 | remoteInfo = fishhook; 128 | }; 129 | 2D16E6851FA4F8DC00B85C8A /* PBXContainerItemProxy */ = { 130 | isa = PBXContainerItemProxy; 131 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 132 | proxyType = 2; 133 | remoteGlobalIDString = 3DBE0D0D1F3B181C0099AA32; 134 | remoteInfo = "fishhook-tvOS"; 135 | }; 136 | 2DF0FFDE2056DD460020B375 /* PBXContainerItemProxy */ = { 137 | isa = PBXContainerItemProxy; 138 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 139 | proxyType = 2; 140 | remoteGlobalIDString = EBF21BDC1FC498900052F4D5; 141 | remoteInfo = jsinspector; 142 | }; 143 | 2DF0FFE02056DD460020B375 /* PBXContainerItemProxy */ = { 144 | isa = PBXContainerItemProxy; 145 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 146 | proxyType = 2; 147 | remoteGlobalIDString = EBF21BFA1FC4989A0052F4D5; 148 | remoteInfo = "jsinspector-tvOS"; 149 | }; 150 | 2DF0FFE22056DD460020B375 /* PBXContainerItemProxy */ = { 151 | isa = PBXContainerItemProxy; 152 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 153 | proxyType = 2; 154 | remoteGlobalIDString = 139D7ECE1E25DB7D00323FB7; 155 | remoteInfo = "third-party"; 156 | }; 157 | 2DF0FFE42056DD460020B375 /* PBXContainerItemProxy */ = { 158 | isa = PBXContainerItemProxy; 159 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 160 | proxyType = 2; 161 | remoteGlobalIDString = 3D383D3C1EBD27B6005632C8; 162 | remoteInfo = "third-party-tvOS"; 163 | }; 164 | 2DF0FFE62056DD460020B375 /* PBXContainerItemProxy */ = { 165 | isa = PBXContainerItemProxy; 166 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 167 | proxyType = 2; 168 | remoteGlobalIDString = 139D7E881E25C6D100323FB7; 169 | remoteInfo = "double-conversion"; 170 | }; 171 | 2DF0FFE82056DD460020B375 /* PBXContainerItemProxy */ = { 172 | isa = PBXContainerItemProxy; 173 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 174 | proxyType = 2; 175 | remoteGlobalIDString = 3D383D621EBD27B9005632C8; 176 | remoteInfo = "double-conversion-tvOS"; 177 | }; 178 | 2DF0FFEA2056DD460020B375 /* PBXContainerItemProxy */ = { 179 | isa = PBXContainerItemProxy; 180 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 181 | proxyType = 2; 182 | remoteGlobalIDString = 9936F3131F5F2E4B0010BF04; 183 | remoteInfo = privatedata; 184 | }; 185 | 2DF0FFEC2056DD460020B375 /* PBXContainerItemProxy */ = { 186 | isa = PBXContainerItemProxy; 187 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 188 | proxyType = 2; 189 | remoteGlobalIDString = 9936F32F1F5F2E5B0010BF04; 190 | remoteInfo = "privatedata-tvOS"; 191 | }; 192 | 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = { 193 | isa = PBXContainerItemProxy; 194 | containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 195 | proxyType = 2; 196 | remoteGlobalIDString = 2D2A283A1D9B042B00D4039D; 197 | remoteInfo = "RCTImage-tvOS"; 198 | }; 199 | 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */ = { 200 | isa = PBXContainerItemProxy; 201 | containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 202 | proxyType = 2; 203 | remoteGlobalIDString = 2D2A28471D9B043800D4039D; 204 | remoteInfo = "RCTLinking-tvOS"; 205 | }; 206 | 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */ = { 207 | isa = PBXContainerItemProxy; 208 | containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 209 | proxyType = 2; 210 | remoteGlobalIDString = 2D2A28541D9B044C00D4039D; 211 | remoteInfo = "RCTNetwork-tvOS"; 212 | }; 213 | 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */ = { 214 | isa = PBXContainerItemProxy; 215 | containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 216 | proxyType = 2; 217 | remoteGlobalIDString = 2D2A28611D9B046600D4039D; 218 | remoteInfo = "RCTSettings-tvOS"; 219 | }; 220 | 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */ = { 221 | isa = PBXContainerItemProxy; 222 | containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 223 | proxyType = 2; 224 | remoteGlobalIDString = 2D2A287B1D9B048500D4039D; 225 | remoteInfo = "RCTText-tvOS"; 226 | }; 227 | 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */ = { 228 | isa = PBXContainerItemProxy; 229 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 230 | proxyType = 2; 231 | remoteGlobalIDString = 2D2A28881D9B049200D4039D; 232 | remoteInfo = "RCTWebSocket-tvOS"; 233 | }; 234 | 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */ = { 235 | isa = PBXContainerItemProxy; 236 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 237 | proxyType = 2; 238 | remoteGlobalIDString = 2D2A28131D9B038B00D4039D; 239 | remoteInfo = "React-tvOS"; 240 | }; 241 | 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */ = { 242 | isa = PBXContainerItemProxy; 243 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 244 | proxyType = 2; 245 | remoteGlobalIDString = 3D3C059A1DE3340900C268FA; 246 | remoteInfo = yoga; 247 | }; 248 | 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */ = { 249 | isa = PBXContainerItemProxy; 250 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 251 | proxyType = 2; 252 | remoteGlobalIDString = 3D3C06751DE3340C00C268FA; 253 | remoteInfo = "yoga-tvOS"; 254 | }; 255 | 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */ = { 256 | isa = PBXContainerItemProxy; 257 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 258 | proxyType = 2; 259 | remoteGlobalIDString = 3D3CD9251DE5FBEC00167DC4; 260 | remoteInfo = cxxreact; 261 | }; 262 | 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */ = { 263 | isa = PBXContainerItemProxy; 264 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 265 | proxyType = 2; 266 | remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4; 267 | remoteInfo = "cxxreact-tvOS"; 268 | }; 269 | 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */ = { 270 | isa = PBXContainerItemProxy; 271 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 272 | proxyType = 2; 273 | remoteGlobalIDString = 3D3CD90B1DE5FBD600167DC4; 274 | remoteInfo = jschelpers; 275 | }; 276 | 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */ = { 277 | isa = PBXContainerItemProxy; 278 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 279 | proxyType = 2; 280 | remoteGlobalIDString = 3D3CD9181DE5FBD800167DC4; 281 | remoteInfo = "jschelpers-tvOS"; 282 | }; 283 | 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { 284 | isa = PBXContainerItemProxy; 285 | containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; 286 | proxyType = 2; 287 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 288 | remoteInfo = RCTAnimation; 289 | }; 290 | 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { 291 | isa = PBXContainerItemProxy; 292 | containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; 293 | proxyType = 2; 294 | remoteGlobalIDString = 2D2A28201D9B03D100D4039D; 295 | remoteInfo = "RCTAnimation-tvOS"; 296 | }; 297 | 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = { 298 | isa = PBXContainerItemProxy; 299 | containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 300 | proxyType = 2; 301 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 302 | remoteInfo = RCTLinking; 303 | }; 304 | 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = { 305 | isa = PBXContainerItemProxy; 306 | containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 307 | proxyType = 2; 308 | remoteGlobalIDString = 58B5119B1A9E6C1200147676; 309 | remoteInfo = RCTText; 310 | }; 311 | ADBDB9261DFEBF0700ED6528 /* PBXContainerItemProxy */ = { 312 | isa = PBXContainerItemProxy; 313 | containerPortal = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; 314 | proxyType = 2; 315 | remoteGlobalIDString = 358F4ED71D1E81A9004DF814; 316 | remoteInfo = RCTBlob; 317 | }; 318 | B90872FB228FB27C0063E8FA /* PBXContainerItemProxy */ = { 319 | isa = PBXContainerItemProxy; 320 | containerPortal = B90872F7228FB27C0063E8FA /* RNMeiqia.xcodeproj */; 321 | proxyType = 2; 322 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 323 | remoteInfo = RNMeiqia; 324 | }; 325 | /* End PBXContainerItemProxy section */ 326 | 327 | /* Begin PBXFileReference section */ 328 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; 329 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; }; 330 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; }; 331 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; }; 332 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; }; 333 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = ""; }; 334 | 00E356EE1AD99517003FC87E /* examplesTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = examplesTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 335 | 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 336 | 00E356F21AD99517003FC87E /* examplesTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = examplesTests.m; sourceTree = ""; }; 337 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; }; 338 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; }; 339 | 13B07F961A680F5B00A75B9A /* examples.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = examples.app; sourceTree = BUILT_PRODUCTS_DIR; }; 340 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = examples/AppDelegate.h; sourceTree = ""; }; 341 | 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = examples/AppDelegate.m; sourceTree = ""; }; 342 | 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 343 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = examples/Images.xcassets; sourceTree = ""; }; 344 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = examples/Info.plist; sourceTree = ""; }; 345 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = examples/main.m; sourceTree = ""; }; 346 | 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; 347 | 2D02E47B1E0B4A5D006451C7 /* examples-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "examples-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 348 | 2D02E4901E0B4A5D006451C7 /* examples-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "examples-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 349 | 2D16E6891FA4F8E400B85C8A /* libReact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReact.a; sourceTree = BUILT_PRODUCTS_DIR; }; 350 | 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = ""; }; 351 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; }; 352 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; 353 | ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTBlob.xcodeproj; path = "../node_modules/react-native/Libraries/Blob/RCTBlob.xcodeproj"; sourceTree = ""; }; 354 | AF164E951C2B41948F236C41 /* libRNMeiqia.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNMeiqia.a; sourceTree = ""; }; 355 | B90872F7228FB27C0063E8FA /* RNMeiqia.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNMeiqia.xcodeproj; path = "../node_modules/meiqia-react-native/ios/RNMeiqia.xcodeproj"; sourceTree = ""; }; 356 | /* End PBXFileReference section */ 357 | 358 | /* Begin PBXFrameworksBuildPhase section */ 359 | 00E356EB1AD99517003FC87E /* Frameworks */ = { 360 | isa = PBXFrameworksBuildPhase; 361 | buildActionMask = 2147483647; 362 | files = ( 363 | 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */, 364 | ); 365 | runOnlyForDeploymentPostprocessing = 0; 366 | }; 367 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { 368 | isa = PBXFrameworksBuildPhase; 369 | buildActionMask = 2147483647; 370 | files = ( 371 | B9087356228FD7A60063E8FA /* libRNMeiqia.a in Frameworks */, 372 | ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */, 373 | 11D1A2F320CAFA9E000508D9 /* libRCTAnimation.a in Frameworks */, 374 | 146834051AC3E58100842450 /* libReact.a in Frameworks */, 375 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */, 376 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */, 377 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */, 378 | 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */, 379 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */, 380 | 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */, 381 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */, 382 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */, 383 | 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */, 384 | ); 385 | runOnlyForDeploymentPostprocessing = 0; 386 | }; 387 | 2D02E4781E0B4A5D006451C7 /* Frameworks */ = { 388 | isa = PBXFrameworksBuildPhase; 389 | buildActionMask = 2147483647; 390 | files = ( 391 | 2D16E6881FA4F8E400B85C8A /* libReact.a in Frameworks */, 392 | 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation.a in Frameworks */, 393 | 2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */, 394 | 2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */, 395 | 2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */, 396 | 2D02E4C61E0B4AEC006451C7 /* libRCTSettings-tvOS.a in Frameworks */, 397 | 2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */, 398 | 2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */, 399 | ); 400 | runOnlyForDeploymentPostprocessing = 0; 401 | }; 402 | 2D02E48D1E0B4A5D006451C7 /* Frameworks */ = { 403 | isa = PBXFrameworksBuildPhase; 404 | buildActionMask = 2147483647; 405 | files = ( 406 | 2DF0FFEE2056DD460020B375 /* libReact.a in Frameworks */, 407 | ); 408 | runOnlyForDeploymentPostprocessing = 0; 409 | }; 410 | /* End PBXFrameworksBuildPhase section */ 411 | 412 | /* Begin PBXGroup section */ 413 | 00C302A81ABCB8CE00DB3ED1 /* Products */ = { 414 | isa = PBXGroup; 415 | children = ( 416 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */, 417 | ); 418 | name = Products; 419 | sourceTree = ""; 420 | }; 421 | 00C302B61ABCB90400DB3ED1 /* Products */ = { 422 | isa = PBXGroup; 423 | children = ( 424 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */, 425 | ); 426 | name = Products; 427 | sourceTree = ""; 428 | }; 429 | 00C302BC1ABCB91800DB3ED1 /* Products */ = { 430 | isa = PBXGroup; 431 | children = ( 432 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */, 433 | 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */, 434 | ); 435 | name = Products; 436 | sourceTree = ""; 437 | }; 438 | 00C302D41ABCB9D200DB3ED1 /* Products */ = { 439 | isa = PBXGroup; 440 | children = ( 441 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */, 442 | 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */, 443 | ); 444 | name = Products; 445 | sourceTree = ""; 446 | }; 447 | 00C302E01ABCB9EE00DB3ED1 /* Products */ = { 448 | isa = PBXGroup; 449 | children = ( 450 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */, 451 | ); 452 | name = Products; 453 | sourceTree = ""; 454 | }; 455 | 00E356EF1AD99517003FC87E /* examplesTests */ = { 456 | isa = PBXGroup; 457 | children = ( 458 | 00E356F21AD99517003FC87E /* examplesTests.m */, 459 | 00E356F01AD99517003FC87E /* Supporting Files */, 460 | ); 461 | path = examplesTests; 462 | sourceTree = ""; 463 | }; 464 | 00E356F01AD99517003FC87E /* Supporting Files */ = { 465 | isa = PBXGroup; 466 | children = ( 467 | 00E356F11AD99517003FC87E /* Info.plist */, 468 | ); 469 | name = "Supporting Files"; 470 | sourceTree = ""; 471 | }; 472 | 139105B71AF99BAD00B5F7CC /* Products */ = { 473 | isa = PBXGroup; 474 | children = ( 475 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */, 476 | 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */, 477 | ); 478 | name = Products; 479 | sourceTree = ""; 480 | }; 481 | 139FDEE71B06529A00C62182 /* Products */ = { 482 | isa = PBXGroup; 483 | children = ( 484 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */, 485 | 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */, 486 | 2D16E6841FA4F8DC00B85C8A /* libfishhook.a */, 487 | 2D16E6861FA4F8DC00B85C8A /* libfishhook-tvOS.a */, 488 | ); 489 | name = Products; 490 | sourceTree = ""; 491 | }; 492 | 13B07FAE1A68108700A75B9A /* examples */ = { 493 | isa = PBXGroup; 494 | children = ( 495 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */, 496 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 497 | 13B07FB01A68108700A75B9A /* AppDelegate.m */, 498 | 13B07FB51A68108700A75B9A /* Images.xcassets */, 499 | 13B07FB61A68108700A75B9A /* Info.plist */, 500 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, 501 | 13B07FB71A68108700A75B9A /* main.m */, 502 | ); 503 | name = examples; 504 | sourceTree = ""; 505 | }; 506 | 146834001AC3E56700842450 /* Products */ = { 507 | isa = PBXGroup; 508 | children = ( 509 | 146834041AC3E56700842450 /* libReact.a */, 510 | 3DAD3EA31DF850E9000B6D8A /* libReact.a */, 511 | 3DAD3EA51DF850E9000B6D8A /* libyoga.a */, 512 | 3DAD3EA71DF850E9000B6D8A /* libyoga.a */, 513 | 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */, 514 | 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */, 515 | 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */, 516 | 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */, 517 | 2DF0FFDF2056DD460020B375 /* libjsinspector.a */, 518 | 2DF0FFE12056DD460020B375 /* libjsinspector-tvOS.a */, 519 | 2DF0FFE32056DD460020B375 /* libthird-party.a */, 520 | 2DF0FFE52056DD460020B375 /* libthird-party.a */, 521 | 2DF0FFE72056DD460020B375 /* libdouble-conversion.a */, 522 | 2DF0FFE92056DD460020B375 /* libdouble-conversion.a */, 523 | 2DF0FFEB2056DD460020B375 /* libprivatedata.a */, 524 | 2DF0FFED2056DD460020B375 /* libprivatedata-tvOS.a */, 525 | ); 526 | name = Products; 527 | sourceTree = ""; 528 | }; 529 | 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { 530 | isa = PBXGroup; 531 | children = ( 532 | 2D16E6891FA4F8E400B85C8A /* libReact.a */, 533 | ); 534 | name = Frameworks; 535 | sourceTree = ""; 536 | }; 537 | 5E91572E1DD0AC6500FF2AA8 /* Products */ = { 538 | isa = PBXGroup; 539 | children = ( 540 | 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */, 541 | 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */, 542 | ); 543 | name = Products; 544 | sourceTree = ""; 545 | }; 546 | 78C398B11ACF4ADC00677621 /* Products */ = { 547 | isa = PBXGroup; 548 | children = ( 549 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */, 550 | 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */, 551 | ); 552 | name = Products; 553 | sourceTree = ""; 554 | }; 555 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = { 556 | isa = PBXGroup; 557 | children = ( 558 | B90872F7228FB27C0063E8FA /* RNMeiqia.xcodeproj */, 559 | 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */, 560 | 146833FF1AC3E56700842450 /* React.xcodeproj */, 561 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */, 562 | ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */, 563 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */, 564 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */, 565 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */, 566 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */, 567 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */, 568 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, 569 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, 570 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */, 571 | ); 572 | name = Libraries; 573 | sourceTree = ""; 574 | }; 575 | 832341B11AAA6A8300B99B32 /* Products */ = { 576 | isa = PBXGroup; 577 | children = ( 578 | 832341B51AAA6A8300B99B32 /* libRCTText.a */, 579 | 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */, 580 | ); 581 | name = Products; 582 | sourceTree = ""; 583 | }; 584 | 83CBB9F61A601CBA00E9B192 = { 585 | isa = PBXGroup; 586 | children = ( 587 | 13B07FAE1A68108700A75B9A /* examples */, 588 | 832341AE1AAA6A7D00B99B32 /* Libraries */, 589 | 00E356EF1AD99517003FC87E /* examplesTests */, 590 | 83CBBA001A601CBA00E9B192 /* Products */, 591 | 2D16E6871FA4F8E400B85C8A /* Frameworks */, 592 | B9086F51228EC97D0063E8FA /* Recovered References */, 593 | ); 594 | indentWidth = 2; 595 | sourceTree = ""; 596 | tabWidth = 2; 597 | usesTabs = 0; 598 | }; 599 | 83CBBA001A601CBA00E9B192 /* Products */ = { 600 | isa = PBXGroup; 601 | children = ( 602 | 13B07F961A680F5B00A75B9A /* examples.app */, 603 | 00E356EE1AD99517003FC87E /* examplesTests.xctest */, 604 | 2D02E47B1E0B4A5D006451C7 /* examples-tvOS.app */, 605 | 2D02E4901E0B4A5D006451C7 /* examples-tvOSTests.xctest */, 606 | ); 607 | name = Products; 608 | sourceTree = ""; 609 | }; 610 | ADBDB9201DFEBF0600ED6528 /* Products */ = { 611 | isa = PBXGroup; 612 | children = ( 613 | ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */, 614 | 2D16E6721FA4F8DC00B85C8A /* libRCTBlob-tvOS.a */, 615 | ); 616 | name = Products; 617 | sourceTree = ""; 618 | }; 619 | B9086F51228EC97D0063E8FA /* Recovered References */ = { 620 | isa = PBXGroup; 621 | children = ( 622 | AF164E951C2B41948F236C41 /* libRNMeiqia.a */, 623 | ); 624 | name = "Recovered References"; 625 | sourceTree = ""; 626 | }; 627 | B90872F8228FB27C0063E8FA /* Products */ = { 628 | isa = PBXGroup; 629 | children = ( 630 | B90872FC228FB27C0063E8FA /* libRNMeiqia.a */, 631 | ); 632 | name = Products; 633 | sourceTree = ""; 634 | }; 635 | /* End PBXGroup section */ 636 | 637 | /* Begin PBXNativeTarget section */ 638 | 00E356ED1AD99517003FC87E /* examplesTests */ = { 639 | isa = PBXNativeTarget; 640 | buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "examplesTests" */; 641 | buildPhases = ( 642 | 00E356EA1AD99517003FC87E /* Sources */, 643 | 00E356EB1AD99517003FC87E /* Frameworks */, 644 | 00E356EC1AD99517003FC87E /* Resources */, 645 | ); 646 | buildRules = ( 647 | ); 648 | dependencies = ( 649 | 00E356F51AD99517003FC87E /* PBXTargetDependency */, 650 | ); 651 | name = examplesTests; 652 | productName = examplesTests; 653 | productReference = 00E356EE1AD99517003FC87E /* examplesTests.xctest */; 654 | productType = "com.apple.product-type.bundle.unit-test"; 655 | }; 656 | 13B07F861A680F5B00A75B9A /* examples */ = { 657 | isa = PBXNativeTarget; 658 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "examples" */; 659 | buildPhases = ( 660 | 13B07F871A680F5B00A75B9A /* Sources */, 661 | 13B07F8C1A680F5B00A75B9A /* Frameworks */, 662 | 13B07F8E1A680F5B00A75B9A /* Resources */, 663 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 664 | ); 665 | buildRules = ( 666 | ); 667 | dependencies = ( 668 | ); 669 | name = examples; 670 | productName = "Hello World"; 671 | productReference = 13B07F961A680F5B00A75B9A /* examples.app */; 672 | productType = "com.apple.product-type.application"; 673 | }; 674 | 2D02E47A1E0B4A5D006451C7 /* examples-tvOS */ = { 675 | isa = PBXNativeTarget; 676 | buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "examples-tvOS" */; 677 | buildPhases = ( 678 | 2D02E4771E0B4A5D006451C7 /* Sources */, 679 | 2D02E4781E0B4A5D006451C7 /* Frameworks */, 680 | 2D02E4791E0B4A5D006451C7 /* Resources */, 681 | 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */, 682 | ); 683 | buildRules = ( 684 | ); 685 | dependencies = ( 686 | ); 687 | name = "examples-tvOS"; 688 | productName = "examples-tvOS"; 689 | productReference = 2D02E47B1E0B4A5D006451C7 /* examples-tvOS.app */; 690 | productType = "com.apple.product-type.application"; 691 | }; 692 | 2D02E48F1E0B4A5D006451C7 /* examples-tvOSTests */ = { 693 | isa = PBXNativeTarget; 694 | buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "examples-tvOSTests" */; 695 | buildPhases = ( 696 | 2D02E48C1E0B4A5D006451C7 /* Sources */, 697 | 2D02E48D1E0B4A5D006451C7 /* Frameworks */, 698 | 2D02E48E1E0B4A5D006451C7 /* Resources */, 699 | ); 700 | buildRules = ( 701 | ); 702 | dependencies = ( 703 | 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */, 704 | ); 705 | name = "examples-tvOSTests"; 706 | productName = "examples-tvOSTests"; 707 | productReference = 2D02E4901E0B4A5D006451C7 /* examples-tvOSTests.xctest */; 708 | productType = "com.apple.product-type.bundle.unit-test"; 709 | }; 710 | /* End PBXNativeTarget section */ 711 | 712 | /* Begin PBXProject section */ 713 | 83CBB9F71A601CBA00E9B192 /* Project object */ = { 714 | isa = PBXProject; 715 | attributes = { 716 | LastUpgradeCheck = 940; 717 | ORGANIZATIONNAME = Facebook; 718 | TargetAttributes = { 719 | 00E356ED1AD99517003FC87E = { 720 | CreatedOnToolsVersion = 6.2; 721 | TestTargetID = 13B07F861A680F5B00A75B9A; 722 | }; 723 | 2D02E47A1E0B4A5D006451C7 = { 724 | CreatedOnToolsVersion = 8.2.1; 725 | ProvisioningStyle = Automatic; 726 | }; 727 | 2D02E48F1E0B4A5D006451C7 = { 728 | CreatedOnToolsVersion = 8.2.1; 729 | ProvisioningStyle = Automatic; 730 | TestTargetID = 2D02E47A1E0B4A5D006451C7; 731 | }; 732 | }; 733 | }; 734 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "examples" */; 735 | compatibilityVersion = "Xcode 3.2"; 736 | developmentRegion = English; 737 | hasScannedForEncodings = 0; 738 | knownRegions = ( 739 | en, 740 | Base, 741 | ); 742 | mainGroup = 83CBB9F61A601CBA00E9B192; 743 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; 744 | projectDirPath = ""; 745 | projectReferences = ( 746 | { 747 | ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */; 748 | ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; 749 | }, 750 | { 751 | ProductGroup = 5E91572E1DD0AC6500FF2AA8 /* Products */; 752 | ProjectRef = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; 753 | }, 754 | { 755 | ProductGroup = ADBDB9201DFEBF0600ED6528 /* Products */; 756 | ProjectRef = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; 757 | }, 758 | { 759 | ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */; 760 | ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; 761 | }, 762 | { 763 | ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */; 764 | ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 765 | }, 766 | { 767 | ProductGroup = 78C398B11ACF4ADC00677621 /* Products */; 768 | ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 769 | }, 770 | { 771 | ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */; 772 | ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 773 | }, 774 | { 775 | ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */; 776 | ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 777 | }, 778 | { 779 | ProductGroup = 832341B11AAA6A8300B99B32 /* Products */; 780 | ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 781 | }, 782 | { 783 | ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */; 784 | ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; 785 | }, 786 | { 787 | ProductGroup = 139FDEE71B06529A00C62182 /* Products */; 788 | ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 789 | }, 790 | { 791 | ProductGroup = 146834001AC3E56700842450 /* Products */; 792 | ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */; 793 | }, 794 | { 795 | ProductGroup = B90872F8228FB27C0063E8FA /* Products */; 796 | ProjectRef = B90872F7228FB27C0063E8FA /* RNMeiqia.xcodeproj */; 797 | }, 798 | ); 799 | projectRoot = ""; 800 | targets = ( 801 | 13B07F861A680F5B00A75B9A /* examples */, 802 | 00E356ED1AD99517003FC87E /* examplesTests */, 803 | 2D02E47A1E0B4A5D006451C7 /* examples-tvOS */, 804 | 2D02E48F1E0B4A5D006451C7 /* examples-tvOSTests */, 805 | ); 806 | }; 807 | /* End PBXProject section */ 808 | 809 | /* Begin PBXReferenceProxy section */ 810 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = { 811 | isa = PBXReferenceProxy; 812 | fileType = archive.ar; 813 | path = libRCTActionSheet.a; 814 | remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */; 815 | sourceTree = BUILT_PRODUCTS_DIR; 816 | }; 817 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = { 818 | isa = PBXReferenceProxy; 819 | fileType = archive.ar; 820 | path = libRCTGeolocation.a; 821 | remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */; 822 | sourceTree = BUILT_PRODUCTS_DIR; 823 | }; 824 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = { 825 | isa = PBXReferenceProxy; 826 | fileType = archive.ar; 827 | path = libRCTImage.a; 828 | remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */; 829 | sourceTree = BUILT_PRODUCTS_DIR; 830 | }; 831 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = { 832 | isa = PBXReferenceProxy; 833 | fileType = archive.ar; 834 | path = libRCTNetwork.a; 835 | remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */; 836 | sourceTree = BUILT_PRODUCTS_DIR; 837 | }; 838 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = { 839 | isa = PBXReferenceProxy; 840 | fileType = archive.ar; 841 | path = libRCTVibration.a; 842 | remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */; 843 | sourceTree = BUILT_PRODUCTS_DIR; 844 | }; 845 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = { 846 | isa = PBXReferenceProxy; 847 | fileType = archive.ar; 848 | path = libRCTSettings.a; 849 | remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */; 850 | sourceTree = BUILT_PRODUCTS_DIR; 851 | }; 852 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = { 853 | isa = PBXReferenceProxy; 854 | fileType = archive.ar; 855 | path = libRCTWebSocket.a; 856 | remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */; 857 | sourceTree = BUILT_PRODUCTS_DIR; 858 | }; 859 | 146834041AC3E56700842450 /* libReact.a */ = { 860 | isa = PBXReferenceProxy; 861 | fileType = archive.ar; 862 | path = libReact.a; 863 | remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; 864 | sourceTree = BUILT_PRODUCTS_DIR; 865 | }; 866 | 2D16E6721FA4F8DC00B85C8A /* libRCTBlob-tvOS.a */ = { 867 | isa = PBXReferenceProxy; 868 | fileType = archive.ar; 869 | path = "libRCTBlob-tvOS.a"; 870 | remoteRef = 2D16E6711FA4F8DC00B85C8A /* PBXContainerItemProxy */; 871 | sourceTree = BUILT_PRODUCTS_DIR; 872 | }; 873 | 2D16E6841FA4F8DC00B85C8A /* libfishhook.a */ = { 874 | isa = PBXReferenceProxy; 875 | fileType = archive.ar; 876 | path = libfishhook.a; 877 | remoteRef = 2D16E6831FA4F8DC00B85C8A /* PBXContainerItemProxy */; 878 | sourceTree = BUILT_PRODUCTS_DIR; 879 | }; 880 | 2D16E6861FA4F8DC00B85C8A /* libfishhook-tvOS.a */ = { 881 | isa = PBXReferenceProxy; 882 | fileType = archive.ar; 883 | path = "libfishhook-tvOS.a"; 884 | remoteRef = 2D16E6851FA4F8DC00B85C8A /* PBXContainerItemProxy */; 885 | sourceTree = BUILT_PRODUCTS_DIR; 886 | }; 887 | 2DF0FFDF2056DD460020B375 /* libjsinspector.a */ = { 888 | isa = PBXReferenceProxy; 889 | fileType = archive.ar; 890 | path = libjsinspector.a; 891 | remoteRef = 2DF0FFDE2056DD460020B375 /* PBXContainerItemProxy */; 892 | sourceTree = BUILT_PRODUCTS_DIR; 893 | }; 894 | 2DF0FFE12056DD460020B375 /* libjsinspector-tvOS.a */ = { 895 | isa = PBXReferenceProxy; 896 | fileType = archive.ar; 897 | path = "libjsinspector-tvOS.a"; 898 | remoteRef = 2DF0FFE02056DD460020B375 /* PBXContainerItemProxy */; 899 | sourceTree = BUILT_PRODUCTS_DIR; 900 | }; 901 | 2DF0FFE32056DD460020B375 /* libthird-party.a */ = { 902 | isa = PBXReferenceProxy; 903 | fileType = archive.ar; 904 | path = "libthird-party.a"; 905 | remoteRef = 2DF0FFE22056DD460020B375 /* PBXContainerItemProxy */; 906 | sourceTree = BUILT_PRODUCTS_DIR; 907 | }; 908 | 2DF0FFE52056DD460020B375 /* libthird-party.a */ = { 909 | isa = PBXReferenceProxy; 910 | fileType = archive.ar; 911 | path = "libthird-party.a"; 912 | remoteRef = 2DF0FFE42056DD460020B375 /* PBXContainerItemProxy */; 913 | sourceTree = BUILT_PRODUCTS_DIR; 914 | }; 915 | 2DF0FFE72056DD460020B375 /* libdouble-conversion.a */ = { 916 | isa = PBXReferenceProxy; 917 | fileType = archive.ar; 918 | path = "libdouble-conversion.a"; 919 | remoteRef = 2DF0FFE62056DD460020B375 /* PBXContainerItemProxy */; 920 | sourceTree = BUILT_PRODUCTS_DIR; 921 | }; 922 | 2DF0FFE92056DD460020B375 /* libdouble-conversion.a */ = { 923 | isa = PBXReferenceProxy; 924 | fileType = archive.ar; 925 | path = "libdouble-conversion.a"; 926 | remoteRef = 2DF0FFE82056DD460020B375 /* PBXContainerItemProxy */; 927 | sourceTree = BUILT_PRODUCTS_DIR; 928 | }; 929 | 2DF0FFEB2056DD460020B375 /* libprivatedata.a */ = { 930 | isa = PBXReferenceProxy; 931 | fileType = archive.ar; 932 | path = libprivatedata.a; 933 | remoteRef = 2DF0FFEA2056DD460020B375 /* PBXContainerItemProxy */; 934 | sourceTree = BUILT_PRODUCTS_DIR; 935 | }; 936 | 2DF0FFED2056DD460020B375 /* libprivatedata-tvOS.a */ = { 937 | isa = PBXReferenceProxy; 938 | fileType = archive.ar; 939 | path = "libprivatedata-tvOS.a"; 940 | remoteRef = 2DF0FFEC2056DD460020B375 /* PBXContainerItemProxy */; 941 | sourceTree = BUILT_PRODUCTS_DIR; 942 | }; 943 | 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = { 944 | isa = PBXReferenceProxy; 945 | fileType = archive.ar; 946 | path = "libRCTImage-tvOS.a"; 947 | remoteRef = 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */; 948 | sourceTree = BUILT_PRODUCTS_DIR; 949 | }; 950 | 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */ = { 951 | isa = PBXReferenceProxy; 952 | fileType = archive.ar; 953 | path = "libRCTLinking-tvOS.a"; 954 | remoteRef = 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */; 955 | sourceTree = BUILT_PRODUCTS_DIR; 956 | }; 957 | 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */ = { 958 | isa = PBXReferenceProxy; 959 | fileType = archive.ar; 960 | path = "libRCTNetwork-tvOS.a"; 961 | remoteRef = 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */; 962 | sourceTree = BUILT_PRODUCTS_DIR; 963 | }; 964 | 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */ = { 965 | isa = PBXReferenceProxy; 966 | fileType = archive.ar; 967 | path = "libRCTSettings-tvOS.a"; 968 | remoteRef = 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */; 969 | sourceTree = BUILT_PRODUCTS_DIR; 970 | }; 971 | 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */ = { 972 | isa = PBXReferenceProxy; 973 | fileType = archive.ar; 974 | path = "libRCTText-tvOS.a"; 975 | remoteRef = 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */; 976 | sourceTree = BUILT_PRODUCTS_DIR; 977 | }; 978 | 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */ = { 979 | isa = PBXReferenceProxy; 980 | fileType = archive.ar; 981 | path = "libRCTWebSocket-tvOS.a"; 982 | remoteRef = 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */; 983 | sourceTree = BUILT_PRODUCTS_DIR; 984 | }; 985 | 3DAD3EA31DF850E9000B6D8A /* libReact.a */ = { 986 | isa = PBXReferenceProxy; 987 | fileType = archive.ar; 988 | path = libReact.a; 989 | remoteRef = 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */; 990 | sourceTree = BUILT_PRODUCTS_DIR; 991 | }; 992 | 3DAD3EA51DF850E9000B6D8A /* libyoga.a */ = { 993 | isa = PBXReferenceProxy; 994 | fileType = archive.ar; 995 | path = libyoga.a; 996 | remoteRef = 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */; 997 | sourceTree = BUILT_PRODUCTS_DIR; 998 | }; 999 | 3DAD3EA71DF850E9000B6D8A /* libyoga.a */ = { 1000 | isa = PBXReferenceProxy; 1001 | fileType = archive.ar; 1002 | path = libyoga.a; 1003 | remoteRef = 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */; 1004 | sourceTree = BUILT_PRODUCTS_DIR; 1005 | }; 1006 | 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */ = { 1007 | isa = PBXReferenceProxy; 1008 | fileType = archive.ar; 1009 | path = libcxxreact.a; 1010 | remoteRef = 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */; 1011 | sourceTree = BUILT_PRODUCTS_DIR; 1012 | }; 1013 | 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */ = { 1014 | isa = PBXReferenceProxy; 1015 | fileType = archive.ar; 1016 | path = libcxxreact.a; 1017 | remoteRef = 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */; 1018 | sourceTree = BUILT_PRODUCTS_DIR; 1019 | }; 1020 | 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */ = { 1021 | isa = PBXReferenceProxy; 1022 | fileType = archive.ar; 1023 | path = libjschelpers.a; 1024 | remoteRef = 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */; 1025 | sourceTree = BUILT_PRODUCTS_DIR; 1026 | }; 1027 | 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */ = { 1028 | isa = PBXReferenceProxy; 1029 | fileType = archive.ar; 1030 | path = libjschelpers.a; 1031 | remoteRef = 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */; 1032 | sourceTree = BUILT_PRODUCTS_DIR; 1033 | }; 1034 | 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = { 1035 | isa = PBXReferenceProxy; 1036 | fileType = archive.ar; 1037 | path = libRCTAnimation.a; 1038 | remoteRef = 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */; 1039 | sourceTree = BUILT_PRODUCTS_DIR; 1040 | }; 1041 | 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */ = { 1042 | isa = PBXReferenceProxy; 1043 | fileType = archive.ar; 1044 | path = libRCTAnimation.a; 1045 | remoteRef = 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */; 1046 | sourceTree = BUILT_PRODUCTS_DIR; 1047 | }; 1048 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = { 1049 | isa = PBXReferenceProxy; 1050 | fileType = archive.ar; 1051 | path = libRCTLinking.a; 1052 | remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */; 1053 | sourceTree = BUILT_PRODUCTS_DIR; 1054 | }; 1055 | 832341B51AAA6A8300B99B32 /* libRCTText.a */ = { 1056 | isa = PBXReferenceProxy; 1057 | fileType = archive.ar; 1058 | path = libRCTText.a; 1059 | remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */; 1060 | sourceTree = BUILT_PRODUCTS_DIR; 1061 | }; 1062 | ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */ = { 1063 | isa = PBXReferenceProxy; 1064 | fileType = archive.ar; 1065 | path = libRCTBlob.a; 1066 | remoteRef = ADBDB9261DFEBF0700ED6528 /* PBXContainerItemProxy */; 1067 | sourceTree = BUILT_PRODUCTS_DIR; 1068 | }; 1069 | B90872FC228FB27C0063E8FA /* libRNMeiqia.a */ = { 1070 | isa = PBXReferenceProxy; 1071 | fileType = archive.ar; 1072 | path = libRNMeiqia.a; 1073 | remoteRef = B90872FB228FB27C0063E8FA /* PBXContainerItemProxy */; 1074 | sourceTree = BUILT_PRODUCTS_DIR; 1075 | }; 1076 | /* End PBXReferenceProxy section */ 1077 | 1078 | /* Begin PBXResourcesBuildPhase section */ 1079 | 00E356EC1AD99517003FC87E /* Resources */ = { 1080 | isa = PBXResourcesBuildPhase; 1081 | buildActionMask = 2147483647; 1082 | files = ( 1083 | ); 1084 | runOnlyForDeploymentPostprocessing = 0; 1085 | }; 1086 | 13B07F8E1A680F5B00A75B9A /* Resources */ = { 1087 | isa = PBXResourcesBuildPhase; 1088 | buildActionMask = 2147483647; 1089 | files = ( 1090 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 1091 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, 1092 | ); 1093 | runOnlyForDeploymentPostprocessing = 0; 1094 | }; 1095 | 2D02E4791E0B4A5D006451C7 /* Resources */ = { 1096 | isa = PBXResourcesBuildPhase; 1097 | buildActionMask = 2147483647; 1098 | files = ( 1099 | 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */, 1100 | ); 1101 | runOnlyForDeploymentPostprocessing = 0; 1102 | }; 1103 | 2D02E48E1E0B4A5D006451C7 /* Resources */ = { 1104 | isa = PBXResourcesBuildPhase; 1105 | buildActionMask = 2147483647; 1106 | files = ( 1107 | ); 1108 | runOnlyForDeploymentPostprocessing = 0; 1109 | }; 1110 | /* End PBXResourcesBuildPhase section */ 1111 | 1112 | /* Begin PBXShellScriptBuildPhase section */ 1113 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { 1114 | isa = PBXShellScriptBuildPhase; 1115 | buildActionMask = 2147483647; 1116 | files = ( 1117 | ); 1118 | inputPaths = ( 1119 | ); 1120 | name = "Bundle React Native code and images"; 1121 | outputPaths = ( 1122 | ); 1123 | runOnlyForDeploymentPostprocessing = 0; 1124 | shellPath = /bin/sh; 1125 | shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; 1126 | }; 1127 | 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = { 1128 | isa = PBXShellScriptBuildPhase; 1129 | buildActionMask = 2147483647; 1130 | files = ( 1131 | ); 1132 | inputPaths = ( 1133 | ); 1134 | name = "Bundle React Native Code And Images"; 1135 | outputPaths = ( 1136 | ); 1137 | runOnlyForDeploymentPostprocessing = 0; 1138 | shellPath = /bin/sh; 1139 | shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; 1140 | }; 1141 | /* End PBXShellScriptBuildPhase section */ 1142 | 1143 | /* Begin PBXSourcesBuildPhase section */ 1144 | 00E356EA1AD99517003FC87E /* Sources */ = { 1145 | isa = PBXSourcesBuildPhase; 1146 | buildActionMask = 2147483647; 1147 | files = ( 1148 | 00E356F31AD99517003FC87E /* examplesTests.m in Sources */, 1149 | ); 1150 | runOnlyForDeploymentPostprocessing = 0; 1151 | }; 1152 | 13B07F871A680F5B00A75B9A /* Sources */ = { 1153 | isa = PBXSourcesBuildPhase; 1154 | buildActionMask = 2147483647; 1155 | files = ( 1156 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, 1157 | 13B07FC11A68108700A75B9A /* main.m in Sources */, 1158 | ); 1159 | runOnlyForDeploymentPostprocessing = 0; 1160 | }; 1161 | 2D02E4771E0B4A5D006451C7 /* Sources */ = { 1162 | isa = PBXSourcesBuildPhase; 1163 | buildActionMask = 2147483647; 1164 | files = ( 1165 | 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */, 1166 | 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */, 1167 | ); 1168 | runOnlyForDeploymentPostprocessing = 0; 1169 | }; 1170 | 2D02E48C1E0B4A5D006451C7 /* Sources */ = { 1171 | isa = PBXSourcesBuildPhase; 1172 | buildActionMask = 2147483647; 1173 | files = ( 1174 | 2DCD954D1E0B4F2C00145EB5 /* examplesTests.m in Sources */, 1175 | ); 1176 | runOnlyForDeploymentPostprocessing = 0; 1177 | }; 1178 | /* End PBXSourcesBuildPhase section */ 1179 | 1180 | /* Begin PBXTargetDependency section */ 1181 | 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { 1182 | isa = PBXTargetDependency; 1183 | target = 13B07F861A680F5B00A75B9A /* examples */; 1184 | targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; 1185 | }; 1186 | 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = { 1187 | isa = PBXTargetDependency; 1188 | target = 2D02E47A1E0B4A5D006451C7 /* examples-tvOS */; 1189 | targetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */; 1190 | }; 1191 | /* End PBXTargetDependency section */ 1192 | 1193 | /* Begin PBXVariantGroup section */ 1194 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { 1195 | isa = PBXVariantGroup; 1196 | children = ( 1197 | 13B07FB21A68108700A75B9A /* Base */, 1198 | ); 1199 | name = LaunchScreen.xib; 1200 | path = examples; 1201 | sourceTree = ""; 1202 | }; 1203 | /* End PBXVariantGroup section */ 1204 | 1205 | /* Begin XCBuildConfiguration section */ 1206 | 00E356F61AD99517003FC87E /* Debug */ = { 1207 | isa = XCBuildConfiguration; 1208 | buildSettings = { 1209 | BUNDLE_LOADER = "$(TEST_HOST)"; 1210 | GCC_PREPROCESSOR_DEFINITIONS = ( 1211 | "DEBUG=1", 1212 | "$(inherited)", 1213 | ); 1214 | HEADER_SEARCH_PATHS = ( 1215 | "$(inherited)", 1216 | "$(SRCROOT)/../node_modules/meiqia-react-native/ios/**", 1217 | ); 1218 | INFOPLIST_FILE = examplesTests/Info.plist; 1219 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 1220 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1221 | LIBRARY_SEARCH_PATHS = ( 1222 | "$(inherited)", 1223 | "\"$(SRCROOT)/$(TARGET_NAME)\"", 1224 | ); 1225 | OTHER_LDFLAGS = ( 1226 | "-ObjC", 1227 | "-lc++", 1228 | ); 1229 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; 1230 | PRODUCT_NAME = "$(TARGET_NAME)"; 1231 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/examples.app/examples"; 1232 | }; 1233 | name = Debug; 1234 | }; 1235 | 00E356F71AD99517003FC87E /* Release */ = { 1236 | isa = XCBuildConfiguration; 1237 | buildSettings = { 1238 | BUNDLE_LOADER = "$(TEST_HOST)"; 1239 | COPY_PHASE_STRIP = NO; 1240 | HEADER_SEARCH_PATHS = ( 1241 | "$(inherited)", 1242 | "$(SRCROOT)/../node_modules/meiqia-react-native/ios/**", 1243 | ); 1244 | INFOPLIST_FILE = examplesTests/Info.plist; 1245 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 1246 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1247 | LIBRARY_SEARCH_PATHS = ( 1248 | "$(inherited)", 1249 | "\"$(SRCROOT)/$(TARGET_NAME)\"", 1250 | ); 1251 | OTHER_LDFLAGS = ( 1252 | "-ObjC", 1253 | "-lc++", 1254 | ); 1255 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; 1256 | PRODUCT_NAME = "$(TARGET_NAME)"; 1257 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/examples.app/examples"; 1258 | }; 1259 | name = Release; 1260 | }; 1261 | 13B07F941A680F5B00A75B9A /* Debug */ = { 1262 | isa = XCBuildConfiguration; 1263 | buildSettings = { 1264 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 1265 | CURRENT_PROJECT_VERSION = 1; 1266 | DEAD_CODE_STRIPPING = NO; 1267 | FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../node_modules/meiqia-react-native/ios/**"; 1268 | HEADER_SEARCH_PATHS = ( 1269 | "$(inherited)", 1270 | "$(SRCROOT)/../node_modules/meiqia-react-native/ios/**", 1271 | ); 1272 | INFOPLIST_FILE = examples/Info.plist; 1273 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 1274 | OTHER_LDFLAGS = ( 1275 | "$(inherited)", 1276 | "-ObjC", 1277 | "-lc++", 1278 | ); 1279 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; 1280 | PRODUCT_NAME = examples; 1281 | VERSIONING_SYSTEM = "apple-generic"; 1282 | }; 1283 | name = Debug; 1284 | }; 1285 | 13B07F951A680F5B00A75B9A /* Release */ = { 1286 | isa = XCBuildConfiguration; 1287 | buildSettings = { 1288 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 1289 | CURRENT_PROJECT_VERSION = 1; 1290 | FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../node_modules/meiqia-react-native/ios/**"; 1291 | HEADER_SEARCH_PATHS = ( 1292 | "$(inherited)", 1293 | "$(SRCROOT)/../node_modules/meiqia-react-native/ios/**", 1294 | ); 1295 | INFOPLIST_FILE = examples/Info.plist; 1296 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 1297 | OTHER_LDFLAGS = ( 1298 | "$(inherited)", 1299 | "-ObjC", 1300 | "-lc++", 1301 | ); 1302 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; 1303 | PRODUCT_NAME = examples; 1304 | VERSIONING_SYSTEM = "apple-generic"; 1305 | }; 1306 | name = Release; 1307 | }; 1308 | 2D02E4971E0B4A5E006451C7 /* Debug */ = { 1309 | isa = XCBuildConfiguration; 1310 | buildSettings = { 1311 | ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; 1312 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 1313 | CLANG_ANALYZER_NONNULL = YES; 1314 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 1315 | CLANG_WARN_INFINITE_RECURSION = YES; 1316 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 1317 | DEBUG_INFORMATION_FORMAT = dwarf; 1318 | ENABLE_TESTABILITY = YES; 1319 | GCC_NO_COMMON_BLOCKS = YES; 1320 | HEADER_SEARCH_PATHS = ( 1321 | "$(inherited)", 1322 | "$(SRCROOT)/../node_modules/meiqia-react-native/ios/**", 1323 | ); 1324 | INFOPLIST_FILE = "examples-tvOS/Info.plist"; 1325 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 1326 | LIBRARY_SEARCH_PATHS = ( 1327 | "$(inherited)", 1328 | "\"$(SRCROOT)/$(TARGET_NAME)\"", 1329 | ); 1330 | OTHER_LDFLAGS = ( 1331 | "-ObjC", 1332 | "-lc++", 1333 | ); 1334 | PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.examples-tvOS"; 1335 | PRODUCT_NAME = "$(TARGET_NAME)"; 1336 | SDKROOT = appletvos; 1337 | TARGETED_DEVICE_FAMILY = 3; 1338 | TVOS_DEPLOYMENT_TARGET = 9.2; 1339 | }; 1340 | name = Debug; 1341 | }; 1342 | 2D02E4981E0B4A5E006451C7 /* Release */ = { 1343 | isa = XCBuildConfiguration; 1344 | buildSettings = { 1345 | ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; 1346 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 1347 | CLANG_ANALYZER_NONNULL = YES; 1348 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 1349 | CLANG_WARN_INFINITE_RECURSION = YES; 1350 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 1351 | COPY_PHASE_STRIP = NO; 1352 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 1353 | GCC_NO_COMMON_BLOCKS = YES; 1354 | HEADER_SEARCH_PATHS = ( 1355 | "$(inherited)", 1356 | "$(SRCROOT)/../node_modules/meiqia-react-native/ios/**", 1357 | ); 1358 | INFOPLIST_FILE = "examples-tvOS/Info.plist"; 1359 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 1360 | LIBRARY_SEARCH_PATHS = ( 1361 | "$(inherited)", 1362 | "\"$(SRCROOT)/$(TARGET_NAME)\"", 1363 | ); 1364 | OTHER_LDFLAGS = ( 1365 | "-ObjC", 1366 | "-lc++", 1367 | ); 1368 | PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.examples-tvOS"; 1369 | PRODUCT_NAME = "$(TARGET_NAME)"; 1370 | SDKROOT = appletvos; 1371 | TARGETED_DEVICE_FAMILY = 3; 1372 | TVOS_DEPLOYMENT_TARGET = 9.2; 1373 | }; 1374 | name = Release; 1375 | }; 1376 | 2D02E4991E0B4A5E006451C7 /* Debug */ = { 1377 | isa = XCBuildConfiguration; 1378 | buildSettings = { 1379 | BUNDLE_LOADER = "$(TEST_HOST)"; 1380 | CLANG_ANALYZER_NONNULL = YES; 1381 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 1382 | CLANG_WARN_INFINITE_RECURSION = YES; 1383 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 1384 | DEBUG_INFORMATION_FORMAT = dwarf; 1385 | ENABLE_TESTABILITY = YES; 1386 | GCC_NO_COMMON_BLOCKS = YES; 1387 | HEADER_SEARCH_PATHS = ( 1388 | "$(inherited)", 1389 | "$(SRCROOT)/../node_modules/meiqia-react-native/ios/**", 1390 | ); 1391 | INFOPLIST_FILE = "examples-tvOSTests/Info.plist"; 1392 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1393 | LIBRARY_SEARCH_PATHS = ( 1394 | "$(inherited)", 1395 | "\"$(SRCROOT)/$(TARGET_NAME)\"", 1396 | ); 1397 | OTHER_LDFLAGS = ( 1398 | "-ObjC", 1399 | "-lc++", 1400 | ); 1401 | PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.examples-tvOSTests"; 1402 | PRODUCT_NAME = "$(TARGET_NAME)"; 1403 | SDKROOT = appletvos; 1404 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/examples-tvOS.app/examples-tvOS"; 1405 | TVOS_DEPLOYMENT_TARGET = 10.1; 1406 | }; 1407 | name = Debug; 1408 | }; 1409 | 2D02E49A1E0B4A5E006451C7 /* Release */ = { 1410 | isa = XCBuildConfiguration; 1411 | buildSettings = { 1412 | BUNDLE_LOADER = "$(TEST_HOST)"; 1413 | CLANG_ANALYZER_NONNULL = YES; 1414 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 1415 | CLANG_WARN_INFINITE_RECURSION = YES; 1416 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 1417 | COPY_PHASE_STRIP = NO; 1418 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 1419 | GCC_NO_COMMON_BLOCKS = YES; 1420 | HEADER_SEARCH_PATHS = ( 1421 | "$(inherited)", 1422 | "$(SRCROOT)/../node_modules/meiqia-react-native/ios/**", 1423 | ); 1424 | INFOPLIST_FILE = "examples-tvOSTests/Info.plist"; 1425 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1426 | LIBRARY_SEARCH_PATHS = ( 1427 | "$(inherited)", 1428 | "\"$(SRCROOT)/$(TARGET_NAME)\"", 1429 | ); 1430 | OTHER_LDFLAGS = ( 1431 | "-ObjC", 1432 | "-lc++", 1433 | ); 1434 | PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.examples-tvOSTests"; 1435 | PRODUCT_NAME = "$(TARGET_NAME)"; 1436 | SDKROOT = appletvos; 1437 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/examples-tvOS.app/examples-tvOS"; 1438 | TVOS_DEPLOYMENT_TARGET = 10.1; 1439 | }; 1440 | name = Release; 1441 | }; 1442 | 83CBBA201A601CBA00E9B192 /* Debug */ = { 1443 | isa = XCBuildConfiguration; 1444 | buildSettings = { 1445 | ALWAYS_SEARCH_USER_PATHS = NO; 1446 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 1447 | CLANG_CXX_LIBRARY = "libc++"; 1448 | CLANG_ENABLE_MODULES = YES; 1449 | CLANG_ENABLE_OBJC_ARC = YES; 1450 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 1451 | CLANG_WARN_BOOL_CONVERSION = YES; 1452 | CLANG_WARN_COMMA = YES; 1453 | CLANG_WARN_CONSTANT_CONVERSION = YES; 1454 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 1455 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 1456 | CLANG_WARN_EMPTY_BODY = YES; 1457 | CLANG_WARN_ENUM_CONVERSION = YES; 1458 | CLANG_WARN_INFINITE_RECURSION = YES; 1459 | CLANG_WARN_INT_CONVERSION = YES; 1460 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 1461 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 1462 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 1463 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 1464 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 1465 | CLANG_WARN_STRICT_PROTOTYPES = YES; 1466 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 1467 | CLANG_WARN_UNREACHABLE_CODE = YES; 1468 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 1469 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 1470 | COPY_PHASE_STRIP = NO; 1471 | ENABLE_STRICT_OBJC_MSGSEND = YES; 1472 | ENABLE_TESTABILITY = YES; 1473 | GCC_C_LANGUAGE_STANDARD = gnu99; 1474 | GCC_DYNAMIC_NO_PIC = NO; 1475 | GCC_NO_COMMON_BLOCKS = YES; 1476 | GCC_OPTIMIZATION_LEVEL = 0; 1477 | GCC_PREPROCESSOR_DEFINITIONS = ( 1478 | "DEBUG=1", 1479 | "$(inherited)", 1480 | ); 1481 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 1482 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 1483 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 1484 | GCC_WARN_UNDECLARED_SELECTOR = YES; 1485 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 1486 | GCC_WARN_UNUSED_FUNCTION = YES; 1487 | GCC_WARN_UNUSED_VARIABLE = YES; 1488 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 1489 | MTL_ENABLE_DEBUG_INFO = YES; 1490 | ONLY_ACTIVE_ARCH = YES; 1491 | SDKROOT = iphoneos; 1492 | }; 1493 | name = Debug; 1494 | }; 1495 | 83CBBA211A601CBA00E9B192 /* Release */ = { 1496 | isa = XCBuildConfiguration; 1497 | buildSettings = { 1498 | ALWAYS_SEARCH_USER_PATHS = NO; 1499 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 1500 | CLANG_CXX_LIBRARY = "libc++"; 1501 | CLANG_ENABLE_MODULES = YES; 1502 | CLANG_ENABLE_OBJC_ARC = YES; 1503 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 1504 | CLANG_WARN_BOOL_CONVERSION = YES; 1505 | CLANG_WARN_COMMA = YES; 1506 | CLANG_WARN_CONSTANT_CONVERSION = YES; 1507 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 1508 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 1509 | CLANG_WARN_EMPTY_BODY = YES; 1510 | CLANG_WARN_ENUM_CONVERSION = YES; 1511 | CLANG_WARN_INFINITE_RECURSION = YES; 1512 | CLANG_WARN_INT_CONVERSION = YES; 1513 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 1514 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 1515 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 1516 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 1517 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 1518 | CLANG_WARN_STRICT_PROTOTYPES = YES; 1519 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 1520 | CLANG_WARN_UNREACHABLE_CODE = YES; 1521 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 1522 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 1523 | COPY_PHASE_STRIP = YES; 1524 | ENABLE_NS_ASSERTIONS = NO; 1525 | ENABLE_STRICT_OBJC_MSGSEND = YES; 1526 | GCC_C_LANGUAGE_STANDARD = gnu99; 1527 | GCC_NO_COMMON_BLOCKS = YES; 1528 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 1529 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 1530 | GCC_WARN_UNDECLARED_SELECTOR = YES; 1531 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 1532 | GCC_WARN_UNUSED_FUNCTION = YES; 1533 | GCC_WARN_UNUSED_VARIABLE = YES; 1534 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 1535 | MTL_ENABLE_DEBUG_INFO = NO; 1536 | SDKROOT = iphoneos; 1537 | VALIDATE_PRODUCT = YES; 1538 | }; 1539 | name = Release; 1540 | }; 1541 | /* End XCBuildConfiguration section */ 1542 | 1543 | /* Begin XCConfigurationList section */ 1544 | 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "examplesTests" */ = { 1545 | isa = XCConfigurationList; 1546 | buildConfigurations = ( 1547 | 00E356F61AD99517003FC87E /* Debug */, 1548 | 00E356F71AD99517003FC87E /* Release */, 1549 | ); 1550 | defaultConfigurationIsVisible = 0; 1551 | defaultConfigurationName = Release; 1552 | }; 1553 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "examples" */ = { 1554 | isa = XCConfigurationList; 1555 | buildConfigurations = ( 1556 | 13B07F941A680F5B00A75B9A /* Debug */, 1557 | 13B07F951A680F5B00A75B9A /* Release */, 1558 | ); 1559 | defaultConfigurationIsVisible = 0; 1560 | defaultConfigurationName = Release; 1561 | }; 1562 | 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "examples-tvOS" */ = { 1563 | isa = XCConfigurationList; 1564 | buildConfigurations = ( 1565 | 2D02E4971E0B4A5E006451C7 /* Debug */, 1566 | 2D02E4981E0B4A5E006451C7 /* Release */, 1567 | ); 1568 | defaultConfigurationIsVisible = 0; 1569 | defaultConfigurationName = Release; 1570 | }; 1571 | 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "examples-tvOSTests" */ = { 1572 | isa = XCConfigurationList; 1573 | buildConfigurations = ( 1574 | 2D02E4991E0B4A5E006451C7 /* Debug */, 1575 | 2D02E49A1E0B4A5E006451C7 /* Release */, 1576 | ); 1577 | defaultConfigurationIsVisible = 0; 1578 | defaultConfigurationName = Release; 1579 | }; 1580 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "examples" */ = { 1581 | isa = XCConfigurationList; 1582 | buildConfigurations = ( 1583 | 83CBBA201A601CBA00E9B192 /* Debug */, 1584 | 83CBBA211A601CBA00E9B192 /* Release */, 1585 | ); 1586 | defaultConfigurationIsVisible = 0; 1587 | defaultConfigurationName = Release; 1588 | }; 1589 | /* End XCConfigurationList section */ 1590 | }; 1591 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; 1592 | } 1593 | -------------------------------------------------------------------------------- /examples/ios/examples.xcodeproj/xcshareddata/xcschemes/examples-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 | -------------------------------------------------------------------------------- /examples/ios/examples.xcodeproj/xcshareddata/xcschemes/examples.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 | -------------------------------------------------------------------------------- /examples/ios/examples/AppDelegate.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 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 AppDelegate : UIResponder 11 | 12 | @property (nonatomic, strong) UIWindow *window; 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /examples/ios/examples/AppDelegate.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 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 | 13 | @implementation AppDelegate 14 | 15 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 16 | { 17 | NSURL *jsCodeLocation; 18 | 19 | jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; 20 | 21 | RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation 22 | moduleName:@"examples" 23 | initialProperties:nil 24 | launchOptions:launchOptions]; 25 | rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; 26 | 27 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 28 | UIViewController *rootViewController = [UIViewController new]; 29 | rootViewController.view = rootView; 30 | self.window.rootViewController = rootViewController; 31 | [self.window makeKeyAndVisible]; 32 | return YES; 33 | } 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /examples/ios/examples/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 | -------------------------------------------------------------------------------- /examples/ios/examples/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ios-marketing", 45 | "size" : "1024x1024", 46 | "scale" : "1x" 47 | } 48 | ], 49 | "info" : { 50 | "version" : 1, 51 | "author" : "xcode" 52 | } 53 | } -------------------------------------------------------------------------------- /examples/ios/examples/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /examples/ios/examples/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | examples 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 | -------------------------------------------------------------------------------- /examples/ios/examples/main.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 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 | -------------------------------------------------------------------------------- /examples/ios/examplesTests/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 | -------------------------------------------------------------------------------- /examples/ios/examplesTests/examplesTests.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 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 examplesTests : XCTestCase 18 | 19 | @end 20 | 21 | @implementation examplesTests 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 | -------------------------------------------------------------------------------- /examples/metro.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Metro configuration for React Native 3 | * https://github.com/facebook/react-native 4 | * 5 | * @format 6 | */ 7 | 8 | module.exports = { 9 | transformer: { 10 | getTransformOptions: async () => ({ 11 | transform: { 12 | experimentalImportSupport: false, 13 | inlineRequires: false, 14 | }, 15 | }), 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /examples/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "examples", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "start": "node node_modules/react-native/local-cli/cli.js start", 7 | "android-debug": "react-native run-android --port 8081", 8 | "ios-8": "react-native run-ios --port 8081 --simulator=\"iPhone 8\"", 9 | "android-9.0": "$ANDROID_HOME/tools/emulator @Pixel_2_XL_API_28", 10 | "ios-config": "node ./node_modules/meiqia-react-native/ios-configuration.js examples", 11 | "test": "jest" 12 | }, 13 | "dependencies": { 14 | "react": "16.9.0", 15 | "react-native": "0.62.3", 16 | "react-native-weight": "../" 17 | }, 18 | "devDependencies": { 19 | "@babel/core": "^7.6.2", 20 | "@babel/runtime": "^7.6.2", 21 | "@react-native-community/eslint-config": "^0.0.5", 22 | "babel-jest": "^24.9.0", 23 | "eslint": "^6.5.1", 24 | "jest": "^24.9.0", 25 | "metro-react-native-babel-preset": "^0.56.0", 26 | "react-test-renderer": "16.9.0" 27 | }, 28 | "jest": { 29 | "preset": "react-native" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /index.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'meiqia-react-native' { 2 | interface InitParam { 3 | appKey: string, 4 | } 5 | 6 | interface InitResult { 7 | code?: string; 8 | clientId?: string; 9 | message?: string; 10 | } 11 | 12 | export function MeiqiaInit(params: InitParam): Promise; 13 | 14 | export function MeiqiaShow(params: any): void; 15 | 16 | export function MeiqiaStartService(): void; 17 | 18 | export function MeiqiaStopService(): void; 19 | 20 | export function MeiqiaRegisterDeviceToken(deviceToken: string): void; 21 | } 22 | 23 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | 2 | import { Platform, NativeModules } from 'react-native'; 3 | 4 | const { RNMeiqia } = NativeModules; 5 | 6 | export async function MeiqiaInit(params) { 7 | return await RNMeiqia.init(params); 8 | } 9 | 10 | export function MeiqiaShow(params = {}) { 11 | // const data = {clientInfo:{}, ...params}; 12 | RNMeiqia.show(params); 13 | } 14 | 15 | export function MeiqiaStartService() { 16 | RNMeiqia.openMeiqiaService(); 17 | } 18 | 19 | export function MeiqiaStopService() { 20 | RNMeiqia.closeMeiqiaService(); 21 | } 22 | 23 | export function MeiqiaRegisterDeviceToken(deviceToken) { 24 | if(Platform.OS === 'ios') { 25 | RNMeiqia.registerDeviceToken(deviceToken); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /ios-configuration.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require("path"); 3 | 4 | const appName = process.argv[2]; 5 | 6 | const configiOS = () => { 7 | if(!appName) { 8 | console.log('The appName is not specific, see https://github.com/Kennytian/meiqia-react-native#ios-3'); 9 | return; 10 | } 11 | const iosRootPath = `${__dirname}/../../ios/`; 12 | const plistPath = `${appName}/Info.plist`; 13 | const filePath = path.join(iosRootPath, plistPath); 14 | 15 | fs.readFile(filePath, 'utf-8', (readErr, file) => { 16 | if (readErr) { 17 | console.error('readFile:', readErr); 18 | return; 19 | } 20 | 21 | const zhCNString = /zh_CN<\/string>/; 22 | if (zhCNString.test(file)) { 23 | console.log('Localizations is added!'); 24 | return; 25 | } 26 | 27 | const searchValue = /(\tCFBundleInfoDictionaryVersion<\/key>\n\t6.0<\/string>)(\s{2})/; 28 | const replaceValue = '$1 \n\tCFBundleLocalizations<\/key>\n\t\n\t\tzh_CN<\/string>\n\t\tzh_TW<\/string>\n\t\ten<\/string>\n\t<\/array>\n\t'; 29 | const result = file.replace(searchValue, replaceValue); 30 | fs.writeFile(filePath, result, 'utf-8', (writeErr) => { 31 | if (writeErr) { 32 | console.error('writeFile:', writeErr); 33 | return; 34 | } 35 | console.log(`🎉 🎉 🎉, CFBundleLocalizations configuration is successful 👍 👍 👍!`); 36 | }); 37 | }); 38 | }; 39 | 40 | configiOS(); 41 | -------------------------------------------------------------------------------- /ios/RNMeiqia.h: -------------------------------------------------------------------------------- 1 | 2 | #if __has_include("RCTBridgeModule.h") 3 | #import "RCTBridgeModule.h" 4 | #else 5 | #import 6 | #endif 7 | 8 | @interface RNMeiqia : NSObject 9 | 10 | @end 11 | -------------------------------------------------------------------------------- /ios/RNMeiqia.m: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | #import "MQChatViewManager.h" 4 | #import "RNMeiqia.h" 5 | #import "UIColor+Hex.h" 6 | 7 | @implementation RNMeiqia 8 | 9 | - (dispatch_queue_t)methodQueue 10 | { 11 | return dispatch_get_main_queue(); 12 | } 13 | RCT_EXPORT_MODULE(); 14 | 15 | //初始化SDK 16 | RCT_EXPORT_METHOD(init: (NSDictionary *)param resolve: (RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { 17 | NSString *AppKey = @""; 18 | if ((NSString *)param[@"appKey"] != nil) { 19 | AppKey = (NSString *)param[@"appKey"]; 20 | } 21 | if(![AppKey isEqual: @""]){ 22 | [MQManager initWithAppkey:AppKey completion:^(NSString *clientId, NSError *error) { 23 | if (!error) { 24 | NSDictionary *ret = @{@"code": @"0", @"message":@"success", @"clientId":clientId}; 25 | resolve(ret); 26 | } else { 27 | NSDictionary *ret = @{@"code": @(error.code), @"message":error.description}; 28 | resolve(ret); 29 | } 30 | }]; 31 | }else{ 32 | NSDictionary *ret = @{@"code": @"1", @"message":@"appKey is missing"}; 33 | resolve(ret); 34 | } 35 | } 36 | 37 | // APP 在前台运行 38 | RCT_EXPORT_METHOD(openMeiqiaService) { 39 | [MQManager openMeiqiaService]; 40 | } 41 | 42 | // APP 在后台运行 43 | RCT_EXPORT_METHOD(closeMeiqiaService) { 44 | [MQManager closeMeiqiaService]; 45 | } 46 | 47 | RCT_EXPORT_METHOD(registerDeviceToken:(NSString *)deviceToken) { 48 | [MQManager registerDeviceToken:[RCTConvert NSData:deviceToken]]; 49 | } 50 | 51 | //跳转到聊天界面 52 | RCT_EXPORT_METHOD(show: (NSDictionary *)param resolve: (RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { 53 | MQChatViewManager *chatViewManager = [[MQChatViewManager alloc] init]; 54 | MQChatViewStyle *aStyle = [chatViewManager chatViewStyle]; 55 | // 设置返回键 56 | if((NSString *)param[@"titleColor"]){ 57 | NSString *titleColor = (NSString *)param[@"titleColor"]; 58 | [aStyle setNavTitleColor: [UIColor colorWithHexString: titleColor]]; 59 | } 60 | if((NSString *)param[@"titleBarColor"]){ 61 | NSString *titleBarColor = (NSString *)param[@"titleBarColor"]; 62 | [aStyle setNavBarColor: [UIColor colorWithHexString: titleBarColor]]; 63 | } 64 | 65 | if((NSString *)param[@"naviColor"]){ 66 | NSString *naviColor = (NSString *)param[@"naviColor"]; 67 | [aStyle setNavBarTintColor: [UIColor colorWithHexString: naviColor]]; 68 | } 69 | 70 | [aStyle setNavBackButtonImage:[UIImage imageNamed:@"meiqia-icon"]]; 71 | // 设置圆形头像 72 | [aStyle setEnableRoundAvatar:YES]; 73 | // [aStyle setEnableOutgoingAvatar:NO]; //不显示用户头像 74 | // [aStyle setEnableIncomingAvatar:NO]; //不显示客服头像 75 | 76 | // 设置客户端信息 77 | if((NSDictionary *)param[@"clientInfo"]){ 78 | NSDictionary *clientInfo = (NSDictionary *)param[@"clientInfo"]; 79 | // [chatViewManager setClientInfo: clientInfo]; 80 | [chatViewManager setClientInfo: clientInfo override:YES]; 81 | } 82 | 83 | //设置美洽clientId 84 | if((NSDictionary *)param[@"clientId"]&&(NSString *)param[@"clientId"][@"id"]&&![(NSString *)param[@"clientId"][@"id"] isEqual:@""]){ 85 | NSDictionary *clientInfo = (NSDictionary *)param[@"clientId"][@"id"]; 86 | [chatViewManager setClientInfo: clientInfo]; 87 | } 88 | 89 | //customId 90 | if ((NSString *)param[@"customId"]&&(NSString *)param[@"customId"][@"id"]&&![(NSString *)param[@"customId"][@"id"] isEqual:@""]){ 91 | NSString *customId = (NSString *)param[@"customId"][@"id"]; 92 | [chatViewManager setLoginCustomizedId:customId]; 93 | }else{ 94 | #pragma mark 切记切记切记 下面这一行是错误的写法 , 这样会导致 ID = "notadda" 和 meiqia多个用户绑定,最终导致 对话内容错乱 A客户能看到 B C D的客户的对话内容 95 | [chatViewManager setLoginCustomizedId:@"notadda"]; 96 | } 97 | 98 | //客服组scheduledInfo 99 | //分配到指定客服,或指定组里面的客服,指定客服优先级高,并可选择分配失败后的转接规则 100 | NSString *agentId = nil; 101 | NSString *agentGroupId = nil; 102 | int rule = 3; 103 | if((NSString *)param[@"scheduledInfo"]&&(NSString *)param[@"scheduledInfo"][@"agentId"]&&![(NSString *)param[@"scheduledInfo"][@"agentId"] isEqual:@""]){ 104 | agentId = (NSString *)param[@"scheduledInfo"][@"agentId"]; 105 | } 106 | if((NSString *)param[@"scheduledInfo"]&&(NSString *)param[@"scheduledInfo"][@"agentGroup"]&&![(NSString *)param[@"scheduledInfo"][@"agentGroup"] isEqual:@""]){ 107 | agentGroupId = (NSString *)param[@"scheduledInfo"][@"agentGroup"]; 108 | } 109 | if((NSString *)param[@"scheduledInfo"]&&(NSString *)param[@"scheduledInfo"][@"scheduleRule"]&&![(NSString *)param[@"scheduledInfo"][@"scheduleRule"] isEqual:@""]){ 110 | ////1 不转接给任何人, 2 转接给组内的人,3 转接给企业其他随机一个人 //none:不转接给任何人,让用户留言 group: 转接给组内的人enterprise: 转接给企业其他随机一个人 111 | NSString *ruleStr = (NSString *)param[@"scheduledInfo"][@"scheduleRule"]; 112 | if([ruleStr isEqual:@"none"]){ 113 | rule = 1; 114 | } 115 | if([ruleStr isEqual:@"group"]){ 116 | rule = 2; 117 | } 118 | if([ruleStr isEqual:@"enterprise"]){ 119 | rule = 3; 120 | } 121 | } 122 | 123 | [MQManager setScheduledAgentWithAgentId:agentId agentGroupId:agentGroupId scheduleRule:rule]; 124 | //客服组scheduledInfo 125 | [chatViewManager pushMQChatViewControllerInViewController:[UIApplication sharedApplication].delegate.window.rootViewController]; 126 | } 127 | 128 | @end 129 | -------------------------------------------------------------------------------- /ios/RNMeiqia.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | 3 | 5 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/UIColor+Hex.h: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | 4 | #define RGBA_COLOR(R, G, B, A) [UIColor colorWithRed:((R) / 255.0f) green:((G) / 255.0f) blue:((B) / 255.0f) alpha:A] 5 | #define RGB_COLOR(R, G, B) [UIColor colorWithRed:((R) / 255.0f) green:((G) / 255.0f) blue:((B) / 255.0f) alpha:1.0f] 6 | 7 | @interface UIColor (Hex) 8 | 9 | + (UIColor *)colorWithHexString:(NSString *)color; 10 | 11 | //从十六进制字符串获取颜色, 12 | //color:支持@“#123456”、 @“0X123456”、 @“123456”三种格式 13 | + (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /ios/UIColor+Hex.m: -------------------------------------------------------------------------------- 1 | #import "UIColor+Hex.h" 2 | 3 | @implementation UIColor (Hex) 4 | 5 | + (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha 6 | { 7 | //删除字符串中的空格 8 | NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString]; 9 | // String should be 6 or 8 characters 10 | if ([cString length] < 6) 11 | { 12 | return [UIColor clearColor]; 13 | } 14 | // strip 0X if it appears 15 | //如果是0x开头的,那么截取字符串,字符串从索引为2的位置开始,一直到末尾 16 | if ([cString hasPrefix:@"0X"]) 17 | { 18 | cString = [cString substringFromIndex:2]; 19 | } 20 | //如果是#开头的,那么截取字符串,字符串从索引为1的位置开始,一直到末尾 21 | if ([cString hasPrefix:@"#"]) 22 | { 23 | cString = [cString substringFromIndex:1]; 24 | } 25 | if ([cString length] != 6) 26 | { 27 | return [UIColor clearColor]; 28 | } 29 | 30 | // Separate into r, g, b substrings 31 | NSRange range; 32 | range.location = 0; 33 | range.length = 2; 34 | //r 35 | NSString *rString = [cString substringWithRange:range]; 36 | //g 37 | range.location = 2; 38 | NSString *gString = [cString substringWithRange:range]; 39 | //b 40 | range.location = 4; 41 | NSString *bString = [cString substringWithRange:range]; 42 | 43 | // Scan values 44 | unsigned int r, g, b; 45 | [[NSScanner scannerWithString:rString] scanHexInt:&r]; 46 | [[NSScanner scannerWithString:gString] scanHexInt:&g]; 47 | [[NSScanner scannerWithString:bString] scanHexInt:&b]; 48 | return [UIColor colorWithRed:((float)r / 255.0f) green:((float)g / 255.0f) blue:((float)b / 255.0f) alpha:alpha]; 49 | } 50 | 51 | //默认alpha值为1 52 | + (UIColor *)colorWithHexString:(NSString *)color 53 | { 54 | return [self colorWithHexString:color alpha:1.0f]; 55 | } 56 | 57 | @end 58 | -------------------------------------------------------------------------------- /meiqia-react-native.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 = package['name'] 7 | s.version = package['version'] 8 | s.summary = package['description'] 9 | s.description = package['description'] 10 | s.homepage = package['homepage'] 11 | s.license = package['license'] 12 | s.author = package['author'] 13 | s.platform = :ios, "9.0" 14 | s.source = { :git => "https://github.com/Kennytian/meiqia-react-native.git", :tag => "master" } 15 | s.source_files = "ios/**/*.{h,m}" 16 | s.resources = ['*.bundle', '*.strings'] 17 | s.requires_arc = true 18 | 19 | s.dependency "React" 20 | s.dependency 'Meiqia', '~> 3.6.9' 21 | 22 | end 23 | 24 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "name": "meiqia-react-native", 4 | "version": "1.2.0", 5 | "description": "MeiQia sdk component for React Native", 6 | "main": "index.js", 7 | "types": "index.d.ts", 8 | "scripts": { 9 | "test": "echo \"Error: no test specified\" && exit 1" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git+https://github.com/Kennytian/meiqia-react-native.git" 14 | }, 15 | "bugs": { 16 | "url": "https://github.com/Kennytian/meiqia-react-native/issues" 17 | }, 18 | "homepage": "https://github.com/Kennytian/meiqia-react-native", 19 | "keywords": [ 20 | "react-native", 21 | "meiqia", 22 | "react", 23 | "react-component", 24 | "ios", 25 | "android" 26 | ], 27 | "author": "Kenny Tian ", 28 | "license": "Anti996", 29 | "peerDependencies": { 30 | "react": "^16.8.6", 31 | "react-native": ">=0.60.0" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /screenshot/screenshot1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kennytian/meiqia-react-native/1ebcf838b179fe0aa7784ad6101e11c5aa5e9da4/screenshot/screenshot1.png -------------------------------------------------------------------------------- /screenshot/screenshot2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kennytian/meiqia-react-native/1ebcf838b179fe0aa7784ad6101e11c5aa5e9da4/screenshot/screenshot2.png -------------------------------------------------------------------------------- /screenshot/screenshot3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kennytian/meiqia-react-native/1ebcf838b179fe0aa7784ad6101e11c5aa5e9da4/screenshot/screenshot3.png --------------------------------------------------------------------------------