@use-voltra/ios-client 2.1.1 → 2.3.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/README.md +61 -8
- package/Voltra.podspec +1 -0
- package/build/commonjs/dynamic-widget/api.js +15 -0
- package/build/commonjs/dynamic-widget/api.js.map +1 -0
- package/build/commonjs/events.js +23 -0
- package/build/commonjs/events.js.map +1 -1
- package/build/commonjs/index.js +74 -7
- package/build/commonjs/index.js.map +1 -1
- package/build/commonjs/live-activity/api.js +3 -1
- package/build/commonjs/live-activity/api.js.map +1 -1
- package/build/commonjs/live-activity/dynamic-api.js +173 -0
- package/build/commonjs/live-activity/dynamic-api.js.map +1 -0
- package/build/commonjs/native/NativeVoltra.js.map +1 -1
- package/build/commonjs/utils/enableDynamicLiveActivityHotReload.js +47 -0
- package/build/commonjs/utils/enableDynamicLiveActivityHotReload.js.map +1 -0
- package/build/commonjs/utils/enableWidgetHotReload.js +8 -11
- package/build/commonjs/utils/enableWidgetHotReload.js.map +1 -1
- package/build/commonjs/utils/useUpdateOnHMR.js +3 -7
- package/build/commonjs/utils/useUpdateOnHMR.js.map +1 -1
- package/build/commonjs/widgets/server-credentials.js +9 -0
- package/build/commonjs/widgets/server-credentials.js.map +1 -1
- package/build/commonjs/widgets/server-update.js +78 -0
- package/build/commonjs/widgets/server-update.js.map +1 -0
- package/build/module/dynamic-widget/api.js +10 -0
- package/build/module/dynamic-widget/api.js.map +1 -0
- package/build/module/events.js +23 -0
- package/build/module/events.js.map +1 -1
- package/build/module/index.js +4 -0
- package/build/module/index.js.map +1 -1
- package/build/module/live-activity/api.js +2 -2
- package/build/module/live-activity/api.js.map +1 -1
- package/build/module/live-activity/dynamic-api.js +167 -0
- package/build/module/live-activity/dynamic-api.js.map +1 -0
- package/build/module/native/NativeVoltra.js.map +1 -1
- package/build/module/utils/enableDynamicLiveActivityHotReload.js +43 -0
- package/build/module/utils/enableDynamicLiveActivityHotReload.js.map +1 -0
- package/build/module/utils/enableWidgetHotReload.js +9 -11
- package/build/module/utils/enableWidgetHotReload.js.map +1 -1
- package/build/module/utils/useUpdateOnHMR.js +3 -7
- package/build/module/utils/useUpdateOnHMR.js.map +1 -1
- package/build/module/widgets/server-credentials.js +9 -0
- package/build/module/widgets/server-credentials.js.map +1 -1
- package/build/module/widgets/server-update.js +72 -0
- package/build/module/widgets/server-update.js.map +1 -0
- package/build/typescript/commonjs/dynamic-widget/api.d.ts +8 -0
- package/build/typescript/commonjs/dynamic-widget/api.d.ts.map +1 -0
- package/build/typescript/commonjs/events.d.ts +7 -0
- package/build/typescript/commonjs/events.d.ts.map +1 -1
- package/build/typescript/commonjs/index.d.ts +4 -0
- package/build/typescript/commonjs/index.d.ts.map +1 -1
- package/build/typescript/commonjs/live-activity/api.d.ts +7 -0
- package/build/typescript/commonjs/live-activity/api.d.ts.map +1 -1
- package/build/typescript/commonjs/live-activity/dynamic-api.d.ts +54 -0
- package/build/typescript/commonjs/live-activity/dynamic-api.d.ts.map +1 -0
- package/build/typescript/commonjs/native/NativeVoltra.d.ts +21 -0
- package/build/typescript/commonjs/native/NativeVoltra.d.ts.map +1 -1
- package/build/typescript/commonjs/types.d.ts +1 -1
- package/build/typescript/commonjs/types.d.ts.map +1 -1
- package/build/typescript/commonjs/utils/enableDynamicLiveActivityHotReload.d.ts +15 -0
- package/build/typescript/commonjs/utils/enableDynamicLiveActivityHotReload.d.ts.map +1 -0
- package/build/typescript/commonjs/utils/enableWidgetHotReload.d.ts +5 -7
- package/build/typescript/commonjs/utils/enableWidgetHotReload.d.ts.map +1 -1
- package/build/typescript/commonjs/utils/useUpdateOnHMR.d.ts +0 -3
- package/build/typescript/commonjs/utils/useUpdateOnHMR.d.ts.map +1 -1
- package/build/typescript/commonjs/widgets/server-credentials.d.ts +8 -0
- package/build/typescript/commonjs/widgets/server-credentials.d.ts.map +1 -1
- package/build/typescript/commonjs/widgets/server-update.d.ts +64 -0
- package/build/typescript/commonjs/widgets/server-update.d.ts.map +1 -0
- package/build/typescript/module/dynamic-widget/api.d.ts +8 -0
- package/build/typescript/module/dynamic-widget/api.d.ts.map +1 -0
- package/build/typescript/module/events.d.ts +7 -0
- package/build/typescript/module/events.d.ts.map +1 -1
- package/build/typescript/module/index.d.ts +4 -0
- package/build/typescript/module/index.d.ts.map +1 -1
- package/build/typescript/module/live-activity/api.d.ts +7 -0
- package/build/typescript/module/live-activity/api.d.ts.map +1 -1
- package/build/typescript/module/live-activity/dynamic-api.d.ts +54 -0
- package/build/typescript/module/live-activity/dynamic-api.d.ts.map +1 -0
- package/build/typescript/module/native/NativeVoltra.d.ts +21 -0
- package/build/typescript/module/native/NativeVoltra.d.ts.map +1 -1
- package/build/typescript/module/types.d.ts +1 -1
- package/build/typescript/module/types.d.ts.map +1 -1
- package/build/typescript/module/utils/enableDynamicLiveActivityHotReload.d.ts +15 -0
- package/build/typescript/module/utils/enableDynamicLiveActivityHotReload.d.ts.map +1 -0
- package/build/typescript/module/utils/enableWidgetHotReload.d.ts +5 -7
- package/build/typescript/module/utils/enableWidgetHotReload.d.ts.map +1 -1
- package/build/typescript/module/utils/useUpdateOnHMR.d.ts +0 -3
- package/build/typescript/module/utils/useUpdateOnHMR.d.ts.map +1 -1
- package/build/typescript/module/widgets/server-credentials.d.ts +8 -0
- package/build/typescript/module/widgets/server-credentials.d.ts.map +1 -1
- package/build/typescript/module/widgets/server-update.d.ts +64 -0
- package/build/typescript/module/widgets/server-update.d.ts.map +1 -0
- package/expo-plugin/build/cjs/constants.js +20 -1
- package/expo-plugin/build/cjs/constants.js.map +1 -1
- package/expo-plugin/build/cjs/index.js +9 -1
- package/expo-plugin/build/cjs/index.js.map +1 -1
- package/expo-plugin/build/cjs/ios/index.js +1 -0
- package/expo-plugin/build/cjs/ios/index.js.map +1 -1
- package/expo-plugin/build/cjs/ios/infoPlist.js +28 -5
- package/expo-plugin/build/cjs/ios/infoPlist.js.map +1 -1
- package/expo-plugin/build/cjs/ios/serverUpdate.js +25 -0
- package/expo-plugin/build/cjs/ios/serverUpdate.js.map +1 -0
- package/expo-plugin/build/cjs/ios-widget/clientRendered.js +4 -4
- package/expo-plugin/build/cjs/ios-widget/clientRendered.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/clientRenderedPrerender.js +5 -5
- package/expo-plugin/build/cjs/ios-widget/clientRenderedPrerender.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/dynamic-live-activity/swift.js +130 -0
- package/expo-plugin/build/cjs/ios-widget/dynamic-live-activity/swift.js.map +1 -0
- package/expo-plugin/build/cjs/ios-widget/files/index.js +9 -2
- package/expo-plugin/build/cjs/ios-widget/files/index.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/files/infoPlist.js +6 -3
- package/expo-plugin/build/cjs/ios-widget/files/infoPlist.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/files/manifest.js +24 -0
- package/expo-plugin/build/cjs/ios-widget/files/manifest.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/files/swift-utils.js +7 -0
- package/expo-plugin/build/cjs/ios-widget/files/swift-utils.js.map +1 -0
- package/expo-plugin/build/cjs/ios-widget/files/swift.js +56 -26
- package/expo-plugin/build/cjs/ios-widget/files/swift.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/index.js +9 -3
- package/expo-plugin/build/cjs/ios-widget/index.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/podfile.js +38 -12
- package/expo-plugin/build/cjs/ios-widget/podfile.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/widgetPlist.js +34 -22
- package/expo-plugin/build/cjs/ios-widget/widgetPlist.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/xcode/buildPhases.js +194 -118
- package/expo-plugin/build/cjs/ios-widget/xcode/buildPhases.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/xcode/configurationList.js +30 -22
- package/expo-plugin/build/cjs/ios-widget/xcode/configurationList.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/xcode/fileReferences.js +50 -0
- package/expo-plugin/build/cjs/ios-widget/xcode/fileReferences.js.map +1 -0
- package/expo-plugin/build/cjs/ios-widget/xcode/groups.js +45 -43
- package/expo-plugin/build/cjs/ios-widget/xcode/groups.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/xcode/index.js +93 -91
- package/expo-plugin/build/cjs/ios-widget/xcode/index.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/xcode/mainAppSettings.js +41 -39
- package/expo-plugin/build/cjs/ios-widget/xcode/mainAppSettings.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/xcode/productFile.js +2 -2
- package/expo-plugin/build/cjs/ios-widget/xcode/productFile.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/xcode/target.js +29 -63
- package/expo-plugin/build/cjs/ios-widget/xcode/target.js.map +1 -1
- package/expo-plugin/build/cjs/utils/urlScheme.js +36 -14
- package/expo-plugin/build/cjs/utils/urlScheme.js.map +1 -1
- package/expo-plugin/build/cjs/validation.js +54 -0
- package/expo-plugin/build/cjs/validation.js.map +1 -1
- package/expo-plugin/build/esm/constants.js +17 -0
- package/expo-plugin/build/esm/constants.js.map +1 -1
- package/expo-plugin/build/esm/index.js +9 -1
- package/expo-plugin/build/esm/index.js.map +1 -1
- package/expo-plugin/build/esm/ios/index.js +1 -0
- package/expo-plugin/build/esm/ios/index.js.map +1 -1
- package/expo-plugin/build/esm/ios/infoPlist.js +28 -5
- package/expo-plugin/build/esm/ios/infoPlist.js.map +1 -1
- package/expo-plugin/build/esm/ios/serverUpdate.js +21 -0
- package/expo-plugin/build/esm/ios/serverUpdate.js.map +1 -0
- package/expo-plugin/build/esm/ios-widget/clientRendered.js +5 -5
- package/expo-plugin/build/esm/ios-widget/clientRendered.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/clientRenderedPrerender.js +6 -6
- package/expo-plugin/build/esm/ios-widget/clientRenderedPrerender.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/dynamic-live-activity/swift.js +122 -0
- package/expo-plugin/build/esm/ios-widget/dynamic-live-activity/swift.js.map +1 -0
- package/expo-plugin/build/esm/ios-widget/files/index.js +10 -3
- package/expo-plugin/build/esm/ios-widget/files/index.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/files/infoPlist.js +6 -3
- package/expo-plugin/build/esm/ios-widget/files/infoPlist.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/files/manifest.js +23 -1
- package/expo-plugin/build/esm/ios-widget/files/manifest.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/files/swift-utils.js +4 -0
- package/expo-plugin/build/esm/ios-widget/files/swift-utils.js.map +1 -0
- package/expo-plugin/build/esm/ios-widget/files/swift.js +50 -20
- package/expo-plugin/build/esm/ios-widget/files/swift.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/index.js +9 -3
- package/expo-plugin/build/esm/ios-widget/index.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/podfile.js +36 -11
- package/expo-plugin/build/esm/ios-widget/podfile.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/widgetPlist.js +34 -22
- package/expo-plugin/build/esm/ios-widget/widgetPlist.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/xcode/buildPhases.js +194 -117
- package/expo-plugin/build/esm/ios-widget/xcode/buildPhases.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/xcode/configurationList.js +31 -22
- package/expo-plugin/build/esm/ios-widget/xcode/configurationList.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/xcode/fileReferences.js +45 -0
- package/expo-plugin/build/esm/ios-widget/xcode/fileReferences.js.map +1 -0
- package/expo-plugin/build/esm/ios-widget/xcode/groups.js +45 -42
- package/expo-plugin/build/esm/ios-widget/xcode/groups.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/xcode/index.js +97 -96
- package/expo-plugin/build/esm/ios-widget/xcode/index.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/xcode/mainAppSettings.js +41 -39
- package/expo-plugin/build/esm/ios-widget/xcode/mainAppSettings.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/xcode/productFile.js +3 -2
- package/expo-plugin/build/esm/ios-widget/xcode/productFile.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/xcode/target.js +28 -62
- package/expo-plugin/build/esm/ios-widget/xcode/target.js.map +1 -1
- package/expo-plugin/build/esm/utils/urlScheme.js +34 -14
- package/expo-plugin/build/esm/utils/urlScheme.js.map +1 -1
- package/expo-plugin/build/esm/validation.js +54 -1
- package/expo-plugin/build/esm/validation.js.map +1 -1
- package/expo-plugin/build/types/constants.d.ts +10 -1
- package/expo-plugin/build/types/constants.d.ts.map +1 -1
- package/expo-plugin/build/types/index.d.ts +1 -1
- package/expo-plugin/build/types/index.d.ts.map +1 -1
- package/expo-plugin/build/types/ios/index.d.ts +2 -0
- package/expo-plugin/build/types/ios/index.d.ts.map +1 -1
- package/expo-plugin/build/types/ios/infoPlist.d.ts +2 -0
- package/expo-plugin/build/types/ios/infoPlist.d.ts.map +1 -1
- package/expo-plugin/build/types/ios/serverUpdate.d.ts +11 -0
- package/expo-plugin/build/types/ios/serverUpdate.d.ts.map +1 -0
- package/expo-plugin/build/types/ios-widget/clientRendered.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/clientRenderedPrerender.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/dynamic-live-activity/swift.d.ts +7 -0
- package/expo-plugin/build/types/ios-widget/dynamic-live-activity/swift.d.ts.map +1 -0
- package/expo-plugin/build/types/ios-widget/files/index.d.ts +3 -1
- package/expo-plugin/build/types/ios-widget/files/index.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/files/infoPlist.d.ts +2 -1
- package/expo-plugin/build/types/ios-widget/files/infoPlist.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/files/manifest.d.ts +9 -2
- package/expo-plugin/build/types/ios-widget/files/manifest.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/files/swift-utils.d.ts +2 -0
- package/expo-plugin/build/types/ios-widget/files/swift-utils.d.ts.map +1 -0
- package/expo-plugin/build/types/ios-widget/files/swift.d.ts +6 -2
- package/expo-plugin/build/types/ios-widget/files/swift.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/index.d.ts +3 -1
- package/expo-plugin/build/types/ios-widget/index.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/podfile.d.ts +19 -1
- package/expo-plugin/build/types/ios-widget/podfile.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/widgetPlist.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/xcode/buildPhases.d.ts +6 -8
- package/expo-plugin/build/types/ios-widget/xcode/buildPhases.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/xcode/configurationList.d.ts +15 -10
- package/expo-plugin/build/types/ios-widget/xcode/configurationList.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/xcode/fileReferences.d.ts +16 -0
- package/expo-plugin/build/types/ios-widget/xcode/fileReferences.d.ts.map +1 -0
- package/expo-plugin/build/types/ios-widget/xcode/groups.d.ts +0 -4
- package/expo-plugin/build/types/ios-widget/xcode/groups.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/xcode/index.d.ts +23 -3
- package/expo-plugin/build/types/ios-widget/xcode/index.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/xcode/mainAppSettings.d.ts +16 -4
- package/expo-plugin/build/types/ios-widget/xcode/mainAppSettings.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/xcode/productFile.d.ts +0 -4
- package/expo-plugin/build/types/ios-widget/xcode/productFile.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/xcode/target.d.ts +11 -26
- package/expo-plugin/build/types/ios-widget/xcode/target.d.ts.map +1 -1
- package/expo-plugin/build/types/types.d.ts +23 -4
- package/expo-plugin/build/types/types.d.ts.map +1 -1
- package/expo-plugin/build/types/utils/urlScheme.d.ts +16 -0
- package/expo-plugin/build/types/utils/urlScheme.d.ts.map +1 -1
- package/expo-plugin/build/types/validation.d.ts +2 -1
- package/expo-plugin/build/types/validation.d.ts.map +1 -1
- package/expo-plugin/src/constants.ts +24 -1
- package/expo-plugin/src/index.ts +14 -1
- package/expo-plugin/src/ios/index.ts +3 -0
- package/expo-plugin/src/ios/infoPlist.ts +33 -5
- package/expo-plugin/src/ios/serverUpdate.ts +29 -0
- package/expo-plugin/src/ios-widget/clientRendered.ts +9 -5
- package/expo-plugin/src/ios-widget/clientRenderedPrerender.ts +11 -6
- package/expo-plugin/src/ios-widget/dynamic-live-activity/swift.ts +138 -0
- package/expo-plugin/src/ios-widget/files/index.ts +15 -4
- package/expo-plugin/src/ios-widget/files/infoPlist.ts +17 -3
- package/expo-plugin/src/ios-widget/files/manifest.ts +42 -2
- package/expo-plugin/src/ios-widget/files/swift-utils.ts +3 -0
- package/expo-plugin/src/ios-widget/files/swift.ts +69 -22
- package/expo-plugin/src/ios-widget/index.ts +13 -3
- package/expo-plugin/src/ios-widget/podfile.ts +46 -13
- package/expo-plugin/src/ios-widget/widgetPlist.ts +37 -23
- package/expo-plugin/src/ios-widget/xcode/__fixtures__/fresh.pbxproj +197 -0
- package/expo-plugin/src/ios-widget/xcode/__fixtures__/with-existing-extension.pbxproj +321 -0
- package/expo-plugin/src/ios-widget/xcode/__fixtures__/with-per-config-signing.pbxproj +203 -0
- package/expo-plugin/src/ios-widget/xcode/__snapshots__/applyXcodeChanges.node.test.ts.snap +363 -0
- package/expo-plugin/src/ios-widget/xcode/__tests__/pbxConsistency.ts +130 -0
- package/expo-plugin/src/ios-widget/xcode/buildPhases.ts +210 -164
- package/expo-plugin/src/ios-widget/xcode/configurationList.ts +52 -35
- package/expo-plugin/src/ios-widget/xcode/fileReferences.ts +51 -0
- package/expo-plugin/src/ios-widget/xcode/groups.ts +52 -54
- package/expo-plugin/src/ios-widget/xcode/index.ts +124 -119
- package/expo-plugin/src/ios-widget/xcode/mainAppSettings.ts +59 -54
- package/expo-plugin/src/ios-widget/xcode/productFile.ts +3 -2
- package/expo-plugin/src/ios-widget/xcode/target.ts +31 -83
- package/expo-plugin/src/types.ts +28 -4
- package/expo-plugin/src/utils/urlScheme.ts +47 -17
- package/expo-plugin/src/validation.ts +76 -1
- package/ios/Package.swift +39 -4
- package/ios/VoltraWidget.podspec +1 -0
- package/ios/app/NativeVoltra.mm +126 -7
- package/ios/app/VoltraLiveActivityManager.swift +30 -0
- package/ios/app/VoltraLiveActivityService.swift +77 -5
- package/ios/app/VoltraModule.swift +117 -1
- package/ios/app/VoltraModuleImpl.swift +116 -2
- package/ios/app/VoltraViewComponentView.mm +3 -3
- package/ios/app/VoltraWidgetService.swift +147 -12
- package/ios/app/dynamic-live-activity/VoltraDynamicLiveActivityService.swift +97 -0
- package/ios/app/dynamic-live-activity/VoltraLiveActivityChronology.swift +68 -0
- package/ios/shared/DynamicWidgetPropsCodec.swift +51 -0
- package/ios/shared/DynamicWidgetPropsStorage.swift +53 -0
- package/ios/shared/DynamicWidgetPropsStore.swift +117 -0
- package/ios/shared/DynamicWidgetRenderCoordinator.swift +31 -0
- package/ios/shared/DynamicWidgetServerUpdate/DynamicWidgetServerFetchResolver.swift +34 -0
- package/ios/shared/DynamicWidgetServerUpdate/DynamicWidgetServerProps.swift +55 -0
- package/ios/shared/DynamicWidgetServerUpdate/DynamicWidgetServerPropsStore.swift +146 -0
- package/ios/shared/DynamicWidgetServerUpdate/DynamicWidgetServerUpdateRunner.swift +193 -0
- package/ios/shared/DynamicWidgetUpdater.swift +30 -0
- package/ios/shared/ServerWidgetContentResolver.swift +60 -0
- package/ios/shared/ServerWidgetResponseStore.swift +25 -0
- package/ios/shared/ShortNames.swift +6 -0
- package/ios/shared/VoltraConfig.swift +41 -0
- package/ios/shared/VoltraConstants.swift +19 -0
- package/ios/shared/VoltraElement.swift +127 -43
- package/ios/shared/VoltraEventBus.swift +52 -7
- package/ios/shared/VoltraJSRenderer.swift +93 -23
- package/ios/shared/VoltraNode.swift +7 -111
- package/ios/shared/VoltraRefreshIntent.swift +1 -1
- package/ios/shared/VoltraWidgetDefaults.swift +9 -1
- package/ios/shared/VoltraWidgetKind.swift +41 -0
- package/ios/shared/VoltraWidgetServerFetcher.swift +52 -107
- package/ios/shared/WidgetServer/VoltraWidgetAppearance.swift +17 -0
- package/ios/shared/WidgetServer/VoltraWidgetServer.swift +138 -0
- package/ios/shared/WidgetServer/WidgetCanonicalConfiguration.swift +77 -0
- package/ios/shared/WidgetServer/WidgetScope.swift +55 -0
- package/ios/shared/WidgetServer/WidgetServerEtagStore.swift +55 -0
- package/ios/shared/WidgetServer/WidgetServerFetcher.swift +179 -0
- package/ios/shared/WidgetServer/WidgetServerRequestBuilder.swift +114 -0
- package/ios/shared/WidgetServer/WidgetServerSettingsCodec.swift +47 -0
- package/ios/shared/WidgetServer/WidgetServerSettingsResolver.swift +129 -0
- package/ios/shared/WidgetServer/WidgetServerSettingsStore.swift +170 -0
- package/ios/shared/WidgetServer/WidgetServerSettingsValidator.swift +73 -0
- package/ios/shared/WidgetServer/WidgetServerUpdateSettings.swift +123 -0
- package/ios/shared/WidgetServer/WidgetServerUpdateSettingsJson.swift +115 -0
- package/ios/shared/dynamic-live-activity/DynamicLiveActivityPropsCodec.swift +13 -0
- package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityBundleSource.swift +156 -0
- package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityObserver.swift +97 -0
- package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityOperations.swift +105 -0
- package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityPayloadValidator.swift +55 -0
- package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityRegistry.swift +143 -0
- package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityRenderFailureQueue.swift +158 -0
- package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityRenderFailureReporter.swift +120 -0
- package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityRenderer.swift +370 -0
- package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityTypes.swift +87 -0
- package/ios/shared/dynamic-live-activity/VoltraLiveActivityOrder.swift +19 -0
- package/ios/target/VoltraClientWidgetRuntime.swift +60 -10
- package/ios/target/VoltraDynamicWidgetServerUpdateProvider.swift +204 -0
- package/ios/target/VoltraHomeWidget.swift +91 -92
- package/ios/target/VoltraWidget.swift +3 -1
- package/ios/ui/Extensions/VoltraNode+View.swift +113 -0
- package/ios/ui/Generated/Parameters/ChartParameters.swift +3 -0
- package/ios/ui/Helpers/VoltraDeepLinkResolver.swift +5 -3
- package/ios/ui/Helpers/VoltraProgressDriver.swift +6 -2
- package/ios/ui/Layout/VoltraFlexStackLayout.swift +9 -3
- package/ios/ui/Style/JSColorParser.swift +24 -8
- package/ios/ui/Style/JSGradientParser.swift +36 -12
- package/ios/ui/Style/JSStyleParser.swift +36 -12
- package/ios/ui/Style/LayoutStyle.swift +12 -4
- package/ios/ui/Views/VoltraChart.swift +160 -16
- package/ios/ui/Views/VoltraLinearGradient.swift +6 -2
- package/package.json +5 -5
- package/src/dynamic-widget/api.ts +25 -0
- package/src/events.ts +34 -0
- package/src/index.ts +23 -0
- package/src/live-activity/api.ts +2 -2
- package/src/live-activity/dynamic-api.ts +240 -0
- package/src/native/NativeVoltra.ts +22 -0
- package/src/types.ts +4 -0
- package/src/utils/enableDynamicLiveActivityHotReload.ts +50 -0
- package/src/utils/enableWidgetHotReload.ts +9 -16
- package/src/utils/useUpdateOnHMR.ts +3 -12
- package/src/widgets/server-credentials.ts +8 -0
- package/src/widgets/server-update.ts +84 -0
- /package/ios/shared/{VoltraKeychainHelper.swift → WidgetServer/VoltraKeychainHelper.swift} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ConfigPlugin, withPlugins } from '@expo/config-plugins'
|
|
2
2
|
|
|
3
|
-
import type { IOSWidgetConfig } from '../types'
|
|
3
|
+
import type { IOSDynamicLiveActivityConfig, IOSWidgetConfig } from '../types'
|
|
4
4
|
import { configureEasBuild } from './eas'
|
|
5
5
|
import { generateWidgetExtensionFiles } from './files'
|
|
6
6
|
import { withFonts } from './fonts'
|
|
@@ -13,11 +13,13 @@ export interface WithIOSProps {
|
|
|
13
13
|
bundleIdentifier: string
|
|
14
14
|
deploymentTarget: string
|
|
15
15
|
widgets?: IOSWidgetConfig[]
|
|
16
|
+
liveActivities?: IOSDynamicLiveActivityConfig[]
|
|
16
17
|
groupIdentifier?: string
|
|
17
18
|
keychainGroup?: string
|
|
18
19
|
fonts?: string[]
|
|
19
20
|
version: string
|
|
20
21
|
buildNumber: string
|
|
22
|
+
voltraVersion: string
|
|
21
23
|
}
|
|
22
24
|
|
|
23
25
|
/**
|
|
@@ -42,11 +44,13 @@ export const withIOS: ConfigPlugin<WithIOSProps> = (config, props) => {
|
|
|
42
44
|
bundleIdentifier,
|
|
43
45
|
deploymentTarget,
|
|
44
46
|
widgets,
|
|
47
|
+
liveActivities,
|
|
45
48
|
groupIdentifier,
|
|
46
49
|
keychainGroup,
|
|
47
50
|
fonts,
|
|
48
51
|
version,
|
|
49
52
|
buildNumber,
|
|
53
|
+
voltraVersion,
|
|
50
54
|
} = props
|
|
51
55
|
|
|
52
56
|
const plugins: [ConfigPlugin<any>, any][] = [
|
|
@@ -54,7 +58,10 @@ export const withIOS: ConfigPlugin<WithIOSProps> = (config, props) => {
|
|
|
54
58
|
...(fonts && fonts.length > 0 ? [[withFonts, { fonts, targetName }] as [ConfigPlugin<any>, any]] : []),
|
|
55
59
|
|
|
56
60
|
// 2. Configure Xcode project (creates the target - must run before fonts mod executes)
|
|
57
|
-
[
|
|
61
|
+
[
|
|
62
|
+
configureXcodeProject,
|
|
63
|
+
{ targetName, bundleIdentifier, deploymentTarget, widgets, liveActivities, version, buildNumber },
|
|
64
|
+
],
|
|
58
65
|
|
|
59
66
|
// 3. Configure Podfile for widget extension target
|
|
60
67
|
[configurePodfile, { targetName }],
|
|
@@ -66,7 +73,10 @@ export const withIOS: ConfigPlugin<WithIOSProps> = (config, props) => {
|
|
|
66
73
|
[configureEasBuild, { targetName, bundleIdentifier, groupIdentifier }],
|
|
67
74
|
|
|
68
75
|
// 6. Generate widget extension files (dangerous mod should run before plist patchers)
|
|
69
|
-
[
|
|
76
|
+
[
|
|
77
|
+
generateWidgetExtensionFiles,
|
|
78
|
+
{ targetName, widgets, liveActivities, groupIdentifier, keychainGroup, version, buildNumber, voltraVersion },
|
|
79
|
+
],
|
|
70
80
|
]
|
|
71
81
|
|
|
72
82
|
return withPlugins(config, plugins)
|
|
@@ -1,11 +1,23 @@
|
|
|
1
1
|
import { ConfigPlugin, withPodfile as withExpoPodfile } from '@expo/config-plugins'
|
|
2
2
|
|
|
3
|
+
const BEGIN_MARKER = '# @voltra-widget-target BEGIN'
|
|
4
|
+
const END_MARKER = '# @voltra-widget-target END'
|
|
5
|
+
|
|
6
|
+
// Matches a legacy (pre-marker) block emitted by older plugin versions: a bare header comment
|
|
7
|
+
// followed directly by the `target '<name>' do ... end` block, with no surrounding markers.
|
|
8
|
+
// Non-greedy up to the first line-start `end` — our generated block never nests another
|
|
9
|
+
// `do...end`, so this always lands on the block's own closing `end`.
|
|
10
|
+
const LEGACY_BLOCK_RE =
|
|
11
|
+
/\n?# Voltra Widget Extension Target\n# DO NOT MODIFY THIS FILE - IT IS AUTO-GENERATED BY THE VOLTRA PLUGIN\ntarget '[^']*' do\n[\s\S]*?\nend/
|
|
12
|
+
|
|
13
|
+
// Matches a marked block (any target name) end-to-end, inclusive of both markers.
|
|
14
|
+
const MARKED_BLOCK_RE = new RegExp(`${BEGIN_MARKER}[\\s\\S]*?${END_MARKER}`)
|
|
15
|
+
|
|
3
16
|
/**
|
|
4
|
-
* Generates the Podfile target content for the widget extension.
|
|
17
|
+
* Generates the Podfile target content for the widget extension (unwrapped, no markers).
|
|
5
18
|
*/
|
|
6
19
|
function getTargetContent(targetName: string): string {
|
|
7
|
-
return
|
|
8
|
-
# Voltra Widget Extension Target
|
|
20
|
+
return `# Voltra Widget Extension Target
|
|
9
21
|
# DO NOT MODIFY THIS FILE - IT IS AUTO-GENERATED BY THE VOLTRA PLUGIN
|
|
10
22
|
target '${targetName}' do
|
|
11
23
|
use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']
|
|
@@ -14,31 +26,52 @@ target '${targetName}' do
|
|
|
14
26
|
require 'pathname'
|
|
15
27
|
project_root = "#{Pod::Config.instance.installation_root}/.."
|
|
16
28
|
voltra_client_root = \`node --print "require.resolve('@use-voltra/ios-client/package.json', {paths: ['#{project_root}']})" 2>/dev/null\`.strip.gsub('/package.json', '')
|
|
29
|
+
raise "Voltra: could not resolve @use-voltra/ios-client from #{project_root}. Is @use-voltra/ios-client installed, and is node on PATH for pod install?" if voltra_client_root.empty?
|
|
17
30
|
voltra_widget_podspec_root = File.join(voltra_client_root, 'ios')
|
|
31
|
+
voltra_widget_podspec_root = File.realpath(voltra_widget_podspec_root) if File.exist?(voltra_widget_podspec_root)
|
|
18
32
|
podspec_dir_path = Pathname.new(voltra_widget_podspec_root).relative_path_from(Pathname.new(__dir__)).to_path
|
|
19
33
|
|
|
20
34
|
pod 'VoltraWidget', :path => podspec_dir_path
|
|
21
35
|
end`
|
|
22
36
|
}
|
|
23
37
|
|
|
38
|
+
function buildMarkedBlock(targetName: string): string {
|
|
39
|
+
return `${BEGIN_MARKER}\n${getTargetContent(targetName)}\n${END_MARKER}`
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Idempotently inserts/upgrades the Voltra widget target block in Podfile contents:
|
|
44
|
+
* - marked block already present → replaced in place (covers renamed targets too, since the
|
|
45
|
+
* markers are name-agnostic)
|
|
46
|
+
* - legacy (pre-marker) block present → replaced with the new marked block
|
|
47
|
+
* - neither present → appended
|
|
48
|
+
*/
|
|
49
|
+
export function upsertWidgetTarget(contents: string, targetName: string): string {
|
|
50
|
+
const markedBlock = buildMarkedBlock(targetName)
|
|
51
|
+
|
|
52
|
+
if (MARKED_BLOCK_RE.test(contents)) {
|
|
53
|
+
return contents.replace(MARKED_BLOCK_RE, markedBlock)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (LEGACY_BLOCK_RE.test(contents)) {
|
|
57
|
+
return contents.replace(LEGACY_BLOCK_RE, `\n${markedBlock}`)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return `${contents.trimEnd()}\n\n${markedBlock}\n`
|
|
61
|
+
}
|
|
62
|
+
|
|
24
63
|
export interface ConfigurePodfileProps {
|
|
25
64
|
targetName: string
|
|
26
65
|
}
|
|
27
66
|
|
|
28
67
|
/**
|
|
29
|
-
* Plugin step that adds the Podfile target for the widget extension.
|
|
68
|
+
* Plugin step that adds (or upgrades) the Podfile target for the widget extension.
|
|
30
69
|
*/
|
|
31
70
|
export const configurePodfile: ConfigPlugin<ConfigurePodfileProps> = (config, { targetName }) => {
|
|
32
71
|
return withExpoPodfile(config, (podfile) => {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
// Check if target already exists (avoid duplicates)
|
|
36
|
-
const targetMarker = "target '" + targetName + "'"
|
|
37
|
-
if (podfile.modResults.contents.includes(targetMarker)) {
|
|
38
|
-
return podfile
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
podfile.modResults.contents = podfile.modResults.contents + '\n' + targetContent
|
|
72
|
+
podfile.modResults.contents = upsertWidgetTarget(podfile.modResults.contents, targetName)
|
|
42
73
|
return podfile
|
|
43
74
|
})
|
|
44
75
|
}
|
|
76
|
+
|
|
77
|
+
export const __test__ = { BEGIN_MARKER, END_MARKER, getTargetContent }
|
|
@@ -3,9 +3,12 @@ import plist from '@expo/plist'
|
|
|
3
3
|
import { existsSync, readFileSync, writeFileSync } from 'fs'
|
|
4
4
|
import { join as joinPath } from 'path'
|
|
5
5
|
|
|
6
|
+
import { widgetKindOverrides } from '../constants'
|
|
6
7
|
import type { IOSWidgetConfig } from '../types'
|
|
7
8
|
import { detectClientRenderedWidgets } from './clientRendered'
|
|
8
9
|
import { logger } from '@use-voltra/expo-plugin'
|
|
10
|
+
import { resolveIOSWidgetServerUpdate } from '../ios/serverUpdate'
|
|
11
|
+
import { appendMissingURLSchemes, getAppURLSchemes } from '../utils/urlScheme'
|
|
9
12
|
|
|
10
13
|
export interface ConfigureMainAppPlistProps {
|
|
11
14
|
targetName: string
|
|
@@ -35,9 +38,9 @@ export const configureWidgetExtensionPlist: ConfigPlugin<ConfigureMainAppPlistPr
|
|
|
35
38
|
return config
|
|
36
39
|
}
|
|
37
40
|
|
|
38
|
-
const
|
|
41
|
+
const schemes = getAppURLSchemes(expoConfig)
|
|
39
42
|
|
|
40
|
-
if (
|
|
43
|
+
if (schemes.length > 0) {
|
|
41
44
|
const targetPath = joinPath(config.modRequest.platformProjectRoot, targetName)
|
|
42
45
|
const filePath = joinPath(targetPath, 'Info.plist')
|
|
43
46
|
if (!existsSync(filePath)) {
|
|
@@ -78,20 +81,8 @@ export const configureWidgetExtensionPlist: ConfigPlugin<ConfigureMainAppPlistPr
|
|
|
78
81
|
|
|
79
82
|
// Keep URL schemes in the widget extension so Live Activity links can be resolved
|
|
80
83
|
// from relative to absolute URLs (see VoltraDeepLinkResolver.swift).
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
(t) => Array.isArray(t?.CFBundleURLSchemes) && t.CFBundleURLSchemes.includes(scheme)
|
|
84
|
-
)
|
|
85
|
-
if (!hasScheme) {
|
|
86
|
-
content.CFBundleURLTypes = [
|
|
87
|
-
...existingTypes,
|
|
88
|
-
{
|
|
89
|
-
CFBundleURLSchemes: [scheme],
|
|
90
|
-
},
|
|
91
|
-
]
|
|
92
|
-
} else {
|
|
93
|
-
content.CFBundleURLTypes = existingTypes
|
|
94
|
-
}
|
|
84
|
+
// Uses the same scheme list as the app, so a relative link resolves to the app's first scheme.
|
|
85
|
+
content.CFBundleURLTypes = appendMissingURLSchemes((content.CFBundleURLTypes as any[]) || [], schemes)
|
|
95
86
|
|
|
96
87
|
// Only set group identifier if provided
|
|
97
88
|
if (groupIdentifier) {
|
|
@@ -105,18 +96,31 @@ export const configureWidgetExtensionPlist: ConfigPlugin<ConfigureMainAppPlistPr
|
|
|
105
96
|
const serverRefresh: Record<string, boolean> = {}
|
|
106
97
|
|
|
107
98
|
for (const widget of widgets) {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
99
|
+
const serverUpdate = resolveIOSWidgetServerUpdate(widget)
|
|
100
|
+
|
|
101
|
+
if (!serverUpdate) {
|
|
102
|
+
continue
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Every server-driven widget gets an interval, so this dictionary's keys are the set
|
|
106
|
+
// of server-driven widget ids. A URL is written only when app.json set one.
|
|
107
|
+
serverIntervals[widget.id] = serverUpdate.intervalMinutes
|
|
108
|
+
|
|
109
|
+
if (serverUpdate.url !== undefined) {
|
|
110
|
+
serverUrls[widget.id] = serverUpdate.url
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (serverUpdate.refresh) {
|
|
114
|
+
serverRefresh[widget.id] = true
|
|
114
115
|
}
|
|
115
116
|
}
|
|
116
117
|
|
|
118
|
+
if (Object.keys(serverIntervals).length > 0) {
|
|
119
|
+
;(content as any)['Voltra_WidgetServerIntervals'] = serverIntervals
|
|
120
|
+
}
|
|
121
|
+
|
|
117
122
|
if (Object.keys(serverUrls).length > 0) {
|
|
118
123
|
;(content as any)['Voltra_WidgetServerUrls'] = serverUrls
|
|
119
|
-
;(content as any)['Voltra_WidgetServerIntervals'] = serverIntervals
|
|
120
124
|
}
|
|
121
125
|
|
|
122
126
|
if (Object.keys(serverRefresh).length > 0) {
|
|
@@ -124,6 +128,16 @@ export const configureWidgetExtensionPlist: ConfigPlugin<ConfigureMainAppPlistPr
|
|
|
124
128
|
}
|
|
125
129
|
}
|
|
126
130
|
|
|
131
|
+
// Custom widget kinds, so the extension maps ids to kinds too (see VoltraWidgetKind.swift).
|
|
132
|
+
// Deleted when no widget pins one, so a `kind` dropped from the config does not linger in
|
|
133
|
+
// an Info.plist that a previous prebuild wrote.
|
|
134
|
+
const widgetKinds = widgetKindOverrides(widgets)
|
|
135
|
+
if (widgetKinds) {
|
|
136
|
+
;(content as any)['Voltra_WidgetKinds'] = widgetKinds
|
|
137
|
+
} else {
|
|
138
|
+
delete (content as any)['Voltra_WidgetKinds']
|
|
139
|
+
}
|
|
140
|
+
|
|
127
141
|
// Add Keychain group for shared credential access
|
|
128
142
|
if (keychainGroup) {
|
|
129
143
|
;(content as any)['Voltra_KeychainGroup'] = keychainGroup
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
// !$*UTF8*$!
|
|
2
|
+
{
|
|
3
|
+
archiveVersion = 1;
|
|
4
|
+
classes = {
|
|
5
|
+
};
|
|
6
|
+
objectVersion = 54;
|
|
7
|
+
objects = {
|
|
8
|
+
|
|
9
|
+
/* Begin PBXBuildFile section */
|
|
10
|
+
13B07FBF1A68108700A75B9A /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.swift */; };
|
|
11
|
+
13B07FC11A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
|
|
12
|
+
13B07FC21A68108700A75B9A /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB61A68108700A75B9A /* Info.plist */; };
|
|
13
|
+
/* End PBXBuildFile section */
|
|
14
|
+
|
|
15
|
+
/* Begin PBXFileReference section */
|
|
16
|
+
13B07F961A680F5B00A75B9A /* voltraexample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = voltraexample.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
17
|
+
13B07FB01A68108700A75B9A /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = voltraexample/AppDelegate.swift; sourceTree = "<group>"; };
|
|
18
|
+
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = voltraexample/Images.xcassets; sourceTree = "<group>"; };
|
|
19
|
+
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = voltraexample/Info.plist; sourceTree = "<group>"; };
|
|
20
|
+
/* End PBXFileReference section */
|
|
21
|
+
|
|
22
|
+
/* Begin PBXFrameworksBuildPhase section */
|
|
23
|
+
13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
|
|
24
|
+
isa = PBXFrameworksBuildPhase;
|
|
25
|
+
buildActionMask = 2147483647;
|
|
26
|
+
files = (
|
|
27
|
+
);
|
|
28
|
+
runOnlyForDeploymentPostprocessing = 0;
|
|
29
|
+
};
|
|
30
|
+
/* End PBXFrameworksBuildPhase section */
|
|
31
|
+
|
|
32
|
+
/* Begin PBXGroup section */
|
|
33
|
+
83CBB9F61A601CBA00E9B192 = {
|
|
34
|
+
isa = PBXGroup;
|
|
35
|
+
children = (
|
|
36
|
+
13B07FAE1A68108700A75B9A /* voltraexample */,
|
|
37
|
+
83CBBA001A601CBA00E9B192 /* Products */,
|
|
38
|
+
);
|
|
39
|
+
indentWidth = 2;
|
|
40
|
+
sourceTree = "<group>";
|
|
41
|
+
tabWidth = 2;
|
|
42
|
+
usesTabs = 0;
|
|
43
|
+
};
|
|
44
|
+
13B07FAE1A68108700A75B9A /* voltraexample */ = {
|
|
45
|
+
isa = PBXGroup;
|
|
46
|
+
children = (
|
|
47
|
+
13B07FB01A68108700A75B9A /* AppDelegate.swift */,
|
|
48
|
+
13B07FB51A68108700A75B9A /* Images.xcassets */,
|
|
49
|
+
13B07FB61A68108700A75B9A /* Info.plist */,
|
|
50
|
+
);
|
|
51
|
+
name = voltraexample;
|
|
52
|
+
sourceTree = "<group>";
|
|
53
|
+
};
|
|
54
|
+
83CBBA001A601CBA00E9B192 /* Products */ = {
|
|
55
|
+
isa = PBXGroup;
|
|
56
|
+
children = (
|
|
57
|
+
13B07F961A680F5B00A75B9A /* voltraexample.app */,
|
|
58
|
+
);
|
|
59
|
+
name = Products;
|
|
60
|
+
sourceTree = "<group>";
|
|
61
|
+
};
|
|
62
|
+
/* End PBXGroup section */
|
|
63
|
+
|
|
64
|
+
/* Begin PBXNativeTarget section */
|
|
65
|
+
13B07F861A680F5B00A75B9A /* voltraexample */ = {
|
|
66
|
+
isa = PBXNativeTarget;
|
|
67
|
+
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "voltraexample" */;
|
|
68
|
+
buildPhases = (
|
|
69
|
+
13B07F871A680F5B00A75B9A /* Sources */,
|
|
70
|
+
13B07F8C1A680F5B00A75B9A /* Frameworks */,
|
|
71
|
+
13B07F8E1A680F5B00A75B9A /* Resources */,
|
|
72
|
+
);
|
|
73
|
+
buildRules = (
|
|
74
|
+
);
|
|
75
|
+
dependencies = (
|
|
76
|
+
);
|
|
77
|
+
name = voltraexample;
|
|
78
|
+
productName = voltraexample;
|
|
79
|
+
productReference = 13B07F961A680F5B00A75B9A /* voltraexample.app */;
|
|
80
|
+
productType = "com.apple.product-type.application";
|
|
81
|
+
};
|
|
82
|
+
/* End PBXNativeTarget section */
|
|
83
|
+
|
|
84
|
+
/* Begin PBXProject section */
|
|
85
|
+
83CBB9F71A601CBA00E9B192 /* Project object */ = {
|
|
86
|
+
isa = PBXProject;
|
|
87
|
+
attributes = {
|
|
88
|
+
LastUpgradeCheck = 1210;
|
|
89
|
+
TargetAttributes = {
|
|
90
|
+
13B07F861A680F5B00A75B9A = {
|
|
91
|
+
LastSwiftMigration = 1250;
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "voltraexample" */;
|
|
96
|
+
compatibilityVersion = "Xcode 12.0";
|
|
97
|
+
developmentRegion = en;
|
|
98
|
+
hasScannedForEncodings = 0;
|
|
99
|
+
knownRegions = (
|
|
100
|
+
en,
|
|
101
|
+
Base,
|
|
102
|
+
);
|
|
103
|
+
mainGroup = 83CBB9F61A601CBA00E9B192;
|
|
104
|
+
productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
|
|
105
|
+
projectDirPath = "";
|
|
106
|
+
projectRoot = "";
|
|
107
|
+
targets = (
|
|
108
|
+
13B07F861A680F5B00A75B9A /* voltraexample */,
|
|
109
|
+
);
|
|
110
|
+
};
|
|
111
|
+
/* End PBXProject section */
|
|
112
|
+
|
|
113
|
+
/* Begin PBXResourcesBuildPhase section */
|
|
114
|
+
13B07F8E1A680F5B00A75B9A /* Resources */ = {
|
|
115
|
+
isa = PBXResourcesBuildPhase;
|
|
116
|
+
buildActionMask = 2147483647;
|
|
117
|
+
files = (
|
|
118
|
+
13B07FC11A68108700A75B9A /* Images.xcassets in Resources */,
|
|
119
|
+
13B07FC21A68108700A75B9A /* Info.plist in Resources */,
|
|
120
|
+
);
|
|
121
|
+
runOnlyForDeploymentPostprocessing = 0;
|
|
122
|
+
};
|
|
123
|
+
/* End PBXResourcesBuildPhase section */
|
|
124
|
+
|
|
125
|
+
/* Begin PBXSourcesBuildPhase section */
|
|
126
|
+
13B07F871A680F5B00A75B9A /* Sources */ = {
|
|
127
|
+
isa = PBXSourcesBuildPhase;
|
|
128
|
+
buildActionMask = 2147483647;
|
|
129
|
+
files = (
|
|
130
|
+
13B07FBF1A68108700A75B9A /* AppDelegate.swift in Sources */,
|
|
131
|
+
);
|
|
132
|
+
runOnlyForDeploymentPostprocessing = 0;
|
|
133
|
+
};
|
|
134
|
+
/* End PBXSourcesBuildPhase section */
|
|
135
|
+
|
|
136
|
+
/* Begin XCBuildConfiguration section */
|
|
137
|
+
13B07F941A680F5B00A75B9A /* Debug */ = {
|
|
138
|
+
isa = XCBuildConfiguration;
|
|
139
|
+
buildSettings = {
|
|
140
|
+
INFOPLIST_FILE = voltraexample/Info.plist;
|
|
141
|
+
PRODUCT_BUNDLE_IDENTIFIER = com.voltra.example;
|
|
142
|
+
PRODUCT_NAME = voltraexample;
|
|
143
|
+
SWIFT_VERSION = 5.0;
|
|
144
|
+
};
|
|
145
|
+
name = Debug;
|
|
146
|
+
};
|
|
147
|
+
13B07F951A680F5B00A75B9A /* Release */ = {
|
|
148
|
+
isa = XCBuildConfiguration;
|
|
149
|
+
buildSettings = {
|
|
150
|
+
INFOPLIST_FILE = voltraexample/Info.plist;
|
|
151
|
+
PRODUCT_BUNDLE_IDENTIFIER = com.voltra.example;
|
|
152
|
+
PRODUCT_NAME = voltraexample;
|
|
153
|
+
SWIFT_VERSION = 5.0;
|
|
154
|
+
};
|
|
155
|
+
name = Release;
|
|
156
|
+
};
|
|
157
|
+
83CBBA201A601CBA00E9B192 /* Debug */ = {
|
|
158
|
+
isa = XCBuildConfiguration;
|
|
159
|
+
buildSettings = {
|
|
160
|
+
IPHONEOS_DEPLOYMENT_TARGET = 15.1;
|
|
161
|
+
SDKROOT = iphoneos;
|
|
162
|
+
};
|
|
163
|
+
name = Debug;
|
|
164
|
+
};
|
|
165
|
+
83CBBA211A601CBA00E9B192 /* Release */ = {
|
|
166
|
+
isa = XCBuildConfiguration;
|
|
167
|
+
buildSettings = {
|
|
168
|
+
IPHONEOS_DEPLOYMENT_TARGET = 15.1;
|
|
169
|
+
SDKROOT = iphoneos;
|
|
170
|
+
};
|
|
171
|
+
name = Release;
|
|
172
|
+
};
|
|
173
|
+
/* End XCBuildConfiguration section */
|
|
174
|
+
|
|
175
|
+
/* Begin XCConfigurationList section */
|
|
176
|
+
13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "voltraexample" */ = {
|
|
177
|
+
isa = XCConfigurationList;
|
|
178
|
+
buildConfigurations = (
|
|
179
|
+
13B07F941A680F5B00A75B9A /* Debug */,
|
|
180
|
+
13B07F951A680F5B00A75B9A /* Release */,
|
|
181
|
+
);
|
|
182
|
+
defaultConfigurationIsVisible = 0;
|
|
183
|
+
defaultConfigurationName = Release;
|
|
184
|
+
};
|
|
185
|
+
83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "voltraexample" */ = {
|
|
186
|
+
isa = XCConfigurationList;
|
|
187
|
+
buildConfigurations = (
|
|
188
|
+
83CBBA201A601CBA00E9B192 /* Debug */,
|
|
189
|
+
83CBBA211A601CBA00E9B192 /* Release */,
|
|
190
|
+
);
|
|
191
|
+
defaultConfigurationIsVisible = 0;
|
|
192
|
+
defaultConfigurationName = Release;
|
|
193
|
+
};
|
|
194
|
+
/* End XCConfigurationList section */
|
|
195
|
+
};
|
|
196
|
+
rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
|
|
197
|
+
}
|