# # NetDesk by Akronlogic — CocoaPods spec that links the compiled Rust core # (NetDeskCore.xcframework) into the Flutter iOS Runner. # # This file is a TEMPLATE kept under version control in packaging/ios/. # packaging/build-ios.sh copies it to ui/ios/netdesk_core.podspec next to the # freshly-assembled NetDeskCore.xcframework, then adds # pod 'netdesk_core', :path => '.' # to ui/ios/Podfile so `flutter build ipa` links it automatically. # # The xcframework is a *static* library (libnetdesk_core.a, one slice per # platform: ios-arm64 device + ios-arm64-simulator). CocoaPods auto-selects the # right slice per build, so there are no hardcoded slice paths here. # Pod::Spec.new do |s| s.name = 'netdesk_core' s.version = '0.1.0' s.summary = 'NetDesk native Rust core (static) for iOS — Akronlogic.' s.description = <<-DESC The compiled NetDesk engine: signaling, end-to-end crypto, the media transport and VideoToolbox H.264 hardware decode (core/src/decode_vt.rs). Vendored as a static xcframework; the Flutter UI binds to it over dart:ffi / flutter_rust_bridge in Phase 3. DESC s.homepage = 'https://akronlogic.com' s.license = { :type => 'Proprietary', :text => 'Copyright Akronlogic. All rights reserved.' } s.author = { 'Akronlogic' => 'https://akronlogic.com' } s.platform = :ios, '13.0' s.source = { :path => '.' } # The Rust core, assembled by packaging/build-ios.sh (xcodebuild -create-xcframework). s.vendored_frameworks = 'NetDeskCore.xcframework' # System frameworks the VideoToolbox decode path links with # #[link(kind = "framework")] in core/src/decode_vt.rs. A static Rust lib # records these in its metadata but does NOT pull them in at the final app # link, so they must be named here. # CoreMedia — CMVideoFormatDescription / CMSampleBuffer / CMBlockBuffer # VideoToolbox — VTDecompressionSession* # CoreVideo — CVPixelBuffer* # CoreFoundation — CFDictionary/CFString/CFRelease (core-foundation-sys) s.frameworks = 'VideoToolbox', 'CoreMedia', 'CoreVideo', 'CoreFoundation' # Vendored static xcframework, no public headers yet (the C ABI header is # generated with cbindgen when Phase 3's core/src/ffi.rs lands — see # docs/build-ios.md). CocoaPods links the archive normally; once the Phase-3 # Dart bindings reference the symbols they are retained automatically. # # Before those bindings exist, nothing references the archive, so the linker # may drop it. That is harmless for the build. If you want to *prove* the # archive links end-to-end before Phase 3, force it in by uncommenting: # # s.user_target_xcconfig = { # 'OTHER_LDFLAGS' => '-force_load "${PODS_XCFRAMEWORKS_BUILD_DIR}/netdesk_core/libnetdesk_core.a"' # } # # (Do not combine -force_load with Phase-3 symbol references, or you may hit # duplicate-symbol errors — pick one.) s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', # Keep the Rust/FFI symbols discoverable for dart:ffi lookups. 'STRIP_STYLE' => 'non-global', } end