All checks were successful
CI / build-and-deploy (push) Successful in 20s
Replace the fire-and-forget share toast with an interactive SwiftUI card. On open it checks linkding's /api/bookmarks/check/ so an already-saved URL routes to an Update (no more silent duplicates) and a new URL shows a save form with title, tags, notes, and a read-later toggle. Tag suggestions are hybrid: fetch the user's existing tag vocabulary (/api/tags/) and AI tag ideas (/v1/marks/enrich via anonymous device auth), auto-fill known-vocabulary matches into the field and surface net-new ideas as tappable chips. Best-effort and non-blocking — failures never block save. Also: - Refresh bookmarks when the app returns to the foreground (scenePhase). - Render bookmark dates as a static relative label instead of the live ticking RelativeDateTime timer. - Share LinkdingAPI/Bookmark/ServerConfig/MarksAuth into the ShareExtension target via project.yml (durable across xcodegen regen) and regenerate. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
126 lines
2.9 KiB
YAML
126 lines
2.9 KiB
YAML
name: Marks
|
|
|
|
options:
|
|
bundleIdPrefix: com.magicive
|
|
deploymentTarget:
|
|
iOS: "26.0"
|
|
xcodeVersion: "16.3"
|
|
createIntermediateGroups: true
|
|
|
|
settings:
|
|
base:
|
|
SWIFT_VERSION: "6.0"
|
|
DEVELOPMENT_TEAM: AE5DZKJHGN
|
|
CODE_SIGN_STYLE: Automatic
|
|
IPHONEOS_DEPLOYMENT_TARGET: "26.0"
|
|
ENABLE_PREVIEWS: YES
|
|
|
|
schemes:
|
|
Marks:
|
|
build:
|
|
targets:
|
|
Marks: all
|
|
ShareExtension: all
|
|
MarksWidget: all
|
|
run:
|
|
config: Debug
|
|
test:
|
|
config: Debug
|
|
targets:
|
|
- MarksTests
|
|
profile:
|
|
config: Release
|
|
analyze:
|
|
config: Debug
|
|
archive:
|
|
config: Release
|
|
|
|
MarksWidget:
|
|
build:
|
|
targets:
|
|
Marks: all
|
|
MarksWidget: all
|
|
run:
|
|
config: Debug
|
|
analyze:
|
|
config: Debug
|
|
archive:
|
|
config: Release
|
|
|
|
ShareExtension:
|
|
build:
|
|
targets:
|
|
Marks: all
|
|
ShareExtension: all
|
|
run:
|
|
config: Debug
|
|
analyze:
|
|
config: Debug
|
|
archive:
|
|
config: Release
|
|
|
|
targets:
|
|
Marks:
|
|
type: application
|
|
platform: iOS
|
|
sources:
|
|
- path: Marks
|
|
- path: MarksWidget/WidgetDataStore.swift
|
|
settings:
|
|
base:
|
|
PRODUCT_BUNDLE_IDENTIFIER: com.magicive.marks
|
|
INFOPLIST_FILE: Marks/Info.plist
|
|
CODE_SIGN_ENTITLEMENTS: Marks/Marks.entitlements
|
|
ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
|
|
dependencies:
|
|
- target: ShareExtension
|
|
- target: MarksWidget
|
|
- sdk: WidgetKit.framework
|
|
- sdk: AppIntents.framework
|
|
|
|
ShareExtension:
|
|
type: app-extension
|
|
platform: iOS
|
|
sources:
|
|
- path: ShareExtension
|
|
# Shared with the main app so the extension can talk to linkding + the AI
|
|
# backend (the save card checks for duplicates and suggests tags).
|
|
- path: Marks/Models/Bookmark.swift
|
|
- path: Marks/Models/ServerConfig.swift
|
|
- path: Marks/Services/LinkdingAPI.swift
|
|
- path: Marks/Services/MarksAuth.swift
|
|
settings:
|
|
base:
|
|
PRODUCT_BUNDLE_IDENTIFIER: com.magicive.marks.ShareExtension
|
|
INFOPLIST_FILE: ShareExtension/Info.plist
|
|
CODE_SIGN_ENTITLEMENTS: ShareExtension/ShareExtension.entitlements
|
|
SKIP_INSTALL: YES
|
|
APPLICATION_EXTENSION_API_ONLY: YES
|
|
|
|
MarksTests:
|
|
type: bundle.unit-test
|
|
platform: iOS
|
|
sources:
|
|
- path: MarksTests
|
|
settings:
|
|
base:
|
|
PRODUCT_BUNDLE_IDENTIFIER: com.magicive.marks.MarksTests
|
|
GENERATE_INFOPLIST_FILE: YES
|
|
dependencies:
|
|
- target: Marks
|
|
|
|
MarksWidget:
|
|
type: app-extension
|
|
platform: iOS
|
|
sources:
|
|
- path: MarksWidget
|
|
settings:
|
|
base:
|
|
PRODUCT_BUNDLE_IDENTIFIER: com.magicive.marks.MarksWidget
|
|
INFOPLIST_FILE: MarksWidget/Info.plist
|
|
CODE_SIGN_ENTITLEMENTS: MarksWidget/MarksWidget.entitlements
|
|
SKIP_INSTALL: YES
|
|
dependencies:
|
|
- sdk: WidgetKit.framework
|
|
- sdk: SwiftUI.framework
|