diff --git a/.npmignore b/.npmignore
index 90c978b3..2929c4a5 100644
--- a/.npmignore
+++ b/.npmignore
@@ -1 +1,2 @@
example/
+cursor.md
diff --git a/JPush.podspec b/JPushRN.podspec
similarity index 88%
rename from JPush.podspec
rename to JPushRN.podspec
index 176e1e53..9845091a 100644
--- a/JPush.podspec
+++ b/JPushRN.podspec
@@ -3,7 +3,7 @@ pjson = JSON.parse(File.read('package.json'))
Pod::Spec.new do |s|
- s.name = "JPush"
+ s.name = "JPushRN"
s.version = pjson["version"]
s.homepage = pjson["homepage"]
s.summary = pjson["description"]
@@ -18,6 +18,6 @@ Pod::Spec.new do |s|
s.frameworks = 'UIKit','CFNetwork','CoreFoundation','CoreTelephony','SystemConfiguration','CoreGraphics','Foundation','Security'
s.weak_frameworks = 'UserNotifications'
s.libraries = 'z','resolv'
- s.vendored_libraries = "ios/RCTJPushModule/*.a"
+ s.vendored_frameworks = "ios/RCTJPushModule/*.xcframework"
s.dependency 'React'
end
\ No newline at end of file
diff --git a/android/build.gradle b/android/build.gradle
index 244f432e..546af6d2 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -5,10 +5,13 @@ def safeExtGet(prop, fallback) {
}
android {
- compileSdkVersion safeExtGet('compileSdkVersion', 27)
+ compileSdkVersion safeExtGet('compileSdkVersion', 34)
+
+ namespace 'cn.jiguang.plugins.push'
+
defaultConfig {
- minSdkVersion safeExtGet('minSdkVersion', 16)
- targetSdkVersion safeExtGet('targetSdkVersion', 27)
+ minSdkVersion safeExtGet('minSdkVersion', 23)
+ targetSdkVersion safeExtGet('targetSdkVersion', 34)
versionCode 1
versionName "1.0"
diff --git a/android/libs/jpush-android-4.8.0.jar b/android/libs/jpush-android-4.8.0.jar
deleted file mode 100644
index 83f7e5b7..00000000
Binary files a/android/libs/jpush-android-4.8.0.jar and /dev/null differ
diff --git a/android/libs/jpush-android-5.9.0.jar b/android/libs/jpush-android-5.9.0.jar
new file mode 100644
index 00000000..2d928fe2
Binary files /dev/null and b/android/libs/jpush-android-5.9.0.jar differ
diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml
index 9c2c3d08..6d14b741 100644
--- a/android/src/main/AndroidManifest.xml
+++ b/android/src/main/AndroidManifest.xml
@@ -1,38 +1,47 @@
+ >
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
+ -->
+ android:exported="true"
+ android:theme="@style/MyDialogStyle" >
+
+
+
+
+
+
@@ -63,7 +72,7 @@
android:enabled="true"
android:exported="false">
-
+
@@ -83,7 +92,7 @@
@@ -95,13 +104,18 @@
android:enabled="true"
android:exported="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
- android:taskAffinity="jpush.custom">
+ android:taskAffinity="">
-
+
diff --git a/android/src/main/java/cn/jiguang/plugins/push/JPushModule.java b/android/src/main/java/cn/jiguang/plugins/push/JPushModule.java
index ac14ea51..034c1d75 100644
--- a/android/src/main/java/cn/jiguang/plugins/push/JPushModule.java
+++ b/android/src/main/java/cn/jiguang/plugins/push/JPushModule.java
@@ -1,6 +1,9 @@
package cn.jiguang.plugins.push;
-
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.net.Uri;
+import android.os.Build;
import android.app.Activity;
import android.app.Application;
import android.os.Bundle;
@@ -14,12 +17,15 @@
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;
+import com.facebook.react.bridge.ReadableNativeMap;
import com.facebook.react.bridge.WritableMap;
import org.json.JSONObject;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
+import java.lang.*;
import cn.jiguang.plugins.push.common.JConstants;
import cn.jiguang.plugins.push.common.JLogger;
@@ -27,6 +33,7 @@
import cn.jiguang.plugins.push.receiver.JPushBroadcastReceiver;
import cn.jpush.android.api.BasicPushNotificationBuilder;
import cn.jpush.android.api.JPushInterface;
+import cn.jpush.android.data.JPushCollectControl;
import cn.jpush.android.data.JPushLocalNotification;
public class JPushModule extends ReactContextBaseJavaModule {
@@ -59,6 +66,7 @@ public void init() {
JPushHelper.sendEvent(JConstants.NOTIFICATION_EVENT, writableMap);
JPushBroadcastReceiver.NOTIFICATION_BUNDLE = null;
}
+ JPushInterface.setNotificationCallBackEnable(reactContext,true);
}
@ReactMethod
@@ -95,6 +103,92 @@ public void setChannel(ReadableMap readableMap) {
}
}
@ReactMethod
+ public void setChannelAndSound(ReadableMap readableMap) {
+ if (readableMap == null) {
+ JLogger.w(JConstants.PARAMS_NULL);
+ return;
+ }
+ String channel = readableMap.getString(JConstants.CHANNEL);
+ String sound = readableMap.getString(JConstants.SOUND);
+ String channelId = readableMap.getString(JConstants.CHANNELID);
+ try {
+ NotificationManager manager= (NotificationManager) reactContext.getSystemService("notification");
+ if(Build.VERSION.SDK_INT<26){
+ return;
+ }
+ if(TextUtils.isEmpty(channel)||TextUtils.isEmpty(channelId)){
+ return;
+ }
+ NotificationChannel channel1=new NotificationChannel(channelId,channel, NotificationManager.IMPORTANCE_HIGH);
+ if(!TextUtils.isEmpty(sound)){
+ channel1.setSound(Uri.parse("android.resource://"+reactContext.getPackageName()+"/raw/"+sound),null);
+ }
+ manager.createNotificationChannel(channel1);
+ JPushInterface.setChannel(reactContext,channel);
+ }catch (Throwable throwable){
+ }
+ }
+ @ReactMethod
+ public void setLinkMergeEnable(boolean enable) {
+ JPushInterface.setLinkMergeEnable(reactContext, enable);
+ }
+
+ @ReactMethod
+ public void setSmartPushEnable(boolean enable) {
+ JPushInterface.setSmartPushEnable(reactContext, enable);
+ }
+
+ @ReactMethod
+ public void setDataInsightsEnable(boolean enable) {
+ JPushInterface.setDataInsightsEnable(reactContext, enable);
+ }
+
+ @ReactMethod
+ public void setGeofenceEnable(boolean enable) {
+ JPushInterface.setGeofenceEnable(reactContext, enable);
+ }
+
+ @ReactMethod
+ public void setCollectControl(ReadableMap readableMap) {
+ if (readableMap == null) {
+ JLogger.w(JConstants.PARAMS_NULL);
+ return;
+ }
+ boolean hadValue = false;
+ JPushCollectControl.Builder builder = new JPushCollectControl.Builder();
+ if (readableMap.hasKey(JConstants.IMEI)) {
+ hadValue = true;
+ builder.imei(readableMap.getBoolean(JConstants.IMEI));
+ }
+ if (readableMap.hasKey(JConstants.IMSI)) {
+ hadValue = true;
+ builder.imsi(readableMap.getBoolean(JConstants.IMSI));
+ }
+ if (readableMap.hasKey(JConstants.MAC)) {
+ hadValue = true;
+ builder.mac(readableMap.getBoolean(JConstants.MAC));
+ }
+ if (readableMap.hasKey(JConstants.WIFI)) {
+ hadValue = true;
+ builder.wifi(readableMap.getBoolean(JConstants.WIFI));
+ }
+ if (readableMap.hasKey(JConstants.BSSID)) {
+ hadValue = true;
+ builder.bssid(readableMap.getBoolean(JConstants.BSSID));
+ }
+ if (readableMap.hasKey(JConstants.SSID)) {
+ hadValue = true;
+ builder.ssid(readableMap.getBoolean(JConstants.SSID));
+ }
+ if (readableMap.hasKey(JConstants.CELL)) {
+ hadValue = true;
+ builder.cell(readableMap.getBoolean(JConstants.CELL));
+ }
+ if (hadValue) {
+ JPushInterface.setCollectControl(reactContext, builder.build());
+ }
+ }
+ @ReactMethod
public void setBadgeNumber(ReadableMap readableMap) {
if (readableMap == null) {
JLogger.w(JConstants.PARAMS_NULL);
@@ -213,7 +307,48 @@ public void filterValidTags(ReadableMap readableMap, Callback callback) {
JLogger.w("there are no " + JConstants.TAGS);
}
}
+ @ReactMethod
+ public void setProperties(ReadableMap readableMap) {
+ if (readableMap == null) {
+ JLogger.w(JConstants.PARAMS_NULL);
+ return;
+ }
+ if (readableMap.hasKey(JConstants.PROPERTIES)) {
+ int sequence = readableMap.getInt(JConstants.SEQUENCE);
+ ReadableMap readMap = readableMap.getMap(JConstants.PROPERTIES);
+ ReadableNativeMap map= (ReadableNativeMap) readMap;
+ HashMap properties=map.toHashMap();
+ JPushInterface.setProperties(reactContext,sequence,properties);
+ } else {
+ JLogger.w("there are no " + JConstants.PROPERTIES);
+ }
+ }
+ @ReactMethod
+ public void deleteProperties(ReadableMap readableMap) {
+ if (readableMap == null) {
+ JLogger.w(JConstants.PARAMS_NULL);
+ return;
+ }
+ if (readableMap.hasKey(JConstants.PROPERTIES)) {
+ int sequence = readableMap.getInt(JConstants.SEQUENCE);
+ ReadableMap readMap = readableMap.getMap(JConstants.PROPERTIES);
+ ReadableNativeMap map= (ReadableNativeMap) readMap;
+ HashMap properties=map.toHashMap();
+ JPushInterface.deleteProperties(reactContext,sequence,properties);
+ } else {
+ JLogger.w("there are no " + JConstants.PROPERTIES);
+ }
+ }
+ @ReactMethod
+ public void cleanProperties(ReadableMap readableMap) {
+ if (readableMap == null) {
+ JLogger.w(JConstants.PARAMS_NULL);
+ return;
+ }
+ int sequence = readableMap.getInt(JConstants.SEQUENCE);
+ JPushInterface.cleanProperties(reactContext,sequence);
+ }
@ReactMethod
public void setTags(ReadableMap readableMap) {
if (readableMap == null) {
@@ -390,15 +525,61 @@ public void addLocalNotification(ReadableMap readableMap) {
int id = Integer.valueOf(notificationID);
String notificationTitle = readableMap.hasKey(JConstants.TITLE) ? readableMap.getString(JConstants.TITLE) : reactContext.getPackageName();
String notificationContent = readableMap.hasKey(JConstants.CONTENT) ? readableMap.getString(JConstants.CONTENT) : reactContext.getPackageName();
+ String broadcastTime = readableMap.hasKey(JConstants.BROADCAST_TIME) ? readableMap.getString(JConstants.BROADCAST_TIME) : "0";
JPushLocalNotification notification = new JPushLocalNotification();
notification.setNotificationId(id);
notification.setTitle(notificationTitle);
notification.setContent(notificationContent);
+ try {
+ notification.setBroadcastTime(Long.parseLong(broadcastTime));
+ }catch (Throwable throwable){
+ }
if (readableMap.hasKey(JConstants.EXTRAS)) {
ReadableMap notificationExtra = readableMap.getMap(JConstants.EXTRAS);
JSONObject notificationExtraJson = new JSONObject(notificationExtra.toHashMap());
notification.setExtras(notificationExtraJson.toString());
}
+
+ // 设置BuilderId
+ if (readableMap.hasKey(JConstants.BUILDER_NAME)) {
+ try {
+ String layoutFileName = readableMap.getString(JConstants.BUILDER_NAME);
+ if (!TextUtils.isEmpty(layoutFileName)) {
+ // 通过布局文件名获取资源ID
+ int builderId = reactContext.getResources().getIdentifier(
+ layoutFileName,
+ "layout",
+ reactContext.getPackageName()
+ );
+ if (builderId != 0) {
+ notification.setBuilderId(builderId);
+ } else {
+ JLogger.w("Layout file not found: " + layoutFileName);
+ }
+ }
+ } catch (Exception e) {
+ JLogger.w("Failed to set BuilderId: " + e.getMessage());
+ }
+ }
+
+ // 设置Category
+ if (readableMap.hasKey(JConstants.CATEGORY)) {
+ String category = readableMap.getString(JConstants.CATEGORY);
+ if (!TextUtils.isEmpty(category)) {
+ notification.setCategory(category);
+ }
+ }
+
+ // 设置Priority
+ if (readableMap.hasKey(JConstants.PRIORITY)) {
+ try {
+ int priority = readableMap.getInt(JConstants.PRIORITY);
+ notification.setPriority(priority);
+ } catch (Exception e) {
+ JLogger.w("Priority must be a number");
+ }
+ }
+
JPushInterface.addLocalNotification(reactContext, notification);
}
diff --git a/android/src/main/java/cn/jiguang/plugins/push/common/JConstants.java b/android/src/main/java/cn/jiguang/plugins/push/common/JConstants.java
index 47d59898..776a3ae7 100644
--- a/android/src/main/java/cn/jiguang/plugins/push/common/JConstants.java
+++ b/android/src/main/java/cn/jiguang/plugins/push/common/JConstants.java
@@ -8,6 +8,8 @@ public class JConstants {
public static final String CODE = "code";
public static final String CHANNEL = "channel";
+ public static final String CHANNELID = "channelId";
+ public static final String SOUND = "sound";
public static final String SEQUENCE = "sequence";
public static final String CONNECT_ENABLE = "connectEnable";
//电话号码
@@ -24,8 +26,12 @@ public class JConstants {
//消息
public static final String MESSAGE_ID = "messageID";
public static final String TITLE = "title";
+ public static final String BROADCAST_TIME = "broadcastTime";
public static final String CONTENT = "content";
public static final String EXTRAS = "extras";
+ public static final String INAPPCLICKACTION = "inAppClickAction";
+ public static final String INAPPEXTRAS = "inAppExtras";
+ public static final String INAPPSHOWTARGET = "inAppShowTarget";
//消息事件
public static final String NOTIFICATION_ARRIVED = "notificationArrived";
public static final String NOTIFICATION_OPENED = "notificationOpened";
@@ -55,10 +61,28 @@ public class JConstants {
//event
public static final String CONNECT_EVENT = "ConnectEvent";
public static final String NOTIFICATION_EVENT = "NotificationEvent";
+ public static final String INAPP_MESSAGE_EVENT = "InappMessageEvent";
public static final String CUSTOM_MESSAGE_EVENT = "CustomMessageEvent";
public static final String LOCAL_NOTIFICATION_EVENT = "LocalNotificationEvent";
public static final String TAG_ALIAS_EVENT = "TagAliasEvent";
public static final String MOBILE_NUMBER_EVENT = "MobileNumberEvent";
+ public static final String NOTIFY_BUTTON_CLICK_EVENT = "NotifyButtonClickEvent";
public static final String COMMAND_EVENT = "CommandEvent";
public static final String BADGE_NUMBER = "badge";
+ public static final String PROPERTIES = "pros";
+ public static final String IN_APP_MESSAGE_CLICK = "inappClick";
+ public static final String IN_APP_MESSAGE_SHOW = "inappShow";
+
+ public static final String IMEI = "imei";
+ public static final String IMSI = "imsi";
+ public static final String MAC = "mac";
+ public static final String WIFI = "wifi";
+ public static final String BSSID = "bssid";
+ public static final String SSID = "ssid";
+ public static final String CELL = "cell";
+
+ // 本地通知相关常量
+ public static final String BUILDER_NAME = "builderName";
+ public static final String CATEGORY = "category";
+ public static final String PRIORITY = "priority";
}
diff --git a/android/src/main/java/cn/jiguang/plugins/push/helper/JPushHelper.java b/android/src/main/java/cn/jiguang/plugins/push/helper/JPushHelper.java
index 4836701a..d7352aee 100644
--- a/android/src/main/java/cn/jiguang/plugins/push/helper/JPushHelper.java
+++ b/android/src/main/java/cn/jiguang/plugins/push/helper/JPushHelper.java
@@ -21,6 +21,7 @@
import cn.jpush.android.api.CustomMessage;
import cn.jpush.android.api.JPushMessage;
import cn.jpush.android.api.NotificationMessage;
+import cn.jpush.android.api.NotificationCustomButton;
public class JPushHelper {
@@ -41,6 +42,17 @@ public static WritableMap convertNotificationToMap(String eventType, Notificatio
convertExtras(message.notificationExtras, writableMap);
return writableMap;
}
+ public static WritableMap convertInAppMessageToMap(String eventType, NotificationMessage message) {
+ WritableMap writableMap = Arguments.createMap();
+ writableMap.putString(JConstants.INAPP_MESSAGE_EVENT, eventType);
+ writableMap.putString(JConstants.MESSAGE_ID, message.msgId);
+ writableMap.putString(JConstants.TITLE, message.inAppMsgTitle);
+ writableMap.putString(JConstants.CONTENT, message.inAppMsgContentBody);
+ writableMap.putString(JConstants.INAPPCLICKACTION, message.inAppClickAction);
+ writableMap.putString(JConstants.INAPPEXTRAS, message.inAppExtras);
+ writableMap.putString(JConstants.INAPPSHOWTARGET, message.inAppShowTarget);
+ return writableMap;
+ }
public static WritableMap convertNotificationBundleToMap(String eventType, Bundle bundle) {
WritableMap writableMap = Arguments.createMap();
@@ -61,6 +73,22 @@ public static WritableMap convertCustomMessage(CustomMessage customMessage) {
return writableMap;
}
+ public static WritableMap convertNotificationCustomButtonToMap(NotificationCustomButton notificationCustomButton) {
+ WritableMap writableMap = Arguments.createMap();
+ try {
+ writableMap.putString("msgId", notificationCustomButton.a);
+ writableMap.putInt("platform", notificationCustomButton.b);
+ writableMap.putString("name", notificationCustomButton.c);
+ writableMap.putInt("actionType", notificationCustomButton.d);
+ writableMap.putString("action", notificationCustomButton.e);
+ writableMap.putString("data", notificationCustomButton.f);
+ return writableMap;
+ } catch (Throwable throwable) {
+ JLogger.w("convertNotificationCustomButtonToMap error:" + throwable.getMessage());
+ return writableMap;
+ }
+ }
+
public static WritableMap convertJPushMessageToMap(int type, JPushMessage message) {
WritableMap writableMap = Arguments.createMap();
diff --git a/android/src/main/java/cn/jiguang/plugins/push/receiver/JPushModuleReceiver.java b/android/src/main/java/cn/jiguang/plugins/push/receiver/JPushModuleReceiver.java
index 34ba7343..e27f4c52 100644
--- a/android/src/main/java/cn/jiguang/plugins/push/receiver/JPushModuleReceiver.java
+++ b/android/src/main/java/cn/jiguang/plugins/push/receiver/JPushModuleReceiver.java
@@ -14,6 +14,7 @@
import cn.jpush.android.api.JPushMessage;
import cn.jpush.android.api.NotificationMessage;
import cn.jpush.android.service.JPushMessageReceiver;
+import cn.jpush.android.api.NotificationCustomButton;
public class JPushModuleReceiver extends JPushMessageReceiver {
@@ -34,7 +35,12 @@ public void onNotifyMessageArrived(Context context, NotificationMessage notifica
JPushHelper.sendEvent(JConstants.LOCAL_NOTIFICATION_EVENT, writableMap);
}
}
-
+ @Override
+ public void onPropertyOperatorResult(Context context, JPushMessage jPushMessage) {
+ JLogger.d("onPropertyOperatorResult:" + jPushMessage.toString());
+ WritableMap writableMap = JPushHelper.convertJPushMessageToMap(1, jPushMessage);
+ JPushHelper.sendEvent(JConstants.TAG_ALIAS_EVENT, writableMap);
+ }
@Override
public void onNotifyMessageOpened(Context context, NotificationMessage notificationMessage) {
JLogger.d("onNotifyMessageOpened:" + notificationMessage.toString());
@@ -46,6 +52,28 @@ public void onNotifyMessageOpened(Context context, NotificationMessage notificat
super.onNotifyMessageOpened(context, notificationMessage);
}
}
+ @Override
+ public void onInAppMessageShow(Context context, NotificationMessage notificationMessage) {
+ JLogger.d("onInAppMessageShow:" + notificationMessage.toString());
+ if (JPushModule.reactContext != null) {
+ if (!JPushModule.isAppForeground) JPushHelper.launchApp(context);
+ WritableMap writableMap = JPushHelper.convertInAppMessageToMap(JConstants.IN_APP_MESSAGE_SHOW, notificationMessage);
+ JPushHelper.sendEvent(JConstants.INAPP_MESSAGE_EVENT, writableMap);
+ } else {
+ super.onInAppMessageShow(context, notificationMessage);
+ }
+ }
+ @Override
+ public void onInAppMessageClick(Context context, NotificationMessage notificationMessage) {
+ JLogger.d("onInAppMessageClick:" + notificationMessage.toString());
+ if (JPushModule.reactContext != null) {
+ if (!JPushModule.isAppForeground) JPushHelper.launchApp(context);
+ WritableMap writableMap = JPushHelper.convertInAppMessageToMap(JConstants.IN_APP_MESSAGE_CLICK, notificationMessage);
+ JPushHelper.sendEvent(JConstants.INAPP_MESSAGE_EVENT, writableMap);
+ } else {
+ super.onInAppMessageClick(context, notificationMessage);
+ }
+ }
@Override
public void onNotifyMessageDismiss(Context context, NotificationMessage notificationMessage) {
@@ -54,6 +82,13 @@ public void onNotifyMessageDismiss(Context context, NotificationMessage notifica
JPushHelper.sendEvent(JConstants.NOTIFICATION_EVENT, writableMap);
}
+ @Override
+ public void onNotifyButtonClick(Context context, NotificationCustomButton notificationCustomButton) {
+ JLogger.d("onNotifyButtonClick:" + notificationCustomButton.toString());
+ WritableMap writableMap = JPushHelper.convertNotificationCustomButtonToMap(notificationCustomButton);
+ JPushHelper.sendEvent(JConstants.NOTIFY_BUTTON_CLICK_EVENT, writableMap);
+ }
+
@Override
public void onRegister(Context context, String registrationId) {
JLogger.d("onRegister:" + registrationId);
diff --git a/android/src/main/res/drawable/jpush_btn_blue_bg.xml b/android/src/main/res/drawable/jpush_btn_blue_bg.xml
new file mode 100644
index 00000000..027cebfd
--- /dev/null
+++ b/android/src/main/res/drawable/jpush_btn_blue_bg.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/android/src/main/res/drawable/jpush_btn_grey_bg.xml b/android/src/main/res/drawable/jpush_btn_grey_bg.xml
new file mode 100644
index 00000000..d60ac612
--- /dev/null
+++ b/android/src/main/res/drawable/jpush_btn_grey_bg.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/src/main/res/drawable/jpush_cancel_btn_bg.xml b/android/src/main/res/drawable/jpush_cancel_btn_bg.xml
new file mode 100644
index 00000000..814e7609
--- /dev/null
+++ b/android/src/main/res/drawable/jpush_cancel_btn_bg.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/src/main/res/drawable/jpush_close.xml b/android/src/main/res/drawable/jpush_close.xml
new file mode 100644
index 00000000..697c1416
--- /dev/null
+++ b/android/src/main/res/drawable/jpush_close.xml
@@ -0,0 +1,19 @@
+
+
+
+
diff --git a/android/src/main/res/drawable/jpush_contain_bg.xml b/android/src/main/res/drawable/jpush_contain_bg.xml
new file mode 100644
index 00000000..30d811fb
--- /dev/null
+++ b/android/src/main/res/drawable/jpush_contain_bg.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/android/src/main/res/drawable/jpush_interstitial_bg.xml b/android/src/main/res/drawable/jpush_interstitial_bg.xml
new file mode 100644
index 00000000..769b36dc
--- /dev/null
+++ b/android/src/main/res/drawable/jpush_interstitial_bg.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/android/src/main/res/layout/jpush_banner.xml b/android/src/main/res/layout/jpush_banner.xml
new file mode 100644
index 00000000..675c1bce
--- /dev/null
+++ b/android/src/main/res/layout/jpush_banner.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/src/main/res/layout/jpush_full.xml b/android/src/main/res/layout/jpush_full.xml
new file mode 100644
index 00000000..8736f286
--- /dev/null
+++ b/android/src/main/res/layout/jpush_full.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/src/main/res/layout/jpush_interstitial.xml b/android/src/main/res/layout/jpush_interstitial.xml
new file mode 100644
index 00000000..b0bdcc92
--- /dev/null
+++ b/android/src/main/res/layout/jpush_interstitial.xml
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cursor.md b/cursor.md
new file mode 100644
index 00000000..2f2a0a63
--- /dev/null
+++ b/cursor.md
@@ -0,0 +1,41 @@
+
+使用方法:修改需求里的内容,将需求和步骤内容作为指令让cursor进行执行。
+
+
+需求:
+1. 更新iOS JPush SDK 到 x.x.x 版本。JPush SDK 包的路径是:xxx
+2. 更新Android JPush SDK 到 x.x.x 版本, JPush SDK 包的路径是:xxx
+3. 将原生iOS、Android SDK 新增的方法,封装在插件中。
+ 原生SDK新增方法一:
+ iOS :
+
+ ```
+ ```
+
+ Android:
+
+ ```
+ ```
+
+ 统一封装为 方法名为 "" 的对外方法。
+
+
+请按照以下步骤完成:
+
+1. 找到需要升级的iOS JPush SDK,替换ios/RCTJPushModule/jpush-ios-x.x.x.xcframework 为需要更新的版本。
+2. 将/ios/RCTJPushModule.xcodeproj/project.pbxproj中关于jpush-ios-x.x.x.xcframework中引用路径的代码,替换为需要更新的版本。
+3. 找到需要升级的Android JPush SDK,替换android/libs/jpush-android-x.x.x.jar 为需要更新的版本。
+4. 在插件中封装需求中需要封装的SDK方法,并在插件示例demo中提供示例调用代码,注意rn插件新增方法还需要再index.js和index.d.ts文件中声明哦。(如果没有需求中没有需要新增的方法,则跳过该步骤)
+5. 在package.json中更新插件版本号,在现有版本号上 + 0.0.1
+6. 在example/package.json 中 修改示例 插件的集成版本号。 改为最新的插件版本号。涉及到更改的代码
+
+ ```
+ "dependencies": {
+ ...
+ "jpush-react-native": "^x.x.x",
+ ...
+
+ ```
+
+
+
diff --git a/example/.buckconfig b/example/.buckconfig
deleted file mode 100644
index 934256cb..00000000
--- a/example/.buckconfig
+++ /dev/null
@@ -1,6 +0,0 @@
-
-[android]
- target = Google Inc.:Google APIs:23
-
-[maven_repositories]
- central = https://repo1.maven.org/maven2
diff --git a/example/.bundle/config b/example/.bundle/config
new file mode 100644
index 00000000..848943bb
--- /dev/null
+++ b/example/.bundle/config
@@ -0,0 +1,2 @@
+BUNDLE_PATH: "vendor/bundle"
+BUNDLE_FORCE_RUBY_PLATFORM: 1
diff --git a/example/.eslintrc.js b/example/.eslintrc.js
index 40c6dcd0..187894b6 100644
--- a/example/.eslintrc.js
+++ b/example/.eslintrc.js
@@ -1,4 +1,4 @@
module.exports = {
root: true,
- extends: '@react-native-community',
+ extends: '@react-native',
};
diff --git a/example/.flowconfig b/example/.flowconfig
deleted file mode 100644
index 1319ea12..00000000
--- a/example/.flowconfig
+++ /dev/null
@@ -1,99 +0,0 @@
-[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
-node_modules/react-native/Libraries/react-native/React.js
-
-; Ignore polyfills
-node_modules/react-native/Libraries/polyfills/.*
-
-; These should not be required directly
-; require from fbjs/lib instead: require('fbjs/lib/warning')
-node_modules/warning/.*
-
-; Flow doesn't support platforms
-.*/Libraries/Utilities/HMRLoadingView.js
-
-[untyped]
-.*/node_modules/@react-native-community/cli/.*/.*
-
-[include]
-
-[libs]
-node_modules/react-native/Libraries/react-native/react-native-interface.js
-node_modules/react-native/flow/
-
-[options]
-emoji=true
-
-esproposal.optional_chaining=enable
-esproposal.nullish_coalescing=enable
-
-module.file_ext=.js
-module.file_ext=.json
-module.file_ext=.ios.js
-
-module.system=haste
-module.system.haste.use_name_reducers=true
-# get basename
-module.system.haste.name_reducers='^.*/\([a-zA-Z0-9$_.-]+\.js\(\.flow\)?\)$' -> '\1'
-# strip .js or .js.flow suffix
-module.system.haste.name_reducers='^\(.*\)\.js\(\.flow\)?$' -> '\1'
-# strip .ios suffix
-module.system.haste.name_reducers='^\(.*\)\.ios$' -> '\1'
-module.system.haste.name_reducers='^\(.*\)\.android$' -> '\1'
-module.system.haste.name_reducers='^\(.*\)\.native$' -> '\1'
-module.system.haste.paths.blacklist=.*/__tests__/.*
-module.system.haste.paths.blacklist=.*/__mocks__/.*
-module.system.haste.paths.whitelist=/node_modules/react-native/Libraries/.*
-module.system.haste.paths.whitelist=/node_modules/react-native/RNTester/.*
-module.system.haste.paths.whitelist=/node_modules/react-native/IntegrationTests/.*
-module.system.haste.paths.blacklist=/node_modules/react-native/Libraries/react-native/react-native-implementation.js
-module.system.haste.paths.blacklist=/node_modules/react-native/Libraries/Animated/src/polyfills/.*
-
-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=$FlowFixMeProps
-suppress_type=$FlowFixMeState
-
-suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)
-suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)?:? #[0-9]+
-suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError
-
-[lints]
-sketchy-null-number=warn
-sketchy-null-mixed=warn
-sketchy-number=warn
-untyped-type-import=warn
-nonstrict-import=warn
-deprecated-type=warn
-unsafe-getters-setters=warn
-inexact-spread=warn
-unnecessary-invariant=warn
-signature-verification-failure=warn
-deprecated-utility=error
-
-[strict]
-deprecated-type
-nonstrict-import
-sketchy-null
-unclear-type
-unsafe-getters-setters
-untyped-import
-untyped-type-import
-
-[version]
-^0.98.0
diff --git a/example/.gitattributes b/example/.gitattributes
deleted file mode 100644
index d42ff183..00000000
--- a/example/.gitattributes
+++ /dev/null
@@ -1 +0,0 @@
-*.pbxproj -text
diff --git a/example/.gitignore b/example/.gitignore
index 828cc884..d5ae4566 100644
--- a/example/.gitignore
+++ b/example/.gitignore
@@ -20,7 +20,7 @@ DerivedData
*.hmap
*.ipa
*.xcuserstate
-project.xcworkspace
+**/.xcode.env.local
# Android/IntelliJ
#
@@ -29,6 +29,10 @@ build/
.gradle
local.properties
*.iml
+*.hprof
+.cxx/
+*.keystore
+!debug.keystore
# node.js
#
@@ -36,11 +40,6 @@ 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
@@ -48,12 +47,28 @@ buck-out/
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/
-*/fastlane/report.xml
-*/fastlane/Preview.html
-*/fastlane/screenshots
+**/fastlane/report.xml
+**/fastlane/Preview.html
+**/fastlane/screenshots
+**/fastlane/test_output
# Bundle artifact
*.jsbundle
-# CocoaPods
-/ios/Pods/
+# Ruby / CocoaPods
+**/Pods/
+/vendor/bundle/
+
+# Temporary files created by Metro to check the health of the file watcher
+.metro-health-check*
+
+# testing
+/coverage
+
+# Yarn
+.yarn/*
+!.yarn/patches
+!.yarn/plugins
+!.yarn/releases
+!.yarn/sdks
+!.yarn/versions
diff --git a/example/.prettierrc.js b/example/.prettierrc.js
index 5c4de1a4..2b540746 100644
--- a/example/.prettierrc.js
+++ b/example/.prettierrc.js
@@ -1,6 +1,7 @@
module.exports = {
+ arrowParens: 'avoid',
+ bracketSameLine: true,
bracketSpacing: false,
- jsxBracketSameLine: true,
singleQuote: true,
trailingComma: 'all',
};
diff --git a/example/.watchmanconfig b/example/.watchmanconfig
index 9e26dfee..0967ef42 100644
--- a/example/.watchmanconfig
+++ b/example/.watchmanconfig
@@ -1 +1 @@
-{}
\ No newline at end of file
+{}
diff --git a/example/App.js b/example/App.js
index 55187fb4..61449fd3 100644
--- a/example/App.js
+++ b/example/App.js
@@ -3,150 +3,169 @@ import {StyleSheet, Text, View, TouchableHighlight} from 'react-native';
import JPush from 'jpush-react-native';
const styles = StyleSheet.create({
- container: {
- flex: 1,
- justifyContent: 'center',
- alignItems: 'center',
- backgroundColor: '#F5FCFF',
- },
- setBtnStyle: {
- width: 320,
- justifyContent: 'center',
- alignItems: 'center',
- marginTop: 10,
- borderWidth: 1,
- borderColor: '#3e83d7',
- borderRadius: 8,
- backgroundColor: '#3e83d7',
- padding: 10
- },
- textStyle: {
- textAlign: 'center',
- fontSize: 25,
- color: '#ffffff'
- }
+ container: {
+ flex: 1,
+ justifyContent: 'center',
+ alignItems: 'center',
+ backgroundColor: '#F5FCFF',
+ },
+ setBtnStyle: {
+ width: 320,
+ justifyContent: 'center',
+ alignItems: 'center',
+ marginTop: 10,
+ borderWidth: 1,
+ borderColor: '#3e83d7',
+ borderRadius: 8,
+ backgroundColor: '#3e83d7',
+ padding: 10
+ },
+ textStyle: {
+ textAlign: 'center',
+ fontSize: 25,
+ color: '#ffffff'
+ }
});
class Button extends React.Component {
- render() {
- return
-
-
- {this.props.title}
-
-
-
- }
+ render() {
+ return
+
+
+ {this.props.title}
+
+
+
+ }
}
export default class App extends React.Component {
- constructor(props) {
- super(props);
- }
-
- componentDidMount() {
- JPush.init({"appKey":"129c21dc4cb5e6f6de194003","channel":"dev","production":1});
- //连接状态
- this.connectListener = result => {
- console.log("connectListener:" + JSON.stringify(result))
- };
- JPush.addConnectEventListener(this.connectListener);
- //通知回调
- this.notificationListener = result => {
- console.log("notificationListener:" + JSON.stringify(result))
- };
- JPush.addNotificationListener(this.notificationListener);
- //本地通知回调
- this.localNotificationListener = result => {
- console.log("localNotificationListener:" + JSON.stringify(result))
- };
- JPush.addLocalNotificationListener(this.localNotificationListener);
- //自定义消息回调
- // this.customMessageListener = result => {
- // console.log("customMessageListener:" + JSON.stringify(result))
- // };
- // JPush.addCustomMessagegListener(this.customMessageListener);
- //tag alias事件回调
- this.tagAliasListener = result => {
- console.log("tagAliasListener:" + JSON.stringify(result))
- };
- JPush.addTagAliasListener(this.tagAliasListener);
- //手机号码事件回调
- this.mobileNumberListener = result => {
- console.log("mobileNumberListener:" + JSON.stringify(result))
- };
- JPush.addMobileNumberListener(this.mobileNumberListener);
- }
-
- render() {
- return (
-
-
- );
- }
+ constructor(props) {
+ super(props);
+ }
+
+ componentDidMount() {
+ // JPush.setBackgroundEnable(true);
+ JPush.init({"appKey":"4fcc3e237eec4c4fb804ad49","channel":"dev","production":1});
+ //连接状态
+ this.connectListener = result => {
+ console.log("connectListener:" + JSON.stringify(result))
+ };
+ JPush.addConnectEventListener(this.connectListener);
+ //通知回调
+ this.notificationListener = result => {
+ console.log("notificationListener:" + JSON.stringify(result))
+ alert(JSON.stringify(result))
+ };
+ JPush.addNotificationListener(this.notificationListener);
+ //本地通知回调
+ this.localNotificationListener = result => {
+ console.log("localNotificationListener:" + JSON.stringify(result))
+ };
+ JPush.addLocalNotificationListener(this.localNotificationListener);
+ //自定义消息回调
+ this.customMessageListener = result => {
+ console.log("customMessageListener:" + JSON.stringify(result))
+ };
+ JPush.addCustomMessageListener(this.customMessageListener);
+ //通知按钮点击回调
+ this.notifyButtonClickListener = result => {
+ console.log("notifyButtonClickListener:" + JSON.stringify(result))
+ };
+ JPush.addNotifyButtonClickListener(this.notifyButtonClickListener);
+ //应用内消息回调
+ JPush.pageEnterTo("HomePage") // 进入首页,当页面退出时请调用 JPush.pageLeave('HomePage')
+ this.inappMessageListener = result => {
+ console.log("inappMessageListener:" + JSON.stringify(result))
+ alert(JSON.stringify(result))
+ };
+ JPush.addInappMessageListener(this.inappMessageListener);
+ //tag alias事件回调
+ this.tagAliasListener = result => {
+ console.log("tagAliasListener:" + JSON.stringify(result))
+ };
+ JPush.addTagAliasListener(this.tagAliasListener);
+ //手机号码事件回调
+ this.mobileNumberListener = result => {
+ console.log("mobileNumberListener:" + JSON.stringify(result))
+ };
+ JPush.addMobileNumberListener(this.mobileNumberListener);
+ }
+
+ render() {
+ return (
+
+ JPush.setLoggerEnable(true)
+ }/>
+
+ JPush.getRegistrationID(result =>
+ console.log("registerID:" + JSON.stringify(result))
+ )}/>
+
+ JPush.setProperties({sequence: 1, pros:{2:'b'}})}/>
+ {/* JPush.addTags({sequence: 1, tags: ["1", "2", "3"]})}/>
+
+ JPush.updateTags({sequence: 2, tags: ["4", "5", "6"]})}/>
+
+ JPush.deleteTag({sequence: 3, tags: ["4", "5", "6"]})}/>
+
+ JPush.deleteTags({sequence: 4})}/>
+
+ JPush.queryTag({sequence: 4, tag: "1"})}/>
+
+ JPush.queryTags({sequence: 5})}/>
+
+ JPush.setAlias({sequence: 6,alias:"xxx"})}/>
+
+ JPush.deleteAlias({sequence: 7})}/>
+
+ JPush.queryAlias({sequence: 8})}/>
+
+ JPush.setMobileNumber({mobileNumber: "13888888888"})}/>
+
+ //仅ios
+ JPush.setBadge({"badge":1,"appBadge":1})}/>
+
+ JPush.initCrashHandler()}/>
+
+ JPush.addLocalNotification({
+ messageID: "123456789",
+ title: "title123",
+ content: "content123",
+ extras: {"key123": "value123"}
+ })}/>
+
+ JPush.removeLocalNotification({messageID: '123456789'})}/>*/}
+
+
+ );
+ }
}
+
+
+
diff --git a/example/Gemfile b/example/Gemfile
new file mode 100644
index 00000000..8d72c37a
--- /dev/null
+++ b/example/Gemfile
@@ -0,0 +1,9 @@
+source 'https://rubygems.org'
+
+# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
+ruby ">= 2.6.10"
+
+# Cocoapods 1.15 introduced a bug which break the build. We will remove the upper
+# bound in the template on Cocoapods with next React Native release.
+gem 'cocoapods', '>= 1.13', '< 1.15'
+gem 'activesupport', '>= 6.1.7.5', '< 7.1.0'
diff --git a/example/README.md b/example/README.md
new file mode 100644
index 00000000..12470c30
--- /dev/null
+++ b/example/README.md
@@ -0,0 +1,79 @@
+This is a new [**React Native**](https://reactnative.dev) project, bootstrapped using [`@react-native-community/cli`](https://github.com/react-native-community/cli).
+
+# Getting Started
+
+>**Note**: Make sure you have completed the [React Native - Environment Setup](https://reactnative.dev/docs/environment-setup) instructions till "Creating a new application" step, before proceeding.
+
+## Step 1: Start the Metro Server
+
+First, you will need to start **Metro**, the JavaScript _bundler_ that ships _with_ React Native.
+
+To start Metro, run the following command from the _root_ of your React Native project:
+
+```bash
+# using npm
+npm start
+
+# OR using Yarn
+yarn start
+```
+
+## Step 2: Start your Application
+
+Let Metro Bundler run in its _own_ terminal. Open a _new_ terminal from the _root_ of your React Native project. Run the following command to start your _Android_ or _iOS_ app:
+
+### For Android
+
+```bash
+# using npm
+npm run android
+
+# OR using Yarn
+yarn android
+```
+
+### For iOS
+
+```bash
+# using npm
+npm run ios
+
+# OR using Yarn
+yarn ios
+```
+
+If everything is set up _correctly_, you should see your new app running in your _Android Emulator_ or _iOS Simulator_ shortly provided you have set up your emulator/simulator correctly.
+
+This is one way to run your app — you can also run it directly from within Android Studio and Xcode respectively.
+
+## Step 3: Modifying your App
+
+Now that you have successfully run the app, let's modify it.
+
+1. Open `App.tsx` in your text editor of choice and edit some lines.
+2. For **Android**: Press the R key twice or select **"Reload"** from the **Developer Menu** (Ctrl + M (on Window and Linux) or Cmd ⌘ + M (on macOS)) to see your changes!
+
+ For **iOS**: Hit Cmd ⌘ + R in your iOS Simulator to reload the app and see your changes!
+
+## Congratulations! :tada:
+
+You've successfully run and modified your React Native App. :partying_face:
+
+### Now what?
+
+- If you want to add this new React Native code to an existing application, check out the [Integration guide](https://reactnative.dev/docs/integration-with-existing-apps).
+- If you're curious to learn more about React Native, check out the [Introduction to React Native](https://reactnative.dev/docs/getting-started).
+
+# Troubleshooting
+
+If you can't get this to work, see the [Troubleshooting](https://reactnative.dev/docs/troubleshooting) page.
+
+# Learn More
+
+To learn more about React Native, take a look at the following resources:
+
+- [React Native Website](https://reactnative.dev) - learn more about React Native.
+- [Getting Started](https://reactnative.dev/docs/environment-setup) - an **overview** of React Native and how setup your environment.
+- [Learn the Basics](https://reactnative.dev/docs/getting-started) - a **guided tour** of the React Native **basics**.
+- [Blog](https://reactnative.dev/blog) - read the latest official React Native **Blog** posts.
+- [`@facebook/react-native`](https://github.com/facebook/react-native) - the Open Source; GitHub **repository** for React Native.
diff --git a/example/__tests__/App-test.js b/example/__tests__/App.test.tsx
similarity index 73%
rename from example/__tests__/App-test.js
rename to example/__tests__/App.test.tsx
index 17847669..9eac6fbc 100644
--- a/example/__tests__/App-test.js
+++ b/example/__tests__/App.test.tsx
@@ -6,6 +6,9 @@ import 'react-native';
import React from 'react';
import App from '../App';
+// Note: import explicitly to use the types shipped with jest.
+import {it} from '@jest/globals';
+
// Note: test renderer must be required after react-native.
import renderer from 'react-test-renderer';
diff --git a/example/android/.project b/example/android/.project
deleted file mode 100644
index 18f5f09e..00000000
--- a/example/android/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
- android____
- Project android____ created by Buildship.
-
-
-
-
- org.eclipse.buildship.core.gradleprojectbuilder
-
-
-
-
-
- org.eclipse.buildship.core.gradleprojectnature
-
-
diff --git a/example/android/.settings/org.eclipse.buildship.core.prefs b/example/android/.settings/org.eclipse.buildship.core.prefs
deleted file mode 100644
index e8895216..00000000
--- a/example/android/.settings/org.eclipse.buildship.core.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-connection.project.dir=
-eclipse.preferences.version=1
diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle
index 2758a63a..b33625cb 100644
--- a/example/android/app/build.gradle
+++ b/example/android/app/build.gradle
@@ -1,95 +1,123 @@
apply plugin: "com.android.application"
+apply plugin: "org.jetbrains.kotlin.android"
+apply plugin: "com.facebook.react"
+
+/**
+ * This is the configuration block to customize your React Native Android app.
+ * By default you don't need to apply any configuration, just uncomment the lines you need.
+ */
+react {
+ /* Folders */
+ // The root of your project, i.e. where "package.json" lives. Default is '..'
+ // root = file("../")
+ // The folder where the react-native NPM package is. Default is ../node_modules/react-native
+ // reactNativeDir = file("../node_modules/react-native")
+ // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen
+ // codegenDir = file("../node_modules/@react-native/codegen")
+ // The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js
+ // cliFile = file("../node_modules/react-native/cli.js")
+
+ /* Variants */
+ // The list of variants to that are debuggable. For those we're going to
+ // skip the bundling of the JS bundle and the assets. By default is just 'debug'.
+ // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants.
+ // debuggableVariants = ["liteDebug", "prodDebug"]
+
+ /* Bundling */
+ // A list containing the node command and its flags. Default is just 'node'.
+ // nodeExecutableAndArgs = ["node"]
+ //
+ // The command to run when bundling. By default is 'bundle'
+ // bundleCommand = "ram-bundle"
+ //
+ // The path to the CLI configuration file. Default is empty.
+ // bundleConfig = file(../rn-cli.config.js)
+ //
+ // The name of the generated asset file containing your JS bundle
+ // bundleAssetName = "MyApplication.android.bundle"
+ //
+ // The entry file for bundle generation. Default is 'index.android.js' or 'index.js'
+ // entryFile = file("../js/MyApplication.android.js")
+ //
+ // A list of extra flags to pass to the 'bundle' commands.
+ // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle
+ // extraPackagerArgs = []
+
+ /* Hermes Commands */
+ // The hermes compiler command to run. By default it is 'hermesc'
+ // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc"
+ //
+ // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map"
+ // hermesFlags = ["-O", "-output-source-map"]
+}
-import com.android.build.OutputFile
-
-project.ext.react = [
- entryFile: "index.js",
- bundleInDebug: true,
- enableHermes: false, // clean and rebuild if changing
-]
-
-apply from: "../../node_modules/react-native/react.gradle"
-
-def enableSeparateBuildPerCPUArchitecture = false
-
+/**
+ * Set this to true to Run Proguard on Release builds to minify the Java bytecode.
+ */
+def enableProguardInReleaseBuilds = false
+
+/**
+ * The preferred build flavor of JavaScriptCore (JSC)
+ *
+ * For example, to use the international variant, you can use:
+ * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
+ *
+ * The international variant includes ICU i18n library and necessary data
+ * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
+ * give correct results when using with locales other than en-US. Note that
+ * this variant is about 6MiB larger per architecture than default.
+ */
def jscFlavor = 'org.webkit:android-jsc:+'
-def enableHermes = project.ext.react.get("enableHermes", false);
-
android {
- compileSdkVersion rootProject.ext.compileSdkVersion
-
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
- }
+ ndkVersion rootProject.ext.ndkVersion
+ buildToolsVersion rootProject.ext.buildToolsVersion
+ compileSdk rootProject.ext.compileSdkVersion
+ namespace "com.example"
defaultConfig {
- applicationId "com.jmessage.sdk" //在此替换你的applicationId
+ applicationId "cn.allpublic"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
+
manifestPlaceholders = [
- JPUSH_APPKEY: "129c21dc4cb5e6f6de194003", //在此替换你的APPKey
- JPUSH_CHANNEL: "default" //在此替换你的channel
+ JPUSH_APPKEY: "32f266ea08c3b3d7a059b378", //在此替换你的APPKey
+ JPUSH_CHANNEL: "test" //在此替换你的channel
]
}
- splits {
- abi {
- reset()
- enable enableSeparateBuildPerCPUArchitecture
- universalApk false // If true, also generate a universal APK
- include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
+ signingConfigs {
+ debug {
+ storeFile file('debug.keystore')
+ storePassword 'android'
+ keyAlias 'androiddebugkey'
+ keyPassword 'android'
}
}
- // 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:
- // https://developer.android.com/studio/build/configure-apk-splits.html
- def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
- 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
- }
-
+ buildTypes {
+ debug {
+ signingConfig signingConfigs.debug
+ }
+ release {
+ // Caution! In production, you need to generate your own keystore file.
+ // see https://reactnative.dev/docs/signed-apk-android.
+ signingConfig signingConfigs.debug
+ minifyEnabled enableProguardInReleaseBuilds
+ proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
- }
-
- packagingOptions {
- pickFirst '**/armeabi-v7a/libc++_shared.so'
- pickFirst '**/x86/libc++_shared.so'
- pickFirst '**/arm64-v8a/libc++_shared.so'
- pickFirst '**/x86_64/libc++_shared.so'
- pickFirst '**/x86/libjsc.so'
- pickFirst '**/armeabi-v7a/libjsc.so'
}
}
dependencies {
- implementation fileTree(dir: "libs", include: ["*.jar"])
- implementation "com.facebook.react:react-native:+" // From node_modules
- implementation project(':jpush-react-native') // 添加 jpush 依赖
- implementation project(':jcore-react-native') // 添加 jcore 依赖
-
- debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0'
+ // The version of react-native is set by the React Native Gradle Plugin
+ implementation("com.facebook.react:react-android")
- if (enableHermes) {
- def hermesPath = "../../node_modules/hermesvm/android/";
- debugImplementation files(hermesPath + "hermes-debug.aar")
- releaseImplementation files(hermesPath + "hermes-release.aar")
+ if (hermesEnabled.toBoolean()) {
+ implementation("com.facebook.react:hermes-android")
} else {
- implementation jscFlavor
+ implementation jscFlavor
}
}
-// 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'
-}
-
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
diff --git a/example/android/app/debug.keystore b/example/android/app/debug.keystore
new file mode 100644
index 00000000..364e105e
Binary files /dev/null and b/example/android/app/debug.keystore differ
diff --git a/example/android/app/src/debug/AndroidManifest.xml b/example/android/app/src/debug/AndroidManifest.xml
index fa26aa56..eb98c01a 100644
--- a/example/android/app/src/debug/AndroidManifest.xml
+++ b/example/android/app/src/debug/AndroidManifest.xml
@@ -2,7 +2,8 @@
-
-
-
+
diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml
index dcdf7e63..00b470c0 100644
--- a/example/android/app/src/main/AndroidManifest.xml
+++ b/example/android/app/src/main/AndroidManifest.xml
@@ -1,37 +1,33 @@
-
+
+
+
+
-
-
-
-
-
-
-
-
+ android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
+ android:launchMode="singleTask"
+ android:windowSoftInputMode="adjustResize"
+ android:exported="true">
+
+
+
+
+
+ android:value="${JPUSH_APPKEY}" />
-
-
-
diff --git a/example/android/app/src/main/java/com/example/MainActivity.java b/example/android/app/src/main/java/com/example/MainActivity.java
deleted file mode 100644
index e84b7255..00000000
--- a/example/android/app/src/main/java/com/example/MainActivity.java
+++ /dev/null
@@ -1,15 +0,0 @@
-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/MainActivity.kt b/example/android/app/src/main/java/com/example/MainActivity.kt
new file mode 100644
index 00000000..35dff7f9
--- /dev/null
+++ b/example/android/app/src/main/java/com/example/MainActivity.kt
@@ -0,0 +1,22 @@
+package com.example
+
+import com.facebook.react.ReactActivity
+import com.facebook.react.ReactActivityDelegate
+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled
+import com.facebook.react.defaults.DefaultReactActivityDelegate
+
+class MainActivity : ReactActivity() {
+
+ /**
+ * Returns the name of the main component registered from JavaScript. This is used to schedule
+ * rendering of the component.
+ */
+ override fun getMainComponentName(): String = "example"
+
+ /**
+ * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate]
+ * which allows you to enable New Architecture with a single boolean flags [fabricEnabled]
+ */
+ override fun createReactActivityDelegate(): ReactActivityDelegate =
+ DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled)
+}
diff --git a/example/android/app/src/main/java/com/example/MainApplication.java b/example/android/app/src/main/java/com/example/MainApplication.java
deleted file mode 100644
index 61f654cb..00000000
--- a/example/android/app/src/main/java/com/example/MainApplication.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.example;
-
-import android.app.Application;
-
-import com.facebook.react.PackageList;
-import com.facebook.react.ReactApplication;
-import com.facebook.react.ReactNativeHost;
-import com.facebook.react.ReactPackage;
-import com.facebook.soloader.SoLoader;
-
-import java.util.List;
-
-import cn.jiguang.plugins.push.JPushModule;
-
-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() {
- @SuppressWarnings("UnnecessaryLocalVariable")
- List packages = new PackageList(this).getPackages();
- //RN0.60以下需要打开,注意导包JPushPackage
- //packages.add(new JPushPackage());
- return packages;
- }
-
- @Override
- protected String getJSMainModuleName() {
- return "index";
- }
- };
-
- @Override
- public ReactNativeHost getReactNativeHost() {
- return mReactNativeHost;
- }
-
- @Override
- public void onCreate() {
- super.onCreate();
- SoLoader.init(this, /* native exopackage */ false);
- //调用此方法:点击通知让应用从后台切到前台
- JPushModule.registerActivityLifecycle(this);
- }
-}
diff --git a/example/android/app/src/main/java/com/example/MainApplication.kt b/example/android/app/src/main/java/com/example/MainApplication.kt
new file mode 100644
index 00000000..d043c6de
--- /dev/null
+++ b/example/android/app/src/main/java/com/example/MainApplication.kt
@@ -0,0 +1,47 @@
+package com.example
+
+import android.app.Application
+import com.facebook.react.PackageList
+import com.facebook.react.ReactApplication
+import com.facebook.react.ReactHost
+import com.facebook.react.ReactNativeHost
+import com.facebook.react.ReactPackage
+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load
+import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost
+import com.facebook.react.defaults.DefaultReactNativeHost
+import com.facebook.soloader.SoLoader
+import cn.jiguang.plugins.push.JPushModule
+
+class MainApplication : Application(), ReactApplication {
+
+ override val reactNativeHost: ReactNativeHost =
+ object : DefaultReactNativeHost(this) {
+ override fun getPackages(): List =
+ PackageList(this).packages.apply {
+ // Packages that cannot be autolinked yet can be added manually here, for example:
+ // add(MyReactNativePackage())
+ }
+
+ override fun getJSMainModuleName(): String = "index"
+
+ override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG
+
+ override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
+ override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED
+ }
+
+ override val reactHost: ReactHost
+ get() = getDefaultReactHost(applicationContext, reactNativeHost)
+
+ override fun onCreate() {
+ super.onCreate()
+ SoLoader.init(this, false)
+ if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
+ // If you opted-in for the New Architecture, we load the native entry point for this app.
+ load()
+ }
+ //调用此方法:点击通知让应用从后台切到前台
+ //调用此方法:点击通知让应用从后台切到前台
+ JPushModule.registerActivityLifecycle(this)
+ }
+}
diff --git a/example/android/app/src/main/res/drawable/jpush_notification_icon.png b/example/android/app/src/main/res/drawable/jpush_notification_icon.png
deleted file mode 100644
index b964f1e1..00000000
Binary files a/example/android/app/src/main/res/drawable/jpush_notification_icon.png and /dev/null differ
diff --git a/example/android/app/src/main/res/drawable/rn_edit_text_material.xml b/example/android/app/src/main/res/drawable/rn_edit_text_material.xml
new file mode 100644
index 00000000..5c25e728
--- /dev/null
+++ b/example/android/app/src/main/res/drawable/rn_edit_text_material.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/example/android/app/src/main/res/values/styles.xml b/example/android/app/src/main/res/values/styles.xml
index 62fe59fa..7ba83a2a 100644
--- a/example/android/app/src/main/res/values/styles.xml
+++ b/example/android/app/src/main/res/values/styles.xml
@@ -1,9 +1,9 @@
-
diff --git a/example/android/build.gradle b/example/android/build.gradle
index 479a4b94..f536a792 100644
--- a/example/android/build.gradle
+++ b/example/android/build.gradle
@@ -1,40 +1,21 @@
-// Top-level build file where you can add configuration options common to all sub-projects/modules.
-
buildscript {
ext {
- buildToolsVersion = "28.0.3"
- minSdkVersion = 16
- compileSdkVersion = 28
- targetSdkVersion = 28
- supportLibVersion = "28.0.0"
+ buildToolsVersion = "34.0.0"
+ minSdkVersion = 23
+ compileSdkVersion = 34
+ targetSdkVersion = 34
+ ndkVersion = "26.1.10909125"
+ kotlinVersion = "1.9.22"
}
repositories {
google()
- maven{ url'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
-
+ mavenCentral()
}
dependencies {
- classpath("com.android.tools.build:gradle:3.4.1")
-
- // NOTE: Do not place your application dependencies here; they belong
- // in the individual module build.gradle files
+ classpath("com.android.tools.build:gradle")
+ classpath("com.facebook.react:react-native-gradle-plugin")
+ classpath("org.jetbrains.kotlin:kotlin-gradle-plugin")
}
}
-allprojects {
- repositories {
- mavenLocal()
- maven {
- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
- url("$rootDir/../node_modules/react-native/android")
- }
- maven {
- // Android JSC is installed from npm
- url("$rootDir/../node_modules/jsc-android/dist")
- }
-
- google()
- maven{ url'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
-
- }
-}
+apply plugin: "com.facebook.react.rootproject"
diff --git a/example/android/gradle.properties b/example/android/gradle.properties
index 027ef9db..a46a5b90 100644
--- a/example/android/gradle.properties
+++ b/example/android/gradle.properties
@@ -9,13 +9,33 @@
# 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
+# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m
+org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m
# 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
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app's APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
+# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true
+
+# Use this property to specify which architecture you want to build.
+# You can also override it from the CLI using
+# ./gradlew -PreactNativeArchitectures=x86_64
+reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64
+
+# Use this property to enable support to the new architecture.
+# This will allow you to use TurboModules and the Fabric render in
+# your application. You should enable this flag either if you want
+# to write custom TurboModules/Fabric components OR use libraries that
+# are providing them.
+newArchEnabled=false
+
+# Use this property to enable or disable the Hermes JS engine.
+# If set to false, you will be using JSC instead.
+hermesEnabled=true
diff --git a/example/android/gradle/wrapper/gradle-wrapper.jar b/example/android/gradle/wrapper/gradle-wrapper.jar
index 5c2d1cf0..7f93135c 100644
Binary files a/example/android/gradle/wrapper/gradle-wrapper.jar 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
index ee69dd68..2ea3535d 100644
--- a/example/android/gradle/wrapper/gradle-wrapper.properties
+++ b/example/android/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip
+networkTimeout=10000
+validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/example/android/gradlew b/example/android/gradlew
index b0d6d0ab..1aa94a42 100755
--- a/example/android/gradlew
+++ b/example/android/gradlew
@@ -1,13 +1,13 @@
-#!/usr/bin/env sh
+#!/bin/sh
#
-# Copyright 2015 the original author or authors.
+# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
@@ -17,78 +17,111 @@
#
##############################################################################
-##
-## Gradle start up script for UN*X
-##
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
##############################################################################
# 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
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
+MAX_FD=maximum
warn () {
echo "$*"
-}
+} >&2
die () {
echo
echo "$*"
echo
exit 1
-}
+} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
- NONSTOP* )
- nonstop=true
- ;;
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
esac
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"
+ JAVACMD=$JAVA_HOME/jre/sh/java
else
- JAVACMD="$JAVA_HOME/bin/java"
+ JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
@@ -97,92 +130,120 @@ 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.
+ JAVACMD=java
+ if ! command -v java >/dev/null 2>&1
+ then
+ 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
fi
# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "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
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
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
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
-# 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"`
- JAVACMD=`cygpath --unix "$JAVACMD"`
-
- # 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\""
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
fi
- i=$((i+1))
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
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
-# Escape application args
-save () {
- for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
- echo " "
-}
-APP_ARGS=$(save "$@")
-# Collect all arguments for the java command, following the shell quoting and substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
-if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
- cd "$(dirname "$0")"
+# Collect all arguments for the java command:
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+# and any embedded shellness will be escaped.
+# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+# treated as '${Hostname}' itself on the command line.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
fi
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
exec "$JAVACMD" "$@"
diff --git a/example/android/gradlew.bat b/example/android/gradlew.bat
index 15e1ee37..7101f8e4 100644
--- a/example/android/gradlew.bat
+++ b/example/android/gradlew.bat
@@ -5,7 +5,7 @@
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
-@rem http://www.apache.org/licenses/LICENSE-2.0
+@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@@ -14,7 +14,7 @@
@rem limitations under the License.
@rem
-@if "%DEBUG%" == "" @echo off
+@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@@ -25,10 +25,14 @@
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
@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="-Xmx64m" "-Xms64m"
@@ -37,13 +41,13 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
+if %ERRORLEVEL% equ 0 goto execute
-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.
+echo. 1>&2
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
goto fail
@@ -51,48 +55,36 @@ goto fail
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-if exist "%JAVA_EXE%" goto init
+if exist "%JAVA_EXE%" goto execute
-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.
+echo. 1>&2
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
goto fail
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_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=%*
-
: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%
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
+if %ERRORLEVEL% equ 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
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
diff --git a/example/android/settings.gradle b/example/android/settings.gradle
index 65133a2b..803783e1 100644
--- a/example/android/settings.gradle
+++ b/example/android/settings.gradle
@@ -1,8 +1,4 @@
rootProject.name = 'example'
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
include ':app'
-
-include ':jpush-react-native'
-project(':jpush-react-native').projectDir = new File(rootProject.projectDir, '../node_modules/jpush-react-native/android')
-include ':jcore-react-native'
-project(':jcore-react-native').projectDir = new File(rootProject.projectDir, '../node_modules/jcore-react-native/android')
\ No newline at end of file
+includeBuild('../node_modules/@react-native/gradle-plugin')
diff --git a/example/app.json b/example/app.json
index 486d55b0..3fed6761 100644
--- a/example/app.json
+++ b/example/app.json
@@ -1,4 +1,4 @@
{
"name": "example",
"displayName": "example"
-}
\ No newline at end of file
+}
diff --git a/example/babel.config.js b/example/babel.config.js
index f842b77f..f7b3da3b 100644
--- a/example/babel.config.js
+++ b/example/babel.config.js
@@ -1,3 +1,3 @@
module.exports = {
- presets: ['module:metro-react-native-babel-preset'],
+ presets: ['module:@react-native/babel-preset'],
};
diff --git a/example/ios-swift/AppDelegate.swift b/example/ios-swift/AppDelegate.swift
new file mode 100644
index 00000000..4f3f0fac
--- /dev/null
+++ b/example/ios-swift/AppDelegate.swift
@@ -0,0 +1,128 @@
+import UIKit
+import React
+import React_RCTAppDelegate
+import ReactAppDependencyProvider
+
+@main
+class AppDelegate: UIResponder, UIApplicationDelegate {
+ var window: UIWindow?
+
+ var reactNativeDelegate: ReactNativeDelegate?
+ var reactNativeFactory: RCTReactNativeFactory?
+
+ func application(
+ _ application: UIApplication,
+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
+ ) -> Bool {
+ let delegate = ReactNativeDelegate()
+ let factory = RCTReactNativeFactory(delegate: delegate)
+ delegate.dependencyProvider = RCTAppDependencyProvider()
+
+ reactNativeDelegate = delegate
+ reactNativeFactory = factory
+
+ window = UIWindow(frame: UIScreen.main.bounds)
+
+ factory.startReactNative(
+ withModuleName: "HelloWord",
+ in: window,
+ launchOptions: launchOptions
+ )
+
+ //************************************************ JPush Need************************************************
+ let entity = JPUSHRegisterEntity()
+ entity.types = 0
+ JPUSHService.register(forRemoteNotificationConfig: entity, delegate: self)
+
+ return true
+ }
+
+ //************************************************ JPush Need************************************************
+ func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
+ // JPush 注册devicetoken
+ JPUSHService.registerDeviceToken(deviceToken)
+ }
+
+ func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
+ // 注意调用
+ JPUSHService.handleRemoteNotification(userInfo)
+ NotificationCenter.default.post(name: NSNotification.Name(J_APNS_NOTIFICATION_ARRIVED_EVENT), object: userInfo)
+ completionHandler(.newData)
+ }
+
+}
+
+class ReactNativeDelegate: RCTDefaultReactNativeFactoryDelegate {
+ override func sourceURL(for bridge: RCTBridge) -> URL? {
+ self.bundleURL()
+ }
+
+ override func bundleURL() -> URL? {
+#if DEBUG
+ RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index")
+#else
+ Bundle.main.url(forResource: "main", withExtension: "jsbundle")
+#endif
+ }
+}
+
+
+//************************************************JPush Need ************************************************
+
+extension AppDelegate:JPUSHRegisterDelegate {
+ //MARK - JPUSHRegisterDelegate
+ @available(iOS 10.0, *)
+ func jpushNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification,
+ withCompletionHandler completionHandler: ((Int) -> Void)) {
+ let userInfo = notification.request.content.userInfo
+
+ if (notification.request.trigger?.isKind(of: UNPushNotificationTrigger.self) == true) {
+ // 注意调用
+ JPUSHService.handleRemoteNotification(userInfo)
+ NotificationCenter.default.post(name: NSNotification.Name(J_APNS_NOTIFICATION_ARRIVED_EVENT), object: userInfo)
+ print("收到远程通知:\(userInfo)")
+ } else {
+ NotificationCenter.default.post(name: NSNotification.Name(J_LOCAL_NOTIFICATION_ARRIVED_EVENT), object: userInfo)
+ print("收到本地通知:\(userInfo)")
+ }
+
+ completionHandler(Int(UNNotificationPresentationOptions.badge.rawValue | UNNotificationPresentationOptions.sound.rawValue | UNNotificationPresentationOptions.alert.rawValue))
+ }
+
+ @available(iOS 10.0, *)
+ func jpushNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: (() -> Void)) {
+
+ let userInfo = response.notification.request.content.userInfo
+ if (response.notification.request.trigger?.isKind(of: UNPushNotificationTrigger.self) == true) {
+ // 注意调用
+ JPUSHService.handleRemoteNotification(userInfo)
+ NotificationCenter.default.post(name: NSNotification.Name(J_APNS_NOTIFICATION_OPENED_EVENT), object: userInfo)
+ print("点击远程通知:\(userInfo)")
+
+ } else {
+ print("点击本地通知:\(userInfo)")
+ NotificationCenter.default.post(name: NSNotification.Name(J_LOCAL_NOTIFICATION_OPENED_EVENT), object: userInfo)
+ }
+
+ completionHandler()
+
+ }
+
+ func jpushNotificationCenter(_ center: UNUserNotificationCenter, openSettingsFor notification: UNNotification) {
+
+ }
+
+ func jpushNotificationAuthorization(_ status: JPAuthorizationStatus, withInfo info: [AnyHashable : Any]?) {
+ print("receive notification authorization status:\(status), info:\(String(describing: info))")
+ }
+
+
+ // //MARK - 自定义消息
+ func networkDidReceiveMessage(_ notification: NSNotification) {
+ let userInfo = notification.userInfo!
+ NotificationCenter.default.post(name: NSNotification.Name(J_CUSTOM_NOTIFICATION_EVENT), object: userInfo)
+ }
+
+
+
+}
diff --git a/example/ios-swift/HelloWord-Bridging-Header.h b/example/ios-swift/HelloWord-Bridging-Header.h
new file mode 100644
index 00000000..ced685b7
--- /dev/null
+++ b/example/ios-swift/HelloWord-Bridging-Header.h
@@ -0,0 +1,15 @@
+//
+// HelloWord-Bridging-Header.h
+// HelloWord
+//
+// Created by Shuni Huang on 2025/9/23.
+//
+
+#ifndef HelloWord_Bridging_Header_h
+#define HelloWord_Bridging_Header_h
+
+//JPush Need
+#import "JPUSHService.h"
+#import "RCTJPushModule.h"
+
+#endif /* HelloWord_Bridging_Header_h */
diff --git a/example/ios-swift/README.md b/example/ios-swift/README.md
new file mode 100644
index 00000000..f85a5a90
--- /dev/null
+++ b/example/ios-swift/README.md
@@ -0,0 +1,24 @@
+如果iOS项目是Swift代码。
+
+可以根据以下操作来完成 AppDelegate.swift 文件里的配置。
+
+1. 新建Swift调用OC代码的桥接文件。
+
+ XCode - File from Template - Header File, 键入桥接文件名, 一般为 iOS项目名-Bridging-Header.h ,创建桥接文件。并在Xcode 的 Build Settings 中找到 Swift Compiler - General>> -> Objective-C Bridging Header 选项,将新建的桥接头文件路径填入其中。并将 "JPUSHService.h" 和 "RCTJPushModule.h" 文件通过 #import 方式引入。
+
+ 桥文件的代码示例:也可以参考ios-swift/HelloWord-Bridging-Header.h 文件。
+
+```
+#ifndef HelloWord_Bridging_Header_h
+#define HelloWord_Bridging_Header_h
+
+//JPush Need
+#import "JPUSHService.h"
+#import "RCTJPushModule.h"
+
+#endif /* HelloWord_Bridging_Header_h */
+```
+
+
+2. AppDelegate.h 文件的配置可以参考ios-swift/AppDelegate.swift中的配置,请关注标注 JPush Need 的代码。
+
diff --git a/example/ios/.xcode.env b/example/ios/.xcode.env
new file mode 100644
index 00000000..3d5782c7
--- /dev/null
+++ b/example/ios/.xcode.env
@@ -0,0 +1,11 @@
+# This `.xcode.env` file is versioned and is used to source the environment
+# used when running script phases inside Xcode.
+# To customize your local environment, you can create an `.xcode.env.local`
+# file that is not versioned.
+
+# NODE_BINARY variable contains the PATH to the node executable.
+#
+# Customize the NODE_BINARY variable here.
+# For example, to use nvm with brew, add the following line
+# . "$(brew --prefix nvm)/nvm.sh" --no-use
+export NODE_BINARY=$(command -v node)
diff --git a/example/ios/Podfile b/example/ios/Podfile
index bd062e2f..e0a72606 100644
--- a/example/ios/Podfile
+++ b/example/ios/Podfile
@@ -1,59 +1,40 @@
-platform :ios, '9.0'
-require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
+# Resolve react_native_pods.rb with node to allow for hoisting
+require Pod::Executable.execute_command('node', ['-p',
+ 'require.resolve(
+ "react-native/scripts/react_native_pods.rb",
+ {paths: [process.argv[1]]},
+ )', __dir__]).strip
-target 'example' do
- # Pods for example
- pod 'React', :path => '../node_modules/react-native/'
- pod 'React-Core', :path => '../node_modules/react-native/React'
- pod 'React-DevSupport', :path => '../node_modules/react-native/React'
- pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS'
- pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation'
- pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob'
- pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image'
- pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS'
- pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network'
- pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings'
- pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text'
- pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration'
- pod 'React-RCTWebSocket', :path => '../node_modules/react-native/Libraries/WebSocket'
+platform :ios, min_ios_version_supported
+prepare_react_native_project!
- pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact'
- pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi'
- pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor'
- pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector'
- pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'
+linkage = ENV['USE_FRAMEWORKS']
+if linkage != nil
+ Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green
+ use_frameworks! :linkage => linkage.to_sym
+end
- pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
- pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
- pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
+target 'example' do
+ config = use_native_modules!
- use_native_modules!
-end
+ use_react_native!(
+ :path => config[:reactNativePath],
+ # An absolute path to your application root.
+ :app_path => "#{Pod::Config.instance.installation_root}/.."
+ )
-post_install do |installer|
- ## Fix for XCode 12.5
- find_and_replace(
- "../node_modules/react-native/React/CxxBridge/RCTCxxBridge.mm",
- "_initializeModules:(NSArray> *)modules",
- "_initializeModules:(NSArray *)modules")
-
- find_and_replace(
- "../node_modules/react-native/ReactCommon/turbomodule/core/platform/ios/RCTTurboModuleManager.mm",
- "RCTBridgeModuleNameForClass(module))",
- "RCTBridgeModuleNameForClass(Class(module)))"
- )
+ target 'exampleTests' do
+ inherit! :complete
+ # Pods for testing
end
-
- def find_and_replace(dir, findstr, replacestr)
- Dir[dir].each do |name|
- text = File.read(name)
- replace = text.gsub(findstr,replacestr)
- if text != replace
- puts "Fix: " + name
- File.open(name, "w") { |file| file.puts replace }
- STDOUT.flush
- end
- end
- Dir[dir + '*/'].each(&method(:find_and_replace))
+
+ post_install do |installer|
+ # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202
+ react_native_post_install(
+ installer,
+ config[:reactNativePath],
+ :mac_catalyst_enabled => false,
+ # :ccache_enabled => true
+ )
end
-
+end
diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock
index 6b1aeff7..3e298f3d 100644
--- a/example/ios/Podfile.lock
+++ b/example/ios/Podfile.lock
@@ -1,150 +1,1322 @@
PODS:
- - boost-for-react-native (1.63.0)
+ - boost (1.83.0)
- DoubleConversion (1.1.6)
- - Folly (2018.10.22.00):
- - boost-for-react-native
+ - FBLazyVector (0.74.1)
+ - fmt (9.1.0)
+ - glog (0.3.5)
+ - hermes-engine (0.74.1):
+ - hermes-engine/Pre-built (= 0.74.1)
+ - hermes-engine/Pre-built (0.74.1)
+ - JCoreRN (2.2.8):
+ - React
+ - JPushRN (3.1.5):
+ - React
+ - RCT-Folly (2024.01.01.00):
+ - boost
- DoubleConversion
- - Folly/Default (= 2018.10.22.00)
+ - fmt (= 9.1.0)
- glog
- - Folly/Default (2018.10.22.00):
- - boost-for-react-native
+ - RCT-Folly/Default (= 2024.01.01.00)
+ - RCT-Folly/Default (2024.01.01.00):
+ - boost
- DoubleConversion
+ - fmt (= 9.1.0)
- glog
- - glog (0.3.5)
- - JCore (1.9.2):
- - React
- - JPush (2.8.3):
- - React
- - React (0.60.5):
- - React-Core (= 0.60.5)
- - React-DevSupport (= 0.60.5)
- - React-RCTActionSheet (= 0.60.5)
- - React-RCTAnimation (= 0.60.5)
- - React-RCTBlob (= 0.60.5)
- - React-RCTImage (= 0.60.5)
- - React-RCTLinking (= 0.60.5)
- - React-RCTNetwork (= 0.60.5)
- - React-RCTSettings (= 0.60.5)
- - React-RCTText (= 0.60.5)
- - React-RCTVibration (= 0.60.5)
- - React-RCTWebSocket (= 0.60.5)
- - React-Core (0.60.5):
- - Folly (= 2018.10.22.00)
- - React-cxxreact (= 0.60.5)
- - React-jsiexecutor (= 0.60.5)
- - yoga (= 0.60.5.React)
- - React-cxxreact (0.60.5):
- - boost-for-react-native (= 1.63.0)
- - DoubleConversion
- - Folly (= 2018.10.22.00)
- - glog
- - React-jsinspector (= 0.60.5)
- - React-DevSupport (0.60.5):
- - React-Core (= 0.60.5)
- - React-RCTWebSocket (= 0.60.5)
- - React-jsi (0.60.5):
- - boost-for-react-native (= 1.63.0)
- - DoubleConversion
- - Folly (= 2018.10.22.00)
- - glog
- - React-jsi/Default (= 0.60.5)
- - React-jsi/Default (0.60.5):
- - boost-for-react-native (= 1.63.0)
- - DoubleConversion
- - Folly (= 2018.10.22.00)
- - glog
- - React-jsiexecutor (0.60.5):
- - DoubleConversion
- - Folly (= 2018.10.22.00)
- - glog
- - React-cxxreact (= 0.60.5)
- - React-jsi (= 0.60.5)
- - React-jsinspector (0.60.5)
- - React-RCTActionSheet (0.60.5):
- - React-Core (= 0.60.5)
- - React-RCTAnimation (0.60.5):
- - React-Core (= 0.60.5)
- - React-RCTBlob (0.60.5):
- - React-Core (= 0.60.5)
- - React-RCTNetwork (= 0.60.5)
- - React-RCTWebSocket (= 0.60.5)
- - React-RCTImage (0.60.5):
- - React-Core (= 0.60.5)
- - React-RCTNetwork (= 0.60.5)
- - React-RCTLinking (0.60.5):
- - React-Core (= 0.60.5)
- - React-RCTNetwork (0.60.5):
- - React-Core (= 0.60.5)
- - React-RCTSettings (0.60.5):
- - React-Core (= 0.60.5)
- - React-RCTText (0.60.5):
- - React-Core (= 0.60.5)
- - React-RCTVibration (0.60.5):
- - React-Core (= 0.60.5)
- - React-RCTWebSocket (0.60.5):
- - React-Core (= 0.60.5)
- - yoga (0.60.5.React)
+ - RCT-Folly/Fabric (2024.01.01.00):
+ - boost
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - RCTDeprecation (0.74.1)
+ - RCTRequired (0.74.1)
+ - RCTTypeSafety (0.74.1):
+ - FBLazyVector (= 0.74.1)
+ - RCTRequired (= 0.74.1)
+ - React-Core (= 0.74.1)
+ - React (0.74.1):
+ - React-Core (= 0.74.1)
+ - React-Core/DevSupport (= 0.74.1)
+ - React-Core/RCTWebSocket (= 0.74.1)
+ - React-RCTActionSheet (= 0.74.1)
+ - React-RCTAnimation (= 0.74.1)
+ - React-RCTBlob (= 0.74.1)
+ - React-RCTImage (= 0.74.1)
+ - React-RCTLinking (= 0.74.1)
+ - React-RCTNetwork (= 0.74.1)
+ - React-RCTSettings (= 0.74.1)
+ - React-RCTText (= 0.74.1)
+ - React-RCTVibration (= 0.74.1)
+ - React-callinvoker (0.74.1)
+ - React-Codegen (0.74.1):
+ - DoubleConversion
+ - glog
+ - hermes-engine
+ - RCT-Folly
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-debug
+ - React-Fabric
+ - React-FabricImage
+ - React-featureflags
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-NativeModulesApple
+ - React-rendererdebug
+ - React-utils
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - React-Core (0.74.1):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTDeprecation
+ - React-Core/Default (= 0.74.1)
+ - React-cxxreact
+ - React-featureflags
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-jsinspector
+ - React-perflogger
+ - React-runtimescheduler
+ - React-utils
+ - SocketRocket (= 0.7.0)
+ - Yoga
+ - React-Core/CoreModulesHeaders (0.74.1):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTDeprecation
+ - React-Core/Default
+ - React-cxxreact
+ - React-featureflags
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-jsinspector
+ - React-perflogger
+ - React-runtimescheduler
+ - React-utils
+ - SocketRocket (= 0.7.0)
+ - Yoga
+ - React-Core/Default (0.74.1):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTDeprecation
+ - React-cxxreact
+ - React-featureflags
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-jsinspector
+ - React-perflogger
+ - React-runtimescheduler
+ - React-utils
+ - SocketRocket (= 0.7.0)
+ - Yoga
+ - React-Core/DevSupport (0.74.1):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTDeprecation
+ - React-Core/Default (= 0.74.1)
+ - React-Core/RCTWebSocket (= 0.74.1)
+ - React-cxxreact
+ - React-featureflags
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-jsinspector
+ - React-perflogger
+ - React-runtimescheduler
+ - React-utils
+ - SocketRocket (= 0.7.0)
+ - Yoga
+ - React-Core/RCTActionSheetHeaders (0.74.1):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTDeprecation
+ - React-Core/Default
+ - React-cxxreact
+ - React-featureflags
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-jsinspector
+ - React-perflogger
+ - React-runtimescheduler
+ - React-utils
+ - SocketRocket (= 0.7.0)
+ - Yoga
+ - React-Core/RCTAnimationHeaders (0.74.1):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTDeprecation
+ - React-Core/Default
+ - React-cxxreact
+ - React-featureflags
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-jsinspector
+ - React-perflogger
+ - React-runtimescheduler
+ - React-utils
+ - SocketRocket (= 0.7.0)
+ - Yoga
+ - React-Core/RCTBlobHeaders (0.74.1):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTDeprecation
+ - React-Core/Default
+ - React-cxxreact
+ - React-featureflags
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-jsinspector
+ - React-perflogger
+ - React-runtimescheduler
+ - React-utils
+ - SocketRocket (= 0.7.0)
+ - Yoga
+ - React-Core/RCTImageHeaders (0.74.1):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTDeprecation
+ - React-Core/Default
+ - React-cxxreact
+ - React-featureflags
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-jsinspector
+ - React-perflogger
+ - React-runtimescheduler
+ - React-utils
+ - SocketRocket (= 0.7.0)
+ - Yoga
+ - React-Core/RCTLinkingHeaders (0.74.1):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTDeprecation
+ - React-Core/Default
+ - React-cxxreact
+ - React-featureflags
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-jsinspector
+ - React-perflogger
+ - React-runtimescheduler
+ - React-utils
+ - SocketRocket (= 0.7.0)
+ - Yoga
+ - React-Core/RCTNetworkHeaders (0.74.1):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTDeprecation
+ - React-Core/Default
+ - React-cxxreact
+ - React-featureflags
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-jsinspector
+ - React-perflogger
+ - React-runtimescheduler
+ - React-utils
+ - SocketRocket (= 0.7.0)
+ - Yoga
+ - React-Core/RCTSettingsHeaders (0.74.1):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTDeprecation
+ - React-Core/Default
+ - React-cxxreact
+ - React-featureflags
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-jsinspector
+ - React-perflogger
+ - React-runtimescheduler
+ - React-utils
+ - SocketRocket (= 0.7.0)
+ - Yoga
+ - React-Core/RCTTextHeaders (0.74.1):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTDeprecation
+ - React-Core/Default
+ - React-cxxreact
+ - React-featureflags
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-jsinspector
+ - React-perflogger
+ - React-runtimescheduler
+ - React-utils
+ - SocketRocket (= 0.7.0)
+ - Yoga
+ - React-Core/RCTVibrationHeaders (0.74.1):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTDeprecation
+ - React-Core/Default
+ - React-cxxreact
+ - React-featureflags
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-jsinspector
+ - React-perflogger
+ - React-runtimescheduler
+ - React-utils
+ - SocketRocket (= 0.7.0)
+ - Yoga
+ - React-Core/RCTWebSocket (0.74.1):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTDeprecation
+ - React-Core/Default (= 0.74.1)
+ - React-cxxreact
+ - React-featureflags
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-jsinspector
+ - React-perflogger
+ - React-runtimescheduler
+ - React-utils
+ - SocketRocket (= 0.7.0)
+ - Yoga
+ - React-CoreModules (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTTypeSafety (= 0.74.1)
+ - React-Codegen
+ - React-Core/CoreModulesHeaders (= 0.74.1)
+ - React-jsi (= 0.74.1)
+ - React-jsinspector
+ - React-NativeModulesApple
+ - React-RCTBlob
+ - React-RCTImage (= 0.74.1)
+ - ReactCommon
+ - SocketRocket (= 0.7.0)
+ - React-cxxreact (0.74.1):
+ - boost (= 1.83.0)
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - React-callinvoker (= 0.74.1)
+ - React-debug (= 0.74.1)
+ - React-jsi (= 0.74.1)
+ - React-jsinspector
+ - React-logger (= 0.74.1)
+ - React-perflogger (= 0.74.1)
+ - React-runtimeexecutor (= 0.74.1)
+ - React-debug (0.74.1)
+ - React-Fabric (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-Fabric/animations (= 0.74.1)
+ - React-Fabric/attributedstring (= 0.74.1)
+ - React-Fabric/componentregistry (= 0.74.1)
+ - React-Fabric/componentregistrynative (= 0.74.1)
+ - React-Fabric/components (= 0.74.1)
+ - React-Fabric/core (= 0.74.1)
+ - React-Fabric/imagemanager (= 0.74.1)
+ - React-Fabric/leakchecker (= 0.74.1)
+ - React-Fabric/mounting (= 0.74.1)
+ - React-Fabric/scheduler (= 0.74.1)
+ - React-Fabric/telemetry (= 0.74.1)
+ - React-Fabric/templateprocessor (= 0.74.1)
+ - React-Fabric/textlayoutmanager (= 0.74.1)
+ - React-Fabric/uimanager (= 0.74.1)
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/animations (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/attributedstring (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/componentregistry (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/componentregistrynative (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/components (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-Fabric/components/inputaccessory (= 0.74.1)
+ - React-Fabric/components/legacyviewmanagerinterop (= 0.74.1)
+ - React-Fabric/components/modal (= 0.74.1)
+ - React-Fabric/components/rncore (= 0.74.1)
+ - React-Fabric/components/root (= 0.74.1)
+ - React-Fabric/components/safeareaview (= 0.74.1)
+ - React-Fabric/components/scrollview (= 0.74.1)
+ - React-Fabric/components/text (= 0.74.1)
+ - React-Fabric/components/textinput (= 0.74.1)
+ - React-Fabric/components/unimplementedview (= 0.74.1)
+ - React-Fabric/components/view (= 0.74.1)
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/components/inputaccessory (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/components/legacyviewmanagerinterop (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/components/modal (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/components/rncore (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/components/root (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/components/safeareaview (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/components/scrollview (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/components/text (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/components/textinput (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/components/unimplementedview (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/components/view (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - Yoga
+ - React-Fabric/core (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/imagemanager (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/leakchecker (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/mounting (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/scheduler (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/telemetry (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/templateprocessor (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/textlayoutmanager (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-Fabric/uimanager
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-Fabric/uimanager (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-cxxreact
+ - React-debug
+ - React-graphics
+ - React-jsi
+ - React-jsiexecutor
+ - React-logger
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon/turbomodule/core
+ - React-FabricImage (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - RCTRequired (= 0.74.1)
+ - RCTTypeSafety (= 0.74.1)
+ - React-Fabric
+ - React-graphics
+ - React-ImageManager
+ - React-jsi
+ - React-jsiexecutor (= 0.74.1)
+ - React-logger
+ - React-rendererdebug
+ - React-utils
+ - ReactCommon
+ - Yoga
+ - React-featureflags (0.74.1)
+ - React-graphics (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - React-Core/Default (= 0.74.1)
+ - React-utils
+ - React-hermes (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - React-cxxreact (= 0.74.1)
+ - React-jsi
+ - React-jsiexecutor (= 0.74.1)
+ - React-jsinspector
+ - React-perflogger (= 0.74.1)
+ - React-runtimeexecutor
+ - React-ImageManager (0.74.1):
+ - glog
+ - RCT-Folly/Fabric
+ - React-Core/Default
+ - React-debug
+ - React-Fabric
+ - React-graphics
+ - React-rendererdebug
+ - React-utils
+ - React-jserrorhandler (0.74.1):
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - React-debug
+ - React-jsi
+ - React-Mapbuffer
+ - React-jsi (0.74.1):
+ - boost (= 1.83.0)
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - React-jsiexecutor (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - React-cxxreact (= 0.74.1)
+ - React-jsi (= 0.74.1)
+ - React-jsinspector
+ - React-perflogger (= 0.74.1)
+ - React-jsinspector (0.74.1):
+ - DoubleConversion
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - React-featureflags
+ - React-jsi
+ - React-runtimeexecutor (= 0.74.1)
+ - React-jsitracing (0.74.1):
+ - React-jsi
+ - React-logger (0.74.1):
+ - glog
+ - React-Mapbuffer (0.74.1):
+ - glog
+ - React-debug
+ - React-nativeconfig (0.74.1)
+ - React-NativeModulesApple (0.74.1):
+ - glog
+ - hermes-engine
+ - React-callinvoker
+ - React-Core
+ - React-cxxreact
+ - React-jsi
+ - React-jsinspector
+ - React-runtimeexecutor
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - React-perflogger (0.74.1)
+ - React-RCTActionSheet (0.74.1):
+ - React-Core/RCTActionSheetHeaders (= 0.74.1)
+ - React-RCTAnimation (0.74.1):
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTTypeSafety
+ - React-Codegen
+ - React-Core/RCTAnimationHeaders
+ - React-jsi
+ - React-NativeModulesApple
+ - ReactCommon
+ - React-RCTAppDelegate (0.74.1):
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Codegen
+ - React-Core
+ - React-CoreModules
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-hermes
+ - React-nativeconfig
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-RCTImage
+ - React-RCTNetwork
+ - React-rendererdebug
+ - React-RuntimeApple
+ - React-RuntimeCore
+ - React-RuntimeHermes
+ - React-runtimescheduler
+ - React-utils
+ - ReactCommon
+ - React-RCTBlob (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - React-Codegen
+ - React-Core/RCTBlobHeaders
+ - React-Core/RCTWebSocket
+ - React-jsi
+ - React-jsinspector
+ - React-NativeModulesApple
+ - React-RCTNetwork
+ - ReactCommon
+ - React-RCTFabric (0.74.1):
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - React-Core
+ - React-debug
+ - React-Fabric
+ - React-FabricImage
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-jsi
+ - React-jsinspector
+ - React-nativeconfig
+ - React-RCTImage
+ - React-RCTText
+ - React-rendererdebug
+ - React-runtimescheduler
+ - React-utils
+ - Yoga
+ - React-RCTImage (0.74.1):
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTTypeSafety
+ - React-Codegen
+ - React-Core/RCTImageHeaders
+ - React-jsi
+ - React-NativeModulesApple
+ - React-RCTNetwork
+ - ReactCommon
+ - React-RCTLinking (0.74.1):
+ - React-Codegen
+ - React-Core/RCTLinkingHeaders (= 0.74.1)
+ - React-jsi (= 0.74.1)
+ - React-NativeModulesApple
+ - ReactCommon
+ - ReactCommon/turbomodule/core (= 0.74.1)
+ - React-RCTNetwork (0.74.1):
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTTypeSafety
+ - React-Codegen
+ - React-Core/RCTNetworkHeaders
+ - React-jsi
+ - React-NativeModulesApple
+ - ReactCommon
+ - React-RCTSettings (0.74.1):
+ - RCT-Folly (= 2024.01.01.00)
+ - RCTTypeSafety
+ - React-Codegen
+ - React-Core/RCTSettingsHeaders
+ - React-jsi
+ - React-NativeModulesApple
+ - ReactCommon
+ - React-RCTText (0.74.1):
+ - React-Core/RCTTextHeaders (= 0.74.1)
+ - Yoga
+ - React-RCTVibration (0.74.1):
+ - RCT-Folly (= 2024.01.01.00)
+ - React-Codegen
+ - React-Core/RCTVibrationHeaders
+ - React-jsi
+ - React-NativeModulesApple
+ - ReactCommon
+ - React-rendererdebug (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - RCT-Folly (= 2024.01.01.00)
+ - React-debug
+ - React-rncore (0.74.1)
+ - React-RuntimeApple (0.74.1):
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - React-callinvoker
+ - React-Core/Default
+ - React-CoreModules
+ - React-cxxreact
+ - React-jserrorhandler
+ - React-jsi
+ - React-jsiexecutor
+ - React-jsinspector
+ - React-Mapbuffer
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-RuntimeCore
+ - React-runtimeexecutor
+ - React-RuntimeHermes
+ - React-utils
+ - React-RuntimeCore (0.74.1):
+ - glog
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - React-cxxreact
+ - React-featureflags
+ - React-jserrorhandler
+ - React-jsi
+ - React-jsiexecutor
+ - React-jsinspector
+ - React-runtimeexecutor
+ - React-runtimescheduler
+ - React-utils
+ - React-runtimeexecutor (0.74.1):
+ - React-jsi (= 0.74.1)
+ - React-RuntimeHermes (0.74.1):
+ - hermes-engine
+ - RCT-Folly/Fabric (= 2024.01.01.00)
+ - React-featureflags
+ - React-hermes
+ - React-jsi
+ - React-jsinspector
+ - React-jsitracing
+ - React-nativeconfig
+ - React-RuntimeCore
+ - React-utils
+ - React-runtimescheduler (0.74.1):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - React-callinvoker
+ - React-cxxreact
+ - React-debug
+ - React-featureflags
+ - React-jsi
+ - React-rendererdebug
+ - React-runtimeexecutor
+ - React-utils
+ - React-utils (0.74.1):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - React-debug
+ - React-jsi (= 0.74.1)
+ - ReactCommon (0.74.1):
+ - ReactCommon/turbomodule (= 0.74.1)
+ - ReactCommon/turbomodule (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - React-callinvoker (= 0.74.1)
+ - React-cxxreact (= 0.74.1)
+ - React-jsi (= 0.74.1)
+ - React-logger (= 0.74.1)
+ - React-perflogger (= 0.74.1)
+ - ReactCommon/turbomodule/bridging (= 0.74.1)
+ - ReactCommon/turbomodule/core (= 0.74.1)
+ - ReactCommon/turbomodule/bridging (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - React-callinvoker (= 0.74.1)
+ - React-cxxreact (= 0.74.1)
+ - React-jsi (= 0.74.1)
+ - React-logger (= 0.74.1)
+ - React-perflogger (= 0.74.1)
+ - ReactCommon/turbomodule/core (0.74.1):
+ - DoubleConversion
+ - fmt (= 9.1.0)
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2024.01.01.00)
+ - React-callinvoker (= 0.74.1)
+ - React-cxxreact (= 0.74.1)
+ - React-debug (= 0.74.1)
+ - React-jsi (= 0.74.1)
+ - React-logger (= 0.74.1)
+ - React-perflogger (= 0.74.1)
+ - React-utils (= 0.74.1)
+ - SocketRocket (0.7.0)
+ - Yoga (0.0.0)
DEPENDENCIES:
+ - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`)
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
- - Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`)
+ - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
+ - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`)
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
- - JCore (from `../node_modules/jcore-react-native`)
- - JPush (from `../node_modules/jpush-react-native`)
+ - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`)
+ - JCoreRN (from `../node_modules/jcore-react-native`)
+ - JPushRN (from `../node_modules/jpush-react-native`)
+ - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
+ - RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
+ - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`)
+ - RCTRequired (from `../node_modules/react-native/Libraries/Required`)
+ - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
- React (from `../node_modules/react-native/`)
- - React-Core (from `../node_modules/react-native/React`)
+ - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
+ - React-Codegen (from `build/generated/ios`)
+ - React-Core (from `../node_modules/react-native/`)
+ - React-Core/RCTWebSocket (from `../node_modules/react-native/`)
+ - React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
- React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`)
- - React-DevSupport (from `../node_modules/react-native/React`)
+ - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`)
+ - React-Fabric (from `../node_modules/react-native/ReactCommon`)
+ - React-FabricImage (from `../node_modules/react-native/ReactCommon`)
+ - React-featureflags (from `../node_modules/react-native/ReactCommon/react/featureflags`)
+ - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`)
+ - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`)
+ - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`)
+ - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`)
- React-jsi (from `../node_modules/react-native/ReactCommon/jsi`)
- React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
- - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
+ - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`)
+ - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`)
+ - React-logger (from `../node_modules/react-native/ReactCommon/logger`)
+ - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`)
+ - React-nativeconfig (from `../node_modules/react-native/ReactCommon`)
+ - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`)
+ - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
- React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
- React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
+ - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`)
- React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`)
+ - React-RCTFabric (from `../node_modules/react-native/React`)
- React-RCTImage (from `../node_modules/react-native/Libraries/Image`)
- React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`)
- React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`)
- React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`)
- React-RCTText (from `../node_modules/react-native/Libraries/Text`)
- React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
- - React-RCTWebSocket (from `../node_modules/react-native/Libraries/WebSocket`)
- - yoga (from `../node_modules/react-native/ReactCommon/yoga`)
+ - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`)
+ - React-rncore (from `../node_modules/react-native/ReactCommon`)
+ - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`)
+ - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`)
+ - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`)
+ - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`)
+ - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`)
+ - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`)
+ - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
+ - Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
SPEC REPOS:
trunk:
- - boost-for-react-native
+ - SocketRocket
EXTERNAL SOURCES:
+ boost:
+ :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec"
DoubleConversion:
:podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
- Folly:
- :podspec: "../node_modules/react-native/third-party-podspecs/Folly.podspec"
+ FBLazyVector:
+ :path: "../node_modules/react-native/Libraries/FBLazyVector"
+ fmt:
+ :podspec: "../node_modules/react-native/third-party-podspecs/fmt.podspec"
glog:
:podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
- JCore:
+ hermes-engine:
+ :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec"
+ :tag: hermes-2024-04-25-RNv0.74.1-b54a3a01c531f4f5f1904cb0770033e8b7153dff
+ JCoreRN:
:path: "../node_modules/jcore-react-native"
- JPush:
+ JPushRN:
:path: "../node_modules/jpush-react-native"
+ RCT-Folly:
+ :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec"
+ RCTDeprecation:
+ :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation"
+ RCTRequired:
+ :path: "../node_modules/react-native/Libraries/Required"
+ RCTTypeSafety:
+ :path: "../node_modules/react-native/Libraries/TypeSafety"
React:
:path: "../node_modules/react-native/"
+ React-callinvoker:
+ :path: "../node_modules/react-native/ReactCommon/callinvoker"
+ React-Codegen:
+ :path: build/generated/ios
React-Core:
- :path: "../node_modules/react-native/React"
+ :path: "../node_modules/react-native/"
+ React-CoreModules:
+ :path: "../node_modules/react-native/React/CoreModules"
React-cxxreact:
:path: "../node_modules/react-native/ReactCommon/cxxreact"
- React-DevSupport:
- :path: "../node_modules/react-native/React"
+ React-debug:
+ :path: "../node_modules/react-native/ReactCommon/react/debug"
+ React-Fabric:
+ :path: "../node_modules/react-native/ReactCommon"
+ React-FabricImage:
+ :path: "../node_modules/react-native/ReactCommon"
+ React-featureflags:
+ :path: "../node_modules/react-native/ReactCommon/react/featureflags"
+ React-graphics:
+ :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics"
+ React-hermes:
+ :path: "../node_modules/react-native/ReactCommon/hermes"
+ React-ImageManager:
+ :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios"
+ React-jserrorhandler:
+ :path: "../node_modules/react-native/ReactCommon/jserrorhandler"
React-jsi:
:path: "../node_modules/react-native/ReactCommon/jsi"
React-jsiexecutor:
:path: "../node_modules/react-native/ReactCommon/jsiexecutor"
React-jsinspector:
- :path: "../node_modules/react-native/ReactCommon/jsinspector"
+ :path: "../node_modules/react-native/ReactCommon/jsinspector-modern"
+ React-jsitracing:
+ :path: "../node_modules/react-native/ReactCommon/hermes/executor/"
+ React-logger:
+ :path: "../node_modules/react-native/ReactCommon/logger"
+ React-Mapbuffer:
+ :path: "../node_modules/react-native/ReactCommon"
+ React-nativeconfig:
+ :path: "../node_modules/react-native/ReactCommon"
+ React-NativeModulesApple:
+ :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios"
+ React-perflogger:
+ :path: "../node_modules/react-native/ReactCommon/reactperflogger"
React-RCTActionSheet:
:path: "../node_modules/react-native/Libraries/ActionSheetIOS"
React-RCTAnimation:
:path: "../node_modules/react-native/Libraries/NativeAnimation"
+ React-RCTAppDelegate:
+ :path: "../node_modules/react-native/Libraries/AppDelegate"
React-RCTBlob:
:path: "../node_modules/react-native/Libraries/Blob"
+ React-RCTFabric:
+ :path: "../node_modules/react-native/React"
React-RCTImage:
:path: "../node_modules/react-native/Libraries/Image"
React-RCTLinking:
@@ -157,37 +1329,86 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/Libraries/Text"
React-RCTVibration:
:path: "../node_modules/react-native/Libraries/Vibration"
- React-RCTWebSocket:
- :path: "../node_modules/react-native/Libraries/WebSocket"
- yoga:
+ React-rendererdebug:
+ :path: "../node_modules/react-native/ReactCommon/react/renderer/debug"
+ React-rncore:
+ :path: "../node_modules/react-native/ReactCommon"
+ React-RuntimeApple:
+ :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios"
+ React-RuntimeCore:
+ :path: "../node_modules/react-native/ReactCommon/react/runtime"
+ React-runtimeexecutor:
+ :path: "../node_modules/react-native/ReactCommon/runtimeexecutor"
+ React-RuntimeHermes:
+ :path: "../node_modules/react-native/ReactCommon/react/runtime"
+ React-runtimescheduler:
+ :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler"
+ React-utils:
+ :path: "../node_modules/react-native/ReactCommon/react/utils"
+ ReactCommon:
+ :path: "../node_modules/react-native/ReactCommon"
+ Yoga:
:path: "../node_modules/react-native/ReactCommon/yoga"
SPEC CHECKSUMS:
- boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
- DoubleConversion: 5805e889d232975c086db112ece9ed034df7a0b2
- Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51
- glog: 1f3da668190260b06b429bb211bfbee5cd790c28
- JCore: 82ea6d26c4c30dde4ec9553b0c8fe87eebfa5142
- JPush: 5941cabd5ffdd5d3186759f089acd2fcdd59905e
- React: 53c53c4d99097af47cf60594b8706b4e3321e722
- React-Core: ba421f6b4f4cbe2fb17c0b6fc675f87622e78a64
- React-cxxreact: 8384287780c4999351ad9b6e7a149d9ed10a2395
- React-DevSupport: 197fb409737cff2c4f9986e77c220d7452cb9f9f
- React-jsi: 4d8c9efb6312a9725b18d6fc818ffc103f60fec2
- React-jsiexecutor: 90ad2f9db09513fc763bc757fdc3c4ff8bde2a30
- React-jsinspector: e08662d1bf5b129a3d556eb9ea343a3f40353ae4
- React-RCTActionSheet: b0f1ea83f4bf75fb966eae9bfc47b78c8d3efd90
- React-RCTAnimation: 359ba1b5690b1e87cc173558a78e82d35919333e
- React-RCTBlob: 5e2b55f76e9a1c7ae52b826923502ddc3238df24
- React-RCTImage: f5f1c50922164e89bdda67bcd0153952a5cfe719
- React-RCTLinking: d0ecbd791e9ddddc41fa1f66b0255de90e8ee1e9
- React-RCTNetwork: e26946300b0ab7bb6c4a6348090e93fa21f33a9d
- React-RCTSettings: d0d37cb521b7470c998595a44f05847777cc3f42
- React-RCTText: b074d89033583d4f2eb5faf7ea2db3a13c7553a2
- React-RCTVibration: 2105b2e0e2b66a6408fc69a46c8a7fb5b2fdade0
- React-RCTWebSocket: cd932a16b7214898b6b7f788c8bddb3637246ac4
- yoga: 312528f5bbbba37b4dcea5ef00e8b4033fdd9411
+ boost: d3f49c53809116a5d38da093a8aa78bf551aed09
+ DoubleConversion: 76ab83afb40bddeeee456813d9c04f67f78771b5
+ FBLazyVector: 898d14d17bf19e2435cafd9ea2a1033efe445709
+ fmt: 4c2741a687cc09f0634a2e2c72a838b99f1ff120
+ glog: c5d68082e772fa1c511173d6b30a9de2c05a69a2
+ hermes-engine: 16b8530de1b383cdada1476cf52d1b52f0692cbc
+ JCoreRN: 0dbe7981735de54c772a2f3ea275c53421649981
+ JPushRN: e4b15bc4e339d2bf947930d4505546a207d0e766
+ RCT-Folly: 5dc73daec3476616d19e8a53f0156176f7b55461
+ RCTDeprecation: efb313d8126259e9294dc4ee0002f44a6f676aba
+ RCTRequired: f49ea29cece52aee20db633ae7edc4b271435562
+ RCTTypeSafety: a11979ff0570d230d74de9f604f7d19692157bc4
+ React: 88794fad7f460349dbc9df8a274d95f37a009f5d
+ React-callinvoker: 7a7023e34a55c89ea2aa62486bb3c1164ab0be0c
+ React-Codegen: 118828b0731a9ecf9021270b788f958f9ccb2e19
+ React-Core: 74cc07109071b230de904d394c2bf15b9f886bff
+ React-CoreModules: 8beb4863375aafeac52c49a3962b81d137577585
+ React-cxxreact: d0b0d575214ba236dff569e14dd4411ac82b3566
+ React-debug: 6397f0baf751b40511d01e984b01467d7e6d8127
+ React-Fabric: 37f29709a9caefd2a9fece6f695bc88a0af77f40
+ React-FabricImage: 9c3f6125b2f5908a2e7d0947cfb74022c1a0b294
+ React-featureflags: 2eb79dd9df4095bff519379f2a4c915069e330bb
+ React-graphics: d0b9a0a174fb86bfed50bf4fb7c835183a546ab5
+ React-hermes: 06e8316213d56ab914afb9a829763123fcfacf22
+ React-ImageManager: 821a1182139cc986598868d0e9a00b3a021feddb
+ React-jserrorhandler: 1dd2a75b24dd9a318ee88fa6792e98524879af24
+ React-jsi: e381545475da5ea77777e7b5513031a434ced04b
+ React-jsiexecutor: ce91dde1a61efd519a5ff7ac0f64b61a14217072
+ React-jsinspector: 627ac44b1d090fc6a8039b1df723677bc7d86fe4
+ React-jsitracing: dd0e541a34027b3ab668ad94cf268482ad6f82fb
+ React-logger: 6070f362a1657bb53335eb1fc903d3f49fd79842
+ React-Mapbuffer: 2c95cbabc3d75a17747452381e998c35208ea3ee
+ React-nativeconfig: b0073a590774e8b35192fead188a36d1dca23dec
+ React-NativeModulesApple: 61b07ab32af3ea4910ba553932c0a779e853c082
+ React-perflogger: 3d31e0d1e8ad891e43a09ac70b7b17a79773003a
+ React-RCTActionSheet: c4a3a134f3434c9d7b0c1054f1a8cfed30c7a093
+ React-RCTAnimation: dab04683056694845eb7a9e283f4c63eec7fa633
+ React-RCTAppDelegate: 1785d42459138c45175b2fa18e86cd2aee829a93
+ React-RCTBlob: a0a8f6bfd8926bff0e2814ec3f8cd5514f2db243
+ React-RCTFabric: f69d856b74b6d385c4cf4bd128c330161ce18306
+ React-RCTImage: 51db983bcc5075fa9bf3e094e5c6c1f5b5575472
+ React-RCTLinking: 3430cd1023a5ac86a96ed6d4fbf7a8ed7b2e44d5
+ React-RCTNetwork: 52198f8a8c823639dcc8f6725ca5b360d66ea1a0
+ React-RCTSettings: c127440c2c538128f92fb45524e976e25cb69bd6
+ React-RCTText: 640b2d0bfb51d88d8a76c6a1a7ea1f94667bf231
+ React-RCTVibration: bd20c8156b649cd745c70db3341c409ae3b42821
+ React-rendererdebug: 16394ffe0d852967123b3b76a630233b90ec8e63
+ React-rncore: 4f1e645acb5107bd4b4cf29eff17b04a7cd422f3
+ React-RuntimeApple: 97d0a5c655467c57b88076434427ec32413e7802
+ React-RuntimeCore: a55443ddb73e6666b441963d8951a16ba5cfc223
+ React-runtimeexecutor: a278d4249921853d4a3f24e4d6e0ff30688f3c16
+ React-RuntimeHermes: 6273f0755fef304453fc3c356b25abf17e915b83
+ React-runtimescheduler: 87b14969bb0b10538014fb8407d472f9904bc8cd
+ React-utils: 67574b07bff4429fd6c4d43a7fad8254d814ee20
+ ReactCommon: 64c64f4ae1f2debe3fab1800e00cb8466a4477b7
+ SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d
+ Yoga: 348f8b538c3ed4423eb58a8e5730feec50bce372
-PODFILE CHECKSUM: 8e66ba6295c7bad5d297ef1390be0790edfec7aa
+PODFILE CHECKSUM: 71a689932e49f453bd6454dd189b45915dda66a0
-COCOAPODS: 1.11.2
+COCOAPODS: 1.16.2
diff --git a/example/ios/example.xcodeproj/project.pbxproj b/example/ios/example.xcodeproj/project.pbxproj
index 4c55ff3a..4f695a2f 100644
--- a/example/ios/example.xcodeproj/project.pbxproj
+++ b/example/ios/example.xcodeproj/project.pbxproj
@@ -3,63 +3,67 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 46;
+ objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
- 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
- 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };
+ 00E356F31AD99517003FC87E /* exampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* exampleTests.m */; };
+ 0C80B921A6F3F58F76C31292 /* libPods-example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-example.a */; };
+ 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
- 363AE1E6DA5EE367B02FC146 /* libPods-example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6DFA4ACDA756FDC209B6CB52 /* libPods-example.a */; };
+ 3EF8C8DA8012F99F86F827CD /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 3A55E0732FD8FDF1AE096F24 /* PrivacyInfo.xcprivacy */; };
+ 7699B88040F8A987B510C191 /* libPods-example-exampleTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-example-exampleTests.a */; };
+ 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
- 5C0F230A237AEEFA0089C1F8 /* PBXContainerItemProxy */ = {
+ 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
- containerPortal = 5C0F2306237AEEFA0089C1F8 /* RCTJCoreModule.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 6212E9B41F3990DC00BDF51A;
- remoteInfo = RCTJCoreModule;
- };
- 5C0F2310237AEF120089C1F8 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 5C0F230C237AEF120089C1F8 /* RCTJPushModule.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 6280980A1CEDC407000D3A81;
- remoteInfo = RCTJPushModule;
+ containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
+ remoteInfo = example;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
- 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; 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 = ""; };
- 04CF78C193A0D587CF1E0CE0 /* Pods-example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example.release.xcconfig"; path = "Target Support Files/Pods-example/Pods-example.release.xcconfig"; 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 = ""; };
+ 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = example/AppDelegate.mm; 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 = ""; };
- 5C0F2306237AEEFA0089C1F8 /* RCTJCoreModule.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTJCoreModule.xcodeproj; path = "../node_modules/jcore-react-native/ios/RCTJCoreModule.xcodeproj"; sourceTree = ""; };
- 5C0F230C237AEF120089C1F8 /* RCTJPushModule.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTJPushModule.xcodeproj; path = "../node_modules/jpush-react-native/ios/RCTJPushModule.xcodeproj"; sourceTree = ""; };
- 5C46FD022331F51D00F0198A /* UserNotifications.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UserNotifications.framework; path = System/Library/Frameworks/UserNotifications.framework; sourceTree = SDKROOT; };
- 5C46FD042331F52700F0198A /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
- 5C46FD062331F53100F0198A /* libresolv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libresolv.tbd; path = usr/lib/libresolv.tbd; sourceTree = SDKROOT; };
- 5C46FD082331F53C00F0198A /* example.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = example.entitlements; path = example/example.entitlements; sourceTree = ""; };
- 6DFA4ACDA756FDC209B6CB52 /* libPods-example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-example.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- AC77230391FFCA8A31383389 /* Pods-example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example.debug.xcconfig"; path = "Target Support Files/Pods-example/Pods-example.debug.xcconfig"; sourceTree = ""; };
+ 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = PrivacyInfo.xcprivacy; path = example/PrivacyInfo.xcprivacy; sourceTree = ""; };
+ 19F6CBCC0A4E27FBF8BF4A61 /* libPods-example-exampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-example-exampleTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3A55E0732FD8FDF1AE096F24 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = example/PrivacyInfo.xcprivacy; sourceTree = ""; };
+ 3B4392A12AC88292D35C810B /* Pods-example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example.debug.xcconfig"; path = "Target Support Files/Pods-example/Pods-example.debug.xcconfig"; sourceTree = ""; };
+ 5709B34CF0A7D63546082F79 /* Pods-example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example.release.xcconfig"; path = "Target Support Files/Pods-example/Pods-example.release.xcconfig"; sourceTree = ""; };
+ 5B7EB9410499542E8C5724F5 /* Pods-example-exampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example-exampleTests.debug.xcconfig"; path = "Target Support Files/Pods-example-exampleTests/Pods-example-exampleTests.debug.xcconfig"; sourceTree = ""; };
+ 5DCACB8F33CDC322A6C60F78 /* libPods-example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-example.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 6240F13F2C2919C20026B050 /* example.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = example.entitlements; path = example/example.entitlements; sourceTree = ""; };
+ 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = example/LaunchScreen.storyboard; sourceTree = ""; };
+ 89C6BE57DB24E9ADA2F236DE /* Pods-example-exampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example-exampleTests.release.xcconfig"; path = "Target Support Files/Pods-example-exampleTests/Pods-example-exampleTests.release.xcconfig"; sourceTree = ""; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
+ 00E356EB1AD99517003FC87E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 7699B88040F8A987B510C191 /* libPods-example-exampleTests.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 363AE1E6DA5EE367B02FC146 /* libPods-example.a in Frameworks */,
+ 0C80B921A6F3F58F76C31292 /* libPods-example.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -86,14 +90,15 @@
13B07FAE1A68108700A75B9A /* example */ = {
isa = PBXGroup;
children = (
- 5C46FD082331F53C00F0198A /* example.entitlements */,
- 008F07F21AC5B25A0029DE68 /* main.jsbundle */,
+ 6240F13F2C2919C20026B050 /* example.entitlements */,
13B07FAF1A68108700A75B9A /* AppDelegate.h */,
- 13B07FB01A68108700A75B9A /* AppDelegate.m */,
+ 13B07FB01A68108700A75B9A /* AppDelegate.mm */,
13B07FB51A68108700A75B9A /* Images.xcassets */,
13B07FB61A68108700A75B9A /* Info.plist */,
- 13B07FB11A68108700A75B9A /* LaunchScreen.xib */,
+ 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
13B07FB71A68108700A75B9A /* main.m */,
+ 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */,
+ 3A55E0732FD8FDF1AE096F24 /* PrivacyInfo.xcprivacy */,
);
name = example;
sourceTree = "";
@@ -101,36 +106,16 @@
2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
isa = PBXGroup;
children = (
- 5C46FD062331F53100F0198A /* libresolv.tbd */,
- 5C46FD042331F52700F0198A /* libz.tbd */,
- 5C46FD022331F51D00F0198A /* UserNotifications.framework */,
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
- 6DFA4ACDA756FDC209B6CB52 /* libPods-example.a */,
+ 5DCACB8F33CDC322A6C60F78 /* libPods-example.a */,
+ 19F6CBCC0A4E27FBF8BF4A61 /* libPods-example-exampleTests.a */,
);
name = Frameworks;
sourceTree = "";
};
- 5C0F2307237AEEFA0089C1F8 /* Products */ = {
- isa = PBXGroup;
- children = (
- 5C0F230B237AEEFA0089C1F8 /* libRCTJCoreModule.a */,
- );
- name = Products;
- sourceTree = "";
- };
- 5C0F230D237AEF120089C1F8 /* Products */ = {
- isa = PBXGroup;
- children = (
- 5C0F2311237AEF120089C1F8 /* libRCTJPushModule.a */,
- );
- name = Products;
- sourceTree = "";
- };
832341AE1AAA6A7D00B99B32 /* Libraries */ = {
isa = PBXGroup;
children = (
- 5C0F230C237AEF120089C1F8 /* RCTJPushModule.xcodeproj */,
- 5C0F2306237AEEFA0089C1F8 /* RCTJCoreModule.xcodeproj */,
);
name = Libraries;
sourceTree = "";
@@ -143,7 +128,7 @@
00E356EF1AD99517003FC87E /* exampleTests */,
83CBBA001A601CBA00E9B192 /* Products */,
2D16E6871FA4F8E400B85C8A /* Frameworks */,
- B07776930455FAD2B06745D1 /* Pods */,
+ BBD78D7AC51CEA395F1C20DB /* Pods */,
);
indentWidth = 2;
sourceTree = "";
@@ -154,15 +139,18 @@
isa = PBXGroup;
children = (
13B07F961A680F5B00A75B9A /* example.app */,
+ 00E356EE1AD99517003FC87E /* exampleTests.xctest */,
);
name = Products;
sourceTree = "";
};
- B07776930455FAD2B06745D1 /* Pods */ = {
+ BBD78D7AC51CEA395F1C20DB /* Pods */ = {
isa = PBXGroup;
children = (
- AC77230391FFCA8A31383389 /* Pods-example.debug.xcconfig */,
- 04CF78C193A0D587CF1E0CE0 /* Pods-example.release.xcconfig */,
+ 3B4392A12AC88292D35C810B /* Pods-example.debug.xcconfig */,
+ 5709B34CF0A7D63546082F79 /* Pods-example.release.xcconfig */,
+ 5B7EB9410499542E8C5724F5 /* Pods-example-exampleTests.debug.xcconfig */,
+ 89C6BE57DB24E9ADA2F236DE /* Pods-example-exampleTests.release.xcconfig */,
);
path = Pods;
sourceTree = "";
@@ -170,16 +158,38 @@
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
+ 00E356ED1AD99517003FC87E /* exampleTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "exampleTests" */;
+ buildPhases = (
+ A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */,
+ 00E356EA1AD99517003FC87E /* Sources */,
+ 00E356EB1AD99517003FC87E /* Frameworks */,
+ 00E356EC1AD99517003FC87E /* Resources */,
+ C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */,
+ F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods 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 = (
- 9B88E118371F18FFFAE7D01F /* [CP] Check Pods Manifest.lock */,
- FD10A7F022414F080027D42C /* Start Packager */,
+ C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */,
13B07F871A680F5B00A75B9A /* Sources */,
13B07F8C1A680F5B00A75B9A /* Frameworks */,
13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
+ 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */,
+ E235C05ADACE081382539298 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -196,73 +206,51 @@
83CBB9F71A601CBA00E9B192 /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 0940;
- ORGANIZATIONNAME = Facebook;
+ LastUpgradeCheck = 1210;
TargetAttributes = {
+ 00E356ED1AD99517003FC87E = {
+ CreatedOnToolsVersion = 6.2;
+ TestTargetID = 13B07F861A680F5B00A75B9A;
+ };
13B07F861A680F5B00A75B9A = {
- DevelopmentTeam = 8X2A38Q9VD;
- ProvisioningStyle = Automatic;
- SystemCapabilities = {
- com.apple.Push = {
- enabled = 1;
- };
- };
+ LastSwiftMigration = 1120;
};
};
};
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "example" */;
- compatibilityVersion = "Xcode 3.2";
- developmentRegion = English;
+ compatibilityVersion = "Xcode 12.0";
+ developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
- English,
en,
Base,
);
mainGroup = 83CBB9F61A601CBA00E9B192;
productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
projectDirPath = "";
- projectReferences = (
- {
- ProductGroup = 5C0F2307237AEEFA0089C1F8 /* Products */;
- ProjectRef = 5C0F2306237AEEFA0089C1F8 /* RCTJCoreModule.xcodeproj */;
- },
- {
- ProductGroup = 5C0F230D237AEF120089C1F8 /* Products */;
- ProjectRef = 5C0F230C237AEF120089C1F8 /* RCTJPushModule.xcodeproj */;
- },
- );
projectRoot = "";
targets = (
13B07F861A680F5B00A75B9A /* example */,
+ 00E356ED1AD99517003FC87E /* exampleTests */,
);
};
/* End PBXProject section */
-/* Begin PBXReferenceProxy section */
- 5C0F230B237AEEFA0089C1F8 /* libRCTJCoreModule.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libRCTJCoreModule.a;
- remoteRef = 5C0F230A237AEEFA0089C1F8 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 5C0F2311237AEF120089C1F8 /* libRCTJPushModule.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libRCTJPushModule.a;
- remoteRef = 5C0F2310237AEF120089C1F8 /* 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 = (
+ 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
- 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */,
+ 3EF8C8DA8012F99F86F827CD /* PrivacyInfo.xcprivacy in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -275,15 +263,34 @@
files = (
);
inputPaths = (
+ "$(SRCROOT)/.xcode.env.local",
+ "$(SRCROOT)/.xcode.env",
);
name = "Bundle React Native code and images";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh";
+ shellScript = "set -e\n\nWITH_ENVIRONMENT=\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"$REACT_NATIVE_PATH/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n";
+ };
+ 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-example/Pods-example-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-example/Pods-example-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-example/Pods-example-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
};
- 9B88E118371F18FFFAE7D01F /* [CP] Check Pods Manifest.lock */ = {
+ A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -298,14 +305,14 @@
outputFileListPaths = (
);
outputPaths = (
- "$(DERIVED_FILE_DIR)/Pods-example-checkManifestLockResult.txt",
+ "$(DERIVED_FILE_DIR)/Pods-example-exampleTests-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- FD10A7F022414F080027D42C /* Start Packager */ = {
+ C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -313,139 +320,213 @@
inputFileListPaths = (
);
inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
);
- name = "Start Packager";
+ name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-example-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n";
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
+ C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-example-exampleTests/Pods-example-exampleTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-example-exampleTests/Pods-example-exampleTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-example-exampleTests/Pods-example-exampleTests-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-example/Pods-example-resources-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-example/Pods-example-resources-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-example/Pods-example-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-example-exampleTests/Pods-example-exampleTests-resources-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-example-exampleTests/Pods-example-exampleTests-resources-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-example-exampleTests/Pods-example-exampleTests-resources.sh\"\n";
showEnvVarsInLog = 0;
};
/* 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 */,
+ 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
13B07FC11A68108700A75B9A /* main.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
-/* Begin PBXVariantGroup section */
- 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = {
- isa = PBXVariantGroup;
- children = (
- 13B07FB21A68108700A75B9A /* Base */,
- );
- name = LaunchScreen.xib;
- path = example;
- sourceTree = "";
+/* Begin PBXTargetDependency section */
+ 00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 13B07F861A680F5B00A75B9A /* example */;
+ targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
};
-/* End PBXVariantGroup section */
+/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
+ 00E356F61AD99517003FC87E /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-example-exampleTests.debug.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ INFOPLIST_FILE = exampleTests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.4;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "-ObjC",
+ "-lc++",
+ "$(inherited)",
+ );
+ 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;
+ baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-example-exampleTests.release.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ COPY_PHASE_STRIP = NO;
+ INFOPLIST_FILE = exampleTests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.4;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "-ObjC",
+ "-lc++",
+ "$(inherited)",
+ );
+ 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;
- baseConfigurationReference = AC77230391FFCA8A31383389 /* Pods-example.debug.xcconfig */;
+ baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-example.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = example/example.entitlements;
- CODE_SIGN_IDENTITY = "Apple Development";
- CODE_SIGN_STYLE = Automatic;
+ CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
- DEAD_CODE_STRIPPING = NO;
DEVELOPMENT_TEAM = "";
- HEADER_SEARCH_PATHS = (
+ "DEVELOPMENT_TEAM[sdk=iphoneos*]" = UT282795WK;
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = example/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
- "\"${PODS_ROOT}/Headers/Public\"",
- "\"${PODS_ROOT}/Headers/Public/DoubleConversion\"",
- "\"${PODS_ROOT}/Headers/Public/React-Core\"",
- "\"${PODS_ROOT}/Headers/Public/React-DevSupport\"",
- "\"${PODS_ROOT}/Headers/Public/React-RCTActionSheet\"",
- "\"${PODS_ROOT}/Headers/Public/React-RCTAnimation\"",
- "\"${PODS_ROOT}/Headers/Public/React-RCTBlob\"",
- "\"${PODS_ROOT}/Headers/Public/React-RCTImage\"",
- "\"${PODS_ROOT}/Headers/Public/React-RCTLinking\"",
- "\"${PODS_ROOT}/Headers/Public/React-RCTNetwork\"",
- "\"${PODS_ROOT}/Headers/Public/React-RCTSettings\"",
- "\"${PODS_ROOT}/Headers/Public/React-RCTText\"",
- "\"${PODS_ROOT}/Headers/Public/React-RCTVibration\"",
- "\"${PODS_ROOT}/Headers/Public/React-RCTWebSocket\"",
- "\"${PODS_ROOT}/Headers/Public/React-cxxreact\"",
- "\"${PODS_ROOT}/Headers/Public/React-jsi\"",
- "\"${PODS_ROOT}/Headers/Public/React-jsiexecutor\"",
- "\"${PODS_ROOT}/Headers/Public/React-jsinspector\"",
- "\"${PODS_ROOT}/Headers/Public/glog\"",
- "\"${PODS_ROOT}/Headers/Public/yoga\"",
- "$(SRCROOT)/../node_modules/jcore-react-native/ios/RCTJCoreModule/",
- "$(SRCROOT)/../node_modules/jpush-react-native/ios/RCTJPushModule/",
+ "@executable_path/Frameworks",
);
- INFOPLIST_FILE = example/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ MARKETING_VERSION = 1.0;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-lc++",
);
- PRODUCT_BUNDLE_IDENTIFIER = com.jiguang.verification;
+ PRODUCT_BUNDLE_IDENTIFIER = cn.jiguang.hxhg;
PRODUCT_NAME = example;
PROVISIONING_PROFILE_SPECIFIER = "";
+ "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = cn.jiguang.hxhg;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
};
13B07F951A680F5B00A75B9A /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 04CF78C193A0D587CF1E0CE0 /* Pods-example.release.xcconfig */;
+ baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-example.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = example/example.entitlements;
- CODE_SIGN_IDENTITY = "Apple Development";
- CODE_SIGN_STYLE = Automatic;
+ CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = "";
- HEADER_SEARCH_PATHS = (
+ "DEVELOPMENT_TEAM[sdk=iphoneos*]" = UT282795WK;
+ INFOPLIST_FILE = example/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
- "\"${PODS_ROOT}/Headers/Public\"",
- "\"${PODS_ROOT}/Headers/Public/DoubleConversion\"",
- "\"${PODS_ROOT}/Headers/Public/React-Core\"",
- "\"${PODS_ROOT}/Headers/Public/React-DevSupport\"",
- "\"${PODS_ROOT}/Headers/Public/React-RCTActionSheet\"",
- "\"${PODS_ROOT}/Headers/Public/React-RCTAnimation\"",
- "\"${PODS_ROOT}/Headers/Public/React-RCTBlob\"",
- "\"${PODS_ROOT}/Headers/Public/React-RCTImage\"",
- "\"${PODS_ROOT}/Headers/Public/React-RCTLinking\"",
- "\"${PODS_ROOT}/Headers/Public/React-RCTNetwork\"",
- "\"${PODS_ROOT}/Headers/Public/React-RCTSettings\"",
- "\"${PODS_ROOT}/Headers/Public/React-RCTText\"",
- "\"${PODS_ROOT}/Headers/Public/React-RCTVibration\"",
- "\"${PODS_ROOT}/Headers/Public/React-RCTWebSocket\"",
- "\"${PODS_ROOT}/Headers/Public/React-cxxreact\"",
- "\"${PODS_ROOT}/Headers/Public/React-jsi\"",
- "\"${PODS_ROOT}/Headers/Public/React-jsiexecutor\"",
- "\"${PODS_ROOT}/Headers/Public/React-jsinspector\"",
- "\"${PODS_ROOT}/Headers/Public/glog\"",
- "\"${PODS_ROOT}/Headers/Public/yoga\"",
- "$(SRCROOT)/../node_modules/jcore-react-native/ios/RCTJCoreModule/",
- "$(SRCROOT)/../node_modules/jpush-react-native/ios/RCTJPushModule/",
+ "@executable_path/Frameworks",
);
- INFOPLIST_FILE = example/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ MARKETING_VERSION = 1.0;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-lc++",
);
- PRODUCT_BUNDLE_IDENTIFIER = com.jiguang.verification;
+ PRODUCT_BUNDLE_IDENTIFIER = cn.jiguang.hxhg;
PRODUCT_NAME = example;
PROVISIONING_PROFILE_SPECIFIER = "";
+ "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = cn.jiguang.hxhg;
+ SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
@@ -454,7 +535,9 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CC = "";
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -472,16 +555,18 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- CODE_SIGN_IDENTITY = "iPhone Developer: shen Shen (348KH4PKBT)";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: shen Shen (348KH4PKBT)";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
+ CXX = "";
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
@@ -497,10 +582,36 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.4;
+ LD = "";
+ LDPLUSPLUS = "";
+ LD_RUNPATH_SEARCH_PATHS = (
+ /usr/lib/swift,
+ "$(inherited)",
+ );
+ LIBRARY_SEARCH_PATHS = (
+ "\"$(SDKROOT)/usr/lib/swift\"",
+ "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
+ "\"$(inherited)\"",
+ );
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
+ OTHER_CFLAGS = "$(inherited)";
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-DFOLLY_NO_CONFIG",
+ "-DFOLLY_MOBILE=1",
+ "-DFOLLY_USE_LIBCPP=1",
+ "-DFOLLY_CFG_NO_COROUTINES=1",
+ "-DFOLLY_HAVE_CLOCK_GETTIME=1",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ " ",
+ );
+ REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
+ USE_HERMES = true;
};
name = Debug;
};
@@ -508,7 +619,9 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CC = "";
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -526,16 +639,18 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- CODE_SIGN_IDENTITY = "iPhone Developer: shen Shen (348KH4PKBT)";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: shen Shen (348KH4PKBT)";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = YES;
+ CXX = "";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@@ -544,9 +659,35 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.4;
+ LD = "";
+ LDPLUSPLUS = "";
+ LD_RUNPATH_SEARCH_PATHS = (
+ /usr/lib/swift,
+ "$(inherited)",
+ );
+ LIBRARY_SEARCH_PATHS = (
+ "\"$(SDKROOT)/usr/lib/swift\"",
+ "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
+ "\"$(inherited)\"",
+ );
MTL_ENABLE_DEBUG_INFO = NO;
+ OTHER_CFLAGS = "$(inherited)";
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-DFOLLY_NO_CONFIG",
+ "-DFOLLY_MOBILE=1",
+ "-DFOLLY_USE_LIBCPP=1",
+ "-DFOLLY_CFG_NO_COROUTINES=1",
+ "-DFOLLY_HAVE_CLOCK_GETTIME=1",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ " ",
+ );
+ REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
+ USE_HERMES = true;
VALIDATE_PRODUCT = YES;
};
name = Release;
@@ -554,6 +695,15 @@
/* 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 = (
diff --git a/example/ios/example.xcodeproj/xcshareddata/xcschemes/example-tvOS.xcscheme b/example/ios/example.xcodeproj/xcshareddata/xcschemes/example-tvOS.xcscheme
deleted file mode 100644
index dde7377e..00000000
--- a/example/ios/example.xcodeproj/xcshareddata/xcschemes/example-tvOS.xcscheme
+++ /dev/null
@@ -1,129 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/example/ios/example.xcodeproj/xcshareddata/xcschemes/example.xcscheme b/example/ios/example.xcodeproj/xcshareddata/xcschemes/example.xcscheme
index 1cef262c..fef9df78 100644
--- a/example/ios/example.xcodeproj/xcshareddata/xcschemes/example.xcscheme
+++ b/example/ios/example.xcodeproj/xcshareddata/xcschemes/example.xcscheme
@@ -1,25 +1,11 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/example/ios/example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/ios/example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d98100..00000000
--- a/example/ios/example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- IDEDidComputeMac32BitWarning
-
-
-
diff --git a/example/ios/example/AppDelegate.h b/example/ios/example/AppDelegate.h
index 2726d5e1..5d280825 100644
--- a/example/ios/example/AppDelegate.h
+++ b/example/ios/example/AppDelegate.h
@@ -1,15 +1,6 @@
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-#import
+#import
#import
-@interface AppDelegate : UIResponder
-
-@property (nonatomic, strong) UIWindow *window;
+@interface AppDelegate : RCTAppDelegate
@end
diff --git a/example/ios/example/AppDelegate.m b/example/ios/example/AppDelegate.mm
similarity index 89%
rename from example/ios/example/AppDelegate.m
rename to example/ios/example/AppDelegate.mm
index 3dddfe2e..d7d585f2 100644
--- a/example/ios/example/AppDelegate.m
+++ b/example/ios/example/AppDelegate.mm
@@ -1,3 +1,4 @@
+
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
@@ -13,10 +14,17 @@
#import
#import
+#import "JPUSHService.h"
+
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
#import
#endif
+
+@interface AppDelegate ()
+
+@end
+
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
@@ -26,15 +34,10 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
// APNS
JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
if (@available(iOS 12.0, *)) {
- entity.types = JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound|JPAuthorizationOptionProvidesAppNotificationSettings;
+ entity.types = JPAuthorizationOptionNone; //JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSou//nd|JPAuthorizationOptionProvidesAppNotificationSettings;
}
[JPUSHService registerForRemoteNotificationConfig:entity delegate:self];
- [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
- // 自定义消息
- NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
- [defaultCenter addObserver:self selector:@selector(networkDidReceiveMessage:) name:kJPFNetworkDidReceiveMessageNotification object:nil];
- // 地理围栏
- [JPUSHService registerLbsGeofenceDelegate:self withLaunchOptions:launchOptions];
+
// ReactNative环境配置
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
@@ -52,7 +55,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
#if DEBUG
- return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
+ return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
#else
return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#endif
diff --git a/example/ios/example/Base.lproj/LaunchScreen.xib b/example/ios/example/Base.lproj/LaunchScreen.xib
deleted file mode 100644
index 9e04807a..00000000
--- a/example/ios/example/Base.lproj/LaunchScreen.xib
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/example/ios/example/Images.xcassets/AppIcon.appiconset/Contents.json b/example/ios/example/Images.xcassets/AppIcon.appiconset/Contents.json
index 19882d56..81213230 100644
--- a/example/ios/example/Images.xcassets/AppIcon.appiconset/Contents.json
+++ b/example/ios/example/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -2,52 +2,52 @@
"images" : [
{
"idiom" : "iphone",
- "size" : "20x20",
- "scale" : "2x"
+ "scale" : "2x",
+ "size" : "20x20"
},
{
"idiom" : "iphone",
- "size" : "20x20",
- "scale" : "3x"
+ "scale" : "3x",
+ "size" : "20x20"
},
{
"idiom" : "iphone",
- "size" : "29x29",
- "scale" : "2x"
+ "scale" : "2x",
+ "size" : "29x29"
},
{
"idiom" : "iphone",
- "size" : "29x29",
- "scale" : "3x"
+ "scale" : "3x",
+ "size" : "29x29"
},
{
"idiom" : "iphone",
- "size" : "40x40",
- "scale" : "2x"
+ "scale" : "2x",
+ "size" : "40x40"
},
{
"idiom" : "iphone",
- "size" : "40x40",
- "scale" : "3x"
+ "scale" : "3x",
+ "size" : "40x40"
},
{
"idiom" : "iphone",
- "size" : "60x60",
- "scale" : "2x"
+ "scale" : "2x",
+ "size" : "60x60"
},
{
"idiom" : "iphone",
- "size" : "60x60",
- "scale" : "3x"
+ "scale" : "3x",
+ "size" : "60x60"
},
{
"idiom" : "ios-marketing",
- "size" : "1024x1024",
- "scale" : "1x"
+ "scale" : "1x",
+ "size" : "1024x1024"
}
],
"info" : {
- "version" : 1,
- "author" : "xcode"
+ "author" : "xcode",
+ "version" : 1
}
-}
\ No newline at end of file
+}
diff --git a/example/ios/example/Info.plist b/example/ios/example/Info.plist
index 20fb35c9..a496c6c8 100644
--- a/example/ios/example/Info.plist
+++ b/example/ios/example/Info.plist
@@ -17,25 +17,19 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 1.0
+ $(MARKETING_VERSION)
CFBundleSignature
????
CFBundleVersion
- 1
+ $(CURRENT_PROJECT_VERSION)
LSRequiresIPhoneOS
NSAppTransportSecurity
NSAllowsArbitraryLoads
+
+ NSAllowsLocalNetworking
- NSExceptionDomains
-
- localhost
-
- NSExceptionAllowsInsecureHTTPLoads
-
-
-
NSLocationWhenInUseUsageDescription
@@ -43,7 +37,7 @@
LaunchScreen
UIRequiredDeviceCapabilities
- armv7
+ arm64
UISupportedInterfaceOrientations
diff --git a/example/ios/example/LaunchScreen.storyboard b/example/ios/example/LaunchScreen.storyboard
new file mode 100644
index 00000000..a2139fff
--- /dev/null
+++ b/example/ios/example/LaunchScreen.storyboard
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/example/ios/example/PrivacyInfo.xcprivacy b/example/ios/example/PrivacyInfo.xcprivacy
new file mode 100644
index 00000000..41b8317f
--- /dev/null
+++ b/example/ios/example/PrivacyInfo.xcprivacy
@@ -0,0 +1,37 @@
+
+
+
+
+ NSPrivacyAccessedAPITypes
+
+
+ NSPrivacyAccessedAPIType
+ NSPrivacyAccessedAPICategoryFileTimestamp
+ NSPrivacyAccessedAPITypeReasons
+
+ C617.1
+
+
+
+ NSPrivacyAccessedAPIType
+ NSPrivacyAccessedAPICategoryUserDefaults
+ NSPrivacyAccessedAPITypeReasons
+
+ CA92.1
+
+
+
+ NSPrivacyAccessedAPIType
+ NSPrivacyAccessedAPICategorySystemBootTime
+ NSPrivacyAccessedAPITypeReasons
+
+ 35F9.1
+
+
+
+ NSPrivacyCollectedDataTypes
+
+ NSPrivacyTracking
+
+
+
diff --git a/example/ios/example/main.m b/example/ios/example/main.m
index c316cf81..d645c724 100644
--- a/example/ios/example/main.m
+++ b/example/ios/example/main.m
@@ -1,15 +1,9 @@
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
#import
#import "AppDelegate.h"
-int main(int argc, char * argv[]) {
+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 00000000..ba72822e
--- /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 00000000..6f944301
--- /dev/null
+++ b/example/ios/exampleTests/exampleTests.m
@@ -0,0 +1,66 @@
+#import
+#import
+
+#import
+#import
+
+#define TIMEOUT_SECONDS 600
+#define TEXT_TO_LOOK_FOR @"Welcome to React"
+
+@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;
+#ifdef DEBUG
+ RCTSetLogFunction(
+ ^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
+ if (level >= RCTLogLevelError) {
+ redboxError = message;
+ }
+ });
+#endif
+
+ 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;
+ }];
+ }
+
+#ifdef DEBUG
+ RCTSetLogFunction(RCTDefaultLogFunction);
+#endif
+
+ 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/jest.config.js b/example/jest.config.js
new file mode 100644
index 00000000..8eb675e9
--- /dev/null
+++ b/example/jest.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ preset: 'react-native',
+};
diff --git a/example/metro.config.js b/example/metro.config.js
index 13a96421..9d41685e 100644
--- a/example/metro.config.js
+++ b/example/metro.config.js
@@ -1,17 +1,11 @@
+const {getDefaultConfig, mergeConfig} = require('@react-native/metro-config');
+
/**
- * Metro configuration for React Native
- * https://github.com/facebook/react-native
+ * Metro configuration
+ * https://reactnative.dev/docs/metro
*
- * @format
+ * @type {import('metro-config').MetroConfig}
*/
+const config = {};
-module.exports = {
- transformer: {
- getTransformOptions: async () => ({
- transform: {
- experimentalImportSupport: false,
- inlineRequires: false,
- },
- }),
- },
-};
+module.exports = mergeConfig(getDefaultConfig(__dirname), config);
diff --git a/example/package.json b/example/package.json
index 4dd6a1c6..28982f0e 100644
--- a/example/package.json
+++ b/example/package.json
@@ -3,26 +3,36 @@
"version": "0.0.1",
"private": true,
"scripts": {
+ "android": "react-native run-android",
+ "ios": "react-native run-ios",
+ "lint": "eslint .",
"start": "react-native start",
"test": "jest"
},
"dependencies": {
- "jcore-react-native": "1.9.5",
- "jpush-react-native": "2.9.2",
- "react": "16.8.6",
- "react-native": "0.60.5",
- "update": "^0.7.4"
+ "jcore-react-native": "^2.3.0",
+ "jpush-react-native": "^3.2.1",
+ "react": "18.2.0",
+ "react-native": "0.74.1"
},
"devDependencies": {
- "@babel/core": "^7.5.0",
- "@babel/runtime": "^7.5.0",
- "@react-native-community/eslint-config": "^0.0.3",
- "babel-jest": "^24.1.0",
- "jest": "^24.1.0",
- "metro-react-native-babel-preset": "0.68.0",
- "react-test-renderer": "16.8.6"
+ "@babel/core": "^7.20.0",
+ "@babel/preset-env": "^7.20.0",
+ "@babel/runtime": "^7.20.0",
+ "@react-native/babel-preset": "0.74.83",
+ "@react-native/eslint-config": "0.74.83",
+ "@react-native/metro-config": "0.74.83",
+ "@react-native/typescript-config": "0.74.83",
+ "@types/react": "^18.2.6",
+ "@types/react-test-renderer": "^18.0.0",
+ "babel-jest": "^29.6.3",
+ "eslint": "^8.19.0",
+ "jest": "^29.6.3",
+ "prettier": "2.8.8",
+ "react-test-renderer": "18.2.0",
+ "typescript": "5.0.4"
},
- "jest": {
- "preset": "react-native"
+ "engines": {
+ "node": ">=18"
}
}
diff --git a/example/tsconfig.json b/example/tsconfig.json
new file mode 100644
index 00000000..304ab4e2
--- /dev/null
+++ b/example/tsconfig.json
@@ -0,0 +1,3 @@
+{
+ "extends": "@react-native/typescript-config/tsconfig.json"
+}
diff --git a/index.d.ts b/index.d.ts
index 29d0681d..ffe8ead5 100644
--- a/index.d.ts
+++ b/index.d.ts
@@ -62,7 +62,7 @@ export default class JPush {
*/
static init(params: {
appKey: string;
- titchannelle: string;
+ channel: string;
production: boolean;
}): void;
@@ -126,6 +126,16 @@ export default class JPush {
*/
static queryAlias(params: Sequence): void;
+ /**
+ * 进入页面
+ */
+ static pageEnterTo(params: String): void;
+
+ /**
+ * 离开页面
+ */
+ static pageLeave(params: String): void;
+
//***************************************统计***************************************
/**
@@ -288,7 +298,7 @@ export default class JPush {
/**
* 自定义消息事件
*/
- static addCustomMessagegListener(
+ static addCustomMessageListener(
callback: Callback<{
/**
* 唯一标识自定义消息的 ID
@@ -305,6 +315,94 @@ export default class JPush {
}>
): void;
+ // 通知按钮点击事件, Android Only
+ static addNotifyButtonClickListener(
+ callback: Callback<{
+ /**
+ * 唯一标识通知按钮点击的 ID
+ */
+ msgId: string;
+ /**
+ * 平台
+ */
+ platform: number;
+ /**
+ * 按钮名称
+ */
+ name: string;
+ /**
+ * 按钮动作类型
+ */
+ actionType: number;
+ /**
+ * 按钮动作
+ */
+ action: string;
+ /**
+ * 按钮数据
+ */
+ data: string;
+ }>
+ ): void;
+
+ /**
+ * inapp消息事件
+ */
+ static addInappMessageListener(
+ callback: Callback<{
+ /**
+ * 唯一标识inapp消息的 ID
+ */
+ mesageId: string;
+ /**
+ * 标题
+ */
+ title: string;
+ /**
+ * 内容
+ */
+ content: string;
+ /**
+ * 目标页面
+ */
+ target: string[];
+ /**
+ * 跳转地址
+ */
+ clickAction: string;
+ /**
+ * 附加字段
+ */
+ extras: Extra;
+ /**
+ * 类型,inappShow:展示,inappClick:点击
+ */
+ inappEventType: "inappShow" | "inappClick";
+ }>
+ ): void;
+ static addCommandEventListener(
+ callback: Callback<{
+ /**
+ * 命令类型(例如:1, 2, 3 等)
+ */
+ command: number;
+
+ /**
+ * 命令的附加信息(例如:JSON 字符串或其他数据)
+ */
+ commandExtra: string;
+
+ /**
+ * 命令的消息内容
+ */
+ commandMessage: string;
+
+ /**
+ * 命令的执行结果(例如:0 表示成功,其他值表示错误码)
+ */
+ commandResult: number;
+ }>
+ ): void;
/**
* tag alias事件
*/
@@ -447,4 +545,45 @@ export default class JPush {
*/
appBadge: number;
}): void;
+
+ /**
+ * 设置用户分群推送功能开关
+ *
+ *
+ * @param {boolean} enable, YES:开启,NO:关闭,默认是开启。
+ *
+ */
+ static setSmartPushEnable(enable: boolean): void;
+
+ /**
+ * 设置应用数据洞察
+ *
+ *
+ * @param {boolean} enable, YES:开启,NO:关闭,默认是开启。
+ *
+ */
+ static setDataInsightsEnable(enable: boolean): void;
+
+/**
+ * 数据采集控制, YES:开启,NO:关闭, 默认开启
+ *
+ */
+ static setCollectControl(params: {
+ cell: boolean;
+ bssid: boolean;
+ imei: boolean;
+ imsi: boolean;
+ mac: boolean;
+ wifi: boolean;
+}): void;
+
+/**
+ * 设置进入后台是否允许长连接
+ * 支持版本:v5.9.0 版本开始
+ * 功能说明:设置进入后台是否允许长连接。默认是NO,进入后台会关闭长连接,回到前台会重新接入。请在初始化函数之前调用。
+ *
+ * @platform iOS
+ */
+ static setBackgroundEnable(enable: boolean): void;
+
}
diff --git a/index.js b/index.js
index 92bef1a4..3042df00 100644
--- a/index.js
+++ b/index.js
@@ -11,8 +11,11 @@ const ConnectEvent = 'ConnectEvent' //连接状态
const NotificationEvent = 'NotificationEvent' //通知事件
const LocalNotificationEvent = 'LocalNotificationEvent' //本地通知事件
const CustomMessageEvent = 'CustomMessageEvent' //自定义消息事件
-const TagAliasEvent = 'TagAliasEvent' //TagAlias事件
+const NotifyButtonClickEvent = 'NotifyButtonClickEvent' //通知按钮点击事件
+const InappMessageEvent = 'InappMessageEvent' //应用内消息事件
+const TagAliasEvent = 'TagAliasEvent' //TagAlias/Pros事件
const MobileNumberEvent = 'MobileNumberEvent' //电话号码事件
+const CommandEvent = 'CommandEvent' //COMMAND事件
export default class JPush {
@@ -223,6 +226,61 @@ export default class JPush {
JPushModule.getAlias(params)
}
}
+ /*
+ * 设置推送个性化属性/更新用户指定推送个性化属性
+ * */
+ static setProperties(params) {
+ if (Platform.OS == "android") {
+ JPushModule.setProperties(params)
+ } else {
+ JPushModule.setProperties(params)
+ }
+ }
+ /*
+ * 删除指定推送个性化属性
+ * */
+ static deleteProperties(params) {
+ if (Platform.OS == "android") {
+ JPushModule.deleteProperties(params)
+ } else {
+ JPushModule.deleteProperties(params)
+ }
+ }
+ /*
+ * 清除所有推送个性化属性
+ * */
+ static cleanProperties() {
+ if (Platform.OS == "android") {
+ JPushModule.cleanProperties()
+ } else {
+ JPushModule.cleanProperties()
+ }
+ }
+
+
+
+ /* 应用内消息,请配置pageEnterTo 和 pageLeave 方法,请配套使用
+ * 进入页面,pageName:页面名 String
+ * */
+ static pageEnterTo(pageName) {
+ if (Platform.OS == "android") {
+
+ } else {
+ JPushModule.pageEnterTo(pageName)
+ }
+ }
+
+ /* 应用内消息,请配置pageEnterTo 和 pageLeave 方法,请配套使用
+ * 离开页面,pageName:页面名 String
+ * */
+ static pageLeave(pageName) {
+ if (Platform.OS == "android") {
+
+ } else {
+ JPushModule.pageLeave(pageName)
+ }
+ }
+
//***************************************统计***************************************
@@ -267,6 +325,8 @@ export default class JPush {
static isNotificationEnabled(callback){
if (Platform.OS == "android"){
JPushModule.isNotificationEnabled(callback)
+ } else {
+ JPushModule.isNotificationEnabled(callback)
}
}
@@ -275,18 +335,19 @@ export default class JPush {
/*
* 添加一个本地通知
*
- * @param {"messageID":String,"title":String,"content":String,"extras":{String:String}}
- *
- * messageID:唯一标识通知消息的ID,可用于移除消息。
- * android用到的是int,ios用到的是String,rn这边提供接口的时候统一改成了String,然后android拿到String转int。输入messageID的时候需要int值范围在[1,2147483647]然后转成String。
- *
- * title:对应“通知标题”字段
+ * @param {"messageID":String, "title":String, "content":String, "extras":{String:String}, "broadcastTime":String, "builderName":String, "category":String, "priority":int}
*
- * content:对应“通知内容”字段
+ * messageID: 唯一标识通知消息的ID,可用于移除消息。
+ * android用到的是int,ios用到的是String,rn这边提供接口的时候统一改成了String,然后android拿到String转int。输入messageID的时候需要int值范围在[1,2147483647]然后转成String。
+ * title: 对应“通知标题”字段
+ * content: 对应“通知内容”字段
+ * broadcastTime: 定时通知展示时间,需要把 时间戳(毫秒) 转为String 传入。
+ * extras: 对应“附加内容”字段
+ * builderName: Android平台专用,布局文件名(不包含.xml后缀),用于自定义通知样式。通过布局文件名查找对应的资源ID。
+ * category: Android平台专用,通知分类,用于系统对通知进行分组管理。
+ * priority: Android平台专用,通知优先级,取值为int类型。影响通知的显示顺序和重要性。
*
- * extras:对应“附加内容”字段
- *
- * */
+ */
static addLocalNotification(params) {
if (Platform.OS == "android") {
JPushModule.addLocalNotification(params)
@@ -374,6 +435,13 @@ export default class JPush {
callback(result)
})
}
+ //CommandEvent 事件回调
+ static addCommandEventListener(callback) {
+ listeners[callback] = DeviceEventEmitter.addListener(
+ CommandEvent, result => {
+ callback(result)
+ })
+ }
/*
* 通知事件
@@ -448,6 +516,56 @@ export default class JPush {
})
}
+ /*
+ * 通知按钮点击事件, Android Only
+ *
+ * @param {Function} callback = (result) => {"msgId":String,"platform":number, "name":string, "actionType":number, "action":string, "data":string}}}
+ *
+ * msgId:唯一标识通知按钮点击的 ID
+ *
+ * platform:平台
+ *
+ * name:按钮名称
+ *
+ * actionType:按钮动作类型
+ *
+ * action:按钮动作
+ *
+ * data:按钮数据
+ *
+ * */
+ static addNotifyButtonClickListener(callback) {
+ listeners[callback] = DeviceEventEmitter.addListener(
+ NotifyButtonClickEvent, result => {
+ callback(result)
+ })
+ }
+
+ /*
+ * 应用内消息事件
+ *
+ * @param {Function} callback = (result) => {"mesageId":String,"title":String, "content":String, "target":String, "clickAction":String, extras":{String:String}}}
+ *
+ * messageID:唯一标识自定义消息的 ID
+ *
+ * title: 标题
+ *
+ * content:内容
+ *
+ * target:目标页面
+ *
+ * clickAction:跳转地址
+ *
+ * extras:附加字段
+ *
+ * */
+ static addInappMessageListener(callback) {
+ listeners[callback] = DeviceEventEmitter.addListener(
+ InappMessageEvent, result => {
+ callback(result)
+ })
+ }
+
/*
* tag alias事件
*
@@ -596,6 +714,14 @@ export default class JPush {
// setupWithOpion
}
}
+ static setChannelAndSound(params) {
+ if (Platform.OS == "android") {
+ JPushModule.setChannelAndSound(params)
+ } else {
+ // setupWithOpion
+ }
+ }
+
//***************************************iOS Only***************************************
@@ -617,4 +743,52 @@ export default class JPush {
}
}
+ static setLinkMergeEnable(enable) {
+ if (Platform.OS == "ios") {
+ }else if (Platform.OS == "android") {
+ JPushModule.setLinkMergeEnable(enable)
+ }
+ }
+ static setSmartPushEnable(enable) {
+ if (Platform.OS == "ios") {
+ JPushModule.setSmartPushEnable(enable)
+ }else if (Platform.OS == "android") {
+ JPushModule.setSmartPushEnable(enable)
+ }
+ }
+ static setDataInsightsEnable(enable) {
+ if (Platform.OS == "ios") {
+
+ }else if (Platform.OS == "android") {
+ JPushModule.setDataInsightsEnable(enable)
+ }
+ }
+ static setGeofenceEnable(enable) {
+ if (Platform.OS == "ios") {
+ }else if (Platform.OS == "android") {
+ JPushModule.setGeofenceEnable(enable)
+ }
+ }
+
+ static setCollectControl(params) {
+ if (Platform.OS == "ios") {
+ JPushModule.setCollectControl(params)
+ }else if (Platform.OS == "android") {
+ JPushModule.setCollectControl(params)
+ }
+ }
+
+ /*
+ * 设置进入后台是否允许长连接
+ * 支持版本:v5.9.0 版本开始
+ * 功能说明:设置进入后台是否允许长连接。默认是NO,进入后台会关闭长连接,回到前台会重新接入。请在初始化函数之前调用。
+ * @param enable = boolean
+ * @platform iOS
+ * */
+ static setBackgroundEnable(enable) {
+ if (Platform.OS == "ios") {
+ JPushModule.setBackgroundEnable(enable)
+ }
+ }
+
}
diff --git a/ios/RCTJPushModule.xcodeproj/project.pbxproj b/ios/RCTJPushModule.xcodeproj/project.pbxproj
index e45756ef..b37ff4f6 100644
--- a/ios/RCTJPushModule.xcodeproj/project.pbxproj
+++ b/ios/RCTJPushModule.xcodeproj/project.pbxproj
@@ -3,13 +3,13 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 46;
+ objectVersion = 52;
objects = {
/* Begin PBXBuildFile section */
- 5AF3669125870DFD00A57061 /* libjpush-ios-3.3.6.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AF3669025870DFD00A57061 /* libjpush-ios-3.3.6.a */; };
5C103CA7236041E7000AD3DA /* RCTJPushEventQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C103CA6236041E7000AD3DA /* RCTJPushEventQueue.m */; };
624386D81E096B8800F69E07 /* RCTJPushModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 624386D41E096B8800F69E07 /* RCTJPushModule.m */; };
+ A40EE5272E2F693E00FD1C66 /* jpush-ios-5.9.0.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = A40EE5262E2F693E00FD1C66 /* jpush-ios-5.9.0.xcframework */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
@@ -25,13 +25,12 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
- 5AF3669025870DFD00A57061 /* libjpush-ios-3.3.6.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libjpush-ios-3.3.6.a"; path = "RCTJPushModule/libjpush-ios-3.3.6.a"; sourceTree = ""; };
5C103CA5236041E7000AD3DA /* RCTJPushEventQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTJPushEventQueue.h; sourceTree = ""; };
5C103CA6236041E7000AD3DA /* RCTJPushEventQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTJPushEventQueue.m; sourceTree = ""; };
624386D31E096B8800F69E07 /* RCTJPushModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTJPushModule.h; sourceTree = ""; };
624386D41E096B8800F69E07 /* RCTJPushModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTJPushModule.m; sourceTree = ""; };
6280980A1CEDC407000D3A81 /* libRCTJPushModule.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRCTJPushModule.a; sourceTree = BUILT_PRODUCTS_DIR; };
- 62DA93BC21E8679300208462 /* JPUSHService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JPUSHService.h; sourceTree = ""; };
+ A40EE5262E2F693E00FD1C66 /* jpush-ios-5.9.0.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = "jpush-ios-5.9.0.xcframework"; path = "RCTJPushModule/jpush-ios-5.9.0.xcframework"; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -39,7 +38,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 5AF3669125870DFD00A57061 /* libjpush-ios-3.3.6.a in Frameworks */,
+ A40EE5272E2F693E00FD1C66 /* jpush-ios-5.9.0.xcframework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -49,7 +48,7 @@
5CF8E647231E3A9200B12200 /* Frameworks */ = {
isa = PBXGroup;
children = (
- 5AF3669025870DFD00A57061 /* libjpush-ios-3.3.6.a */,
+ A40EE5262E2F693E00FD1C66 /* jpush-ios-5.9.0.xcframework */,
);
name = Frameworks;
sourceTree = "";
@@ -76,7 +75,6 @@
children = (
5C103CA5236041E7000AD3DA /* RCTJPushEventQueue.h */,
5C103CA6236041E7000AD3DA /* RCTJPushEventQueue.m */,
- 62DA93BC21E8679300208462 /* JPUSHService.h */,
624386D31E096B8800F69E07 /* RCTJPushModule.h */,
624386D41E096B8800F69E07 /* RCTJPushModule.m */,
);
diff --git a/ios/RCTJPushModule/RCTJPushModule.m b/ios/RCTJPushModule/RCTJPushModule.m
index a7ebc87e..a676740c 100644
--- a/ios/RCTJPushModule/RCTJPushModule.m
+++ b/ios/RCTJPushModule/RCTJPushModule.m
@@ -16,6 +16,7 @@
#define EXTRAS @"extras"
#define BADGE @"badge"
#define RING @"ring"
+#define BROADCASTTIME @"broadcastTime"
//本地角标
#define APP_BADGE @"appBadge"
@@ -27,6 +28,9 @@
#define ALIAS @"alias"
+//properties
+#define PROS @"pros"
+
//地理围栏
#define GEO_FENCE_ID @"geoFenceID"
#define GEO_FENCE_MAX_NUMBER @"geoFenceMaxNumber"
@@ -40,15 +44,24 @@
#define NOTIFICATION_EVENT @"NotificationEvent"
//自定义消息
#define CUSTOM_MESSAGE_EVENT @"CustomMessageEvent"
+//应用内消息事件类型
+#define INAPP_MESSAGE_EVENT_TYPE @"inappEventType"
+#define INAPP_MESSAGE_SHOW @"inappShow"
+#define INAPP_MESSAGE_CLICK @"inappClick"
+//应用内消息
+#define INAPP_MESSAGE_EVENT @"InappMessageEvent"
//本地通知
#define LOCAL_NOTIFICATION_EVENT @"LocalNotificationEvent"
//连接状态
#define CONNECT_EVENT @"ConnectEvent"
//tag alias
#define TAG_ALIAS_EVENT @"TagAliasEvent"
+//properties
+#define PROPERTIES_EVENT @"PropertiesEvent"
//phoneNumber
#define MOBILE_NUMBER_EVENT @"MobileNumberEvent"
+
@interface RCTJPushModule ()
@end
@@ -112,7 +125,8 @@ - (id)init
return self;
}
-RCT_EXPORT_METHOD(setDebugMode: (BOOL *)enable)
+
+RCT_EXPORT_METHOD(setDebugMode: (BOOL )enable)
{
if(enable){
[JPUSHService setDebugMode];
@@ -137,6 +151,7 @@ - (id)init
}
}
+
RCT_EXPORT_METHOD(loadJS)
{
NSMutableArray *notificationList = [RCTJPushEventQueue sharedInstance]._notificationQueue;
@@ -158,6 +173,16 @@ - (id)init
}];
}
+RCT_EXPORT_METHOD(isNotificationEnabled:(RCTResponseSenderBlock) callback) {
+ [JPUSHService requestNotificationAuthorization:^(JPAuthorizationStatus status) {
+ if (status <= JPAuthorizationStatusDenied) {
+ callback(@[@(NO)]);
+ }else {
+ callback(@[@(YES)]);
+ }
+ }];
+}
+
//tag
RCT_EXPORT_METHOD(addTags:(NSDictionary *)params)
{
@@ -265,6 +290,105 @@ - (id)init
} seq:sequence];
}
+//properties
+RCT_EXPORT_METHOD(setProperties:(NSDictionary *)params) {
+ if(params[PROS]){
+ NSDictionary *properties = params[PROS];
+ NSInteger sequence = params[SEQUENCE]?[params[SEQUENCE] integerValue]:-1;
+ [JPUSHService setProperties:properties completion:^(NSInteger iResCode, NSDictionary *properties, NSInteger seq) {
+ NSDictionary *data = @{CODE:@(iResCode),SEQUENCE:@(seq),PROS:properties};
+ [self sendPropertiesEvent:data];
+ } seq:sequence];
+ }
+}
+
+RCT_EXPORT_METHOD(deleteProperties:(NSDictionary *)params) {
+ if(params[PROS]){
+ NSDictionary *properties = params[PROS];
+ NSSet *set = [NSSet setWithArray:properties.allKeys];
+ NSInteger sequence = params[SEQUENCE]?[params[SEQUENCE] integerValue]:-1;
+ [JPUSHService deleteProperties:set completion:^(NSInteger iResCode, NSDictionary *properties, NSInteger seq) {
+ NSDictionary *data = @{CODE:@(iResCode),SEQUENCE:@(seq), PROS:properties};
+ [self sendTagAliasEvent:data];
+ } seq:sequence];
+ }
+}
+
+RCT_EXPORT_METHOD(cleanProperties:(NSDictionary *)params) {
+ NSInteger sequence = params[SEQUENCE]?[params[SEQUENCE] integerValue]:-1;
+ [JPUSHService cleanProperties:^(NSInteger iResCode, NSDictionary *properties, NSInteger seq) {
+ NSDictionary *data = @{CODE:@(iResCode),SEQUENCE:@(seq),PROS:properties};
+ [self sendTagAliasEvent:data];
+ } seq:sequence];
+}
+
+// 应用内消息
+RCT_EXPORT_METHOD(pageEnterTo:(NSString *)pageName)
+{
+ [JPUSHService pageEnterTo:pageName];
+}
+
+RCT_EXPORT_METHOD(pageLeave:(NSString *)pageName)
+{
+ [JPUSHService pageLeave:pageName];
+}
+
+// 合规
+RCT_EXPORT_METHOD(setCollectControl:(NSDictionary *)params)
+{
+ JPushCollectControl *control = [[JPushCollectControl alloc] init];
+ BOOL gps = YES;
+ BOOL cell = YES;
+ BOOL bssid = YES;
+ BOOL ssid = YES;
+ if (params[@"gps"] && [params[@"gps"] isKindOfClass:[NSNumber class]]) {
+ gps = [params[@"gps"] boolValue];
+ }
+ if (params[@"cell"] && [params[@"cell"] isKindOfClass:[NSNumber class]]) {
+ cell = [params[@"cell"] boolValue];
+ }
+ if (params[@"bssid"] && [params[@"bssid"] isKindOfClass:[NSNumber class]]) {
+ bssid = [params[@"bssid"] boolValue];
+ }
+ if (params[@"ssid"] && [params[@"ssid"] isKindOfClass:[NSNumber class]]) {
+ ssid = [params[@"ssid"] boolValue];
+ }
+ control.gps = gps;
+ control.cell = cell;
+ control.bssid = bssid;
+ control.ssid = ssid;
+ [JPUSHService setCollectControl:control];
+}
+
+RCT_EXPORT_METHOD(setSmartPushEnable:(BOOL )enable)
+{
+ [JPUSHService setSmartPushEnable:enable];
+}
+
+RCT_EXPORT_METHOD(setBackgroundEnable:(BOOL )enable)
+{
+ [JPUSHService setBackgroundEnable:enable];
+}
+
+
+//应用内消息 代理
+- (void)jPushInAppMessageDidShow:(JPushInAppMessage *)inAppMessage {
+ NSDictionary *responseData = [self convertInappMsg:inAppMessage isShow:YES];
+ [self.bridge enqueueJSCall:@"RCTDeviceEventEmitter"
+ method:@"emit"
+ args:@[INAPP_MESSAGE_EVENT,responseData ]
+ completion:NULL];
+
+}
+
+- (void)jPushInAppMessageDidClick:(JPushInAppMessage *)inAppMessage {
+ NSDictionary *responseData = [self convertInappMsg:inAppMessage isShow:NO];
+ [self.bridge enqueueJSCall:@"RCTDeviceEventEmitter"
+ method:@"emit"
+ args:@[INAPP_MESSAGE_EVENT,responseData ]
+ completion:NULL];
+}
+
//badge 角标
RCT_EXPORT_METHOD(setBadge:(NSDictionary *)params)
{
@@ -282,6 +406,15 @@ - (id)init
}
}
+//Properties
+- (void)sendPropertiesEvent:(NSDictionary *)data
+{
+ [self.bridge enqueueJSCall:@"RCTDeviceEventEmitter"
+ method:@"emit"
+ args:@[PROPERTIES_EVENT, data]
+ completion:NULL];
+}
+
//设置手机号码
RCT_EXPORT_METHOD(setMobileNumber:(NSDictionary *)params)
{
@@ -310,14 +443,23 @@ - (id)init
NSString *notificationContent = params[CONTENT]?params[CONTENT]:@"";
content.title = notificationTitle;
content.body = notificationContent;
+ if (@available(iOS 15.0, *)) {
+ content.interruptionLevel = 1;
+ } else {
+ // Fallback on earlier versions
+ }
if(params[EXTRAS]){
content.userInfo = @{MESSAGE_ID:messageID,TITLE:notificationTitle,CONTENT:notificationContent,EXTRAS:params[EXTRAS]};
}else{
content.userInfo = @{MESSAGE_ID:messageID,TITLE:notificationTitle,CONTENT:notificationContent};
}
+ NSString *broadcastTime = params[BROADCASTTIME];
JPushNotificationTrigger *trigger = [[JPushNotificationTrigger alloc] init];
NSDateComponents *components = [[NSDateComponents alloc] init];
NSDate *now = [NSDate date];
+ if (broadcastTime && [broadcastTime isKindOfClass:[NSString class]]) {
+ now = [NSDate dateWithTimeIntervalSince1970:[broadcastTime integerValue]/1000];
+ }
NSCalendar *calendar = [NSCalendar currentCalendar];
NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *dateComponent = [calendar components:unitFlags fromDate:now];
@@ -371,7 +513,7 @@ - (id)init
//事件处理
- (NSArray *)supportedEvents
{
- return @[CONNECT_EVENT,NOTIFICATION_EVENT,CUSTOM_MESSAGE_EVENT,LOCAL_NOTIFICATION_EVENT,TAG_ALIAS_EVENT,MOBILE_NUMBER_EVENT];
+ return @[CONNECT_EVENT,NOTIFICATION_EVENT,CUSTOM_MESSAGE_EVENT,LOCAL_NOTIFICATION_EVENT,TAG_ALIAS_EVENT,MOBILE_NUMBER_EVENT,INAPP_MESSAGE_EVENT];
}
//长连接登录
@@ -563,4 +705,17 @@ -(NSDictionary *)convertCustomMessage:(NSNotification *)data
return responseData;
}
+- (NSDictionary *)convertInappMsg:(JPushInAppMessage *)inAppMessage isShow:(BOOL)isShow{
+ NSDictionary *result = @{
+ @"mesageId": inAppMessage.mesageId ?: @"", // 消息id
+ @"title": inAppMessage.title ?:@"", // 标题
+ @"content": inAppMessage.content ?: @"", // 内容
+ @"target": inAppMessage.target ?: @[], // 目标页面
+ @"clickAction": inAppMessage.clickAction ?: @"", // 跳转地址
+ @"extras": inAppMessage.extras ?: @{}, // 附加字段
+ INAPP_MESSAGE_EVENT_TYPE: isShow ? INAPP_MESSAGE_SHOW : INAPP_MESSAGE_CLICK // 类型
+ };
+ return result;
+}
+
@end
diff --git a/ios/RCTJPushModule/jpush-ios-5.9.0.xcframework/Info.plist b/ios/RCTJPushModule/jpush-ios-5.9.0.xcframework/Info.plist
new file mode 100644
index 00000000..531cf958
--- /dev/null
+++ b/ios/RCTJPushModule/jpush-ios-5.9.0.xcframework/Info.plist
@@ -0,0 +1,44 @@
+
+
+
+
+ AvailableLibraries
+
+
+ HeadersPath
+ Headers
+ LibraryIdentifier
+ ios-arm64_x86_64-simulator
+ LibraryPath
+ libJPush.a
+ SupportedArchitectures
+
+ arm64
+ x86_64
+
+ SupportedPlatform
+ ios
+ SupportedPlatformVariant
+ simulator
+
+
+ HeadersPath
+ Headers
+ LibraryIdentifier
+ ios-arm64
+ LibraryPath
+ libJPush.a
+ SupportedArchitectures
+
+ arm64
+
+ SupportedPlatform
+ ios
+
+
+ CFBundlePackageType
+ XFWK
+ XCFrameworkFormatVersion
+ 1.0
+
+
diff --git a/ios/RCTJPushModule/JPUSHService.h b/ios/RCTJPushModule/jpush-ios-5.9.0.xcframework/ios-arm64/Headers/JPUSHService.h
old mode 100755
new mode 100644
similarity index 71%
rename from ios/RCTJPushModule/JPUSHService.h
rename to ios/RCTJPushModule/jpush-ios-5.9.0.xcframework/ios-arm64/Headers/JPUSHService.h
index a222ab65..5752e8a7
--- a/ios/RCTJPushModule/JPUSHService.h
+++ b/ios/RCTJPushModule/jpush-ios-5.9.0.xcframework/ios-arm64/Headers/JPUSHService.h
@@ -9,10 +9,12 @@
* Copyright (c) 2011 ~ 2017 Shenzhen HXHG. All rights reserved.
*/
-#define JPUSH_VERSION_NUMBER 3.7.4
+#define JPUSH_VERSION_NUMBER 5.9.0
#import
+NS_ASSUME_NONNULL_BEGIN
+
@class CLRegion;
@class UILocalNotification;
@class CLLocation;
@@ -23,12 +25,14 @@
@class UIView;
@protocol JPUSHRegisterDelegate;
@protocol JPUSHGeofenceDelegate;
-@protocol JPushInMessageDelegate;
+@protocol JPUSHNotiInMessageDelegate;
+@protocol JPUSHInAppMessageDelegate;
-typedef void (^JPUSHTagsOperationCompletion)(NSInteger iResCode, NSSet *iTags, NSInteger seq);
-typedef void (^JPUSHTagValidOperationCompletion)(NSInteger iResCode, NSSet *iTags, NSInteger seq, BOOL isBind);
-typedef void (^JPUSHAliasOperationCompletion)(NSInteger iResCode, NSString *iAlias, NSInteger seq);
-typedef void (^JPUSHInMssageCompletion)(NSInteger iResCode);
+typedef void (^JPUSHTagsOperationCompletion)(NSInteger iResCode, NSSet *_Nullable iTags, NSInteger seq);
+typedef void (^JPUSHTagValidOperationCompletion)(NSInteger iResCode, NSSet *_Nullable iTags, NSInteger seq, BOOL isBind);
+typedef void (^JPUSHAliasOperationCompletion)(NSInteger iResCode, NSString *_Nullable iAlias, NSInteger seq);
+typedef void (^JPUSHPropertiesOperationCompletion)(NSInteger iResCode, NSDictionary *_Nullable properties, NSInteger seq);
+typedef void (^JPUSHLiveActivityTokenCompletion)(NSInteger iResCode, NSString *_Nullable iLiveActivityId, NSData * _Nullable pushToken, NSInteger seq);
extern NSString *const kJPFNetworkIsConnectingNotification; // 正在连接中
extern NSString *const kJPFNetworkDidSetupNotification; // 建立连接
@@ -58,17 +62,6 @@ typedef NS_ENUM(NSUInteger, JPAuthorizationStatus) {
JPAuthorizationStatusProvisional NS_AVAILABLE_IOS(12.0), // The application is authorized to post non-interruptive user notifications.
};
-typedef NS_ENUM(NSInteger,JPushInMessageContentType){
- JPushAdContentType = 1, //广告类型的inMessage
- JPushNotiContentType = 2, //通知类型的inMessage
-};
-
-typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
- JPInMessageTypeBanner = (1 << 0), // 横幅
- JPInMessageTypeModal = (1 << 1), // 模态
- JPInMessageTypeFloat = (1 << 2), // 小浮窗
-};
-
/*!
* 通知注册实体类
*/
@@ -84,7 +77,7 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
* iOS10 UNNotificationCategory
* iOS8-iOS9 UIUserNotificationCategory
*/
-@property (nonatomic, strong) NSSet *categories;
+@property (nonatomic, strong, nullable) NSSet *categories;
@end
/*!
@@ -92,10 +85,10 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
*/
@interface JPushNotificationIdentifier : NSObject
-@property (nonatomic, copy) NSArray *identifiers; // 推送的标识数组
-@property (nonatomic, copy) UILocalNotification *notificationObj NS_DEPRECATED_IOS(4_0, 10_0); // iOS10以下可以传UILocalNotification对象数据,iOS10以上无效
+@property (nonatomic, copy, nullable) NSArray * identifiers; // 推送的标识数组
+@property (nonatomic, copy, nullable) UILocalNotification * notificationObj NS_DEPRECATED_IOS(4_0, 10_0); // iOS10以下可以传UILocalNotification对象数据,iOS10以上无效
@property (nonatomic, assign) BOOL delivered NS_AVAILABLE_IOS(10_0); // 在通知中心显示的或待推送的标志,默认为NO,YES表示在通知中心显示的,NO表示待推送的
-@property (nonatomic, copy) void (^findCompletionHandler)(NSArray *results); // 用于查询回调,调用[findNotification:]方法前必须设置,results为返回相应对象数组,iOS10以下返回UILocalNotification对象数组;iOS10以上根据delivered传入值返回UNNotification或UNNotificationRequest对象数组(delivered传入YES,则返回UNNotification对象数组,否则返回UNNotificationRequest对象数组)
+@property (nonatomic, copy, nullable) void (^findCompletionHandler)(NSArray * _Nullable results); // 用于查询回调,调用[findNotification:]方法前必须设置,results为返回相应对象数组,iOS10以下返回UILocalNotification对象数组;iOS10以上根据delivered传入值返回UNNotification或UNNotificationRequest对象数组(delivered传入YES,则返回UNNotification对象数组,否则返回UNNotificationRequest对象数组)
@end
@@ -104,8 +97,8 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
* iOS10以上有效
*/
@interface JPushNotificationSound : NSObject
-@property (nonatomic, copy) NSString *soundName; //普通通知铃声
-@property (nonatomic, copy) NSString *criticalSoundName NS_AVAILABLE_IOS(12.0); //警告通知铃声
+@property (nonatomic, copy, nullable) NSString *soundName; //普通通知铃声
+@property (nonatomic, copy, nullable) NSString *criticalSoundName NS_AVAILABLE_IOS(12.0); //警告通知铃声
@property (nonatomic, assign) float criticalSoundVolume NS_AVAILABLE_IOS(12.0); //警告通知铃声音量,有效值在0~1之间,默认为1
@end
@@ -118,18 +111,25 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
@property (nonatomic, copy) NSString *title; // 推送标题
@property (nonatomic, copy) NSString *subtitle; // 推送副标题
@property (nonatomic, copy) NSString *body; // 推送内容
-@property (nonatomic, copy) NSNumber *badge; // 角标的数字。如果不需要改变角标传@(-1)
+@property (nonatomic, copy, nullable) NSNumber *badge; // 角标的数字。如果不需要改变角标传@(-1)
@property (nonatomic, copy) NSString *action NS_DEPRECATED_IOS(8_0, 10_0); // 弹框的按钮显示的内容(IOS 8默认为"打开", 其他默认为"启动",iOS10以上无效)
@property (nonatomic, copy) NSString *categoryIdentifier; // 行为分类标识
@property (nonatomic, copy) NSDictionary *userInfo; // 本地推送时可以设置userInfo来增加附加信息,远程推送时设置的payload推送内容作为此userInfo
-@property (nonatomic, copy) NSString *sound; // 声音名称,不设置则为默认声音
-@property (nonatomic, copy) JPushNotificationSound *soundSetting NS_AVAILABLE_IOS(10.0); //推送声音实体
+@property (nonatomic, copy, nullable) NSString *sound; // 声音名称,不设置则为默认声音
+@property (nonatomic, copy, nullable) JPushNotificationSound *soundSetting NS_AVAILABLE_IOS(10.0); //推送声音实体
@property (nonatomic, copy) NSArray *attachments NS_AVAILABLE_IOS(10_0); // 附件,iOS10以上有效,需要传入UNNotificationAttachment对象数组类型
@property (nonatomic, copy) NSString *threadIdentifier NS_AVAILABLE_IOS(10_0); // 线程或与推送请求相关对话的标识,iOS10以上有效,可用来对推送进行分组
@property (nonatomic, copy) NSString *launchImageName NS_AVAILABLE_IOS(10_0); // 启动图片名,iOS10以上有效,从推送启动时将会用到
@property (nonatomic, copy) NSString *summaryArgument NS_AVAILABLE_IOS(12.0); //插入到通知摘要中的部分参数。iOS12以上有效。
@property (nonatomic, assign) NSUInteger summaryArgumentCount NS_AVAILABLE_IOS(12.0); //插入到通知摘要中的项目数。iOS12以上有效。
-@property (nonatomic, copy) NSString *targetContentIdentifier NS_AVAILABLE_IOS(13.0); // An identifier for the content of the notification used by the system to customize the scene to be activated when tapping on a notification.
+@property (nonatomic, copy, nullable) NSString *targetContentIdentifier NS_AVAILABLE_IOS(13.0); // An identifier for the content of the notification used by the system to customize the scene to be activated when tapping on a notification.
+//iOS15以上的新增属性 interruptionLevel为枚举UNNotificationInterruptionLevel
+// The interruption level determines the degree of interruption associated with the notification
+@property (nonatomic, assign) NSUInteger interruptionLevel NS_AVAILABLE_IOS(15.0);
+// Relevance score determines the sorting for the notification across app notifications. The expected range is between 0.0f and 1.0f.
+@property (nonatomic, assign) double relevanceScore NS_AVAILABLE_IOS(15.0);
+// iOS16以上的新增属性
+@property (nonatomic, copy, nullable) NSString * filterCriteria NS_AVAILABLE_IOS(16.0); // default nil
@end
@@ -156,7 +156,35 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
@property (nonatomic, copy) NSString *requestIdentifier; // 推送请求标识
@property (nonatomic, copy) JPushNotificationContent *content; // 设置推送的具体内容
@property (nonatomic, copy) JPushNotificationTrigger *trigger; // 设置推送的触发方式
-@property (nonatomic, copy) void (^completionHandler)(id result); // 注册或更新推送成功回调,iOS10以上成功则result为UNNotificationRequest对象,失败则result为nil;iOS10以下成功result为UILocalNotification对象,失败则result为nil
+@property (nonatomic, copy, nullable) void (^completionHandler)(id result); // 注册或更新推送成功回调,iOS10以上成功则result为UNNotificationRequest对象,失败则result为nil;iOS10以下成功result为UILocalNotification对象,失败则result为nil
+
+@end
+
+
+/*!
+ * 应用内消息内容实体
+ */
+@interface JPushInAppMessage : NSObject
+
+@property (nonatomic, copy) NSString *mesageId; // 消息id
+@property (nonatomic, copy) NSString *title; // 标题
+@property (nonatomic, copy) NSString *content; // 内容
+@property (nonatomic, strong) NSArray *target; // 目标页面
+@property (nonatomic, copy) NSString *clickAction; // 跳转地址
+@property (nonatomic, strong) NSDictionary *extras; // 附加字段
+
+@end
+
+@interface JPushCollectControl : NSObject
+
+/* ssid SSID信息。设置为NO,不采集SSID信息。默认为YES。 */
+@property (nonatomic, assign) BOOL ssid;
+/* bssid BSSID信息。设置为NO,不采集BSSID信息。默认为YES。 */
+@property (nonatomic, assign) BOOL bssid;
+/* cell 基站信息。设置为NO,不采集基站信息。默认为YES。*/
+@property (nonatomic, assign) BOOL cell;
+/* gps 经纬度信息。设置为NO,不采集经纬度信息。默认为YES。 */
+@property (nonatomic, assign) BOOL gps;
@end
@@ -183,9 +211,9 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
* @discussion 提供SDK启动必须的参数, 来启动 SDK.
* 此接口必须在 App 启动时调用, 否则 JPush SDK 将无法正常工作.
*/
-+ (void)setupWithOption:(NSDictionary *)launchingOption
++ (void)setupWithOption:(nullable NSDictionary *)launchingOption
appKey:(NSString *)appKey
- channel:(NSString *)channel
+ channel:(nullable NSString *)channel
apsForProduction:(BOOL)isProduction;
/*!
@@ -201,11 +229,11 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
* @discussion 提供SDK启动必须的参数, 来启动 SDK.
* 此接口必须在 App 启动时调用, 否则 JPush SDK 将无法正常工作.
*/
-+ (void)setupWithOption:(NSDictionary *)launchingOption
++ (void)setupWithOption:(nullable NSDictionary *)launchingOption
appKey:(NSString *)appKey
- channel:(NSString *)channel
+ channel:(nullable NSString *)channel
apsForProduction:(BOOL)isProduction
- advertisingIdentifier:(NSString *)advertisingId;
+ advertisingIdentifier:(nullable NSString *)advertisingId;
///----------------------------------------------------
@@ -220,7 +248,7 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
*
*/
+ (void)registerForRemoteNotificationTypes:(NSUInteger)types
- categories:(NSSet *)categories;
+ categories:(nullable NSSet *)categories;
/*!
* @abstract 新版本的注册方法(兼容iOS10)
*
@@ -228,11 +256,39 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
* @param delegate 代理
*
*/
-+ (void)registerForRemoteNotificationConfig:(JPUSHRegisterEntity *)config delegate:(id)delegate;
++ (void)registerForRemoteNotificationConfig:(JPUSHRegisterEntity *)config delegate:(nullable id)delegate;
+ (void)registerDeviceToken:(NSData *)deviceToken;
+/*!
+ * @abstract 上报liveactivity的启动token
+ *
+ * @param activityAttributes 某liveActivity定义的属性类型
+ * @param pushToStartToken 对应该liveactivity的pushToStartToken,如有更新,请及时调用该方法更新pushToStartToken
+ * @param completion 响应回调
+ * @param seq 请求序列号
+ */
++ (void)registerLiveActivity:(NSString *)activityAttributes
+ pushToStartToken:(nullable NSData *)pushToStartToken
+ completion:(nullable JPUSHLiveActivityTokenCompletion)completion
+ seq:(NSInteger)seq;
+
+/*!
+ * @abstract 注册liveActivity并上报其pushToken
+ * 在pushToken有变化的时候同步调用该接口。
+ * 在liveActivity结束的时候,请同步调用该接口,pushToken传nil
+ *
+ * @param liveActivityId 标识某一个liveActivity
+ * @param pushToken 对应该liveActivity的pushToken,如有更新,请及时调用该方法更新pushToken
+ * @param completion 响应回调
+ * @param seq 请求序列号
+ */
++ (void)registerLiveActivity:(NSString *)liveActivityId
+ pushToken:(nullable NSData *)pushToken
+ completion:(nullable JPUSHLiveActivityTokenCompletion)completion
+ seq:(NSInteger)seq;
+
/*!
* @abstract 处理收到的 APNs 消息
*/
@@ -258,12 +314,12 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
* @abstract 检测通知授权状态
* @param completion 授权结果通过status值返回,详见JPAuthorizationStatus
*/
-+ (void)requestNotificationAuthorization:(void (^)(JPAuthorizationStatus status))completion;
++ (void)requestNotificationAuthorization:(nullable void (^)(JPAuthorizationStatus status))completion;
/*!
* @abstract 跳转至系统设置页面,iOS8及以上有效
*/
-+ (void)openSettingsForNotification:(void (^)(BOOL success))completionHandler NS_AVAILABLE_IOS(8_0);
++ (void)openSettingsForNotification:(nullable void (^)(BOOL success))completionHandler NS_AVAILABLE_IOS(8_0);
/*!
* Tags操作接口
@@ -279,7 +335,7 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
@param seq 请求序列号
*/
+ (void)addTags:(NSSet *)tags
- completion:(JPUSHTagsOperationCompletion)completion
+ completion:(nullable JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq;
/**
@@ -291,7 +347,7 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
@param seq 请求序列号
*/
+ (void)setTags:(NSSet *)tags
- completion:(JPUSHTagsOperationCompletion)completion
+ completion:(nullable JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq;
/**
@@ -302,7 +358,7 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
@param seq 请求序列号
*/
+ (void)deleteTags:(NSSet *)tags
- completion:(JPUSHTagsOperationCompletion)completion
+ completion:(nullable JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq;
/**
@@ -310,7 +366,7 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
@param completion 响应回调
@param seq 请求序列号
*/
-+ (void)cleanTags:(JPUSHTagsOperationCompletion)completion
++ (void)cleanTags:(nullable JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq;
/**
@@ -319,7 +375,7 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
@param completion 响应回调,请在回调中获取查询结果
@param seq 请求序列号
*/
-+ (void)getAllTags:(JPUSHTagsOperationCompletion)completion
++ (void)getAllTags:(nullable JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq;
/**
@@ -329,7 +385,7 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
@param seq 请求序列号
*/
+ (void)validTag:(NSString *)tag
- completion:(JPUSHTagValidOperationCompletion)completion
+ completion:(nullable JPUSHTagValidOperationCompletion)completion
seq:(NSInteger)seq;
/**
@@ -340,7 +396,7 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
@param seq 请求序列号
*/
+ (void)setAlias:(NSString *)alias
- completion:(JPUSHAliasOperationCompletion)completion
+ completion:(nullable JPUSHAliasOperationCompletion)completion
seq:(NSInteger)seq;
/**
@@ -349,7 +405,7 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
@param completion 响应回调
@param seq 请求序列号
*/
-+ (void)deleteAlias:(JPUSHAliasOperationCompletion)completion
++ (void)deleteAlias:(nullable JPUSHAliasOperationCompletion)completion
seq:(NSInteger)seq;
/**
@@ -358,7 +414,7 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
@param completion 响应回调
@param seq 请求序列号
*/
-+ (void)getAlias:(JPUSHAliasOperationCompletion)completion
++ (void)getAlias:(nullable JPUSHAliasOperationCompletion)completion
seq:(NSInteger)seq;
@@ -370,6 +426,85 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
*/
+ (NSSet *)filterValidTags:(NSSet *)tags;
+
+/*!
+ * Property操作接口
+ * 支持增加/删除/清空操作
+ * 详情请参考文档:https://docs.jiguang.cn/jpush/client/iOS/ios_api/)
+ */
+
+/**
+ 新增/更新用户属性
+
+ 如果某个用户属性之前已经存在了,则会更新;不存在,则会新增
+
+ @param properties 需要新增或者更新的的用户属性内容,类型为NSDictionary;
+ Key 为用户属性名称,类型必须是 NSString 类型;Value为用户属性值,只支持 NSString、NSNumber、NSDate类型,如果属性为BOOL类型,传值时请转成NSNumber类型
+ @param completion 响应回调
+ @param seq 请求序列号
+ */
++ (void)setProperties:(NSDictionary *)properties
+ completion:(nullable JPUSHPropertiesOperationCompletion)completion
+ seq:(NSInteger)seq;
+
+
+/**
+ 删除指定属性
+
+ @param keys 需要删除的属性名称集合
+ @param completion 响应回调
+ @param seq 请求序列号
+ */
++ (void)deleteProperties:(NSSet *)keys
+ completion:(nullable JPUSHPropertiesOperationCompletion)completion
+ seq:(NSInteger)seq;
+
+
+/**
+ 清空所有属性
+ @param completion 响应回调
+ @param seq 请求序列号
+ */
++ (void)cleanProperties:(nullable JPUSHPropertiesOperationCompletion)completion
+ seq:(NSInteger)seq;
+
+
+/*!
+ * 应用内消息接口
+ * 使用应用内消息需要配置以下两个接口。请在进入页面和离开页面的时候相应地配置。以下两个接口请配套调用。
+ */
+
+/**
+ 进入页面
+
+ 请与 + (void)pageLeave:(NSString *)pageName; 方法配套使用
+
+ @param pageName 页面名
+ @discussion 使用应用内消息功能,需要配置pageEnterTo:和pageLeave:函数。
+ */
++ (void)pageEnterTo:(NSString *)pageName;
+
+
+/**
+ 离开页面
+
+ 请与 + (void)pageEnterTo:(NSString *)pageName;方法配套使用
+
+ @param pageName 页面名
+ @discussion 使用应用内消息功能,需要配置pageEnterTo:和pageLeave:函数。
+ */
++ (void)pageLeave:(NSString *)pageName;
+
+
+/*!
+* @abstract 设置应用内消息的代理
+*
+* @discussion 遵守JPUSHInAppMessageDelegate的代理对象
+*
+*/
++ (void)setInAppMessageDelegate:(id)inAppMessageDelegate;
+
+
///----------------------------------------------------
/// @name Stats 统计功能
///----------------------------------------------------
@@ -443,7 +578,7 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
@param delegate 代理
@param launchOptions app启动完成是收到的字段参数
*/
-+ (void)registerLbsGeofenceDelegate:(id)delegate withLaunchOptions:(NSDictionary *)launchOptions;
++ (void)registerLbsGeofenceDelegate:(id)delegate withLaunchOptions:(nullable NSDictionary *)launchOptions;
/**
删除地理围栏
@@ -473,7 +608,7 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
* @discussion 旧的所有删除推送接口被废弃,使用此接口可以替换
*
*/
-+ (void)removeNotification:(JPushNotificationIdentifier *)identifier;
++ (void)removeNotification:(nullable JPushNotificationIdentifier *)identifier;
/*!
* @abstract 查找推送 (支持iOS10,并兼容iOS10以下版本)
@@ -610,7 +745,7 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
* @discussion 设置手机号码后,可实现“推送不到短信到”的通知方式,提高推送达到率。结果信息通过completion异步返回,也可将completion设置为nil不处理结果信息。
*
*/
-+ (void)setMobileNumber:(NSString *)mobileNumber completion:(void (^)(NSError *error))completion;
++ (void)setMobileNumber:(NSString *)mobileNumber completion:(nullable void (^)(NSError *error))completion;
///----------------------------------------------------
/// @name Logs and others 日志与其他
@@ -628,7 +763,7 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
*/
+ (NSString *)registrationID;
-+ (void)registrationIDCompletionHandler:(void(^)(int resCode,NSString *registrationID))completionHandler;
++ (void)registrationIDCompletionHandler:(void(^)(int resCode,NSString * _Nullable registrationID))completionHandler;
/*!
* @abstract 打开日志级别到 Debug
@@ -654,6 +789,23 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
*/
+ (void)setLogOFF;
+/*!
+ 数据采集控制
+
+ @param control 数据采集配置。
+ */
++ (void)setCollectControl:(JPushCollectControl *)control;
+
+/*!
+ * @abstract 设置心跳时间间隔
+ *
+ * @param interval 心跳时间间隔 单位为秒, 取值范围为[30,290]
+ *
+ * @discussion 请在初始化函数之前调用该接口。
+ *
+ */
++ (void)setHeartBeatTimeInterval:(NSInteger)interval;
+
/*!
* @abstract 设置SDK地理位置权限开关
*
@@ -663,92 +815,47 @@ typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
+ (void)setLocationEanable:(BOOL)isEanble;
/*!
-* @abstract 设置应用内消息的代理
-*
-* @discussion 遵守JPushInMessageDelegate的代理对象
-*
-*/
-+ (void)setInMessageDelegate:(id)inMessageDelegate;
-
-/*!
-* @abstract 设置应用内消息的inMessageView的父控件
-*
-* @discussion 建议设置成当前展示的window,SDK默认取当前APP顶层的Window。
-*
-*/
-+ (void)setInMessageSuperView:(UIView *)view;
-
-
-/*!
-* @abstract 主动拉取应用内消息的接口
-*
-* @discussion 拉取结果的回调
-*
-*/
-+ (void)pullInMessageCompletion:(JPUSHInMssageCompletion)completion __attribute__((deprecated("JPush 3.7.0 版本已过期")));
-
-
-/*!
-* @abstract 主动拉取应用内消息的接口
-*
-* @param types 应用内消息样式
-*
-* @discussion 拉取结果的回调
-*/
-+ (void)pullInMessageWithTypes:(NSUInteger)types completion:(JPUSHInMssageCompletion)completion __attribute__((deprecated("JPush 3.7.0 版本已过期")));
-
-
-/*!
-* @abstract 主动拉取应用内消息的接口
-*
-* @param adPosition 广告位
-*
-* @discussion 拉取结果的回调
-*/
-+ (void)pullInMessageWithAdPosition:(NSString *)adPosition completion:(JPUSHInMssageCompletion)completion;
-
+ * @abstract 设置PUSH开关
+ *
+ * @discussion 关闭PUSH之后,将接收不到极光通知推送、自定义消息推送、liveActivity消息推送,默认是开启。
+ *
+ */
++ (void)setPushEnable:(BOOL)isEnable completion:(nullable void (^)(NSInteger iResCode))completion;
/*!
-* @abstract 主动拉取应用内消息的接口
-*
-* @param params 拉取条件 可传参数: @"adPosition" -> 广告位 NSString, @"event" -> 事件 NSString
-*
-* @discussion 拉取结果的回调
-*/
-+ (void)pullInMessageWithParams:(NSDictionary *)params completion:(JPUSHInMssageCompletion)completion;
-
+ * @abstract 设置进入后台是否允许长连接
+ *
+ * @param isEnable YES:允许,NO:不允许,默认是NO,进入后台会关闭长连接,回到前台会重新接入。
+ *
+ * @discussion 请在初始化函数之前调用
+ *
+ */
++ (void)setBackgroundEnable:(BOOL)isEnable;
/*!
-* @abstract 通过事件触发应用内消息下发
-*
-* @param event 事件
-*
-*/
-+ (void)triggerInMessageByEvent:(NSString *)event;
-
+ * @abstract 设置用户分群推送功能开关
+ *
+ * @param isEnable YES:开启,NO:关闭,默认是开启。
+ *
+ */
++ (void)setSmartPushEnable:(BOOL)isEnable;
/*!
-* @abstract 在页面切换的时候调用,告诉sdk当前切换到的页面名称
-*
-* @param className 当前页面的类名
-*
-* @discussion
- 通过定向页面触发应用内消息下发的功能、页面跳转到黑名单页面隐藏正在曝光中的inapp的功能、inapp页面延迟展示功能都依赖于该接口调用。
- 请在页面切换的时候调用此方法。确保在所有页面的viewDidAppear中调用此方法。不然可能会造成inapp部分功能不完善。建议在viewController的基类中调用,或者使用method swizzling方法交换viewController的viewDidAppear方法。
-*
-*/
-+ (void)currentViewControllerName:(NSString *)className;
+ * @abstract 设置应用数据洞察扩展功能开关
+ *
+ * @param isEnable YES:开启,NO:关闭,默认是开启。
+ *
+ */
++ (void)setDataInsightsEnable:(BOOL)isEnable;
/*!
-* @abstract 通过定向页面触发应用内消息下发
-*
-* @param pageName 当前页面的类名
+* @abstract 设置应用内提醒消息的代理
*
-* @discussion 请在页面切换的时候调用此方法。确保在所有页面的viewDidAppear中调用此方法。不然可能会造成该功能不完善。建议在viewController的基类中调用,或者使用method swizzling方法交换viewController的viewDidAppear方法。
+* @discussion 遵守JPushNotiInMessageDelegate的代理对象
*
*/
-+ (void)triggerInMessageByPageChange:(NSString *)pageName __attribute__((deprecated("JPush 3.7.4 版本已过期")));
++ (void)setNotiInMessageDelegate:(id)notiInMessageDelegate;
@@ -819,7 +926,7 @@ callbackSelector:(SEL)cbSelector
* @param status 授权通知状态,详见JPAuthorizationStatus
* @param info 更多信息,预留参数
*/
-- (void)jpushNotificationAuthorization:(JPAuthorizationStatus)status withInfo:(NSDictionary *)info;
+- (void)jpushNotificationAuthorization:(JPAuthorizationStatus)status withInfo:(nullable NSDictionary *)info;
@end
@@ -829,15 +936,15 @@ callbackSelector:(SEL)cbSelector
@param geofence 地理围栏触发时返回的信息
@param error 错误信息
*/
-- (void)jpushGeofenceRegion:(NSDictionary *)geofence
- error:(NSError *)error;
+- (void)jpushGeofenceRegion:(nullable NSDictionary *)geofence
+ error:(nullable NSError *)error;
/**
拉取地理围栏列表的回调
@param geofenceList 地理围栏列表
*/
-- (void)jpushCallbackGeofenceReceived:(NSArray *)geofenceList;
+- (void)jpushCallbackGeofenceReceived:(nullable NSArray *)geofenceList;
/**
进入地理围栏区域
@@ -846,7 +953,7 @@ callbackSelector:(SEL)cbSelector
@param userInfo 地理围栏触发时返回的信息
@param error 错误信息
*/
-- (void)jpushGeofenceIdentifer:(NSString *)geofenceId didEnterRegion:(NSDictionary *)userInfo error:(NSError *)error __attribute__((deprecated("JPush 3.6.0 版本已过期")));
+- (void)jpushGeofenceIdentifer:(NSString *)geofenceId didEnterRegion:(NSDictionary *_Nullable)userInfo error:(NSError *_Nullable)error __attribute__((deprecated("JPush 3.6.0 版本已过期")));
/**
离开地理围栏区域
@@ -855,46 +962,50 @@ callbackSelector:(SEL)cbSelector
@param userInfo 地理围栏触发时返回的信息
@param error 错误信息
*/
-- (void)jpushGeofenceIdentifer:(NSString *)geofenceId didExitRegion:(NSDictionary *)userInfo error:(NSError *)error __attribute__((deprecated("JPush 3.6.0 版本已过期")));
-
+- (void)jpushGeofenceIdentifer:(NSString *)geofenceId didExitRegion:(NSDictionary *_Nullable)userInfo error:(NSError *_Nullable)error __attribute__((deprecated("JPush 3.6.0 版本已过期")));
@end
-@protocol JPushInMessageDelegate
-@optional
-/**
- *是否允许应用内消息弹出,默认为允许
-*/
-- (BOOL)jPushInMessageIsAllowedInMessagePop;
+@protocol JPUSHNotiInMessageDelegate
/**
- *应用内消息展示的回调
-*/
-- (void)jPushInMessageAlreadyPop __attribute__((deprecated("JPush 3.4.0 版本已过期")));
+ 应用内提醒消息展示的回调
+
+ @param content 应用内提醒消息的内容
+
+ */
+- (void)jPushNotiInMessageDidShowWithContent:(NSDictionary *)content;
/**
- *应用内消息已消失
-*/
-- (void)jPushInMessageAlreadyDisappear;
+ 应用内提醒消息点击的回调
+
+ @param content 应用内提醒消息的内容
+ */
+- (void)jPushNotiInMessageDidClickWithContent:(NSDictionary *)content;
+
+@end
+
+
+@protocol JPUSHInAppMessageDelegate
/**
- inMessage展示的回调
+ 应用内消息展示的回调
- @param messageType inMessage
- @param content 下发的数据,广告类的返回数据为空时返回的信息
+ @param inAppMessage 应用内消息的内容
*/
-- (void)jPushInMessageAlreadyPopInMessageType:(JPushInMessageContentType)messageType Content:(NSDictionary *)content;
+- (void)jPushInAppMessageDidShow:(JPushInAppMessage *)inAppMessage;
/**
- inMessage点击的回调
+ 应用内消息点击的回调
- @param messageType inMessage
- @param content 下发的数据,广告类的返回数据为空时返回的信息
+ @param inAppMessage 应用内消息的内容
*/
-- (void)jpushInMessagedidClickInMessageType:(JPushInMessageContentType)messageType Content:(NSDictionary *)content;
+- (void)jPushInAppMessageDidClick:(JPushInAppMessage *)inAppMessage;
@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/RCTJPushModule/jpush-ios-5.9.0.xcframework/ios-arm64/PrivacyInfo.xcprivacy b/ios/RCTJPushModule/jpush-ios-5.9.0.xcframework/ios-arm64/PrivacyInfo.xcprivacy
new file mode 100644
index 00000000..e2920ec8
--- /dev/null
+++ b/ios/RCTJPushModule/jpush-ios-5.9.0.xcframework/ios-arm64/PrivacyInfo.xcprivacy
@@ -0,0 +1,23 @@
+
+
+
+
+ NSPrivacyTrackingDomains
+
+ NSPrivacyCollectedDataTypes
+
+ NSPrivacyTracking
+
+ NSPrivacyAccessedAPITypes
+
+
+ NSPrivacyAccessedAPITypeReasons
+
+ CA92.1
+
+ NSPrivacyAccessedAPIType
+ NSPrivacyAccessedAPICategoryUserDefaults
+
+
+
+
diff --git a/ios/RCTJPushModule/jpush-ios-5.9.0.xcframework/ios-arm64/libJPush.a b/ios/RCTJPushModule/jpush-ios-5.9.0.xcframework/ios-arm64/libJPush.a
new file mode 100644
index 00000000..5690e202
Binary files /dev/null and b/ios/RCTJPushModule/jpush-ios-5.9.0.xcframework/ios-arm64/libJPush.a differ
diff --git a/ios/RCTJPushModule/jpush-ios-5.9.0.xcframework/ios-arm64_x86_64-simulator/Headers/JPUSHService.h b/ios/RCTJPushModule/jpush-ios-5.9.0.xcframework/ios-arm64_x86_64-simulator/Headers/JPUSHService.h
new file mode 100644
index 00000000..5752e8a7
--- /dev/null
+++ b/ios/RCTJPushModule/jpush-ios-5.9.0.xcframework/ios-arm64_x86_64-simulator/Headers/JPUSHService.h
@@ -0,0 +1,1011 @@
+/*
+ * | | | | \ \ / / | | | | / _______|
+ * | |____| | \ \/ / | |____| | / /
+ * | |____| | \ / | |____| | | | _____
+ * | | | | / \ | | | | | | |____ |
+ * | | | | / /\ \ | | | | \ \______| |
+ * | | | | /_/ \_\ | | | | \_________|
+ *
+ * Copyright (c) 2011 ~ 2017 Shenzhen HXHG. All rights reserved.
+ */
+
+#define JPUSH_VERSION_NUMBER 5.9.0
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class CLRegion;
+@class UILocalNotification;
+@class CLLocation;
+@class UNNotificationCategory;
+@class UNNotificationSettings;
+@class UNNotificationRequest;
+@class UNNotification;
+@class UIView;
+@protocol JPUSHRegisterDelegate;
+@protocol JPUSHGeofenceDelegate;
+@protocol JPUSHNotiInMessageDelegate;
+@protocol JPUSHInAppMessageDelegate;
+
+typedef void (^JPUSHTagsOperationCompletion)(NSInteger iResCode, NSSet *_Nullable iTags, NSInteger seq);
+typedef void (^JPUSHTagValidOperationCompletion)(NSInteger iResCode, NSSet *_Nullable iTags, NSInteger seq, BOOL isBind);
+typedef void (^JPUSHAliasOperationCompletion)(NSInteger iResCode, NSString *_Nullable iAlias, NSInteger seq);
+typedef void (^JPUSHPropertiesOperationCompletion)(NSInteger iResCode, NSDictionary *_Nullable properties, NSInteger seq);
+typedef void (^JPUSHLiveActivityTokenCompletion)(NSInteger iResCode, NSString *_Nullable iLiveActivityId, NSData * _Nullable pushToken, NSInteger seq);
+
+extern NSString *const kJPFNetworkIsConnectingNotification; // 正在连接中
+extern NSString *const kJPFNetworkDidSetupNotification; // 建立连接
+extern NSString *const kJPFNetworkDidCloseNotification; // 关闭连接
+extern NSString *const kJPFNetworkDidRegisterNotification; // 注册成功
+extern NSString *const kJPFNetworkFailedRegisterNotification; //注册失败
+extern NSString *const kJPFNetworkDidLoginNotification; // 登录成功
+extern NSString *const kJPFNetworkDidReceiveMessageNotification; // 收到消息(非APNS)
+extern NSString *const kJPFServiceErrorNotification; // 错误提示
+
+typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
+ JPAuthorizationOptionNone = 0, // the application may not present any UI upon a notification being received
+ JPAuthorizationOptionBadge = (1 << 0), // the application may badge its icon upon a notification being received
+ JPAuthorizationOptionSound = (1 << 1), // the application may play a sound upon a notification being received
+ JPAuthorizationOptionAlert = (1 << 2), // the application may display an alert upon a notification being received
+ JPAuthorizationOptionCarPlay = (1 << 3), // The ability to display notifications in a CarPlay environment.
+ JPAuthorizationOptionCriticalAlert NS_AVAILABLE_IOS(12.0) = (1 << 4) , //The ability to play sounds for critical alerts.
+ JPAuthorizationOptionProvidesAppNotificationSettings NS_AVAILABLE_IOS(12.0) = (1 << 5) , //An option indicating the system should display a button for in-app notification settings.
+ JPAuthorizationOptionProvisional NS_AVAILABLE_IOS(12.0) = (1 << 6) , //The ability to post noninterrupting notifications provisionally to the Notification Center.
+ JPAuthorizationOptionAnnouncement NS_AVAILABLE_IOS(13.0) = (1 << 7) , //The ability for Siri to automatically read out messages over AirPods.
+};
+
+typedef NS_ENUM(NSUInteger, JPAuthorizationStatus) {
+ JPAuthorizationNotDetermined = 0, // The user has not yet made a choice regarding whether the application may post user notifications.
+ JPAuthorizationStatusDenied, // The application is not authorized to post user notifications.
+ JPAuthorizationStatusAuthorized, // The application is authorized to post user notifications.
+ JPAuthorizationStatusProvisional NS_AVAILABLE_IOS(12.0), // The application is authorized to post non-interruptive user notifications.
+};
+
+/*!
+ * 通知注册实体类
+ */
+@interface JPUSHRegisterEntity : NSObject
+
+/*!
+ * 支持的类型
+ * badge,sound,alert
+ */
+@property (nonatomic, assign) NSInteger types;
+/*!
+ * 注入的类别
+ * iOS10 UNNotificationCategory
+ * iOS8-iOS9 UIUserNotificationCategory
+ */
+@property (nonatomic, strong, nullable) NSSet *categories;
+@end
+
+/*!
+ * 进行删除、查找推送实体类
+ */
+@interface JPushNotificationIdentifier : NSObject
+
+@property (nonatomic, copy, nullable) NSArray * identifiers; // 推送的标识数组
+@property (nonatomic, copy, nullable) UILocalNotification * notificationObj NS_DEPRECATED_IOS(4_0, 10_0); // iOS10以下可以传UILocalNotification对象数据,iOS10以上无效
+@property (nonatomic, assign) BOOL delivered NS_AVAILABLE_IOS(10_0); // 在通知中心显示的或待推送的标志,默认为NO,YES表示在通知中心显示的,NO表示待推送的
+@property (nonatomic, copy, nullable) void (^findCompletionHandler)(NSArray * _Nullable results); // 用于查询回调,调用[findNotification:]方法前必须设置,results为返回相应对象数组,iOS10以下返回UILocalNotification对象数组;iOS10以上根据delivered传入值返回UNNotification或UNNotificationRequest对象数组(delivered传入YES,则返回UNNotification对象数组,否则返回UNNotificationRequest对象数组)
+
+@end
+
+/*!
+ * 推送通知声音实体类
+ * iOS10以上有效
+ */
+@interface JPushNotificationSound : NSObject
+@property (nonatomic, copy, nullable) NSString *soundName; //普通通知铃声
+@property (nonatomic, copy, nullable) NSString *criticalSoundName NS_AVAILABLE_IOS(12.0); //警告通知铃声
+@property (nonatomic, assign) float criticalSoundVolume NS_AVAILABLE_IOS(12.0); //警告通知铃声音量,有效值在0~1之间,默认为1
+@end
+
+
+/*!
+ * 推送内容实体类
+ */
+@interface JPushNotificationContent : NSObject
+
+@property (nonatomic, copy) NSString *title; // 推送标题
+@property (nonatomic, copy) NSString *subtitle; // 推送副标题
+@property (nonatomic, copy) NSString *body; // 推送内容
+@property (nonatomic, copy, nullable) NSNumber *badge; // 角标的数字。如果不需要改变角标传@(-1)
+@property (nonatomic, copy) NSString *action NS_DEPRECATED_IOS(8_0, 10_0); // 弹框的按钮显示的内容(IOS 8默认为"打开", 其他默认为"启动",iOS10以上无效)
+@property (nonatomic, copy) NSString *categoryIdentifier; // 行为分类标识
+@property (nonatomic, copy) NSDictionary *userInfo; // 本地推送时可以设置userInfo来增加附加信息,远程推送时设置的payload推送内容作为此userInfo
+@property (nonatomic, copy, nullable) NSString *sound; // 声音名称,不设置则为默认声音
+@property (nonatomic, copy, nullable) JPushNotificationSound *soundSetting NS_AVAILABLE_IOS(10.0); //推送声音实体
+@property (nonatomic, copy) NSArray *attachments NS_AVAILABLE_IOS(10_0); // 附件,iOS10以上有效,需要传入UNNotificationAttachment对象数组类型
+@property (nonatomic, copy) NSString *threadIdentifier NS_AVAILABLE_IOS(10_0); // 线程或与推送请求相关对话的标识,iOS10以上有效,可用来对推送进行分组
+@property (nonatomic, copy) NSString *launchImageName NS_AVAILABLE_IOS(10_0); // 启动图片名,iOS10以上有效,从推送启动时将会用到
+@property (nonatomic, copy) NSString *summaryArgument NS_AVAILABLE_IOS(12.0); //插入到通知摘要中的部分参数。iOS12以上有效。
+@property (nonatomic, assign) NSUInteger summaryArgumentCount NS_AVAILABLE_IOS(12.0); //插入到通知摘要中的项目数。iOS12以上有效。
+@property (nonatomic, copy, nullable) NSString *targetContentIdentifier NS_AVAILABLE_IOS(13.0); // An identifier for the content of the notification used by the system to customize the scene to be activated when tapping on a notification.
+//iOS15以上的新增属性 interruptionLevel为枚举UNNotificationInterruptionLevel
+// The interruption level determines the degree of interruption associated with the notification
+@property (nonatomic, assign) NSUInteger interruptionLevel NS_AVAILABLE_IOS(15.0);
+// Relevance score determines the sorting for the notification across app notifications. The expected range is between 0.0f and 1.0f.
+@property (nonatomic, assign) double relevanceScore NS_AVAILABLE_IOS(15.0);
+// iOS16以上的新增属性
+@property (nonatomic, copy, nullable) NSString * filterCriteria NS_AVAILABLE_IOS(16.0); // default nil
+
+@end
+
+
+/*!
+ * 推送触发方式实体类
+ * 注:dateComponents、timeInterval、region在iOS10以上可选择其中一个参数传入有效值,如果同时传入值会根据优先级I、II、III使其中一种触发方式生效,fireDate为iOS10以下根据时间触发时须传入的参数
+ */
+@interface JPushNotificationTrigger : NSObject
+
+@property (nonatomic, assign) BOOL repeat; // 设置是否重复,默认为NO
+@property (nonatomic, copy) NSDate *fireDate NS_DEPRECATED_IOS(2_0, 10_0); // 用来设置触发推送的时间,iOS10以上无效
+@property (nonatomic, copy) CLRegion *region NS_AVAILABLE_IOS(8_0); // 用来设置触发推送的位置,iOS8以上有效,iOS10以上优先级为I,应用需要有允许使用定位的授权
+@property (nonatomic, copy) NSDateComponents *dateComponents NS_AVAILABLE_IOS(10_0); // 用来设置触发推送的日期时间,iOS10以上有效,优先级为II
+@property (nonatomic, assign) NSTimeInterval timeInterval NS_AVAILABLE_IOS(10_0); // 用来设置触发推送的时间,iOS10以上有效,优先级为III
+
+@end
+
+/*!
+ * 注册或更新推送实体类
+ */
+@interface JPushNotificationRequest : NSObject
+
+@property (nonatomic, copy) NSString *requestIdentifier; // 推送请求标识
+@property (nonatomic, copy) JPushNotificationContent *content; // 设置推送的具体内容
+@property (nonatomic, copy) JPushNotificationTrigger *trigger; // 设置推送的触发方式
+@property (nonatomic, copy, nullable) void (^completionHandler)(id result); // 注册或更新推送成功回调,iOS10以上成功则result为UNNotificationRequest对象,失败则result为nil;iOS10以下成功result为UILocalNotification对象,失败则result为nil
+
+@end
+
+
+/*!
+ * 应用内消息内容实体
+ */
+@interface JPushInAppMessage : NSObject
+
+@property (nonatomic, copy) NSString *mesageId; // 消息id
+@property (nonatomic, copy) NSString *title; // 标题
+@property (nonatomic, copy) NSString *content; // 内容
+@property (nonatomic, strong) NSArray *target; // 目标页面
+@property (nonatomic, copy) NSString *clickAction; // 跳转地址
+@property (nonatomic, strong) NSDictionary *extras; // 附加字段
+
+@end
+
+@interface JPushCollectControl : NSObject
+
+/* ssid SSID信息。设置为NO,不采集SSID信息。默认为YES。 */
+@property (nonatomic, assign) BOOL ssid;
+/* bssid BSSID信息。设置为NO,不采集BSSID信息。默认为YES。 */
+@property (nonatomic, assign) BOOL bssid;
+/* cell 基站信息。设置为NO,不采集基站信息。默认为YES。*/
+@property (nonatomic, assign) BOOL cell;
+/* gps 经纬度信息。设置为NO,不采集经纬度信息。默认为YES。 */
+@property (nonatomic, assign) BOOL gps;
+
+@end
+
+/*!
+ * JPush 核心头文件
+ */
+@interface JPUSHService : NSObject
+
+
+///----------------------------------------------------
+/// @name Setup 启动相关
+///----------------------------------------------------
+
+
+/*!
+ * @abstract 启动SDK
+ *
+ * @param launchingOption 启动参数.
+ * @param appKey 一个JPush 应用必须的,唯一的标识. 请参考 JPush 相关说明文档来获取这个标识.
+ * @param channel 发布渠道. 可选.
+ * @param isProduction 是否生产环境. 如果为开发状态,设置为 NO; 如果为生产状态,应改为 YES.
+ * App 证书环境取决于profile provision的配置,此处建议与证书环境保持一致.
+ *
+ * @discussion 提供SDK启动必须的参数, 来启动 SDK.
+ * 此接口必须在 App 启动时调用, 否则 JPush SDK 将无法正常工作.
+ */
++ (void)setupWithOption:(nullable NSDictionary *)launchingOption
+ appKey:(NSString *)appKey
+ channel:(nullable NSString *)channel
+ apsForProduction:(BOOL)isProduction;
+
+/*!
+ * @abstract 启动SDK
+ *
+ * @param launchingOption 启动参数.
+ * @param appKey 一个JPush 应用必须的,唯一的标识. 请参考 JPush 相关说明文档来获取这个标识.
+ * @param channel 发布渠道. 可选.
+ * @param isProduction 是否生产环境. 如果为开发状态,设置为 NO; 如果为生产状态,应改为 YES.
+ * App 证书环境取决于profile provision的配置,此处建议与证书环境保持一致.
+ * @param advertisingId 广告标识符(IDFA) 如果不需要使用IDFA,传nil.
+ *
+ * @discussion 提供SDK启动必须的参数, 来启动 SDK.
+ * 此接口必须在 App 启动时调用, 否则 JPush SDK 将无法正常工作.
+ */
++ (void)setupWithOption:(nullable NSDictionary *)launchingOption
+ appKey:(NSString *)appKey
+ channel:(nullable NSString *)channel
+ apsForProduction:(BOOL)isProduction
+ advertisingIdentifier:(nullable NSString *)advertisingId;
+
+
+///----------------------------------------------------
+/// @name APNs about 通知相关
+///----------------------------------------------------
+
+/*!
+ * @abstract 注册要处理的远程通知类型
+ *
+ * @param types 通知类型
+ * @param categories 类别组
+ *
+ */
++ (void)registerForRemoteNotificationTypes:(NSUInteger)types
+ categories:(nullable NSSet *)categories;
+/*!
+ * @abstract 新版本的注册方法(兼容iOS10)
+ *
+ * @param config 注册通知配置
+ * @param delegate 代理
+ *
+ */
++ (void)registerForRemoteNotificationConfig:(JPUSHRegisterEntity *)config delegate:(nullable id)delegate;
+
+
++ (void)registerDeviceToken:(NSData *)deviceToken;
+
+/*!
+ * @abstract 上报liveactivity的启动token
+ *
+ * @param activityAttributes 某liveActivity定义的属性类型
+ * @param pushToStartToken 对应该liveactivity的pushToStartToken,如有更新,请及时调用该方法更新pushToStartToken
+ * @param completion 响应回调
+ * @param seq 请求序列号
+ */
++ (void)registerLiveActivity:(NSString *)activityAttributes
+ pushToStartToken:(nullable NSData *)pushToStartToken
+ completion:(nullable JPUSHLiveActivityTokenCompletion)completion
+ seq:(NSInteger)seq;
+
+/*!
+ * @abstract 注册liveActivity并上报其pushToken
+ * 在pushToken有变化的时候同步调用该接口。
+ * 在liveActivity结束的时候,请同步调用该接口,pushToken传nil
+ *
+ * @param liveActivityId 标识某一个liveActivity
+ * @param pushToken 对应该liveActivity的pushToken,如有更新,请及时调用该方法更新pushToken
+ * @param completion 响应回调
+ * @param seq 请求序列号
+ */
++ (void)registerLiveActivity:(NSString *)liveActivityId
+ pushToken:(nullable NSData *)pushToken
+ completion:(nullable JPUSHLiveActivityTokenCompletion)completion
+ seq:(NSInteger)seq;
+
+/*!
+ * @abstract 处理收到的 APNs 消息
+ */
++ (void)handleRemoteNotification:(NSDictionary *)remoteInfo;
+
+/*!
+ * @abstract 向极光服务器提交Token
+ *
+ * @param voipToken 推送使用的Voip Token
+ */
++ (void)registerVoipToken:(NSData *)voipToken;
+
+
+/*!
+ * @abstract 处理收到的 Voip 消息
+ *
+ * @param remoteInfo 下发的 Voip 内容
+ */
++ (void)handleVoipNotification:(NSDictionary *)remoteInfo;
+
+
+/*!
+* @abstract 检测通知授权状态
+* @param completion 授权结果通过status值返回,详见JPAuthorizationStatus
+*/
++ (void)requestNotificationAuthorization:(nullable void (^)(JPAuthorizationStatus status))completion;
+
+/*!
+* @abstract 跳转至系统设置页面,iOS8及以上有效
+*/
++ (void)openSettingsForNotification:(nullable void (^)(BOOL success))completionHandler NS_AVAILABLE_IOS(8_0);
+
+/*!
+ * Tags操作接口
+ * 支持增加/覆盖/删除/清空/查询操作
+ * 详情请参考文档:https://docs.jiguang.cn/jpush/client/iOS/ios_api/)
+ */
+
+/**
+ 增加tags
+
+ @param tags 需要增加的tags集合
+ @param completion 响应回调
+ @param seq 请求序列号
+ */
++ (void)addTags:(NSSet *)tags
+ completion:(nullable JPUSHTagsOperationCompletion)completion
+ seq:(NSInteger)seq;
+
+/**
+ 覆盖tags
+ 调用该接口会覆盖用户所有的tags
+
+ @param tags 需要设置的tags集合
+ @param completion 响应回调
+ @param seq 请求序列号
+ */
++ (void)setTags:(NSSet *)tags
+ completion:(nullable JPUSHTagsOperationCompletion)completion
+ seq:(NSInteger)seq;
+
+/**
+ 删除指定tags
+
+ @param tags 需要删除的tags集合
+ @param completion 响应回调
+ @param seq 请求序列号
+ */
++ (void)deleteTags:(NSSet *)tags
+ completion:(nullable JPUSHTagsOperationCompletion)completion
+ seq:(NSInteger)seq;
+
+/**
+ 清空所有tags
+ @param completion 响应回调
+ @param seq 请求序列号
+ */
++ (void)cleanTags:(nullable JPUSHTagsOperationCompletion)completion
+ seq:(NSInteger)seq;
+
+/**
+ 查询全部tags
+
+ @param completion 响应回调,请在回调中获取查询结果
+ @param seq 请求序列号
+ */
++ (void)getAllTags:(nullable JPUSHTagsOperationCompletion)completion
+ seq:(NSInteger)seq;
+
+/**
+ 验证tag是否绑定
+
+ @param completion 响应回调,回调中查看是否绑定
+ @param seq 请求序列号
+ */
++ (void)validTag:(NSString *)tag
+ completion:(nullable JPUSHTagValidOperationCompletion)completion
+ seq:(NSInteger)seq;
+
+/**
+ 设置Alias
+
+ @param alias 需要设置的alias
+ @param completion 响应回调
+ @param seq 请求序列号
+ */
++ (void)setAlias:(NSString *)alias
+ completion:(nullable JPUSHAliasOperationCompletion)completion
+ seq:(NSInteger)seq;
+
+/**
+ 删除alias
+
+ @param completion 响应回调
+ @param seq 请求序列号
+ */
++ (void)deleteAlias:(nullable JPUSHAliasOperationCompletion)completion
+ seq:(NSInteger)seq;
+
+/**
+ 查询当前alias
+
+ @param completion 响应回调
+ @param seq 请求序列号
+ */
++ (void)getAlias:(nullable JPUSHAliasOperationCompletion)completion
+ seq:(NSInteger)seq;
+
+
+/*!
+ * @abstract 过滤掉无效的 tags
+ *
+ * @discussion 如果 tags 数量超过限制数量, 则返回靠前的有效的 tags.
+ * 建议设置 tags 前用此接口校验. SDK 内部也会基于此接口来做过滤.
+ */
++ (NSSet *)filterValidTags:(NSSet *)tags;
+
+
+/*!
+ * Property操作接口
+ * 支持增加/删除/清空操作
+ * 详情请参考文档:https://docs.jiguang.cn/jpush/client/iOS/ios_api/)
+ */
+
+/**
+ 新增/更新用户属性
+
+ 如果某个用户属性之前已经存在了,则会更新;不存在,则会新增
+
+ @param properties 需要新增或者更新的的用户属性内容,类型为NSDictionary;
+ Key 为用户属性名称,类型必须是 NSString 类型;Value为用户属性值,只支持 NSString、NSNumber、NSDate类型,如果属性为BOOL类型,传值时请转成NSNumber类型
+ @param completion 响应回调
+ @param seq 请求序列号
+ */
++ (void)setProperties:(NSDictionary *)properties
+ completion:(nullable JPUSHPropertiesOperationCompletion)completion
+ seq:(NSInteger)seq;
+
+
+/**
+ 删除指定属性
+
+ @param keys 需要删除的属性名称集合
+ @param completion 响应回调
+ @param seq 请求序列号
+ */
++ (void)deleteProperties:(NSSet *)keys
+ completion:(nullable JPUSHPropertiesOperationCompletion)completion
+ seq:(NSInteger)seq;
+
+
+/**
+ 清空所有属性
+ @param completion 响应回调
+ @param seq 请求序列号
+ */
++ (void)cleanProperties:(nullable JPUSHPropertiesOperationCompletion)completion
+ seq:(NSInteger)seq;
+
+
+/*!
+ * 应用内消息接口
+ * 使用应用内消息需要配置以下两个接口。请在进入页面和离开页面的时候相应地配置。以下两个接口请配套调用。
+ */
+
+/**
+ 进入页面
+
+ 请与 + (void)pageLeave:(NSString *)pageName; 方法配套使用
+
+ @param pageName 页面名
+ @discussion 使用应用内消息功能,需要配置pageEnterTo:和pageLeave:函数。
+ */
++ (void)pageEnterTo:(NSString *)pageName;
+
+
+/**
+ 离开页面
+
+ 请与 + (void)pageEnterTo:(NSString *)pageName;方法配套使用
+
+ @param pageName 页面名
+ @discussion 使用应用内消息功能,需要配置pageEnterTo:和pageLeave:函数。
+ */
++ (void)pageLeave:(NSString *)pageName;
+
+
+/*!
+* @abstract 设置应用内消息的代理
+*
+* @discussion 遵守JPUSHInAppMessageDelegate的代理对象
+*
+*/
++ (void)setInAppMessageDelegate:(id)inAppMessageDelegate;
+
+
+///----------------------------------------------------
+/// @name Stats 统计功能
+///----------------------------------------------------
+
+/*!
+ * @abstract 开始记录页面停留
+ *
+ * @param pageName 页面名称
+ * @discussion JCore 1.1.8 版本后,如需统计页面流,请使用 JAnalytics
+ */
++ (void)startLogPageView:(NSString *)pageName __attribute__((deprecated("JCore 1.1.8 版本已过期")));
+
+/*!
+ * @abstract 停止记录页面停留
+ *
+ * @param pageName 页面
+ * @discussion JCore 1.1.8 版本后,如需统计页面流,请使用 JAnalytics
+ */
++ (void)stopLogPageView:(NSString *)pageName __attribute__((deprecated("JCore 1.1.8 版本已过期")));
+
+/*!
+ * @abstract 直接上报在页面的停留时间
+ *
+ * @param pageName 页面
+ * @param seconds 停留的秒数
+ * @discussion JCore 1.1.8 版本后,如需统计页面流,请使用 JAnalytics
+ */
++ (void)beginLogPageView:(NSString *)pageName duration:(int)seconds __attribute__((deprecated("JCore 1.1.8 版本已过期")));
+
+/*!
+ * @abstract 开启Crash日志收集
+ *
+ * @discussion 默认是关闭状态.
+ */
++ (void)crashLogON;
+
+/*!
+ * @abstract 地理位置上报
+ *
+ * @param latitude 纬度.
+ * @param longitude 经度.
+ *
+ */
++ (void)setLatitude:(double)latitude longitude:(double)longitude;
+
+/*!
+ * @abstract 地理位置上报
+ *
+ * @param location 直接传递 CLLocation * 型的地理信息
+ *
+ * @discussion 需要链接 CoreLocation.framework 并且 #import
+ */
++ (void)setLocation:(CLLocation *)location;
+
+/**
+ 设置地理围栏的最大个数
+ 默认值为 10 ,iOS系统默认地理围栏最大个数为20
+ @param count 个数 count
+ */
++ (void)setGeofeneceMaxCount:(NSInteger)count;
+
+/**
+ 设置地理围栏'圈内'类型的检测周期
+ 默认15分钟检测一次
+ */
++ (void)setGeofenecePeriodForInside:(NSInteger)seconds;
+
+/**
+ 注册地理围栏的代理
+
+ @param delegate 代理
+ @param launchOptions app启动完成是收到的字段参数
+ */
++ (void)registerLbsGeofenceDelegate:(id)delegate withLaunchOptions:(nullable NSDictionary *)launchOptions;
+
+/**
+ 删除地理围栏
+
+ @param geofenceId 地理围栏id
+ */
++ (void)removeGeofenceWithIdentifier:(NSString *)geofenceId;
+
+///----------------------------------------------------
+/// @name Local Notification 本地通知
+///----------------------------------------------------
+/*!
+ * @abstract 注册或更新推送 (支持iOS10,并兼容iOS10以下版本)
+ *
+ * JPush 2.1.9新接口
+ * @param request JPushNotificationRequest类型,设置推送的属性,设置已有推送的request.requestIdentifier即更新已有的推送,否则为注册新推送,更新推送仅仅在iOS10以上有效,结果通过request.completionHandler返回
+ * @discussion 旧的注册本地推送接口被废弃,使用此接口可以替换
+ *
+ */
++ (void)addNotification:(JPushNotificationRequest *)request;
+
+/*!
+ * @abstract 移除推送 (支持iOS10,并兼容iOS10以下版本)
+ *
+ * JPush 2.1.9新接口
+ * @param identifier JPushNotificationIdentifier类型,iOS10以上identifier设置为nil,则移除所有在通知中心显示推送和待推送请求,也可以通过设置identifier.delivered和identifier.identifiers来移除相应在通知中心显示推送或待推送请求,identifier.identifiers如果设置为nil或空数组则移除相应标志下所有在通知中心显示推送或待推送请求;iOS10以下identifier设置为nil,则移除所有推送,identifier.delivered属性无效,另外可以通过identifier.notificationObj传入特定推送对象来移除此推送。
+ * @discussion 旧的所有删除推送接口被废弃,使用此接口可以替换
+ *
+ */
++ (void)removeNotification:(nullable JPushNotificationIdentifier *)identifier;
+
+/*!
+ * @abstract 查找推送 (支持iOS10,并兼容iOS10以下版本)
+ *
+ * JPush 2.1.9新接口
+ * @param identifier JPushNotificationIdentifier类型,iOS10以上可以通过设置identifier.delivered和identifier.identifiers来查找相应在通知中心显示推送或待推送请求,identifier.identifiers如果设置为nil或空数组则返回相应标志下所有在通知中心显示推送或待推送请求;iOS10以下identifier.delivered属性无效,identifier.identifiers如果设置nil或空数组则返回所有未触发的推送。须要设置identifier.findCompletionHandler回调才能得到查找结果,通过(NSArray *results)返回相应对象数组。
+ * @discussion 旧的查找推送接口被废弃,使用此接口可以替换
+ *
+ */
++ (void)findNotification:(JPushNotificationIdentifier *)identifier;
+
+/*!
+ * @abstract 本地推送,最多支持64个
+ *
+ * @param fireDate 本地推送触发的时间
+ * @param alertBody 本地推送需要显示的内容
+ * @param badge 角标的数字。如果不需要改变角标传-1
+ * @param alertAction 弹框的按钮显示的内容(IOS 8默认为"打开", 其他默认为"启动")
+ * @param notificationKey 本地推送标示符
+ * @param userInfo 自定义参数,可以用来标识推送和增加附加信息
+ * @param soundName 自定义通知声音,设置为nil为默认声音
+ *
+ * @discussion 最多支持 64 个定义,此方法被[addNotification:]方法取代
+ */
++ (UILocalNotification *)setLocalNotification:(NSDate *)fireDate
+ alertBody:(NSString *)alertBody
+ badge:(int)badge
+ alertAction:(NSString *)alertAction
+ identifierKey:(NSString *)notificationKey
+ userInfo:(NSDictionary *)userInfo
+ soundName:(NSString *)soundName __attribute__((deprecated("JPush 2.1.9 版本已过期")));
+
+/*!
+ * @abstract 本地推送 (支持 iOS8 新参数)
+ *
+ * IOS8新参数
+ * @param region 自定义参数
+ * @param regionTriggersOnce 自定义参数
+ * @param category 自定义参数
+ * @discussion 此方法被[addNotification:]方法取代
+ */
++ (UILocalNotification *)setLocalNotification:(NSDate *)fireDate
+ alertBody:(NSString *)alertBody
+ badge:(int)badge
+ alertAction:(NSString *)alertAction
+ identifierKey:(NSString *)notificationKey
+ userInfo:(NSDictionary *)userInfo
+ soundName:(NSString *)soundName
+ region:(CLRegion *)region
+ regionTriggersOnce:(BOOL)regionTriggersOnce
+ category:(NSString *)category NS_AVAILABLE_IOS(8_0) __attribute__((deprecated("JPush 2.1.9 版本已过期")));
+
+/*!
+ * @abstract 前台展示本地推送
+ *
+ * @param notification 本地推送对象
+ * @param notificationKey 需要前台显示的本地推送通知的标示符
+ *
+ * @discussion 默认App在前台运行时不会进行弹窗,在程序接收通知调用此接口可实现指定的推送弹窗。--iOS10以下还可继续使用,iOS10以上在[UNUserNotificationCenterDelegate willPresentNotification:withCompletionHandler:]方法中调用completionHandler(UNNotificationPresentationOptionSound | UNNotificationPresentationOptionAlert);即可
+ */
++ (void)showLocalNotificationAtFront:(UILocalNotification *)notification
+ identifierKey:(NSString *)notificationKey __attribute__((deprecated("JPush 2.1.9 版本已过期")));
+/*!
+ * @abstract 删除本地推送定义
+ *
+ * @param notificationKey 本地推送标示符
+ * @discussion 此方法被[removeNotification:]方法取代
+ */
++ (void)deleteLocalNotificationWithIdentifierKey:(NSString *)notificationKey __attribute__((deprecated("JPush 2.1.9 版本已过期")));
+
+/*!
+ * @abstract 删除本地推送定义
+ * @discussion 此方法被[removeNotification:]方法取代
+ */
++ (void)deleteLocalNotification:(UILocalNotification *)localNotification __attribute__((deprecated("JPush 2.1.9 版本已过期")));
+
+/*!
+ * @abstract 获取指定通知
+ *
+ * @param notificationKey 本地推送标示符
+ * @return 本地推送对象数组, [array count]为0时表示没找到
+ * @discussion 此方法被[findNotification:]方法取代
+ */
++ (NSArray *)findLocalNotificationWithIdentifier:(NSString *)notificationKey __attribute__((deprecated("JPush 2.1.9 版本已过期")));
+
+/*!
+ * @abstract 清除所有本地推送对象
+ * @discussion 此方法被[removeNotification:]方法取代
+ */
++ (void)clearAllLocalNotifications __attribute__((deprecated("JPush 2.1.9 版本已过期")));
+
+
+///----------------------------------------------------
+/// @name Server badge 服务器端 badge 功能
+///----------------------------------------------------
+
+/*!
+ * @abstract 设置角标(到服务器)
+ *
+ * @param value 新的值. 会覆盖服务器上保存的值(这个用户)
+ *
+ * @discussion 本接口不会改变应用本地的角标值.
+ * 本地仍须调用 UIApplication:setApplicationIconBadgeNumber 函数来设置脚标.
+ *
+ * 本接口用于配合 JPush 提供的服务器端角标功能.
+ * 该功能解决的问题是, 服务器端推送 APNs 时, 并不知道客户端原来已经存在的角标是多少, 指定一个固定的数字不太合理.
+ *
+ * JPush 服务器端脚标功能提供:
+ *
+ * - 通过本 API 把当前客户端(当前这个用户的) 的实际 badge 设置到服务器端保存起来;
+ * - 调用服务器端 API 发 APNs 时(通常这个调用是批量针对大量用户),
+ * 使用 "+1" 的语义, 来表达需要基于目标用户实际的 badge 值(保存的) +1 来下发通知时带上新的 badge 值;
+ */
++ (BOOL)setBadge:(NSInteger)value;
+
+/*!
+ * @abstract 重置脚标(为0)
+ *
+ * @discussion 相当于 [setBadge:0] 的效果.
+ * 参考 [JPUSHService setBadge:] 说明来理解其作用.
+ */
++ (void)resetBadge;
+
+///----------------------------------------------------
+/// @name Other Feature 其他功能
+///----------------------------------------------------
+
+/*!
+ * @abstract 设置手机号码(到服务器)
+ *
+ * @param mobileNumber 手机号码. 会与用户信息一一对应。可为空,为空则清除号码
+ * @param completion 响应回调。成功则error为空,失败则error带有错误码及错误信息
+ *
+ * @discussion 设置手机号码后,可实现“推送不到短信到”的通知方式,提高推送达到率。结果信息通过completion异步返回,也可将completion设置为nil不处理结果信息。
+ *
+ */
++ (void)setMobileNumber:(NSString *)mobileNumber completion:(nullable void (^)(NSError *error))completion;
+
+///----------------------------------------------------
+/// @name Logs and others 日志与其他
+///----------------------------------------------------
+
+/*!
+ * @abstract JPush标识此设备的 registrationID
+ *
+ * @discussion SDK注册成功后, 调用此接口获取到 registrationID 才能够获取到.
+ *
+ * JPush 支持根据 registrationID 来进行推送.
+ * 如果你需要此功能, 应该通过此接口获取到 registrationID 后, 上报到你自己的服务器端, 并保存下来.
+ * registrationIDCompletionHandler:是新增的获取registrationID的方法,需要在block中获取registrationID,resCode为返回码,模拟器调用此接口resCode返回1011,registrationID返回nil.
+ * 更多的理解请参考 JPush 的文档网站.
+ */
++ (NSString *)registrationID;
+
++ (void)registrationIDCompletionHandler:(void(^)(int resCode,NSString * _Nullable registrationID))completionHandler;
+
+/*!
+ * @abstract 打开日志级别到 Debug
+ *
+ * @discussion JMessage iOS 的日志系统参考 Android 设计了级别.
+ * 从低到高是: Verbose, Debug, Info, Warning, Error.
+ * 对日志级别的进一步理解, 请参考 Android 相关的说明.
+ *
+ * SDK 默认开启的日志级别为: Info. 只显示必要的信息, 不打印调试日志.
+ *
+ * 请在SDK启动后调用本接口,调用本接口可打开日志级别为: Debug, 打印调试日志.
+ */
++ (void)setDebugMode;
+
+/*!
+ * @abstract 关闭日志
+ *
+ * @discussion 关于日志级别的说明, 参考 [JPUSHService setDebugMode]
+ *
+ * 虽说是关闭日志, 但还是会打印 Warning, Error 日志. 这二种日志级别, 在程序运行正常时, 不应有打印输出.
+ *
+ * 建议在发布的版本里, 调用此接口, 关闭掉日志打印.
+ */
++ (void)setLogOFF;
+
+/*!
+ 数据采集控制
+
+ @param control 数据采集配置。
+ */
++ (void)setCollectControl:(JPushCollectControl *)control;
+
+/*!
+ * @abstract 设置心跳时间间隔
+ *
+ * @param interval 心跳时间间隔 单位为秒, 取值范围为[30,290]
+ *
+ * @discussion 请在初始化函数之前调用该接口。
+ *
+ */
++ (void)setHeartBeatTimeInterval:(NSInteger)interval;
+
+/*!
+ * @abstract 设置SDK地理位置权限开关
+ *
+ * @discussion 关闭地理位置之后,SDK地理围栏的相关功能将受到影响,默认是开启。
+ *
+ */
++ (void)setLocationEanable:(BOOL)isEanble;
+
+/*!
+ * @abstract 设置PUSH开关
+ *
+ * @discussion 关闭PUSH之后,将接收不到极光通知推送、自定义消息推送、liveActivity消息推送,默认是开启。
+ *
+ */
++ (void)setPushEnable:(BOOL)isEnable completion:(nullable void (^)(NSInteger iResCode))completion;
+
+/*!
+ * @abstract 设置进入后台是否允许长连接
+ *
+ * @param isEnable YES:允许,NO:不允许,默认是NO,进入后台会关闭长连接,回到前台会重新接入。
+ *
+ * @discussion 请在初始化函数之前调用
+ *
+ */
++ (void)setBackgroundEnable:(BOOL)isEnable;
+
+/*!
+ * @abstract 设置用户分群推送功能开关
+ *
+ * @param isEnable YES:开启,NO:关闭,默认是开启。
+ *
+ */
++ (void)setSmartPushEnable:(BOOL)isEnable;
+
+/*!
+ * @abstract 设置应用数据洞察扩展功能开关
+ *
+ * @param isEnable YES:开启,NO:关闭,默认是开启。
+ *
+ */
++ (void)setDataInsightsEnable:(BOOL)isEnable;
+
+
+/*!
+* @abstract 设置应用内提醒消息的代理
+*
+* @discussion 遵守JPushNotiInMessageDelegate的代理对象
+*
+*/
++ (void)setNotiInMessageDelegate:(id)notiInMessageDelegate;
+
+
+
+///----------------------------------------------------
+///********************下列方法已过期********************
+///**************请使用新版tag/alias操作接口**************
+///----------------------------------------------------
+/// @name Tag alias setting 设置别名与标签
+///----------------------------------------------------
+
+/*!
+ * 下面的接口是可选的
+ * 设置标签和(或)别名(若参数为nil,则忽略;若是空对象,则清空;详情请参考文档:https://docs.jiguang.cn/jpush/client/iOS/ios_api/)
+ * setTags:alias:fetchCompletionHandle:是新的设置标签别名的方法,不再需要显示声明回调函数,只需要在block里面处理设置结果即可.
+ * WARN: 使用block时需要注意循环引用问题
+ */
++ (void) setTags:(NSSet *)tags
+ alias:(NSString *)alias
+callbackSelector:(SEL)cbSelector
+ target:(id)theTarget __attribute__((deprecated("JPush 2.1.1 版本已过期")));
++ (void) setTags:(NSSet *)tags
+ alias:(NSString *)alias
+callbackSelector:(SEL)cbSelector
+ object:(id)theTarget __attribute__((deprecated("JPush 3.0.6 版本已过期")));
++ (void) setTags:(NSSet *)tags
+callbackSelector:(SEL)cbSelector
+ object:(id)theTarget __attribute__((deprecated("JPush 3.0.6 版本已过期")));
++ (void)setTags:(NSSet *)tags
+ alias:(NSString *)alias
+fetchCompletionHandle:(void (^)(int iResCode, NSSet *iTags, NSString *iAlias))completionHandler __attribute__((deprecated("JPush 3.0.6 版本已过期")));
++ (void) setTags:(NSSet *)tags
+aliasInbackground:(NSString *)alias __attribute__((deprecated("JPush 3.0.6 版本已过期")));
++ (void)setAlias:(NSString *)alias
+callbackSelector:(SEL)cbSelector
+ object:(id)theTarget __attribute__((deprecated("JPush 3.0.6 版本已过期")));
+
+@end
+
+@class UNUserNotificationCenter;
+@class UNNotificationResponse;
+
+@protocol JPUSHRegisterDelegate
+
+/*
+ * @brief handle UserNotifications.framework [willPresentNotification:withCompletionHandler:]
+ * @param center [UNUserNotificationCenter currentNotificationCenter] 新特性用户通知中心
+ * @param notification 前台得到的的通知对象
+ * @param completionHandler 该callback中的options 请使用UNNotificationPresentationOptions
+ */
+- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger options))completionHandler;
+/*
+ * @brief handle UserNotifications.framework [didReceiveNotificationResponse:withCompletionHandler:]
+ * @param center [UNUserNotificationCenter currentNotificationCenter] 新特性用户通知中心
+ * @param response 通知响应对象
+ * @param completionHandler
+ */
+- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler;
+
+/*
+ * @brief handle UserNotifications.framework [openSettingsForNotification:]
+ * @param center [UNUserNotificationCenter currentNotificationCenter] 新特性用户通知中心
+ * @param notification 当前管理的通知对象
+ */
+- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center openSettingsForNotification:(UNNotification *)notification NS_AVAILABLE_IOS(12.0);
+
+/**
+ * 监测通知授权状态返回的结果
+ * @param status 授权通知状态,详见JPAuthorizationStatus
+ * @param info 更多信息,预留参数
+ */
+- (void)jpushNotificationAuthorization:(JPAuthorizationStatus)status withInfo:(nullable NSDictionary *)info;
+
+@end
+
+@protocol JPUSHGeofenceDelegate
+/**
+ 触发地理围栏
+ @param geofence 地理围栏触发时返回的信息
+ @param error 错误信息
+ */
+- (void)jpushGeofenceRegion:(nullable NSDictionary *)geofence
+ error:(nullable NSError *)error;
+
+/**
+ 拉取地理围栏列表的回调
+
+ @param geofenceList 地理围栏列表
+ */
+- (void)jpushCallbackGeofenceReceived:(nullable NSArray *)geofenceList;
+
+/**
+ 进入地理围栏区域
+
+ @param geofenceId 地理围栏id
+ @param userInfo 地理围栏触发时返回的信息
+ @param error 错误信息
+ */
+- (void)jpushGeofenceIdentifer:(NSString *)geofenceId didEnterRegion:(NSDictionary *_Nullable)userInfo error:(NSError *_Nullable)error __attribute__((deprecated("JPush 3.6.0 版本已过期")));
+
+/**
+ 离开地理围栏区域
+
+ @param geofenceId 地理围栏id
+ @param userInfo 地理围栏触发时返回的信息
+ @param error 错误信息
+ */
+- (void)jpushGeofenceIdentifer:(NSString *)geofenceId didExitRegion:(NSDictionary *_Nullable)userInfo error:(NSError *_Nullable)error __attribute__((deprecated("JPush 3.6.0 版本已过期")));
+
+@end
+
+
+@protocol JPUSHNotiInMessageDelegate
+
+/**
+ 应用内提醒消息展示的回调
+
+ @param content 应用内提醒消息的内容
+
+ */
+- (void)jPushNotiInMessageDidShowWithContent:(NSDictionary *)content;
+
+/**
+ 应用内提醒消息点击的回调
+
+ @param content 应用内提醒消息的内容
+
+ */
+- (void)jPushNotiInMessageDidClickWithContent:(NSDictionary *)content;
+
+@end
+
+
+@protocol JPUSHInAppMessageDelegate
+
+/**
+ 应用内消息展示的回调
+
+ @param inAppMessage 应用内消息的内容
+
+ */
+- (void)jPushInAppMessageDidShow:(JPushInAppMessage *)inAppMessage;
+
+/**
+ 应用内消息点击的回调
+
+ @param inAppMessage 应用内消息的内容
+
+ */
+- (void)jPushInAppMessageDidClick:(JPushInAppMessage *)inAppMessage;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/RCTJPushModule/jpush-ios-5.9.0.xcframework/ios-arm64_x86_64-simulator/PrivacyInfo.xcprivacy b/ios/RCTJPushModule/jpush-ios-5.9.0.xcframework/ios-arm64_x86_64-simulator/PrivacyInfo.xcprivacy
new file mode 100644
index 00000000..e2920ec8
--- /dev/null
+++ b/ios/RCTJPushModule/jpush-ios-5.9.0.xcframework/ios-arm64_x86_64-simulator/PrivacyInfo.xcprivacy
@@ -0,0 +1,23 @@
+
+
+
+
+ NSPrivacyTrackingDomains
+
+ NSPrivacyCollectedDataTypes
+
+ NSPrivacyTracking
+
+ NSPrivacyAccessedAPITypes
+
+
+ NSPrivacyAccessedAPITypeReasons
+
+ CA92.1
+
+ NSPrivacyAccessedAPIType
+ NSPrivacyAccessedAPICategoryUserDefaults
+
+
+
+
diff --git a/ios/RCTJPushModule/jpush-ios-5.9.0.xcframework/ios-arm64_x86_64-simulator/libJPush.a b/ios/RCTJPushModule/jpush-ios-5.9.0.xcframework/ios-arm64_x86_64-simulator/libJPush.a
new file mode 100644
index 00000000..11cfa426
Binary files /dev/null and b/ios/RCTJPushModule/jpush-ios-5.9.0.xcframework/ios-arm64_x86_64-simulator/libJPush.a differ
diff --git a/ios/RCTJPushModule/libjpush-ios-3.7.4.a b/ios/RCTJPushModule/libjpush-ios-3.7.4.a
deleted file mode 100755
index d6b535af..00000000
Binary files a/ios/RCTJPushModule/libjpush-ios-3.7.4.a and /dev/null differ
diff --git a/package.json b/package.json
index bddb96ad..a3612adb 100644
--- a/package.json
+++ b/package.json
@@ -6,7 +6,7 @@
"types": "index.d.ts",
"license": "ISC",
"author": "wicked.tc130",
- "version": "2.9.2",
+ "version": "3.2.1",
"repository": {
"type": "git",
"url": "https://github.com/jpush/jpush-react-native"
diff --git a/rm.txt b/rm.txt
new file mode 100644
index 00000000..4c8951f9
--- /dev/null
+++ b/rm.txt
@@ -0,0 +1 @@
+npm publish
\ No newline at end of file