@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,61 @@
|
|
|
1
|
+
const pbxFile = require('xcode/lib/pbxFile');
|
|
2
|
+
/**
|
|
3
|
+
* Adds a PBXGroup for the widget extension files.
|
|
4
|
+
*/
|
|
5
|
+
export function addPbxGroup(xcodeProject, options) {
|
|
6
|
+
const { targetName, widgetFiles } = options;
|
|
7
|
+
const { swiftFiles, intentFiles, assetDirectories, entitlementFiles, plistFiles } = widgetFiles;
|
|
8
|
+
// Add PBX group with all widget files
|
|
9
|
+
const { uuid: pbxGroupUuid } = xcodeProject.addPbxGroup([...swiftFiles, ...intentFiles, ...entitlementFiles, ...plistFiles, ...assetDirectories], targetName, targetName);
|
|
10
|
+
// Add PBXGroup to top level group
|
|
11
|
+
const groups = xcodeProject.hash.project.objects['PBXGroup'];
|
|
12
|
+
if (pbxGroupUuid) {
|
|
13
|
+
Object.keys(groups).forEach(function (key) {
|
|
14
|
+
if (groups[key].name === undefined && groups[key].path === undefined) {
|
|
15
|
+
xcodeProject.addToPbxGroup(pbxGroupUuid, key);
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Ensures a PBXGroup exists for the widget extension files.
|
|
22
|
+
*/
|
|
23
|
+
export function ensurePbxGroup(xcodeProject, options) {
|
|
24
|
+
const { targetName, widgetFiles } = options;
|
|
25
|
+
const { swiftFiles, intentFiles, assetDirectories, entitlementFiles, plistFiles } = widgetFiles;
|
|
26
|
+
const allFiles = [...swiftFiles, ...intentFiles, ...entitlementFiles, ...plistFiles, ...assetDirectories];
|
|
27
|
+
const existingGroup = xcodeProject.pbxGroupByName(targetName);
|
|
28
|
+
if (!existingGroup) {
|
|
29
|
+
addPbxGroup(xcodeProject, options);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (!existingGroup.children) {
|
|
33
|
+
existingGroup.children = [];
|
|
34
|
+
}
|
|
35
|
+
for (const filePath of allFiles) {
|
|
36
|
+
const file = new pbxFile(filePath);
|
|
37
|
+
const fileRef = ensureFileReference(xcodeProject, filePath);
|
|
38
|
+
const alreadyInGroup = existingGroup.children.some((child) => child.value === fileRef || child.comment === file.basename);
|
|
39
|
+
if (!alreadyInGroup) {
|
|
40
|
+
existingGroup.children.push({ value: fileRef, comment: file.basename });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function ensureFileReference(xcodeProject, filePath) {
|
|
45
|
+
const fileReferenceSection = xcodeProject.pbxFileReferenceSection();
|
|
46
|
+
const file = new pbxFile(filePath);
|
|
47
|
+
for (const key of Object.keys(fileReferenceSection)) {
|
|
48
|
+
if (/_comment$/.test(key)) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
const entry = fileReferenceSection[key];
|
|
52
|
+
const entryPath = typeof entry?.path === 'string' ? entry.path.replace(/^"|"$/g, '') : '';
|
|
53
|
+
if (entryPath === file.path || entryPath === filePath) {
|
|
54
|
+
return key;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
file.fileRef = xcodeProject.generateUuid();
|
|
58
|
+
xcodeProject.addToPbxFileReferenceSection(file);
|
|
59
|
+
return file.fileRef;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=groups.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groups.js","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/groups.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { withXcodeProject } from '@expo/config-plugins';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { getWidgetFiles } from '../../utils/fileDiscovery';
|
|
4
|
+
import { addBuildPhases, ensureBuildPhases } from './buildPhases';
|
|
5
|
+
import { addXCConfigurationList, ensureXCConfigurationList } from './configurationList';
|
|
6
|
+
import { addPbxGroup, ensurePbxGroup } from './groups';
|
|
7
|
+
import { getMainAppTargetSettings } from './mainAppSettings';
|
|
8
|
+
import { addProductFile, ensureProductFile } from './productFile';
|
|
9
|
+
import { configureTarget, ensureTargetAttributes, ensureTargetDependency } from './target';
|
|
10
|
+
/**
|
|
11
|
+
* Plugin step that configures the Xcode project for the widget extension.
|
|
12
|
+
*
|
|
13
|
+
* This:
|
|
14
|
+
* - Adds XCConfigurationList with Debug/Release configurations
|
|
15
|
+
* - Adds the product file (.appex)
|
|
16
|
+
* - Configures the native target
|
|
17
|
+
* - Adds build phases (Sources, CopyFiles, Frameworks, Resources)
|
|
18
|
+
* - Adds PBXGroup for widget files
|
|
19
|
+
*
|
|
20
|
+
* This should run after generateWidgetExtensionFiles so the files exist.
|
|
21
|
+
*/
|
|
22
|
+
export const configureXcodeProject = (config, props) => {
|
|
23
|
+
const { targetName, bundleIdentifier, deploymentTarget } = props;
|
|
24
|
+
return withXcodeProject(config, (config) => {
|
|
25
|
+
if (config.modRequest.introspect) {
|
|
26
|
+
return config;
|
|
27
|
+
}
|
|
28
|
+
const xcodeProject = config.modResults;
|
|
29
|
+
const groupName = 'Embed Foundation Extensions';
|
|
30
|
+
// Check if target already exists
|
|
31
|
+
const nativeTargets = xcodeProject.pbxNativeTargetSection();
|
|
32
|
+
const existingTargetKey = xcodeProject.findTargetKey(targetName);
|
|
33
|
+
const existingTarget = existingTargetKey ? nativeTargets[existingTargetKey] : null;
|
|
34
|
+
const { platformProjectRoot } = config.modRequest;
|
|
35
|
+
const targetPath = path.join(platformProjectRoot, targetName);
|
|
36
|
+
const widgetFiles = getWidgetFiles(targetPath, targetName);
|
|
37
|
+
// Read main app target settings to synchronize code signing
|
|
38
|
+
const mainAppSettings = getMainAppTargetSettings(xcodeProject);
|
|
39
|
+
// Use the deploymentTarget from plugin config (or default), ignore main app's deployment target
|
|
40
|
+
// This allows the widget extension to have its own deployment target independent of the main app
|
|
41
|
+
if (existingTarget && existingTargetKey) {
|
|
42
|
+
// Ensure configuration list is up to date
|
|
43
|
+
const xCConfigurationList = ensureXCConfigurationList(xcodeProject, {
|
|
44
|
+
targetName,
|
|
45
|
+
bundleIdentifier,
|
|
46
|
+
deploymentTarget,
|
|
47
|
+
codeSignStyle: mainAppSettings?.codeSignStyle,
|
|
48
|
+
developmentTeam: mainAppSettings?.developmentTeam,
|
|
49
|
+
provisioningProfileSpecifier: mainAppSettings?.provisioningProfileSpecifier,
|
|
50
|
+
}, existingTarget.buildConfigurationList);
|
|
51
|
+
// Ensure product file exists
|
|
52
|
+
const productFile = ensureProductFile(xcodeProject, {
|
|
53
|
+
targetName,
|
|
54
|
+
groupName,
|
|
55
|
+
});
|
|
56
|
+
// Update target references
|
|
57
|
+
existingTarget.productReference = productFile.fileRef;
|
|
58
|
+
existingTarget.buildConfigurationList = xCConfigurationList.uuid;
|
|
59
|
+
existingTarget.productType = `"com.apple.product-type.app-extension"`;
|
|
60
|
+
existingTarget.name = targetName;
|
|
61
|
+
existingTarget.productName = targetName;
|
|
62
|
+
if (!existingTarget.buildPhases) {
|
|
63
|
+
existingTarget.buildPhases = [];
|
|
64
|
+
}
|
|
65
|
+
// Ensure build phases and groups
|
|
66
|
+
ensureBuildPhases(xcodeProject, {
|
|
67
|
+
targetUuid: existingTargetKey,
|
|
68
|
+
groupName,
|
|
69
|
+
productFile,
|
|
70
|
+
widgetFiles,
|
|
71
|
+
mainTargetUuid: xcodeProject.getFirstTarget().uuid,
|
|
72
|
+
});
|
|
73
|
+
ensurePbxGroup(xcodeProject, {
|
|
74
|
+
targetName,
|
|
75
|
+
widgetFiles,
|
|
76
|
+
});
|
|
77
|
+
ensureTargetAttributes(xcodeProject, existingTargetKey);
|
|
78
|
+
ensureTargetDependency(xcodeProject, existingTargetKey);
|
|
79
|
+
return config;
|
|
80
|
+
}
|
|
81
|
+
// Add configuration list
|
|
82
|
+
const targetUuid = xcodeProject.generateUuid();
|
|
83
|
+
const xCConfigurationList = addXCConfigurationList(xcodeProject, {
|
|
84
|
+
targetName,
|
|
85
|
+
bundleIdentifier,
|
|
86
|
+
deploymentTarget,
|
|
87
|
+
codeSignStyle: mainAppSettings?.codeSignStyle,
|
|
88
|
+
developmentTeam: mainAppSettings?.developmentTeam,
|
|
89
|
+
provisioningProfileSpecifier: mainAppSettings?.provisioningProfileSpecifier,
|
|
90
|
+
});
|
|
91
|
+
// Add product file
|
|
92
|
+
const productFile = addProductFile(xcodeProject, {
|
|
93
|
+
targetName,
|
|
94
|
+
groupName,
|
|
95
|
+
});
|
|
96
|
+
// Configure target (native target, project section, dependency)
|
|
97
|
+
configureTarget(xcodeProject, {
|
|
98
|
+
targetName,
|
|
99
|
+
targetUuid,
|
|
100
|
+
productFile,
|
|
101
|
+
xCConfigurationList,
|
|
102
|
+
});
|
|
103
|
+
// Add build phases
|
|
104
|
+
addBuildPhases(xcodeProject, {
|
|
105
|
+
targetUuid,
|
|
106
|
+
groupName,
|
|
107
|
+
productFile,
|
|
108
|
+
widgetFiles,
|
|
109
|
+
});
|
|
110
|
+
// Add PBX group
|
|
111
|
+
addPbxGroup(xcodeProject, {
|
|
112
|
+
targetName,
|
|
113
|
+
widgetFiles,
|
|
114
|
+
});
|
|
115
|
+
return config;
|
|
116
|
+
});
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads build settings from the main app target to synchronize code signing with the widget extension.
|
|
3
|
+
*
|
|
4
|
+
* @param xcodeProject The Xcode project instance
|
|
5
|
+
* @returns The main app target's build settings, or null if not found
|
|
6
|
+
*/
|
|
7
|
+
export function getMainAppTargetSettings(xcodeProject) {
|
|
8
|
+
try {
|
|
9
|
+
const mainAppTarget = xcodeProject.getFirstTarget()?.firstTarget;
|
|
10
|
+
if (!mainAppTarget) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
// Get the build configuration list for the main app target
|
|
14
|
+
const buildConfigurationListId = mainAppTarget.buildConfigurationList;
|
|
15
|
+
if (!buildConfigurationListId) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
// Extract UUID from buildConfigurationListId (it might include a comment like "UUID /* comment */")
|
|
19
|
+
const buildConfigurationListUuid = buildConfigurationListId.split(' ')[0];
|
|
20
|
+
const buildConfigurationList = xcodeProject.hash.project.objects['XCConfigurationList']?.[buildConfigurationListUuid];
|
|
21
|
+
if (!buildConfigurationList || !buildConfigurationList.buildConfigurations) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
// Get the first build configuration (usually Debug) to read settings
|
|
25
|
+
const firstConfigRef = buildConfigurationList.buildConfigurations[0];
|
|
26
|
+
if (!firstConfigRef) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
// Extract UUID from config reference (it might include a comment)
|
|
30
|
+
const firstConfigUuid = typeof firstConfigRef === 'string' ? firstConfigRef.split(' ')[0] : firstConfigRef.value?.split(' ')[0];
|
|
31
|
+
if (!firstConfigUuid) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
const buildConfiguration = xcodeProject.hash.project.objects['XCBuildConfiguration']?.[firstConfigUuid];
|
|
35
|
+
if (!buildConfiguration || !buildConfiguration.buildSettings) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
const buildSettings = buildConfiguration.buildSettings;
|
|
39
|
+
// Extract deployment target (remove quotes if present)
|
|
40
|
+
const deploymentTarget = buildSettings.IPHONEOS_DEPLOYMENT_TARGET?.replace(/^"|"$/g, '') ||
|
|
41
|
+
buildSettings['IPHONEOS_DEPLOYMENT_TARGET']?.replace(/^"|"$/g, '') ||
|
|
42
|
+
null;
|
|
43
|
+
// Extract code signing settings
|
|
44
|
+
const codeSignStyle = buildSettings.CODE_SIGN_STYLE?.replace(/^"|"$/g, '') ||
|
|
45
|
+
buildSettings['CODE_SIGN_STYLE']?.replace(/^"|"$/g, '') ||
|
|
46
|
+
null;
|
|
47
|
+
const developmentTeam = buildSettings.DEVELOPMENT_TEAM?.replace(/^"|"$/g, '') ||
|
|
48
|
+
buildSettings['DEVELOPMENT_TEAM']?.replace(/^"|"$/g, '') ||
|
|
49
|
+
null;
|
|
50
|
+
const provisioningProfileSpecifier = buildSettings.PROVISIONING_PROFILE_SPECIFIER?.replace(/^"|"$/g, '') ||
|
|
51
|
+
buildSettings['PROVISIONING_PROFILE_SPECIFIER']?.replace(/^"|"$/g, '') ||
|
|
52
|
+
null;
|
|
53
|
+
if (!deploymentTarget) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
deploymentTarget,
|
|
58
|
+
codeSignStyle: codeSignStyle || undefined,
|
|
59
|
+
developmentTeam: developmentTeam || undefined,
|
|
60
|
+
provisioningProfileSpecifier: provisioningProfileSpecifier || undefined,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// If we can't read the settings, return null and use fallback values
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=mainAppSettings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mainAppSettings.js","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/mainAppSettings.ts"],"names":[],"mappings":"AASA;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,YAA0B;IACjE,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,YAAY,CAAC,cAAc,EAAE,EAAE,WAAW,CAAA;QAEhE,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,2DAA2D;QAC3D,MAAM,wBAAwB,GAAG,aAAa,CAAC,sBAAsB,CAAA;QACrE,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAA;QACb,CAAC;QAED,oGAAoG;QACpG,MAAM,0BAA0B,GAAG,wBAAwB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QAEzE,MAAM,sBAAsB,GAC1B,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAA;QACxF,IAAI,CAAC,sBAAsB,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,EAAE,CAAC;YAC3E,OAAO,IAAI,CAAA;QACb,CAAC;QAED,qEAAqE;QACrE,MAAM,cAAc,GAAG,sBAAsB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAA;QACpE,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,kEAAkE;QAClE,MAAM,eAAe,GACnB,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACzG,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,kBAAkB,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE,CAAC,eAAe,CAAC,CAAA;QACvG,IAAI,CAAC,kBAAkB,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,CAAC;YAC7D,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,aAAa,GAAG,kBAAkB,CAAC,aAAa,CAAA;QAEtD,uDAAuD;QACvD,MAAM,gBAAgB,GACpB,aAAa,CAAC,0BAA0B,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC/D,aAAa,CAAC,4BAA4B,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;YAClE,IAAI,CAAA;QAEN,gCAAgC;QAChC,MAAM,aAAa,GACjB,aAAa,CAAC,eAAe,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;YACpD,aAAa,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;YACvD,IAAI,CAAA;QAEN,MAAM,eAAe,GACnB,aAAa,CAAC,gBAAgB,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;YACrD,aAAa,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;YACxD,IAAI,CAAA;QAEN,MAAM,4BAA4B,GAChC,aAAa,CAAC,8BAA8B,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;YACnE,aAAa,CAAC,gCAAgC,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;YACtE,IAAI,CAAA;QAEN,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO;YACL,gBAAgB;YAChB,aAAa,EAAE,aAAa,IAAI,SAAS;YACzC,eAAe,EAAE,eAAe,IAAI,SAAS;YAC7C,4BAA4B,EAAE,4BAA4B,IAAI,SAAS;SACxE,CAAA;IACH,CAAC;IAAC,MAAM,CAAC;QACP,qEAAqE;QACrE,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
function findProductFileReference(xcodeProject, targetName) {
|
|
2
|
+
const fileReferenceSection = xcodeProject.pbxFileReferenceSection();
|
|
3
|
+
const targetProductName = `${targetName}.appex`;
|
|
4
|
+
for (const key of Object.keys(fileReferenceSection)) {
|
|
5
|
+
if (/_comment$/.test(key)) {
|
|
6
|
+
continue;
|
|
7
|
+
}
|
|
8
|
+
const entry = fileReferenceSection[key];
|
|
9
|
+
const path = typeof entry?.path === 'string' ? entry.path.replace(/^"|"$/g, '') : '';
|
|
10
|
+
const name = typeof entry?.name === 'string' ? entry.name.replace(/^"|"$/g, '') : '';
|
|
11
|
+
if (path === targetProductName || name === targetProductName) {
|
|
12
|
+
return { fileRef: key };
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
function findBuildFileForFileRef(xcodeProject, fileRef) {
|
|
18
|
+
const buildFileSection = xcodeProject.pbxBuildFileSection();
|
|
19
|
+
for (const key of Object.keys(buildFileSection)) {
|
|
20
|
+
if (/_comment$/.test(key)) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
const entry = buildFileSection[key];
|
|
24
|
+
if (entry?.fileRef === fileRef) {
|
|
25
|
+
return { uuid: key };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Adds the product file (.appex) for the widget extension.
|
|
32
|
+
*/
|
|
33
|
+
export function addProductFile(xcodeProject, options) {
|
|
34
|
+
const { targetName, groupName } = options;
|
|
35
|
+
const productFileOptions = {
|
|
36
|
+
basename: `${targetName}.appex`,
|
|
37
|
+
group: groupName,
|
|
38
|
+
explicitFileType: 'wrapper.app-extension',
|
|
39
|
+
settings: {
|
|
40
|
+
ATTRIBUTES: ['RemoveHeadersOnCopy'],
|
|
41
|
+
},
|
|
42
|
+
includeInIndex: 0,
|
|
43
|
+
path: `${targetName}.appex`,
|
|
44
|
+
sourceTree: 'BUILT_PRODUCTS_DIR',
|
|
45
|
+
};
|
|
46
|
+
const productFile = xcodeProject.addProductFile(targetName, productFileOptions);
|
|
47
|
+
return productFile;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Ensures the product file (.appex) exists and returns it.
|
|
51
|
+
*/
|
|
52
|
+
export function ensureProductFile(xcodeProject, options) {
|
|
53
|
+
const { targetName, groupName } = options;
|
|
54
|
+
const existingFile = findProductFileReference(xcodeProject, targetName);
|
|
55
|
+
if (!existingFile) {
|
|
56
|
+
return addProductFile(xcodeProject, options);
|
|
57
|
+
}
|
|
58
|
+
const buildFile = findBuildFileForFileRef(xcodeProject, existingFile.fileRef);
|
|
59
|
+
const productFile = {
|
|
60
|
+
uuid: buildFile?.uuid ?? xcodeProject.generateUuid(),
|
|
61
|
+
fileRef: existingFile.fileRef,
|
|
62
|
+
basename: `${targetName}.appex`,
|
|
63
|
+
group: groupName,
|
|
64
|
+
};
|
|
65
|
+
if (!buildFile) {
|
|
66
|
+
xcodeProject.addToPbxBuildFileSection(productFile);
|
|
67
|
+
}
|
|
68
|
+
return productFile;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=productFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"productFile.js","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/productFile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { IOS } from '../../constants';
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// Main Function
|
|
4
|
+
// ============================================================================
|
|
5
|
+
/**
|
|
6
|
+
* Configures the widget extension target in the Xcode project.
|
|
7
|
+
*
|
|
8
|
+
* This:
|
|
9
|
+
* - Adds the target to PBXNativeTarget section
|
|
10
|
+
* - Adds the target to PBXProject section
|
|
11
|
+
* - Adds a dependency from the main app to the widget extension
|
|
12
|
+
*/
|
|
13
|
+
export function configureTarget(xcodeProject, options) {
|
|
14
|
+
const target = addToPbxNativeTargetSection(xcodeProject, options);
|
|
15
|
+
addToPbxProjectSection(xcodeProject, target);
|
|
16
|
+
addTargetDependency(xcodeProject, target);
|
|
17
|
+
return target;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Ensures target attributes (LastSwiftMigration) exist for the target.
|
|
21
|
+
*/
|
|
22
|
+
export function ensureTargetAttributes(xcodeProject, targetUuid) {
|
|
23
|
+
const projectSection = xcodeProject.pbxProjectSection();
|
|
24
|
+
const firstProject = xcodeProject.getFirstProject();
|
|
25
|
+
if (!projectSection[firstProject.uuid].attributes.TargetAttributes) {
|
|
26
|
+
projectSection[firstProject.uuid].attributes.TargetAttributes = {};
|
|
27
|
+
}
|
|
28
|
+
if (!projectSection[firstProject.uuid].attributes.TargetAttributes[targetUuid]) {
|
|
29
|
+
projectSection[firstProject.uuid].attributes.TargetAttributes[targetUuid] = {
|
|
30
|
+
LastSwiftMigration: IOS.LAST_SWIFT_MIGRATION,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Ensures a target dependency exists so the main app depends on the widget extension.
|
|
36
|
+
*/
|
|
37
|
+
export function ensureTargetDependency(xcodeProject, targetUuid) {
|
|
38
|
+
if (!xcodeProject.hash.project.objects['PBXTargetDependency']) {
|
|
39
|
+
xcodeProject.hash.project.objects['PBXTargetDependency'] = {};
|
|
40
|
+
}
|
|
41
|
+
if (!xcodeProject.hash.project.objects['PBXContainerItemProxy']) {
|
|
42
|
+
xcodeProject.hash.project.objects['PBXContainerItemProxy'] = {};
|
|
43
|
+
}
|
|
44
|
+
const mainTargetUuid = xcodeProject.getFirstTarget().uuid;
|
|
45
|
+
const mainTarget = xcodeProject.pbxNativeTargetSection()[mainTargetUuid];
|
|
46
|
+
const existingDeps = mainTarget?.dependencies ?? [];
|
|
47
|
+
const targetDependencySection = xcodeProject.hash.project.objects['PBXTargetDependency'] || {};
|
|
48
|
+
const alreadyExists = existingDeps.some((dep) => {
|
|
49
|
+
const dependency = targetDependencySection[dep.value];
|
|
50
|
+
return dependency?.target === targetUuid;
|
|
51
|
+
});
|
|
52
|
+
if (!alreadyExists) {
|
|
53
|
+
xcodeProject.addTargetDependency(mainTargetUuid, [targetUuid]);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// ============================================================================
|
|
57
|
+
// Helper Functions
|
|
58
|
+
// ============================================================================
|
|
59
|
+
/**
|
|
60
|
+
* Adds the widget extension target to the PBXNativeTarget section.
|
|
61
|
+
*/
|
|
62
|
+
function addToPbxNativeTargetSection(xcodeProject, options) {
|
|
63
|
+
const { targetName, targetUuid, productFile, xCConfigurationList } = options;
|
|
64
|
+
const target = {
|
|
65
|
+
uuid: targetUuid,
|
|
66
|
+
pbxNativeTarget: {
|
|
67
|
+
isa: 'PBXNativeTarget',
|
|
68
|
+
name: targetName,
|
|
69
|
+
productName: targetName,
|
|
70
|
+
productReference: productFile.fileRef,
|
|
71
|
+
productType: `"com.apple.product-type.app-extension"`,
|
|
72
|
+
buildConfigurationList: xCConfigurationList.uuid,
|
|
73
|
+
buildPhases: [],
|
|
74
|
+
buildRules: [],
|
|
75
|
+
dependencies: [],
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
xcodeProject.addToPbxNativeTargetSection(target);
|
|
79
|
+
return target;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Adds the target to the PBXProject section.
|
|
83
|
+
*/
|
|
84
|
+
function addToPbxProjectSection(xcodeProject, target) {
|
|
85
|
+
xcodeProject.addToPbxProjectSection(target);
|
|
86
|
+
// Add target attributes to project section
|
|
87
|
+
const projectSection = xcodeProject.pbxProjectSection();
|
|
88
|
+
const firstProject = xcodeProject.getFirstProject();
|
|
89
|
+
if (!projectSection[firstProject.uuid].attributes.TargetAttributes) {
|
|
90
|
+
projectSection[firstProject.uuid].attributes.TargetAttributes = {};
|
|
91
|
+
}
|
|
92
|
+
projectSection[firstProject.uuid].attributes.TargetAttributes[target.uuid] = {
|
|
93
|
+
LastSwiftMigration: IOS.LAST_SWIFT_MIGRATION,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Adds a target dependency so the main app depends on the widget extension.
|
|
98
|
+
*/
|
|
99
|
+
function addTargetDependency(xcodeProject, target) {
|
|
100
|
+
if (!xcodeProject.hash.project.objects['PBXTargetDependency']) {
|
|
101
|
+
xcodeProject.hash.project.objects['PBXTargetDependency'] = {};
|
|
102
|
+
}
|
|
103
|
+
if (!xcodeProject.hash.project.objects['PBXContainerItemProxy']) {
|
|
104
|
+
xcodeProject.hash.project.objects['PBXContainerItemProxy'] = {};
|
|
105
|
+
}
|
|
106
|
+
xcodeProject.addTargetDependency(xcodeProject.getFirstTarget().uuid, [target.uuid]);
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"target.js","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/target.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared entitlements utilities.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Adds application groups entitlement to an entitlements object.
|
|
6
|
+
* Ensures the group list is deduped and preserves existing order.
|
|
7
|
+
*/
|
|
8
|
+
export function addApplicationGroupsEntitlement(entitlements, groupIdentifier) {
|
|
9
|
+
const existingApplicationGroups = (entitlements['com.apple.security.application-groups'] ?? []).filter(Boolean);
|
|
10
|
+
const deduped = Array.from(new Set(existingApplicationGroups));
|
|
11
|
+
if (deduped.includes(groupIdentifier)) {
|
|
12
|
+
entitlements['com.apple.security.application-groups'] = deduped;
|
|
13
|
+
return entitlements;
|
|
14
|
+
}
|
|
15
|
+
entitlements['com.apple.security.application-groups'] = [...deduped, groupIdentifier];
|
|
16
|
+
return entitlements;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=entitlements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entitlements.js","sourceRoot":"","sources":["../../../src/utils/entitlements.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,+BAA+B,CAC7C,YAAiC,EACjC,eAAuB;IAEvB,MAAM,yBAAyB,GAAG,CAAE,YAAY,CAAC,uCAAuC,CAAc,IAAI,EAAE,CAAC,CAAC,MAAM,CAClH,OAAO,CACR,CAAA;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAA;IAC9D,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACtC,YAAY,CAAC,uCAAuC,CAAC,GAAG,OAAO,CAAA;QAC/D,OAAO,YAAY,CAAA;IACrB,CAAC;IAED,YAAY,CAAC,uCAAuC,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,eAAe,CAAC,CAAA;IAErF,OAAO,YAAY,CAAA;AACrB,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { logger } from './logger';
|
|
4
|
+
/**
|
|
5
|
+
* Scans the widget extension target directory and returns categorized file lists.
|
|
6
|
+
*
|
|
7
|
+
* This function only reads the directory structure - it does NOT copy or create files.
|
|
8
|
+
* File generation should be done before this is called.
|
|
9
|
+
*
|
|
10
|
+
* @param targetPath - Path to the widget extension target directory
|
|
11
|
+
* @param targetName - Name of the target (for entitlements file)
|
|
12
|
+
* @returns Categorized lists of files for Xcode project configuration
|
|
13
|
+
*/
|
|
14
|
+
export function getWidgetFiles(targetPath, targetName) {
|
|
15
|
+
const widgetFiles = {
|
|
16
|
+
swiftFiles: [],
|
|
17
|
+
entitlementFiles: [],
|
|
18
|
+
plistFiles: [],
|
|
19
|
+
assetDirectories: [],
|
|
20
|
+
intentFiles: [],
|
|
21
|
+
};
|
|
22
|
+
if (!fs.existsSync(targetPath)) {
|
|
23
|
+
logger.warn(`Widget target directory does not exist: ${targetPath}`);
|
|
24
|
+
// Still include required generated files even if directory doesn't exist yet
|
|
25
|
+
const initialStatesFile = 'VoltraWidgetInitialStates.swift';
|
|
26
|
+
widgetFiles.swiftFiles.push(initialStatesFile);
|
|
27
|
+
const targetEntitlements = `${targetName}.entitlements`;
|
|
28
|
+
widgetFiles.entitlementFiles.push(targetEntitlements);
|
|
29
|
+
return widgetFiles;
|
|
30
|
+
}
|
|
31
|
+
const files = fs.readdirSync(targetPath);
|
|
32
|
+
for (const file of files) {
|
|
33
|
+
const itemPath = path.join(targetPath, file);
|
|
34
|
+
const isDirectory = fs.lstatSync(itemPath).isDirectory();
|
|
35
|
+
// Handle directories (Assets.xcassets)
|
|
36
|
+
if (isDirectory) {
|
|
37
|
+
if (file === 'Assets.xcassets') {
|
|
38
|
+
widgetFiles.assetDirectories.push(file);
|
|
39
|
+
}
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
// Categorize files by extension
|
|
43
|
+
const ext = path.extname(file).toLowerCase();
|
|
44
|
+
switch (ext) {
|
|
45
|
+
case '.swift':
|
|
46
|
+
widgetFiles.swiftFiles.push(file);
|
|
47
|
+
break;
|
|
48
|
+
case '.entitlements':
|
|
49
|
+
widgetFiles.entitlementFiles.push(file);
|
|
50
|
+
break;
|
|
51
|
+
case '.plist':
|
|
52
|
+
widgetFiles.plistFiles.push(file);
|
|
53
|
+
break;
|
|
54
|
+
case '.intentdefinition':
|
|
55
|
+
widgetFiles.intentFiles.push(file);
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Always include the target entitlements file
|
|
60
|
+
const targetEntitlements = `${targetName}.entitlements`;
|
|
61
|
+
if (!widgetFiles.entitlementFiles.includes(targetEntitlements)) {
|
|
62
|
+
widgetFiles.entitlementFiles.push(targetEntitlements);
|
|
63
|
+
}
|
|
64
|
+
// Always include VoltraWidgetInitialStates.swift (generated by config plugin)
|
|
65
|
+
const initialStatesFile = 'VoltraWidgetInitialStates.swift';
|
|
66
|
+
if (!widgetFiles.swiftFiles.includes(initialStatesFile)) {
|
|
67
|
+
widgetFiles.swiftFiles.push(initialStatesFile);
|
|
68
|
+
}
|
|
69
|
+
return widgetFiles;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=fileDiscovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileDiscovery.js","sourceRoot":"","sources":["../../../src/utils/fileDiscovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAG5B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB,EAAE,UAAkB;IACnE,MAAM,WAAW,GAAgB;QAC/B,UAAU,EAAE,EAAE;QACd,gBAAgB,EAAE,EAAE;QACpB,UAAU,EAAE,EAAE;QACd,gBAAgB,EAAE,EAAE;QACpB,WAAW,EAAE,EAAE;KAChB,CAAA;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,2CAA2C,UAAU,EAAE,CAAC,CAAA;QACpE,6EAA6E;QAC7E,MAAM,iBAAiB,GAAG,iCAAiC,CAAA;QAC3D,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAC9C,MAAM,kBAAkB,GAAG,GAAG,UAAU,eAAe,CAAA;QACvD,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QACrD,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;IAExC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;QAC5C,MAAM,WAAW,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;QAExD,uCAAuC;QACvC,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBAC/B,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACzC,CAAC;YACD,SAAQ;QACV,CAAC;QAED,gCAAgC;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;QAE5C,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,QAAQ;gBACX,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACjC,MAAK;YACP,KAAK,eAAe;gBAClB,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACvC,MAAK;YACP,KAAK,QAAQ;gBACX,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACjC,MAAK;YACP,KAAK,mBAAmB;gBACtB,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAClC,MAAK;QACT,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,MAAM,kBAAkB,GAAG,GAAG,UAAU,eAAe,CAAA;IACvD,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC/D,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IACvD,CAAC;IAED,8EAA8E;IAC9E,MAAM,iBAAiB,GAAG,iCAAiC,CAAA;IAC3D,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACxD,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;IAChD,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import * as fs from 'fs/promises';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { createRequire } from 'module';
|
|
4
|
+
import { logger } from './logger';
|
|
5
|
+
const FONT_EXTENSIONS = ['.ttf', '.otf', '.woff', '.woff2'];
|
|
6
|
+
async function resolveFontInput(input, projectRoot) {
|
|
7
|
+
const resolvedPath = path.resolve(projectRoot, input);
|
|
8
|
+
try {
|
|
9
|
+
await fs.stat(resolvedPath);
|
|
10
|
+
return resolvedPath;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
try {
|
|
14
|
+
const projectRequire = createRequire(path.join(projectRoot, 'package.json'));
|
|
15
|
+
return projectRequire.resolve(input);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
logger.warn(`Could not resolve font path: ${input}`);
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export async function resolveFontPaths(fonts, projectRoot) {
|
|
24
|
+
const promises = fonts.map(async (input) => {
|
|
25
|
+
const resolvedInput = await resolveFontInput(input, projectRoot);
|
|
26
|
+
if (!resolvedInput) {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
const stat = await fs.stat(resolvedInput);
|
|
30
|
+
if (stat.isDirectory()) {
|
|
31
|
+
const dir = await fs.readdir(resolvedInput);
|
|
32
|
+
return dir.map((file) => path.join(resolvedInput, file));
|
|
33
|
+
}
|
|
34
|
+
return [resolvedInput];
|
|
35
|
+
});
|
|
36
|
+
const results = await Promise.all(promises);
|
|
37
|
+
return results.flat().filter((filePath) => FONT_EXTENSIONS.some((ext) => filePath.endsWith(ext)));
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=fonts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fonts.js","sourceRoot":"","sources":["../../../src/utils/fonts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAEtC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;AAE3D,KAAK,UAAU,gBAAgB,CAAC,KAAa,EAAE,WAAmB;IAChE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;IAErD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC3B,OAAO,YAAY,CAAA;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAA;YAC5E,OAAO,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAA;YACpD,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAe,EAAE,WAAmB;IACzE,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACzC,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;QAChE,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,EAAE,CAAA;QACX,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACzC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;YAC3C,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAA;QAC1D,CAAC;QAED,OAAO,CAAC,aAAa,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC3C,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AACnG,CAAC"}
|