@saltcorn/mobile-builder 1.6.3-beta.1 → 1.7.0-alpha.1
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/dist/copy_static_assets.cjs +10 -0
- package/dist/copy_static_assets.cjs.map +1 -0
- package/dist/copy_static_assets.d.cts +2 -0
- package/dist/copy_static_assets.d.cts.map +1 -0
- package/dist/mobile-builder.d.ts +7 -7
- package/dist/mobile-builder.d.ts.map +1 -1
- package/dist/mobile-builder.js +46 -51
- package/dist/mobile-builder.js.map +1 -1
- package/dist/tests/versioncode.test.d.ts +2 -0
- package/dist/tests/versioncode.test.d.ts.map +1 -0
- package/dist/tests/versioncode.test.js +24 -0
- package/dist/tests/versioncode.test.js.map +1 -0
- package/dist/tests/webpack.test.d.ts +2 -0
- package/dist/tests/webpack.test.d.ts.map +1 -0
- package/dist/tests/webpack.test.js +73 -0
- package/dist/tests/webpack.test.js.map +1 -0
- package/dist/utils/capacitor-helper.d.ts.map +1 -1
- package/dist/utils/capacitor-helper.js +7 -2
- package/dist/utils/capacitor-helper.js.map +1 -1
- package/dist/utils/common-build-utils.d.ts +135 -9
- package/dist/utils/common-build-utils.d.ts.map +1 -1
- package/dist/utils/common-build-utils.js +274 -63
- package/dist/utils/common-build-utils.js.map +1 -1
- package/dist/utils/xcode/create_share_extension.rb +98 -0
- package/package.json +12 -26
- package/webpack.config.js +22 -20
|
@@ -10,27 +10,83 @@ import type { IosCfg } from "../mobile-builder";
|
|
|
10
10
|
* @param pushSyncEnabled is push sync enabled?
|
|
11
11
|
*/
|
|
12
12
|
export declare function prepareBuildDir(buildDir: string, templateDir: string, pushEnabled: boolean, backgroundFetchEnabled: boolean, pushSyncEnabled: boolean): void;
|
|
13
|
+
/** Build-time configuration passed to `writeCapacitorConfig`. */
|
|
13
14
|
export interface ScCapacitorConfig {
|
|
14
15
|
appName: string;
|
|
15
16
|
appId?: string;
|
|
16
17
|
appVersion: string;
|
|
17
|
-
unsecureNetwork: boolean;
|
|
18
18
|
keystorePath?: string;
|
|
19
19
|
keystoreAlias?: string;
|
|
20
20
|
keystorePassword?: string;
|
|
21
21
|
keystoreAliasPassword?: string;
|
|
22
22
|
buildType: string;
|
|
23
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Write `capacitor.config.ts` into the build directory.
|
|
26
|
+
* @param buildDir directory where the app will be built
|
|
27
|
+
* @param config capacitor build settings
|
|
28
|
+
*/
|
|
24
29
|
export declare function writeCapacitorConfig(buildDir: string, config: ScCapacitorConfig): void;
|
|
30
|
+
/**
|
|
31
|
+
* Copy the app icon into all required asset slots (icon, splash variants).
|
|
32
|
+
* @param buildDir directory where the app will be built
|
|
33
|
+
* @param appIcon path to the source PNG
|
|
34
|
+
*/
|
|
25
35
|
export declare function prepAppIcon(buildDir: string, appIcon: string): void;
|
|
36
|
+
/**
|
|
37
|
+
* Returns the Android permissions required for the build.
|
|
38
|
+
* @param allowFCM include FCM/push notification permissions
|
|
39
|
+
* @returns array of Android permission strings
|
|
40
|
+
*/
|
|
26
41
|
export declare function androidPermissions(allowFCM: boolean): String[];
|
|
42
|
+
/**
|
|
43
|
+
* Returns the Android hardware features required for the build.
|
|
44
|
+
* @returns array of Android feature strings
|
|
45
|
+
*/
|
|
27
46
|
export declare function androidFeatures(): String[];
|
|
28
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Patch `AndroidManifest.xml` with permissions, features, and optional intents.
|
|
49
|
+
* @param buildDir directory where the app will be built
|
|
50
|
+
* @param allowShareTo add share-to intent filter
|
|
51
|
+
* @param allowFCM add FCM push notification support
|
|
52
|
+
* @param allowAuthIntent add authentication intent
|
|
53
|
+
*/
|
|
54
|
+
export declare function modifyAndroidManifest(buildDir: string, allowShareTo: boolean, allowFCM: boolean, allowAuthIntent: boolean): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Returns true if any of the included plugins exposes an authentication method.
|
|
57
|
+
* @param plugins list of included plugin names
|
|
58
|
+
* @returns whether an auth method is available
|
|
59
|
+
*/
|
|
29
60
|
export declare function hasAuthMethod(plugins: string[]): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Write the Android data extraction rules XML (excludes app data from backups).
|
|
63
|
+
* @param buildDir directory where the app will be built
|
|
64
|
+
*/
|
|
30
65
|
export declare function writeDataExtractionRules(buildDir: string): void;
|
|
66
|
+
/**
|
|
67
|
+
* Copy the pre-populated SQLite database into the platform asset directories.
|
|
68
|
+
* @param buildDir directory where the app will be built
|
|
69
|
+
* @param platforms target platforms (`"android"` / `"ios"`)
|
|
70
|
+
*/
|
|
31
71
|
export declare function copyPrepopulatedDb(buildDir: string, platforms: string[]): void;
|
|
72
|
+
/**
|
|
73
|
+
* Extract the bare domain name from a URL (strips protocol, port, trailing slash).
|
|
74
|
+
* @param url full server URL
|
|
75
|
+
* @returns domain string
|
|
76
|
+
*/
|
|
32
77
|
export declare function extractDomain(url: string): string;
|
|
33
|
-
|
|
78
|
+
/**
|
|
79
|
+
* Write the Android network security config. HTTPS is required, so this is
|
|
80
|
+
* always the restrictive (no cleartext) version.
|
|
81
|
+
* @param buildDir directory where the app will be built
|
|
82
|
+
*/
|
|
83
|
+
export declare function writeNetworkSecurityConfig(buildDir: string): void;
|
|
84
|
+
/**
|
|
85
|
+
*
|
|
86
|
+
* Patch `config.xml` with app name, app ID, and version.
|
|
87
|
+
* @param buildDir directory where the app will be built
|
|
88
|
+
* @param config object with optional `appName`, `appId`, and `appVersion` fields
|
|
89
|
+
*/
|
|
34
90
|
export declare function modifyConfigXml(buildDir: string, config: any): Promise<void>;
|
|
35
91
|
/**
|
|
36
92
|
* copy a png file into the build dir and use it as launcher icon
|
|
@@ -47,14 +103,66 @@ export declare function prepareAppIcon(buildDir: string, appIcon: string, platfo
|
|
|
47
103
|
* @param platforms
|
|
48
104
|
*/
|
|
49
105
|
export declare function prepareSplashIcon(buildDir: string, splashIcon: string, platforms: string[]): Promise<void>;
|
|
106
|
+
/**
|
|
107
|
+
* Write `ExportOptions.plist` used by `xcodebuild -exportArchive`.
|
|
108
|
+
* @param param0 buildDir, appId, and iOS provisioning parameters
|
|
109
|
+
*/
|
|
50
110
|
export declare function prepareExportOptionsPlist({ buildDir, appId, iosParams }: any): void;
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
111
|
+
/**
|
|
112
|
+
* Patch `Info.plist` with background modes, usage descriptions, and optional URL schemes.
|
|
113
|
+
* @param buildDir directory where the app will be built
|
|
114
|
+
* @param allowShareTo add URL scheme for share-to integration
|
|
115
|
+
* @param backgroundSyncEnabled background sync task is scheduled
|
|
116
|
+
* @param pushSyncEnabled add remote-notification background mode
|
|
117
|
+
* @param backgroundFetchEnabled background.js is included (sync or heartbeat configured)
|
|
118
|
+
* @param serverURL server URL, added to WKAppBoundDomains for the iOS cookie
|
|
119
|
+
* fix - changing servers (e.g. a new ngrok URL) needs a rebuild to apply.
|
|
120
|
+
*/
|
|
121
|
+
export declare function modifyInfoPlist(buildDir: string, allowShareTo: boolean, backgroundSyncEnabled: boolean, pushSyncEnabled: boolean, backgroundFetchEnabled?: boolean, serverURL?: string): void;
|
|
122
|
+
/**
|
|
123
|
+
* Write `App.entitlements` with the optional APNs environment and app group.
|
|
124
|
+
* @param buildDir directory where the app will be built
|
|
125
|
+
* @param buildType `"debug"` → development APNs, `"release"` → production APNs
|
|
126
|
+
* @param pushSync include the APNs environment entitlement
|
|
127
|
+
* @param appGroupId optional app group ID for share extension data sharing
|
|
128
|
+
*/
|
|
129
|
+
export declare function writeEntitlementsPlist(buildDir: string, buildType: "debug" | "release", pushSync: boolean, appGroupId?: string): void;
|
|
130
|
+
/**
|
|
131
|
+
* Inject `CODE_SIGN_ENTITLEMENTS` into `project.pbxproj` for the App target.
|
|
132
|
+
* Uses `INFOPLIST_FILE = App/Info.plist;` as an anchor (unique to the App target).
|
|
133
|
+
* Idempotent — skips if the key is already present.
|
|
134
|
+
* @param buildDir directory where the app will be built
|
|
135
|
+
*/
|
|
136
|
+
export declare function injectCodeSignEntitlements(buildDir: string): void;
|
|
137
|
+
/**
|
|
138
|
+
* Copy share extension source files into the iOS project directory.
|
|
139
|
+
* @param buildDir directory where the app will be built
|
|
140
|
+
*/
|
|
54
141
|
export declare function copyShareExtFiles(buildDir: string): void;
|
|
142
|
+
/**
|
|
143
|
+
* Replace `YOUR_APP_GROUP_ID` placeholder in `ShareViewController.swift`.
|
|
144
|
+
* @param buildDir directory where the app will be built
|
|
145
|
+
* @param groupId app group identifier
|
|
146
|
+
*/
|
|
55
147
|
export declare function modifyShareViewController(buildDir: string, groupId: string): void;
|
|
56
|
-
|
|
57
|
-
|
|
148
|
+
/**
|
|
149
|
+
* Add a "share-ext" Share Extension target to `App.xcodeproj`, so the app
|
|
150
|
+
* can be built with iOS share-to support without ever opening Xcode.
|
|
151
|
+
* @param buildDir directory where the app will be built
|
|
152
|
+
* @param appId main app's bundle id - the extension's is `${appId}.share-ext`
|
|
153
|
+
* @param appGroupId optional app group ID, wired into a matching
|
|
154
|
+
* entitlements plist for the new target
|
|
155
|
+
*/
|
|
156
|
+
export declare function createShareExtensionTarget(buildDir: string, appId: string, appGroupId?: string): void;
|
|
157
|
+
/**
|
|
158
|
+
* Patch `AppDelegate.swift` to register background tasks and push handlers.
|
|
159
|
+
* @param buildDir directory where the app will be built
|
|
160
|
+
* @param pushSyncEnabled register remote-notification handler
|
|
161
|
+
* @param allowShareTo register URL scheme handler for share-to
|
|
162
|
+
* @param backgroundFetchEnabled initialize TSBackgroundFetch (sync or heartbeat)
|
|
163
|
+
*/
|
|
164
|
+
export declare function modifyAppDelegate(buildDir: string, pushSyncEnabled: boolean, allowShareTo: boolean, backgroundFetchEnabled?: boolean): void;
|
|
165
|
+
export declare function writePrivacyInfo(buildDir: string, backgroundFetchEnabled: boolean): void;
|
|
58
166
|
/**
|
|
59
167
|
* copy files from 'server/public' into the www folder (with a version_tag prefix)
|
|
60
168
|
* @param buildDir directory where the app will be build
|
|
@@ -70,7 +178,7 @@ export declare function copySiteLogo(buildDir: string): Promise<void>;
|
|
|
70
178
|
* create a cfg file, the app use this configs
|
|
71
179
|
* @param param0
|
|
72
180
|
*/
|
|
73
|
-
export declare function writeCfgFile({ buildDir, entryPoint, entryPointType, serverPath, synchedTables, tenantAppName, autoPublicLogin, showContinueAsPublicUser, allowOfflineMode, syncOnReconnect, syncOnAppResume, pushSync, syncInterval, allowShareTo, }: any): void;
|
|
181
|
+
export declare function writeCfgFile({ buildDir, entryPoint, entryPointType, serverPath, synchedTables, tenantAppName, autoPublicLogin, showContinueAsPublicUser, allowOfflineMode, syncOnReconnect, syncOnAppResume, pushSync, syncInterval, pushSyncHeartbeatInterval, allowShareTo, apnsEnvironment, }: any): void;
|
|
74
182
|
/**
|
|
75
183
|
* create a file with all data from the db
|
|
76
184
|
* the app updates its local db from this
|
|
@@ -99,13 +207,31 @@ export declare function createSqliteDb(buildDir: string): Promise<number | null>
|
|
|
99
207
|
* @param user
|
|
100
208
|
*/
|
|
101
209
|
export declare function prepareSplashPage(buildDir: string, pageName: string, serverUrl: string, tenantAppName?: string, user?: User): Promise<void>;
|
|
210
|
+
/**
|
|
211
|
+
* Write the iOS `Podfile` and run `pod install`.
|
|
212
|
+
* @param buildDir directory where the app will be built
|
|
213
|
+
* @param hasPush include push notification pods
|
|
214
|
+
* @param hasBackgroundFetch include background fetch pod
|
|
215
|
+
* @param hasSilentPush include silent-notifications pod
|
|
216
|
+
*/
|
|
102
217
|
export declare function writePodfile(buildDir: string, hasPush: boolean, hasBackgroundFetch: boolean, hasSilentPush: boolean): void;
|
|
103
218
|
/**
|
|
104
219
|
* @param buildDir
|
|
105
220
|
* @param appVersion new app version
|
|
106
221
|
*/
|
|
107
222
|
export declare function modifyXcodeProjectFile(buildDir: string, appVersion: string, iosCfg: IosCfg): void;
|
|
223
|
+
/**
|
|
224
|
+
* Convert a semver string to an Android integer version code (`major*1e6 + minor*1e3 + patch`).
|
|
225
|
+
* @param appVersion semver string e.g. `"1.2.3"`
|
|
226
|
+
* @returns integer version code
|
|
227
|
+
*/
|
|
108
228
|
export declare function generateAndroidVersionCode(appVersion: string): number;
|
|
229
|
+
/**
|
|
230
|
+
* Patch `build.gradle` with the app version and optional keystore signing config.
|
|
231
|
+
* @param buildDir directory where the app will be built
|
|
232
|
+
* @param appVersion semver string used for `versionName` and `versionCode`
|
|
233
|
+
* @param keyStoreData signing credentials; omit for unsigned debug builds
|
|
234
|
+
*/
|
|
109
235
|
export declare function modifyGradleConfig(buildDir: string, appVersion: string, keyStoreData?: {
|
|
110
236
|
keystorePath: string;
|
|
111
237
|
keystorePassword: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common-build-utils.d.ts","sourceRoot":"","sources":["../../utils/common-build-utils.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,IAAI,MAAM,4BAA4B,CAAC;AAKnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAKhD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,OAAO,EACpB,sBAAsB,EAAE,OAAO,EAC/B,eAAe,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"common-build-utils.d.ts","sourceRoot":"","sources":["../../utils/common-build-utils.ts"],"names":[],"mappings":"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"}
|