Jan 01, 1970
. 오픈 소스이며 Rust 라이브러리를 사용하여 종단 간 암호화된 Ockam 포털을 통해 Mac의 TCP 또는 HTTP 서비스를 친구들과 비공개로 공유합니다. 로컬 호스트 에 공유 서비스가 나타납니다!
brew install build-trust/ockam/portals
Swift 측면에서는 C API를 직접 호출할 수도 있었지만 C 데이터 구조는 Swift에서 일급 시민이 아닙니다. 이로 인해 SwiftUI 코드 내에서 관용적으로 사용하기가 더 어려워집니다. 대신 우리는 Swift의 데이터 구조를 복제하고 C와 Swift 간에 변환하기로 결정했습니다. 이는 부담스러워 보일 수 있지만 실제로는 공유 상태가 자주 변경되지 않습니다. if let ...
, ForEach
, enum
등과 같은 구문을 사용하여 SwiftUI에서 구성 요소를 빠르게 빌드하는 기능은 매우 유용하며 절충할 가치가 있습니다.
// Rust idiomatic structure #[derive(Default, Clone, Debug, Eq, PartialEq)] pub struct LocalService { pub name: String, pub address: String, pub port: u16, pub shared_with: Vec<Invitee>, pub available: bool, } // Rust C-compatible structure #[repr(C)] pub struct LocalService { pub(super) name: *const c_char, pub(super) address: *const c_char, pub(super) port: u16, pub(super) shared_with: *const *const Invitee, pub(super) available: u8, } // Generated C header structure typedef struct C_LocalService { const char *name; const char *address; uint16_t port; const struct C_Invitee *const *shared_with; uint8_t available; } C_LocalService; // Swift idiomatic structure class LocalService { let name: String @Published var address: String? @Published var port: UInt16 @Published var sharedWith: [Invitee] @Published var available: Bool }
VStack(alignment: .leading, spacing: 0) { Text(service.sourceName).lineLimit(1) HStack(spacing: 0) { Image(systemName: "circle.fill") .font(.system(size: 7)) .foregroundColor( service.enabled ? (service.available ? .green : .red) : .orange) if !service.enabled { Text(verbatim: "Not connected") } else { if service.available { Text(verbatim: service.address.unsafelyUnwrapped + ":" + String(service.port)) } else { Text(verbatim: "Connecting") } } } ...