expo-invoke 2.6.14 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/src/main/java/expo/modules/invoke/ExpoInvokeModule.kt +35 -0
- package/android/src/main/java/expo/modules/invoke/InvokeSliceProvider.kt +9 -0
- package/build/plugin/codegen/generateSwiftIntents.js +22 -0
- package/build/plugin/codegen/generateSwiftIntents.js.map +1 -1
- package/build/plugin/codegen/generateSwiftLiveActivities.d.ts +17 -0
- package/build/plugin/codegen/generateSwiftLiveActivities.js +165 -0
- package/build/plugin/codegen/generateSwiftLiveActivities.js.map +1 -0
- package/build/plugin/codegen/generateSwiftWidget.d.ts +5 -0
- package/build/plugin/codegen/generateSwiftWidget.js.map +1 -1
- package/build/plugin/ios/widgets/withAppGroupEntitlements.d.ts +6 -0
- package/build/plugin/ios/widgets/withAppGroupEntitlements.js +27 -0
- package/build/plugin/ios/widgets/withAppGroupEntitlements.js.map +1 -0
- package/build/plugin/ios/widgets/withAppInfoPlist.d.ts +7 -0
- package/build/plugin/ios/widgets/withAppInfoPlist.js +12 -0
- package/build/plugin/ios/widgets/withAppInfoPlist.js.map +1 -0
- package/build/plugin/ios/widgets/withEasConfig.d.ts +8 -0
- package/build/plugin/ios/widgets/withEasConfig.js +52 -0
- package/build/plugin/ios/widgets/withEasConfig.js.map +1 -0
- package/build/plugin/ios/widgets/withIosWarning.d.ts +7 -0
- package/build/plugin/ios/widgets/withIosWarning.js +10 -0
- package/build/plugin/ios/widgets/withIosWarning.js.map +1 -0
- package/build/plugin/ios/widgets/withIosWidgets.d.ts +11 -0
- package/build/plugin/ios/widgets/withIosWidgets.js +83 -0
- package/build/plugin/ios/widgets/withIosWidgets.js.map +1 -0
- package/build/plugin/ios/widgets/withPodsLinking.d.ts +6 -0
- package/build/plugin/ios/widgets/withPodsLinking.js +102 -0
- package/build/plugin/ios/widgets/withPodsLinking.js.map +1 -0
- package/build/plugin/ios/widgets/withPushNotifications.d.ts +6 -0
- package/build/plugin/ios/widgets/withPushNotifications.js +12 -0
- package/build/plugin/ios/widgets/withPushNotifications.js.map +1 -0
- package/build/plugin/ios/widgets/withWidgetSourceFiles.d.ts +10 -0
- package/build/plugin/ios/widgets/withWidgetSourceFiles.js +379 -0
- package/build/plugin/ios/widgets/withWidgetSourceFiles.js.map +1 -0
- package/build/plugin/ios/widgets/xcode/addBuildPhases.d.ts +12 -0
- package/build/plugin/ios/widgets/xcode/addBuildPhases.js +41 -0
- package/build/plugin/ios/widgets/xcode/addBuildPhases.js.map +1 -0
- package/build/plugin/ios/widgets/xcode/addPbxGroup.d.ts +5 -0
- package/build/plugin/ios/widgets/xcode/addPbxGroup.js +20 -0
- package/build/plugin/ios/widgets/xcode/addPbxGroup.js.map +1 -0
- package/build/plugin/ios/widgets/xcode/addProductFile.d.ts +7 -0
- package/build/plugin/ios/widgets/xcode/addProductFile.js +41 -0
- package/build/plugin/ios/widgets/xcode/addProductFile.js.map +1 -0
- package/build/plugin/ios/widgets/xcode/addTargetDependency.d.ts +4 -0
- package/build/plugin/ios/widgets/xcode/addTargetDependency.js +17 -0
- package/build/plugin/ios/widgets/xcode/addTargetDependency.js.map +1 -0
- package/build/plugin/ios/widgets/xcode/addToPbxNativeTargetSection.d.ts +14 -0
- package/build/plugin/ios/widgets/xcode/addToPbxNativeTargetSection.js +29 -0
- package/build/plugin/ios/widgets/xcode/addToPbxNativeTargetSection.js.map +1 -0
- package/build/plugin/ios/widgets/xcode/addToPbxProjectSection.d.ts +4 -0
- package/build/plugin/ios/widgets/xcode/addToPbxProjectSection.js +20 -0
- package/build/plugin/ios/widgets/xcode/addToPbxProjectSection.js.map +1 -0
- package/build/plugin/ios/widgets/xcode/addXCConfigurationList.d.ts +11 -0
- package/build/plugin/ios/widgets/xcode/addXCConfigurationList.js +37 -0
- package/build/plugin/ios/widgets/xcode/addXCConfigurationList.js.map +1 -0
- package/build/plugin/ios/widgets/xcode/withTargetXcodeProject.d.ts +10 -0
- package/build/plugin/ios/widgets/xcode/withTargetXcodeProject.js +86 -0
- package/build/plugin/ios/widgets/xcode/withTargetXcodeProject.js.map +1 -0
- package/build/plugin/ios/withIOSInvoke.d.ts +6 -15
- package/build/plugin/ios/withIOSInvoke.js +54 -25
- package/build/plugin/ios/withIOSInvoke.js.map +1 -1
- package/build/plugin/ios/withWidgetExtension.d.ts +5 -0
- package/build/plugin/ios/withWidgetExtension.js +36 -6
- package/build/plugin/ios/withWidgetExtension.js.map +1 -1
- package/build/plugin/src/withInvoke.d.ts +34 -23
- package/build/plugin/src/withInvoke.js +16 -27
- package/build/plugin/src/withInvoke.js.map +1 -1
- package/build/plugin/types/WidgetConfig.type.d.ts +54 -0
- package/build/plugin/types/WidgetConfig.type.js +3 -0
- package/build/plugin/types/WidgetConfig.type.js.map +1 -0
- package/build/plugin/types/WidgetFamily.type.d.ts +10 -0
- package/build/plugin/types/WidgetFamily.type.js +13 -0
- package/build/plugin/types/WidgetFamily.type.js.map +1 -0
- package/build/src/hooks/useLiveActivity.d.ts +20 -10
- package/build/src/hooks/useLiveActivity.d.ts.map +1 -1
- package/build/src/hooks/useLiveActivity.js +20 -10
- package/build/src/hooks/useLiveActivity.js.map +1 -1
- package/build/src/index.d.ts +2 -0
- package/build/src/index.d.ts.map +1 -1
- package/build/src/index.js +5 -0
- package/build/src/index.js.map +1 -1
- package/build/src/module.d.ts +4 -0
- package/build/src/module.d.ts.map +1 -1
- package/build/src/module.js +8 -0
- package/build/src/module.js.map +1 -1
- package/build/src/web/index.d.ts +10 -1
- package/build/src/web/index.d.ts.map +1 -1
- package/build/src/web/index.js +4 -0
- package/build/src/web/index.js.map +1 -1
- package/build/src/widgets/ExpoWidgets.d.ts +12 -0
- package/build/src/widgets/ExpoWidgets.d.ts.map +1 -0
- package/build/src/widgets/ExpoWidgets.ios.d.ts +12 -0
- package/build/src/widgets/ExpoWidgets.ios.d.ts.map +1 -0
- package/build/src/widgets/ExpoWidgets.ios.js +3 -0
- package/build/src/widgets/ExpoWidgets.ios.js.map +1 -0
- package/build/src/widgets/ExpoWidgets.js +42 -0
- package/build/src/widgets/ExpoWidgets.js.map +1 -0
- package/build/src/widgets/Widgets.d.ts +119 -0
- package/build/src/widgets/Widgets.d.ts.map +1 -0
- package/build/src/widgets/Widgets.js +158 -0
- package/build/src/widgets/Widgets.js.map +1 -0
- package/build/src/widgets/Widgets.types.d.ts +263 -0
- package/build/src/widgets/Widgets.types.d.ts.map +1 -0
- package/build/src/widgets/Widgets.types.js +2 -0
- package/build/src/widgets/Widgets.types.js.map +1 -0
- package/build/src/widgets/index.d.ts +3 -0
- package/build/src/widgets/index.d.ts.map +1 -0
- package/build/src/widgets/index.js +2 -0
- package/build/src/widgets/index.js.map +1 -0
- package/bundle/__tests__/decorator.test.ts +89 -0
- package/bundle/decorator.ts +61 -0
- package/bundle/expo-modules-core-stub.ts +1 -0
- package/bundle/expo-stub.ts +15 -0
- package/bundle/index.ts +69 -0
- package/bundle/jsx-runtime-stub.ts +71 -0
- package/bundle/react-native-stub.ts +3 -0
- package/bundle/react-stub.ts +13 -0
- package/expo-module.config.json +1 -1
- package/ios/LiveActivity/LiveActivityManager.swift +15 -14
- package/ios/Module/ExpoInvokeModule.swift +124 -0
- package/ios/Widget/WidgetManager.swift +25 -8
- package/ios/Widgets/LiveActivity.swift +81 -0
- package/ios/Widgets/LiveActivityFactory.swift +49 -0
- package/ios/Widgets/Widget/AppIntent.swift +130 -0
- package/ios/Widgets/Widget/Buttons.swift +62 -0
- package/ios/Widgets/Widget/DynamicView.swift +161 -0
- package/ios/Widgets/Widget/EntryView.swift +36 -0
- package/ios/Widgets/Widget/Fragment.swift +13 -0
- package/ios/Widgets/Widget/LiveActivityBanner.swift +19 -0
- package/ios/Widgets/Widget/RedBoxView.swift +83 -0
- package/ios/Widgets/Widget/TimelineEntry.swift +8 -0
- package/ios/Widgets/Widget/TimelineProvider.swift +45 -0
- package/ios/Widgets/Widget/Type.swift +6 -0
- package/ios/Widgets/Widget/Utils.swift +116 -0
- package/ios/Widgets/Widget/WidgetLiveActivity.swift +104 -0
- package/ios/Widgets/Widget/WidgetsJSRuntime.swift +148 -0
- package/ios/Widgets/WidgetObject.swift +31 -0
- package/ios/Widgets/WidgetsContext.swift +7 -0
- package/ios/Widgets/WidgetsEvents.swift +16 -0
- package/ios/Widgets/WidgetsExceptions.swift +25 -0
- package/ios/Widgets/WidgetsModule.swift +149 -0
- package/ios/Widgets/WidgetsRecords.swift +22 -0
- package/ios/Widgets/WidgetsStorage.swift +58 -0
- package/metro.widget.config.js +76 -0
- package/package.json +11 -1
- package/scripts/autolinking.rb +34 -0
- package/scripts/build-bundle.mjs +69 -0
- package/scripts/with-node.sh +44 -0
- package/scripts/xcode-build-bundle.sh +23 -0
- package/spm.config.json +40 -0
|
@@ -91,6 +91,41 @@ class ExpoInvokeModule : Module() {
|
|
|
91
91
|
// ── Focus mode — no-op on Android ────────────────────────────────────────
|
|
92
92
|
Function("getFocusMode") { null as String? }
|
|
93
93
|
|
|
94
|
+
// ── Widget reload — no-op (Android widgets update via AppWidgetProvider) ───
|
|
95
|
+
Function("reloadWidget") { _: String? -> Unit }
|
|
96
|
+
|
|
97
|
+
// ── Live Activity — no-op on Android (platform not supported) ─────────────
|
|
98
|
+
AsyncFunction("startLiveActivity") { _: String -> "" }
|
|
99
|
+
Function("updateLiveActivity") { _: String, _: String -> Unit }
|
|
100
|
+
Function("endLiveActivity") { _: String, _: String? -> Unit }
|
|
101
|
+
AsyncFunction("getLiveActivities") { -> "[]" }
|
|
102
|
+
|
|
103
|
+
// ── Focus filter result — no-op on Android ────────────────────────────────
|
|
104
|
+
Function("reportFocusFilterResult") { _: String, _: Boolean -> Unit }
|
|
105
|
+
|
|
106
|
+
// ── App Entities — no-op on Android ──────────────────────────────────────
|
|
107
|
+
Function("provideEntityResults") { _: String, _: String -> Unit }
|
|
108
|
+
|
|
109
|
+
// ── Background intent — no-op on Android (opens app instead) ─────────────
|
|
110
|
+
Function("registerBackgroundHandler") { _: String -> Unit }
|
|
111
|
+
Function("reportBackgroundResult") { _: String, _: String -> Unit }
|
|
112
|
+
|
|
113
|
+
// ── Push-to-Talk — no-op on Android ──────────────────────────────────────
|
|
114
|
+
AsyncFunction("startPTTSession") { _: String, _: String? -> Unit }
|
|
115
|
+
AsyncFunction("endPTTSession") { _: String -> Unit }
|
|
116
|
+
AsyncFunction("setTransmitting") { _: String, _: Boolean -> Unit }
|
|
117
|
+
AsyncFunction("getPTTState") { _: String -> "{\"isActive\":false,\"isTransmitting\":false}" }
|
|
118
|
+
|
|
119
|
+
// ── Android Slices — notify ContentResolver of fresh data ─────────────────
|
|
120
|
+
Function("notifySliceChange") { sliceId: String ->
|
|
121
|
+
val ctx = appContext.reactContext ?: return@Function Unit
|
|
122
|
+
InvokeSliceProvider.notifyChange(ctx, sliceId)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// ── Persistent analytics — managed in JS layer via expo-file-system ───────
|
|
126
|
+
AsyncFunction("getAnalyticsPersisted") { -> "{\"fired\":{},\"donated\":{},\"bySource\":{}}" }
|
|
127
|
+
AsyncFunction("clearAnalyticsPersisted") { -> Unit }
|
|
128
|
+
|
|
94
129
|
// ── Warm start ────────────────────────────────────────────────────────────
|
|
95
130
|
OnActivityEntersForeground {
|
|
96
131
|
val p = prefs ?: return@OnActivityEntersForeground
|
|
@@ -66,6 +66,15 @@ class InvokeSliceProvider : SliceProvider() {
|
|
|
66
66
|
} catch (_: JSONException) { null }
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
companion object {
|
|
70
|
+
/** Call from ExpoInvokeModule.notifySliceChange() to push fresh data to Slice consumers. */
|
|
71
|
+
fun notifyChange(context: Context, sliceId: String) {
|
|
72
|
+
val pkg = context.packageName
|
|
73
|
+
val uri = Uri.parse("content://$pkg.invoke.slices/$sliceId")
|
|
74
|
+
context.contentResolver.notifyChange(uri, null)
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
69
78
|
private fun buildTapIntent(context: Context, intentId: String): PendingIntent {
|
|
70
79
|
val pkg = context.packageName
|
|
71
80
|
val deepLink = "$pkg://invoke/$intentId"
|
|
@@ -145,6 +145,28 @@ function swiftWidgetFamily(size) {
|
|
|
145
145
|
return (_a = WIDGET_SIZE_MAP[size]) !== null && _a !== void 0 ? _a : '.systemSmall';
|
|
146
146
|
}
|
|
147
147
|
function generateSwiftIntents(intents) {
|
|
148
|
+
// Warn developers about flags that are accepted in config but require additional
|
|
149
|
+
// manual setup beyond what expo-invoke auto-generates.
|
|
150
|
+
for (const intent of intents) {
|
|
151
|
+
if (intent.supportsControlCenter) {
|
|
152
|
+
console.warn(`[expo-invoke] Intent "${intent.id}" has supportsControlCenter: true.\n` +
|
|
153
|
+
` Control Center tiles (iOS 18+) require a separate ControlWidget extension — they\n` +
|
|
154
|
+
` cannot be auto-generated from AppIntent definitions. See:\n` +
|
|
155
|
+
` https://developer.apple.com/documentation/widgetkit/adding-a-control-to-the-control-center`);
|
|
156
|
+
}
|
|
157
|
+
if (intent.supportsCarPlay) {
|
|
158
|
+
console.warn(`[expo-invoke] Intent "${intent.id}" has supportsCarPlay: true.\n` +
|
|
159
|
+
` CarPlay integration requires CPApplicationDelegate setup in your AppDelegate and a\n` +
|
|
160
|
+
` CarPlay entitlement. The AppIntent is generated but CarPlay scenes are not. See:\n` +
|
|
161
|
+
` https://developer.apple.com/documentation/carplay`);
|
|
162
|
+
}
|
|
163
|
+
if (intent.supportsWatch) {
|
|
164
|
+
console.warn(`[expo-invoke] Intent "${intent.id}" has supportsWatch: true.\n` +
|
|
165
|
+
` watchOS intents require a separate watchOS app target. The AppIntent is generated\n` +
|
|
166
|
+
` for iOS; add it to your watch target manually. See:\n` +
|
|
167
|
+
` https://developer.apple.com/documentation/watchos-apps`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
148
170
|
const structs = intents.map(generateIntentStruct).join('\n\n');
|
|
149
171
|
const provider = generateShortcutsProvider(intents);
|
|
150
172
|
return `// AUTO-GENERATED by expo-invoke config plugin. Do not edit manually.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateSwiftIntents.js","sourceRoot":"","sources":["../../../plugin/codegen/generateSwiftIntents.ts"],"names":[],"mappings":";;AAqJA,8CAEC;AAED,
|
|
1
|
+
{"version":3,"file":"generateSwiftIntents.js","sourceRoot":"","sources":["../../../plugin/codegen/generateSwiftIntents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* generateSwiftLiveActivities.ts
|
|
3
|
+
*
|
|
4
|
+
* Generates InvokeLiveActivities.swift — the ActivityKit-backed implementation of
|
|
5
|
+
* LiveActivityRegistry and an extension on LiveActivityManager that actually creates
|
|
6
|
+
* Activity<ExpoInvokeActivityAttributes> objects at runtime.
|
|
7
|
+
*
|
|
8
|
+
* The generated file replaces the stub LiveActivityRegistry in LiveActivityManager.swift
|
|
9
|
+
* (which is guarded with `#if !canImport(ActivityKit)`) with a full implementation.
|
|
10
|
+
*
|
|
11
|
+
* All content state is JSON-encoded into a single `stateJson: String` field so that
|
|
12
|
+
* any shape of state can be used without requiring separate Swift codegen per activity type.
|
|
13
|
+
* The widget extension reads `stateJson` and decodes it to render the Live Activity view.
|
|
14
|
+
*
|
|
15
|
+
* Called by withIOSInvoke.ts when `enableLiveActivities: true` is set in the plugin config.
|
|
16
|
+
*/
|
|
17
|
+
export declare function generateSwiftLiveActivities(liveActivityTypes: string[]): string;
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* generateSwiftLiveActivities.ts
|
|
4
|
+
*
|
|
5
|
+
* Generates InvokeLiveActivities.swift — the ActivityKit-backed implementation of
|
|
6
|
+
* LiveActivityRegistry and an extension on LiveActivityManager that actually creates
|
|
7
|
+
* Activity<ExpoInvokeActivityAttributes> objects at runtime.
|
|
8
|
+
*
|
|
9
|
+
* The generated file replaces the stub LiveActivityRegistry in LiveActivityManager.swift
|
|
10
|
+
* (which is guarded with `#if !canImport(ActivityKit)`) with a full implementation.
|
|
11
|
+
*
|
|
12
|
+
* All content state is JSON-encoded into a single `stateJson: String` field so that
|
|
13
|
+
* any shape of state can be used without requiring separate Swift codegen per activity type.
|
|
14
|
+
* The widget extension reads `stateJson` and decodes it to render the Live Activity view.
|
|
15
|
+
*
|
|
16
|
+
* Called by withIOSInvoke.ts when `enableLiveActivities: true` is set in the plugin config.
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.generateSwiftLiveActivities = generateSwiftLiveActivities;
|
|
20
|
+
function generateSwiftLiveActivities(liveActivityTypes) {
|
|
21
|
+
const typeList = liveActivityTypes.length > 0
|
|
22
|
+
? liveActivityTypes.map((t) => `// - ${t}`).join('\n')
|
|
23
|
+
: '// (none declared — using generic ExpoInvokeActivity)';
|
|
24
|
+
return `// InvokeLiveActivities.swift — Generated by expo-invoke. DO NOT EDIT.
|
|
25
|
+
// Regenerate via: npx expo prebuild
|
|
26
|
+
//
|
|
27
|
+
// Registered activity types:
|
|
28
|
+
${typeList}
|
|
29
|
+
//
|
|
30
|
+
// All activity state is JSON-encoded so any shape of contentState can be used
|
|
31
|
+
// from JS without requiring per-type Swift structs.
|
|
32
|
+
|
|
33
|
+
#if canImport(ActivityKit)
|
|
34
|
+
import ActivityKit
|
|
35
|
+
import Foundation
|
|
36
|
+
|
|
37
|
+
// ─── ActivityAttributes ───────────────────────────────────────────────────────
|
|
38
|
+
|
|
39
|
+
/// Single ActivityAttributes type shared across all expo-invoke Live Activities.
|
|
40
|
+
/// The \`activityType\` field discriminates between different activity kinds at runtime.
|
|
41
|
+
/// Content state is stored as a JSON string so the widget extension can decode any shape.
|
|
42
|
+
@available(iOS 16.1, *)
|
|
43
|
+
struct ExpoInvokeActivityAttributes: ActivityAttributes {
|
|
44
|
+
public typealias ContentState = ExpoInvokeContentState
|
|
45
|
+
|
|
46
|
+
public struct ExpoInvokeContentState: Codable, Hashable {
|
|
47
|
+
/// JSON-encoded content state. Decode in your Live Activity view.
|
|
48
|
+
var stateJson: String
|
|
49
|
+
/// Optional stale date (ms since epoch). Nil means no stale threshold.
|
|
50
|
+
var staleDateMs: Double?
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/// Matches the activityType passed to startLiveActivity() / useLiveActivity().
|
|
54
|
+
var activityType: String
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// ─── LiveActivityRegistry (real implementation) ───────────────────────────────
|
|
58
|
+
|
|
59
|
+
/// Tracks active Activity<ExpoInvokeActivityAttributes> objects by their JS-facing activityId.
|
|
60
|
+
/// Replaces the stub in LiveActivityManager.swift (compiled only when ActivityKit is absent).
|
|
61
|
+
@available(iOS 16.1, *)
|
|
62
|
+
@objc public class LiveActivityRegistry: NSObject {
|
|
63
|
+
|
|
64
|
+
@objc public static let shared = LiveActivityRegistry()
|
|
65
|
+
|
|
66
|
+
private var activities: [String: Activity<ExpoInvokeActivityAttributes>] = [:]
|
|
67
|
+
private let lock = NSLock()
|
|
68
|
+
|
|
69
|
+
private override init() {}
|
|
70
|
+
|
|
71
|
+
// ── Called by ExpoInvokeModule / LiveActivityManager ──────────────────────
|
|
72
|
+
|
|
73
|
+
@objc public func update(activityId: String, contentStateJson: String) {
|
|
74
|
+
lock.lock()
|
|
75
|
+
let activity = activities[activityId]
|
|
76
|
+
lock.unlock()
|
|
77
|
+
guard let activity else { return }
|
|
78
|
+
|
|
79
|
+
let newState = ExpoInvokeActivityAttributes.ContentState(stateJson: contentStateJson)
|
|
80
|
+
Task {
|
|
81
|
+
await activity.update(using: newState)
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@objc public func end(activityId: String, finalStateJson: String?) {
|
|
86
|
+
lock.lock()
|
|
87
|
+
let activity = activities.removeValue(forKey: activityId)
|
|
88
|
+
lock.unlock()
|
|
89
|
+
guard let activity else { return }
|
|
90
|
+
|
|
91
|
+
let finalState = finalStateJson.map {
|
|
92
|
+
ExpoInvokeActivityAttributes.ContentState(stateJson: $0)
|
|
93
|
+
}
|
|
94
|
+
Task {
|
|
95
|
+
await activity.end(using: finalState, dismissalPolicy: .default)
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@objc public func listActivities() -> [[String: Any]] {
|
|
100
|
+
lock.lock()
|
|
101
|
+
let snapshot = activities
|
|
102
|
+
lock.unlock()
|
|
103
|
+
|
|
104
|
+
return snapshot.map { (activityId, activity) in
|
|
105
|
+
var info: [String: Any] = [
|
|
106
|
+
"activityId": activityId,
|
|
107
|
+
"activityType": activity.attributes.activityType,
|
|
108
|
+
"stateJson": activity.contentState.stateJson,
|
|
109
|
+
"isActive": activity.activityState != .ended,
|
|
110
|
+
]
|
|
111
|
+
if case .stale = activity.activityState {
|
|
112
|
+
info["isStale"] = true
|
|
113
|
+
}
|
|
114
|
+
return info
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// ── Called by LiveActivityManager extension below ────────────────────────
|
|
119
|
+
|
|
120
|
+
func register(activityId: String, activity: Activity<ExpoInvokeActivityAttributes>) {
|
|
121
|
+
lock.lock()
|
|
122
|
+
activities[activityId] = activity
|
|
123
|
+
lock.unlock()
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// ─── LiveActivityManager extension ───────────────────────────────────────────
|
|
128
|
+
|
|
129
|
+
/// Provides the real ActivityKit activity creation, called from
|
|
130
|
+
/// LiveActivityManager.startActivity() via \`#if canImport(ActivityKit)\`.
|
|
131
|
+
@available(iOS 16.1, *)
|
|
132
|
+
extension LiveActivityManager {
|
|
133
|
+
func createActivity(activityId: String, config: [String: Any]) throws {
|
|
134
|
+
let activityType = config["activityType"] as? String ?? "ExpoInvokeActivity"
|
|
135
|
+
|
|
136
|
+
// Encode the contentState dict to a JSON string for the widget to decode.
|
|
137
|
+
let contentStateJson: String
|
|
138
|
+
if let cs = config["contentState"] as? [String: Any],
|
|
139
|
+
let data = try? JSONSerialization.data(withJSONObject: cs, options: []),
|
|
140
|
+
let json = String(data: data, encoding: .utf8) {
|
|
141
|
+
contentStateJson = json
|
|
142
|
+
} else {
|
|
143
|
+
contentStateJson = "{}"
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
let staleDateMs = config["staleDate"] as? Double
|
|
147
|
+
let initialState = ExpoInvokeActivityAttributes.ContentState(
|
|
148
|
+
stateJson: contentStateJson,
|
|
149
|
+
staleDateMs: staleDateMs
|
|
150
|
+
)
|
|
151
|
+
let attributes = ExpoInvokeActivityAttributes(activityType: activityType)
|
|
152
|
+
|
|
153
|
+
let activity = try Activity<ExpoInvokeActivityAttributes>.request(
|
|
154
|
+
attributes: attributes,
|
|
155
|
+
contentState: initialState,
|
|
156
|
+
pushType: nil
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
LiveActivityRegistry.shared.register(activityId: activityId, activity: activity)
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
#endif // canImport(ActivityKit)
|
|
163
|
+
`;
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=generateSwiftLiveActivities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateSwiftLiveActivities.js","sourceRoot":"","sources":["../../../plugin/codegen/generateSwiftLiveActivities.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;AAEH,kEAiJC;AAjJD,SAAgB,2BAA2B,CAAC,iBAA2B;IACrE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC;QAC3C,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACxD,CAAC,CAAC,yDAAyD,CAAC;IAE9D,OAAO;;;;EAIP,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuIT,CAAC;AACF,CAAC"}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Swift code generation is superseded by the React-component-based widget engine.
|
|
3
|
+
* Use the `widgets` array option with createWidget()/createLiveActivity() instead.
|
|
4
|
+
* Will be removed in v3.
|
|
5
|
+
*/
|
|
1
6
|
export interface WidgetCodegenOptions {
|
|
2
7
|
/** Display name shown in the widget picker */
|
|
3
8
|
widgetTitle: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateSwiftWidget.js","sourceRoot":"","sources":["../../../plugin/codegen/generateSwiftWidget.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"generateSwiftWidget.js","sourceRoot":"","sources":["../../../plugin/codegen/generateSwiftWidget.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const config_plugins_1 = require("@expo/config-plugins");
|
|
4
|
+
const withAppGroupEntitlements = (config, props) => (0, config_plugins_1.withEntitlementsPlist)(config, (config) => {
|
|
5
|
+
var _a, _b;
|
|
6
|
+
config.ios = {
|
|
7
|
+
...config.ios,
|
|
8
|
+
entitlements: _addApplicationGroupsEntitlement((_b = (_a = config.ios) === null || _a === void 0 ? void 0 : _a.entitlements) !== null && _b !== void 0 ? _b : {}, props.groupIdentifier),
|
|
9
|
+
};
|
|
10
|
+
return config;
|
|
11
|
+
});
|
|
12
|
+
exports.default = withAppGroupEntitlements;
|
|
13
|
+
function _addApplicationGroupsEntitlement(entitlements, groupIdentifier) {
|
|
14
|
+
var _a;
|
|
15
|
+
if (!groupIdentifier) {
|
|
16
|
+
return entitlements;
|
|
17
|
+
}
|
|
18
|
+
const existingApplicationGroups = (_a = entitlements['com.apple.security.application-groups']) !== null && _a !== void 0 ? _a : [];
|
|
19
|
+
if (!existingApplicationGroups.includes(groupIdentifier)) {
|
|
20
|
+
entitlements['com.apple.security.application-groups'] = [
|
|
21
|
+
groupIdentifier,
|
|
22
|
+
...existingApplicationGroups,
|
|
23
|
+
];
|
|
24
|
+
}
|
|
25
|
+
return entitlements;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=withAppGroupEntitlements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withAppGroupEntitlements.js","sourceRoot":"","sources":["../../../../plugin/ios/widgets/withAppGroupEntitlements.ts"],"names":[],"mappings":";;AAAA,yDAAsF;AAMtF,MAAM,wBAAwB,GAA4C,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAC1F,IAAA,sCAAqB,EAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;;IACvC,MAAM,CAAC,GAAG,GAAG;QACX,GAAG,MAAM,CAAC,GAAG;QACb,YAAY,EAAE,gCAAgC,CAC5C,MAAA,MAAA,MAAM,CAAC,GAAG,0CAAE,YAAY,mCAAI,EAAE,EAC9B,KAAK,CAAC,eAAe,CACtB;KACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC,CAAC;AAEL,kBAAe,wBAAwB,CAAC;AAExC,SAAS,gCAAgC,CAAC,YAAuB,EAAE,eAAwB;;IACzF,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,yBAAyB,GAC7B,MAAC,YAAY,CAAC,uCAAuC,CAAc,mCAAI,EAAE,CAAC;IAE5E,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACzD,YAAY,CAAC,uCAAuC,CAAC,GAAG;YACtD,eAAe;YACf,GAAG,yBAAyB;SAC7B,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const config_plugins_1 = require("@expo/config-plugins");
|
|
4
|
+
const withAppInfoPlist = (config, { frequentUpdates, groupIdentifier }) => (0, config_plugins_1.withInfoPlist)(config, (config) => {
|
|
5
|
+
const infoPlist = config.modResults;
|
|
6
|
+
infoPlist.NSSupportsLiveActivities = true;
|
|
7
|
+
infoPlist.NSSupportsLiveActivitiesFrequentUpdates = frequentUpdates;
|
|
8
|
+
infoPlist.ExpoWidgetsAppGroupIdentifier = groupIdentifier;
|
|
9
|
+
return config;
|
|
10
|
+
});
|
|
11
|
+
exports.default = withAppInfoPlist;
|
|
12
|
+
//# sourceMappingURL=withAppInfoPlist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withAppInfoPlist.js","sourceRoot":"","sources":["../../../../plugin/ios/widgets/withAppInfoPlist.ts"],"names":[],"mappings":";;AAAA,yDAAmE;AAOnE,MAAM,gBAAgB,GAAwC,CAC5D,MAAM,EACN,EAAE,eAAe,EAAE,eAAe,EAAE,EACpC,EAAE,CACF,IAAA,8BAAa,EAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;IAC/B,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC;IACpC,SAAS,CAAC,wBAAwB,GAAG,IAAI,CAAC;IAC1C,SAAS,CAAC,uCAAuC,GAAG,eAAe,CAAC;IACpE,SAAS,CAAC,6BAA6B,GAAG,eAAe,CAAC;IAC1D,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC,CAAC;AAEL,kBAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const withEasConfig = (config, { targetName, bundleIdentifier, groupIdentifier }) => {
|
|
4
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
|
|
5
|
+
let configIndex = null;
|
|
6
|
+
(_f = (_e = (_d = (_c = (_b = (_a = config.extra) === null || _a === void 0 ? void 0 : _a.eas) === null || _b === void 0 ? void 0 : _b.build) === null || _c === void 0 ? void 0 : _c.experimental) === null || _d === void 0 ? void 0 : _d.ios) === null || _e === void 0 ? void 0 : _e.appExtensions) === null || _f === void 0 ? void 0 : _f.forEach((ext, index) => {
|
|
7
|
+
if (ext.targetName === targetName) {
|
|
8
|
+
configIndex = index;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
if (configIndex === null) {
|
|
12
|
+
config.extra = {
|
|
13
|
+
...config.extra,
|
|
14
|
+
eas: {
|
|
15
|
+
...(_g = config.extra) === null || _g === void 0 ? void 0 : _g.eas,
|
|
16
|
+
build: {
|
|
17
|
+
...(_j = (_h = config.extra) === null || _h === void 0 ? void 0 : _h.eas) === null || _j === void 0 ? void 0 : _j.build,
|
|
18
|
+
experimental: {
|
|
19
|
+
...(_m = (_l = (_k = config.extra) === null || _k === void 0 ? void 0 : _k.eas) === null || _l === void 0 ? void 0 : _l.build) === null || _m === void 0 ? void 0 : _m.experimental,
|
|
20
|
+
ios: {
|
|
21
|
+
...(_r = (_q = (_p = (_o = config.extra) === null || _o === void 0 ? void 0 : _o.eas) === null || _p === void 0 ? void 0 : _p.build) === null || _q === void 0 ? void 0 : _q.experimental) === null || _r === void 0 ? void 0 : _r.ios,
|
|
22
|
+
appExtensions: [
|
|
23
|
+
...((_x = (_w = (_v = (_u = (_t = (_s = config.extra) === null || _s === void 0 ? void 0 : _s.eas) === null || _t === void 0 ? void 0 : _t.build) === null || _u === void 0 ? void 0 : _u.experimental) === null || _v === void 0 ? void 0 : _v.ios) === null || _w === void 0 ? void 0 : _w.appExtensions) !== null && _x !== void 0 ? _x : []),
|
|
24
|
+
{
|
|
25
|
+
targetName,
|
|
26
|
+
bundleIdentifier,
|
|
27
|
+
entitlements: {
|
|
28
|
+
'com.apple.security.application-groups': [groupIdentifier],
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
else if (config.extra) {
|
|
39
|
+
// Ensure the entitlements are up to date for an existing entry
|
|
40
|
+
const existingEntry = config.extra.eas.build.experimental.ios.appExtensions[configIndex];
|
|
41
|
+
const existingGroups = (_z = (_y = existingEntry.entitlements) === null || _y === void 0 ? void 0 : _y['com.apple.security.application-groups']) !== null && _z !== void 0 ? _z : [];
|
|
42
|
+
if (!existingGroups.includes(groupIdentifier)) {
|
|
43
|
+
existingEntry.entitlements = {
|
|
44
|
+
...existingEntry.entitlements,
|
|
45
|
+
'com.apple.security.application-groups': [groupIdentifier, ...existingGroups],
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return config;
|
|
50
|
+
};
|
|
51
|
+
exports.default = withEasConfig;
|
|
52
|
+
//# sourceMappingURL=withEasConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withEasConfig.js","sourceRoot":"","sources":["../../../../plugin/ios/widgets/withEasConfig.ts"],"names":[],"mappings":";;AAQA,MAAM,aAAa,GAAiC,CAClD,MAAM,EACN,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,EACjD,EAAE;;IACF,IAAI,WAAW,GAAkB,IAAI,CAAC;IACtC,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAM,CAAC,KAAK,0CAAE,GAAG,0CAAE,KAAK,0CAAE,YAAY,0CAAE,GAAG,0CAAE,aAAa,0CAAE,OAAO,CAAC,CAAC,GAAQ,EAAE,KAAa,EAAE,EAAE;QAC9F,IAAI,GAAG,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YAClC,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,MAAM,CAAC,KAAK,GAAG;YACb,GAAG,MAAM,CAAC,KAAK;YACf,GAAG,EAAE;gBACH,GAAG,MAAA,MAAM,CAAC,KAAK,0CAAE,GAAG;gBACpB,KAAK,EAAE;oBACL,GAAG,MAAA,MAAA,MAAM,CAAC,KAAK,0CAAE,GAAG,0CAAE,KAAK;oBAC3B,YAAY,EAAE;wBACZ,GAAG,MAAA,MAAA,MAAA,MAAM,CAAC,KAAK,0CAAE,GAAG,0CAAE,KAAK,0CAAE,YAAY;wBACzC,GAAG,EAAE;4BACH,GAAG,MAAA,MAAA,MAAA,MAAA,MAAM,CAAC,KAAK,0CAAE,GAAG,0CAAE,KAAK,0CAAE,YAAY,0CAAE,GAAG;4BAC9C,aAAa,EAAE;gCACb,GAAG,CAAC,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAM,CAAC,KAAK,0CAAE,GAAG,0CAAE,KAAK,0CAAE,YAAY,0CAAE,GAAG,0CAAE,aAAa,mCAAI,EAAE,CAAC;gCACrE;oCACE,UAAU;oCACV,gBAAgB;oCAChB,YAAY,EAAE;wCACZ,uCAAuC,EAAE,CAAC,eAAe,CAAC;qCAC3D;iCACF;6BACF;yBACF;qBACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;SAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACxB,+DAA+D;QAC/D,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACzF,MAAM,cAAc,GAClB,MAAC,MAAA,aAAa,CAAC,YAAY,0CAAG,uCAAuC,CAAc,mCAAI,EAAE,CAAC;QAC5F,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC9C,aAAa,CAAC,YAAY,GAAG;gBAC3B,GAAG,aAAa,CAAC,YAAY;gBAC7B,uCAAuC,EAAE,CAAC,eAAe,EAAE,GAAG,cAAc,CAAC;aAC9E,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,kBAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const config_plugins_1 = require("@expo/config-plugins");
|
|
4
|
+
// Hack to display the warning only once
|
|
5
|
+
const withIosWarning = (config, { property, warning }) => (0, config_plugins_1.withInfoPlist)(config, (config) => {
|
|
6
|
+
config_plugins_1.WarningAggregator.addWarningIOS(property, warning);
|
|
7
|
+
return config;
|
|
8
|
+
});
|
|
9
|
+
exports.default = withIosWarning;
|
|
10
|
+
//# sourceMappingURL=withIosWarning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withIosWarning.js","sourceRoot":"","sources":["../../../../plugin/ios/widgets/withIosWarning.ts"],"names":[],"mappings":";;AACA,yDAAsF;AAItF,wCAAwC;AACxC,MAAM,cAAc,GAAsC,CACxD,MAAkB,EAClB,EAAE,QAAQ,EAAE,OAAO,EAAuB,EAC1C,EAAE,CACF,IAAA,8BAAa,EAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;IAC/B,kCAAiB,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC,CAAC;AAEL,kBAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ConfigPlugin } from '@expo/config-plugins';
|
|
2
|
+
import { WidgetConfig } from '../../types/WidgetConfig.type';
|
|
3
|
+
type IosWidgetsProps = {
|
|
4
|
+
bundleIdentifier?: string;
|
|
5
|
+
groupIdentifier?: string;
|
|
6
|
+
enablePushNotifications?: boolean;
|
|
7
|
+
frequentUpdates?: boolean;
|
|
8
|
+
widgets: WidgetConfig[];
|
|
9
|
+
};
|
|
10
|
+
declare const withIosWidgets: ConfigPlugin<IosWidgetsProps>;
|
|
11
|
+
export default withIosWidgets;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const config_plugins_1 = require("@expo/config-plugins");
|
|
7
|
+
const withAppGroupEntitlements_1 = __importDefault(require("./withAppGroupEntitlements"));
|
|
8
|
+
const withAppInfoPlist_1 = __importDefault(require("./withAppInfoPlist"));
|
|
9
|
+
const withEasConfig_1 = __importDefault(require("./withEasConfig"));
|
|
10
|
+
const withIosWarning_1 = __importDefault(require("./withIosWarning"));
|
|
11
|
+
const withPodsLinking_1 = __importDefault(require("./withPodsLinking"));
|
|
12
|
+
const withPushNotifications_1 = __importDefault(require("./withPushNotifications"));
|
|
13
|
+
const withWidgetSourceFiles_1 = __importDefault(require("./withWidgetSourceFiles"));
|
|
14
|
+
const withTargetXcodeProject_1 = __importDefault(require("./xcode/withTargetXcodeProject"));
|
|
15
|
+
const withIosWidgets = (config, props) => {
|
|
16
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
17
|
+
const shouldConfigureIos = !!((_a = config.ios) === null || _a === void 0 ? void 0 : _a.bundleIdentifier) ||
|
|
18
|
+
!!props.bundleIdentifier ||
|
|
19
|
+
!!props.groupIdentifier ||
|
|
20
|
+
props.enablePushNotifications === true ||
|
|
21
|
+
props.frequentUpdates === true;
|
|
22
|
+
if (!shouldConfigureIos) {
|
|
23
|
+
return config;
|
|
24
|
+
}
|
|
25
|
+
let plugins = [];
|
|
26
|
+
const deploymentTarget = (_c = (_b = config.ios) === null || _b === void 0 ? void 0 : _b.deploymentTarget) !== null && _c !== void 0 ? _c : '16.4';
|
|
27
|
+
const targetName = 'ExpoWidgetsTarget';
|
|
28
|
+
const widgets = props.widgets.filter((widget) => widget.ios !== null);
|
|
29
|
+
const enablePushNotifications = (_d = props.enablePushNotifications) !== null && _d !== void 0 ? _d : false;
|
|
30
|
+
const frequentUpdates = (_e = props.frequentUpdates) !== null && _e !== void 0 ? _e : false;
|
|
31
|
+
let bundleIdentifier = props.bundleIdentifier;
|
|
32
|
+
if (!bundleIdentifier) {
|
|
33
|
+
bundleIdentifier = `${(_f = config.ios) === null || _f === void 0 ? void 0 : _f.bundleIdentifier}.${targetName}`;
|
|
34
|
+
plugins.push([
|
|
35
|
+
withIosWarning_1.default,
|
|
36
|
+
{
|
|
37
|
+
property: 'bundleIdentifier',
|
|
38
|
+
warning: `Expo Widgets: No bundle identifier provided, using fallback: ${bundleIdentifier}.`,
|
|
39
|
+
},
|
|
40
|
+
]);
|
|
41
|
+
}
|
|
42
|
+
let groupIdentifier = props.groupIdentifier;
|
|
43
|
+
if (!groupIdentifier) {
|
|
44
|
+
if (!((_g = config.ios) === null || _g === void 0 ? void 0 : _g.bundleIdentifier)) {
|
|
45
|
+
throw new Error('iOS bundle identifier is required. Please set `ios.bundleIdentifier` in `app.json` or `app.config.js`');
|
|
46
|
+
}
|
|
47
|
+
groupIdentifier = `group.${config.ios.bundleIdentifier}`;
|
|
48
|
+
plugins.push([
|
|
49
|
+
withIosWarning_1.default,
|
|
50
|
+
{
|
|
51
|
+
property: 'groupIdentifier',
|
|
52
|
+
warning: `Expo Widgets: No group identifier provided, using fallback: ${groupIdentifier}.`,
|
|
53
|
+
},
|
|
54
|
+
]);
|
|
55
|
+
}
|
|
56
|
+
let sharedFiles = [];
|
|
57
|
+
const setFiles = (files) => {
|
|
58
|
+
sharedFiles = [...sharedFiles, ...files];
|
|
59
|
+
};
|
|
60
|
+
const getFileUris = () => sharedFiles;
|
|
61
|
+
plugins = [
|
|
62
|
+
...plugins,
|
|
63
|
+
[withEasConfig_1.default, { targetName, bundleIdentifier, groupIdentifier }],
|
|
64
|
+
[withPodsLinking_1.default, { targetName }],
|
|
65
|
+
[withWidgetSourceFiles_1.default, { targetName, widgets, groupIdentifier, onFilesGenerated: setFiles }],
|
|
66
|
+
[withAppInfoPlist_1.default, { frequentUpdates, groupIdentifier }],
|
|
67
|
+
[withPushNotifications_1.default, { enablePushNotifications }],
|
|
68
|
+
[withAppGroupEntitlements_1.default, { groupIdentifier }],
|
|
69
|
+
[
|
|
70
|
+
withTargetXcodeProject_1.default,
|
|
71
|
+
{
|
|
72
|
+
targetName,
|
|
73
|
+
bundleIdentifier,
|
|
74
|
+
deploymentTarget,
|
|
75
|
+
appleTeamId: (_h = config.ios) === null || _h === void 0 ? void 0 : _h.appleTeamId,
|
|
76
|
+
getFileUris,
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
];
|
|
80
|
+
return (0, config_plugins_1.withPlugins)(config, plugins);
|
|
81
|
+
};
|
|
82
|
+
exports.default = withIosWidgets;
|
|
83
|
+
//# sourceMappingURL=withIosWidgets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withIosWidgets.js","sourceRoot":"","sources":["../../../../plugin/ios/widgets/withIosWidgets.ts"],"names":[],"mappings":"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"}
|