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") } } } ...