@use-voltra/ios-client 2.1.1 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +61 -8
- package/build/commonjs/dynamic-widget/api.js +15 -0
- package/build/commonjs/dynamic-widget/api.js.map +1 -0
- package/build/commonjs/index.js +15 -7
- package/build/commonjs/index.js.map +1 -1
- package/build/commonjs/native/NativeVoltra.js.map +1 -1
- package/build/module/dynamic-widget/api.js +10 -0
- package/build/module/dynamic-widget/api.js.map +1 -0
- package/build/module/index.js +1 -0
- package/build/module/index.js.map +1 -1
- package/build/module/native/NativeVoltra.js.map +1 -1
- package/build/typescript/commonjs/dynamic-widget/api.d.ts +8 -0
- package/build/typescript/commonjs/dynamic-widget/api.d.ts.map +1 -0
- package/build/typescript/commonjs/index.d.ts +1 -0
- package/build/typescript/commonjs/index.d.ts.map +1 -1
- package/build/typescript/commonjs/native/NativeVoltra.d.ts +1 -0
- package/build/typescript/commonjs/native/NativeVoltra.d.ts.map +1 -1
- package/build/typescript/module/dynamic-widget/api.d.ts +8 -0
- package/build/typescript/module/dynamic-widget/api.d.ts.map +1 -0
- package/build/typescript/module/index.d.ts +1 -0
- package/build/typescript/module/index.d.ts.map +1 -1
- package/build/typescript/module/native/NativeVoltra.d.ts +1 -0
- package/build/typescript/module/native/NativeVoltra.d.ts.map +1 -1
- package/expo-plugin/build/cjs/index.js +3 -1
- package/expo-plugin/build/cjs/index.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/index.js +1 -1
- package/expo-plugin/build/cjs/ios-widget/index.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/podfile.js +38 -12
- package/expo-plugin/build/cjs/ios-widget/podfile.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/xcode/buildPhases.js +143 -107
- package/expo-plugin/build/cjs/ios-widget/xcode/buildPhases.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/xcode/configurationList.js +30 -22
- package/expo-plugin/build/cjs/ios-widget/xcode/configurationList.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/xcode/fileReferences.js +50 -0
- package/expo-plugin/build/cjs/ios-widget/xcode/fileReferences.js.map +1 -0
- package/expo-plugin/build/cjs/ios-widget/xcode/groups.js +45 -43
- package/expo-plugin/build/cjs/ios-widget/xcode/groups.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/xcode/index.js +77 -91
- package/expo-plugin/build/cjs/ios-widget/xcode/index.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/xcode/mainAppSettings.js +41 -39
- package/expo-plugin/build/cjs/ios-widget/xcode/mainAppSettings.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/xcode/productFile.js +2 -2
- package/expo-plugin/build/cjs/ios-widget/xcode/productFile.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/xcode/target.js +29 -63
- package/expo-plugin/build/cjs/ios-widget/xcode/target.js.map +1 -1
- package/expo-plugin/build/esm/index.js +3 -1
- package/expo-plugin/build/esm/index.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/index.js +1 -1
- package/expo-plugin/build/esm/ios-widget/index.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/podfile.js +36 -11
- package/expo-plugin/build/esm/ios-widget/podfile.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/xcode/buildPhases.js +143 -106
- package/expo-plugin/build/esm/ios-widget/xcode/buildPhases.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/xcode/configurationList.js +31 -22
- package/expo-plugin/build/esm/ios-widget/xcode/configurationList.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/xcode/fileReferences.js +45 -0
- package/expo-plugin/build/esm/ios-widget/xcode/fileReferences.js.map +1 -0
- package/expo-plugin/build/esm/ios-widget/xcode/groups.js +45 -42
- package/expo-plugin/build/esm/ios-widget/xcode/groups.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/xcode/index.js +81 -96
- package/expo-plugin/build/esm/ios-widget/xcode/index.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/xcode/mainAppSettings.js +41 -39
- package/expo-plugin/build/esm/ios-widget/xcode/mainAppSettings.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/xcode/productFile.js +3 -2
- package/expo-plugin/build/esm/ios-widget/xcode/productFile.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/xcode/target.js +28 -62
- package/expo-plugin/build/esm/ios-widget/xcode/target.js.map +1 -1
- package/expo-plugin/build/types/index.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/podfile.d.ts +19 -1
- package/expo-plugin/build/types/ios-widget/podfile.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/xcode/buildPhases.d.ts +3 -7
- package/expo-plugin/build/types/ios-widget/xcode/buildPhases.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/xcode/configurationList.d.ts +15 -10
- package/expo-plugin/build/types/ios-widget/xcode/configurationList.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/xcode/fileReferences.d.ts +16 -0
- package/expo-plugin/build/types/ios-widget/xcode/fileReferences.d.ts.map +1 -0
- package/expo-plugin/build/types/ios-widget/xcode/groups.d.ts +0 -4
- package/expo-plugin/build/types/ios-widget/xcode/groups.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/xcode/index.d.ts +22 -3
- package/expo-plugin/build/types/ios-widget/xcode/index.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/xcode/mainAppSettings.d.ts +16 -4
- package/expo-plugin/build/types/ios-widget/xcode/mainAppSettings.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/xcode/productFile.d.ts +0 -4
- package/expo-plugin/build/types/ios-widget/xcode/productFile.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/xcode/target.d.ts +11 -26
- package/expo-plugin/build/types/ios-widget/xcode/target.d.ts.map +1 -1
- package/expo-plugin/src/index.ts +5 -1
- package/expo-plugin/src/ios-widget/index.ts +1 -1
- package/expo-plugin/src/ios-widget/podfile.ts +46 -13
- package/expo-plugin/src/ios-widget/xcode/__fixtures__/fresh.pbxproj +197 -0
- package/expo-plugin/src/ios-widget/xcode/__fixtures__/with-existing-extension.pbxproj +321 -0
- package/expo-plugin/src/ios-widget/xcode/__fixtures__/with-per-config-signing.pbxproj +203 -0
- package/expo-plugin/src/ios-widget/xcode/__snapshots__/applyXcodeChanges.node.test.ts.snap +357 -0
- package/expo-plugin/src/ios-widget/xcode/__tests__/pbxConsistency.ts +130 -0
- package/expo-plugin/src/ios-widget/xcode/buildPhases.ts +151 -152
- package/expo-plugin/src/ios-widget/xcode/configurationList.ts +52 -35
- package/expo-plugin/src/ios-widget/xcode/fileReferences.ts +51 -0
- package/expo-plugin/src/ios-widget/xcode/groups.ts +52 -54
- package/expo-plugin/src/ios-widget/xcode/index.ts +107 -119
- package/expo-plugin/src/ios-widget/xcode/mainAppSettings.ts +59 -54
- package/expo-plugin/src/ios-widget/xcode/productFile.ts +3 -2
- package/expo-plugin/src/ios-widget/xcode/target.ts +31 -83
- package/ios/Package.swift +7 -1
- package/ios/app/NativeVoltra.mm +19 -0
- package/ios/app/VoltraModule.swift +18 -0
- package/ios/app/VoltraModuleImpl.swift +16 -0
- package/ios/shared/DynamicWidgetPropsCodec.swift +51 -0
- package/ios/shared/DynamicWidgetPropsStorage.swift +53 -0
- package/ios/shared/DynamicWidgetPropsStore.swift +50 -0
- package/ios/shared/DynamicWidgetRenderCoordinator.swift +31 -0
- package/ios/shared/DynamicWidgetUpdater.swift +30 -0
- package/ios/shared/VoltraConstants.swift +4 -0
- package/ios/shared/VoltraJSRenderer.swift +3 -1
- package/ios/shared/VoltraNode.swift +6 -2
- package/ios/shared/VoltraWidgetDefaults.swift +9 -1
- package/ios/target/VoltraClientWidgetRuntime.swift +17 -5
- package/ios/target/VoltraHomeWidget.swift +6 -2
- package/ios/target/VoltraWidget.swift +3 -1
- package/ios/ui/Helpers/VoltraDeepLinkResolver.swift +3 -1
- package/ios/ui/Helpers/VoltraProgressDriver.swift +6 -2
- package/ios/ui/Layout/VoltraFlexStackLayout.swift +9 -3
- package/ios/ui/Style/JSColorParser.swift +24 -8
- package/ios/ui/Style/JSGradientParser.swift +36 -12
- package/ios/ui/Style/JSStyleParser.swift +36 -12
- package/ios/ui/Style/LayoutStyle.swift +12 -4
- package/ios/ui/Views/VoltraChart.swift +52 -16
- package/ios/ui/Views/VoltraLinearGradient.swift +6 -2
- package/package.json +5 -5
- package/src/dynamic-widget/api.ts +25 -0
- package/src/index.ts +1 -0
- package/src/native/NativeVoltra.ts +1 -0
|
@@ -1,8 +1,25 @@
|
|
|
1
|
+
/** Strips surrounding quotes from a raw build-setting value. */
|
|
2
|
+
function unquote(value) {
|
|
3
|
+
if (typeof value !== 'string') {
|
|
4
|
+
return undefined;
|
|
5
|
+
}
|
|
6
|
+
return value.replace(/^"|"$/g, '');
|
|
7
|
+
}
|
|
8
|
+
/** Reads the signing-related build settings from a single XCBuildConfiguration. */
|
|
9
|
+
function readSigningSettings(buildSettings) {
|
|
10
|
+
return {
|
|
11
|
+
codeSignStyle: unquote(buildSettings.CODE_SIGN_STYLE),
|
|
12
|
+
developmentTeam: unquote(buildSettings.DEVELOPMENT_TEAM),
|
|
13
|
+
provisioningProfileSpecifier: unquote(buildSettings.PROVISIONING_PROFILE_SPECIFIER),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
1
16
|
/**
|
|
2
|
-
* Reads build settings from the main app target
|
|
17
|
+
* Reads code-signing build settings from every build configuration of the main app target, so the
|
|
18
|
+
* widget extension can synchronize signing per configuration (Debug→Debug, Release→Release).
|
|
3
19
|
*
|
|
4
20
|
* @param xcodeProject The Xcode project instance
|
|
5
|
-
* @returns
|
|
21
|
+
* @returns Signing settings keyed by configuration name plus a first-configuration fallback, or
|
|
22
|
+
* null when the main app target or its configurations cannot be resolved
|
|
6
23
|
*/
|
|
7
24
|
export function getMainAppTargetSettings(xcodeProject) {
|
|
8
25
|
try {
|
|
@@ -10,7 +27,6 @@ export function getMainAppTargetSettings(xcodeProject) {
|
|
|
10
27
|
if (!mainAppTarget) {
|
|
11
28
|
return null;
|
|
12
29
|
}
|
|
13
|
-
// Get the build configuration list for the main app target
|
|
14
30
|
const buildConfigurationListId = mainAppTarget.buildConfigurationList;
|
|
15
31
|
if (!buildConfigurationListId) {
|
|
16
32
|
return null;
|
|
@@ -18,47 +34,33 @@ export function getMainAppTargetSettings(xcodeProject) {
|
|
|
18
34
|
// Extract UUID from buildConfigurationListId (it might include a comment like "UUID /* comment */")
|
|
19
35
|
const buildConfigurationListUuid = buildConfigurationListId.split(' ')[0];
|
|
20
36
|
const buildConfigurationList = xcodeProject.hash.project.objects['XCConfigurationList']?.[buildConfigurationListUuid];
|
|
21
|
-
if (!buildConfigurationList
|
|
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) {
|
|
37
|
+
if (!buildConfigurationList?.buildConfigurations) {
|
|
32
38
|
return null;
|
|
33
39
|
}
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
40
|
+
const buildConfigurationSection = xcodeProject.hash.project.objects['XCBuildConfiguration'] ?? {};
|
|
41
|
+
const byConfigurationName = {};
|
|
42
|
+
let fallback = null;
|
|
43
|
+
for (const configRef of buildConfigurationList.buildConfigurations) {
|
|
44
|
+
// Extract UUID from the config reference (it might include a comment)
|
|
45
|
+
const configUuid = typeof configRef === 'string' ? configRef.split(' ')[0] : configRef.value?.split(' ')[0];
|
|
46
|
+
if (!configUuid) {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
const buildConfiguration = buildConfigurationSection[configUuid];
|
|
50
|
+
if (!buildConfiguration?.buildSettings) {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
const settings = readSigningSettings(buildConfiguration.buildSettings);
|
|
54
|
+
const configName = unquote(buildConfiguration.name);
|
|
55
|
+
if (configName && !(configName in byConfigurationName)) {
|
|
56
|
+
byConfigurationName[configName] = settings;
|
|
57
|
+
}
|
|
58
|
+
fallback = fallback ?? settings;
|
|
37
59
|
}
|
|
38
|
-
|
|
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) {
|
|
60
|
+
if (!fallback) {
|
|
54
61
|
return null;
|
|
55
62
|
}
|
|
56
|
-
return {
|
|
57
|
-
deploymentTarget,
|
|
58
|
-
codeSignStyle: codeSignStyle || undefined,
|
|
59
|
-
developmentTeam: developmentTeam || undefined,
|
|
60
|
-
provisioningProfileSpecifier: provisioningProfileSpecifier || undefined,
|
|
61
|
-
};
|
|
63
|
+
return { byConfigurationName, fallback };
|
|
62
64
|
}
|
|
63
65
|
catch {
|
|
64
66
|
// If we can't read the settings, return null and use fallback values
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mainAppSettings.js","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/mainAppSettings.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mainAppSettings.js","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/mainAppSettings.ts"],"names":[],"mappings":"AAoBA,gEAAgE;AAChE,SAAS,OAAO,CAAC,KAAc;IAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;AACpC,CAAC;AAED,mFAAmF;AACnF,SAAS,mBAAmB,CAAC,aAAsC;IACjE,OAAO;QACL,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC;QACrD,eAAe,EAAE,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC;QACxD,4BAA4B,EAAE,OAAO,CAAC,aAAa,CAAC,8BAA8B,CAAC;KACpF,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,YAA0B;IACjE,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,YAAY,CAAC,cAAc,EAAE,EAAE,WAAW,CAAA;QAChE,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,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,EAAE,mBAAmB,EAAE,CAAC;YACjD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,yBAAyB,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAA;QACjG,MAAM,mBAAmB,GAA2C,EAAE,CAAA;QACtE,IAAI,QAAQ,GAAkC,IAAI,CAAA;QAElD,KAAK,MAAM,SAAS,IAAI,sBAAsB,CAAC,mBAAmB,EAAE,CAAC;YACnE,sEAAsE;YACtE,MAAM,UAAU,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YAC3G,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,SAAQ;YACV,CAAC;YAED,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAA;YAChE,IAAI,CAAC,kBAAkB,EAAE,aAAa,EAAE,CAAC;gBACvC,SAAQ;YACV,CAAC;YAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAA;YACtE,MAAM,UAAU,GAAG,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA;YACnD,IAAI,UAAU,IAAI,CAAC,CAAC,UAAU,IAAI,mBAAmB,CAAC,EAAE,CAAC;gBACvD,mBAAmB,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAA;YAC5C,CAAC;YACD,QAAQ,GAAG,QAAQ,IAAI,QAAQ,CAAA;QACjC,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAA;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,qEAAqE;QACrE,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}
|
|
@@ -28,9 +28,10 @@ function findBuildFileForFileRef(xcodeProject, fileRef) {
|
|
|
28
28
|
return null;
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
|
-
* Adds the product file (.appex) for the widget extension.
|
|
31
|
+
* Adds the product file (.appex) for the widget extension. Internal create-only fallback for
|
|
32
|
+
* {@link ensureProductFile}; not part of the public pipeline.
|
|
32
33
|
*/
|
|
33
|
-
|
|
34
|
+
function addProductFile(xcodeProject, options) {
|
|
34
35
|
const { targetName, groupName } = options;
|
|
35
36
|
const productFileOptions = {
|
|
36
37
|
basename: `${targetName}.appex`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"productFile.js","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/productFile.ts"],"names":[],"mappings":"AAOA,SAAS,wBAAwB,CAAC,YAA0B,EAAE,UAAkB;IAC9E,MAAM,oBAAoB,GAAG,YAAY,CAAC,uBAAuB,EAAE,CAAA;IACnE,MAAM,iBAAiB,GAAG,GAAG,UAAU,QAAQ,CAAA;IAE/C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACpD,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,SAAQ;QACV,CAAC;QACD,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAA;QACvC,MAAM,IAAI,GAAG,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACpF,MAAM,IAAI,GAAG,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAEpF,IAAI,IAAI,KAAK,iBAAiB,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC7D,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAA;QACzB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,uBAAuB,CAAC,YAA0B,EAAE,OAAe;IAC1E,MAAM,gBAAgB,GAAG,YAAY,CAAC,mBAAmB,EAAE,CAAA;IAE3D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAChD,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,SAAQ;QACV,CAAC;QACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,KAAK,EAAE,OAAO,KAAK,OAAO,EAAE,CAAC;YAC/B,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAA;QACtB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"productFile.js","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/productFile.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,18 +3,36 @@ import { IOS } from '../../constants';
|
|
|
3
3
|
// Main Function
|
|
4
4
|
// ============================================================================
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Creates the minimal widget-extension native target and registers it with the project.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* A target cannot be "ensured" into existence, so this is the one create-only step in
|
|
9
|
+
* {@link applyXcodeChanges}: it adds an empty `PBXNativeTarget` (no product reference, configuration
|
|
10
|
+
* list or build phases yet) to the `PBXNativeTarget` and `PBXProject` sections. The shared ensure
|
|
11
|
+
* pipeline then fills in the configuration list, product file, group, build phases, attributes and
|
|
12
|
+
* dependency — the same code that reconciles an already-existing target.
|
|
13
|
+
*
|
|
14
|
+
* @returns The freshly created native-target object (the value stored in the `PBXNativeTarget`
|
|
15
|
+
* section under `targetUuid`).
|
|
12
16
|
*/
|
|
13
|
-
export function
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
export function createTargetSkeleton(xcodeProject, options) {
|
|
18
|
+
const { targetName, targetUuid } = options;
|
|
19
|
+
const target = {
|
|
20
|
+
uuid: targetUuid,
|
|
21
|
+
pbxNativeTarget: {
|
|
22
|
+
isa: 'PBXNativeTarget',
|
|
23
|
+
name: targetName,
|
|
24
|
+
productName: targetName,
|
|
25
|
+
productType: `"com.apple.product-type.app-extension"`,
|
|
26
|
+
buildConfigurationList: '',
|
|
27
|
+
productReference: '',
|
|
28
|
+
buildPhases: [],
|
|
29
|
+
buildRules: [],
|
|
30
|
+
dependencies: [],
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
xcodeProject.addToPbxNativeTargetSection(target);
|
|
34
|
+
xcodeProject.addToPbxProjectSection(target);
|
|
35
|
+
return xcodeProject.pbxNativeTargetSection()[targetUuid];
|
|
18
36
|
}
|
|
19
37
|
/**
|
|
20
38
|
* Ensures target attributes (LastSwiftMigration) exist for the target.
|
|
@@ -53,56 +71,4 @@ export function ensureTargetDependency(xcodeProject, targetUuid) {
|
|
|
53
71
|
xcodeProject.addTargetDependency(mainTargetUuid, [targetUuid]);
|
|
54
72
|
}
|
|
55
73
|
}
|
|
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
74
|
//# sourceMappingURL=target.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"target.js","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/target.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"target.js","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/target.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAIpD;;;;GAIG;AACH,QAAA,MAAM,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAIpD;;;;GAIG;AACH,QAAA,MAAM,aAAa,EAAE,qBAiDpB,CAAA;AAED,eAAe,aAAa,CAAA;AAE5B,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,uBAAuB,EACvB,6BAA6B,EAC7B,eAAe,EACf,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,SAAS,CAAA"}
|
|
@@ -1,9 +1,27 @@
|
|
|
1
1
|
import { ConfigPlugin } from '@expo/config-plugins';
|
|
2
|
+
/**
|
|
3
|
+
* Generates the Podfile target content for the widget extension (unwrapped, no markers).
|
|
4
|
+
*/
|
|
5
|
+
declare function getTargetContent(targetName: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Idempotently inserts/upgrades the Voltra widget target block in Podfile contents:
|
|
8
|
+
* - marked block already present → replaced in place (covers renamed targets too, since the
|
|
9
|
+
* markers are name-agnostic)
|
|
10
|
+
* - legacy (pre-marker) block present → replaced with the new marked block
|
|
11
|
+
* - neither present → appended
|
|
12
|
+
*/
|
|
13
|
+
export declare function upsertWidgetTarget(contents: string, targetName: string): string;
|
|
2
14
|
export interface ConfigurePodfileProps {
|
|
3
15
|
targetName: string;
|
|
4
16
|
}
|
|
5
17
|
/**
|
|
6
|
-
* Plugin step that adds the Podfile target for the widget extension.
|
|
18
|
+
* Plugin step that adds (or upgrades) the Podfile target for the widget extension.
|
|
7
19
|
*/
|
|
8
20
|
export declare const configurePodfile: ConfigPlugin<ConfigurePodfileProps>;
|
|
21
|
+
export declare const __test__: {
|
|
22
|
+
BEGIN_MARKER: string;
|
|
23
|
+
END_MARKER: string;
|
|
24
|
+
getTargetContent: typeof getTargetContent;
|
|
25
|
+
};
|
|
26
|
+
export {};
|
|
9
27
|
//# sourceMappingURL=podfile.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"podfile.d.ts","sourceRoot":"","sources":["../../../src/ios-widget/podfile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAkC,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"podfile.d.ts","sourceRoot":"","sources":["../../../src/ios-widget/podfile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAkC,MAAM,sBAAsB,CAAA;AAenF;;GAEG;AACH,iBAAS,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAiBpD;AAMD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAY/E;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,YAAY,CAAC,qBAAqB,CAKhE,CAAA;AAED,eAAO,MAAM,QAAQ;;;;CAAiD,CAAA"}
|
|
@@ -5,24 +5,20 @@ import type { IOSWidgetExtensionFiles } from '../../types';
|
|
|
5
5
|
* bundles into the extension. Safe to call on every prebuild; only added when absent.
|
|
6
6
|
*/
|
|
7
7
|
export declare function ensureWidgetBundleScriptPhase(xcodeProject: XcodeProject, targetUuid: string): void;
|
|
8
|
-
export interface
|
|
8
|
+
export interface EnsureBuildPhasesOptions {
|
|
9
9
|
targetUuid: string;
|
|
10
|
+
targetName: string;
|
|
10
11
|
groupName: string;
|
|
11
12
|
productFile: {
|
|
12
13
|
uuid: string;
|
|
14
|
+
fileRef?: string;
|
|
13
15
|
target?: string;
|
|
14
16
|
basename: string;
|
|
15
17
|
group: string;
|
|
16
18
|
};
|
|
17
19
|
widgetFiles: IOSWidgetExtensionFiles;
|
|
18
|
-
}
|
|
19
|
-
export interface EnsureBuildPhasesOptions extends AddBuildPhasesOptions {
|
|
20
20
|
mainTargetUuid?: string;
|
|
21
21
|
}
|
|
22
|
-
/**
|
|
23
|
-
* Adds all required build phases for the widget extension target.
|
|
24
|
-
*/
|
|
25
|
-
export declare function addBuildPhases(xcodeProject: XcodeProject, options: AddBuildPhasesOptions): void;
|
|
26
22
|
/**
|
|
27
23
|
* Ensures all required build phases and files exist for the widget extension target.
|
|
28
24
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildPhases.d.ts","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/buildPhases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"buildPhases.d.ts","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/buildPhases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AA0D1D;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAkClG;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,MAAM,CAAA;QAChB,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,WAAW,EAAE,uBAAuB,CAAA;IACpC,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAqDD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAiDrG"}
|
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
import { XcodeProject } from '@expo/config-plugins';
|
|
2
|
-
|
|
2
|
+
import type { MainAppTargetSettings } from './mainAppSettings';
|
|
3
|
+
export interface EnsureConfigurationListOptions {
|
|
3
4
|
targetName: string;
|
|
4
5
|
bundleIdentifier: string;
|
|
5
6
|
deploymentTarget: string;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
/**
|
|
8
|
+
* App marketing version (CFBundleShortVersionString). App Store Connect expects the appex
|
|
9
|
+
* version to match the app's, so this becomes the widget's MARKETING_VERSION.
|
|
10
|
+
*/
|
|
11
|
+
version?: string;
|
|
12
|
+
/** App build number; becomes the widget's CURRENT_PROJECT_VERSION. */
|
|
13
|
+
buildNumber?: string;
|
|
14
|
+
/** Main app signing settings, applied per configuration name (Debug→Debug, Release→Release). */
|
|
15
|
+
mainAppSettings?: MainAppTargetSettings | null;
|
|
9
16
|
}
|
|
10
17
|
/**
|
|
11
|
-
*
|
|
18
|
+
* Ensures an existing XCConfigurationList is updated, or adds a new one if missing. Each widget
|
|
19
|
+
* configuration receives the build settings derived for its own name, so Debug and Release signing
|
|
20
|
+
* stay in sync with the main app's respective configurations.
|
|
12
21
|
*/
|
|
13
|
-
export declare function
|
|
14
|
-
/**
|
|
15
|
-
* Ensures an existing XCConfigurationList is updated, or adds a new one if missing.
|
|
16
|
-
*/
|
|
17
|
-
export declare function ensureXCConfigurationList(xcodeProject: XcodeProject, options: AddConfigurationListOptions, existingConfigurationListId?: string | {
|
|
22
|
+
export declare function ensureXCConfigurationList(xcodeProject: XcodeProject, options: EnsureConfigurationListOptions, existingConfigurationListId?: string | {
|
|
18
23
|
value?: string;
|
|
19
24
|
}): any;
|
|
20
25
|
//# sourceMappingURL=configurationList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configurationList.d.ts","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/configurationList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"configurationList.d.ts","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/configurationList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGnD,OAAO,KAAK,EAA0B,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAEtF,MAAM,WAAW,8BAA8B;IAC7C,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,MAAM,CAAA;IACxB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gGAAgG;IAChG,eAAe,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAA;CAC/C;AAkFD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,8BAA8B,EACvC,2BAA2B,CAAC,EAAE,MAAM,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,OAmC1D"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { XcodeProject } from '@expo/config-plugins';
|
|
2
|
+
/** Strips surrounding quotes from a pbx path/name value. */
|
|
3
|
+
export declare function normalizePath(value: string | undefined): string;
|
|
4
|
+
/** Strips a trailing `/* comment *\/` and whitespace, yielding the bare UUID of a pbx reference. */
|
|
5
|
+
export declare function normalizeRef(value: unknown): string;
|
|
6
|
+
/**
|
|
7
|
+
* Resolves the PBXFileReference UUID for a widget file, scoped to the widget's own PBXGroup.
|
|
8
|
+
*
|
|
9
|
+
* pbxproj paths are group-relative, so a bare path like `Assets.xcassets` collides with any other
|
|
10
|
+
* extension's identically named file. Scoping the lookup to the children of the widget group
|
|
11
|
+
* (identified by `targetName`) keeps the widget's references distinct from those, which is what
|
|
12
|
+
* prevents the shared-fileRef corruption behind issues #87/#32. When the widget group does not
|
|
13
|
+
* exist yet, a fresh reference is created.
|
|
14
|
+
*/
|
|
15
|
+
export declare function ensureWidgetFileReference(xcodeProject: XcodeProject, filePath: string, targetName: string): string;
|
|
16
|
+
//# sourceMappingURL=fileReferences.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileReferences.d.ts","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/fileReferences.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAInD,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAK/D;AAED,oGAAoG;AACpG,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAInD;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAsBlH"}
|
|
@@ -4,10 +4,6 @@ export interface AddPbxGroupOptions {
|
|
|
4
4
|
targetName: string;
|
|
5
5
|
widgetFiles: IOSWidgetExtensionFiles;
|
|
6
6
|
}
|
|
7
|
-
/**
|
|
8
|
-
* Adds a PBXGroup for the widget extension files.
|
|
9
|
-
*/
|
|
10
|
-
export declare function addPbxGroup(xcodeProject: XcodeProject, options: AddPbxGroupOptions): void;
|
|
11
7
|
/**
|
|
12
8
|
* Ensures a PBXGroup exists for the widget extension files.
|
|
13
9
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/groups.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/groups.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAK1D,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,uBAAuB,CAAA;CACrC;AA6DD;;GAEG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAwB5F"}
|
|
@@ -1,11 +1,28 @@
|
|
|
1
|
-
import { ConfigPlugin } from '@expo/config-plugins';
|
|
2
|
-
import type { IOSWidgetConfig } from '../../types';
|
|
1
|
+
import { ConfigPlugin, XcodeProject } from '@expo/config-plugins';
|
|
2
|
+
import type { IOSWidgetConfig, IOSWidgetExtensionFiles } from '../../types';
|
|
3
3
|
export interface ConfigureXcodeProjectProps {
|
|
4
4
|
targetName: string;
|
|
5
5
|
bundleIdentifier: string;
|
|
6
6
|
deploymentTarget: string;
|
|
7
|
+
/** App marketing version; becomes the widget's MARKETING_VERSION so the appex matches the app. */
|
|
8
|
+
version?: string;
|
|
9
|
+
/** App build number; becomes the widget's CURRENT_PROJECT_VERSION. */
|
|
10
|
+
buildNumber?: string;
|
|
7
11
|
widgets?: IOSWidgetConfig[];
|
|
8
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* Applies all widget-extension changes to an already-parsed Xcode project.
|
|
15
|
+
*
|
|
16
|
+
* This is the pure core of {@link configureXcodeProject}: it takes the parsed project, the plugin
|
|
17
|
+
* props, the discovered widget files, and whether any widget is client-rendered, then mutates the
|
|
18
|
+
* project in place. It performs no filesystem or `modRequest` access, which makes it directly
|
|
19
|
+
* testable against pbxproj fixtures.
|
|
20
|
+
*
|
|
21
|
+
* When the widget target does not exist yet, the minimal native-target skeleton is created first
|
|
22
|
+
* (targets cannot be "ensured" into existence); every other object is then reconciled by the same
|
|
23
|
+
* idempotent ensure pipeline that runs for an already-existing target.
|
|
24
|
+
*/
|
|
25
|
+
export declare function applyXcodeChanges(xcodeProject: XcodeProject, props: ConfigureXcodeProjectProps, widgetFiles: IOSWidgetExtensionFiles, hasClientRenderedWidgets?: boolean): void;
|
|
9
26
|
/**
|
|
10
27
|
* Plugin step that configures the Xcode project for the widget extension.
|
|
11
28
|
*
|
|
@@ -16,7 +33,9 @@ export interface ConfigureXcodeProjectProps {
|
|
|
16
33
|
* - Adds build phases (Sources, CopyFiles, Frameworks, Resources)
|
|
17
34
|
* - Adds PBXGroup for widget files
|
|
18
35
|
*
|
|
19
|
-
* This should run after generateWidgetExtensionFiles so the files exist.
|
|
36
|
+
* This should run after generateWidgetExtensionFiles so the files exist. The wrapper is kept thin:
|
|
37
|
+
* it discovers widget files and detects client-rendered widgets, then delegates the actual pbxproj
|
|
38
|
+
* mutation to {@link applyXcodeChanges}.
|
|
20
39
|
*/
|
|
21
40
|
export declare const configureXcodeProject: ConfigPlugin<ConfigureXcodeProjectProps>;
|
|
22
41
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGnF,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAU3E,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,MAAM,CAAA;IACxB,kGAAkG;IAClG,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,eAAe,EAAE,CAAA;CAC5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,0BAA0B,EACjC,WAAW,EAAE,uBAAuB,EACpC,wBAAwB,UAAQ,GAC/B,IAAI,CAwEN;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAAY,CAAC,0BAA0B,CAwB1E,CAAA"}
|
|
@@ -1,15 +1,27 @@
|
|
|
1
1
|
import { XcodeProject } from '@expo/config-plugins';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
/** Code-signing settings read from one of the main app target's build configurations. */
|
|
3
|
+
export interface MainAppSigningSettings {
|
|
4
4
|
codeSignStyle?: string;
|
|
5
5
|
developmentTeam?: string;
|
|
6
6
|
provisioningProfileSpecifier?: string;
|
|
7
7
|
}
|
|
8
|
+
export interface MainAppTargetSettings {
|
|
9
|
+
/**
|
|
10
|
+
* Signing settings keyed by build-configuration name (e.g. `Debug`, `Release`). Release
|
|
11
|
+
* provisioning often differs from Debug, so the widget must mirror the main app per
|
|
12
|
+
* configuration rather than copying one configuration's signing into both.
|
|
13
|
+
*/
|
|
14
|
+
byConfigurationName: Record<string, MainAppSigningSettings>;
|
|
15
|
+
/** The first configuration's settings, used for widget configurations with no name match. */
|
|
16
|
+
fallback: MainAppSigningSettings;
|
|
17
|
+
}
|
|
8
18
|
/**
|
|
9
|
-
* Reads build settings from the main app target
|
|
19
|
+
* Reads code-signing build settings from every build configuration of the main app target, so the
|
|
20
|
+
* widget extension can synchronize signing per configuration (Debug→Debug, Release→Release).
|
|
10
21
|
*
|
|
11
22
|
* @param xcodeProject The Xcode project instance
|
|
12
|
-
* @returns
|
|
23
|
+
* @returns Signing settings keyed by configuration name plus a first-configuration fallback, or
|
|
24
|
+
* null when the main app target or its configurations cannot be resolved
|
|
13
25
|
*/
|
|
14
26
|
export declare function getMainAppTargetSettings(xcodeProject: XcodeProject): MainAppTargetSettings | null;
|
|
15
27
|
//# sourceMappingURL=mainAppSettings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mainAppSettings.d.ts","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/mainAppSettings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"mainAppSettings.d.ts","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/mainAppSettings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,yFAAyF;AACzF,MAAM,WAAW,sBAAsB;IACrC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,4BAA4B,CAAC,EAAE,MAAM,CAAA;CACtC;AAED,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAA;IAC3D,6FAA6F;IAC7F,QAAQ,EAAE,sBAAsB,CAAA;CACjC;AAmBD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,YAAY,GAAG,qBAAqB,GAAG,IAAI,CAsDjG"}
|
|
@@ -3,10 +3,6 @@ export interface AddProductFileOptions {
|
|
|
3
3
|
targetName: string;
|
|
4
4
|
groupName: string;
|
|
5
5
|
}
|
|
6
|
-
/**
|
|
7
|
-
* Adds the product file (.appex) for the widget extension.
|
|
8
|
-
*/
|
|
9
|
-
export declare function addProductFile(xcodeProject: XcodeProject, options: AddProductFileOptions): any;
|
|
10
6
|
/**
|
|
11
7
|
* Ensures the product file (.appex) exists and returns it.
|
|
12
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"productFile.d.ts","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/productFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;CAClB;
|
|
1
|
+
{"version":3,"file":"productFile.d.ts","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/productFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;CAClB;AA8DD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB,OAqB3F"}
|
|
@@ -1,36 +1,21 @@
|
|
|
1
1
|
import { XcodeProject } from '@expo/config-plugins';
|
|
2
|
-
export interface
|
|
2
|
+
export interface CreateTargetSkeletonOptions {
|
|
3
3
|
targetName: string;
|
|
4
4
|
targetUuid: string;
|
|
5
|
-
productFile: {
|
|
6
|
-
fileRef: string;
|
|
7
|
-
};
|
|
8
|
-
xCConfigurationList: {
|
|
9
|
-
uuid: string;
|
|
10
|
-
};
|
|
11
5
|
}
|
|
12
6
|
/**
|
|
13
|
-
*
|
|
7
|
+
* Creates the minimal widget-extension native target and registers it with the project.
|
|
14
8
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
9
|
+
* A target cannot be "ensured" into existence, so this is the one create-only step in
|
|
10
|
+
* {@link applyXcodeChanges}: it adds an empty `PBXNativeTarget` (no product reference, configuration
|
|
11
|
+
* list or build phases yet) to the `PBXNativeTarget` and `PBXProject` sections. The shared ensure
|
|
12
|
+
* pipeline then fills in the configuration list, product file, group, build phases, attributes and
|
|
13
|
+
* dependency — the same code that reconciles an already-existing target.
|
|
14
|
+
*
|
|
15
|
+
* @returns The freshly created native-target object (the value stored in the `PBXNativeTarget`
|
|
16
|
+
* section under `targetUuid`).
|
|
19
17
|
*/
|
|
20
|
-
export declare function
|
|
21
|
-
uuid: string;
|
|
22
|
-
pbxNativeTarget: {
|
|
23
|
-
isa: string;
|
|
24
|
-
name: string;
|
|
25
|
-
productName: string;
|
|
26
|
-
productReference: string;
|
|
27
|
-
productType: string;
|
|
28
|
-
buildConfigurationList: string;
|
|
29
|
-
buildPhases: never[];
|
|
30
|
-
buildRules: never[];
|
|
31
|
-
dependencies: never[];
|
|
32
|
-
};
|
|
33
|
-
};
|
|
18
|
+
export declare function createTargetSkeleton(xcodeProject: XcodeProject, options: CreateTargetSkeletonOptions): any;
|
|
34
19
|
/**
|
|
35
20
|
* Ensures target attributes (LastSwiftMigration) exist for the target.
|
|
36
21
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"target.d.ts","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/target.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAQnD,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"target.d.ts","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/target.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAQnD,MAAM,WAAW,2BAA2B;IAC1C,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,2BAA2B,OAsBpG;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAa3F;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAqB3F"}
|
package/expo-plugin/src/index.ts
CHANGED
|
@@ -18,7 +18,11 @@ const withVoltraIos: VoltraIosConfigPlugin = (config, props = {}) => {
|
|
|
18
18
|
|
|
19
19
|
const iosBundleIdentifier = config.ios?.bundleIdentifier
|
|
20
20
|
if (!iosBundleIdentifier) {
|
|
21
|
-
|
|
21
|
+
throw new Error(
|
|
22
|
+
'The Voltra iOS config plugin requires "expo.ios.bundleIdentifier" to be set in the app config — ' +
|
|
23
|
+
'it derives the widget extension bundle identifier from it. ' +
|
|
24
|
+
'Set "ios.bundleIdentifier" (e.g. "com.example.app") in app.json or app.config.(js|ts) and run prebuild again.'
|
|
25
|
+
)
|
|
22
26
|
}
|
|
23
27
|
|
|
24
28
|
const deploymentTarget = props.deploymentTarget || IOS.DEPLOYMENT_TARGET
|
|
@@ -54,7 +54,7 @@ export const withIOS: ConfigPlugin<WithIOSProps> = (config, props) => {
|
|
|
54
54
|
...(fonts && fonts.length > 0 ? [[withFonts, { fonts, targetName }] as [ConfigPlugin<any>, any]] : []),
|
|
55
55
|
|
|
56
56
|
// 2. Configure Xcode project (creates the target - must run before fonts mod executes)
|
|
57
|
-
[configureXcodeProject, { targetName, bundleIdentifier, deploymentTarget, widgets }],
|
|
57
|
+
[configureXcodeProject, { targetName, bundleIdentifier, deploymentTarget, widgets, version, buildNumber }],
|
|
58
58
|
|
|
59
59
|
// 3. Configure Podfile for widget extension target
|
|
60
60
|
[configurePodfile, { targetName }],
|