You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
for test in AppBridgeTests SystemUITests KeyboardLayoutTests PlatformUITests HapticControlsTests DocumentsPickerTests ShareTests PreviewBrowserTests FilesBrowserTests BrowserBridgeTests; do
@@ -125,16 +131,217 @@ The APK will be at: `platforms/android/app/build/outputs/apk/<edition>/debug/app
125
131
> [!NOTE]
126
132
> `@codemirror/lsp-client` comes from the `codemirror-lsp-client` git submodule and is installed as a local `file:` dependency, so initialize the submodule before running `npm ci` — see [Troubleshooting](#-troubleshooting).
127
133
134
+
## iOS development (port in progress)
135
+
136
+
Use macOS with Xcode 26 and an installed iOS simulator runtime, plus Node.js 24.
137
+
Copy `platforms/ios/Config.xcconfig.example` to `platforms/ios/Config.xcconfig`
138
+
once on a new checkout. This ignored file is only for local signing settings such
139
+
as `DEVELOPMENT_TEAM`; leave the team empty for simulator builds. Keep version,
140
+
icon and other public build settings in the Xcode project.
141
+
Keep `runner/PrivacyInfo.xcprivacy` aligned with native API use: it declares file
142
+
metadata, app-local preferences and elapsed-time measurements. Both targets
143
+
also declare the local capacity checks used by filesystem requests (`E174.1`).
144
+
They include this resource automatically through the template's synchronized folder.
145
+
Check the built app's root manifest when changing target resource membership.
146
+
Use iOS 18.6 or 26.2 for StoreKit integration tests. iOS 26.3–26.5 has a
invalid names and capacity requests without allocating the requested space.
298
+
For upgrade smoke tests, save a file and add it to Recents, reinstall the app
299
+
without uninstalling it, then verify editing and Recents after the container moves.
300
+
301
+
The native `Iap` service uses StoreKit 2 with the existing callback API.
302
+
`IapBridgeTests` loads `runnerTests/Iap.storekit` into StoreKitTest; the fixture
303
+
ships only in the test bundle and does not configure normal app launches.
304
+
Tests make local simulated purchases without an App Store account or real charges.
305
+
The service accepts existing SKU strings unchanged. Configure matching products
306
+
for the chosen production bundle before App Store testing. Transactions expose
307
+
`store: "appstore"` and a signed JWS in `purchaseToken`/`signedTransactionInfo`;
308
+
the backend must verify Apple transactions instead of sending them to Google Play.
309
+
The Settings page includes an iOS-only Restore purchases action. Neither billing
310
+
restrictions nor a missing App Store product enable the Android external checkout.
311
+
Until the backend supports Apple orders and refunds, iOS disables new paid-plugin
312
+
and sponsorship purchases. Free and account-owned plugins can still be installed
313
+
directly, as dependencies and from backups; unowned paid plugins are skipped during
314
+
restore. Keep those gates in `src/lib/platform.js` until the corresponding backend
315
+
flows are verified. Local Pro purchase and restoration remain enabled.
316
+
The Google Play rating action is hidden on iOS until its App Store listing is
317
+
configured. `PlatformUITests` covers Settings/About interaction and copied device
318
+
information; keep store links and restoration instructions specific to the platform.
319
+
320
+
`npm run build -- ios prod --device` builds an unsigned device app. Use
321
+
`platforms/ios/runner.xcodeproj` in Xcode to configure your team, signing and device
322
+
installation. Direct Xcode builds use the version defaults in `project.pbxproj`;
323
+
the npm scripts supply the version from `package.json`. Tests and build output are under
324
+
`.ios-build/`. `--skip-web` reuses an already-built web bundle.
325
+
326
+
See [docs/ios-port.md](docs/ios-port.md) before testing feature parity. App Store
327
+
products, iOS advertising identifiers, physical-device validation and several
328
+
native services are still pending.
329
+
128
330
## Native Android development
129
331
130
332
`platforms/android` is checked-in source: edit it directly in Android Studio. There is no platform generation or native plugin installation step.
131
333
334
+
`FileResourceTest` checks the real WebView request interceptor against local files
335
+
whose names contain URI delimiters and percent escapes. Its file IO runs through
336
+
the native background pool. Keep decoded filesystem paths as paths when creating
337
+
their file URIs; parsing them as URL text loses literal filename characters.
338
+
132
339
-`platforms/android/app/src/main/java`: Acode runtime and shared native services.
133
340
-`platforms/android/app/src/free`: advertising implementation and metadata.
134
341
-`platforms/android/app/src/store`: billing and proot assets, excluded by `fdroid`.
135
342
-`src/native`: typed native APIs imported by `src/native/index.ts`; `bridge(service)` binds promise-based actions to the shared transport.
136
343
-`src/platforms/android` and `src/platforms/ios`: platform transports using the shared callback and binary protocol.
137
-
-`platforms/ios`: retained iOS template for the future Acode port; Android services are not yet ported to Swift.
344
+
-`platforms/ios`: iOS app, with the template's runtime in `runner` and native services in `runner/lib`. Simulator tests and native dependencies remain alongside the app. See the [port checklist](docs/ios-port.md) for remaining work.
138
345
-`platforms/android/app/src/main/assets/services.json`: native service registration.
139
346
-`package.json`: app ID (`name`), version and Android version code.
0 commit comments