@use-voltra/expo-plugin 1.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 +34 -0
- package/build/cjs/android/files/assets.js +259 -0
- package/build/cjs/android/files/assets.js.map +1 -0
- package/build/cjs/android/files/fonts.js +69 -0
- package/build/cjs/android/files/fonts.js.map +1 -0
- package/build/cjs/android/files/index.js +81 -0
- package/build/cjs/android/files/index.js.map +1 -0
- package/build/cjs/android/files/initialStates.js +83 -0
- package/build/cjs/android/files/initialStates.js.map +1 -0
- package/build/cjs/android/files/kotlin.js +142 -0
- package/build/cjs/android/files/kotlin.js.map +1 -0
- package/build/cjs/android/files/xml.js +247 -0
- package/build/cjs/android/files/xml.js.map +1 -0
- package/build/cjs/android/index.js +33 -0
- package/build/cjs/android/index.js.map +1 -0
- package/build/cjs/android/manifest.js +63 -0
- package/build/cjs/android/manifest.js.map +1 -0
- package/build/cjs/constants.js +48 -0
- package/build/cjs/constants.js.map +1 -0
- package/build/cjs/index.js +71 -0
- package/build/cjs/index.js.map +1 -0
- package/build/cjs/ios/eas.js +28 -0
- package/build/cjs/ios/eas.js.map +1 -0
- package/build/cjs/ios/entitlements.js +46 -0
- package/build/cjs/ios/entitlements.js.map +1 -0
- package/build/cjs/ios/index.js +39 -0
- package/build/cjs/ios/index.js.map +1 -0
- package/build/cjs/ios/infoPlist.js +51 -0
- package/build/cjs/ios/infoPlist.js.map +1 -0
- package/build/cjs/ios/pushNotifications.js +22 -0
- package/build/cjs/ios/pushNotifications.js.map +1 -0
- package/build/cjs/ios-widget/eas.js +66 -0
- package/build/cjs/ios-widget/eas.js.map +1 -0
- package/build/cjs/ios-widget/files/assets.js +199 -0
- package/build/cjs/ios-widget/files/assets.js.map +1 -0
- package/build/cjs/ios-widget/files/entitlements.js +77 -0
- package/build/cjs/ios-widget/files/entitlements.js.map +1 -0
- package/build/cjs/ios-widget/files/index.js +92 -0
- package/build/cjs/ios-widget/files/index.js.map +1 -0
- package/build/cjs/ios-widget/files/infoPlist.js +91 -0
- package/build/cjs/ios-widget/files/infoPlist.js.map +1 -0
- package/build/cjs/ios-widget/files/swift.js +256 -0
- package/build/cjs/ios-widget/files/swift.js.map +1 -0
- package/build/cjs/ios-widget/fonts.js +151 -0
- package/build/cjs/ios-widget/fonts.js.map +1 -0
- package/build/cjs/ios-widget/index.js +46 -0
- package/build/cjs/ios-widget/index.js.map +1 -0
- package/build/cjs/ios-widget/podfile.js +43 -0
- package/build/cjs/ios-widget/podfile.js.map +1 -0
- package/build/cjs/ios-widget/widgetPlist.js +99 -0
- package/build/cjs/ios-widget/widgetPlist.js.map +1 -0
- package/build/cjs/ios-widget/xcode/buildPhases.js +245 -0
- package/build/cjs/ios-widget/xcode/buildPhases.js.map +1 -0
- package/build/cjs/ios-widget/xcode/configurationList.js +91 -0
- package/build/cjs/ios-widget/xcode/configurationList.js.map +1 -0
- package/build/cjs/ios-widget/xcode/groups.js +65 -0
- package/build/cjs/ios-widget/xcode/groups.js.map +1 -0
- package/build/cjs/ios-widget/xcode/index.js +155 -0
- package/build/cjs/ios-widget/xcode/index.js.map +1 -0
- package/build/cjs/ios-widget/xcode/mainAppSettings.js +71 -0
- package/build/cjs/ios-widget/xcode/mainAppSettings.js.map +1 -0
- package/build/cjs/ios-widget/xcode/productFile.js +74 -0
- package/build/cjs/ios-widget/xcode/productFile.js.map +1 -0
- package/build/cjs/ios-widget/xcode/target.js +113 -0
- package/build/cjs/ios-widget/xcode/target.js.map +1 -0
- package/build/cjs/package.json +3 -0
- package/build/cjs/types.js +3 -0
- package/build/cjs/types.js.map +1 -0
- package/build/cjs/utils/entitlements.js +21 -0
- package/build/cjs/utils/entitlements.js.map +1 -0
- package/build/cjs/utils/fileDiscovery.js +107 -0
- package/build/cjs/utils/fileDiscovery.js.map +1 -0
- package/build/cjs/utils/fonts.js +75 -0
- package/build/cjs/utils/fonts.js.map +1 -0
- package/build/cjs/utils/logger.js +51 -0
- package/build/cjs/utils/logger.js.map +1 -0
- package/build/cjs/utils/prerender.js +191 -0
- package/build/cjs/utils/prerender.js.map +1 -0
- package/build/cjs/utils/urlScheme.js +40 -0
- package/build/cjs/utils/urlScheme.js.map +1 -0
- package/build/cjs/validation.js +231 -0
- package/build/cjs/validation.js.map +1 -0
- package/build/esm/android/files/assets.js +223 -0
- package/build/esm/android/files/assets.js.map +1 -0
- package/build/esm/android/files/fonts.js +33 -0
- package/build/esm/android/files/fonts.js.map +1 -0
- package/build/esm/android/files/index.js +77 -0
- package/build/esm/android/files/index.js.map +1 -0
- package/build/esm/android/files/initialStates.js +44 -0
- package/build/esm/android/files/initialStates.js.map +1 -0
- package/build/esm/android/files/kotlin.js +103 -0
- package/build/esm/android/files/kotlin.js.map +1 -0
- package/build/esm/android/files/xml.js +206 -0
- package/build/esm/android/files/xml.js.map +1 -0
- package/build/esm/android/index.js +29 -0
- package/build/esm/android/index.js.map +1 -0
- package/build/esm/android/manifest.js +59 -0
- package/build/esm/android/manifest.js.map +1 -0
- package/build/esm/constants.js +45 -0
- package/build/esm/constants.js.map +1 -0
- package/build/esm/index.js +69 -0
- package/build/esm/index.js.map +1 -0
- package/build/esm/ios/eas.js +24 -0
- package/build/esm/ios/eas.js.map +1 -0
- package/build/esm/ios/entitlements.js +42 -0
- package/build/esm/ios/entitlements.js.map +1 -0
- package/build/esm/ios/index.js +34 -0
- package/build/esm/ios/index.js.map +1 -0
- package/build/esm/ios/infoPlist.js +47 -0
- package/build/esm/ios/infoPlist.js.map +1 -0
- package/build/esm/ios/pushNotifications.js +18 -0
- package/build/esm/ios/pushNotifications.js.map +1 -0
- package/build/esm/ios-widget/eas.js +62 -0
- package/build/esm/ios-widget/eas.js.map +1 -0
- package/build/esm/ios-widget/files/assets.js +163 -0
- package/build/esm/ios-widget/files/assets.js.map +1 -0
- package/build/esm/ios-widget/files/entitlements.js +37 -0
- package/build/esm/ios-widget/files/entitlements.js.map +1 -0
- package/build/esm/ios-widget/files/index.js +55 -0
- package/build/esm/ios-widget/files/index.js.map +1 -0
- package/build/esm/ios-widget/files/infoPlist.js +55 -0
- package/build/esm/ios-widget/files/infoPlist.js.map +1 -0
- package/build/esm/ios-widget/files/swift.js +217 -0
- package/build/esm/ios-widget/files/swift.js.map +1 -0
- package/build/esm/ios-widget/fonts.js +111 -0
- package/build/esm/ios-widget/fonts.js.map +1 -0
- package/build/esm/ios-widget/index.js +42 -0
- package/build/esm/ios-widget/index.js.map +1 -0
- package/build/esm/ios-widget/podfile.js +39 -0
- package/build/esm/ios-widget/podfile.js.map +1 -0
- package/build/esm/ios-widget/widgetPlist.js +92 -0
- package/build/esm/ios-widget/widgetPlist.js.map +1 -0
- package/build/esm/ios-widget/xcode/buildPhases.js +208 -0
- package/build/esm/ios-widget/xcode/buildPhases.js.map +1 -0
- package/build/esm/ios-widget/xcode/configurationList.js +87 -0
- package/build/esm/ios-widget/xcode/configurationList.js.map +1 -0
- package/build/esm/ios-widget/xcode/groups.js +61 -0
- package/build/esm/ios-widget/xcode/groups.js.map +1 -0
- package/build/esm/ios-widget/xcode/index.js +118 -0
- package/build/esm/ios-widget/xcode/index.js.map +1 -0
- package/build/esm/ios-widget/xcode/mainAppSettings.js +68 -0
- package/build/esm/ios-widget/xcode/mainAppSettings.js.map +1 -0
- package/build/esm/ios-widget/xcode/productFile.js +70 -0
- package/build/esm/ios-widget/xcode/productFile.js.map +1 -0
- package/build/esm/ios-widget/xcode/target.js +108 -0
- package/build/esm/ios-widget/xcode/target.js.map +1 -0
- package/build/esm/package.json +3 -0
- package/build/esm/types.js +2 -0
- package/build/esm/types.js.map +1 -0
- package/build/esm/utils/entitlements.js +18 -0
- package/build/esm/utils/entitlements.js.map +1 -0
- package/build/esm/utils/fileDiscovery.js +71 -0
- package/build/esm/utils/fileDiscovery.js.map +1 -0
- package/build/esm/utils/fonts.js +39 -0
- package/build/esm/utils/fonts.js.map +1 -0
- package/build/esm/utils/logger.js +48 -0
- package/build/esm/utils/logger.js.map +1 -0
- package/build/esm/utils/prerender.js +152 -0
- package/build/esm/utils/prerender.js.map +1 -0
- package/build/esm/utils/urlScheme.js +37 -0
- package/build/esm/utils/urlScheme.js.map +1 -0
- package/build/esm/validation.js +193 -0
- package/build/esm/validation.js.map +1 -0
- package/build/types/android/files/assets.d.ts +26 -0
- package/build/types/android/files/assets.d.ts.map +1 -0
- package/build/types/android/files/fonts.d.ts +19 -0
- package/build/types/android/files/fonts.d.ts.map +1 -0
- package/build/types/android/files/index.d.ts +21 -0
- package/build/types/android/files/index.d.ts.map +1 -0
- package/build/types/android/files/initialStates.d.ts +14 -0
- package/build/types/android/files/initialStates.d.ts.map +1 -0
- package/build/types/android/files/kotlin.d.ts +11 -0
- package/build/types/android/files/kotlin.d.ts.map +1 -0
- package/build/types/android/files/xml.d.ts +25 -0
- package/build/types/android/files/xml.d.ts.map +1 -0
- package/build/types/android/index.d.ts +12 -0
- package/build/types/android/index.d.ts.map +1 -0
- package/build/types/android/manifest.d.ts +15 -0
- package/build/types/android/manifest.d.ts.map +1 -0
- package/build/types/constants.d.ts +29 -0
- package/build/types/constants.d.ts.map +1 -0
- package/build/types/index.d.ts +13 -0
- package/build/types/index.d.ts.map +1 -0
- package/build/types/ios/eas.d.ts +12 -0
- package/build/types/ios/eas.d.ts.map +1 -0
- package/build/types/ios/entitlements.d.ts +14 -0
- package/build/types/ios/entitlements.d.ts.map +1 -0
- package/build/types/ios/index.d.ts +19 -0
- package/build/types/ios/index.d.ts.map +1 -0
- package/build/types/ios/infoPlist.d.ts +21 -0
- package/build/types/ios/infoPlist.d.ts.map +1 -0
- package/build/types/ios/pushNotifications.d.ts +10 -0
- package/build/types/ios/pushNotifications.d.ts.map +1 -0
- package/build/types/ios-widget/eas.d.ts +15 -0
- package/build/types/ios-widget/eas.d.ts.map +1 -0
- package/build/types/ios-widget/files/assets.d.ts +13 -0
- package/build/types/ios-widget/files/assets.d.ts.map +1 -0
- package/build/types/ios-widget/files/entitlements.d.ts +17 -0
- package/build/types/ios-widget/files/entitlements.d.ts.map +1 -0
- package/build/types/ios-widget/files/index.d.ts +24 -0
- package/build/types/ios-widget/files/index.d.ts.map +1 -0
- package/build/types/ios-widget/files/infoPlist.d.ts +10 -0
- package/build/types/ios-widget/files/infoPlist.d.ts.map +1 -0
- package/build/types/ios-widget/files/swift.d.ts +15 -0
- package/build/types/ios-widget/files/swift.d.ts.map +1 -0
- package/build/types/ios-widget/fonts.d.ts +22 -0
- package/build/types/ios-widget/fonts.d.ts.map +1 -0
- package/build/types/ios-widget/index.d.ts +31 -0
- package/build/types/ios-widget/index.d.ts.map +1 -0
- package/build/types/ios-widget/podfile.d.ts +9 -0
- package/build/types/ios-widget/podfile.d.ts.map +1 -0
- package/build/types/ios-widget/widgetPlist.d.ts +20 -0
- package/build/types/ios-widget/widgetPlist.d.ts.map +1 -0
- package/build/types/ios-widget/xcode/buildPhases.d.ts +25 -0
- package/build/types/ios-widget/xcode/buildPhases.d.ts.map +1 -0
- package/build/types/ios-widget/xcode/configurationList.d.ts +20 -0
- package/build/types/ios-widget/xcode/configurationList.d.ts.map +1 -0
- package/build/types/ios-widget/xcode/groups.d.ts +15 -0
- package/build/types/ios-widget/xcode/groups.d.ts.map +1 -0
- package/build/types/ios-widget/xcode/index.d.ts +20 -0
- package/build/types/ios-widget/xcode/index.d.ts.map +1 -0
- package/build/types/ios-widget/xcode/mainAppSettings.d.ts +15 -0
- package/build/types/ios-widget/xcode/mainAppSettings.d.ts.map +1 -0
- package/build/types/ios-widget/xcode/productFile.d.ts +14 -0
- package/build/types/ios-widget/xcode/productFile.d.ts.map +1 -0
- package/build/types/ios-widget/xcode/target.d.ts +42 -0
- package/build/types/ios-widget/xcode/target.d.ts.map +1 -0
- package/build/types/types.d.ts +261 -0
- package/build/types/types.d.ts.map +1 -0
- package/build/types/utils/entitlements.d.ts +9 -0
- package/build/types/utils/entitlements.d.ts.map +1 -0
- package/build/types/utils/fileDiscovery.d.ts +13 -0
- package/build/types/utils/fileDiscovery.d.ts.map +1 -0
- package/build/types/utils/fonts.d.ts +2 -0
- package/build/types/utils/fonts.d.ts.map +1 -0
- package/build/types/utils/logger.d.ts +30 -0
- package/build/types/utils/logger.d.ts.map +1 -0
- package/build/types/utils/prerender.d.ts +25 -0
- package/build/types/utils/prerender.d.ts.map +1 -0
- package/build/types/utils/urlScheme.d.ts +10 -0
- package/build/types/utils/urlScheme.d.ts.map +1 -0
- package/build/types/validation.d.ts +17 -0
- package/build/types/validation.d.ts.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.generateWidgetExtensionFiles = void 0;
|
|
37
|
+
const config_plugins_1 = require("@expo/config-plugins");
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const assets_1 = require("./assets");
|
|
41
|
+
const entitlements_1 = require("./entitlements");
|
|
42
|
+
const infoPlist_1 = require("./infoPlist");
|
|
43
|
+
const swift_1 = require("./swift");
|
|
44
|
+
/**
|
|
45
|
+
* Plugin step that generates all widget extension files.
|
|
46
|
+
*
|
|
47
|
+
* This creates:
|
|
48
|
+
* - Info.plist (required extension manifest)
|
|
49
|
+
* - Assets.xcassets/ (asset catalog with user images)
|
|
50
|
+
* - VoltraWidgetBundle.swift (widget bundle definition)
|
|
51
|
+
* - VoltraWidgetInitialStates.swift (pre-rendered widget states)
|
|
52
|
+
* - {targetName}.entitlements (entitlements file)
|
|
53
|
+
*
|
|
54
|
+
* This should run before configureXcodeProject so the files exist when Xcode project is configured.
|
|
55
|
+
*/
|
|
56
|
+
const generateWidgetExtensionFiles = (config, props) => {
|
|
57
|
+
const { targetName, widgets, groupIdentifier, keychainGroup, version, buildNumber } = props;
|
|
58
|
+
return (0, config_plugins_1.withDangerousMod)(config, [
|
|
59
|
+
'ios',
|
|
60
|
+
async (config) => {
|
|
61
|
+
if (config.modRequest.introspect) {
|
|
62
|
+
return config;
|
|
63
|
+
}
|
|
64
|
+
const { platformProjectRoot, projectRoot } = config.modRequest;
|
|
65
|
+
const targetPath = path.join(platformProjectRoot, targetName);
|
|
66
|
+
// Ensure target directory exists
|
|
67
|
+
if (!fs.existsSync(targetPath)) {
|
|
68
|
+
fs.mkdirSync(targetPath, { recursive: true });
|
|
69
|
+
}
|
|
70
|
+
// Generate Info.plist
|
|
71
|
+
(0, infoPlist_1.generateInfoPlist)(targetPath, targetName, version, buildNumber);
|
|
72
|
+
// Generate Assets.xcassets and copy user images
|
|
73
|
+
(0, assets_1.generateAssets)({ targetPath });
|
|
74
|
+
// Generate Swift files (widget bundle, initial states)
|
|
75
|
+
await (0, swift_1.generateSwiftFiles)({
|
|
76
|
+
targetPath,
|
|
77
|
+
projectRoot,
|
|
78
|
+
widgets,
|
|
79
|
+
});
|
|
80
|
+
// Generate entitlements file (may be empty if no groupIdentifier or keychainGroup)
|
|
81
|
+
(0, entitlements_1.generateEntitlements)({
|
|
82
|
+
targetPath,
|
|
83
|
+
targetName,
|
|
84
|
+
groupIdentifier,
|
|
85
|
+
keychainGroup,
|
|
86
|
+
});
|
|
87
|
+
return config;
|
|
88
|
+
},
|
|
89
|
+
]);
|
|
90
|
+
};
|
|
91
|
+
exports.generateWidgetExtensionFiles = generateWidgetExtensionFiles;
|
|
92
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ios-widget/files/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAAqE;AACrE,uCAAwB;AACxB,2CAA4B;AAG5B,qCAAyC;AACzC,iDAAqD;AACrD,2CAA+C;AAC/C,mCAA4C;AAW5C;;;;;;;;;;;GAWG;AACI,MAAM,4BAA4B,GAAoD,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;IAC7G,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IAE3F,OAAO,IAAA,iCAAgB,EAAC,MAAM,EAAE;QAC9B,KAAK;QACL,KAAK,EAAE,MAAM,EAAE,EAAE;YACf,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;gBACjC,OAAO,MAAM,CAAA;YACf,CAAC;YAED,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,UAAU,CAAA;YAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAA;YAE7D,iCAAiC;YACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC/C,CAAC;YAED,sBAAsB;YACtB,IAAA,6BAAiB,EAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAA;YAE/D,gDAAgD;YAChD,IAAA,uBAAc,EAAC,EAAE,UAAU,EAAE,CAAC,CAAA;YAE9B,uDAAuD;YACvD,MAAM,IAAA,0BAAkB,EAAC;gBACvB,UAAU;gBACV,WAAW;gBACX,OAAO;aACR,CAAC,CAAA;YAEF,mFAAmF;YACnF,IAAA,mCAAoB,EAAC;gBACnB,UAAU;gBACV,UAAU;gBACV,eAAe;gBACf,aAAa;aACd,CAAC,CAAA;YAEF,OAAO,MAAM,CAAA;QACf,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAA;AA1CY,QAAA,4BAA4B,gCA0CxC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.generateInfoPlist = generateInfoPlist;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const logger_1 = require("../../utils/logger");
|
|
40
|
+
/**
|
|
41
|
+
* Generates the Info.plist content for a WidgetKit extension.
|
|
42
|
+
*
|
|
43
|
+
* This includes version information and the required WidgetKit extension point.
|
|
44
|
+
* Version keys are written directly to the plist following the Expo pattern.
|
|
45
|
+
*/
|
|
46
|
+
function generateInfoPlistContent(targetName, version, buildNumber) {
|
|
47
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
48
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
49
|
+
<plist version="1.0">
|
|
50
|
+
<dict>
|
|
51
|
+
<key>CFBundleDevelopmentRegion</key>
|
|
52
|
+
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
|
53
|
+
<key>CFBundleDisplayName</key>
|
|
54
|
+
<string>${targetName}</string>
|
|
55
|
+
<key>CFBundleExecutable</key>
|
|
56
|
+
<string>$(EXECUTABLE_NAME)</string>
|
|
57
|
+
<key>CFBundleIdentifier</key>
|
|
58
|
+
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
|
59
|
+
<key>CFBundleInfoDictionaryVersion</key>
|
|
60
|
+
<string>6.0</string>
|
|
61
|
+
<key>CFBundleName</key>
|
|
62
|
+
<string>$(PRODUCT_NAME)</string>
|
|
63
|
+
<key>CFBundlePackageType</key>
|
|
64
|
+
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
|
65
|
+
<key>CFBundleShortVersionString</key>
|
|
66
|
+
<string>${version}</string>
|
|
67
|
+
<key>CFBundleVersion</key>
|
|
68
|
+
<string>${buildNumber}</string>
|
|
69
|
+
<key>NSExtension</key>
|
|
70
|
+
<dict>
|
|
71
|
+
<key>NSExtensionPointIdentifier</key>
|
|
72
|
+
<string>com.apple.widgetkit-extension</string>
|
|
73
|
+
</dict>
|
|
74
|
+
</dict>
|
|
75
|
+
</plist>
|
|
76
|
+
`;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Generates the Info.plist file for the widget extension.
|
|
80
|
+
*
|
|
81
|
+
* @param targetPath - Path to the widget extension target directory
|
|
82
|
+
* @param targetName - The widget extension target name (used for CFBundleDisplayName)
|
|
83
|
+
* @param version - The app version (CFBundleShortVersionString)
|
|
84
|
+
* @param buildNumber - The build number (CFBundleVersion)
|
|
85
|
+
*/
|
|
86
|
+
function generateInfoPlist(targetPath, targetName, version, buildNumber) {
|
|
87
|
+
const infoPlistPath = path.join(targetPath, 'Info.plist');
|
|
88
|
+
fs.writeFileSync(infoPlistPath, generateInfoPlistContent(targetName, version, buildNumber));
|
|
89
|
+
logger_1.logger.info('Generated Info.plist');
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=infoPlist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infoPlist.js","sourceRoot":"","sources":["../../../../src/ios-widget/files/infoPlist.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDA,8CAIC;AAxDD,uCAAwB;AACxB,2CAA4B;AAE5B,+CAA2C;AAE3C;;;;;GAKG;AACH,SAAS,wBAAwB,CAAC,UAAkB,EAAE,OAAe,EAAE,WAAmB;IACxF,OAAO;;;;;;;WAOE,UAAU;;;;;;;;;;;;WAYV,OAAO;;WAEP,WAAW;;;;;;;;CAQrB,CAAA;AACD,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,iBAAiB,CAAC,UAAkB,EAAE,UAAkB,EAAE,OAAe,EAAE,WAAmB;IAC5G,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IACzD,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,wBAAwB,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAA;IAC3F,eAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;AACrC,CAAC"}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.generateSwiftFiles = generateSwiftFiles;
|
|
40
|
+
const dedent_1 = __importDefault(require("dedent"));
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const constants_1 = require("../../constants");
|
|
44
|
+
const logger_1 = require("../../utils/logger");
|
|
45
|
+
const prerender_1 = require("../../utils/prerender");
|
|
46
|
+
// ============================================================================
|
|
47
|
+
// Main Function
|
|
48
|
+
// ============================================================================
|
|
49
|
+
/**
|
|
50
|
+
* Generates all Swift files for the widget extension.
|
|
51
|
+
*
|
|
52
|
+
* This creates:
|
|
53
|
+
* - VoltraWidgetInitialStates.swift (pre-rendered widget states)
|
|
54
|
+
* - VoltraWidgetBundle.swift (widget bundle definition)
|
|
55
|
+
*/
|
|
56
|
+
async function generateSwiftFiles(options) {
|
|
57
|
+
const { targetPath, projectRoot, widgets } = options;
|
|
58
|
+
// Dynamic import for ESM module compatibility
|
|
59
|
+
// voltra/server is an ESM module, but the plugin is compiled to CommonJS
|
|
60
|
+
const serverModuleId = 'voltra/server';
|
|
61
|
+
const { renderWidgetToString } = (await Promise.resolve(`${serverModuleId}`).then(s => __importStar(require(s))));
|
|
62
|
+
// Prerender widget initial states if any widgets have initialStatePath configured
|
|
63
|
+
const prerenderedStates = await (0, prerender_1.prerenderWidgetState)(widgets || [], projectRoot, renderWidgetToString);
|
|
64
|
+
// Generate the initial states Swift file
|
|
65
|
+
const initialStatesContent = generateInitialStatesSwift(prerenderedStates);
|
|
66
|
+
const initialStatesPath = path.join(targetPath, 'VoltraWidgetInitialStates.swift');
|
|
67
|
+
fs.writeFileSync(initialStatesPath, initialStatesContent);
|
|
68
|
+
logger_1.logger.info(`Generated VoltraWidgetInitialStates.swift with ${prerenderedStates.size} pre-rendered widget states`);
|
|
69
|
+
// Generate the widget bundle Swift file
|
|
70
|
+
const widgetBundleContent = widgets && widgets.length > 0 ? generateWidgetBundleSwift(widgets) : generateDefaultWidgetBundleSwift();
|
|
71
|
+
const widgetBundlePath = path.join(targetPath, 'VoltraWidgetBundle.swift');
|
|
72
|
+
fs.writeFileSync(widgetBundlePath, widgetBundleContent);
|
|
73
|
+
logger_1.logger.info(`Generated VoltraWidgetBundle.swift with ${widgets?.length ?? 0} home screen widgets`);
|
|
74
|
+
}
|
|
75
|
+
// ============================================================================
|
|
76
|
+
// Widget Bundle
|
|
77
|
+
// ============================================================================
|
|
78
|
+
/**
|
|
79
|
+
* Generates Swift code for a single widget struct
|
|
80
|
+
*/
|
|
81
|
+
function generateWidgetStruct(widget) {
|
|
82
|
+
const families = widget.supportedFamilies ?? constants_1.DEFAULT_WIDGET_FAMILIES;
|
|
83
|
+
const familiesSwift = families.map((f) => constants_1.WIDGET_FAMILY_MAP[f]).join(', ');
|
|
84
|
+
// Sanitize the widget id for use as a Swift identifier
|
|
85
|
+
const structName = `VoltraWidget_${widget.id}`;
|
|
86
|
+
return (0, dedent_1.default) `
|
|
87
|
+
public struct ${structName}: Widget {
|
|
88
|
+
private let widgetId = "${widget.id}"
|
|
89
|
+
|
|
90
|
+
public init() {}
|
|
91
|
+
|
|
92
|
+
public var body: some WidgetConfiguration {
|
|
93
|
+
StaticConfiguration(
|
|
94
|
+
kind: "Voltra_Widget_${widget.id}",
|
|
95
|
+
provider: VoltraHomeWidgetProvider(
|
|
96
|
+
widgetId: widgetId,
|
|
97
|
+
initialState: VoltraWidgetInitialStates.getInitialState(for: widgetId)
|
|
98
|
+
)
|
|
99
|
+
) { entry in
|
|
100
|
+
VoltraHomeWidgetView(entry: entry)
|
|
101
|
+
}
|
|
102
|
+
.configurationDisplayName("${widget.displayName}")
|
|
103
|
+
.description("${widget.description}")
|
|
104
|
+
.supportedFamilies([${familiesSwift}])
|
|
105
|
+
.contentMarginsDisabled()
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
`;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Generates the VoltraWidgetBundle.swift file content with configured widgets
|
|
112
|
+
*/
|
|
113
|
+
function generateWidgetBundleSwift(widgets) {
|
|
114
|
+
// Generate widget structs
|
|
115
|
+
const widgetStructs = widgets.map(generateWidgetStruct).join('\n\n');
|
|
116
|
+
// Generate widget bundle body entries
|
|
117
|
+
const widgetInstances = widgets.map((w) => `VoltraWidget_${w.id}()`).join('\n ');
|
|
118
|
+
return (0, dedent_1.default) `
|
|
119
|
+
//
|
|
120
|
+
// VoltraWidgetBundle.swift
|
|
121
|
+
//
|
|
122
|
+
// Auto-generated by Voltra config plugin.
|
|
123
|
+
// This file defines which Voltra widgets are available in your app.
|
|
124
|
+
//
|
|
125
|
+
|
|
126
|
+
import SwiftUI
|
|
127
|
+
import WidgetKit
|
|
128
|
+
import VoltraWidget
|
|
129
|
+
|
|
130
|
+
@main
|
|
131
|
+
struct VoltraWidgetBundle: WidgetBundle {
|
|
132
|
+
var body: some Widget {
|
|
133
|
+
// Live Activity (with Watch/CarPlay support)
|
|
134
|
+
VoltraWidget()
|
|
135
|
+
|
|
136
|
+
// Home Screen Widgets
|
|
137
|
+
${widgetInstances}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// MARK: - Home Screen Widget Definitions
|
|
142
|
+
|
|
143
|
+
${widgetStructs}
|
|
144
|
+
`;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Generates the VoltraWidgetBundle.swift file content when no widgets are configured
|
|
148
|
+
* (only Live Activities)
|
|
149
|
+
*/
|
|
150
|
+
function generateDefaultWidgetBundleSwift() {
|
|
151
|
+
return (0, dedent_1.default) `
|
|
152
|
+
//
|
|
153
|
+
// VoltraWidgetBundle.swift
|
|
154
|
+
//
|
|
155
|
+
// This file defines which Voltra widgets are available in your app.
|
|
156
|
+
// You can customize which widgets to include by adding or removing them below.
|
|
157
|
+
//
|
|
158
|
+
|
|
159
|
+
import SwiftUI
|
|
160
|
+
import WidgetKit
|
|
161
|
+
import VoltraWidget // Import Voltra widgets
|
|
162
|
+
|
|
163
|
+
@main
|
|
164
|
+
struct VoltraWidgetBundle: WidgetBundle {
|
|
165
|
+
var body: some Widget {
|
|
166
|
+
// Live Activity (with Watch/CarPlay support)
|
|
167
|
+
VoltraWidget()
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
`;
|
|
171
|
+
}
|
|
172
|
+
// ============================================================================
|
|
173
|
+
// Initial States
|
|
174
|
+
// ============================================================================
|
|
175
|
+
/**
|
|
176
|
+
* Generates Swift code that bundles pre-rendered widget initial states.
|
|
177
|
+
*/
|
|
178
|
+
function generateInitialStatesSwift(prerenderedStates) {
|
|
179
|
+
if (prerenderedStates.size === 0) {
|
|
180
|
+
return generateEmptyInitialStatesSwift();
|
|
181
|
+
}
|
|
182
|
+
// Generate the bundled states dictionary
|
|
183
|
+
const stateEntries = Array.from(prerenderedStates.entries())
|
|
184
|
+
.map(([widgetId, json]) => {
|
|
185
|
+
const delimiter = getSwiftRawStringDelimiter(json);
|
|
186
|
+
return `"${widgetId}": ${delimiter}"${json}"${delimiter}`;
|
|
187
|
+
})
|
|
188
|
+
.join(',\n ');
|
|
189
|
+
return (0, dedent_1.default) `
|
|
190
|
+
//
|
|
191
|
+
// VoltraWidgetInitialStates.swift
|
|
192
|
+
//
|
|
193
|
+
// Auto-generated by Voltra config plugin.
|
|
194
|
+
// Contains pre-rendered initial states for home screen widgets.
|
|
195
|
+
//
|
|
196
|
+
|
|
197
|
+
import Foundation
|
|
198
|
+
|
|
199
|
+
public enum VoltraWidgetInitialStates {
|
|
200
|
+
private static let bundledStates: [String: String] = [
|
|
201
|
+
${stateEntries}
|
|
202
|
+
]
|
|
203
|
+
|
|
204
|
+
/// Get the bundled initial state JSON for a widget.
|
|
205
|
+
/// Returns nil if no initial state was configured for the widget.
|
|
206
|
+
public static func getInitialState(for widgetId: String) -> Data? {
|
|
207
|
+
guard let jsonString = bundledStates[widgetId] else { return nil }
|
|
208
|
+
return jsonString.data(using: .utf8)
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
`;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Generates empty Swift code when no widgets have initial states configured.
|
|
215
|
+
*/
|
|
216
|
+
function generateEmptyInitialStatesSwift() {
|
|
217
|
+
return (0, dedent_1.default) `
|
|
218
|
+
//
|
|
219
|
+
// VoltraWidgetInitialStates.swift
|
|
220
|
+
//
|
|
221
|
+
// Auto-generated by Voltra config plugin.
|
|
222
|
+
// No widget initial states configured.
|
|
223
|
+
//
|
|
224
|
+
|
|
225
|
+
import Foundation
|
|
226
|
+
|
|
227
|
+
public enum VoltraWidgetInitialStates {
|
|
228
|
+
/// Get the bundled initial state JSON for a widget.
|
|
229
|
+
/// Always returns nil since no initial states are configured.
|
|
230
|
+
public static func getInitialState(for widgetId: String) -> Data? {
|
|
231
|
+
return nil
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
`;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Determines the appropriate Swift raw string delimiter for a given string.
|
|
238
|
+
* Counts the maximum consecutive '#' characters after a '"' in the content
|
|
239
|
+
* and returns a delimiter with one more '#' than that maximum.
|
|
240
|
+
*
|
|
241
|
+
* For example:
|
|
242
|
+
* - Content has no '"#' → returns '#'
|
|
243
|
+
* - Content has '"#' (1 hash) → returns '##'
|
|
244
|
+
* - Content has '"##' (2 hashes) → returns '###'
|
|
245
|
+
*/
|
|
246
|
+
function getSwiftRawStringDelimiter(str) {
|
|
247
|
+
// Find all sequences of '#' that follow a '"'
|
|
248
|
+
const matches = str.match(/"#+/g);
|
|
249
|
+
if (!matches) {
|
|
250
|
+
return '#';
|
|
251
|
+
}
|
|
252
|
+
// Find the maximum number of consecutive '#' after a '"'
|
|
253
|
+
const maxHashes = Math.max(...matches.map((m) => m.length - 1)); // -1 to exclude the '"'
|
|
254
|
+
return '#'.repeat(maxHashes + 1);
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=swift.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swift.js","sourceRoot":"","sources":["../../../../src/ios-widget/files/swift.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Font configuration for Live Activity extension.
|
|
4
|
+
*
|
|
5
|
+
* This code is adapted from expo-font to support custom fonts in Live Activities.
|
|
6
|
+
* @see https://github.com/expo/expo/tree/main/packages/expo-font/plugin
|
|
7
|
+
*
|
|
8
|
+
* I would love to reuse the existing expo-font infrastructure, but it's not that easy to do. I'll most likely revisit it later.
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
44
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
45
|
+
};
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
exports.withFonts = void 0;
|
|
48
|
+
const config_plugins_1 = require("@expo/config-plugins");
|
|
49
|
+
const plist_1 = __importDefault(require("@expo/plist"));
|
|
50
|
+
const fs_1 = require("fs");
|
|
51
|
+
const path = __importStar(require("path"));
|
|
52
|
+
const logger_1 = require("../utils/logger");
|
|
53
|
+
const fonts_1 = require("../utils/fonts");
|
|
54
|
+
/**
|
|
55
|
+
* Plugin that adds custom fonts to the Live Activity extension.
|
|
56
|
+
*
|
|
57
|
+
* @param config - The Expo config
|
|
58
|
+
* @param fonts - Array of font file paths or directories
|
|
59
|
+
* @param targetName - Name of the Live Activity extension target
|
|
60
|
+
* @returns Modified config
|
|
61
|
+
*/
|
|
62
|
+
const withFonts = (config, { fonts, targetName }) => {
|
|
63
|
+
if (!fonts || fonts.length === 0) {
|
|
64
|
+
return config;
|
|
65
|
+
}
|
|
66
|
+
config = addFontsToTarget(config, fonts, targetName);
|
|
67
|
+
config = addFontsToPlist(config, fonts, targetName);
|
|
68
|
+
return config;
|
|
69
|
+
};
|
|
70
|
+
exports.withFonts = withFonts;
|
|
71
|
+
/**
|
|
72
|
+
* Adds font files to the Live Activity extension target.
|
|
73
|
+
* This ensures fonts are bundled with the extension and accessible at runtime.
|
|
74
|
+
*/
|
|
75
|
+
function addFontsToTarget(config, fonts, targetName) {
|
|
76
|
+
return (0, config_plugins_1.withXcodeProject)(config, async (config) => {
|
|
77
|
+
if (config.modRequest.introspect) {
|
|
78
|
+
return config;
|
|
79
|
+
}
|
|
80
|
+
const resolvedFonts = await (0, fonts_1.resolveFontPaths)(fonts, config.modRequest.projectRoot);
|
|
81
|
+
const project = config.modResults;
|
|
82
|
+
const platformProjectRoot = config.modRequest.platformProjectRoot;
|
|
83
|
+
const targetUuid = project.findTargetKey(targetName);
|
|
84
|
+
if (targetUuid == null) {
|
|
85
|
+
throw new Error(`Target ${targetName} not found in Xcode project. Report this issue to the Voltra team.`);
|
|
86
|
+
}
|
|
87
|
+
config_plugins_1.IOSConfig.XcodeUtils.ensureGroupRecursively(project, 'VoltraResources');
|
|
88
|
+
for (const font of resolvedFonts) {
|
|
89
|
+
const fontPath = path.relative(platformProjectRoot, font);
|
|
90
|
+
config_plugins_1.IOSConfig.XcodeUtils.addResourceFileToGroup({
|
|
91
|
+
filepath: fontPath,
|
|
92
|
+
groupName: 'VoltraResources',
|
|
93
|
+
project,
|
|
94
|
+
isBuildFile: true,
|
|
95
|
+
verbose: true,
|
|
96
|
+
targetUuid,
|
|
97
|
+
});
|
|
98
|
+
logger_1.logger.info(`Added font file: ${path.basename(font)}`);
|
|
99
|
+
}
|
|
100
|
+
return config;
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Adds font filenames to the Live Activity extension's Info.plist UIAppFonts array.
|
|
105
|
+
* This makes iOS aware of the custom fonts and allows them to be used in SwiftUI.
|
|
106
|
+
*/
|
|
107
|
+
function addFontsToPlist(config, fonts, targetName) {
|
|
108
|
+
return (0, config_plugins_1.withDangerousMod)(config, [
|
|
109
|
+
'ios',
|
|
110
|
+
async (config) => {
|
|
111
|
+
if (config.modRequest.introspect) {
|
|
112
|
+
return config;
|
|
113
|
+
}
|
|
114
|
+
const resolvedFonts = await (0, fonts_1.resolveFontPaths)(fonts, config.modRequest.projectRoot);
|
|
115
|
+
const platformProjectRoot = config.modRequest.platformProjectRoot;
|
|
116
|
+
// Read the Live Activity extension's Info.plist directly
|
|
117
|
+
const targetPath = path.join(platformProjectRoot, targetName);
|
|
118
|
+
const infoPlistPath = path.join(targetPath, 'Info.plist');
|
|
119
|
+
try {
|
|
120
|
+
const plistContent = plist_1.default.parse((0, fs_1.readFileSync)(infoPlistPath, 'utf8'));
|
|
121
|
+
// Get existing fonts or initialize empty array
|
|
122
|
+
const existingFonts = getUIAppFonts(plistContent);
|
|
123
|
+
// Add new fonts
|
|
124
|
+
const fontList = resolvedFonts.map((font) => path.basename(font));
|
|
125
|
+
const allFonts = [...existingFonts, ...fontList];
|
|
126
|
+
plistContent.UIAppFonts = Array.from(new Set(allFonts));
|
|
127
|
+
// Write back to file
|
|
128
|
+
(0, fs_1.writeFileSync)(infoPlistPath, plist_1.default.build(plistContent));
|
|
129
|
+
logger_1.logger.info(`Added ${fontList.length} font(s) to ${targetName} Info.plist`);
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
logger_1.logger.warn(`Could not update Info.plist for fonts: ${error}`);
|
|
133
|
+
}
|
|
134
|
+
return config;
|
|
135
|
+
},
|
|
136
|
+
]);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Retrieves existing UIAppFonts from Info.plist.
|
|
140
|
+
*
|
|
141
|
+
* @param infoPlist - Info.plist object
|
|
142
|
+
* @returns Array of font filenames
|
|
143
|
+
*/
|
|
144
|
+
function getUIAppFonts(infoPlist) {
|
|
145
|
+
const fonts = infoPlist['UIAppFonts'];
|
|
146
|
+
if (fonts != null && Array.isArray(fonts) && fonts.every((font) => typeof font === 'string')) {
|
|
147
|
+
return fonts;
|
|
148
|
+
}
|
|
149
|
+
return [];
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=fonts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fonts.js","sourceRoot":"","sources":["../../../src/ios-widget/fonts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.withIOS = void 0;
|
|
4
|
+
const config_plugins_1 = require("@expo/config-plugins");
|
|
5
|
+
const eas_1 = require("./eas");
|
|
6
|
+
const files_1 = require("./files");
|
|
7
|
+
const fonts_1 = require("./fonts");
|
|
8
|
+
const podfile_1 = require("./podfile");
|
|
9
|
+
const widgetPlist_1 = require("./widgetPlist");
|
|
10
|
+
const xcode_1 = require("./xcode");
|
|
11
|
+
/**
|
|
12
|
+
* Main iOS configuration plugin.
|
|
13
|
+
*
|
|
14
|
+
* This orchestrates all iOS-related configuration in the correct order:
|
|
15
|
+
* 1. Add custom fonts (if provided)
|
|
16
|
+
* 2. Configure Xcode project (targets, build phases, groups)
|
|
17
|
+
* 3. Configure Podfile for widget extension
|
|
18
|
+
* 4. Configure main app Info.plist (URL schemes)
|
|
19
|
+
* 5. Configure EAS build settings
|
|
20
|
+
* 6. Generate widget extension files (Swift, assets, plist, entitlements)
|
|
21
|
+
*
|
|
22
|
+
* NOTE: Expo mods execute in REVERSE registration order. Plugins that depend
|
|
23
|
+
* on modifications from other plugins must be registered BEFORE their dependencies.
|
|
24
|
+
* For example, fonts plugin needs the target created by configureXcodeProject,
|
|
25
|
+
* so fonts must be registered before configureXcodeProject.
|
|
26
|
+
*/
|
|
27
|
+
const withIOS = (config, props) => {
|
|
28
|
+
const { targetName, bundleIdentifier, deploymentTarget, widgets, groupIdentifier, keychainGroup, fonts, version, buildNumber, } = props;
|
|
29
|
+
const plugins = [
|
|
30
|
+
// 1. Add custom fonts if provided
|
|
31
|
+
...(fonts && fonts.length > 0 ? [[fonts_1.withFonts, { fonts, targetName }]] : []),
|
|
32
|
+
// 2. Configure Xcode project (creates the target - must run before fonts mod executes)
|
|
33
|
+
[xcode_1.configureXcodeProject, { targetName, bundleIdentifier, deploymentTarget }],
|
|
34
|
+
// 3. Configure Podfile for widget extension target
|
|
35
|
+
[podfile_1.configurePodfile, { targetName }],
|
|
36
|
+
// 4. Configure main app Info.plist (URL schemes, widget extension plist)
|
|
37
|
+
[widgetPlist_1.configureWidgetExtensionPlist, { targetName, groupIdentifier, widgets, keychainGroup }],
|
|
38
|
+
// 5. Configure EAS build settings
|
|
39
|
+
[eas_1.configureEasBuild, { targetName, bundleIdentifier, groupIdentifier }],
|
|
40
|
+
// 6. Generate widget extension files (dangerous mod should run before plist patchers)
|
|
41
|
+
[files_1.generateWidgetExtensionFiles, { targetName, widgets, groupIdentifier, keychainGroup, version, buildNumber }],
|
|
42
|
+
];
|
|
43
|
+
return (0, config_plugins_1.withPlugins)(config, plugins);
|
|
44
|
+
};
|
|
45
|
+
exports.withIOS = withIOS;
|
|
46
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ios-widget/index.ts"],"names":[],"mappings":";;;AAAA,yDAAgE;AAGhE,+BAAyC;AACzC,mCAAsD;AACtD,mCAAmC;AACnC,uCAA4C;AAC5C,+CAA6D;AAC7D,mCAA+C;AAc/C;;;;;;;;;;;;;;;GAeG;AACI,MAAM,OAAO,GAA+B,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;IACnE,MAAM,EACJ,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,OAAO,EACP,eAAe,EACf,aAAa,EACb,KAAK,EACL,OAAO,EACP,WAAW,GACZ,GAAG,KAAK,CAAA;IAET,MAAM,OAAO,GAA+B;QAC1C,kCAAkC;QAClC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAS,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAA6B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEtG,uFAAuF;QACvF,CAAC,6BAAqB,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;QAE3E,mDAAmD;QACnD,CAAC,0BAAgB,EAAE,EAAE,UAAU,EAAE,CAAC;QAElC,yEAAyE;QACzE,CAAC,2CAA6B,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;QAExF,kCAAkC;QAClC,CAAC,uBAAiB,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC;QAEtE,sFAAsF;QACtF,CAAC,oCAA4B,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;KAC9G,CAAA;IAED,OAAO,IAAA,4BAAW,EAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AACrC,CAAC,CAAA;AAlCY,QAAA,OAAO,WAkCnB"}
|