mirror of
https://github.com/wailsapp/wails.git
synced 2026-03-15 23:25:49 +01:00
This commit integrates iOS platform support for Wails v3, adapting the iOS-specific code to work with the new transport layer architecture. Key changes: - Add iOS-specific application, webview, and runtime files - Add iOS event types and processing - Add iOS examples and templates - Update messageprocessor to handle iOS requests - Move badge_ios.go to dock package Note: The iOS branch was based on an older v3-alpha and required significant conflict resolution due to the transport layer refactor (PR #4702). Some iOS-specific code may need further adaptation: - processIOSMethod needs to be implemented with new RuntimeRequest signature - iOS event generation in tasks/events/generate.go needs updating 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
53 lines
2.3 KiB
Markdown
53 lines
2.3 KiB
Markdown
# iOS Runtime Feature Plan
|
|
|
|
This document outlines proposed iOS-only runtime features for Wails v3, the initial milestones, and method shapes exposed to the frontend runtime as `IOS.*`.
|
|
|
|
## Goals
|
|
- Provide a first-class iOS runtime namespace: `IOS`.
|
|
- Expose UX-critical features with a small, well-defined, promise-based API.
|
|
- Follow the existing runtime pattern: JS -> /wails/runtime -> Go -> ObjC.
|
|
|
|
## Object: IOS
|
|
- Object ID: 11 (reserved in runtime objectNames)
|
|
|
|
## Milestone 1 (MVP)
|
|
- Haptics
|
|
- `IOS.Haptics.Impact(style: "light"|"medium"|"heavy"|"soft"|"rigid"): Promise<void>`
|
|
- Device
|
|
- `IOS.Device.Info(): Promise<{ model: string; systemName: string; systemVersion: string; isSimulator: boolean }>`
|
|
|
|
## Milestone 2
|
|
- Permissions
|
|
- `IOS.Permissions.Request("camera"|"microphone"|"photos"|"notifications"): Promise<"granted"|"denied"|"limited">`
|
|
- `IOS.Permissions.Status(kind): Promise<"granted"|"denied"|"limited"|"restricted"|"not_determined">`
|
|
- Camera
|
|
- `IOS.Camera.PickPhoto(options?): Promise<{ uri: string }>`
|
|
- `IOS.Camera.PickVideo(options?): Promise<{ uri: string, duration?: number }>`
|
|
- Photos
|
|
- `IOS.Photos.SaveImage(dataURL|blob, options?): Promise<void>`
|
|
- `IOS.Photos.SaveVideo(fileURI, options?): Promise<void>`
|
|
|
|
## Milestone 3
|
|
- Share
|
|
- `IOS.Share.Sheet({ text?, url?, imageDataURL? }): Promise<void>`
|
|
- Files
|
|
- `IOS.Files.Pick({ types?, multiple? }): Promise<Array<{ uri: string, name: string, size?: number }>>`
|
|
- Biometric
|
|
- `IOS.Biometric.CanAuthenticate(): Promise<boolean>`
|
|
- `IOS.Biometric.Authenticate(reason: string): Promise<boolean>`
|
|
- Notifications
|
|
- `IOS.Notifications.RequestPermission(): Promise<boolean>`
|
|
- `IOS.Notifications.Schedule(localNotification): Promise<string /* id */>`
|
|
|
|
## Notes
|
|
- All APIs should be safe no-ops on other platforms (reject with a meaningful error) or be tree-shaken by frontend bundlers.
|
|
- UI-affecting APIs must ensure main-thread execution in ObjC.
|
|
- File/Photo APIs will use security-scoped bookmarks where relevant.
|
|
|
|
## Implementation Status
|
|
- [x] Define plan (this document)
|
|
- [ ] JS runtime: add IOS object ID + IOS module exports
|
|
- [ ] Go: message dispatcher for IOS object
|
|
- [ ] iOS: Haptics.Impact(style) native bridge
|
|
- [ ] JS->Go->ObjC wiring for Haptics
|
|
- [ ] Device.Info() basic implementation
|