Single-commit clean baseline after security scrub of niche-tells, project codenames, internal jargon, and contributor-email leaks. Contents: - 100 Rust crates (_primitives/_rust/) - 37 agent manifests (_manifests/) + generated specs (_generated/) - 67 user-invocable skills (skills/) - 33 hooks (hooks/) - Composition blocks (_blocks/) - Documentation (docs/, README.md) - TS adapter packages (_ts_packages/) - Assembler (_assembler/) - Roles (_roles/) - Templates (_templates/) - Forgejo CI (.forgejo/) Author: Denis Parfionovich <info@greendragon.info> License: see LICENSE.
1.5 KiB
1.5 KiB
STACK — Swift iOS (UIKit / SwiftUI hybrid)
Use for platform-native iOS UI — this is the only sane choice for iOS.
UIKit vs SwiftUI:
- SwiftUI for new screens by default (iOS 16+ targets). Wrap UIKit views via
UIViewRepresentableonly when SwiftUI has no equivalent (AVKit camera, ARKit, MapKit gestures). - UIKit required for: deep
UITextInputcustom protocols, scroll-view precise tracking,UIPageViewControllerpaging animations < 60 fps on SwiftUI.
App lifecycle:
@mainstruct App orAppDelegate/SceneDelegatepair. NOT both — pick one.LaunchScreen.storyboardrequired (Info.plist keyUILaunchStoryboardName) — Apple rejects static image launch.
Info.plist mandatory keys:
NSCameraUsageDescription/NSPhotoLibraryUsageDescription/NSLocationWhenInUseUsageDescription— if capability used; missing → runtime crash, not build error.CFBundleURLTypesfor custom URL schemes (deeplinks).NSAppTransportSecurity— never setNSAllowsArbitraryLoads=truein prod (App Store rejection).UIBackgroundModesarray for any background audio / location / BLE.
Threading: @MainActor for UI mutation; actor for shared mutable state; Task { ... } for async. NO DispatchQueue.main.async wrapping UI updates from Swift Concurrency code (defeats actor isolation).
Forbidden: NSAllowsArbitraryLoads=true, force-unwrapping UIImage(named:) (use failable init), hardcoded API keys in .swift sources (use .xcconfig + Bundle.main.infoDictionary).