diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..10be197
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,53 @@
+# OSX
+#
+.DS_Store
+
+# Xcode
+#
+build/
+*.pbxuser
+!default.pbxuser
+*.mode1v3
+!default.mode1v3
+*.mode2v3
+!default.mode2v3
+*.perspectivev3
+!default.perspectivev3
+xcuserdata
+*.xccheckout
+*.moved-aside
+DerivedData
+*.hmap
+*.ipa
+*.xcuserstate
+project.xcworkspace
+
+# Android/IntelliJ
+#
+build/
+.idea
+.gradle
+local.properties
+*.iml
+
+# node.js
+#
+node_modules/
+npm-debug.log
+yarn-error.log
+
+# BUCK
+buck-out/
+\.buckd/
+*.keystore
+
+# fastlane
+#
+# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
+# screenshots whenever they are needed.
+# For more information about the recommended setup visit:
+# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md
+
+fastlane/report.xml
+fastlane/Preview.html
+fastlane/screenshots
diff --git a/.npmignore b/.npmignore
new file mode 100644
index 0000000..4949f09
--- /dev/null
+++ b/.npmignore
@@ -0,0 +1 @@
+example/
\ No newline at end of file
diff --git a/README.md b/README.md
index 4a88861..e2e185e 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,326 @@
-# react-native-xgpush
+# react-native-xinge-push
信鸽推送React Native版
+
+## install
+```
+npm install --save react-native-xinge-push
+```
+
+## link
+
+```
+react-native link react-native-xinge-push
+```
+
+## usage
+### Android
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+### iOS
+AppDelegate.m:
+
+```oc
+#import
+
+// ...
+
+// Required to register for notifications
+- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
+{
+ [XGPushManager didRegisterUserNotificationSettings:notificationSettings];
+}
+// Required for the register event.
+- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
+{
+ [XGPushManager didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
+}
+// Required for the notification event. You must call the completion handler after handling the remote notification.
+- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
+fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
+{
+ [XGPushManager didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
+ // 统计收到推送的设备
+ [XGPushManager handleReceiveNotification:userInfo successCallback:^{
+ NSLog(@"[XGPush] Handle receive success");
+ } errorCallback:^{
+ NSLog(@"[XGPush] Handle receive error");
+ }];
+}
+// Required for the registrationError event.
+- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
+{
+ [XGPushManager didFailToRegisterForRemoteNotificationsWithError:error];
+}
+// Required for the localNotification event.
+- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
+{
+ [XGPushManager didReceiveLocalNotification:notification];
+}
+```
+
+## Example
+
+```js
+
+import React, { Component } from 'react';
+import {
+ Platform,
+ StyleSheet,
+ Text,
+ View,
+ TouchableNativeFeedback,
+ TouchableHighlight
+} from 'react-native';
+import XGPush from 'react-native-xinge-push';
+
+const Touchable = Platform.OS === 'android' ? TouchableNativeFeedback : TouchableHighlight;
+
+class Example extends Component {
+
+ constructor() {
+ super();
+ this.state = {
+ isDebug: false
+ };
+ this._enableDebug = this._enableDebug.bind(this);
+ this._isEnableDebug = this._isEnableDebug.bind(this);
+
+ // 初始化推送
+ this.initPush();
+ }
+
+ async initPush() {
+ let accessId;
+ let accessKey;
+ if(Platform.OS === 'ios') {
+ accessId = 1111111111; // 请将1111111111修改为APP的AccessId,10位数字
+ accessKey = "YOUR_ACCESS_KEY"; // 请将YOUR_ACCESS_KEY修改为APP的AccessKey
+ } else {
+ accessId = 2222222222;
+ accessKey = "YOUR_ACCESS_KEY";
+ }
+ // 初始化
+ XGPush.init(accessId, accessKey);
+
+ // 注册
+ XGPush.register('jeepeng')
+ .then(result => result)
+ .catch(err => {
+ console.log(err);
+ });
+ }
+
+ componentDidMount() {
+ XGPush.addEventListener('register', this._onRegister);
+ XGPush.addEventListener('message', this._onMessage);
+ XGPush.addEventListener('notification', this._onNotification);
+ }
+
+ componentWillUnmount() {
+ XGPush.removeEventListener('register', this._onRegister);
+ XGPush.removeEventListener('message', this._onMessage);
+ XGPush.removeEventListener('notification', this._onNotification);
+ }
+
+ /**
+ * 注册成功
+ * @param deviceToken
+ * @private
+ */
+ _onRegister(deviceToken) {
+ alert('onRegister: ' + deviceToken);
+ // 在ios中,register方法是向apns注册,如果要使用信鸽推送,得到deviceToken后还要向信鸽注册
+ XGPush.registerForXG(deviceToken);
+ }
+
+ /**
+ * 透传消息到达
+ * @param message
+ * @private
+ */
+ _onMessage(message) {
+ alert('收到透传消息: ' + message.content);
+ }
+
+ /**
+ * 通知到达
+ * @param notification
+ * @private
+ */
+ _onNotification(notification) {
+ alert(JSON.stringify(notification));
+ }
+
+ /**
+ * 获取初始通知(点击通知后)
+ * @private
+ */
+ _getInitialNotification() {
+ XGPush.getInitialNotification().then((result) => {
+ alert(JSON.stringify(result));
+ });
+ }
+
+ _enableDebug() {
+ XGPush.enableDebug(!this.state.isDebug);
+ }
+
+ _isEnableDebug() {
+ XGPush.isEnableDebug().then(result => {
+ this.setState({
+ isDebug: result
+ });
+ alert(result);
+ });
+ }
+
+ _setApplicationIconBadgeNumber(number = 0) {
+ XGPush.setApplicationIconBadgeNumber(number);
+ }
+
+ _getApplicationIconBadgeNumber() {
+ XGPush.getApplicationIconBadgeNumber((number) => alert(number));
+ }
+
+ render() {
+ return (
+
+
+
+ getInitialNotification
+
+
+ { this._enableDebug() }} underlayColor="#ddd">
+
+ enableDebug
+
+
+ { this._isEnableDebug() }} underlayColor="#ddd">
+
+ isEnableDebug
+
+
+ { this._setApplicationIconBadgeNumber(99) }} underlayColor="#ddd">
+
+ setApplicationIconBadgeNumber: 99
+
+
+ { this._getApplicationIconBadgeNumber() }} underlayColor="#ddd">
+
+ getApplicationIconBadgeNumber
+
+
+
+ );
+ }
+}
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ backgroundColor: '#fff',
+ },
+ list: {
+ marginTop: 15,
+ backgroundColor: '#fff',
+ },
+ item: {
+ height: 45,
+ alignItems: 'center',
+ justifyContent: 'center',
+ borderBottomWidth: StyleSheet.hairlineWidth,
+ borderBottomColor: '#efefef'
+ },
+});
+
+export default Example;
+
+```
+
+see `example` folder for more details
diff --git a/android/build.gradle b/android/build.gradle
new file mode 100644
index 0000000..d024b66
--- /dev/null
+++ b/android/build.gradle
@@ -0,0 +1,31 @@
+apply plugin: 'com.android.library'
+
+android {
+ compileSdkVersion 25
+ buildToolsVersion '25.0.2'
+
+ defaultConfig {
+ minSdkVersion 16
+ targetSdkVersion 25
+ versionCode 1
+ versionName "1.0"
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ sourceSets {
+ main {
+ jniLibs.srcDirs = ['libs']
+ }
+ }
+}
+
+dependencies {
+ compile fileTree(dir: 'libs', include: ['*.jar'])
+ testCompile 'junit:junit:4.12'
+ compile "com.facebook.react:react-native:+"
+}
diff --git a/android/libs/Xg_sdk_v3.1_20170417_0946.jar b/android/libs/Xg_sdk_v3.1_20170417_0946.jar
new file mode 100755
index 0000000..6c03c12
Binary files /dev/null and b/android/libs/Xg_sdk_v3.1_20170417_0946.jar differ
diff --git a/android/libs/armeabi-v7a/libtpnsSecurity.so b/android/libs/armeabi-v7a/libtpnsSecurity.so
new file mode 100755
index 0000000..371c942
Binary files /dev/null and b/android/libs/armeabi-v7a/libtpnsSecurity.so differ
diff --git a/android/libs/armeabi-v7a/libxguardian.so b/android/libs/armeabi-v7a/libxguardian.so
new file mode 100755
index 0000000..457b5e1
Binary files /dev/null and b/android/libs/armeabi-v7a/libxguardian.so differ
diff --git a/android/libs/jg_filter_sdk_1.1.jar b/android/libs/jg_filter_sdk_1.1.jar
new file mode 100755
index 0000000..bba19c1
Binary files /dev/null and b/android/libs/jg_filter_sdk_1.1.jar differ
diff --git a/android/libs/mid-core-sdk-3.7.2.jar b/android/libs/mid-core-sdk-3.7.2.jar
new file mode 100755
index 0000000..2ef6c32
Binary files /dev/null and b/android/libs/mid-core-sdk-3.7.2.jar differ
diff --git a/android/libs/wup-1.0.0.E-SNAPSHOT.jar b/android/libs/wup-1.0.0.E-SNAPSHOT.jar
new file mode 100755
index 0000000..edff96f
Binary files /dev/null and b/android/libs/wup-1.0.0.E-SNAPSHOT.jar differ
diff --git a/android/libs/x86/libtpnsSecurity.so b/android/libs/x86/libtpnsSecurity.so
new file mode 100755
index 0000000..72f6807
Binary files /dev/null and b/android/libs/x86/libtpnsSecurity.so differ
diff --git a/android/libs/x86/libxguardian.so b/android/libs/x86/libxguardian.so
new file mode 100755
index 0000000..0b6110a
Binary files /dev/null and b/android/libs/x86/libxguardian.so differ
diff --git a/android/proguard-rules.pro b/android/proguard-rules.pro
new file mode 100644
index 0000000..46bc2c8
--- /dev/null
+++ b/android/proguard-rules.pro
@@ -0,0 +1,17 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in /Library/Android/SDK/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/android/src/androidTest/java/com/jeepeng/react/xgpush/ApplicationTest.java b/android/src/androidTest/java/com/jeepeng/react/xgpush/ApplicationTest.java
new file mode 100644
index 0000000..eefe808
--- /dev/null
+++ b/android/src/androidTest/java/com/jeepeng/react/xgpush/ApplicationTest.java
@@ -0,0 +1,13 @@
+package com.jeepeng.react.xgpush;
+
+import android.app.Application;
+import android.test.ApplicationTestCase;
+
+/**
+ * Testing Fundamentals
+ */
+public class ApplicationTest extends ApplicationTestCase {
+ public ApplicationTest() {
+ super(Application.class);
+ }
+}
\ No newline at end of file
diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..692133f
--- /dev/null
+++ b/android/src/main/AndroidManifest.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
diff --git a/android/src/main/java/com/jeepeng/react/xgpush/Constants.java b/android/src/main/java/com/jeepeng/react/xgpush/Constants.java
new file mode 100644
index 0000000..a7dab88
--- /dev/null
+++ b/android/src/main/java/com/jeepeng/react/xgpush/Constants.java
@@ -0,0 +1,17 @@
+package com.jeepeng.react.xgpush;
+
+/**
+ * 常量
+ * Created by Jeepeng on 16/8/15.
+ */
+public class Constants {
+ public static final String ACTION_ON_REGISTERED = "XGPushNotificationOnRegisterResult";
+ public static final String ACTION_ON_TEXT_MESSAGE = "XGPushNotificationOnTextMessage";
+ public static final String ACTION_ON_NOTIFICATION_SHOWED = "XGPushNotificationOnShowed";
+ public static final String ACTION_ON_NOTIFICATION_CLICKED = "XGPushNotificationOnClicked";
+
+ public static final String EVENT_REGISTERED = "remoteNotificationsRegistered";
+ public static final String EVENT_REMOTE_NOTIFICATION_RECEIVED = "remoteNotificationReceived";
+ public static final String EVENT_LOCAL_NOTIFICATION_RECEIVED = "localNotificationReceived";
+ public static final String EVENT_MESSAGE_RECEIVED = "messageReceived";
+}
diff --git a/android/src/main/java/com/jeepeng/react/xgpush/PushModule.java b/android/src/main/java/com/jeepeng/react/xgpush/PushModule.java
new file mode 100644
index 0000000..9d8603f
--- /dev/null
+++ b/android/src/main/java/com/jeepeng/react/xgpush/PushModule.java
@@ -0,0 +1,303 @@
+package com.jeepeng.react.xgpush;
+
+import android.app.Activity;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.support.annotation.Nullable;
+import android.util.Log;
+
+import com.facebook.react.bridge.ActivityEventListener;
+import com.facebook.react.bridge.Arguments;
+import com.facebook.react.bridge.LifecycleEventListener;
+import com.facebook.react.bridge.Promise;
+import com.facebook.react.bridge.ReactApplicationContext;
+import com.facebook.react.bridge.ReactContextBaseJavaModule;
+import com.facebook.react.bridge.ReactMethod;
+import com.facebook.react.bridge.WritableMap;
+import com.facebook.react.modules.core.DeviceEventManagerModule;
+import com.tencent.android.tpush.XGIOperateCallback;
+import com.tencent.android.tpush.XGLocalMessage;
+import com.tencent.android.tpush.XGPushConfig;
+import com.tencent.android.tpush.XGPushManager;
+import com.tencent.android.tpush.encrypt.Rijndael;
+
+/**
+ * 信鸽推送
+ * Created by Jeepeng on 16/8/3.
+ */
+public class PushModule extends ReactContextBaseJavaModule implements ActivityEventListener, LifecycleEventListener {
+
+ public static final String MODULE_NAME = "XGPushManager";
+
+ private Context reactContext;
+
+ public PushModule(ReactApplicationContext reactContext) {
+ super(reactContext);
+ reactContext.addActivityEventListener(this);
+ reactContext.addLifecycleEventListener(this);
+ this.reactContext = reactContext;
+ registerReceivers();
+ }
+
+ @Override
+ public String getName() {
+ return MODULE_NAME;
+ }
+
+ private void sendEvent(String eventName, @Nullable WritableMap params) {
+ getReactApplicationContext()
+ .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
+ .emit(eventName, params);
+ }
+
+ private void registerReceivers() {
+ IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addAction(Constants.ACTION_ON_REGISTERED);
+ intentFilter.addAction(Constants.ACTION_ON_TEXT_MESSAGE);
+ intentFilter.addAction(Constants.ACTION_ON_NOTIFICATION_CLICKED);
+ intentFilter.addAction(Constants.ACTION_ON_NOTIFICATION_SHOWED);
+
+ reactContext.registerReceiver(new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ WritableMap params = Arguments.createMap();
+ switch (intent.getAction()){
+ case Constants.ACTION_ON_REGISTERED:
+ intent.getBundleExtra("notification");
+ String token = intent.getStringExtra("token");
+ params.putString("deviceToken", token);
+
+ sendEvent(Constants.EVENT_REGISTERED, params);
+ break;
+ case Constants.ACTION_ON_TEXT_MESSAGE:
+ String title = intent.getStringExtra("title");
+ String content = intent.getStringExtra("content");
+ String customContent = intent.getStringExtra("customContent");
+ params.putString("title", title);
+ params.putString("content", content);
+ params.putString("custom_content", customContent);
+
+ sendEvent(Constants.EVENT_MESSAGE_RECEIVED, params);
+ break;
+ case Constants.ACTION_ON_NOTIFICATION_SHOWED:
+ params.putString("title", intent.getStringExtra("title"));
+ params.putString("content", intent.getStringExtra("content"));
+ params.putString("custom_content", intent.getStringExtra("customContent"));
+
+ sendEvent(Constants.EVENT_REMOTE_NOTIFICATION_RECEIVED, params);
+ break;
+ case Constants.ACTION_ON_NOTIFICATION_CLICKED:
+ params.putString("title", intent.getStringExtra("title"));
+ params.putString("content", intent.getStringExtra("content"));
+ params.putString("custom_content", intent.getStringExtra("customContent"));
+
+ sendEvent(Constants.ACTION_ON_NOTIFICATION_CLICKED, params);
+ break;
+ default:
+ break;
+ }
+
+
+ }
+ }, intentFilter);
+ }
+
+ /**
+ * 开启logcat输出,方便debug,发布时请关闭
+ */
+ @ReactMethod
+ public void enableDebug(boolean isDebug) {
+ XGPushConfig.enableDebug(this.reactContext, isDebug);
+ }
+
+ /**
+ * 开启logcat输出,方便debug,发布时请关闭
+ */
+ @ReactMethod
+ public void isEnableDebug(Promise promise) {
+ promise.resolve(XGPushConfig.isEnableDebug(this.reactContext));
+ }
+
+ /**
+ * 初始化
+ * @param accessId
+ * @param accessKey
+ */
+ @ReactMethod
+ public void startApp(int accessId, String accessKey) {
+ XGPushConfig.setAccessId(this.reactContext, accessId);
+ XGPushConfig.setAccessKey(this.reactContext, accessKey);
+ }
+
+ /**
+ * 注册并绑定帐号
+ * @param account 帐号,当为'*'表示解绑
+ */
+ @ReactMethod
+ public void registerPush(String account, final Promise promise) {
+ if(account != null && !"".equals(account)) {
+ XGPushManager.registerPush(this.reactContext, account, new XGIOperateCallback() {
+ @Override
+ public void onSuccess(Object date, int flag) {
+ promise.resolve(date);
+ }
+
+ @Override
+ public void onFail(Object data, int errCode, String msg) {
+ promise.reject(String.valueOf(errCode), msg);
+ }
+ });
+ } else {
+ XGPushManager.registerPush(this.reactContext, new XGIOperateCallback() {
+ @Override
+ public void onSuccess(Object date, int flag) {
+ promise.resolve(date);
+ }
+
+ @Override
+ public void onFail(Object data, int errCode, String msg) {
+ promise.reject(String.valueOf(errCode), msg);
+ }
+ });
+ }
+ }
+
+ /**
+ * 反注册
+ * @param promise
+ */
+ @ReactMethod
+ public void unregisterPush(final Promise promise) {
+ XGPushManager.unregisterPush(this.reactContext, new XGIOperateCallback() {
+ @Override
+ public void onSuccess(Object data, int flag) {
+ WritableMap map = Arguments.createMap();
+ map.putString("data", (String) data);
+ map.putInt("flag", flag);
+ promise.resolve(map);
+ }
+
+ @Override
+ public void onFail(Object data, int errCode, String msg) {
+ promise.reject(String.valueOf(errCode), msg);
+ }
+ });
+ }
+
+ /**
+ * 设置tag
+ * @param tagName
+ */
+ @ReactMethod
+ public void setTag(String tagName) {
+ XGPushManager.setTag(this.reactContext, tagName);
+ }
+
+ /**
+ * 删除tag
+ * @param tagName
+ */
+ @ReactMethod
+ public void deleteTag(String tagName) {
+ XGPushManager.deleteTag(this.reactContext, tagName);
+ }
+
+ @ReactMethod
+ public void addLocalNotification(String title, String content) {
+ XGLocalMessage message = new XGLocalMessage();
+ message.setTitle(title);
+ message.setContent(content);
+ Log.i(MODULE_NAME, title);
+ Log.i(MODULE_NAME, content);
+ XGPushManager.addLocalNotification(this.reactContext, message);
+ }
+
+ /**
+ * 获取token
+ * @return 成功时返回正常的token;失败时返回null或”0”
+ */
+ @ReactMethod
+ public String getToken() {
+ return XGPushConfig.getToken(this.reactContext);
+ }
+
+ @ReactMethod
+ public void setAccessId(String accessId) {
+ try{
+ XGPushConfig.setAccessId(this.reactContext, Long.parseLong(accessId));
+ } catch (NumberFormatException exception) {
+ exception.printStackTrace();
+ }
+ }
+
+ @ReactMethod
+ public long getAccessId() {
+ return XGPushConfig.getAccessId(this.reactContext);
+ }
+
+ @ReactMethod
+ public void setAccessKey(String accessKey) {
+ XGPushConfig.setAccessKey(this.reactContext, accessKey);
+ }
+
+ /**
+ * 获取accessKey
+ * @return accessKey
+ */
+ @ReactMethod
+ public String getAccessKey() {
+ return XGPushConfig.getAccessKey(this.reactContext);
+ }
+
+ @ReactMethod
+ public void getInitialNotification(Promise promise) {
+ WritableMap params = Arguments.createMap();
+ Activity activity = getCurrentActivity();
+ if (activity != null) {
+ Intent intent = activity.getIntent();
+ try {
+ if(intent != null && intent.hasExtra("protect")) {
+ String title = Rijndael.decrypt(intent.getStringExtra("title"));
+ String content = Rijndael.decrypt(intent.getStringExtra("content"));
+ String customContent = Rijndael.decrypt(intent.getStringExtra("custom_content"));
+ params.putString("title", title);
+ params.putString("content", content);
+ params.putString("custom_content", customContent);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ promise.resolve(params);
+ }
+
+ @Override
+ public void onHostResume() {
+ XGPushManager.onActivityStarted(getCurrentActivity());
+ }
+
+ @Override
+ public void onHostPause() {
+ XGPushManager.onActivityStoped(getCurrentActivity());
+ }
+
+ @Override
+ public void onHostDestroy() {
+
+ }
+
+ @Override
+ public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {
+
+ }
+
+ @Override
+ public void onNewIntent(Intent intent) {
+ Activity activity = getCurrentActivity();
+ if (activity != null) {
+ activity.setIntent(intent); // 必须要调用这句
+ }
+ }
+}
diff --git a/android/src/main/java/com/jeepeng/react/xgpush/PushPackage.java b/android/src/main/java/com/jeepeng/react/xgpush/PushPackage.java
new file mode 100644
index 0000000..dc98a19
--- /dev/null
+++ b/android/src/main/java/com/jeepeng/react/xgpush/PushPackage.java
@@ -0,0 +1,34 @@
+package com.jeepeng.react.xgpush;
+
+import com.facebook.react.ReactPackage;
+import com.facebook.react.bridge.JavaScriptModule;
+import com.facebook.react.bridge.NativeModule;
+import com.facebook.react.bridge.ReactApplicationContext;
+import com.facebook.react.uimanager.ViewManager;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * 信鸽推送
+ * Created by Jeepeng on 16/8/3.
+ */
+public class PushPackage implements ReactPackage {
+ @Override
+ public List createNativeModules(ReactApplicationContext reactContext) {
+ List modules = new ArrayList<>();
+ modules.add(new PushModule(reactContext));
+ return modules;
+ }
+
+ @Override
+ public List> createJSModules() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public List createViewManagers(ReactApplicationContext reactContext) {
+ return Collections.emptyList();
+ }
+}
diff --git a/android/src/main/java/com/jeepeng/react/xgpush/receiver/MessageReceiver.java b/android/src/main/java/com/jeepeng/react/xgpush/receiver/MessageReceiver.java
new file mode 100644
index 0000000..669fd9e
--- /dev/null
+++ b/android/src/main/java/com/jeepeng/react/xgpush/receiver/MessageReceiver.java
@@ -0,0 +1,131 @@
+package com.jeepeng.react.xgpush.receiver;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+
+import com.jeepeng.react.xgpush.Constants;
+import com.tencent.android.tpush.XGPushBaseReceiver;
+import com.tencent.android.tpush.XGPushClickedResult;
+import com.tencent.android.tpush.XGPushRegisterResult;
+import com.tencent.android.tpush.XGPushShowedResult;
+import com.tencent.android.tpush.XGPushTextMessage;
+
+/**
+ * 消息接收器
+ * Created by Jeepeng on 16/8/4.
+ */
+public class MessageReceiver extends XGPushBaseReceiver {
+
+ /**
+ * 注册结果
+ * @param context
+ * @param errorCode
+ * @param xgPushRegisterResult
+ */
+ @Override
+ public void onRegisterResult(Context context, int errorCode, XGPushRegisterResult xgPushRegisterResult) {
+
+ if(errorCode == 0) {
+ Intent intent = new Intent(Constants.ACTION_ON_REGISTERED);
+ intent.putExtra("token", xgPushRegisterResult.getToken());
+ context.sendBroadcast(intent);
+ }
+
+ }
+
+ /**
+ * 反注册结果
+ * @param context
+ * @param errorCode
+ */
+ @Override
+ public void onUnregisterResult(Context context, int errorCode) {
+
+ }
+
+
+ /**
+ * 设置标签结果
+ * @param context
+ * @param errorCode
+ * @param tagName
+ */
+ @Override
+ public void onSetTagResult(Context context, int errorCode, String tagName) {
+
+ }
+
+ /**
+ * 删除标签结果
+ * @param context
+ * @param errorCode
+ * @param tagName
+ */
+ @Override
+ public void onDeleteTagResult(Context context, int errorCode, String tagName) {
+
+ }
+
+ /**
+ * 收到消息
+ * @param context
+ * @param xgPushTextMessage
+ */
+ @Override
+ public void onTextMessage(Context context, XGPushTextMessage xgPushTextMessage) {
+ Intent intent = new Intent(Constants.ACTION_ON_TEXT_MESSAGE);
+ intent.putExtra("title", xgPushTextMessage.getTitle());
+ intent.putExtra("content", xgPushTextMessage.getContent());
+ intent.putExtra("customContent", xgPushTextMessage.getCustomContent());
+ context.sendBroadcast(intent);
+ }
+
+ /**
+ * 通知被打开触发的结果
+ * @param context
+ * @param message
+ */
+ @Override
+ public void onNotifactionClickedResult(Context context, XGPushClickedResult message) {
+ if (context == null || message == null) {
+ return;
+ }
+ if (message.getActionType() == XGPushClickedResult.NOTIFACTION_CLICKED_TYPE) {
+ // 通知在通知栏被点击啦。。。。。
+ Intent intent = new Intent(Constants.ACTION_ON_NOTIFICATION_CLICKED);
+ Bundle bundle = new Bundle();
+ bundle.putString("content", message.getContent());
+ bundle.putString("title", message.getTitle());
+ intent.putExtra("notification", bundle);
+ context.sendBroadcast(intent);
+ } else if (message.getActionType() == XGPushClickedResult.NOTIFACTION_DELETED_TYPE) {
+ // 通知被清除啦。。。。
+ // APP自己处理通知被清除后的相关动作
+ }
+ }
+
+ /**
+ * 通知被展示触发的结果,可以在此保存APP收到的通知
+ * @param context
+ * @param xgPushShowedResult
+ */
+ @Override
+ public void onNotifactionShowedResult(Context context, XGPushShowedResult xgPushShowedResult) {
+ Intent intent = new Intent(Constants.ACTION_ON_NOTIFICATION_SHOWED);
+ Bundle bundle = new Bundle();
+ bundle.putString("content", xgPushShowedResult.getContent());
+ bundle.putString("title", xgPushShowedResult.getTitle());
+ bundle.putString("customContent", xgPushShowedResult.getCustomContent());
+ intent.putExtra("notification", bundle);
+
+ intent.putExtra("title", xgPushShowedResult.getTitle());
+ intent.putExtra("content", xgPushShowedResult.getContent());
+ intent.putExtra("customContent", xgPushShowedResult.getCustomContent());
+ intent.putExtra("activity", xgPushShowedResult.getActivity());
+ intent.putExtra("msgId", xgPushShowedResult.getMsgId());
+ intent.putExtra("notificationId", xgPushShowedResult.getNotifactionId());
+ intent.putExtra("notificationActionType", xgPushShowedResult.getNotificationActionType());
+ context.sendBroadcast(intent);
+ }
+}
diff --git a/android/src/main/res/values/strings.xml b/android/src/main/res/values/strings.xml
new file mode 100644
index 0000000..c13b22f
--- /dev/null
+++ b/android/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ react-native-xinge-push
+
diff --git a/android/src/test/java/com/jeepeng/react/xgpush/ExampleUnitTest.java b/android/src/test/java/com/jeepeng/react/xgpush/ExampleUnitTest.java
new file mode 100644
index 0000000..1ad4543
--- /dev/null
+++ b/android/src/test/java/com/jeepeng/react/xgpush/ExampleUnitTest.java
@@ -0,0 +1,15 @@
+package com.jeepeng.react.xgpush;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * To work on unit tests, switch the Test Artifact in the Build Variants view.
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() throws Exception {
+ assertEquals(4, 2 + 2);
+ }
+}
\ No newline at end of file
diff --git a/example/.babelrc b/example/.babelrc
new file mode 100644
index 0000000..a9ce136
--- /dev/null
+++ b/example/.babelrc
@@ -0,0 +1,3 @@
+{
+ "presets": ["react-native"]
+}
diff --git a/example/.buckconfig b/example/.buckconfig
new file mode 100644
index 0000000..934256c
--- /dev/null
+++ b/example/.buckconfig
@@ -0,0 +1,6 @@
+
+[android]
+ target = Google Inc.:Google APIs:23
+
+[maven_repositories]
+ central = https://repo1.maven.org/maven2
diff --git a/example/.flowconfig b/example/.flowconfig
new file mode 100644
index 0000000..a76425e
--- /dev/null
+++ b/example/.flowconfig
@@ -0,0 +1,47 @@
+[ignore]
+; We fork some components by platform
+.*/*[.]android.js
+
+; Ignore "BUCK" generated dirs
+/\.buckd/
+
+; Ignore unexpected extra "@providesModule"
+.*/node_modules/.*/node_modules/fbjs/.*
+
+; Ignore duplicate module providers
+; For RN Apps installed via npm, "Libraries" folder is inside
+; "node_modules/react-native" but in the source repo it is in the root
+.*/Libraries/react-native/React.js
+.*/Libraries/react-native/ReactNative.js
+
+[include]
+
+[libs]
+node_modules/react-native/Libraries/react-native/react-native-interface.js
+node_modules/react-native/flow
+flow/
+
+[options]
+emoji=true
+
+module.system=haste
+
+experimental.strict_type_args=true
+
+munge_underscores=true
+
+module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub'
+
+suppress_type=$FlowIssue
+suppress_type=$FlowFixMe
+suppress_type=$FixMe
+
+suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(4[0-2]\\|[1-3][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)
+suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(4[0-2]\\|[1-3][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+
+suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy
+suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError
+
+unsafe.enable_getters_and_setters=true
+
+[version]
+^0.42.0
diff --git a/example/.gitattributes b/example/.gitattributes
new file mode 100644
index 0000000..d42ff18
--- /dev/null
+++ b/example/.gitattributes
@@ -0,0 +1 @@
+*.pbxproj -text
diff --git a/example/.gitignore b/example/.gitignore
new file mode 100644
index 0000000..10be197
--- /dev/null
+++ b/example/.gitignore
@@ -0,0 +1,53 @@
+# OSX
+#
+.DS_Store
+
+# Xcode
+#
+build/
+*.pbxuser
+!default.pbxuser
+*.mode1v3
+!default.mode1v3
+*.mode2v3
+!default.mode2v3
+*.perspectivev3
+!default.perspectivev3
+xcuserdata
+*.xccheckout
+*.moved-aside
+DerivedData
+*.hmap
+*.ipa
+*.xcuserstate
+project.xcworkspace
+
+# Android/IntelliJ
+#
+build/
+.idea
+.gradle
+local.properties
+*.iml
+
+# node.js
+#
+node_modules/
+npm-debug.log
+yarn-error.log
+
+# BUCK
+buck-out/
+\.buckd/
+*.keystore
+
+# fastlane
+#
+# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
+# screenshots whenever they are needed.
+# For more information about the recommended setup visit:
+# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md
+
+fastlane/report.xml
+fastlane/Preview.html
+fastlane/screenshots
diff --git a/example/.watchmanconfig b/example/.watchmanconfig
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/example/.watchmanconfig
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/example/__tests__/index.android.js b/example/__tests__/index.android.js
new file mode 100644
index 0000000..b49b908
--- /dev/null
+++ b/example/__tests__/index.android.js
@@ -0,0 +1,12 @@
+import 'react-native';
+import React from 'react';
+import Index from '../index.android.js';
+
+// Note: test renderer must be required after react-native.
+import renderer from 'react-test-renderer';
+
+it('renders correctly', () => {
+ const tree = renderer.create(
+
+ );
+});
diff --git a/example/__tests__/index.ios.js b/example/__tests__/index.ios.js
new file mode 100644
index 0000000..ba7c5b5
--- /dev/null
+++ b/example/__tests__/index.ios.js
@@ -0,0 +1,12 @@
+import 'react-native';
+import React from 'react';
+import Index from '../index.ios.js';
+
+// Note: test renderer must be required after react-native.
+import renderer from 'react-test-renderer';
+
+it('renders correctly', () => {
+ const tree = renderer.create(
+
+ );
+});
diff --git a/example/android/app/BUCK b/example/android/app/BUCK
new file mode 100644
index 0000000..c8f5603
--- /dev/null
+++ b/example/android/app/BUCK
@@ -0,0 +1,65 @@
+# To learn about Buck see [Docs](https://buckbuild.com/).
+# To run your application with Buck:
+# - install Buck
+# - `npm start` - to start the packager
+# - `cd android`
+# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"`
+# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck
+# - `buck install -r android/app` - compile, install and run application
+#
+
+lib_deps = []
+
+for jarfile in glob(['libs/*.jar']):
+ name = 'jars__' + jarfile[jarfile.rindex('/') + 1: jarfile.rindex('.jar')]
+ lib_deps.append(':' + name)
+ prebuilt_jar(
+ name = name,
+ binary_jar = jarfile,
+ )
+
+for aarfile in glob(['libs/*.aar']):
+ name = 'aars__' + aarfile[aarfile.rindex('/') + 1: aarfile.rindex('.aar')]
+ lib_deps.append(':' + name)
+ android_prebuilt_aar(
+ name = name,
+ aar = aarfile,
+ )
+
+android_library(
+ name = "all-libs",
+ exported_deps = lib_deps,
+)
+
+android_library(
+ name = "app-code",
+ srcs = glob([
+ "src/main/java/**/*.java",
+ ]),
+ deps = [
+ ":all-libs",
+ ":build_config",
+ ":res",
+ ],
+)
+
+android_build_config(
+ name = "build_config",
+ package = "com.example",
+)
+
+android_resource(
+ name = "res",
+ package = "com.example",
+ res = "src/main/res",
+)
+
+android_binary(
+ name = "app",
+ keystore = "//android/keystores:debug",
+ manifest = "src/main/AndroidManifest.xml",
+ package_type = "debug",
+ deps = [
+ ":app-code",
+ ],
+)
diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle
new file mode 100644
index 0000000..920cc36
--- /dev/null
+++ b/example/android/app/build.gradle
@@ -0,0 +1,140 @@
+apply plugin: "com.android.application"
+
+import com.android.build.OutputFile
+
+/**
+ * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
+ * and bundleReleaseJsAndAssets).
+ * These basically call `react-native bundle` with the correct arguments during the Android build
+ * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
+ * bundle directly from the development server. Below you can see all the possible configurations
+ * and their defaults. If you decide to add a configuration block, make sure to add it before the
+ * `apply from: "../../node_modules/react-native/react.gradle"` line.
+ *
+ * project.ext.react = [
+ * // the name of the generated asset file containing your JS bundle
+ * bundleAssetName: "index.android.bundle",
+ *
+ * // the entry file for bundle generation
+ * entryFile: "index.android.js",
+ *
+ * // whether to bundle JS and assets in debug mode
+ * bundleInDebug: false,
+ *
+ * // whether to bundle JS and assets in release mode
+ * bundleInRelease: true,
+ *
+ * // whether to bundle JS and assets in another build variant (if configured).
+ * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
+ * // The configuration property can be in the following formats
+ * // 'bundleIn${productFlavor}${buildType}'
+ * // 'bundleIn${buildType}'
+ * // bundleInFreeDebug: true,
+ * // bundleInPaidRelease: true,
+ * // bundleInBeta: true,
+ *
+ * // the root of your project, i.e. where "package.json" lives
+ * root: "../../",
+ *
+ * // where to put the JS bundle asset in debug mode
+ * jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
+ *
+ * // where to put the JS bundle asset in release mode
+ * jsBundleDirRelease: "$buildDir/intermediates/assets/release",
+ *
+ * // where to put drawable resources / React Native assets, e.g. the ones you use via
+ * // require('./image.png')), in debug mode
+ * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
+ *
+ * // where to put drawable resources / React Native assets, e.g. the ones you use via
+ * // require('./image.png')), in release mode
+ * resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
+ *
+ * // by default the gradle tasks are skipped if none of the JS files or assets change; this means
+ * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
+ * // date; if you have any other folders that you want to ignore for performance reasons (gradle
+ * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
+ * // for example, you might want to remove it from here.
+ * inputExcludes: ["android/**", "ios/**"],
+ *
+ * // override which node gets called and with what additional arguments
+ * nodeExecutableAndArgs: ["node"],
+ *
+ * // supply additional arguments to the packager
+ * extraPackagerArgs: []
+ * ]
+ */
+
+apply from: "../../node_modules/react-native/react.gradle"
+
+/**
+ * Set this to true to create two separate APKs instead of one:
+ * - An APK that only works on ARM devices
+ * - An APK that only works on x86 devices
+ * The advantage is the size of the APK is reduced by about 4MB.
+ * Upload all the APKs to the Play Store and people will download
+ * the correct one based on the CPU architecture of their device.
+ */
+def enableSeparateBuildPerCPUArchitecture = false
+
+/**
+ * Run Proguard to shrink the Java bytecode in release builds.
+ */
+def enableProguardInReleaseBuilds = false
+
+android {
+ compileSdkVersion 23
+ buildToolsVersion "23.0.1"
+
+ defaultConfig {
+ applicationId "com.jeepeng.push"
+ minSdkVersion 16
+ targetSdkVersion 22
+ versionCode 1
+ versionName "1.0"
+ ndk {
+ abiFilters "armeabi-v7a", "x86"
+ }
+ }
+ splits {
+ abi {
+ reset()
+ enable enableSeparateBuildPerCPUArchitecture
+ universalApk false // If true, also generate a universal APK
+ include "armeabi-v7a", "x86"
+ }
+ }
+ buildTypes {
+ release {
+ minifyEnabled enableProguardInReleaseBuilds
+ proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
+ }
+ }
+ // applicationVariants are e.g. debug, release
+ applicationVariants.all { variant ->
+ variant.outputs.each { output ->
+ // For each separate APK per architecture, set a unique version code as described here:
+ // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
+ def versionCodes = ["armeabi-v7a":1, "x86":2]
+ def abi = output.getFilter(OutputFile.ABI)
+ if (abi != null) { // null for the universal-debug, universal-release variants
+ output.versionCodeOverride =
+ versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
+ }
+ }
+ }
+}
+
+dependencies {
+ compile project(':react-native-xinge-push')
+ compile fileTree(dir: "libs", include: ["*.jar"])
+ compile "com.android.support:appcompat-v7:23.0.1"
+ compile "com.facebook.react:react-native:+" // From node_modules
+}
+
+// Run this once to be able to run the application with BUCK
+// puts all compile dependencies into folder libs for BUCK to use
+task copyDownloadableDepsToLibs(type: Copy) {
+ from configurations.compile
+ into 'libs'
+}
diff --git a/example/android/app/proguard-rules.pro b/example/android/app/proguard-rules.pro
new file mode 100644
index 0000000..6e8516c
--- /dev/null
+++ b/example/android/app/proguard-rules.pro
@@ -0,0 +1,70 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Disabling obfuscation is useful if you collect stack traces from production crashes
+# (unless you are using a system that supports de-obfuscate the stack traces).
+-dontobfuscate
+
+# React Native
+
+# Keep our interfaces so they can be used by other ProGuard rules.
+# See http://sourceforge.net/p/proguard/bugs/466/
+-keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip
+-keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters
+-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip
+
+# Do not strip any method/class that is annotated with @DoNotStrip
+-keep @com.facebook.proguard.annotations.DoNotStrip class *
+-keep @com.facebook.common.internal.DoNotStrip class *
+-keepclassmembers class * {
+ @com.facebook.proguard.annotations.DoNotStrip *;
+ @com.facebook.common.internal.DoNotStrip *;
+}
+
+-keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * {
+ void set*(***);
+ *** get*();
+}
+
+-keep class * extends com.facebook.react.bridge.JavaScriptModule { *; }
+-keep class * extends com.facebook.react.bridge.NativeModule { *; }
+-keepclassmembers,includedescriptorclasses class * { native ; }
+-keepclassmembers class * { @com.facebook.react.uimanager.UIProp ; }
+-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp ; }
+-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup ; }
+
+-dontwarn com.facebook.react.**
+
+# TextLayoutBuilder uses a non-public Android constructor within StaticLayout.
+# See libs/proxy/src/main/java/com/facebook/fbui/textlayoutbuilder/proxy for details.
+-dontwarn android.text.StaticLayout
+
+# okhttp
+
+-keepattributes Signature
+-keepattributes *Annotation*
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
+
+# okio
+
+-keep class sun.misc.Unsafe { *; }
+-dontwarn java.nio.file.*
+-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
+-dontwarn okio.**
diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..0fcc9ad
--- /dev/null
+++ b/example/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/example/android/app/src/main/java/com/example/MainActivity.java b/example/android/app/src/main/java/com/example/MainActivity.java
new file mode 100644
index 0000000..e84b725
--- /dev/null
+++ b/example/android/app/src/main/java/com/example/MainActivity.java
@@ -0,0 +1,15 @@
+package com.example;
+
+import com.facebook.react.ReactActivity;
+
+public class MainActivity extends ReactActivity {
+
+ /**
+ * Returns the name of the main component registered from JavaScript.
+ * This is used to schedule rendering of the component.
+ */
+ @Override
+ protected String getMainComponentName() {
+ return "example";
+ }
+}
diff --git a/example/android/app/src/main/java/com/example/MainApplication.java b/example/android/app/src/main/java/com/example/MainApplication.java
new file mode 100644
index 0000000..24cc564
--- /dev/null
+++ b/example/android/app/src/main/java/com/example/MainApplication.java
@@ -0,0 +1,42 @@
+package com.example;
+
+import android.app.Application;
+
+import com.facebook.react.ReactApplication;
+import com.jeepeng.react.xgpush.PushPackage;
+import com.facebook.react.ReactNativeHost;
+import com.facebook.react.ReactPackage;
+import com.facebook.react.shell.MainReactPackage;
+import com.facebook.soloader.SoLoader;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class MainApplication extends Application implements ReactApplication {
+
+ private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
+ @Override
+ public boolean getUseDeveloperSupport() {
+ return BuildConfig.DEBUG;
+ }
+
+ @Override
+ protected List getPackages() {
+ return Arrays.asList(
+ new MainReactPackage(),
+ new PushPackage()
+ );
+ }
+ };
+
+ @Override
+ public ReactNativeHost getReactNativeHost() {
+ return mReactNativeHost;
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ SoLoader.init(this, /* native exopackage */ false);
+ }
+}
diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..cde69bc
Binary files /dev/null and b/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..c133a0c
Binary files /dev/null and b/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..bfa42f0
Binary files /dev/null and b/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..324e72c
Binary files /dev/null and b/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/example/android/app/src/main/res/values/strings.xml b/example/android/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..41fcb0c
--- /dev/null
+++ b/example/android/app/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ RN-XGPush
+
diff --git a/example/android/app/src/main/res/values/styles.xml b/example/android/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..319eb0c
--- /dev/null
+++ b/example/android/app/src/main/res/values/styles.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
diff --git a/example/android/build.gradle b/example/android/build.gradle
new file mode 100644
index 0000000..eed9972
--- /dev/null
+++ b/example/android/build.gradle
@@ -0,0 +1,24 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+ repositories {
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:2.2.3'
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ mavenLocal()
+ jcenter()
+ maven {
+ // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
+ url "$rootDir/../node_modules/react-native/android"
+ }
+ }
+}
diff --git a/example/android/gradle.properties b/example/android/gradle.properties
new file mode 100644
index 0000000..1fd964e
--- /dev/null
+++ b/example/android/gradle.properties
@@ -0,0 +1,20 @@
+# Project-wide Gradle settings.
+
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+# Default value: -Xmx10248m -XX:MaxPermSize=256m
+# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
+
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+
+android.useDeprecatedNdk=true
diff --git a/example/android/gradle/wrapper/gradle-wrapper.jar b/example/android/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..b5166da
Binary files /dev/null and b/example/android/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..dbdc05d
--- /dev/null
+++ b/example/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/example/android/gradlew b/example/android/gradlew
new file mode 100755
index 0000000..91a7e26
--- /dev/null
+++ b/example/android/gradlew
@@ -0,0 +1,164 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+ echo "$*"
+}
+
+die ( ) {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+esac
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched.
+if $cygwin ; then
+ [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >&-
+APP_HOME="`pwd -P`"
+cd "$SAVED" >&-
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+ JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/example/android/gradlew.bat b/example/android/gradlew.bat
new file mode 100644
index 0000000..8a0b282
--- /dev/null
+++ b/example/android/gradlew.bat
@@ -0,0 +1,90 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/example/android/keystores/BUCK b/example/android/keystores/BUCK
new file mode 100644
index 0000000..88e4c31
--- /dev/null
+++ b/example/android/keystores/BUCK
@@ -0,0 +1,8 @@
+keystore(
+ name = "debug",
+ properties = "debug.keystore.properties",
+ store = "debug.keystore",
+ visibility = [
+ "PUBLIC",
+ ],
+)
diff --git a/example/android/keystores/debug.keystore.properties b/example/android/keystores/debug.keystore.properties
new file mode 100644
index 0000000..121bfb4
--- /dev/null
+++ b/example/android/keystores/debug.keystore.properties
@@ -0,0 +1,4 @@
+key.store=debug.keystore
+key.alias=androiddebugkey
+key.store.password=android
+key.alias.password=android
diff --git a/example/android/settings.gradle b/example/android/settings.gradle
new file mode 100644
index 0000000..4dcca88
--- /dev/null
+++ b/example/android/settings.gradle
@@ -0,0 +1,5 @@
+rootProject.name = 'example'
+include ':react-native-xinge-push'
+project(':react-native-xinge-push').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-xinge-push/android')
+
+include ':app'
diff --git a/example/app.json b/example/app.json
new file mode 100644
index 0000000..486d55b
--- /dev/null
+++ b/example/app.json
@@ -0,0 +1,4 @@
+{
+ "name": "example",
+ "displayName": "example"
+}
\ No newline at end of file
diff --git a/example/app/List.js b/example/app/List.js
new file mode 100644
index 0000000..c9336b4
--- /dev/null
+++ b/example/app/List.js
@@ -0,0 +1,122 @@
+/**
+ * Created by Jeepeng on 2017/1/29.
+ */
+
+import React, { Component } from 'react';
+import {
+ StyleSheet,
+ View,
+ Text,
+ TouchableNativeFeedback,
+ TouchableHighlight
+} from 'react-native';
+
+const Touchable = Platform.OS === 'android' ? TouchableNativeFeedback : TouchableHighlight;
+
+class Item extends Component {
+
+ render() {
+ const { style, thumb, extra, arrow, onPress, children, _rightStyle } = this.props;
+ return (
+
+
+ { thumb }
+
+ { typeof children === 'string' ?
+ {children}
+ : {children}
+ }
+ { extra ?
+
+ { typeof extra === 'string' ?
+ {extra}
+ : {extra}
+ }
+ : null
+ }
+ { arrow }
+
+
+
+ );
+ }
+}
+
+class List extends Component {
+
+ static Item = Item;
+
+ render() {
+ const { renderHeader, renderFooter, children, style } = this.props;
+ return (
+
+ {renderHeader && renderHeader()}
+
+ {
+ React.Children.map(children, (child, index) => {
+ const extraRightStyle = (React.isValidElement(children) || children.length - 1 === index)
+ ? styles.itemRightWithoutBorder : {};
+ return React.cloneElement(child, {
+ _rightStyle: extraRightStyle,
+ });
+ })
+ }
+
+ {renderFooter && renderFooter()}
+
+ );
+ }
+}
+
+const styles = StyleSheet.create({
+ list: {
+
+ },
+ listWrapper: {
+ borderWidth: StyleSheet.hairlineWidth,
+ borderColor: '#e4ecf0',
+ borderLeftWidth: 0,
+ borderRightWidth: 0,
+ },
+ item: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ },
+ itemRight: {
+ flexGrow: 1,
+ minHeight: 45,
+ flexDirection: 'row',
+ justifyContent: 'space-between',
+ alignItems: 'center',
+ alignSelf: 'stretch',
+ borderBottomWidth: StyleSheet.hairlineWidth,
+ borderBottomColor: '#e4ecf0',
+ },
+ itemRightWithoutBorder: {
+ borderBottomWidth: 0,
+ },
+ rightContentText: {
+ flex: 1,
+ fontSize: 15,
+ color: '#2b3d54'
+ },
+ rightContent: {
+ flex: 1,
+ alignSelf: 'stretch',
+ },
+ rightRight: {
+ flex: 1,
+ flexDirection: 'row',
+ justifyContent: 'flex-end',
+ alignItems: 'center',
+ alignSelf: 'stretch',
+ },
+ rightExtraText: {
+ color: '#888',
+ fontSize: 16,
+ },
+ rightExtra: {},
+
+});
+
+export default List;
diff --git a/example/app/Touchable.js b/example/app/Touchable.js
new file mode 100644
index 0000000..468f25c
--- /dev/null
+++ b/example/app/Touchable.js
@@ -0,0 +1,28 @@
+/**
+ * Created by Jeepeng on 2017/3/3.
+ */
+
+import React from 'react';
+import {
+ Platform,
+ TouchableNativeFeedback,
+ TouchableHighlight,
+} from 'react-native';
+
+const Touchable = ({ onPress, children, style }) => {
+ const child = React.Children.only(children);
+ if (Platform.OS === 'android') {
+ return (
+
+ {child}
+
+ );
+ }
+ return (
+
+ {child}
+
+ );
+};
+
+export default Touchable;
diff --git a/example/app/index.js b/example/app/index.js
new file mode 100644
index 0000000..9e98a78
--- /dev/null
+++ b/example/app/index.js
@@ -0,0 +1,181 @@
+/**
+ * Sample React Native App
+ * https://github.com/facebook/react-native
+ * @flow
+ */
+
+import React, { Component } from 'react';
+import {
+ Platform,
+ StyleSheet,
+ Text,
+ View,
+ TouchableNativeFeedback,
+ TouchableHighlight
+} from 'react-native';
+import XGPush from 'react-native-xinge-push';
+
+const Touchable = Platform.OS === 'android' ? TouchableNativeFeedback : TouchableHighlight;
+
+class Example extends Component {
+
+ constructor() {
+ super();
+ this.state = {
+ isDebug: false
+ };
+ this._enableDebug = this._enableDebug.bind(this);
+ this._isEnableDebug = this._isEnableDebug.bind(this);
+
+ // 初始化推送
+ this.initPush();
+ }
+
+ async initPush() {
+ let accessId;
+ let accessKey;
+ if(Platform.OS === 'ios') {
+ accessId = 1111111111; // 请将1111111111修改为APP的AccessId,10位数字
+ accessKey = "YOUR_ACCESS_KEY"; // 请将YOUR_ACCESS_KEY修改为APP的AccessKey
+ } else {
+ accessId = 2222222222;
+ accessKey = "YOUR_ACCESS_KEY";
+ }
+ // 初始化
+ XGPush.init(accessId, accessKey);
+
+ // 注册
+ XGPush.register('jeepeng')
+ .then(result => {
+ // do something
+ // 或者在 onRegister 里处理,效果一样
+ })
+ .catch(err => {
+ console.log(err);
+ });
+ }
+
+ componentDidMount() {
+ XGPush.addEventListener('register', this._onRegister);
+ XGPush.addEventListener('message', this._onMessage);
+ XGPush.addEventListener('notification', this._onNotification);
+ }
+
+ componentWillUnmount() {
+ XGPush.removeEventListener('register', this._onRegister);
+ XGPush.removeEventListener('message', this._onMessage);
+ XGPush.removeEventListener('notification', this._onNotification);
+ }
+
+ /**
+ * 注册成功
+ * @param deviceToken
+ * @private
+ */
+ _onRegister(deviceToken) {
+ alert('onRegister: ' + deviceToken);
+ // 在ios中,register方法是向apns注册,如果要使用信鸽推送,得到deviceToken后还要向信鸽注册
+ XGPush.registerForXG(deviceToken);
+ }
+
+ /**
+ * 透传消息到达
+ * @param message
+ * @private
+ */
+ _onMessage(message) {
+ alert('收到透传消息: ' + message.content);
+ }
+
+ /**
+ * 通知到达
+ * @param notification
+ * @private
+ */
+ _onNotification(notification) {
+ alert(JSON.stringify(notification));
+ }
+
+ /**
+ * 获取初始通知(点击通知后)
+ * @private
+ */
+ _getInitialNotification() {
+ XGPush.getInitialNotification().then((result) => {
+ alert(JSON.stringify(result));
+ });
+ }
+
+ _enableDebug() {
+ XGPush.enableDebug(!this.state.isDebug);
+ }
+
+ _isEnableDebug() {
+ XGPush.isEnableDebug().then(result => {
+ this.setState({
+ isDebug: result
+ });
+ alert(result);
+ });
+ }
+
+ _setApplicationIconBadgeNumber(number = 0) {
+ XGPush.setApplicationIconBadgeNumber(number);
+ }
+
+ _getApplicationIconBadgeNumber() {
+ XGPush.getApplicationIconBadgeNumber((number) => alert(number));
+ }
+
+ render() {
+ return (
+
+
+
+ getInitialNotification
+
+
+ { this._enableDebug() }} underlayColor="#ddd">
+
+ enableDebug
+
+
+ { this._isEnableDebug() }} underlayColor="#ddd">
+
+ isEnableDebug
+
+
+ { this._setApplicationIconBadgeNumber(99) }} underlayColor="#ddd">
+
+ setApplicationIconBadgeNumber: 99
+
+
+ { this._getApplicationIconBadgeNumber() }} underlayColor="#ddd">
+
+ getApplicationIconBadgeNumber
+
+
+
+ );
+ }
+}
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ backgroundColor: '#fff',
+ },
+ list: {
+ marginTop: 15,
+ backgroundColor: '#fff',
+ },
+ item: {
+ height: 45,
+ alignItems: 'center',
+ justifyContent: 'center',
+ borderBottomWidth: StyleSheet.hairlineWidth,
+ borderBottomColor: '#efefef'
+ },
+});
+
+export default Example;
diff --git a/example/index.android.js b/example/index.android.js
new file mode 100644
index 0000000..b4fb496
--- /dev/null
+++ b/example/index.android.js
@@ -0,0 +1,12 @@
+/**
+ * Sample React Native App
+ * https://github.com/facebook/react-native
+ * @flow
+ */
+
+import React from 'react';
+import { AppRegistry } from 'react-native';
+
+import App from './app/index.js';
+
+AppRegistry.registerComponent('example', () => App);
diff --git a/example/index.ios.js b/example/index.ios.js
new file mode 100644
index 0000000..b4fb496
--- /dev/null
+++ b/example/index.ios.js
@@ -0,0 +1,12 @@
+/**
+ * Sample React Native App
+ * https://github.com/facebook/react-native
+ * @flow
+ */
+
+import React from 'react';
+import { AppRegistry } from 'react-native';
+
+import App from './app/index.js';
+
+AppRegistry.registerComponent('example', () => App);
diff --git a/example/ios/example-tvOS/Info.plist b/example/ios/example-tvOS/Info.plist
new file mode 100644
index 0000000..2fb6a11
--- /dev/null
+++ b/example/ios/example-tvOS/Info.plist
@@ -0,0 +1,54 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1
+ LSRequiresIPhoneOS
+
+ UILaunchStoryboardName
+ LaunchScreen
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UIViewControllerBasedStatusBarAppearance
+
+ NSLocationWhenInUseUsageDescription
+
+ NSAppTransportSecurity
+
+
+ NSExceptionDomains
+
+ localhost
+
+ NSExceptionAllowsInsecureHTTPLoads
+
+
+
+
+
+
diff --git a/example/ios/example-tvOSTests/Info.plist b/example/ios/example-tvOSTests/Info.plist
new file mode 100644
index 0000000..886825c
--- /dev/null
+++ b/example/ios/example-tvOSTests/Info.plist
@@ -0,0 +1,24 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1
+
+
diff --git a/example/ios/example.xcodeproj/project.pbxproj b/example/ios/example.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..077ba1e
--- /dev/null
+++ b/example/ios/example.xcodeproj/project.pbxproj
@@ -0,0 +1,1385 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; };
+ 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; };
+ 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; };
+ 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; };
+ 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; };
+ 00E356F31AD99517003FC87E /* exampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* exampleTests.m */; };
+ 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; };
+ 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; };
+ 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; };
+ 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
+ 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };
+ 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
+ 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
+ 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
+ 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
+ 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
+ 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
+ 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
+ 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */; };
+ 2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */; };
+ 2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */; };
+ 2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */; };
+ 2D02E4C61E0B4AEC006451C7 /* libRCTSettings-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */; };
+ 2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */; };
+ 2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */; };
+ 2D02E4C91E0B4AEC006451C7 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3EA31DF850E9000B6D8A /* libReact.a */; };
+ 2DCD954D1E0B4F2C00145EB5 /* exampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* exampleTests.m */; };
+ 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; };
+ 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
+ B45375BCB77A4645939B1E37 /* libXGPush.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 48BC8179268446D086625A27 /* libXGPush.a */; };
+ C5A799E81EBC708F003E0295 /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C5A799E71EBC708F003E0295 /* UserNotifications.framework */; };
+ C5A799FD1EBC7C41003E0295 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C5A799FC1EBC7C41003E0295 /* CoreTelephony.framework */; };
+ C5A799FF1EBC7C55003E0295 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C5A799FE1EBC7C55003E0295 /* SystemConfiguration.framework */; };
+ C5A79A011EBC7C9E003E0295 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = C5A79A001EBC7C9E003E0295 /* libz.tbd */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 134814201AA4EA6300B7C361;
+ remoteInfo = RCTActionSheet;
+ };
+ 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 134814201AA4EA6300B7C361;
+ remoteInfo = RCTGeolocation;
+ };
+ 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 58B5115D1A9E6B3D00147676;
+ remoteInfo = RCTImage;
+ };
+ 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 58B511DB1A9E6C8500147676;
+ remoteInfo = RCTNetwork;
+ };
+ 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 832C81801AAF6DEF007FA2F7;
+ remoteInfo = RCTVibration;
+ };
+ 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
+ remoteInfo = example;
+ };
+ 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 134814201AA4EA6300B7C361;
+ remoteInfo = RCTSettings;
+ };
+ 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 3C86DF461ADF2C930047B81A;
+ remoteInfo = RCTWebSocket;
+ };
+ 146834031AC3E56700842450 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192;
+ remoteInfo = React;
+ };
+ 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7;
+ remoteInfo = "example-tvOS";
+ };
+ 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 2D2A283A1D9B042B00D4039D;
+ remoteInfo = "RCTImage-tvOS";
+ };
+ 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 2D2A28471D9B043800D4039D;
+ remoteInfo = "RCTLinking-tvOS";
+ };
+ 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 2D2A28541D9B044C00D4039D;
+ remoteInfo = "RCTNetwork-tvOS";
+ };
+ 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 2D2A28611D9B046600D4039D;
+ remoteInfo = "RCTSettings-tvOS";
+ };
+ 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 2D2A287B1D9B048500D4039D;
+ remoteInfo = "RCTText-tvOS";
+ };
+ 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 2D2A28881D9B049200D4039D;
+ remoteInfo = "RCTWebSocket-tvOS";
+ };
+ 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 2D2A28131D9B038B00D4039D;
+ remoteInfo = "React-tvOS";
+ };
+ 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 3D3C059A1DE3340900C268FA;
+ remoteInfo = yoga;
+ };
+ 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 3D3C06751DE3340C00C268FA;
+ remoteInfo = "yoga-tvOS";
+ };
+ 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 3D3CD9251DE5FBEC00167DC4;
+ remoteInfo = cxxreact;
+ };
+ 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4;
+ remoteInfo = "cxxreact-tvOS";
+ };
+ 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 3D3CD90B1DE5FBD600167DC4;
+ remoteInfo = jschelpers;
+ };
+ 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 3D3CD9181DE5FBD800167DC4;
+ remoteInfo = "jschelpers-tvOS";
+ };
+ 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 134814201AA4EA6300B7C361;
+ remoteInfo = RCTAnimation;
+ };
+ 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 2D2A28201D9B03D100D4039D;
+ remoteInfo = "RCTAnimation-tvOS";
+ };
+ 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 134814201AA4EA6300B7C361;
+ remoteInfo = RCTLinking;
+ };
+ 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 58B5119B1A9E6C1200147676;
+ remoteInfo = RCTText;
+ };
+ C5A799C11EBACFF8003E0295 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 4BB8548E84EA4996950E828B /* XGPush.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = C50FF0241D54262A00CEF3D0;
+ remoteInfo = XGPush;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; };
+ 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; };
+ 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; };
+ 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; };
+ 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; };
+ 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = ""; };
+ 00E356EE1AD99517003FC87E /* exampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = exampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 00E356F21AD99517003FC87E /* exampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = exampleTests.m; sourceTree = ""; };
+ 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; };
+ 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; };
+ 13B07F961A680F5B00A75B9A /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = example/AppDelegate.h; sourceTree = ""; };
+ 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = example/AppDelegate.m; sourceTree = ""; };
+ 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; };
+ 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = example/Images.xcassets; sourceTree = ""; };
+ 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = example/Info.plist; sourceTree = ""; };
+ 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = example/main.m; sourceTree = ""; };
+ 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; };
+ 2D02E47B1E0B4A5D006451C7 /* example-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "example-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2D02E4901E0B4A5D006451C7 /* example-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "example-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 48BC8179268446D086625A27 /* libXGPush.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libXGPush.a; sourceTree = ""; };
+ 4BB8548E84EA4996950E828B /* XGPush.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = XGPush.xcodeproj; path = "../node_modules/react-native-xinge-push/ios/XGPush.xcodeproj"; sourceTree = ""; };
+ 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = ""; };
+ 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; };
+ 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; };
+ C5A799C31EBB2CDD003E0295 /* example.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = example.entitlements; path = example/example.entitlements; sourceTree = ""; };
+ C5A799E71EBC708F003E0295 /* UserNotifications.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UserNotifications.framework; path = System/Library/Frameworks/UserNotifications.framework; sourceTree = SDKROOT; };
+ C5A799FC1EBC7C41003E0295 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; };
+ C5A799FE1EBC7C55003E0295 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
+ C5A79A001EBC7C9E003E0295 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 00E356EB1AD99517003FC87E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ C5A79A011EBC7C9E003E0295 /* libz.tbd in Frameworks */,
+ C5A799FF1EBC7C55003E0295 /* SystemConfiguration.framework in Frameworks */,
+ C5A799FD1EBC7C41003E0295 /* CoreTelephony.framework in Frameworks */,
+ C5A799E81EBC708F003E0295 /* UserNotifications.framework in Frameworks */,
+ 146834051AC3E58100842450 /* libReact.a in Frameworks */,
+ 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */,
+ 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */,
+ 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */,
+ 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */,
+ 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */,
+ 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */,
+ 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */,
+ 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */,
+ 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */,
+ 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */,
+ B45375BCB77A4645939B1E37 /* libXGPush.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2D02E4781E0B4A5D006451C7 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2D02E4C91E0B4AEC006451C7 /* libReact.a in Frameworks */,
+ 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation.a in Frameworks */,
+ 2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */,
+ 2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */,
+ 2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */,
+ 2D02E4C61E0B4AEC006451C7 /* libRCTSettings-tvOS.a in Frameworks */,
+ 2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */,
+ 2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2D02E48D1E0B4A5D006451C7 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 00C302A81ABCB8CE00DB3ED1 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 00C302B61ABCB90400DB3ED1 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 00C302BC1ABCB91800DB3ED1 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */,
+ 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 00C302D41ABCB9D200DB3ED1 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */,
+ 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 00C302E01ABCB9EE00DB3ED1 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 00E356EF1AD99517003FC87E /* exampleTests */ = {
+ isa = PBXGroup;
+ children = (
+ 00E356F21AD99517003FC87E /* exampleTests.m */,
+ 00E356F01AD99517003FC87E /* Supporting Files */,
+ );
+ path = exampleTests;
+ sourceTree = "";
+ };
+ 00E356F01AD99517003FC87E /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ 00E356F11AD99517003FC87E /* Info.plist */,
+ );
+ name = "Supporting Files";
+ sourceTree = "";
+ };
+ 139105B71AF99BAD00B5F7CC /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */,
+ 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 139FDEE71B06529A00C62182 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */,
+ 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 13B07FAE1A68108700A75B9A /* example */ = {
+ isa = PBXGroup;
+ children = (
+ C5A799C31EBB2CDD003E0295 /* example.entitlements */,
+ 008F07F21AC5B25A0029DE68 /* main.jsbundle */,
+ 13B07FAF1A68108700A75B9A /* AppDelegate.h */,
+ 13B07FB01A68108700A75B9A /* AppDelegate.m */,
+ 13B07FB51A68108700A75B9A /* Images.xcassets */,
+ 13B07FB61A68108700A75B9A /* Info.plist */,
+ 13B07FB11A68108700A75B9A /* LaunchScreen.xib */,
+ 13B07FB71A68108700A75B9A /* main.m */,
+ );
+ name = example;
+ sourceTree = "";
+ };
+ 146834001AC3E56700842450 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 146834041AC3E56700842450 /* libReact.a */,
+ 3DAD3EA31DF850E9000B6D8A /* libReact.a */,
+ 3DAD3EA51DF850E9000B6D8A /* libyoga.a */,
+ 3DAD3EA71DF850E9000B6D8A /* libyoga.a */,
+ 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */,
+ 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */,
+ 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */,
+ 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 5E91572E1DD0AC6500FF2AA8 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */,
+ 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 78C398B11ACF4ADC00677621 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 78C398B91ACF4ADC00677621 /* libRCTLinking.a */,
+ 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 832341AE1AAA6A7D00B99B32 /* Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */,
+ 146833FF1AC3E56700842450 /* React.xcodeproj */,
+ 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */,
+ 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */,
+ 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */,
+ 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */,
+ 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */,
+ 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */,
+ 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */,
+ 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */,
+ 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */,
+ 4BB8548E84EA4996950E828B /* XGPush.xcodeproj */,
+ );
+ name = Libraries;
+ sourceTree = "";
+ };
+ 832341B11AAA6A8300B99B32 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 832341B51AAA6A8300B99B32 /* libRCTText.a */,
+ 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 83CBB9F61A601CBA00E9B192 = {
+ isa = PBXGroup;
+ children = (
+ 13B07FAE1A68108700A75B9A /* example */,
+ 832341AE1AAA6A7D00B99B32 /* Libraries */,
+ 00E356EF1AD99517003FC87E /* exampleTests */,
+ 83CBBA001A601CBA00E9B192 /* Products */,
+ C5A799E61EBC708F003E0295 /* Frameworks */,
+ );
+ indentWidth = 2;
+ sourceTree = "";
+ tabWidth = 2;
+ };
+ 83CBBA001A601CBA00E9B192 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 13B07F961A680F5B00A75B9A /* example.app */,
+ 00E356EE1AD99517003FC87E /* exampleTests.xctest */,
+ 2D02E47B1E0B4A5D006451C7 /* example-tvOS.app */,
+ 2D02E4901E0B4A5D006451C7 /* example-tvOSTests.xctest */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ C5A799A51EBACFF8003E0295 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ C5A799C21EBACFF8003E0295 /* libXGPush.a */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ C5A799E61EBC708F003E0295 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ C5A79A001EBC7C9E003E0295 /* libz.tbd */,
+ C5A799FE1EBC7C55003E0295 /* SystemConfiguration.framework */,
+ C5A799FC1EBC7C41003E0295 /* CoreTelephony.framework */,
+ C5A799E71EBC708F003E0295 /* UserNotifications.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 00E356ED1AD99517003FC87E /* exampleTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "exampleTests" */;
+ buildPhases = (
+ 00E356EA1AD99517003FC87E /* Sources */,
+ 00E356EB1AD99517003FC87E /* Frameworks */,
+ 00E356EC1AD99517003FC87E /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 00E356F51AD99517003FC87E /* PBXTargetDependency */,
+ );
+ name = exampleTests;
+ productName = exampleTests;
+ productReference = 00E356EE1AD99517003FC87E /* exampleTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ 13B07F861A680F5B00A75B9A /* example */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "example" */;
+ buildPhases = (
+ 13B07F871A680F5B00A75B9A /* Sources */,
+ 13B07F8C1A680F5B00A75B9A /* Frameworks */,
+ 13B07F8E1A680F5B00A75B9A /* Resources */,
+ 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = example;
+ productName = "Hello World";
+ productReference = 13B07F961A680F5B00A75B9A /* example.app */;
+ productType = "com.apple.product-type.application";
+ };
+ 2D02E47A1E0B4A5D006451C7 /* example-tvOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "example-tvOS" */;
+ buildPhases = (
+ 2D02E4771E0B4A5D006451C7 /* Sources */,
+ 2D02E4781E0B4A5D006451C7 /* Frameworks */,
+ 2D02E4791E0B4A5D006451C7 /* Resources */,
+ 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "example-tvOS";
+ productName = "example-tvOS";
+ productReference = 2D02E47B1E0B4A5D006451C7 /* example-tvOS.app */;
+ productType = "com.apple.product-type.application";
+ };
+ 2D02E48F1E0B4A5D006451C7 /* example-tvOSTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "example-tvOSTests" */;
+ buildPhases = (
+ 2D02E48C1E0B4A5D006451C7 /* Sources */,
+ 2D02E48D1E0B4A5D006451C7 /* Frameworks */,
+ 2D02E48E1E0B4A5D006451C7 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */,
+ );
+ name = "example-tvOSTests";
+ productName = "example-tvOSTests";
+ productReference = 2D02E4901E0B4A5D006451C7 /* example-tvOSTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 83CBB9F71A601CBA00E9B192 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0830;
+ ORGANIZATIONNAME = Facebook;
+ TargetAttributes = {
+ 00E356ED1AD99517003FC87E = {
+ CreatedOnToolsVersion = 6.2;
+ DevelopmentTeam = UP3K29WXYN;
+ TestTargetID = 13B07F861A680F5B00A75B9A;
+ };
+ 13B07F861A680F5B00A75B9A = {
+ DevelopmentTeam = UP3K29WXYN;
+ SystemCapabilities = {
+ com.apple.BackgroundModes = {
+ enabled = 1;
+ };
+ com.apple.Push = {
+ enabled = 1;
+ };
+ };
+ };
+ 2D02E47A1E0B4A5D006451C7 = {
+ CreatedOnToolsVersion = 8.2.1;
+ ProvisioningStyle = Automatic;
+ };
+ 2D02E48F1E0B4A5D006451C7 = {
+ CreatedOnToolsVersion = 8.2.1;
+ ProvisioningStyle = Automatic;
+ TestTargetID = 2D02E47A1E0B4A5D006451C7;
+ };
+ };
+ };
+ buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "example" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 83CBB9F61A601CBA00E9B192;
+ productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
+ projectDirPath = "";
+ projectReferences = (
+ {
+ ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */;
+ ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;
+ },
+ {
+ ProductGroup = 5E91572E1DD0AC6500FF2AA8 /* Products */;
+ ProjectRef = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
+ },
+ {
+ ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */;
+ ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;
+ },
+ {
+ ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */;
+ ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
+ },
+ {
+ ProductGroup = 78C398B11ACF4ADC00677621 /* Products */;
+ ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
+ },
+ {
+ ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */;
+ ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
+ },
+ {
+ ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */;
+ ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
+ },
+ {
+ ProductGroup = 832341B11AAA6A8300B99B32 /* Products */;
+ ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
+ },
+ {
+ ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */;
+ ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */;
+ },
+ {
+ ProductGroup = 139FDEE71B06529A00C62182 /* Products */;
+ ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
+ },
+ {
+ ProductGroup = 146834001AC3E56700842450 /* Products */;
+ ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */;
+ },
+ {
+ ProductGroup = C5A799A51EBACFF8003E0295 /* Products */;
+ ProjectRef = 4BB8548E84EA4996950E828B /* XGPush.xcodeproj */;
+ },
+ );
+ projectRoot = "";
+ targets = (
+ 13B07F861A680F5B00A75B9A /* example */,
+ 00E356ED1AD99517003FC87E /* exampleTests */,
+ 2D02E47A1E0B4A5D006451C7 /* example-tvOS */,
+ 2D02E48F1E0B4A5D006451C7 /* example-tvOSTests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXReferenceProxy section */
+ 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libRCTActionSheet.a;
+ remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libRCTGeolocation.a;
+ remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libRCTImage.a;
+ remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libRCTNetwork.a;
+ remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libRCTVibration.a;
+ remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libRCTSettings.a;
+ remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libRCTWebSocket.a;
+ remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 146834041AC3E56700842450 /* libReact.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libReact.a;
+ remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = "libRCTImage-tvOS.a";
+ remoteRef = 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = "libRCTLinking-tvOS.a";
+ remoteRef = 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = "libRCTNetwork-tvOS.a";
+ remoteRef = 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = "libRCTSettings-tvOS.a";
+ remoteRef = 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = "libRCTText-tvOS.a";
+ remoteRef = 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = "libRCTWebSocket-tvOS.a";
+ remoteRef = 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 3DAD3EA31DF850E9000B6D8A /* libReact.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libReact.a;
+ remoteRef = 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 3DAD3EA51DF850E9000B6D8A /* libyoga.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libyoga.a;
+ remoteRef = 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 3DAD3EA71DF850E9000B6D8A /* libyoga.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libyoga.a;
+ remoteRef = 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libcxxreact.a;
+ remoteRef = 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libcxxreact.a;
+ remoteRef = 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libjschelpers.a;
+ remoteRef = 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libjschelpers.a;
+ remoteRef = 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libRCTAnimation.a;
+ remoteRef = 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libRCTAnimation.a;
+ remoteRef = 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libRCTLinking.a;
+ remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 832341B51AAA6A8300B99B32 /* libRCTText.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libRCTText.a;
+ remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ C5A799C21EBACFF8003E0295 /* libXGPush.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libXGPush.a;
+ remoteRef = C5A799C11EBACFF8003E0295 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+/* End PBXReferenceProxy section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 00E356EC1AD99517003FC87E /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 13B07F8E1A680F5B00A75B9A /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
+ 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2D02E4791E0B4A5D006451C7 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2D02E48E1E0B4A5D006451C7 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Bundle React Native code and images";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "export NODE_BINARY=node\n../node_modules/react-native/packager/react-native-xcode.sh";
+ };
+ 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Bundle React Native Code And Images";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "export NODE_BINARY=node\n../node_modules/react-native/packager/react-native-xcode.sh";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 00E356EA1AD99517003FC87E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 00E356F31AD99517003FC87E /* exampleTests.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 13B07F871A680F5B00A75B9A /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
+ 13B07FC11A68108700A75B9A /* main.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2D02E4771E0B4A5D006451C7 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */,
+ 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2D02E48C1E0B4A5D006451C7 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2DCD954D1E0B4F2C00145EB5 /* exampleTests.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 13B07F861A680F5B00A75B9A /* example */;
+ targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
+ };
+ 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 2D02E47A1E0B4A5D006451C7 /* example-tvOS */;
+ targetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+ 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 13B07FB21A68108700A75B9A /* Base */,
+ );
+ name = LaunchScreen.xib;
+ path = example;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 00E356F61AD99517003FC87E /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ DEVELOPMENT_TEAM = UP3K29WXYN;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../node_modules/react-native-xinge-push/ios/**",
+ );
+ INFOPLIST_FILE = exampleTests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/$(TARGET_NAME)\"",
+ );
+ OTHER_LDFLAGS = (
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/example";
+ };
+ name = Debug;
+ };
+ 00E356F71AD99517003FC87E /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ COPY_PHASE_STRIP = NO;
+ DEVELOPMENT_TEAM = UP3K29WXYN;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../node_modules/react-native-xinge-push/ios/**",
+ );
+ INFOPLIST_FILE = exampleTests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/$(TARGET_NAME)\"",
+ );
+ OTHER_LDFLAGS = (
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/example";
+ };
+ name = Release;
+ };
+ 13B07F941A680F5B00A75B9A /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_ENTITLEMENTS = example/example.entitlements;
+ CURRENT_PROJECT_VERSION = 1;
+ DEAD_CODE_STRIPPING = NO;
+ DEVELOPMENT_TEAM = UP3K29WXYN;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../node_modules/react-native-xinge-push/ios/**",
+ );
+ INFOPLIST_FILE = example/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.jeepeng.push;
+ PRODUCT_NAME = example;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Debug;
+ };
+ 13B07F951A680F5B00A75B9A /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_ENTITLEMENTS = example/example.entitlements;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = UP3K29WXYN;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../node_modules/react-native-xinge-push/ios/**",
+ );
+ INFOPLIST_FILE = example/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.jeepeng.push;
+ PRODUCT_NAME = example;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Release;
+ };
+ 2D02E4971E0B4A5E006451C7 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_TESTABILITY = YES;
+ GCC_NO_COMMON_BLOCKS = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../node_modules/react-native-xinge-push/ios/**",
+ );
+ INFOPLIST_FILE = "example-tvOS/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/$(TARGET_NAME)\"",
+ );
+ OTHER_LDFLAGS = (
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.example-tvOS";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = appletvos;
+ TARGETED_DEVICE_FAMILY = 3;
+ TVOS_DEPLOYMENT_TARGET = 9.2;
+ };
+ name = Debug;
+ };
+ 2D02E4981E0B4A5E006451C7 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_NO_COMMON_BLOCKS = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../node_modules/react-native-xinge-push/ios/**",
+ );
+ INFOPLIST_FILE = "example-tvOS/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/$(TARGET_NAME)\"",
+ );
+ OTHER_LDFLAGS = (
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.example-tvOS";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = appletvos;
+ TARGETED_DEVICE_FAMILY = 3;
+ TVOS_DEPLOYMENT_TARGET = 9.2;
+ };
+ name = Release;
+ };
+ 2D02E4991E0B4A5E006451C7 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_TESTABILITY = YES;
+ GCC_NO_COMMON_BLOCKS = YES;
+ INFOPLIST_FILE = "example-tvOSTests/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/$(TARGET_NAME)\"",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.example-tvOSTests";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = appletvos;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example-tvOS.app/example-tvOS";
+ TVOS_DEPLOYMENT_TARGET = 10.1;
+ };
+ name = Debug;
+ };
+ 2D02E49A1E0B4A5E006451C7 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_NO_COMMON_BLOCKS = YES;
+ INFOPLIST_FILE = "example-tvOSTests/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/$(TARGET_NAME)\"",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.example-tvOSTests";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = appletvos;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example-tvOS.app/example-tvOS";
+ TVOS_DEPLOYMENT_TARGET = 10.1;
+ };
+ name = Release;
+ };
+ 83CBBA201A601CBA00E9B192 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ };
+ name = Debug;
+ };
+ 83CBBA211A601CBA00E9B192 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = YES;
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "exampleTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 00E356F61AD99517003FC87E /* Debug */,
+ 00E356F71AD99517003FC87E /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "example" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 13B07F941A680F5B00A75B9A /* Debug */,
+ 13B07F951A680F5B00A75B9A /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "example-tvOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2D02E4971E0B4A5E006451C7 /* Debug */,
+ 2D02E4981E0B4A5E006451C7 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "example-tvOSTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2D02E4991E0B4A5E006451C7 /* Debug */,
+ 2D02E49A1E0B4A5E006451C7 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "example" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 83CBBA201A601CBA00E9B192 /* Debug */,
+ 83CBBA211A601CBA00E9B192 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
+}
diff --git a/example/ios/example.xcodeproj/xcshareddata/xcschemes/example-tvOS.xcscheme b/example/ios/example.xcodeproj/xcshareddata/xcschemes/example-tvOS.xcscheme
new file mode 100644
index 0000000..c6c843e
--- /dev/null
+++ b/example/ios/example.xcodeproj/xcshareddata/xcschemes/example-tvOS.xcscheme
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/example/ios/example.xcodeproj/xcshareddata/xcschemes/example.xcscheme b/example/ios/example.xcodeproj/xcshareddata/xcschemes/example.xcscheme
new file mode 100644
index 0000000..c13a4bf
--- /dev/null
+++ b/example/ios/example.xcodeproj/xcshareddata/xcschemes/example.xcscheme
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/example/ios/example/AppDelegate.h b/example/ios/example/AppDelegate.h
new file mode 100644
index 0000000..a9654d5
--- /dev/null
+++ b/example/ios/example/AppDelegate.h
@@ -0,0 +1,16 @@
+/**
+ * Copyright (c) 2015-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+#import
+
+@interface AppDelegate : UIResponder
+
+@property (nonatomic, strong) UIWindow *window;
+
+@end
diff --git a/example/ios/example/AppDelegate.m b/example/ios/example/AppDelegate.m
new file mode 100644
index 0000000..e844ebd
--- /dev/null
+++ b/example/ios/example/AppDelegate.m
@@ -0,0 +1,88 @@
+/**
+ * Copyright (c) 2015-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+#import "AppDelegate.h"
+
+#import
+#import
+#import
+
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
+
+#import
+@interface AppDelegate()
+@end
+#endif
+
+@interface AppDelegate ()
+
+@end
+
+@implementation AppDelegate
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+ NSURL *jsCodeLocation;
+
+ jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
+
+ RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
+ moduleName:@"example"
+ initialProperties:nil
+ launchOptions:launchOptions];
+ rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
+
+ self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
+ UIViewController *rootViewController = [UIViewController new];
+ rootViewController.view = rootView;
+ self.window.rootViewController = rootViewController;
+ [self.window makeKeyAndVisible];
+ // 统计从推送打开的设备
+ [XGPushManager handleLaunching:launchOptions successCallback:^{
+ NSLog(@"[XGPush] Handle launching success");
+ } errorCallback:^{
+ NSLog(@"[XGPush] Handle launching error");
+ }];
+ return YES;
+}
+
+// Required to register for notifications
+- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
+{
+ [XGPushManager didRegisterUserNotificationSettings:notificationSettings];
+}
+// Required for the register event.
+- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
+{
+ [XGPushManager didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
+}
+// Required for the notification event. You must call the completion handler after handling the remote notification.
+- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
+fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
+{
+ [XGPushManager didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
+ // 统计收到推送的设备
+ [XGPushManager handleReceiveNotification:userInfo successCallback:^{
+ NSLog(@"[XGPush] Handle receive success");
+ } errorCallback:^{
+ NSLog(@"[XGPush] Handle receive error");
+ }];
+}
+// Required for the registrationError event.
+- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
+{
+ [XGPushManager didFailToRegisterForRemoteNotificationsWithError:error];
+}
+// Required for the localNotification event.
+- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
+{
+ [XGPushManager didReceiveLocalNotification:notification];
+}
+
+@end
diff --git a/example/ios/example/Base.lproj/LaunchScreen.xib b/example/ios/example/Base.lproj/LaunchScreen.xib
new file mode 100644
index 0000000..9e04807
--- /dev/null
+++ b/example/ios/example/Base.lproj/LaunchScreen.xib
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/example/ios/example/Images.xcassets/AppIcon.appiconset/Contents.json b/example/ios/example/Images.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..b8236c6
--- /dev/null
+++ b/example/ios/example/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,48 @@
+{
+ "images" : [
+ {
+ "idiom" : "iphone",
+ "size" : "20x20",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "20x20",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/example/ios/example/Info.plist b/example/ios/example/Info.plist
new file mode 100644
index 0000000..93ca8cd
--- /dev/null
+++ b/example/ios/example/Info.plist
@@ -0,0 +1,59 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleDisplayName
+ example
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1
+ LSRequiresIPhoneOS
+
+ NSAppTransportSecurity
+
+ NSExceptionDomains
+
+ localhost
+
+ NSExceptionAllowsInsecureHTTPLoads
+
+
+
+
+ NSLocationWhenInUseUsageDescription
+
+ UIBackgroundModes
+
+ remote-notification
+
+ UILaunchStoryboardName
+ LaunchScreen
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UIViewControllerBasedStatusBarAppearance
+
+
+
diff --git a/example/ios/example/example.entitlements b/example/ios/example/example.entitlements
new file mode 100644
index 0000000..903def2
--- /dev/null
+++ b/example/ios/example/example.entitlements
@@ -0,0 +1,8 @@
+
+
+
+
+ aps-environment
+ development
+
+
diff --git a/example/ios/example/main.m b/example/ios/example/main.m
new file mode 100644
index 0000000..3d767fc
--- /dev/null
+++ b/example/ios/example/main.m
@@ -0,0 +1,18 @@
+/**
+ * Copyright (c) 2015-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+#import
+
+#import "AppDelegate.h"
+
+int main(int argc, char * argv[]) {
+ @autoreleasepool {
+ return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+ }
+}
diff --git a/example/ios/exampleTests/Info.plist b/example/ios/exampleTests/Info.plist
new file mode 100644
index 0000000..ba72822
--- /dev/null
+++ b/example/ios/exampleTests/Info.plist
@@ -0,0 +1,24 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1
+
+
diff --git a/example/ios/exampleTests/exampleTests.m b/example/ios/exampleTests/exampleTests.m
new file mode 100644
index 0000000..fd24cf9
--- /dev/null
+++ b/example/ios/exampleTests/exampleTests.m
@@ -0,0 +1,70 @@
+/**
+ * Copyright (c) 2015-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+#import
+#import
+
+#import
+#import
+
+#define TIMEOUT_SECONDS 600
+#define TEXT_TO_LOOK_FOR @"Welcome to React Native!"
+
+@interface exampleTests : XCTestCase
+
+@end
+
+@implementation exampleTests
+
+- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test
+{
+ if (test(view)) {
+ return YES;
+ }
+ for (UIView *subview in [view subviews]) {
+ if ([self findSubviewInView:subview matching:test]) {
+ return YES;
+ }
+ }
+ return NO;
+}
+
+- (void)testRendersWelcomeScreen
+{
+ UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController];
+ NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS];
+ BOOL foundElement = NO;
+
+ __block NSString *redboxError = nil;
+ RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
+ if (level >= RCTLogLevelError) {
+ redboxError = message;
+ }
+ });
+
+ while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {
+ [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
+ [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
+
+ foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) {
+ if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
+ return YES;
+ }
+ return NO;
+ }];
+ }
+
+ RCTSetLogFunction(RCTDefaultLogFunction);
+
+ XCTAssertNil(redboxError, @"RedBox error: %@", redboxError);
+ XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
+}
+
+
+@end
diff --git a/example/package-lock.json b/example/package-lock.json
new file mode 100644
index 0000000..a4a7d99
--- /dev/null
+++ b/example/package-lock.json
@@ -0,0 +1,2878 @@
+{
+ "name": "example",
+ "version": "0.0.1",
+ "lockfileVersion": 1,
+ "dependencies": {
+ "abab": {
+ "version": "https://registry.cnpmjs.org/abab/download/abab-1.0.3.tgz",
+ "integrity": "sha1-uB3l9ydOxOdW15fNg08wNkJyTl0=",
+ "dev": true
+ },
+ "absolute-path": {
+ "version": "https://registry.cnpmjs.org/absolute-path/download/absolute-path-0.0.0.tgz",
+ "integrity": "sha1-p4di+9rftSl76ZsV01p4Wy8JW/c="
+ },
+ "accepts": {
+ "version": "https://registry.cnpmjs.org/accepts/download/accepts-1.2.13.tgz",
+ "integrity": "sha1-5fHzkoxtlf2WVYw27D2dDeSm7Oo="
+ },
+ "acorn": {
+ "version": "https://registry.npmjs.org/acorn/-/acorn-4.0.11.tgz",
+ "integrity": "sha1-7c2jvZN+dVZBDULtWGD2c5nHlMA=",
+ "dev": true
+ },
+ "acorn-globals": {
+ "version": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz",
+ "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=",
+ "dev": true
+ },
+ "ajv": {
+ "version": "https://r.cnpmjs.org/ajv/download/ajv-4.11.8.tgz",
+ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY="
+ },
+ "align-text": {
+ "version": "https://registry.cnpmjs.org/align-text/download/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc="
+ },
+ "amdefine": {
+ "version": "https://r.cnpmjs.org/amdefine/download/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true
+ },
+ "ansi": {
+ "version": "https://registry.cnpmjs.org/ansi/download/ansi-0.3.1.tgz",
+ "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE="
+ },
+ "ansi-escapes": {
+ "version": "https://registry.cnpmjs.org/ansi-escapes/download/ansi-escapes-1.4.0.tgz",
+ "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4="
+ },
+ "ansi-regex": {
+ "version": "https://r.cnpmjs.org/ansi-regex/download/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "anymatch": {
+ "version": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz",
+ "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc="
+ },
+ "append-transform": {
+ "version": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz",
+ "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=",
+ "dev": true
+ },
+ "are-we-there-yet": {
+ "version": "https://r.cnpmjs.org/are-we-there-yet/download/are-we-there-yet-1.1.4.tgz",
+ "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0="
+ },
+ "argparse": {
+ "version": "https://registry.cnpmjs.org/argparse/download/argparse-1.0.9.tgz",
+ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
+ "dev": true
+ },
+ "arr-diff": {
+ "version": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8="
+ },
+ "arr-flatten": {
+ "version": "https://r.cnpmjs.org/arr-flatten/download/arr-flatten-1.0.3.tgz",
+ "integrity": "sha1-onTthawIhJtr14R8RYB0XcUa37E="
+ },
+ "array-differ": {
+ "version": "https://registry.cnpmjs.org/array-differ/download/array-differ-1.0.0.tgz",
+ "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE="
+ },
+ "array-equal": {
+ "version": "https://registry.cnpmjs.org/array-equal/download/array-equal-1.0.0.tgz",
+ "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
+ "dev": true
+ },
+ "array-filter": {
+ "version": "https://r.cnpmjs.org/array-filter/download/array-filter-0.0.1.tgz",
+ "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw="
+ },
+ "array-map": {
+ "version": "https://r.cnpmjs.org/array-map/download/array-map-0.0.0.tgz",
+ "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI="
+ },
+ "array-reduce": {
+ "version": "https://r.cnpmjs.org/array-reduce/download/array-reduce-0.0.0.tgz",
+ "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys="
+ },
+ "array-uniq": {
+ "version": "https://registry.cnpmjs.org/array-uniq/download/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
+ },
+ "array-unique": {
+ "version": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM="
+ },
+ "arrify": {
+ "version": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0="
+ },
+ "art": {
+ "version": "https://registry.cnpmjs.org/art/download/art-0.10.1.tgz",
+ "integrity": "sha1-OFQYg+OZIlxeGT/yRujxV897IUY="
+ },
+ "asap": {
+ "version": "https://registry.cnpmjs.org/asap/download/asap-2.0.5.tgz",
+ "integrity": "sha1-UidltQw1EEkOUtfc/ghe+bqWlY8="
+ },
+ "asn1": {
+ "version": "https://registry.cnpmjs.org/asn1/download/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
+ },
+ "assert-plus": {
+ "version": "https://registry.cnpmjs.org/assert-plus/download/assert-plus-0.2.0.tgz",
+ "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ="
+ },
+ "async": {
+ "version": "https://r.cnpmjs.org/async/download/async-2.4.0.tgz",
+ "integrity": "sha1-SZAgDxjqW4N8LMT4wDGmmFw4VhE="
+ },
+ "asynckit": {
+ "version": "https://registry.cnpmjs.org/asynckit/download/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ },
+ "aws-sign2": {
+ "version": "https://registry.cnpmjs.org/aws-sign2/download/aws-sign2-0.6.0.tgz",
+ "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8="
+ },
+ "aws4": {
+ "version": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
+ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4="
+ },
+ "babel-code-frame": {
+ "version": "https://r.cnpmjs.org/babel-code-frame/download/babel-code-frame-6.22.0.tgz",
+ "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ="
+ },
+ "babel-core": {
+ "version": "https://r.cnpmjs.org/babel-core/download/babel-core-6.24.1.tgz",
+ "integrity": "sha1-jEKFZNzh4fQfszfsNPTDsCK1rYM=",
+ "dependencies": {
+ "json5": {
+ "version": "https://r.cnpmjs.org/json5/download/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
+ }
+ }
+ },
+ "babel-generator": {
+ "version": "https://r.cnpmjs.org/babel-generator/download/babel-generator-6.24.1.tgz",
+ "integrity": "sha1-5xX0hsWN7SVknYiJRNUqoHxdlJc="
+ },
+ "babel-helper-builder-react-jsx": {
+ "version": "https://r.cnpmjs.org/babel-helper-builder-react-jsx/download/babel-helper-builder-react-jsx-6.24.1.tgz",
+ "integrity": "sha1-CteRfjPI11HmRtrKTnfMGTd9LLw="
+ },
+ "babel-helper-call-delegate": {
+ "version": "https://r.cnpmjs.org/babel-helper-call-delegate/download/babel-helper-call-delegate-6.24.1.tgz",
+ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340="
+ },
+ "babel-helper-define-map": {
+ "version": "https://r.cnpmjs.org/babel-helper-define-map/download/babel-helper-define-map-6.24.1.tgz",
+ "integrity": "sha1-epdH8ljYlH0y1RX2qhx70CIEoIA="
+ },
+ "babel-helper-function-name": {
+ "version": "https://r.cnpmjs.org/babel-helper-function-name/download/babel-helper-function-name-6.24.1.tgz",
+ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk="
+ },
+ "babel-helper-get-function-arity": {
+ "version": "https://r.cnpmjs.org/babel-helper-get-function-arity/download/babel-helper-get-function-arity-6.24.1.tgz",
+ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0="
+ },
+ "babel-helper-hoist-variables": {
+ "version": "https://r.cnpmjs.org/babel-helper-hoist-variables/download/babel-helper-hoist-variables-6.24.1.tgz",
+ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY="
+ },
+ "babel-helper-optimise-call-expression": {
+ "version": "https://r.cnpmjs.org/babel-helper-optimise-call-expression/download/babel-helper-optimise-call-expression-6.24.1.tgz",
+ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc="
+ },
+ "babel-helper-regex": {
+ "version": "https://r.cnpmjs.org/babel-helper-regex/download/babel-helper-regex-6.24.1.tgz",
+ "integrity": "sha1-024i+rEAjXnYhkjjIRaGgShFbOg="
+ },
+ "babel-helper-remap-async-to-generator": {
+ "version": "https://r.cnpmjs.org/babel-helper-remap-async-to-generator/download/babel-helper-remap-async-to-generator-6.24.1.tgz",
+ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs="
+ },
+ "babel-helper-replace-supers": {
+ "version": "https://r.cnpmjs.org/babel-helper-replace-supers/download/babel-helper-replace-supers-6.24.1.tgz",
+ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo="
+ },
+ "babel-helpers": {
+ "version": "https://r.cnpmjs.org/babel-helpers/download/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI="
+ },
+ "babel-jest": {
+ "version": "https://r.cnpmjs.org/babel-jest/download/babel-jest-19.0.0.tgz",
+ "integrity": "sha1-WTI87ZmjqE01naIZyogQdP/Gzj8=",
+ "dev": true
+ },
+ "babel-messages": {
+ "version": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4="
+ },
+ "babel-plugin-check-es2015-constants": {
+ "version": "https://r.cnpmjs.org/babel-plugin-check-es2015-constants/download/babel-plugin-check-es2015-constants-6.22.0.tgz",
+ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o="
+ },
+ "babel-plugin-external-helpers": {
+ "version": "https://r.cnpmjs.org/babel-plugin-external-helpers/download/babel-plugin-external-helpers-6.22.0.tgz",
+ "integrity": "sha1-IoX0iwK9Xe3oUXXK+MYuhq3M76E="
+ },
+ "babel-plugin-istanbul": {
+ "version": "https://r.cnpmjs.org/babel-plugin-istanbul/download/babel-plugin-istanbul-4.1.3.tgz",
+ "integrity": "sha1-buYoBBDc9Zx3R1GMPf2YaAlY8QI=",
+ "dev": true,
+ "dependencies": {
+ "find-up": {
+ "version": "https://r.cnpmjs.org/find-up/download/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-jest-hoist": {
+ "version": "https://r.cnpmjs.org/babel-plugin-jest-hoist/download/babel-plugin-jest-hoist-19.0.0.tgz",
+ "integrity": "sha1-SuKgTqYSpuc2UfP95SwXiZEwS+o=",
+ "dev": true
+ },
+ "babel-plugin-react-transform": {
+ "version": "https://registry.cnpmjs.org/babel-plugin-react-transform/download/babel-plugin-react-transform-2.0.2.tgz",
+ "integrity": "sha1-UVu/qZaJOYEULZCx+bFjXeKZUQk="
+ },
+ "babel-plugin-syntax-async-functions": {
+ "version": "https://registry.cnpmjs.org/babel-plugin-syntax-async-functions/download/babel-plugin-syntax-async-functions-6.13.0.tgz",
+ "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU="
+ },
+ "babel-plugin-syntax-class-properties": {
+ "version": "https://registry.cnpmjs.org/babel-plugin-syntax-class-properties/download/babel-plugin-syntax-class-properties-6.13.0.tgz",
+ "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94="
+ },
+ "babel-plugin-syntax-flow": {
+ "version": "https://registry.cnpmjs.org/babel-plugin-syntax-flow/download/babel-plugin-syntax-flow-6.18.0.tgz",
+ "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0="
+ },
+ "babel-plugin-syntax-jsx": {
+ "version": "https://registry.cnpmjs.org/babel-plugin-syntax-jsx/download/babel-plugin-syntax-jsx-6.18.0.tgz",
+ "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY="
+ },
+ "babel-plugin-syntax-object-rest-spread": {
+ "version": "https://registry.cnpmjs.org/babel-plugin-syntax-object-rest-spread/download/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
+ "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U="
+ },
+ "babel-plugin-syntax-trailing-function-commas": {
+ "version": "https://r.cnpmjs.org/babel-plugin-syntax-trailing-function-commas/download/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz",
+ "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM="
+ },
+ "babel-plugin-transform-async-to-generator": {
+ "version": "https://registry.cnpmjs.org/babel-plugin-transform-async-to-generator/download/babel-plugin-transform-async-to-generator-6.16.0.tgz",
+ "integrity": "sha1-Gew2yxSGtZ+fRorfpCzhOQjKKZk="
+ },
+ "babel-plugin-transform-class-properties": {
+ "version": "https://r.cnpmjs.org/babel-plugin-transform-class-properties/download/babel-plugin-transform-class-properties-6.24.1.tgz",
+ "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw="
+ },
+ "babel-plugin-transform-es2015-arrow-functions": {
+ "version": "https://r.cnpmjs.org/babel-plugin-transform-es2015-arrow-functions/download/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE="
+ },
+ "babel-plugin-transform-es2015-block-scoped-functions": {
+ "version": "https://r.cnpmjs.org/babel-plugin-transform-es2015-block-scoped-functions/download/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
+ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE="
+ },
+ "babel-plugin-transform-es2015-block-scoping": {
+ "version": "https://r.cnpmjs.org/babel-plugin-transform-es2015-block-scoping/download/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz",
+ "integrity": "sha1-dsKV3DpHQbFmWt/TFnIV3P8ypXY="
+ },
+ "babel-plugin-transform-es2015-classes": {
+ "version": "https://r.cnpmjs.org/babel-plugin-transform-es2015-classes/download/babel-plugin-transform-es2015-classes-6.24.1.tgz",
+ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs="
+ },
+ "babel-plugin-transform-es2015-computed-properties": {
+ "version": "https://r.cnpmjs.org/babel-plugin-transform-es2015-computed-properties/download/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
+ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM="
+ },
+ "babel-plugin-transform-es2015-destructuring": {
+ "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
+ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0="
+ },
+ "babel-plugin-transform-es2015-for-of": {
+ "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
+ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE="
+ },
+ "babel-plugin-transform-es2015-function-name": {
+ "version": "https://r.cnpmjs.org/babel-plugin-transform-es2015-function-name/download/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
+ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos="
+ },
+ "babel-plugin-transform-es2015-literals": {
+ "version": "https://r.cnpmjs.org/babel-plugin-transform-es2015-literals/download/babel-plugin-transform-es2015-literals-6.22.0.tgz",
+ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4="
+ },
+ "babel-plugin-transform-es2015-modules-commonjs": {
+ "version": "https://r.cnpmjs.org/babel-plugin-transform-es2015-modules-commonjs/download/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz",
+ "integrity": "sha1-0+MQtA72ZKNmIiAAl8bUQCmPK/4="
+ },
+ "babel-plugin-transform-es2015-object-super": {
+ "version": "https://r.cnpmjs.org/babel-plugin-transform-es2015-object-super/download/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
+ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40="
+ },
+ "babel-plugin-transform-es2015-parameters": {
+ "version": "https://r.cnpmjs.org/babel-plugin-transform-es2015-parameters/download/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
+ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys="
+ },
+ "babel-plugin-transform-es2015-shorthand-properties": {
+ "version": "https://r.cnpmjs.org/babel-plugin-transform-es2015-shorthand-properties/download/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
+ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA="
+ },
+ "babel-plugin-transform-es2015-spread": {
+ "version": "https://r.cnpmjs.org/babel-plugin-transform-es2015-spread/download/babel-plugin-transform-es2015-spread-6.22.0.tgz",
+ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE="
+ },
+ "babel-plugin-transform-es2015-sticky-regex": {
+ "version": "https://r.cnpmjs.org/babel-plugin-transform-es2015-sticky-regex/download/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
+ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw="
+ },
+ "babel-plugin-transform-es2015-template-literals": {
+ "version": "https://r.cnpmjs.org/babel-plugin-transform-es2015-template-literals/download/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
+ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0="
+ },
+ "babel-plugin-transform-es2015-unicode-regex": {
+ "version": "https://r.cnpmjs.org/babel-plugin-transform-es2015-unicode-regex/download/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
+ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek="
+ },
+ "babel-plugin-transform-es3-member-expression-literals": {
+ "version": "https://r.cnpmjs.org/babel-plugin-transform-es3-member-expression-literals/download/babel-plugin-transform-es3-member-expression-literals-6.22.0.tgz",
+ "integrity": "sha1-cz00RPPsxBvvjtGmpOCWV7iWnrs="
+ },
+ "babel-plugin-transform-es3-property-literals": {
+ "version": "https://r.cnpmjs.org/babel-plugin-transform-es3-property-literals/download/babel-plugin-transform-es3-property-literals-6.22.0.tgz",
+ "integrity": "sha1-sgeNWELiKr9A9z6M3pzTcRq9V1g="
+ },
+ "babel-plugin-transform-flow-strip-types": {
+ "version": "https://r.cnpmjs.org/babel-plugin-transform-flow-strip-types/download/babel-plugin-transform-flow-strip-types-6.22.0.tgz",
+ "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988="
+ },
+ "babel-plugin-transform-object-assign": {
+ "version": "https://registry.npmjs.org/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz",
+ "integrity": "sha1-+Z0vZvGgsNSY40bFNZaEdAyqILo="
+ },
+ "babel-plugin-transform-object-rest-spread": {
+ "version": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz",
+ "integrity": "sha1-h11ryb52HFiirj/u5dxIldjH+SE="
+ },
+ "babel-plugin-transform-react-display-name": {
+ "version": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.23.0.tgz",
+ "integrity": "sha1-Q5iRDDWEQdxM7xh4cmTQQS7Tazc="
+ },
+ "babel-plugin-transform-react-jsx": {
+ "version": "https://r.cnpmjs.org/babel-plugin-transform-react-jsx/download/babel-plugin-transform-react-jsx-6.24.1.tgz",
+ "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM="
+ },
+ "babel-plugin-transform-react-jsx-source": {
+ "version": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz",
+ "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY="
+ },
+ "babel-plugin-transform-regenerator": {
+ "version": "https://r.cnpmjs.org/babel-plugin-transform-regenerator/download/babel-plugin-transform-regenerator-6.24.1.tgz",
+ "integrity": "sha1-uNowWtQ8PJm0hI5P5AN7dw0jxBg="
+ },
+ "babel-plugin-transform-strict-mode": {
+ "version": "https://r.cnpmjs.org/babel-plugin-transform-strict-mode/download/babel-plugin-transform-strict-mode-6.24.1.tgz",
+ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g="
+ },
+ "babel-polyfill": {
+ "version": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz",
+ "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=",
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "https://r.cnpmjs.org/regenerator-runtime/download/regenerator-runtime-0.10.5.tgz",
+ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg="
+ }
+ }
+ },
+ "babel-preset-es2015-node": {
+ "version": "https://registry.npmjs.org/babel-preset-es2015-node/-/babel-preset-es2015-node-6.1.1.tgz",
+ "integrity": "sha1-YLIxVwJLDP6/OmNVTLBe4DW05V8="
+ },
+ "babel-preset-fbjs": {
+ "version": "https://r.cnpmjs.org/babel-preset-fbjs/download/babel-preset-fbjs-2.1.1.tgz",
+ "integrity": "sha1-OJDJ53bA/YL31QSTW5i+gFSJUoo="
+ },
+ "babel-preset-jest": {
+ "version": "https://r.cnpmjs.org/babel-preset-jest/download/babel-preset-jest-19.0.0.tgz",
+ "integrity": "sha1-ItZyAdAjJKGVgRKI6zgpS7PKw5Y=",
+ "dev": true
+ },
+ "babel-preset-react-native": {
+ "version": "https://r.cnpmjs.org/babel-preset-react-native/download/babel-preset-react-native-1.9.1.tgz",
+ "integrity": "sha1-7I43gnRBDXj1UPqfjt1wNT87sv4="
+ },
+ "babel-register": {
+ "version": "https://r.cnpmjs.org/babel-register/download/babel-register-6.24.1.tgz",
+ "integrity": "sha1-fhDhOi9xBlvfrVoXh7pFvKbe118="
+ },
+ "babel-runtime": {
+ "version": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz",
+ "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=",
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "https://r.cnpmjs.org/regenerator-runtime/download/regenerator-runtime-0.10.5.tgz",
+ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg="
+ }
+ }
+ },
+ "babel-template": {
+ "version": "https://r.cnpmjs.org/babel-template/download/babel-template-6.24.1.tgz",
+ "integrity": "sha1-BK5RTx+Ts6JTfyoPYKWkX7gwgzM="
+ },
+ "babel-traverse": {
+ "version": "https://r.cnpmjs.org/babel-traverse/download/babel-traverse-6.24.1.tgz",
+ "integrity": "sha1-qzZnP9NW+aCUhlnnszjV/q2zFpU="
+ },
+ "babel-types": {
+ "version": "https://r.cnpmjs.org/babel-types/download/babel-types-6.24.1.tgz",
+ "integrity": "sha1-oTaHncFbNga9oNkMH8dDBML/CXU="
+ },
+ "babylon": {
+ "version": "https://r.cnpmjs.org/babylon/download/babylon-6.17.0.tgz",
+ "integrity": "sha1-N9qUiHhIi5xOPEA4iT+jMUs/yTI="
+ },
+ "balanced-match": {
+ "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg="
+ },
+ "base64-js": {
+ "version": "https://registry.cnpmjs.org/base64-js/download/base64-js-1.2.0.tgz",
+ "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE="
+ },
+ "base64-url": {
+ "version": "https://registry.cnpmjs.org/base64-url/download/base64-url-1.2.1.tgz",
+ "integrity": "sha1-GZ/WYXAqDnt9yubgaYuwicUvbXg="
+ },
+ "basic-auth": {
+ "version": "https://registry.cnpmjs.org/basic-auth/download/basic-auth-1.0.4.tgz",
+ "integrity": "sha1-Awk1sB3nyblKgksp8/zLdQ06UpA="
+ },
+ "basic-auth-connect": {
+ "version": "https://registry.cnpmjs.org/basic-auth-connect/download/basic-auth-connect-1.0.0.tgz",
+ "integrity": "sha1-/bC0OWLKe0BFanwrtI/hc9otISI="
+ },
+ "batch": {
+ "version": "https://registry.cnpmjs.org/batch/download/batch-0.5.3.tgz",
+ "integrity": "sha1-PzQU84AyF0O/wQQvmoP/HVgk1GQ="
+ },
+ "bcrypt-pbkdf": {
+ "version": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "optional": true
+ },
+ "beeper": {
+ "version": "https://r.cnpmjs.org/beeper/download/beeper-1.1.1.tgz",
+ "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak="
+ },
+ "big-integer": {
+ "version": "https://r.cnpmjs.org/big-integer/download/big-integer-1.6.22.tgz",
+ "integrity": "sha1-SHyV/OiGAi6kj/XxnjiJMt9G3S4="
+ },
+ "body-parser": {
+ "version": "https://registry.cnpmjs.org/body-parser/download/body-parser-1.13.3.tgz",
+ "integrity": "sha1-wIzzMMM1jhUQFqBXRvE/ApyX+pc=",
+ "dependencies": {
+ "debug": {
+ "version": "https://r.cnpmjs.org/debug/download/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo="
+ },
+ "ms": {
+ "version": "https://r.cnpmjs.org/ms/download/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg="
+ }
+ }
+ },
+ "boom": {
+ "version": "https://registry.cnpmjs.org/boom/download/boom-2.10.1.tgz",
+ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8="
+ },
+ "bplist-creator": {
+ "version": "https://r.cnpmjs.org/bplist-creator/download/bplist-creator-0.0.7.tgz",
+ "integrity": "sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU="
+ },
+ "bplist-parser": {
+ "version": "https://registry.cnpmjs.org/bplist-parser/download/bplist-parser-0.1.1.tgz",
+ "integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY="
+ },
+ "brace-expansion": {
+ "version": "https://r.cnpmjs.org/brace-expansion/download/brace-expansion-1.1.7.tgz",
+ "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k="
+ },
+ "braces": {
+ "version": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc="
+ },
+ "browser-resolve": {
+ "version": "https://registry.cnpmjs.org/browser-resolve/download/browser-resolve-1.11.2.tgz",
+ "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=",
+ "dev": true,
+ "dependencies": {
+ "resolve": {
+ "version": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
+ }
+ }
+ },
+ "bser": {
+ "version": "https://registry.npmjs.org/bser/-/bser-1.0.3.tgz",
+ "integrity": "sha1-1j2hnuFzMKDiYNKjRCKyGolSAxc="
+ },
+ "buffer-shims": {
+ "version": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz",
+ "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E="
+ },
+ "builtin-modules": {
+ "version": "https://registry.cnpmjs.org/builtin-modules/download/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8="
+ },
+ "bytes": {
+ "version": "https://registry.cnpmjs.org/bytes/download/bytes-2.1.0.tgz",
+ "integrity": "sha1-rJPEEOL/ycx89LRks4KJBn9eR7Q="
+ },
+ "callsites": {
+ "version": "https://registry.cnpmjs.org/callsites/download/callsites-2.0.0.tgz",
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "https://registry.cnpmjs.org/camelcase/download/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
+ },
+ "caseless": {
+ "version": "https://r.cnpmjs.org/caseless/download/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+ },
+ "center-align": {
+ "version": "https://registry.cnpmjs.org/center-align/download/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60="
+ },
+ "chalk": {
+ "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg="
+ },
+ "ci-info": {
+ "version": "https://registry.cnpmjs.org/ci-info/download/ci-info-1.0.0.tgz",
+ "integrity": "sha1-3FKF8rTiUYIWg2gcOBwziPRuxTQ=",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "https://registry.cnpmjs.org/cli-cursor/download/cli-cursor-1.0.2.tgz",
+ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc="
+ },
+ "cli-width": {
+ "version": "https://registry.cnpmjs.org/cli-width/download/cli-width-2.1.0.tgz",
+ "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao="
+ },
+ "cliui": {
+ "version": "https://registry.cnpmjs.org/cliui/download/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "dependencies": {
+ "wordwrap": {
+ "version": "https://r.cnpmjs.org/wordwrap/download/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
+ }
+ }
+ },
+ "clone": {
+ "version": "https://registry.cnpmjs.org/clone/download/clone-1.0.2.tgz",
+ "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk="
+ },
+ "clone-stats": {
+ "version": "https://registry.cnpmjs.org/clone-stats/download/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE="
+ },
+ "co": {
+ "version": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
+ },
+ "code-point-at": {
+ "version": "https://r.cnpmjs.org/code-point-at/download/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+ },
+ "color-convert": {
+ "version": "https://r.cnpmjs.org/color-convert/download/color-convert-1.9.0.tgz",
+ "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=",
+ "dev": true
+ },
+ "color-name": {
+ "version": "https://r.cnpmjs.org/color-name/download/color-name-1.1.2.tgz",
+ "integrity": "sha1-XIq3K2S9IhXWF66VWeuxSEdc+Y0=",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "https://registry.cnpmjs.org/combined-stream/download/combined-stream-1.0.5.tgz",
+ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk="
+ },
+ "commander": {
+ "version": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
+ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q="
+ },
+ "compressible": {
+ "version": "https://r.cnpmjs.org/compressible/download/compressible-2.0.10.tgz",
+ "integrity": "sha1-/tocf3YXkScyspv4zyYlKiC57s0="
+ },
+ "compression": {
+ "version": "https://registry.cnpmjs.org/compression/download/compression-1.5.2.tgz",
+ "integrity": "sha1-sDuNhub4rSloPLqN+R3cb/x3s5U=",
+ "dependencies": {
+ "debug": {
+ "version": "https://r.cnpmjs.org/debug/download/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo="
+ },
+ "ms": {
+ "version": "https://r.cnpmjs.org/ms/download/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg="
+ }
+ }
+ },
+ "concat-map": {
+ "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "https://r.cnpmjs.org/concat-stream/download/concat-stream-1.6.0.tgz",
+ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc="
+ },
+ "connect": {
+ "version": "https://registry.cnpmjs.org/connect/download/connect-2.30.2.tgz",
+ "integrity": "sha1-jam8vooFTT0xjXTf7JA7XDmhtgk=",
+ "dependencies": {
+ "debug": {
+ "version": "https://r.cnpmjs.org/debug/download/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo="
+ },
+ "ms": {
+ "version": "https://r.cnpmjs.org/ms/download/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg="
+ }
+ }
+ },
+ "connect-timeout": {
+ "version": "https://registry.cnpmjs.org/connect-timeout/download/connect-timeout-1.6.2.tgz",
+ "integrity": "sha1-3ppexh4zoStu2qt7XwYumMWZuI4=",
+ "dependencies": {
+ "debug": {
+ "version": "https://r.cnpmjs.org/debug/download/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo="
+ },
+ "ms": {
+ "version": "https://r.cnpmjs.org/ms/download/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg="
+ }
+ }
+ },
+ "content-type": {
+ "version": "https://registry.cnpmjs.org/content-type/download/content-type-1.0.2.tgz",
+ "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0="
+ },
+ "content-type-parser": {
+ "version": "https://registry.cnpmjs.org/content-type-parser/download/content-type-parser-1.0.1.tgz",
+ "integrity": "sha1-w+VpiMU8ZRJ/tG1AMqOpACRv3JQ=",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "https://r.cnpmjs.org/convert-source-map/download/convert-source-map-1.5.0.tgz",
+ "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU="
+ },
+ "cookie": {
+ "version": "https://r.cnpmjs.org/cookie/download/cookie-0.1.3.tgz",
+ "integrity": "sha1-5zSlwUF/zkctWu+Cw4HKu2TRpDU="
+ },
+ "cookie-parser": {
+ "version": "https://registry.cnpmjs.org/cookie-parser/download/cookie-parser-1.3.5.tgz",
+ "integrity": "sha1-nXVVcPtdF4kHcSJ6AjFNm+fPg1Y="
+ },
+ "cookie-signature": {
+ "version": "https://registry.cnpmjs.org/cookie-signature/download/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+ },
+ "core-js": {
+ "version": "https://registry.cnpmjs.org/core-js/download/core-js-2.4.1.tgz",
+ "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4="
+ },
+ "core-util-is": {
+ "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "crc": {
+ "version": "https://registry.cnpmjs.org/crc/download/crc-3.3.0.tgz",
+ "integrity": "sha1-+mIuG8OIvyVzCQgta2UgDOZwkLo="
+ },
+ "cross-spawn": {
+ "version": "https://registry.cnpmjs.org/cross-spawn/download/cross-spawn-3.0.1.tgz",
+ "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI="
+ },
+ "cryptiles": {
+ "version": "https://registry.cnpmjs.org/cryptiles/download/cryptiles-2.0.5.tgz",
+ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g="
+ },
+ "csrf": {
+ "version": "https://r.cnpmjs.org/csrf/download/csrf-3.0.6.tgz",
+ "integrity": "sha1-thEg3c7q/JHnbtUxO7XAsmZ7cQo="
+ },
+ "cssom": {
+ "version": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz",
+ "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=",
+ "dev": true
+ },
+ "cssstyle": {
+ "version": "https://registry.cnpmjs.org/cssstyle/download/cssstyle-0.2.37.tgz",
+ "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=",
+ "dev": true
+ },
+ "csurf": {
+ "version": "https://registry.cnpmjs.org/csurf/download/csurf-1.8.3.tgz",
+ "integrity": "sha1-I/KhO/HY/OHQyZZYg5RELLqGpWo="
+ },
+ "dashdash": {
+ "version": "https://r.cnpmjs.org/dashdash/download/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dependencies": {
+ "assert-plus": {
+ "version": "https://registry.cnpmjs.org/assert-plus/download/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ }
+ }
+ },
+ "dateformat": {
+ "version": "https://r.cnpmjs.org/dateformat/download/dateformat-2.0.0.tgz",
+ "integrity": "sha1-J0Pjq7XD/CRi5SfcpEXgTp9N7hc="
+ },
+ "debug": {
+ "version": "https://r.cnpmjs.org/debug/download/debug-2.6.6.tgz",
+ "integrity": "sha1-qfpvvpykPPHnn3O3XAGJy7fW21o="
+ },
+ "decamelize": {
+ "version": "https://registry.cnpmjs.org/decamelize/download/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "deep-is": {
+ "version": "https://registry.cnpmjs.org/deep-is/download/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "default-require-extensions": {
+ "version": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz",
+ "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=",
+ "dev": true
+ },
+ "delayed-stream": {
+ "version": "https://registry.cnpmjs.org/delayed-stream/download/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+ },
+ "delegates": {
+ "version": "https://registry.cnpmjs.org/delegates/download/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
+ },
+ "denodeify": {
+ "version": "https://registry.cnpmjs.org/denodeify/download/denodeify-1.2.1.tgz",
+ "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE="
+ },
+ "depd": {
+ "version": "https://registry.cnpmjs.org/depd/download/depd-1.0.1.tgz",
+ "integrity": "sha1-gK7GTJ1tl+ZcwqnKqTwKpqv3Oqo="
+ },
+ "destroy": {
+ "version": "https://registry.cnpmjs.org/destroy/download/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ },
+ "detect-indent": {
+ "version": "https://registry.cnpmjs.org/detect-indent/download/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg="
+ },
+ "diff": {
+ "version": "https://r.cnpmjs.org/diff/download/diff-3.2.0.tgz",
+ "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=",
+ "dev": true
+ },
+ "dom-walk": {
+ "version": "https://registry.cnpmjs.org/dom-walk/download/dom-walk-0.1.1.tgz",
+ "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg="
+ },
+ "duplexer2": {
+ "version": "https://r.cnpmjs.org/duplexer2/download/duplexer2-0.0.2.tgz",
+ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+ "dependencies": {
+ "isarray": {
+ "version": "https://r.cnpmjs.org/isarray/download/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ },
+ "readable-stream": {
+ "version": "https://registry.cnpmjs.org/readable-stream/download/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk="
+ },
+ "string_decoder": {
+ "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ }
+ }
+ },
+ "ecc-jsbn": {
+ "version": "https://registry.cnpmjs.org/ecc-jsbn/download/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "optional": true
+ },
+ "ee-first": {
+ "version": "https://registry.cnpmjs.org/ee-first/download/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+ },
+ "encoding": {
+ "version": "https://registry.cnpmjs.org/encoding/download/encoding-0.1.12.tgz",
+ "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
+ "dependencies": {
+ "iconv-lite": {
+ "version": "https://r.cnpmjs.org/iconv-lite/download/iconv-lite-0.4.17.tgz",
+ "integrity": "sha1-T9qjs4rLwsAxsEXQ7c3+HsqxjI0="
+ }
+ }
+ },
+ "errno": {
+ "version": "https://registry.cnpmjs.org/errno/download/errno-0.1.4.tgz",
+ "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0="
+ },
+ "error-ex": {
+ "version": "https://r.cnpmjs.org/error-ex/download/error-ex-1.3.1.tgz",
+ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw="
+ },
+ "errorhandler": {
+ "version": "https://registry.cnpmjs.org/errorhandler/download/errorhandler-1.4.3.tgz",
+ "integrity": "sha1-t7cO2PNZ6duICS8tIMD4MUIK2D8=",
+ "dependencies": {
+ "accepts": {
+ "version": "https://registry.cnpmjs.org/accepts/download/accepts-1.3.3.tgz",
+ "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo="
+ },
+ "negotiator": {
+ "version": "https://r.cnpmjs.org/negotiator/download/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
+ }
+ }
+ },
+ "escape-html": {
+ "version": "https://registry.cnpmjs.org/escape-html/download/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ },
+ "escape-string-regexp": {
+ "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "escodegen": {
+ "version": "https://registry.cnpmjs.org/escodegen/download/escodegen-1.8.1.tgz",
+ "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=",
+ "dev": true,
+ "dependencies": {
+ "esprima": {
+ "version": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "https://registry.cnpmjs.org/source-map/download/source-map-0.2.0.tgz",
+ "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "esprima": {
+ "version": "https://r.cnpmjs.org/esprima/download/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "https://registry.cnpmjs.org/estraverse/download/estraverse-1.9.3.tgz",
+ "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "https://registry.cnpmjs.org/esutils/download/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
+ },
+ "etag": {
+ "version": "https://registry.cnpmjs.org/etag/download/etag-1.7.0.tgz",
+ "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg="
+ },
+ "event-target-shim": {
+ "version": "https://registry.cnpmjs.org/event-target-shim/download/event-target-shim-1.1.1.tgz",
+ "integrity": "sha1-qG5e5r2qFgVEddp5fM3fDFVphJE="
+ },
+ "exec-sh": {
+ "version": "https://registry.cnpmjs.org/exec-sh/download/exec-sh-0.2.0.tgz",
+ "integrity": "sha1-FPdd4/INKG75MwmbLOUKkDWc7xA="
+ },
+ "exit-hook": {
+ "version": "https://registry.cnpmjs.org/exit-hook/download/exit-hook-1.1.1.tgz",
+ "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g="
+ },
+ "expand-brackets": {
+ "version": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s="
+ },
+ "expand-range": {
+ "version": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc="
+ },
+ "express-session": {
+ "version": "https://registry.cnpmjs.org/express-session/download/express-session-1.11.3.tgz",
+ "integrity": "sha1-XMmPP1/4Ttg1+Ry/CqvQxxB0AK8=",
+ "dependencies": {
+ "debug": {
+ "version": "https://r.cnpmjs.org/debug/download/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo="
+ },
+ "ms": {
+ "version": "https://r.cnpmjs.org/ms/download/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg="
+ },
+ "uid-safe": {
+ "version": "https://registry.cnpmjs.org/uid-safe/download/uid-safe-2.0.0.tgz",
+ "integrity": "sha1-p/PGymSh9qXQTsDvPkw9U2cxcTc="
+ }
+ }
+ },
+ "extend": {
+ "version": "https://r.cnpmjs.org/extend/download/extend-3.0.1.tgz",
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
+ },
+ "extglob": {
+ "version": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE="
+ },
+ "extsprintf": {
+ "version": "https://registry.cnpmjs.org/extsprintf/download/extsprintf-1.0.2.tgz",
+ "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA="
+ },
+ "fancy-log": {
+ "version": "https://r.cnpmjs.org/fancy-log/download/fancy-log-1.3.0.tgz",
+ "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg="
+ },
+ "fast-levenshtein": {
+ "version": "https://r.cnpmjs.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fb-watchman": {
+ "version": "https://r.cnpmjs.org/fb-watchman/download/fb-watchman-2.0.0.tgz",
+ "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=",
+ "dependencies": {
+ "bser": {
+ "version": "https://r.cnpmjs.org/bser/download/bser-2.0.0.tgz",
+ "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk="
+ }
+ }
+ },
+ "fbjs": {
+ "version": "https://r.cnpmjs.org/fbjs/download/fbjs-0.8.12.tgz",
+ "integrity": "sha1-ELXZL3bUVXX9Y6IX1OoCvqL47QQ=",
+ "dependencies": {
+ "core-js": {
+ "version": "https://registry.cnpmjs.org/core-js/download/core-js-1.2.7.tgz",
+ "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
+ }
+ }
+ },
+ "fbjs-scripts": {
+ "version": "https://registry.cnpmjs.org/fbjs-scripts/download/fbjs-scripts-0.7.1.tgz",
+ "integrity": "sha1-TxFeIY4kPjrdvw7dqsHjxi9wP6w=",
+ "dependencies": {
+ "babel-preset-fbjs": {
+ "version": "https://registry.cnpmjs.org/babel-preset-fbjs/download/babel-preset-fbjs-1.0.0.tgz",
+ "integrity": "sha1-yXLlybMB1OyeeXH0rsPhSsAXqLA="
+ },
+ "core-js": {
+ "version": "https://registry.cnpmjs.org/core-js/download/core-js-1.2.7.tgz",
+ "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
+ }
+ }
+ },
+ "figures": {
+ "version": "https://registry.cnpmjs.org/figures/download/figures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4="
+ },
+ "filename-regex": {
+ "version": "https://r.cnpmjs.org/filename-regex/download/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY="
+ },
+ "fileset": {
+ "version": "https://r.cnpmjs.org/fileset/download/fileset-2.0.3.tgz",
+ "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
+ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM="
+ },
+ "finalhandler": {
+ "version": "https://r.cnpmjs.org/finalhandler/download/finalhandler-0.4.0.tgz",
+ "integrity": "sha1-llpS2ejQXSuFdUhUH7ibU6JJfZs=",
+ "dependencies": {
+ "debug": {
+ "version": "https://r.cnpmjs.org/debug/download/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo="
+ },
+ "escape-html": {
+ "version": "https://r.cnpmjs.org/escape-html/download/escape-html-1.0.2.tgz",
+ "integrity": "sha1-130y+pjjjC9BroXpJ44ODmuhAiw="
+ },
+ "ms": {
+ "version": "https://r.cnpmjs.org/ms/download/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg="
+ }
+ }
+ },
+ "find-up": {
+ "version": "https://registry.cnpmjs.org/find-up/download/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8="
+ },
+ "for-in": {
+ "version": "https://r.cnpmjs.org/for-in/download/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+ },
+ "for-own": {
+ "version": "https://r.cnpmjs.org/for-own/download/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4="
+ },
+ "forever-agent": {
+ "version": "https://registry.cnpmjs.org/forever-agent/download/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+ },
+ "form-data": {
+ "version": "https://r.cnpmjs.org/form-data/download/form-data-2.1.4.tgz",
+ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
+ "dependencies": {
+ "mime-types": {
+ "version": "https://r.cnpmjs.org/mime-types/download/mime-types-2.1.15.tgz",
+ "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0="
+ }
+ }
+ },
+ "fresh": {
+ "version": "https://r.cnpmjs.org/fresh/download/fresh-0.3.0.tgz",
+ "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8="
+ },
+ "fs-extra": {
+ "version": "https://r.cnpmjs.org/fs-extra/download/fs-extra-1.0.0.tgz",
+ "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA="
+ },
+ "fs.realpath": {
+ "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "gauge": {
+ "version": "https://registry.cnpmjs.org/gauge/download/gauge-1.2.7.tgz",
+ "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM="
+ },
+ "get-caller-file": {
+ "version": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
+ "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U="
+ },
+ "getpass": {
+ "version": "https://r.cnpmjs.org/getpass/download/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dependencies": {
+ "assert-plus": {
+ "version": "https://registry.cnpmjs.org/assert-plus/download/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ }
+ }
+ },
+ "glob": {
+ "version": "https://registry.cnpmjs.org/glob/download/glob-7.1.1.tgz",
+ "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg="
+ },
+ "glob-base": {
+ "version": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q="
+ },
+ "glob-parent": {
+ "version": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg="
+ },
+ "global": {
+ "version": "https://r.cnpmjs.org/global/download/global-4.3.2.tgz",
+ "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8="
+ },
+ "globals": {
+ "version": "https://r.cnpmjs.org/globals/download/globals-9.17.0.tgz",
+ "integrity": "sha1-DAymltm5u2lNLlRwvTd3fKrVAoY="
+ },
+ "glogg": {
+ "version": "https://registry.cnpmjs.org/glogg/download/glogg-1.0.0.tgz",
+ "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U="
+ },
+ "graceful-fs": {
+ "version": "https://r.cnpmjs.org/graceful-fs/download/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
+ },
+ "graceful-readlink": {
+ "version": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
+ },
+ "growly": {
+ "version": "https://registry.cnpmjs.org/growly/download/growly-1.3.0.tgz",
+ "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
+ "dev": true
+ },
+ "gulp-util": {
+ "version": "https://r.cnpmjs.org/gulp-util/download/gulp-util-3.0.8.tgz",
+ "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
+ "dependencies": {
+ "object-assign": {
+ "version": "https://registry.cnpmjs.org/object-assign/download/object-assign-3.0.0.tgz",
+ "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I="
+ }
+ }
+ },
+ "gulplog": {
+ "version": "https://registry.cnpmjs.org/gulplog/download/gulplog-1.0.0.tgz",
+ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U="
+ },
+ "handlebars": {
+ "version": "https://r.cnpmjs.org/handlebars/download/handlebars-4.0.7.tgz",
+ "integrity": "sha1-6XMlrrjqC54SucTdc8TDEq0O3lk=",
+ "dev": true,
+ "dependencies": {
+ "async": {
+ "version": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "https://registry.cnpmjs.org/source-map/download/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true
+ }
+ }
+ },
+ "har-schema": {
+ "version": "https://r.cnpmjs.org/har-schema/download/har-schema-1.0.5.tgz",
+ "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4="
+ },
+ "har-validator": {
+ "version": "https://r.cnpmjs.org/har-validator/download/har-validator-4.2.1.tgz",
+ "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio="
+ },
+ "has-ansi": {
+ "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE="
+ },
+ "has-flag": {
+ "version": "https://registry.cnpmjs.org/has-flag/download/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "has-gulplog": {
+ "version": "https://registry.cnpmjs.org/has-gulplog/download/has-gulplog-0.1.0.tgz",
+ "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4="
+ },
+ "has-unicode": {
+ "version": "https://registry.cnpmjs.org/has-unicode/download/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
+ },
+ "hawk": {
+ "version": "https://registry.cnpmjs.org/hawk/download/hawk-3.1.3.tgz",
+ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ="
+ },
+ "hoek": {
+ "version": "https://registry.cnpmjs.org/hoek/download/hoek-2.16.3.tgz",
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0="
+ },
+ "home-or-tmp": {
+ "version": "https://registry.cnpmjs.org/home-or-tmp/download/home-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg="
+ },
+ "hosted-git-info": {
+ "version": "https://r.cnpmjs.org/hosted-git-info/download/hosted-git-info-2.4.2.tgz",
+ "integrity": "sha1-AHa59GonBQbduq6lZJaJdGBhKmc="
+ },
+ "html-encoding-sniffer": {
+ "version": "https://registry.cnpmjs.org/html-encoding-sniffer/download/html-encoding-sniffer-1.0.1.tgz",
+ "integrity": "sha1-eb96eF6klf5mFl5zQVPzY/9UN9o=",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "https://registry.cnpmjs.org/http-errors/download/http-errors-1.3.1.tgz",
+ "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI="
+ },
+ "http-signature": {
+ "version": "https://registry.cnpmjs.org/http-signature/download/http-signature-1.1.1.tgz",
+ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8="
+ },
+ "iconv-lite": {
+ "version": "https://r.cnpmjs.org/iconv-lite/download/iconv-lite-0.4.11.tgz",
+ "integrity": "sha1-LstC/SlHRJIiCaLnxATayHk9it4="
+ },
+ "image-size": {
+ "version": "https://registry.cnpmjs.org/image-size/download/image-size-0.3.5.tgz",
+ "integrity": "sha1-gyQOqy+1sAsEqrjHSwRx6cunrYw="
+ },
+ "immutable": {
+ "version": "https://registry.cnpmjs.org/immutable/download/immutable-3.7.6.tgz",
+ "integrity": "sha1-E7TTyxK++hVIKib+Gy665kAHHks="
+ },
+ "imurmurhash": {
+ "version": "https://registry.cnpmjs.org/imurmurhash/download/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+ },
+ "inflight": {
+ "version": "https://registry.cnpmjs.org/inflight/download/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk="
+ },
+ "inherits": {
+ "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "inquirer": {
+ "version": "https://registry.cnpmjs.org/inquirer/download/inquirer-0.12.0.tgz",
+ "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34="
+ },
+ "invariant": {
+ "version": "https://r.cnpmjs.org/invariant/download/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A="
+ },
+ "invert-kv": {
+ "version": "https://registry.cnpmjs.org/invert-kv/download/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
+ },
+ "is-arrayish": {
+ "version": "https://registry.cnpmjs.org/is-arrayish/download/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ },
+ "is-buffer": {
+ "version": "https://r.cnpmjs.org/is-buffer/download/is-buffer-1.1.5.tgz",
+ "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw="
+ },
+ "is-builtin-module": {
+ "version": "https://registry.cnpmjs.org/is-builtin-module/download/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74="
+ },
+ "is-ci": {
+ "version": "https://registry.cnpmjs.org/is-ci/download/is-ci-1.0.10.tgz",
+ "integrity": "sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4=",
+ "dev": true
+ },
+ "is-dotfile": {
+ "version": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz",
+ "integrity": "sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0="
+ },
+ "is-equal-shallow": {
+ "version": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ="
+ },
+ "is-extendable": {
+ "version": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+ },
+ "is-extglob": {
+ "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA="
+ },
+ "is-finite": {
+ "version": "https://registry.cnpmjs.org/is-finite/download/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko="
+ },
+ "is-fullwidth-code-point": {
+ "version": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs="
+ },
+ "is-glob": {
+ "version": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM="
+ },
+ "is-number": {
+ "version": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8="
+ },
+ "is-posix-bracket": {
+ "version": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q="
+ },
+ "is-primitive": {
+ "version": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU="
+ },
+ "is-stream": {
+ "version": "https://registry.cnpmjs.org/is-stream/download/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+ },
+ "is-typedarray": {
+ "version": "https://registry.cnpmjs.org/is-typedarray/download/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ },
+ "is-utf8": {
+ "version": "https://registry.cnpmjs.org/is-utf8/download/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
+ },
+ "isarray": {
+ "version": "https://r.cnpmjs.org/isarray/download/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isemail": {
+ "version": "https://registry.cnpmjs.org/isemail/download/isemail-1.2.0.tgz",
+ "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo="
+ },
+ "isexe": {
+ "version": "https://r.cnpmjs.org/isexe/download/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ },
+ "isobject": {
+ "version": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk="
+ },
+ "isomorphic-fetch": {
+ "version": "https://registry.cnpmjs.org/isomorphic-fetch/download/isomorphic-fetch-2.2.1.tgz",
+ "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk="
+ },
+ "isstream": {
+ "version": "https://registry.cnpmjs.org/isstream/download/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ },
+ "istanbul-api": {
+ "version": "https://r.cnpmjs.org/istanbul-api/download/istanbul-api-1.1.8.tgz",
+ "integrity": "sha1-qETlXG+a7uKS5/QpQhlvYLI9yT4=",
+ "dev": true
+ },
+ "istanbul-lib-coverage": {
+ "version": "https://r.cnpmjs.org/istanbul-lib-coverage/download/istanbul-lib-coverage-1.1.0.tgz",
+ "integrity": "sha1-ysoZ3srvNSW11jMdcB8/O3rUhSg=",
+ "dev": true
+ },
+ "istanbul-lib-hook": {
+ "version": "https://r.cnpmjs.org/istanbul-lib-hook/download/istanbul-lib-hook-1.0.6.tgz",
+ "integrity": "sha1-wIZtHoHPLVMZJJUQEx/Bbe5JIx8=",
+ "dev": true
+ },
+ "istanbul-lib-instrument": {
+ "version": "https://r.cnpmjs.org/istanbul-lib-instrument/download/istanbul-lib-instrument-1.7.1.tgz",
+ "integrity": "sha1-Fp4xvGLHeIUamUOd2Zw8wSGE02A=",
+ "dev": true
+ },
+ "istanbul-lib-report": {
+ "version": "https://r.cnpmjs.org/istanbul-lib-report/download/istanbul-lib-report-1.1.0.tgz",
+ "integrity": "sha1-RExOzKmvqTz1hPVrEPGVv3aMB3A=",
+ "dev": true,
+ "dependencies": {
+ "supports-color": {
+ "version": "https://r.cnpmjs.org/supports-color/download/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true
+ }
+ }
+ },
+ "istanbul-lib-source-maps": {
+ "version": "https://r.cnpmjs.org/istanbul-lib-source-maps/download/istanbul-lib-source-maps-1.2.0.tgz",
+ "integrity": "sha1-jHcG1Jfib+62rz4MKP1bBmlZjQ4=",
+ "dev": true
+ },
+ "istanbul-reports": {
+ "version": "https://r.cnpmjs.org/istanbul-reports/download/istanbul-reports-1.1.0.tgz",
+ "integrity": "sha1-HvO3lYiSGc+1+tFjZfbOEI1fjGY=",
+ "dev": true
+ },
+ "jest": {
+ "version": "https://r.cnpmjs.org/jest/download/jest-19.0.2.tgz",
+ "integrity": "sha1-t5T6r4/0Yec4jyi+71WaVPILLBA=",
+ "dev": true,
+ "dependencies": {
+ "jest-cli": {
+ "version": "https://r.cnpmjs.org/jest-cli/download/jest-cli-19.0.2.tgz",
+ "integrity": "sha1-zDYgtirKxfLZOlSMtu9pfU7IVEM=",
+ "dev": true
+ }
+ }
+ },
+ "jest-changed-files": {
+ "version": "https://r.cnpmjs.org/jest-changed-files/download/jest-changed-files-19.0.2.tgz",
+ "integrity": "sha1-FsVMhMMnC+QI4G0uivPz43qIWCQ=",
+ "dev": true
+ },
+ "jest-config": {
+ "version": "https://r.cnpmjs.org/jest-config/download/jest-config-19.0.4.tgz",
+ "integrity": "sha1-QpgCEdRkF+kcp6v/0IbCcCNPc/0=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": {
+ "version": "https://r.cnpmjs.org/ansi-styles/download/ansi-styles-3.0.0.tgz",
+ "integrity": "sha1-VATpOlRMT+x/BIJil3vr/jFV4ME=",
+ "dev": true
+ },
+ "pretty-format": {
+ "version": "https://r.cnpmjs.org/pretty-format/download/pretty-format-19.0.0.tgz",
+ "integrity": "sha1-VlMNMqy5ij+khRxOK503tCBoTIQ=",
+ "dev": true
+ }
+ }
+ },
+ "jest-diff": {
+ "version": "https://r.cnpmjs.org/jest-diff/download/jest-diff-19.0.0.tgz",
+ "integrity": "sha1-0VY8/FbItgIymI+8BdTRbtkPBjw=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": {
+ "version": "https://r.cnpmjs.org/ansi-styles/download/ansi-styles-3.0.0.tgz",
+ "integrity": "sha1-VATpOlRMT+x/BIJil3vr/jFV4ME=",
+ "dev": true
+ },
+ "pretty-format": {
+ "version": "https://r.cnpmjs.org/pretty-format/download/pretty-format-19.0.0.tgz",
+ "integrity": "sha1-VlMNMqy5ij+khRxOK503tCBoTIQ=",
+ "dev": true
+ }
+ }
+ },
+ "jest-environment-jsdom": {
+ "version": "https://r.cnpmjs.org/jest-environment-jsdom/download/jest-environment-jsdom-19.0.2.tgz",
+ "integrity": "sha1-ztqFnEpLlKs15N59q1S5JvKT5KM=",
+ "dev": true
+ },
+ "jest-environment-node": {
+ "version": "https://r.cnpmjs.org/jest-environment-node/download/jest-environment-node-19.0.2.tgz",
+ "integrity": "sha1-boQHnbh+0h0MBeH5Zp8gexFv6Zs=",
+ "dev": true
+ },
+ "jest-file-exists": {
+ "version": "https://r.cnpmjs.org/jest-file-exists/download/jest-file-exists-19.0.0.tgz",
+ "integrity": "sha1-zKLlh6EeyS4kz+qz+KlNZX8/zrg=",
+ "dev": true
+ },
+ "jest-haste-map": {
+ "version": "https://r.cnpmjs.org/jest-haste-map/download/jest-haste-map-19.0.0.tgz",
+ "integrity": "sha1-rd4Atisf4EQyoQSzJU/FAEUUtV4=",
+ "dependencies": {
+ "bser": {
+ "version": "https://r.cnpmjs.org/bser/download/bser-1.0.2.tgz",
+ "integrity": "sha1-OBEWlwsqbe6lZG3RXdcnhES1YWk="
+ },
+ "sane": {
+ "version": "https://r.cnpmjs.org/sane/download/sane-1.5.0.tgz",
+ "integrity": "sha1-pK3q52TQSGIeyyfV+ez1ExAZOfM=",
+ "dependencies": {
+ "fb-watchman": {
+ "version": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-1.9.2.tgz",
+ "integrity": "sha1-okz0eCf4LTj7Waaa1wt247auc4M="
+ }
+ }
+ }
+ }
+ },
+ "jest-jasmine2": {
+ "version": "https://r.cnpmjs.org/jest-jasmine2/download/jest-jasmine2-19.0.2.tgz",
+ "integrity": "sha1-FnmRrIJZgfsagArxJug6/MqDLHM=",
+ "dev": true
+ },
+ "jest-matcher-utils": {
+ "version": "https://r.cnpmjs.org/jest-matcher-utils/download/jest-matcher-utils-19.0.0.tgz",
+ "integrity": "sha1-Xs2bY1ZdKwAfYfv37Ex/U3lkVk0=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": {
+ "version": "https://r.cnpmjs.org/ansi-styles/download/ansi-styles-3.0.0.tgz",
+ "integrity": "sha1-VATpOlRMT+x/BIJil3vr/jFV4ME=",
+ "dev": true
+ },
+ "pretty-format": {
+ "version": "https://r.cnpmjs.org/pretty-format/download/pretty-format-19.0.0.tgz",
+ "integrity": "sha1-VlMNMqy5ij+khRxOK503tCBoTIQ=",
+ "dev": true
+ }
+ }
+ },
+ "jest-matchers": {
+ "version": "https://r.cnpmjs.org/jest-matchers/download/jest-matchers-19.0.0.tgz",
+ "integrity": "sha1-x07Mbr/sBvOEdnuk1vpKQtZ1V1Q=",
+ "dev": true
+ },
+ "jest-message-util": {
+ "version": "https://r.cnpmjs.org/jest-message-util/download/jest-message-util-19.0.0.tgz",
+ "integrity": "sha1-cheWuJwOTXYWBvm6jLgoo7YkZBY=",
+ "dev": true
+ },
+ "jest-mock": {
+ "version": "https://r.cnpmjs.org/jest-mock/download/jest-mock-19.0.0.tgz",
+ "integrity": "sha1-ZwOGQelgerLOCOxKjLg6q7yJnQE=",
+ "dev": true
+ },
+ "jest-regex-util": {
+ "version": "https://r.cnpmjs.org/jest-regex-util/download/jest-regex-util-19.0.0.tgz",
+ "integrity": "sha1-t3VFhxEq7eFFZRC7H2r+dO9ZhpE=",
+ "dev": true
+ },
+ "jest-resolve": {
+ "version": "https://r.cnpmjs.org/jest-resolve/download/jest-resolve-19.0.2.tgz",
+ "integrity": "sha1-V5NXXeTweuwy99f/DGwYGWPu+zw=",
+ "dev": true
+ },
+ "jest-resolve-dependencies": {
+ "version": "https://r.cnpmjs.org/jest-resolve-dependencies/download/jest-resolve-dependencies-19.0.0.tgz",
+ "integrity": "sha1-p0GtH6CUFA5k7PJkKlBPg07OIu4=",
+ "dev": true
+ },
+ "jest-runtime": {
+ "version": "https://r.cnpmjs.org/jest-runtime/download/jest-runtime-19.0.3.tgz",
+ "integrity": "sha1-oWM1Ss5GkQ7jPwKCtr/2sLh9QzA=",
+ "dev": true,
+ "dependencies": {
+ "strip-bom": {
+ "version": "https://r.cnpmjs.org/strip-bom/download/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ }
+ }
+ },
+ "jest-snapshot": {
+ "version": "https://r.cnpmjs.org/jest-snapshot/download/jest-snapshot-19.0.2.tgz",
+ "integrity": "sha1-nBshYhT3GHw4v9XHCx76sWsP9Qs=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": {
+ "version": "https://r.cnpmjs.org/ansi-styles/download/ansi-styles-3.0.0.tgz",
+ "integrity": "sha1-VATpOlRMT+x/BIJil3vr/jFV4ME=",
+ "dev": true
+ },
+ "pretty-format": {
+ "version": "https://r.cnpmjs.org/pretty-format/download/pretty-format-19.0.0.tgz",
+ "integrity": "sha1-VlMNMqy5ij+khRxOK503tCBoTIQ=",
+ "dev": true
+ }
+ }
+ },
+ "jest-util": {
+ "version": "https://r.cnpmjs.org/jest-util/download/jest-util-19.0.2.tgz",
+ "integrity": "sha1-4KAjKiq55rK1Nmi9s1NMK1l37UE=",
+ "dev": true
+ },
+ "jest-validate": {
+ "version": "https://r.cnpmjs.org/jest-validate/download/jest-validate-19.0.2.tgz",
+ "integrity": "sha1-3FNN9fEnjVtj3zKxQkHU2/ckTAw=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": {
+ "version": "https://r.cnpmjs.org/ansi-styles/download/ansi-styles-3.0.0.tgz",
+ "integrity": "sha1-VATpOlRMT+x/BIJil3vr/jFV4ME=",
+ "dev": true
+ },
+ "pretty-format": {
+ "version": "https://r.cnpmjs.org/pretty-format/download/pretty-format-19.0.0.tgz",
+ "integrity": "sha1-VlMNMqy5ij+khRxOK503tCBoTIQ=",
+ "dev": true
+ }
+ }
+ },
+ "jodid25519": {
+ "version": "https://registry.cnpmjs.org/jodid25519/download/jodid25519-1.0.2.tgz",
+ "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=",
+ "optional": true
+ },
+ "joi": {
+ "version": "https://registry.cnpmjs.org/joi/download/joi-6.10.1.tgz",
+ "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY="
+ },
+ "js-tokens": {
+ "version": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz",
+ "integrity": "sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc="
+ },
+ "js-yaml": {
+ "version": "https://r.cnpmjs.org/js-yaml/download/js-yaml-3.8.3.tgz",
+ "integrity": "sha1-M6BexIHIUMiHWSkWb+G+thxyh2Y=",
+ "dev": true
+ },
+ "jsbn": {
+ "version": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "optional": true
+ },
+ "jsdom": {
+ "version": "https://r.cnpmjs.org/jsdom/download/jsdom-9.12.0.tgz",
+ "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=",
+ "dev": true,
+ "dependencies": {
+ "sax": {
+ "version": "https://registry.npmjs.org/sax/-/sax-1.2.2.tgz",
+ "integrity": "sha1-/YYxojvHgmvvXYcb24c3jJVkeCg=",
+ "dev": true
+ }
+ }
+ },
+ "jsesc": {
+ "version": "https://registry.cnpmjs.org/jsesc/download/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s="
+ },
+ "json-schema": {
+ "version": "https://registry.cnpmjs.org/json-schema/download/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+ },
+ "json-stable-stringify": {
+ "version": "https://registry.cnpmjs.org/json-stable-stringify/download/json-stable-stringify-1.0.1.tgz",
+ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8="
+ },
+ "json-stringify-safe": {
+ "version": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+ },
+ "json5": {
+ "version": "https://registry.cnpmjs.org/json5/download/json5-0.4.0.tgz",
+ "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0="
+ },
+ "jsonfile": {
+ "version": "https://registry.cnpmjs.org/jsonfile/download/jsonfile-2.4.0.tgz",
+ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug="
+ },
+ "jsonify": {
+ "version": "https://registry.cnpmjs.org/jsonify/download/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM="
+ },
+ "jsprim": {
+ "version": "https://r.cnpmjs.org/jsprim/download/jsprim-1.4.0.tgz",
+ "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=",
+ "dependencies": {
+ "assert-plus": {
+ "version": "https://registry.cnpmjs.org/assert-plus/download/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ }
+ }
+ },
+ "kind-of": {
+ "version": "https://r.cnpmjs.org/kind-of/download/kind-of-3.2.0.tgz",
+ "integrity": "sha1-tYq+TVwEStM3JqjBUltIz4kb/wc="
+ },
+ "klaw": {
+ "version": "https://registry.cnpmjs.org/klaw/download/klaw-1.3.1.tgz",
+ "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk="
+ },
+ "lazy-cache": {
+ "version": "https://registry.cnpmjs.org/lazy-cache/download/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
+ },
+ "lcid": {
+ "version": "https://registry.cnpmjs.org/lcid/download/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU="
+ },
+ "left-pad": {
+ "version": "https://r.cnpmjs.org/left-pad/download/left-pad-1.1.3.tgz",
+ "integrity": "sha1-YS9hwDPzqeCOk58crr7qQbbzGZo="
+ },
+ "leven": {
+ "version": "https://r.cnpmjs.org/leven/download/leven-2.1.0.tgz",
+ "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=",
+ "dev": true
+ },
+ "levn": {
+ "version": "https://registry.cnpmjs.org/levn/download/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true
+ },
+ "load-json-file": {
+ "version": "https://registry.cnpmjs.org/load-json-file/download/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA="
+ },
+ "locate-path": {
+ "version": "https://r.cnpmjs.org/locate-path/download/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "dependencies": {
+ "path-exists": {
+ "version": "https://r.cnpmjs.org/path-exists/download/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ }
+ }
+ },
+ "lodash": {
+ "version": "https://r.cnpmjs.org/lodash/download/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4="
+ },
+ "lodash._basecopy": {
+ "version": "https://registry.cnpmjs.org/lodash._basecopy/download/lodash._basecopy-3.0.1.tgz",
+ "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY="
+ },
+ "lodash._basetostring": {
+ "version": "https://registry.cnpmjs.org/lodash._basetostring/download/lodash._basetostring-3.0.1.tgz",
+ "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U="
+ },
+ "lodash._basevalues": {
+ "version": "https://registry.cnpmjs.org/lodash._basevalues/download/lodash._basevalues-3.0.0.tgz",
+ "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc="
+ },
+ "lodash._getnative": {
+ "version": "https://registry.cnpmjs.org/lodash._getnative/download/lodash._getnative-3.9.1.tgz",
+ "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U="
+ },
+ "lodash._isiterateecall": {
+ "version": "https://registry.cnpmjs.org/lodash._isiterateecall/download/lodash._isiterateecall-3.0.9.tgz",
+ "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw="
+ },
+ "lodash._reescape": {
+ "version": "https://registry.cnpmjs.org/lodash._reescape/download/lodash._reescape-3.0.0.tgz",
+ "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo="
+ },
+ "lodash._reevaluate": {
+ "version": "https://registry.cnpmjs.org/lodash._reevaluate/download/lodash._reevaluate-3.0.0.tgz",
+ "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0="
+ },
+ "lodash._reinterpolate": {
+ "version": "https://registry.cnpmjs.org/lodash._reinterpolate/download/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0="
+ },
+ "lodash._root": {
+ "version": "https://registry.cnpmjs.org/lodash._root/download/lodash._root-3.0.1.tgz",
+ "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI="
+ },
+ "lodash.escape": {
+ "version": "https://registry.cnpmjs.org/lodash.escape/download/lodash.escape-3.2.0.tgz",
+ "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg="
+ },
+ "lodash.isarguments": {
+ "version": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo="
+ },
+ "lodash.isarray": {
+ "version": "https://registry.cnpmjs.org/lodash.isarray/download/lodash.isarray-3.0.4.tgz",
+ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U="
+ },
+ "lodash.keys": {
+ "version": "https://registry.cnpmjs.org/lodash.keys/download/lodash.keys-3.1.2.tgz",
+ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo="
+ },
+ "lodash.pad": {
+ "version": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz",
+ "integrity": "sha1-QzCUmoM6fI2iLMIPaibE1Z3runA="
+ },
+ "lodash.padend": {
+ "version": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4="
+ },
+ "lodash.padstart": {
+ "version": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz",
+ "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs="
+ },
+ "lodash.restparam": {
+ "version": "https://registry.cnpmjs.org/lodash.restparam/download/lodash.restparam-3.6.1.tgz",
+ "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU="
+ },
+ "lodash.template": {
+ "version": "https://registry.cnpmjs.org/lodash.template/download/lodash.template-3.6.2.tgz",
+ "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8="
+ },
+ "lodash.templatesettings": {
+ "version": "https://registry.cnpmjs.org/lodash.templatesettings/download/lodash.templatesettings-3.1.1.tgz",
+ "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU="
+ },
+ "longest": {
+ "version": "https://registry.cnpmjs.org/longest/download/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
+ },
+ "loose-envify": {
+ "version": "https://r.cnpmjs.org/loose-envify/download/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg="
+ },
+ "lru-cache": {
+ "version": "https://r.cnpmjs.org/lru-cache/download/lru-cache-4.0.2.tgz",
+ "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4="
+ },
+ "makeerror": {
+ "version": "https://registry.cnpmjs.org/makeerror/download/makeerror-1.0.11.tgz",
+ "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw="
+ },
+ "media-typer": {
+ "version": "https://registry.cnpmjs.org/media-typer/download/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+ },
+ "merge": {
+ "version": "https://registry.cnpmjs.org/merge/download/merge-1.2.0.tgz",
+ "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo="
+ },
+ "method-override": {
+ "version": "https://r.cnpmjs.org/method-override/download/method-override-2.3.8.tgz",
+ "integrity": "sha1-F4I0v0urhp+J35REsG/GFHtEgow=",
+ "dependencies": {
+ "debug": {
+ "version": "https://r.cnpmjs.org/debug/download/debug-2.6.3.tgz",
+ "integrity": "sha1-D364wwll7AjHKsz6ATDIt5mEFB0="
+ },
+ "ms": {
+ "version": "https://r.cnpmjs.org/ms/download/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
+ },
+ "vary": {
+ "version": "https://r.cnpmjs.org/vary/download/vary-1.1.1.tgz",
+ "integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc="
+ }
+ }
+ },
+ "methods": {
+ "version": "https://registry.cnpmjs.org/methods/download/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ },
+ "micromatch": {
+ "version": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU="
+ },
+ "mime": {
+ "version": "https://registry.cnpmjs.org/mime/download/mime-1.3.4.tgz",
+ "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM="
+ },
+ "mime-db": {
+ "version": "https://r.cnpmjs.org/mime-db/download/mime-db-1.27.0.tgz",
+ "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE="
+ },
+ "mime-types": {
+ "version": "https://r.cnpmjs.org/mime-types/download/mime-types-2.1.11.tgz",
+ "integrity": "sha1-wlnEcb2oCKhdbNGTtDCl+uRHOzw=",
+ "dependencies": {
+ "mime-db": {
+ "version": "https://registry.cnpmjs.org/mime-db/download/mime-db-1.23.0.tgz",
+ "integrity": "sha1-oxtAcK2uon1zLqMzdApk0OyaZlk="
+ }
+ }
+ },
+ "min-document": {
+ "version": "https://registry.cnpmjs.org/min-document/download/min-document-2.19.0.tgz",
+ "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU="
+ },
+ "minimatch": {
+ "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q="
+ },
+ "minimist": {
+ "version": "https://registry.cnpmjs.org/minimist/download/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ },
+ "mkdirp": {
+ "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dependencies": {
+ "minimist": {
+ "version": "https://r.cnpmjs.org/minimist/download/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ }
+ }
+ },
+ "moment": {
+ "version": "https://r.cnpmjs.org/moment/download/moment-2.18.1.tgz",
+ "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8="
+ },
+ "morgan": {
+ "version": "https://registry.cnpmjs.org/morgan/download/morgan-1.6.1.tgz",
+ "integrity": "sha1-X9gYOYxoGcuiinzWZk8pL+HAu/I=",
+ "dependencies": {
+ "debug": {
+ "version": "https://r.cnpmjs.org/debug/download/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo="
+ },
+ "ms": {
+ "version": "https://r.cnpmjs.org/ms/download/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg="
+ }
+ }
+ },
+ "ms": {
+ "version": "https://r.cnpmjs.org/ms/download/ms-0.7.3.tgz",
+ "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8="
+ },
+ "multiparty": {
+ "version": "https://registry.cnpmjs.org/multiparty/download/multiparty-3.3.2.tgz",
+ "integrity": "sha1-Nd5oBNwZZD5SSfPT473GyM4wHT8=",
+ "dependencies": {
+ "isarray": {
+ "version": "https://r.cnpmjs.org/isarray/download/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ },
+ "readable-stream": {
+ "version": "https://registry.cnpmjs.org/readable-stream/download/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk="
+ },
+ "string_decoder": {
+ "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ }
+ }
+ },
+ "multipipe": {
+ "version": "https://registry.cnpmjs.org/multipipe/download/multipipe-0.1.2.tgz",
+ "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s="
+ },
+ "mute-stream": {
+ "version": "https://registry.cnpmjs.org/mute-stream/download/mute-stream-0.0.5.tgz",
+ "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA="
+ },
+ "natural-compare": {
+ "version": "https://registry.cnpmjs.org/natural-compare/download/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "negotiator": {
+ "version": "https://r.cnpmjs.org/negotiator/download/negotiator-0.5.3.tgz",
+ "integrity": "sha1-Jp1cR2gQ7JLtvntsLygxY4T5p+g="
+ },
+ "node-fetch": {
+ "version": "https://registry.cnpmjs.org/node-fetch/download/node-fetch-1.6.3.tgz",
+ "integrity": "sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ="
+ },
+ "node-int64": {
+ "version": "https://registry.cnpmjs.org/node-int64/download/node-int64-0.4.0.tgz",
+ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs="
+ },
+ "node-notifier": {
+ "version": "https://r.cnpmjs.org/node-notifier/download/node-notifier-5.1.2.tgz",
+ "integrity": "sha1-L6nhJgX6EACdRFSdb82KY93g5P8=",
+ "dev": true
+ },
+ "normalize-package-data": {
+ "version": "https://r.cnpmjs.org/normalize-package-data/download/normalize-package-data-2.3.8.tgz",
+ "integrity": "sha1-2Bntoqne29H/pWPqQHHZNngilbs="
+ },
+ "normalize-path": {
+ "version": "https://r.cnpmjs.org/normalize-path/download/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk="
+ },
+ "npmlog": {
+ "version": "https://registry.cnpmjs.org/npmlog/download/npmlog-2.0.4.tgz",
+ "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI="
+ },
+ "number-is-nan": {
+ "version": "https://registry.cnpmjs.org/number-is-nan/download/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
+ "nwmatcher": {
+ "version": "https://r.cnpmjs.org/nwmatcher/download/nwmatcher-1.3.9.tgz",
+ "integrity": "sha1-i6tIb/f6Pf0IZla76LFxFtNpLSo=",
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "https://registry.cnpmjs.org/oauth-sign/download/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
+ },
+ "object-assign": {
+ "version": "https://r.cnpmjs.org/object-assign/download/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object.omit": {
+ "version": "https://registry.cnpmjs.org/object.omit/download/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo="
+ },
+ "on-finished": {
+ "version": "https://registry.cnpmjs.org/on-finished/download/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc="
+ },
+ "on-headers": {
+ "version": "https://registry.cnpmjs.org/on-headers/download/on-headers-1.0.1.tgz",
+ "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c="
+ },
+ "once": {
+ "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E="
+ },
+ "onetime": {
+ "version": "https://registry.cnpmjs.org/onetime/download/onetime-1.1.0.tgz",
+ "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k="
+ },
+ "opn": {
+ "version": "https://registry.cnpmjs.org/opn/download/opn-3.0.3.tgz",
+ "integrity": "sha1-ttmec5n3jWXDuq/+8fsojpuFJDo="
+ },
+ "optimist": {
+ "version": "https://registry.cnpmjs.org/optimist/download/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "dependencies": {
+ "minimist": {
+ "version": "https://registry.cnpmjs.org/minimist/download/minimist-0.0.10.tgz",
+ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
+ },
+ "wordwrap": {
+ "version": "https://registry.cnpmjs.org/wordwrap/download/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
+ }
+ }
+ },
+ "optionator": {
+ "version": "https://registry.cnpmjs.org/optionator/download/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true
+ },
+ "options": {
+ "version": "https://registry.cnpmjs.org/options/download/options-0.0.6.tgz",
+ "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8="
+ },
+ "os-homedir": {
+ "version": "https://registry.cnpmjs.org/os-homedir/download/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+ },
+ "os-locale": {
+ "version": "https://registry.cnpmjs.org/os-locale/download/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk="
+ },
+ "os-tmpdir": {
+ "version": "https://registry.cnpmjs.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+ },
+ "p-limit": {
+ "version": "https://r.cnpmjs.org/p-limit/download/p-limit-1.1.0.tgz",
+ "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=",
+ "dev": true
+ },
+ "p-locate": {
+ "version": "https://r.cnpmjs.org/p-locate/download/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true
+ },
+ "parse-glob": {
+ "version": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw="
+ },
+ "parse-json": {
+ "version": "https://registry.cnpmjs.org/parse-json/download/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck="
+ },
+ "parse5": {
+ "version": "https://registry.cnpmjs.org/parse5/download/parse5-1.5.1.tgz",
+ "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=",
+ "dev": true
+ },
+ "parseurl": {
+ "version": "https://registry.cnpmjs.org/parseurl/download/parseurl-1.3.1.tgz",
+ "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY="
+ },
+ "path-exists": {
+ "version": "https://registry.cnpmjs.org/path-exists/download/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s="
+ },
+ "path-is-absolute": {
+ "version": "https://registry.cnpmjs.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-parse": {
+ "version": "https://registry.cnpmjs.org/path-parse/download/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "https://registry.cnpmjs.org/path-type/download/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE="
+ },
+ "pause": {
+ "version": "https://registry.cnpmjs.org/pause/download/pause-0.1.0.tgz",
+ "integrity": "sha1-68ikqGGf8LioGsFRPDQ0/0af23Q="
+ },
+ "pegjs": {
+ "version": "https://r.cnpmjs.org/pegjs/download/pegjs-0.10.0.tgz",
+ "integrity": "sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0="
+ },
+ "performance-now": {
+ "version": "https://r.cnpmjs.org/performance-now/download/performance-now-0.2.0.tgz",
+ "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU="
+ },
+ "pify": {
+ "version": "https://registry.cnpmjs.org/pify/download/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ },
+ "pinkie": {
+ "version": "https://registry.cnpmjs.org/pinkie/download/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
+ },
+ "pinkie-promise": {
+ "version": "https://registry.cnpmjs.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o="
+ },
+ "plist": {
+ "version": "https://registry.cnpmjs.org/plist/download/plist-1.2.0.tgz",
+ "integrity": "sha1-CEtQk93JJQbiWfh0uNmxr7jHlZM=",
+ "dependencies": {
+ "base64-js": {
+ "version": "https://r.cnpmjs.org/base64-js/download/base64-js-0.0.8.tgz",
+ "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg="
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "https://registry.cnpmjs.org/prelude-ls/download/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "preserve": {
+ "version": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks="
+ },
+ "pretty-format": {
+ "version": "https://r.cnpmjs.org/pretty-format/download/pretty-format-4.3.1.tgz",
+ "integrity": "sha1-UwvlxCs8BbNkFKeipDN6qArNDo0="
+ },
+ "private": {
+ "version": "https://registry.npmjs.org/private/-/private-0.1.7.tgz",
+ "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE="
+ },
+ "process": {
+ "version": "https://registry.cnpmjs.org/process/download/process-0.5.2.tgz",
+ "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8="
+ },
+ "process-nextick-args": {
+ "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
+ },
+ "promise": {
+ "version": "https://registry.cnpmjs.org/promise/download/promise-7.1.1.tgz",
+ "integrity": "sha1-SJZUxpJha4qlWwck+oCbt9tJxb8="
+ },
+ "prr": {
+ "version": "https://registry.cnpmjs.org/prr/download/prr-0.0.0.tgz",
+ "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo="
+ },
+ "pseudomap": {
+ "version": "https://registry.cnpmjs.org/pseudomap/download/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+ },
+ "punycode": {
+ "version": "https://registry.cnpmjs.org/punycode/download/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+ },
+ "qs": {
+ "version": "https://r.cnpmjs.org/qs/download/qs-4.0.0.tgz",
+ "integrity": "sha1-wx2bdOwn33XlQ6hseHKO2NRiNgc="
+ },
+ "random-bytes": {
+ "version": "https://registry.cnpmjs.org/random-bytes/download/random-bytes-1.0.0.tgz",
+ "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs="
+ },
+ "randomatic": {
+ "version": "https://r.cnpmjs.org/randomatic/download/randomatic-1.1.6.tgz",
+ "integrity": "sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs="
+ },
+ "range-parser": {
+ "version": "https://registry.cnpmjs.org/range-parser/download/range-parser-1.0.3.tgz",
+ "integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU="
+ },
+ "raw-body": {
+ "version": "https://registry.cnpmjs.org/raw-body/download/raw-body-2.1.7.tgz",
+ "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=",
+ "dependencies": {
+ "bytes": {
+ "version": "https://r.cnpmjs.org/bytes/download/bytes-2.4.0.tgz",
+ "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk="
+ },
+ "iconv-lite": {
+ "version": "https://r.cnpmjs.org/iconv-lite/download/iconv-lite-0.4.13.tgz",
+ "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI="
+ }
+ }
+ },
+ "react": {
+ "version": "https://r.cnpmjs.org/react/download/react-16.0.0-alpha.6.tgz",
+ "integrity": "sha1-LMsa+0QlzMEveKEjpmby5MFBrbk="
+ },
+ "react-clone-referenced-element": {
+ "version": "https://registry.cnpmjs.org/react-clone-referenced-element/download/react-clone-referenced-element-1.0.1.tgz",
+ "integrity": "sha1-K7qMaUBMXkqUQ5hgC8xMlB+GBoI="
+ },
+ "react-deep-force-update": {
+ "version": "https://registry.cnpmjs.org/react-deep-force-update/download/react-deep-force-update-1.0.1.tgz",
+ "integrity": "sha1-+RG1vh0qb+OHUH3W6adnqikktMc="
+ },
+ "react-devtools-core": {
+ "version": "https://r.cnpmjs.org/react-devtools-core/download/react-devtools-core-2.1.3.tgz",
+ "integrity": "sha1-1ciR1A2XP6TW+Vu/NR+dB5KuzEw=",
+ "dependencies": {
+ "ws": {
+ "version": "https://r.cnpmjs.org/ws/download/ws-2.3.1.tgz",
+ "integrity": "sha1-a5Sz5EfLajY/eF6vlK9jWejoHIA="
+ }
+ }
+ },
+ "react-native": {
+ "version": "https://r.cnpmjs.org/react-native/download/react-native-0.44.0.tgz",
+ "integrity": "sha1-BkJ6MAU/LVVcYP4LmvzGx3jbCd4="
+ },
+ "react-native-xinge-push": {
+ "version": "file:.."
+ },
+ "react-proxy": {
+ "version": "https://registry.cnpmjs.org/react-proxy/download/react-proxy-1.1.8.tgz",
+ "integrity": "sha1-nb/Z2SdSjDqp9ETkVYw3gwq4wmo="
+ },
+ "react-test-renderer": {
+ "version": "https://r.cnpmjs.org/react-test-renderer/download/react-test-renderer-16.0.0-alpha.6.tgz",
+ "integrity": "sha1-wDLe8NyDGc7jnKpOQ3OmABnLN4Y=",
+ "dev": true
+ },
+ "react-timer-mixin": {
+ "version": "https://registry.cnpmjs.org/react-timer-mixin/download/react-timer-mixin-0.13.3.tgz",
+ "integrity": "sha1-Dai5+AfsB9w+hU0ILHN8ZWBbPSI="
+ },
+ "react-transform-hmr": {
+ "version": "https://registry.cnpmjs.org/react-transform-hmr/download/react-transform-hmr-1.0.4.tgz",
+ "integrity": "sha1-4aQL0Krvxy6N/Xp82gmvhQZjl7s="
+ },
+ "read-pkg": {
+ "version": "https://registry.cnpmjs.org/read-pkg/download/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg="
+ },
+ "read-pkg-up": {
+ "version": "https://registry.cnpmjs.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI="
+ },
+ "readable-stream": {
+ "version": "https://r.cnpmjs.org/readable-stream/download/readable-stream-2.2.9.tgz",
+ "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g="
+ },
+ "readline2": {
+ "version": "https://registry.cnpmjs.org/readline2/download/readline2-1.0.1.tgz",
+ "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU="
+ },
+ "rebound": {
+ "version": "https://registry.cnpmjs.org/rebound/download/rebound-0.0.13.tgz",
+ "integrity": "sha1-SiJSVMr32nVnl7GcWBe/enlB+sE="
+ },
+ "regenerate": {
+ "version": "https://r.cnpmjs.org/regenerate/download/regenerate-1.3.2.tgz",
+ "integrity": "sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA="
+ },
+ "regenerator-runtime": {
+ "version": "https://r.cnpmjs.org/regenerator-runtime/download/regenerator-runtime-0.9.6.tgz",
+ "integrity": "sha1-0z65XQ0gAaS+OWWXB8UbDLcc4Ck="
+ },
+ "regenerator-transform": {
+ "version": "https://r.cnpmjs.org/regenerator-transform/download/regenerator-transform-0.9.11.tgz",
+ "integrity": "sha1-On0GdSDLe3F2dp61/4aGkb7+EoM="
+ },
+ "regex-cache": {
+ "version": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz",
+ "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU="
+ },
+ "regexpu-core": {
+ "version": "https://registry.cnpmjs.org/regexpu-core/download/regexpu-core-2.0.0.tgz",
+ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA="
+ },
+ "regjsgen": {
+ "version": "https://registry.cnpmjs.org/regjsgen/download/regjsgen-0.2.0.tgz",
+ "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc="
+ },
+ "regjsparser": {
+ "version": "https://registry.cnpmjs.org/regjsparser/download/regjsparser-0.1.5.tgz",
+ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+ "dependencies": {
+ "jsesc": {
+ "version": "https://registry.cnpmjs.org/jsesc/download/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
+ }
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "https://r.cnpmjs.org/remove-trailing-separator/download/remove-trailing-separator-1.0.1.tgz",
+ "integrity": "sha1-YV67lq9VlVLUv0BXyENtSGq2PMQ="
+ },
+ "repeat-element": {
+ "version": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo="
+ },
+ "repeat-string": {
+ "version": "https://registry.cnpmjs.org/repeat-string/download/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
+ "repeating": {
+ "version": "https://registry.cnpmjs.org/repeating/download/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo="
+ },
+ "replace-ext": {
+ "version": "https://registry.cnpmjs.org/replace-ext/download/replace-ext-0.0.1.tgz",
+ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ="
+ },
+ "request": {
+ "version": "https://r.cnpmjs.org/request/download/request-2.81.0.tgz",
+ "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
+ "dependencies": {
+ "qs": {
+ "version": "https://r.cnpmjs.org/qs/download/qs-6.4.0.tgz",
+ "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM="
+ }
+ }
+ },
+ "require-directory": {
+ "version": "https://registry.cnpmjs.org/require-directory/download/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+ },
+ "require-main-filename": {
+ "version": "https://registry.cnpmjs.org/require-main-filename/download/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE="
+ },
+ "resolve": {
+ "version": "https://r.cnpmjs.org/resolve/download/resolve-1.3.3.tgz",
+ "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=",
+ "dev": true
+ },
+ "response-time": {
+ "version": "https://r.cnpmjs.org/response-time/download/response-time-2.3.2.tgz",
+ "integrity": "sha1-/6cbq5UtYvfB1Jt0NDVfvGjf/Fo=",
+ "dependencies": {
+ "depd": {
+ "version": "https://registry.cnpmjs.org/depd/download/depd-1.1.0.tgz",
+ "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM="
+ }
+ }
+ },
+ "restore-cursor": {
+ "version": "https://registry.cnpmjs.org/restore-cursor/download/restore-cursor-1.0.1.tgz",
+ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE="
+ },
+ "right-align": {
+ "version": "https://registry.cnpmjs.org/right-align/download/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8="
+ },
+ "rimraf": {
+ "version": "https://r.cnpmjs.org/rimraf/download/rimraf-2.6.1.tgz",
+ "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0="
+ },
+ "rndm": {
+ "version": "https://registry.cnpmjs.org/rndm/download/rndm-1.2.0.tgz",
+ "integrity": "sha1-8z/pz7Urv9UgqhgyO8ZdsRCht2w="
+ },
+ "run-async": {
+ "version": "https://registry.cnpmjs.org/run-async/download/run-async-0.1.0.tgz",
+ "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k="
+ },
+ "rx-lite": {
+ "version": "https://registry.cnpmjs.org/rx-lite/download/rx-lite-3.1.2.tgz",
+ "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI="
+ },
+ "safe-buffer": {
+ "version": "https://r.cnpmjs.org/safe-buffer/download/safe-buffer-5.0.1.tgz",
+ "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c="
+ },
+ "sane": {
+ "version": "https://registry.npmjs.org/sane/-/sane-1.4.1.tgz",
+ "integrity": "sha1-iPdj10BA9fDCVrYWPbOZvxEKxxU=",
+ "dependencies": {
+ "bser": {
+ "version": "https://r.cnpmjs.org/bser/download/bser-1.0.2.tgz",
+ "integrity": "sha1-OBEWlwsqbe6lZG3RXdcnhES1YWk="
+ },
+ "fb-watchman": {
+ "version": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-1.9.2.tgz",
+ "integrity": "sha1-okz0eCf4LTj7Waaa1wt247auc4M="
+ }
+ }
+ },
+ "sax": {
+ "version": "https://registry.cnpmjs.org/sax/download/sax-1.1.6.tgz",
+ "integrity": "sha1-XWFr6KXmB9VOEUr65Vt+ry/MMkA="
+ },
+ "semver": {
+ "version": "https://r.cnpmjs.org/semver/download/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8="
+ },
+ "send": {
+ "version": "https://r.cnpmjs.org/send/download/send-0.13.2.tgz",
+ "integrity": "sha1-dl52B8gFVFK7pvCwUllTUJhgNt4=",
+ "dependencies": {
+ "debug": {
+ "version": "https://r.cnpmjs.org/debug/download/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo="
+ },
+ "depd": {
+ "version": "https://registry.cnpmjs.org/depd/download/depd-1.1.0.tgz",
+ "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM="
+ },
+ "ms": {
+ "version": "https://r.cnpmjs.org/ms/download/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg="
+ },
+ "statuses": {
+ "version": "https://registry.cnpmjs.org/statuses/download/statuses-1.2.1.tgz",
+ "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg="
+ }
+ }
+ },
+ "serve-favicon": {
+ "version": "https://r.cnpmjs.org/serve-favicon/download/serve-favicon-2.3.2.tgz",
+ "integrity": "sha1-3UGeJo3gEqtysxnTN/IQUBP5OB8=",
+ "dependencies": {
+ "ms": {
+ "version": "https://r.cnpmjs.org/ms/download/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
+ }
+ }
+ },
+ "serve-index": {
+ "version": "https://registry.cnpmjs.org/serve-index/download/serve-index-1.7.3.tgz",
+ "integrity": "sha1-egV/xu4o3GP2RWbl+lexEahq7NI=",
+ "dependencies": {
+ "debug": {
+ "version": "https://r.cnpmjs.org/debug/download/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo="
+ },
+ "ms": {
+ "version": "https://r.cnpmjs.org/ms/download/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg="
+ }
+ }
+ },
+ "serve-static": {
+ "version": "https://registry.cnpmjs.org/serve-static/download/serve-static-1.10.3.tgz",
+ "integrity": "sha1-zlpuzTEB/tXsCYJ9rCKpwpv7BTU="
+ },
+ "set-blocking": {
+ "version": "https://registry.cnpmjs.org/set-blocking/download/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ },
+ "setimmediate": {
+ "version": "https://r.cnpmjs.org/setimmediate/download/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+ },
+ "shell-quote": {
+ "version": "https://r.cnpmjs.org/shell-quote/download/shell-quote-1.6.1.tgz",
+ "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c="
+ },
+ "shellwords": {
+ "version": "https://registry.cnpmjs.org/shellwords/download/shellwords-0.1.0.tgz",
+ "integrity": "sha1-Zq/Ue2oSky2Qccv9mKUueFzQuhQ=",
+ "dev": true
+ },
+ "simple-plist": {
+ "version": "https://r.cnpmjs.org/simple-plist/download/simple-plist-0.2.1.tgz",
+ "integrity": "sha1-cXZts1IyaSjPOoByQrp2IyJjZyM=",
+ "dependencies": {
+ "base64-js": {
+ "version": "https://r.cnpmjs.org/base64-js/download/base64-js-1.1.2.tgz",
+ "integrity": "sha1-1kAMrBxMZgl22Q0HoENR2JOV9eg="
+ },
+ "plist": {
+ "version": "https://r.cnpmjs.org/plist/download/plist-2.0.1.tgz",
+ "integrity": "sha1-CjLKlIGxw2TpLhjcVch23p0B2os="
+ },
+ "xmlbuilder": {
+ "version": "https://r.cnpmjs.org/xmlbuilder/download/xmlbuilder-8.2.2.tgz",
+ "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M="
+ }
+ }
+ },
+ "slash": {
+ "version": "https://registry.cnpmjs.org/slash/download/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
+ },
+ "slide": {
+ "version": "https://registry.cnpmjs.org/slide/download/slide-1.1.6.tgz",
+ "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc="
+ },
+ "sntp": {
+ "version": "https://registry.cnpmjs.org/sntp/download/sntp-1.0.9.tgz",
+ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg="
+ },
+ "source-map": {
+ "version": "https://registry.cnpmjs.org/source-map/download/source-map-0.5.6.tgz",
+ "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI="
+ },
+ "source-map-support": {
+ "version": "https://r.cnpmjs.org/source-map-support/download/source-map-support-0.4.15.tgz",
+ "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E="
+ },
+ "sparkles": {
+ "version": "https://registry.cnpmjs.org/sparkles/download/sparkles-1.0.0.tgz",
+ "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM="
+ },
+ "spdx-correct": {
+ "version": "https://registry.cnpmjs.org/spdx-correct/download/spdx-correct-1.0.2.tgz",
+ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A="
+ },
+ "spdx-expression-parse": {
+ "version": "https://registry.cnpmjs.org/spdx-expression-parse/download/spdx-expression-parse-1.0.4.tgz",
+ "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw="
+ },
+ "spdx-license-ids": {
+ "version": "https://registry.cnpmjs.org/spdx-license-ids/download/spdx-license-ids-1.2.2.tgz",
+ "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc="
+ },
+ "sprintf-js": {
+ "version": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "sshpk": {
+ "version": "https://r.cnpmjs.org/sshpk/download/sshpk-1.13.0.tgz",
+ "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=",
+ "dependencies": {
+ "assert-plus": {
+ "version": "https://registry.cnpmjs.org/assert-plus/download/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ }
+ }
+ },
+ "stacktrace-parser": {
+ "version": "https://registry.cnpmjs.org/stacktrace-parser/download/stacktrace-parser-0.1.4.tgz",
+ "integrity": "sha1-ATl5IuX2Ls8whFUiyVxP4dJefU4="
+ },
+ "statuses": {
+ "version": "https://r.cnpmjs.org/statuses/download/statuses-1.3.1.tgz",
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4="
+ },
+ "stream-buffers": {
+ "version": "https://r.cnpmjs.org/stream-buffers/download/stream-buffers-2.2.0.tgz",
+ "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ="
+ },
+ "stream-counter": {
+ "version": "https://registry.cnpmjs.org/stream-counter/download/stream-counter-0.2.0.tgz",
+ "integrity": "sha1-3tJmVWMZyLDiIoErnPOyb6fZR94=",
+ "dependencies": {
+ "isarray": {
+ "version": "https://r.cnpmjs.org/isarray/download/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ },
+ "readable-stream": {
+ "version": "https://registry.cnpmjs.org/readable-stream/download/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk="
+ },
+ "string_decoder": {
+ "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "https://r.cnpmjs.org/string_decoder/download/string_decoder-1.0.0.tgz",
+ "integrity": "sha1-8G9BFXtmTYYGn4S9vcmw2KsoFmc="
+ },
+ "string-length": {
+ "version": "https://registry.cnpmjs.org/string-length/download/string-length-1.0.1.tgz",
+ "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M="
+ },
+ "stringstream": {
+ "version": "https://registry.cnpmjs.org/stringstream/download/stringstream-0.0.5.tgz",
+ "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg="
+ },
+ "strip-ansi": {
+ "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8="
+ },
+ "strip-bom": {
+ "version": "https://registry.cnpmjs.org/strip-bom/download/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4="
+ },
+ "supports-color": {
+ "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ },
+ "symbol-tree": {
+ "version": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz",
+ "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=",
+ "dev": true
+ },
+ "temp": {
+ "version": "https://registry.cnpmjs.org/temp/download/temp-0.8.3.tgz",
+ "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=",
+ "dependencies": {
+ "rimraf": {
+ "version": "https://registry.cnpmjs.org/rimraf/download/rimraf-2.2.8.tgz",
+ "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI="
+ }
+ }
+ },
+ "test-exclude": {
+ "version": "https://r.cnpmjs.org/test-exclude/download/test-exclude-4.1.0.tgz",
+ "integrity": "sha1-BMpwtzkN04yY1KADoXOAbKeZHJE=",
+ "dev": true
+ },
+ "throat": {
+ "version": "https://registry.cnpmjs.org/throat/download/throat-3.0.0.tgz",
+ "integrity": "sha1-58ZMhny7OEXxCHdkL3tgBVuOwNY="
+ },
+ "through": {
+ "version": "https://registry.cnpmjs.org/through/download/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ },
+ "through2": {
+ "version": "https://r.cnpmjs.org/through2/download/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4="
+ },
+ "time-stamp": {
+ "version": "https://registry.cnpmjs.org/time-stamp/download/time-stamp-1.0.1.tgz",
+ "integrity": "sha1-n0vSNVnJNllm8zAtu6KwfGuZsVE="
+ },
+ "tmpl": {
+ "version": "https://registry.cnpmjs.org/tmpl/download/tmpl-1.0.4.tgz",
+ "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE="
+ },
+ "to-fast-properties": {
+ "version": "https://r.cnpmjs.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc="
+ },
+ "topo": {
+ "version": "https://registry.cnpmjs.org/topo/download/topo-1.1.0.tgz",
+ "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU="
+ },
+ "tough-cookie": {
+ "version": "https://registry.cnpmjs.org/tough-cookie/download/tough-cookie-2.3.2.tgz",
+ "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo="
+ },
+ "tr46": {
+ "version": "https://registry.cnpmjs.org/tr46/download/tr46-0.0.3.tgz",
+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "https://r.cnpmjs.org/trim-right/download/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
+ },
+ "tsscmp": {
+ "version": "https://registry.cnpmjs.org/tsscmp/download/tsscmp-1.0.5.tgz",
+ "integrity": "sha1-fcSjOvcVgatDN9qR2FylQn69mpc="
+ },
+ "tunnel-agent": {
+ "version": "https://r.cnpmjs.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0="
+ },
+ "tweetnacl": {
+ "version": "https://r.cnpmjs.org/tweetnacl/download/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "optional": true
+ },
+ "type-check": {
+ "version": "https://registry.cnpmjs.org/type-check/download/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true
+ },
+ "type-is": {
+ "version": "https://r.cnpmjs.org/type-is/download/type-is-1.6.15.tgz",
+ "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=",
+ "dependencies": {
+ "mime-types": {
+ "version": "https://r.cnpmjs.org/mime-types/download/mime-types-2.1.15.tgz",
+ "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0="
+ }
+ }
+ },
+ "typedarray": {
+ "version": "https://registry.cnpmjs.org/typedarray/download/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+ },
+ "ua-parser-js": {
+ "version": "https://r.cnpmjs.org/ua-parser-js/download/ua-parser-js-0.7.12.tgz",
+ "integrity": "sha1-BMgamb3V3FImPqKdJMa/jUgYpLs="
+ },
+ "uglify-js": {
+ "version": "https://r.cnpmjs.org/uglify-js/download/uglify-js-2.7.5.tgz",
+ "integrity": "sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=",
+ "dependencies": {
+ "async": {
+ "version": "https://registry.cnpmjs.org/async/download/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E="
+ },
+ "yargs": {
+ "version": "https://registry.cnpmjs.org/yargs/download/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E="
+ }
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "https://registry.cnpmjs.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc="
+ },
+ "uid-safe": {
+ "version": "https://r.cnpmjs.org/uid-safe/download/uid-safe-2.1.4.tgz",
+ "integrity": "sha1-Otbzg2jG1MjHXsF2I/t5qh0HHYE="
+ },
+ "ultron": {
+ "version": "https://r.cnpmjs.org/ultron/download/ultron-1.1.0.tgz",
+ "integrity": "sha1-sHoualQagV/Go0zNRTO67DB8qGQ="
+ },
+ "unpipe": {
+ "version": "https://registry.cnpmjs.org/unpipe/download/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+ },
+ "util-deprecate": {
+ "version": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "utils-merge": {
+ "version": "https://registry.cnpmjs.org/utils-merge/download/utils-merge-1.0.0.tgz",
+ "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg="
+ },
+ "uuid": {
+ "version": "https://r.cnpmjs.org/uuid/download/uuid-3.0.1.tgz",
+ "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE="
+ },
+ "validate-npm-package-license": {
+ "version": "https://registry.cnpmjs.org/validate-npm-package-license/download/validate-npm-package-license-3.0.1.tgz",
+ "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w="
+ },
+ "vary": {
+ "version": "https://registry.cnpmjs.org/vary/download/vary-1.0.1.tgz",
+ "integrity": "sha1-meSYFWaihhGN+yuBc1ffeZM3bRA="
+ },
+ "verror": {
+ "version": "https://registry.cnpmjs.org/verror/download/verror-1.3.6.tgz",
+ "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw="
+ },
+ "vhost": {
+ "version": "https://registry.cnpmjs.org/vhost/download/vhost-3.0.2.tgz",
+ "integrity": "sha1-L7HezUxGaqiLD5NBrzPcGv8keNU="
+ },
+ "vinyl": {
+ "version": "https://registry.cnpmjs.org/vinyl/download/vinyl-0.5.3.tgz",
+ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4="
+ },
+ "walker": {
+ "version": "https://registry.cnpmjs.org/walker/download/walker-1.0.7.tgz",
+ "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs="
+ },
+ "watch": {
+ "version": "https://registry.cnpmjs.org/watch/download/watch-0.10.0.tgz",
+ "integrity": "sha1-d3mLLaD5kQ1ZXxrOWwwiWFIfIdw="
+ },
+ "webidl-conversions": {
+ "version": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.1.tgz",
+ "integrity": "sha1-gBWherg+fhsxFjhIas6B2mziBqA=",
+ "dev": true
+ },
+ "whatwg-encoding": {
+ "version": "https://registry.cnpmjs.org/whatwg-encoding/download/whatwg-encoding-1.0.1.tgz",
+ "integrity": "sha1-PGxFGhmO567FWx7GHQkgxngBpfQ=",
+ "dev": true,
+ "dependencies": {
+ "iconv-lite": {
+ "version": "https://r.cnpmjs.org/iconv-lite/download/iconv-lite-0.4.13.tgz",
+ "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=",
+ "dev": true
+ }
+ }
+ },
+ "whatwg-fetch": {
+ "version": "https://r.cnpmjs.org/whatwg-fetch/download/whatwg-fetch-1.1.1.tgz",
+ "integrity": "sha1-rDydOfMgxtzlM5lp0FTvQ90zMxk="
+ },
+ "whatwg-url": {
+ "version": "https://r.cnpmjs.org/whatwg-url/download/whatwg-url-4.7.1.tgz",
+ "integrity": "sha1-303C4/JaY7H6WzLtbWwTlXfWkN4=",
+ "dev": true,
+ "dependencies": {
+ "webidl-conversions": {
+ "version": "https://registry.cnpmjs.org/webidl-conversions/download/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
+ "dev": true
+ }
+ }
+ },
+ "which": {
+ "version": "https://r.cnpmjs.org/which/download/which-1.2.14.tgz",
+ "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU="
+ },
+ "which-module": {
+ "version": "https://registry.cnpmjs.org/which-module/download/which-module-1.0.0.tgz",
+ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8="
+ },
+ "window-size": {
+ "version": "https://r.cnpmjs.org/window-size/download/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
+ },
+ "wordwrap": {
+ "version": "https://registry.cnpmjs.org/wordwrap/download/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="
+ },
+ "worker-farm": {
+ "version": "https://registry.cnpmjs.org/worker-farm/download/worker-farm-1.3.1.tgz",
+ "integrity": "sha1-QzMRK7SbF6oFC4eJXKayys9A5f8="
+ },
+ "wrap-ansi": {
+ "version": "https://r.cnpmjs.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU="
+ },
+ "wrappy": {
+ "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "write-file-atomic": {
+ "version": "https://r.cnpmjs.org/write-file-atomic/download/write-file-atomic-1.3.4.tgz",
+ "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8="
+ },
+ "ws": {
+ "version": "https://r.cnpmjs.org/ws/download/ws-1.1.4.tgz",
+ "integrity": "sha1-V/QNA2gy5fUFVmKjl8Tedu1mv2E=",
+ "dependencies": {
+ "ultron": {
+ "version": "https://registry.cnpmjs.org/ultron/download/ultron-1.0.2.tgz",
+ "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po="
+ }
+ }
+ },
+ "xcode": {
+ "version": "https://r.cnpmjs.org/xcode/download/xcode-0.9.3.tgz",
+ "integrity": "sha1-kQqJwWrubMC0LKgFptC0z4chHPM="
+ },
+ "xml-name-validator": {
+ "version": "https://registry.cnpmjs.org/xml-name-validator/download/xml-name-validator-2.0.1.tgz",
+ "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=",
+ "dev": true
+ },
+ "xmlbuilder": {
+ "version": "https://registry.cnpmjs.org/xmlbuilder/download/xmlbuilder-4.0.0.tgz",
+ "integrity": "sha1-mLj2UcowqmJANvEn0RzGbce5B6M=",
+ "dependencies": {
+ "lodash": {
+ "version": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y="
+ }
+ }
+ },
+ "xmldoc": {
+ "version": "https://registry.cnpmjs.org/xmldoc/download/xmldoc-0.4.0.tgz",
+ "integrity": "sha1-0lciS+g5PqrL+DfvIn/Y7CWzaIg="
+ },
+ "xmldom": {
+ "version": "https://r.cnpmjs.org/xmldom/download/xmldom-0.1.27.tgz",
+ "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk="
+ },
+ "xpipe": {
+ "version": "https://r.cnpmjs.org/xpipe/download/xpipe-1.0.5.tgz",
+ "integrity": "sha1-jdi/Rfw/f1Xw4FS4ePQ6YmFNr98="
+ },
+ "xtend": {
+ "version": "https://registry.cnpmjs.org/xtend/download/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
+ },
+ "y18n": {
+ "version": "https://registry.cnpmjs.org/y18n/download/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
+ },
+ "yallist": {
+ "version": "https://r.cnpmjs.org/yallist/download/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+ },
+ "yargs": {
+ "version": "https://r.cnpmjs.org/yargs/download/yargs-6.6.0.tgz",
+ "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=",
+ "dependencies": {
+ "camelcase": {
+ "version": "https://registry.cnpmjs.org/camelcase/download/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo="
+ },
+ "cliui": {
+ "version": "https://registry.cnpmjs.org/cliui/download/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0="
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "https://r.cnpmjs.org/yargs-parser/download/yargs-parser-4.2.1.tgz",
+ "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
+ "dependencies": {
+ "camelcase": {
+ "version": "https://registry.cnpmjs.org/camelcase/download/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo="
+ }
+ }
+ }
+ }
+}
diff --git a/example/package.json b/example/package.json
new file mode 100644
index 0000000..09ba497
--- /dev/null
+++ b/example/package.json
@@ -0,0 +1,23 @@
+{
+ "name": "example",
+ "version": "0.0.1",
+ "private": true,
+ "scripts": {
+ "start": "node node_modules/react-native/local-cli/cli.js start",
+ "test": "jest"
+ },
+ "dependencies": {
+ "react": "16.0.0-alpha.6",
+ "react-native": "0.44.0",
+ "react-native-xinge-push": "file:.."
+ },
+ "devDependencies": {
+ "babel-jest": "19.0.0",
+ "babel-preset-react-native": "1.9.1",
+ "jest": "19.0.2",
+ "react-test-renderer": "16.0.0-alpha.6"
+ },
+ "jest": {
+ "preset": "react-native"
+ }
+}
diff --git a/index.js b/index.js
new file mode 100644
index 0000000..8684831
--- /dev/null
+++ b/index.js
@@ -0,0 +1,163 @@
+/**
+ * 信鸽推送
+ * Created by Jeepeng on 16/8/3.
+ */
+
+import {
+ Platform,
+ NativeModules,
+ NativeEventEmitter,
+} from 'react-native';
+
+let { XGPushManager } = NativeModules;
+let XGNativeEventEmitter = new NativeEventEmitter(XGPushManager);
+
+let _handlers = new Map();
+
+const EventMapping = Platform.select({
+ android: {
+ register: 'remoteNotificationsRegistered',
+ notification: 'remoteNotificationReceived',
+ localNotification: 'localNotificationReceived',
+ message: 'messageReceived'
+ },
+ ios: {
+ register: 'remoteNotificationsRegistered',
+ notification: 'remoteNotificationReceived',
+ localNotification: 'localNotificationReceived',
+ },
+});
+
+class XGPush {
+
+ static init(accessId, accessKey) {
+ let accessIdNum = Number(accessId);
+ if (isNaN(accessIdNum)) {
+ console.error(`[XGPush init] accessId is not a number!`);
+ } else {
+ XGPushManager.startApp(accessIdNum, accessKey);
+ }
+ }
+
+ static register(account) {
+ if (Platform.OS === 'ios') {
+ XGPushManager.setAccount(account);
+ return XGPushManager.requestPermissions({
+ alert: true,
+ badge: true,
+ sound: true
+ });
+ } else {
+ return XGPushManager.registerPush(account);
+ }
+ }
+
+ /**
+ * ios only
+ * @param deviceToken
+ * @returns {*}
+ */
+ static registerForXG(deviceToken) {
+ if (Platform.OS === 'ios') {
+ return XGPushManager.registerDevice(deviceToken, null);
+ } else {
+ return new Promise((resolve, reject) => {
+ //reject('ios only');
+ });
+ }
+ }
+
+ static setTag(tagName) {
+ return XGPushManager.setTag(tagName);
+ }
+
+ static deleteTag(tagName) {
+ if (Platform.OS === 'ios') {
+ return XGPushManager.delTag(tagName);
+ } else {
+ return XGPushManager.deleteTag(tagName);
+ }
+ }
+
+ static unRegister() {
+ if (Platform.OS === 'ios') {
+ return XGPushManager.unRegisterDevice();
+ } else {
+ return XGPushManager.unregisterPush();
+ }
+
+ }
+
+ static setApplicationIconBadgeNumber(number) {
+ if (Platform.OS === 'ios') {
+ XGPushManager.setApplicationIconBadgeNumber(number);
+ }
+ }
+
+ static getApplicationIconBadgeNumber(callback) {
+ if (Platform.OS === 'ios') {
+ XGPushManager.getApplicationIconBadgeNumber(callback);
+ }
+ }
+
+ static checkPermissions(callback) {
+ if (Platform.OS === 'ios') {
+ return XGPushManager.checkPermissions(callback);
+ }
+ }
+
+ static getInitialNotification() {
+ return XGPushManager.getInitialNotification();
+ }
+
+ static onLocalNotification(callback) {
+ this.addEventListener('localNotification', callback)
+ }
+
+ /**
+ * 透传消息 Android only
+ */
+ static onMessage(callback) {
+ if (Platform.OS === 'android') {
+ this.addEventListener('message', callback)
+ }
+ }
+
+ static addEventListener(eventType, callback) {
+ let event = EventMapping[eventType];
+ if (!event) {
+ console.warn('XGPush only supports `notification`, `register` and `localNotification` events');
+ return;
+ }
+ let listener = XGNativeEventEmitter.addListener(event, (data) => {
+ let result = data;
+ if (eventType === 'register') {
+ result = data['deviceToken'];
+ }
+ callback(result);
+ });
+ _handlers.set(callback, listener);
+ }
+
+ static removeEventListener(eventType, callback) {
+ if (!EventMapping[eventType]) {
+ console.warn('XGPush only supports `notification`, `register` and `localNotification` events');
+ return;
+ }
+ let listener = _handlers.get(callback);
+ if (listener) {
+ listener.remove();
+ _handlers.delete(callback);
+ }
+ }
+
+ static enableDebug(isDebug = true) {
+ XGPushManager.enableDebug(isDebug);
+ }
+
+ static isEnableDebug() {
+ return XGPushManager.isEnableDebug();
+ }
+}
+
+export default XGPush;
diff --git a/ios/SDK/XGPush.h b/ios/SDK/XGPush.h
new file mode 100644
index 0000000..91738ee
--- /dev/null
+++ b/ios/SDK/XGPush.h
@@ -0,0 +1,170 @@
+//
+// XGPush.h
+// XG-SDK
+//
+// Created by xiangchen on 13-10-18.
+// Copyright (c) 2013年 mta. All rights reserved.
+//
+
+#import
+#import
+
+@interface XGPush : NSObject
+
+/**
+ 初始化信鸽
+
+ @param appId 通过前台申请的应用ID
+ @param appKey 通过前台申请的appKey
+ */
++(void)startApp:(uint32_t)appId appKey:(nonnull NSString *)appKey;
+
+/**
+ 判断当前是否是已注销状态
+
+ @return 是否已经注销推送
+ */
++(BOOL)isUnRegisterStatus;
+
+
+/**
+ 查询推送是否打开(以弹窗为准)
+
+ @param result 查询回调.若推送打开,回调参数为 YES, 否则为 NO
+ */
++(void)isPushOn:(nullable void(^)(BOOL isOn)) result;
+
+/**
+ 注册设备
+
+ @param deviceToken 通过app delegate的didRegisterForRemoteNotificationsWithDeviceToken回调的获取
+ @param successCallback 成功回调
+ @param errorCallback 失败回调
+ @return 获取的 deviceToken 字符串
+ */
++(nullable NSString *)registerDevice:(nonnull NSData *)deviceToken successCallback:(nullable void (^)(void)) successCallback errorCallback:(nullable void (^)(void)) errorCallback;
+
+/**
+ 注册设备并且设置账号
+
+ @param deviceToken 通过app delegate的didRegisterForRemoteNotificationsWithDeviceToken回调的获取
+ @param account 需要设置的账号,长度为2个字节以上,不要使用"test","123456"这种过于简单的字符串,
+ 若不想设置账号,请传入nil
+ @param successCallback 成功回调
+ @param errorCallback 失败回调
+ @return 获取的 deviceToken 字符串
+ */
++(nullable NSString *)registerDevice:(nonnull NSData *)deviceToken account:(nullable NSString *)account successCallback:(nullable void (^)(void)) successCallback errorCallback:(nullable void (^)(void)) errorCallback;
+
+
+/**
+ 注册设备并且设置账号, 字符串 token 版本
+
+ @param deviceToken NSString *类型的 token
+ @param account 需要设置的账号,若不想设置账号,请传入 nil
+ @param successCallback 成功回调
+ @param errorCallback 失败回调
+ @return 获取的 deviceToken 字符串
+ */
++(nullable NSString *)registerDeviceStr:(nonnull NSString *)deviceToken account:(nullable NSString *) account successCallback:(nullable void(^)(void)) successCallback errorCallback:(nullable void(^)(void))errorCallback;
+
+/**
+ 注销设备,设备不再进行推送
+
+ @param successCallback 成功回调
+ @param errorCallback 失败回调
+ */
++(void)unRegisterDevice:(nullable void (^)(void)) successCallback errorCallback:(nullable void (^)(void)) errorCallback;
+
+/**
+ 设置设备的帐号. 设置账号前需要调用一次registerDevice
+
+ @param account 需要设置的账号,长度为2个字节以上,不要使用"test","123456"这种过于简单的字符串,
+ 若不想设置账号,请传入nil
+ @param successCallback 成功回调
+ @param errorCallback 失败回调
+ */
++(void)setAccount:(nonnull NSString *)account successCallback:(nullable void(^)(void)) successCallback errorCallback:(nullable void(^)(void)) errorCallback;
+
+
+/**
+ 删除已经设置的账号
+
+ @param successCallback 成功回调
+ @param errorCallback 失败回调
+ */
++(void)delAccount:(nullable void(^)(void)) successCallback errorCallback:(nullable void(^)(void)) errorCallback;
+
+/**
+ 设置 tag
+
+ @param tag 需要设置的 tag
+ @param successCallback 成功回调
+ @param errorCallback 失败回调
+ */
++(void)setTag:(nonnull NSString *)tag successCallback:(nullable void (^)(void)) successCallback errorCallback:(nullable void (^)(void)) errorCallback;
+
+
+/**
+ 删除tag
+
+ @param tag 需要删除的 tag
+ @param successCallback 成功回调
+ @param errorCallback 失败回调
+ */
++(void)delTag:(nonnull NSString *)tag successCallback:(nullable void (^)(void)) successCallback errorCallback:(nullable void (^)(void)) errorCallback;
+
+/**
+ 在didFinishLaunchingWithOptions中调用,用于推送反馈.(app没有运行时,点击推送启动时)
+
+ @param launchOptions didFinishLaunchingWithOptions中的userinfo参数
+ @param successCallback 成功回调
+ @param errorCallback 失败回调
+ */
++(void)handleLaunching:(nonnull NSDictionary *)launchOptions successCallback:(nullable void (^)(void)) successCallback errorCallback:(nullable void (^)(void)) errorCallback;
+
+/**
+ 在didReceiveRemoteNotification中调用,用于推送反馈。(app在运行时)
+
+ @param userInfo 苹果 apns 的推送信息
+ @param successCallback 成功回调
+ @param errorCallback 失败回调
+ */
++(void)handleReceiveNotification:(nonnull NSDictionary *)userInfo successCallback:(nullable void (^)(void)) successCallback errorCallback:(nullable void (^)(void)) errorCallback;
+
+
+/**
+ * 获取userInfo里的bid信息(bid:信鸽的推送消息id)
+ * @param userInfo 苹果apns的推送信息
+ * @return none
+ */
++(nullable NSString *)getBid:(nonnull NSDictionary *)userInfo;
+
+/**
+ * deviceToken类型转换
+ * @param deviceToken NSData格式的deviceToken
+ * @return none
+ */
++(nullable NSString *)getDeviceToken:(nonnull NSData *)deviceToken;
+
+
+// 以下接口已经不在维护,请尽快替换
++(void)localNotification:(nonnull NSDate *)fireDate alertBody:(nonnull NSString *)alertBody badge:(int)badge alertAction:(nonnull NSString *)alertAction userInfo:(nonnull NSDictionary *)userInfo DEPRECATED_MSG_ATTRIBUTE("此方法已经废弃,请使用苹果提供的 API 删除本地推送");
++(void)localNotificationAtFrontEnd:(nonnull UILocalNotification *)notification userInfoKey:(nonnull NSString *)userInfoKey userInfoValue:(nonnull NSString *)userInfoValue DEPRECATED_MSG_ATTRIBUTE("此方法已经废弃,若需要弹窗,请用 AlertViewController 手动弹出");
++(void)delLocalNotification:(nonnull NSString *)userInfoKey userInfoValue:(nonnull NSString *)userInfoValue DEPRECATED_MSG_ATTRIBUTE("此方法已经废弃,请使用苹果提供的 API 删除本地推送");
++(void)delLocalNotification:(nonnull UILocalNotification *)myUILocalNotification DEPRECATED_MSG_ATTRIBUTE("此方法已经废弃,请使用苹果提供的 API 删除本地推送");
++(void)clearLocalNotifications DEPRECATED_MSG_ATTRIBUTE("此方法已经废弃,请使用苹果提供的 API 删除本地推送");
++(uint32_t)getAccessID DEPRECATED_MSG_ATTRIBUTE("此方法已经废弃,请使用带回调的方法替代");
++(void)initForReregister:(nullable void (^)(void)) successCallback DEPRECATED_MSG_ATTRIBUTE("方法已经废弃,请不要使用此方法");
++(void)setAccount:(nonnull NSString *)account DEPRECATED_MSG_ATTRIBUTE("方法已经废弃,请使用带回调的方法替代");
++(nullable NSString *)registerDevice:(nonnull NSData *)deviceToken DEPRECATED_MSG_ATTRIBUTE("方法已经废弃,请使用带回调的方法替代");
++(nullable NSString *)registerDeviceStr:(nonnull NSString *)deviceToken DEPRECATED_MSG_ATTRIBUTE("方法已经废弃,请使用带回调的方法替代");
++(void)unRegisterDevice DEPRECATED_MSG_ATTRIBUTE("此方法已经废弃,请使用带回调的方法替代");
++(void)setTag:(nonnull NSString *)tag DEPRECATED_MSG_ATTRIBUTE("此方法已经废弃,请使用带回调的方法替代");
++(void)delTag:(nonnull NSString *)tag DEPRECATED_MSG_ATTRIBUTE("此方法已经废弃,请使用带回调的方法替代");
++(void)handleReceiveNotification:(nonnull NSDictionary *)userInfo DEPRECATED_MSG_ATTRIBUTE("此方法已经废弃");
++(void)handleReceiveNotification:(nonnull NSDictionary *)userInfo completion:(nullable void (^)(void)) completion DEPRECATED_MSG_ATTRIBUTE("此方法已经废弃");
++(void)handleReceiveNotification:(nonnull NSDictionary *)userInfo successCallback:(nullable void (^)(void)) successCallback errorCallback:(nullable void (^)(void)) errorCallback completion:(nullable void (^)(void)) completion DEPRECATED_MSG_ATTRIBUTE("此方法已经废弃");
++(void)handleLaunching:(nonnull NSDictionary *)launchOptions DEPRECATED_MSG_ATTRIBUTE("此方法已经废弃,请使用带回调的方法替代");
+
+@end
diff --git a/ios/SDK/XGSetting.h b/ios/SDK/XGSetting.h
new file mode 100644
index 0000000..d80e916
--- /dev/null
+++ b/ios/SDK/XGSetting.h
@@ -0,0 +1,23 @@
+//
+// XGSetting.h
+// XG-SDK
+//
+// Created by xiangchen on 29/08/14.
+// Copyright (c) 2014 mta. All rights reserved.
+//
+
+#import
+
+#define XG_SDK_VERSION @"2.5.0"
+
+@interface XGSetting : NSObject
+
+@property (nonatomic,retain) NSString* Channel DEPRECATED_MSG_ATTRIBUTE("此属性已经废弃");
+@property (nonatomic,retain) NSString* GameServer DEPRECATED_MSG_ATTRIBUTE("此属性已经废弃");
+
++(id)getInstance;
+
+-(void) enableDebug:(BOOL) enbaleDebug;
+-(BOOL) isEnableDebug;
+
+@end
diff --git a/ios/SDK/libXG-SDK.a b/ios/SDK/libXG-SDK.a
new file mode 100644
index 0000000..7f378ea
Binary files /dev/null and b/ios/SDK/libXG-SDK.a differ
diff --git a/ios/XGPush.xcodeproj/project.pbxproj b/ios/XGPush.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..dc56e92
--- /dev/null
+++ b/ios/XGPush.xcodeproj/project.pbxproj
@@ -0,0 +1,299 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ C50FF02A1D54262A00CEF3D0 /* XGPushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C50FF0291D54262A00CEF3D0 /* XGPushManager.m */; };
+ C5D48E341D5428F4004BD09A /* libXG-SDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C5D48E331D5428F4004BD09A /* libXG-SDK.a */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ C50FF0221D54262A00CEF3D0 /* Copy Files */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "include/$(PRODUCT_NAME)";
+ dstSubfolderSpec = 16;
+ files = (
+ );
+ name = "Copy Files";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ C50FF0241D54262A00CEF3D0 /* libXGPush.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libXGPush.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ C50FF0271D54262A00CEF3D0 /* XGPushManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XGPushManager.h; sourceTree = ""; };
+ C50FF0291D54262A00CEF3D0 /* XGPushManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XGPushManager.m; sourceTree = ""; };
+ C5D48E301D5428D2004BD09A /* XGSetting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XGSetting.h; path = SDK/XGSetting.h; sourceTree = ""; };
+ C5D48E311D5428D2004BD09A /* XGPush.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XGPush.h; path = SDK/XGPush.h; sourceTree = ""; };
+ C5D48E331D5428F4004BD09A /* libXG-SDK.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libXG-SDK.a"; path = "SDK/libXG-SDK.a"; sourceTree = ""; };
+ C5D48E761D54731F004BD09A /* libReact.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libReact.a; path = "../../react-native/React/build/Debug-iphoneos/libReact.a"; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ C50FF0211D54262A00CEF3D0 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ C5D48E341D5428F4004BD09A /* libXG-SDK.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ C50FF01B1D54262A00CEF3D0 = {
+ isa = PBXGroup;
+ children = (
+ C5D48E321D5428DE004BD09A /* Frameworks */,
+ C5D48E2F1D5428C1004BD09A /* SDK */,
+ C50FF0261D54262A00CEF3D0 /* XGPush */,
+ C50FF0251D54262A00CEF3D0 /* Products */,
+ );
+ sourceTree = "";
+ };
+ C50FF0251D54262A00CEF3D0 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ C50FF0241D54262A00CEF3D0 /* libXGPush.a */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ C50FF0261D54262A00CEF3D0 /* XGPush */ = {
+ isa = PBXGroup;
+ children = (
+ C50FF0271D54262A00CEF3D0 /* XGPushManager.h */,
+ C50FF0291D54262A00CEF3D0 /* XGPushManager.m */,
+ );
+ path = XGPush;
+ sourceTree = "";
+ };
+ C5D48E2F1D5428C1004BD09A /* SDK */ = {
+ isa = PBXGroup;
+ children = (
+ C5D48E301D5428D2004BD09A /* XGSetting.h */,
+ C5D48E311D5428D2004BD09A /* XGPush.h */,
+ );
+ name = SDK;
+ sourceTree = "";
+ };
+ C5D48E321D5428DE004BD09A /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ C5D48E761D54731F004BD09A /* libReact.a */,
+ C5D48E331D5428F4004BD09A /* libXG-SDK.a */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ C50FF0231D54262A00CEF3D0 /* XGPush */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = C50FF02D1D54262A00CEF3D0 /* Build configuration list for PBXNativeTarget "XGPush" */;
+ buildPhases = (
+ C50FF0201D54262A00CEF3D0 /* Sources */,
+ C50FF0211D54262A00CEF3D0 /* Frameworks */,
+ C50FF0221D54262A00CEF3D0 /* Copy Files */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = XGPush;
+ productName = RCTXGPush;
+ productReference = C50FF0241D54262A00CEF3D0 /* libXGPush.a */;
+ productType = "com.apple.product-type.library.static";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ C50FF01C1D54262A00CEF3D0 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0730;
+ ORGANIZATIONNAME = Jeepeng;
+ TargetAttributes = {
+ C50FF0231D54262A00CEF3D0 = {
+ CreatedOnToolsVersion = 7.3.1;
+ };
+ };
+ };
+ buildConfigurationList = C50FF01F1D54262A00CEF3D0 /* Build configuration list for PBXProject "XGPush" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ );
+ mainGroup = C50FF01B1D54262A00CEF3D0;
+ productRefGroup = C50FF0251D54262A00CEF3D0 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ C50FF0231D54262A00CEF3D0 /* XGPush */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+ C50FF0201D54262A00CEF3D0 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ C50FF02A1D54262A00CEF3D0 /* XGPushManager.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ C50FF02B1D54262A00CEF3D0 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 7.0;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ };
+ name = Debug;
+ };
+ C50FF02C1D54262A00CEF3D0 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 7.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ C50FF02E1D54262A00CEF3D0 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
+ "$(SRCROOT)/../../react-native/React/**",
+ );
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/SDK/**",
+ );
+ OTHER_LDFLAGS = "-ObjC";
+ PRODUCT_NAME = XGPush;
+ SKIP_INSTALL = YES;
+ };
+ name = Debug;
+ };
+ C50FF02F1D54262A00CEF3D0 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
+ "$(SRCROOT)/../../react-native/React/**",
+ );
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/SDK/**",
+ );
+ OTHER_LDFLAGS = "-ObjC";
+ PRODUCT_NAME = XGPush;
+ SKIP_INSTALL = YES;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ C50FF01F1D54262A00CEF3D0 /* Build configuration list for PBXProject "XGPush" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C50FF02B1D54262A00CEF3D0 /* Debug */,
+ C50FF02C1D54262A00CEF3D0 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ C50FF02D1D54262A00CEF3D0 /* Build configuration list for PBXNativeTarget "XGPush" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C50FF02E1D54262A00CEF3D0 /* Debug */,
+ C50FF02F1D54262A00CEF3D0 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = C50FF01C1D54262A00CEF3D0 /* Project object */;
+}
diff --git a/ios/XGPush.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/XGPush.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..fb1667b
--- /dev/null
+++ b/ios/XGPush.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/ios/XGPush.xcodeproj/project.xcworkspace/xcuserdata/Jeepeng.xcuserdatad/UserInterfaceState.xcuserstate b/ios/XGPush.xcodeproj/project.xcworkspace/xcuserdata/Jeepeng.xcuserdatad/UserInterfaceState.xcuserstate
new file mode 100644
index 0000000..f3e65a6
Binary files /dev/null and b/ios/XGPush.xcodeproj/project.xcworkspace/xcuserdata/Jeepeng.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/ios/XGPush.xcodeproj/xcuserdata/Jeepeng.xcuserdatad/xcschemes/XGPush.xcscheme b/ios/XGPush.xcodeproj/xcuserdata/Jeepeng.xcuserdatad/xcschemes/XGPush.xcscheme
new file mode 100644
index 0000000..6ccb7f3
--- /dev/null
+++ b/ios/XGPush.xcodeproj/xcuserdata/Jeepeng.xcuserdatad/xcschemes/XGPush.xcscheme
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ios/XGPush.xcodeproj/xcuserdata/Jeepeng.xcuserdatad/xcschemes/xcschememanagement.plist b/ios/XGPush.xcodeproj/xcuserdata/Jeepeng.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..2ddceaa
--- /dev/null
+++ b/ios/XGPush.xcodeproj/xcuserdata/Jeepeng.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ SchemeUserState
+
+ XGPush.xcscheme
+
+ orderHint
+ 1
+
+
+ SuppressBuildableAutocreation
+
+ C50FF0231D54262A00CEF3D0
+
+ primary
+
+
+
+
+
diff --git a/ios/XGPush/XGPushManager.h b/ios/XGPush/XGPushManager.h
new file mode 100644
index 0000000..ffd5cdc
--- /dev/null
+++ b/ios/XGPush/XGPushManager.h
@@ -0,0 +1,45 @@
+//
+// XGPushManager.h
+// XGPushManager
+//
+// Created by Jeepeng on 16/8/5.
+// Copyright © 2016年 Jeepeng. All rights reserved.
+//
+
+#import
+
+extern NSString *const RCTRemoteNotificationReceived;
+
+@interface XGPushManager : RCTEventEmitter
+
+typedef void (^RCTRemoteNotificationCallback)(UIBackgroundFetchResult result);
+
+#if !TARGET_OS_TV
++ (void)didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings;
++ (void)didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;
++ (void)didReceiveRemoteNotification:(NSDictionary *)notification;
++ (void)didReceiveRemoteNotification:(NSDictionary *)notification fetchCompletionHandler:(RCTRemoteNotificationCallback)completionHandler;
++ (void)didReceiveLocalNotification:(UILocalNotification *)notification;
++ (void)didFailToRegisterForRemoteNotificationsWithError:(NSError *)error;
+#endif
+
+/**
+ 在didFinishLaunchingWithOptions中调用,用于推送反馈.(app没有运行时,点击推送启动时)
+
+ @param launchOptions didFinishLaunchingWithOptions中的userinfo参数
+ @param successCallback 成功回调
+ @param errorCallback 失败回调
+ */
++(void)handleLaunching:(nonnull NSDictionary *)launchOptions successCallback:(nullable void (^)(void)) successCallback errorCallback:(nullable void (^)(void)) errorCallback;
+
+/**
+ 在didReceiveRemoteNotification中调用,用于推送反馈。(app在运行时)
+
+ @param userInfo 苹果 apns 的推送信息
+ @param successCallback 成功回调
+ @param errorCallback 失败回调
+ */
++(void)handleReceiveNotification:(nonnull NSDictionary *)userInfo successCallback:(nullable void (^)(void)) successCallback errorCallback:(nullable void (^)(void)) errorCallback;
+
+
+@end
diff --git a/ios/XGPush/XGPushManager.m b/ios/XGPush/XGPushManager.m
new file mode 100644
index 0000000..dbbc4ff
--- /dev/null
+++ b/ios/XGPush/XGPushManager.m
@@ -0,0 +1,668 @@
+//
+// XGPushManager.m
+// 参考了 react-native 官方 PushNotificationIOS 的代码
+// Created by Jeepeng on 16/8/5.
+// Copyright © 2016年 Jeepeng. All rights reserved.
+//
+
+#import "XGPushManager.h"
+#import "XGPush.h"
+#import "XGSetting.h"
+
+#import
+
+#import
+#import
+#import
+#import
+
+NSString *const RCTLocalNotificationReceived = @"LocalNotificationReceived";
+NSString *const RCTRemoteNotificationReceived = @"RemoteNotificationReceived";
+NSString *const RCTRemoteNotificationsRegistered = @"RemoteNotificationsRegistered";
+NSString *const RCTRegisterUserNotificationSettings = @"RegisterUserNotificationSettings";
+
+NSString *const RCTErrorUnableToRequestPermissions = @"E_UNABLE_TO_REQUEST_PERMISSIONS";
+NSString *const RCTErrorRemoteNotificationRegistrationFailed = @"E_FAILED_TO_REGISTER_FOR_REMOTE_NOTIFICATIONS";
+
+#if !TARGET_OS_TV
+@implementation RCTConvert (NSCalendarUnit)
+
+RCT_ENUM_CONVERTER(NSCalendarUnit,
+ (@{
+ @"year": @(NSCalendarUnitYear),
+ @"month": @(NSCalendarUnitMonth),
+ @"week": @(NSCalendarUnitWeekOfYear),
+ @"day": @(NSCalendarUnitDay),
+ @"hour": @(NSCalendarUnitHour),
+ @"minute": @(NSCalendarUnitMinute)
+ }),
+ 0,
+ integerValue)
+
+@end
+
+@interface XGPushManager ()
+@property (nonatomic, strong) NSMutableDictionary *remoteNotificationCallbacks;
+@end
+
+@implementation RCTConvert (UILocalNotification)
+
++ (UILocalNotification *)UILocalNotification:(id)json
+{
+ NSDictionary *details = [self NSDictionary:json];
+ UILocalNotification *notification = [UILocalNotification new];
+ notification.fireDate = [RCTConvert NSDate:details[@"fireDate"]] ?: [NSDate date];
+ notification.alertBody = [RCTConvert NSString:details[@"alertBody"]];
+ notification.alertAction = [RCTConvert NSString:details[@"alertAction"]];
+ notification.soundName = [RCTConvert NSString:details[@"soundName"]] ?: UILocalNotificationDefaultSoundName;
+ notification.userInfo = [RCTConvert NSDictionary:details[@"userInfo"]];
+ notification.category = [RCTConvert NSString:details[@"category"]];
+ notification.repeatInterval = [RCTConvert NSCalendarUnit:details[@"repeatInterval"]];
+ if (details[@"applicationIconBadgeNumber"]) {
+ notification.applicationIconBadgeNumber = [RCTConvert NSInteger:details[@"applicationIconBadgeNumber"]];
+ }
+ return notification;
+}
+
+RCT_ENUM_CONVERTER(UIBackgroundFetchResult, (@{
+ @"UIBackgroundFetchResultNewData": @(UIBackgroundFetchResultNewData),
+ @"UIBackgroundFetchResultNoData": @(UIBackgroundFetchResultNoData),
+ @"UIBackgroundFetchResultFailed": @(UIBackgroundFetchResultFailed),
+}), UIBackgroundFetchResultNoData, integerValue)
+
+@end
+#endif //TARGET_OS_TV
+
+@implementation XGPushManager
+{
+ RCTPromiseResolveBlock _requestPermissionsResolveBlock;
+}
+
+#if !TARGET_OS_TV
+
+static NSDictionary *RCTFormatLocalNotification(UILocalNotification *notification)
+{
+ NSMutableDictionary *formattedLocalNotification = [NSMutableDictionary dictionary];
+ if (notification.fireDate) {
+ NSDateFormatter *formatter = [NSDateFormatter new];
+ [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"];
+ NSString *fireDateString = [formatter stringFromDate:notification.fireDate];
+ formattedLocalNotification[@"fireDate"] = fireDateString;
+ }
+ formattedLocalNotification[@"alertAction"] = RCTNullIfNil(notification.alertAction);
+ formattedLocalNotification[@"alertBody"] = RCTNullIfNil(notification.alertBody);
+ formattedLocalNotification[@"applicationIconBadgeNumber"] = @(notification.applicationIconBadgeNumber);
+ formattedLocalNotification[@"category"] = RCTNullIfNil(notification.category);
+ formattedLocalNotification[@"soundName"] = RCTNullIfNil(notification.soundName);
+ formattedLocalNotification[@"userInfo"] = RCTNullIfNil(RCTJSONClean(notification.userInfo));
+ formattedLocalNotification[@"remote"] = @NO;
+ return formattedLocalNotification;
+}
+
+static NSDictionary *RCTFormatUNNotification(UNNotification *notification)
+{
+ NSMutableDictionary *formattedNotification = [NSMutableDictionary dictionary];
+ UNNotificationContent *content = notification.request.content;
+
+ formattedNotification[@"identifier"] = notification.request.identifier;
+
+ if (notification.date) {
+ NSDateFormatter *formatter = [NSDateFormatter new];
+ [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"];
+ NSString *dateString = [formatter stringFromDate:notification.date];
+ formattedNotification[@"date"] = dateString;
+ }
+
+ formattedNotification[@"title"] = RCTNullIfNil(content.title);
+ formattedNotification[@"body"] = RCTNullIfNil(content.body);
+ formattedNotification[@"category"] = RCTNullIfNil(content.categoryIdentifier);
+ formattedNotification[@"thread-id"] = RCTNullIfNil(content.threadIdentifier);
+ formattedNotification[@"userInfo"] = RCTNullIfNil(RCTJSONClean(content.userInfo));
+
+ return formattedNotification;
+}
+
+#endif //TARGET_OS_TV
+
+RCT_EXPORT_MODULE()
+
+- (dispatch_queue_t)methodQueue
+{
+ return dispatch_get_main_queue();
+}
+
+#if !TARGET_OS_TV
+- (void)startObserving
+{
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(handleLocalNotificationReceived:)
+ name:RCTLocalNotificationReceived
+ object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(handleRemoteNotificationReceived:)
+ name:RCTRemoteNotificationReceived
+ object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(handleRemoteNotificationsRegistered:)
+ name:RCTRemoteNotificationsRegistered
+ object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(handleRemoteNotificationRegistrationError:)
+ name:RCTErrorRemoteNotificationRegistrationFailed
+ object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(handleRegisterUserNotificationSettings:)
+ name:RCTRegisterUserNotificationSettings
+ object:nil];
+}
+
+- (void)stopObserving
+{
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+
+- (NSArray *)supportedEvents
+{
+ return @[@"localNotificationReceived",
+ @"remoteNotificationReceived",
+ @"remoteNotificationsRegistered",
+ @"remoteNotificationRegistrationError"];
+}
+
++ (void)didRegisterUserNotificationSettings:(__unused UIUserNotificationSettings *)notificationSettings
+{
+ if ([UIApplication instancesRespondToSelector:@selector(registerForRemoteNotifications)]) {
+ [RCTSharedApplication() registerForRemoteNotifications];
+ [[NSNotificationCenter defaultCenter] postNotificationName:RCTRegisterUserNotificationSettings
+ object:self
+ userInfo:@{@"notificationSettings": notificationSettings}];
+ }
+}
+
++ (void)didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
+{
+ NSMutableString *hexString = [NSMutableString string];
+ NSUInteger deviceTokenLength = deviceToken.length;
+ const unsigned char *bytes = deviceToken.bytes;
+ for (NSUInteger i = 0; i < deviceTokenLength; i++) {
+ [hexString appendFormat:@"%02x", bytes[i]];
+ }
+ [[NSNotificationCenter defaultCenter] postNotificationName:RCTRemoteNotificationsRegistered
+ object:self
+ userInfo:@{@"deviceToken" : [hexString copy]}];
+}
+
++ (void)didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
+{
+ [[NSNotificationCenter defaultCenter] postNotificationName:RCTErrorRemoteNotificationRegistrationFailed
+ object:self
+ userInfo:@{@"error": error}];
+}
+
++ (void)didReceiveRemoteNotification:(NSDictionary *)notification
+{
+ NSDictionary *userInfo = @{@"notification": notification};
+ [[NSNotificationCenter defaultCenter] postNotificationName:RCTRemoteNotificationReceived
+ object:self
+ userInfo:userInfo];
+}
+
++ (void)didReceiveRemoteNotification:(NSDictionary *)notification
+ fetchCompletionHandler:(RCTRemoteNotificationCallback)completionHandler
+{
+ NSDictionary *userInfo = @{@"notification": notification, @"completionHandler": completionHandler};
+ [[NSNotificationCenter defaultCenter] postNotificationName:RCTRemoteNotificationReceived
+ object:self
+ userInfo:userInfo];
+}
+
++ (void)didReceiveLocalNotification:(UILocalNotification *)notification
+{
+ [[NSNotificationCenter defaultCenter] postNotificationName:RCTLocalNotificationReceived
+ object:self
+ userInfo:RCTFormatLocalNotification(notification)];
+}
+
+- (void)handleLocalNotificationReceived:(NSNotification *)notification
+{
+ [self sendEventWithName:@"localNotificationReceived" body:notification.userInfo];
+}
+
+- (void)handleRemoteNotificationReceived:(NSNotification *)notification
+{
+ NSMutableDictionary *remoteNotification = [NSMutableDictionary dictionaryWithDictionary:notification.userInfo[@"notification"]];
+ RCTRemoteNotificationCallback completionHandler = notification.userInfo[@"completionHandler"];
+ NSString *notificationId = [[NSUUID UUID] UUIDString];
+ remoteNotification[@"notificationId"] = notificationId;
+ remoteNotification[@"remote"] = @YES;
+ if (completionHandler) {
+ if (!self.remoteNotificationCallbacks) {
+ // Lazy initialization
+ self.remoteNotificationCallbacks = [NSMutableDictionary dictionary];
+ }
+ self.remoteNotificationCallbacks[notificationId] = completionHandler;
+ }
+
+ [self sendEventWithName:@"remoteNotificationReceived" body:remoteNotification];
+}
+
+- (void)handleRemoteNotificationsRegistered:(NSNotification *)notification
+{
+ [self sendEventWithName:@"remoteNotificationsRegistered" body:notification.userInfo];
+}
+
+- (void)handleRemoteNotificationRegistrationError:(NSNotification *)notification
+{
+ NSError *error = notification.userInfo[@"error"];
+ NSDictionary *errorDetails = @{
+ @"message": error.localizedDescription,
+ @"code": @(error.code),
+ @"details": error.userInfo,
+ };
+ [self sendEventWithName:@"remoteNotificationRegistrationError" body:errorDetails];
+}
+
+- (void)handleRegisterUserNotificationSettings:(NSNotification *)notification
+{
+ if (_requestPermissionsResolveBlock == nil) {
+ return;
+ }
+
+ UIUserNotificationSettings *notificationSettings = notification.userInfo[@"notificationSettings"];
+ NSDictionary *notificationTypes = @{
+ @"alert": @((notificationSettings.types & UIUserNotificationTypeAlert) > 0),
+ @"sound": @((notificationSettings.types & UIUserNotificationTypeSound) > 0),
+ @"badge": @((notificationSettings.types & UIUserNotificationTypeBadge) > 0),
+ };
+
+ _requestPermissionsResolveBlock(notificationTypes);
+ _requestPermissionsResolveBlock = nil;
+}
+
+RCT_EXPORT_METHOD(onFinishRemoteNotification:(NSString *)notificationId fetchResult:(UIBackgroundFetchResult)result) {
+ RCTRemoteNotificationCallback completionHandler = self.remoteNotificationCallbacks[notificationId];
+ if (!completionHandler) {
+ RCTLogError(@"There is no completion handler with notification id: %@", notificationId);
+ return;
+ }
+ completionHandler(result);
+ [self.remoteNotificationCallbacks removeObjectForKey:notificationId];
+}
+
+/**
+ * Update the application icon badge number on the home screen
+ */
+RCT_EXPORT_METHOD(setApplicationIconBadgeNumber:(NSInteger)number)
+{
+ RCTSharedApplication().applicationIconBadgeNumber = number;
+}
+
+/**
+ * Get the current application icon badge number on the home screen
+ */
+RCT_EXPORT_METHOD(getApplicationIconBadgeNumber:(RCTResponseSenderBlock)callback)
+{
+ callback(@[@(RCTSharedApplication().applicationIconBadgeNumber)]);
+}
+
+RCT_EXPORT_METHOD(requestPermissions:(NSDictionary *)permissions
+ resolver:(RCTPromiseResolveBlock)resolve
+ rejecter:(RCTPromiseRejectBlock)reject)
+{
+ if (RCTRunningInAppExtension()) {
+ reject(RCTErrorUnableToRequestPermissions, nil, RCTErrorWithMessage(@"Requesting push notifications is currently unavailable in an app extension"));
+ return;
+ }
+
+ if (_requestPermissionsResolveBlock != nil) {
+ RCTLogError(@"Cannot call requestPermissions twice before the first has returned.");
+ return;
+ }
+
+ _requestPermissionsResolveBlock = resolve;
+
+ UIUserNotificationType types = UIUserNotificationTypeNone;
+ if (permissions) {
+ if ([RCTConvert BOOL:permissions[@"alert"]]) {
+ types |= UIUserNotificationTypeAlert;
+ }
+ if ([RCTConvert BOOL:permissions[@"badge"]]) {
+ types |= UIUserNotificationTypeBadge;
+ }
+ if ([RCTConvert BOOL:permissions[@"sound"]]) {
+ types |= UIUserNotificationTypeSound;
+ }
+ } else {
+ types = UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound;
+ }
+
+ UIUserNotificationSettings *notificationSettings =
+ [UIUserNotificationSettings settingsForTypes:types categories:nil];
+ [RCTSharedApplication() registerUserNotificationSettings:notificationSettings];
+}
+
+RCT_EXPORT_METHOD(abandonPermissions)
+{
+ [RCTSharedApplication() unregisterForRemoteNotifications];
+}
+
+RCT_EXPORT_METHOD(checkPermissions:(RCTResponseSenderBlock)callback)
+{
+ if (RCTRunningInAppExtension()) {
+ callback(@[@{@"alert": @NO, @"badge": @NO, @"sound": @NO}]);
+ return;
+ }
+
+ NSUInteger types = [RCTSharedApplication() currentUserNotificationSettings].types;
+ callback(@[@{
+ @"alert": @((types & UIUserNotificationTypeAlert) > 0),
+ @"badge": @((types & UIUserNotificationTypeBadge) > 0),
+ @"sound": @((types & UIUserNotificationTypeSound) > 0),
+ }]);
+}
+
+RCT_EXPORT_METHOD(presentLocalNotification:(UILocalNotification *)notification)
+{
+ [RCTSharedApplication() presentLocalNotificationNow:notification];
+}
+
+RCT_EXPORT_METHOD(scheduleLocalNotification:(UILocalNotification *)notification)
+{
+ [RCTSharedApplication() scheduleLocalNotification:notification];
+}
+
+RCT_EXPORT_METHOD(cancelAllLocalNotifications)
+{
+ [RCTSharedApplication() cancelAllLocalNotifications];
+}
+
+RCT_EXPORT_METHOD(cancelLocalNotifications:(NSDictionary *)userInfo)
+{
+ for (UILocalNotification *notification in RCTSharedApplication().scheduledLocalNotifications) {
+ __block BOOL matchesAll = YES;
+ NSDictionary *notificationInfo = notification.userInfo;
+ // Note: we do this with a loop instead of just `isEqualToDictionary:`
+ // because we only require that all specified userInfo values match the
+ // notificationInfo values - notificationInfo may contain additional values
+ // which we don't care about.
+ [userInfo enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) {
+ if (![notificationInfo[key] isEqual:obj]) {
+ matchesAll = NO;
+ *stop = YES;
+ }
+ }];
+ if (matchesAll) {
+ [RCTSharedApplication() cancelLocalNotification:notification];
+ }
+ }
+}
+
+RCT_EXPORT_METHOD(getInitialNotification:(RCTPromiseResolveBlock)resolve
+ reject:(__unused RCTPromiseRejectBlock)reject)
+{
+ NSMutableDictionary *initialNotification =
+ [self.bridge.launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey] mutableCopy];
+
+ UILocalNotification *initialLocalNotification =
+ self.bridge.launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
+
+ if (initialNotification) {
+ initialNotification[@"remote"] = @YES;
+ resolve(initialNotification);
+ } else if (initialLocalNotification) {
+ resolve(RCTFormatLocalNotification(initialLocalNotification));
+ } else {
+ resolve((id)kCFNull);
+ }
+}
+
+RCT_EXPORT_METHOD(getScheduledLocalNotifications:(RCTResponseSenderBlock)callback)
+{
+ NSArray *scheduledLocalNotifications = RCTSharedApplication().scheduledLocalNotifications;
+ NSMutableArray *formattedScheduledLocalNotifications = [NSMutableArray new];
+ for (UILocalNotification *notification in scheduledLocalNotifications) {
+ [formattedScheduledLocalNotifications addObject:RCTFormatLocalNotification(notification)];
+ }
+ callback(@[formattedScheduledLocalNotifications]);
+}
+
+RCT_EXPORT_METHOD(removeAllDeliveredNotifications)
+{
+ if ([UNUserNotificationCenter class]) {
+ UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
+ [center removeAllDeliveredNotifications];
+ }
+}
+
+RCT_EXPORT_METHOD(removeDeliveredNotifications:(NSArray *)identifiers)
+{
+ if ([UNUserNotificationCenter class]) {
+ UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
+ [center removeDeliveredNotificationsWithIdentifiers:identifiers];
+ }
+}
+
+RCT_EXPORT_METHOD(getDeliveredNotifications:(RCTResponseSenderBlock)callback)
+{
+ if ([UNUserNotificationCenter class]) {
+ UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
+ [center getDeliveredNotificationsWithCompletionHandler:^(NSArray *_Nonnull notifications) {
+ NSMutableArray *formattedNotifications = [NSMutableArray new];
+
+ for (UNNotification *notification in notifications) {
+ [formattedNotifications addObject:RCTFormatUNNotification(notification)];
+ }
+ callback(@[formattedNotifications]);
+ }];
+ }
+}
+
+/********************* 信鸽 *********************/
+
+/**
+ 在didFinishLaunchingWithOptions中调用,用于推送反馈.(app没有运行时,点击推送启动时)
+
+ @param launchOptions didFinishLaunchingWithOptions中的userinfo参数
+ @param successCallback 成功回调
+ @param errorCallback 失败回调
+ */
++(void)handleLaunching:(nonnull NSDictionary *)launchOptions successCallback:(nullable void (^)(void)) successCallback errorCallback:(nullable void (^)(void)) errorCallback
+{
+ [XGPush handleLaunching:launchOptions successCallback:successCallback errorCallback:errorCallback];
+}
+
+/**
+ * 在didReceiveRemoteNotification中调用,用于推送反馈。(app在运行时)
+ */
++(void)handleReceiveNotification:(nonnull NSDictionary *)userInfo successCallback:(nullable void (^)(void)) successCallback errorCallback:(nullable void (^)(void)) errorCallback
+{
+ [XGPush handleReceiveNotification:userInfo successCallback:successCallback errorCallback:errorCallback];
+}
+
+/**
+ * 打开 Debug 模式以后可以在终端看到详细的信鸽 Debug 信息.方便定位问题
+ */
+RCT_EXPORT_METHOD(enableDebug:(BOOL)isDebug)
+{
+ XGSetting *setting = [XGSetting getInstance];
+ [setting enableDebug:isDebug];
+}
+
+/**
+ * 查看debug开关是否打开
+ */
+RCT_EXPORT_METHOD(isEnableDebug:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
+{
+ XGSetting *setting = [XGSetting getInstance];
+ BOOL isDebug = [setting isEnableDebug];
+ resolve(@(isDebug));
+}
+
+/**
+ * 初始化信鸽
+ * @param appId - 通过前台申请的accessId
+ * @param appKey - 通过前台申请的accessKey
+ * @return none
+ */
+RCT_EXPORT_METHOD(startApp:(uint64_t)accessId accessKey:(nonnull NSString *)accessKey)
+{
+ [XGPush startApp:accessId appKey:accessKey];
+}
+
+/**
+ 判断当前是否是已注销状态
+
+ @return 是否已经注销推送
+ */
+RCT_EXPORT_METHOD(isUnRegisterStatus:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
+{
+ BOOL isUnRegister = [XGPush isUnRegisterStatus];
+ resolve(@(isUnRegister));
+}
+
+/**
+ 查询推送是否打开(以弹窗为准)
+
+ @param result 查询回调.若推送打开,回调参数为 YES, 否则为 NO
+ */
+RCT_EXPORT_METHOD(isPushOn:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
+{
+ [XGPush isPushOn:^(BOOL isOn) {
+ NSLog(@"[XGPush] Push Is %@", isOn ? @"ON" : @"OFF");
+ resolve(@(isOn));
+ }];
+}
+
+/**
+ 注册设备并且设置账号
+
+ @param deviceToken 通过app delegate的didRegisterForRemoteNotificationsWithDeviceToken回调的获取
+ @param account 需要设置的账号,长度为2个字节以上,不要使用"test","123456"这种过于简单的字符串,
+ 若不想设置账号,请传入nil
+ @param successCallback 成功回调
+ @param errorCallback 失败回调
+ @return 获取的 deviceToken 字符串
+ */
+RCT_EXPORT_METHOD(registerDevice:(nonnull NSString *) deviceToken account:(nullable NSString *)account resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
+{
+ void (^successBlock)(void) = ^(void){
+ resolve(@"信鸽推送注册成功!");
+ };
+
+ void (^errorBlock)(void) = ^(void){
+ reject(@"XGPUSH_REGISTER_ERROR", @"信鸽推送注册失败.", nil);
+ };
+
+ //注册设备
+ [XGPush registerDeviceStr:deviceToken account:account successCallback:successBlock errorCallback:errorBlock];
+}
+
+/**
+ 注销设备,设备不再进行推送
+
+ @param successCallback 成功回调
+ @param errorCallback 失败回调
+ */
+RCT_EXPORT_METHOD(unRegisterDevice:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
+{
+ void (^successBlock)(void) = ^(void){
+ resolve(@"注销设备成功!");
+ };
+
+ void (^errorBlock)(void) = ^(void){
+ reject(@"XGPUSH_UNREGISTER_DEVICE_FAIL",@"注销设备失败!",nil);
+ };
+
+ [XGPush unRegisterDevice:successBlock errorCallback:errorBlock];
+}
+
+/**
+ 设置设备的帐号. 设置账号前需要调用一次registerDevice
+
+ @param account 需要设置的账号,长度为2个字节以上,不要使用"test","123456"这种过于简单的字符串,
+ 若不想设置账号,请传入nil
+ @param successCallback 成功回调
+ @param errorCallback 失败回调
+ */
+RCT_EXPORT_METHOD(setAccount:(nonnull NSString *)account resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
+{
+ void (^successBlock)(void) = ^(void){
+ resolve(@"设置设备的帐号成功!");
+ };
+
+ void (^errorBlock)(void) = ^(void){
+ reject(@"XGPUSH_SET_ACCOUNT_FAIL", @"设置设备的帐号失败.", nil);
+ };
+
+ [XGPush setAccount:account successCallback:successBlock errorCallback:errorBlock];
+}
+
+
+/**
+ 删除已经设置的账号
+
+ @param successCallback 成功回调
+ @param errorCallback 失败回调
+ */
+RCT_EXPORT_METHOD(delAccount:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
+{
+ void (^successBlock)(void) = ^(void){
+ resolve(@"删除已经设置的账号成功!");
+ };
+
+ void (^errorBlock)(void) = ^(void){
+ reject(@"XGPUSH_DELETE_ACCOUNT_FAIL", @"删除已经设置的账号失败.", nil);
+ };
+ // 设置账号,要在注册设备之前完成
+ [XGPush delAccount:successBlock errorCallback:errorBlock];
+}
+
+/**
+ 设置 tag
+
+ @param tag 需要设置的 tag
+ @param successCallback 成功回调
+ @param errorCallback 失败回调
+ */
+RCT_EXPORT_METHOD(setTag:(NSString *)tagName resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
+{
+ void (^successBlock)(void) = ^(void){
+ resolve(@"设置Tag成功!");
+ };
+
+ void (^errorBlock)(void) = ^(void){
+ reject(@"XGPUSH_SET_TAG_FAIL",@"设置Tag失败!",nil);
+ };
+ [XGPush setTag:tagName successCallback:successBlock errorCallback:errorBlock];
+}
+
+/**
+ 删除tag
+
+ @param tag 需要删除的 tag
+ @param successCallback 成功回调
+ @param errorCallback 失败回调
+ */
+RCT_EXPORT_METHOD(delTag:(NSString *)tagName resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
+{
+ void (^successBlock)(void) = ^(void){
+ resolve(@"删除Tag成功!");
+ };
+
+ void (^errorBlock)(void) = ^(void){
+ reject(@"XGPUSH_DELETE_TAG_FAIL",@"删除Tag失败!",nil);
+ };
+
+ [XGPush delTag:tagName successCallback:successBlock errorCallback:errorBlock];
+}
+
+#else //TARGET_OS_TV
+
+- (NSArray *)supportedEvents
+{
+ return @[];
+}
+
+#endif //TARGET_OS_TV
+
+@end
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..3992c5a
--- /dev/null
+++ b/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "react-native-xinge-push",
+ "version": "0.1.3",
+ "description": "Xinge push for react-native",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Jeepeng/react-native-xinge-push.git"
+ },
+ "keywords": [
+ "xinge",
+ "xinge-push",
+ "xgpush",
+ "react-native"
+ ],
+ "author": "Jeepeng",
+ "license": "Apache-2.0",
+ "bugs": {
+ "url": "https://github.com/Jeepeng/react-native-xinge-push/issues"
+ },
+ "homepage": "https://github.com/Jeepeng/react-native-xinge-push#readme"
+}