<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Bluetooth Mesh on Producthunt daily</title>
        <link>https://producthunt.programnotes.cn/en/tags/bluetooth-mesh/</link>
        <description>Recent content in Bluetooth Mesh on Producthunt daily</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Tue, 28 Jul 2026 17:49:37 +0800</lastBuildDate><atom:link href="https://producthunt.programnotes.cn/en/tags/bluetooth-mesh/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>bitchat</title>
        <link>https://producthunt.programnotes.cn/en/p/bitchat/</link>
        <pubDate>Tue, 28 Jul 2026 17:49:37 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/bitchat/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1692056400583-a4245403f45b?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3ODUyMzIxMjN8&amp;ixlib=rb-4.1.0" alt="Featured image of post bitchat" /&gt;&lt;h1 id=&#34;permissionlesstechbitchat&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/permissionlesstech/bitchat&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;permissionlesstech/bitchat&lt;/a&gt;
&lt;/h1&gt;&lt;img width=&#34;256&#34; height=&#34;256&#34; alt=&#34;icon_128x128@2x&#34; src=&#34;https://github.com/user-attachments/assets/90133f83-b4f6-41c6-aab9-25d0859d2a47&#34; /&gt;
&lt;h2 id=&#34;bitchat&#34;&gt;bitchat
&lt;/h2&gt;&lt;p&gt;A decentralized peer-to-peer messaging app with dual transport architecture: local Bluetooth mesh networks for offline communication and internet-based Nostr protocol for global reach. No accounts, no phone numbers, no central servers. It&amp;rsquo;s the side-groupchat.&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://bitchat.free&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;bitchat.free&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;📲 &lt;a class=&#34;link&#34; href=&#34;https://apps.apple.com/us/app/bitchat-mesh/id6748219622&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;App Store&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;getting-a-copy-you-can-trust&#34;&gt;Getting a copy you can trust
&lt;/h3&gt;&lt;p&gt;Install from the App Store, or build from source you have verified. A compiled build from anywhere else cannot be verified — see &lt;a class=&#34;link&#34; href=&#34;docs/VERIFYING-A-BUILD.md&#34; &gt;Verifying bitchat&lt;/a&gt; for how to check source against the per-release hash manifest, and for what to do if that is the only build you can get.&lt;/p&gt;
&lt;p&gt;This matters more than it usually would: this repository has been the target of takedown demands, and when a repository or releases page disappears, mirrors appear that nobody can check.&lt;/p&gt;
&lt;h2 id=&#34;license&#34;&gt;License
&lt;/h2&gt;&lt;p&gt;This project is released into the public domain. See the &lt;a class=&#34;link&#34; href=&#34;LICENSE&#34; &gt;LICENSE&lt;/a&gt; file for details.&lt;/p&gt;
&lt;h2 id=&#34;features&#34;&gt;Features
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dual Transport Architecture&lt;/strong&gt;: Bluetooth mesh for offline + Nostr protocol for internet-based messaging&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Location-Based Channels&lt;/strong&gt;: Geographic chat rooms using geohash coordinates over global Nostr relays&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Intelligent Message Routing&lt;/strong&gt;: Automatically chooses best transport (Bluetooth → Nostr fallback)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Decentralized Mesh Network&lt;/strong&gt;: Automatic peer discovery and multi-hop message relay over Bluetooth LE&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Privacy First&lt;/strong&gt;: No accounts, no phone numbers, no servers. Note that the mesh does use a persistent per-device identifier derived from your identity key — see &lt;a class=&#34;link&#34; href=&#34;WHITEPAPER.md&#34; &gt;the whitepaper&lt;/a&gt; on identity and metadata for what a nearby radio can observe&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Private Message End-to-End Encryption&lt;/strong&gt;: &lt;a class=&#34;link&#34; href=&#34;https://noiseprotocol.org&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Noise Protocol&lt;/a&gt; for mesh, BitChat private envelopes for Nostr fallback&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IRC-Style Commands&lt;/strong&gt;: Familiar &lt;code&gt;/slap&lt;/code&gt;, &lt;code&gt;/msg&lt;/code&gt;, &lt;code&gt;/who&lt;/code&gt; style interface&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Universal App&lt;/strong&gt;: Native support for iOS and macOS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Emergency Wipe&lt;/strong&gt;: Triple-tap to instantly clear all data&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance Optimizations&lt;/strong&gt;: LZ4 message compression, adaptive battery modes, and optimized networking&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;technical-architecture&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://deepwiki.com/permissionlesstech/bitchat&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Technical Architecture&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;BitChat uses a &lt;strong&gt;hybrid messaging architecture&lt;/strong&gt; with two complementary transport layers:&lt;/p&gt;
&lt;h3 id=&#34;bluetooth-mesh-network-offline&#34;&gt;Bluetooth Mesh Network (Offline)
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Local Communication&lt;/strong&gt;: Direct peer-to-peer within Bluetooth range&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-hop Relay&lt;/strong&gt;: Messages route through nearby devices (max 7 hops)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No Internet Required&lt;/strong&gt;: Works completely offline in disaster scenarios&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Noise Protocol Encryption&lt;/strong&gt;: End-to-end encryption, with forward secrecy for live sessions (store-and-forward mail is sealed without it — see the whitepaper)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Binary Protocol&lt;/strong&gt;: Compact packet format optimized for Bluetooth LE constraints&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatic Discovery&lt;/strong&gt;: Peer discovery and connection management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Adaptive Power&lt;/strong&gt;: Battery-optimized duty cycling&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;nostr-protocol-internet&#34;&gt;Nostr Protocol (Internet)
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Global Reach&lt;/strong&gt;: Connect with users worldwide via internet relays&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Location Channels&lt;/strong&gt;: Geographic chat rooms using geohash coordinates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;290+ Relay Network&lt;/strong&gt;: Distributed across the globe for reliability&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BitChat Private Envelopes&lt;/strong&gt;: App-specific encrypted private messages over Nostr relays&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ephemeral Keys&lt;/strong&gt;: Fresh cryptographic identity per geohash area&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;BitChat&amp;rsquo;s private-envelope format is proprietary and is &lt;strong&gt;not&lt;/strong&gt; NIP-17,
NIP-44, or NIP-59 compatible. It uses Nostr as a relay transport but only
interoperates with BitChat clients: private payloads travel inside kind-1059
events whose &lt;code&gt;v2:&lt;/code&gt;-prefixed content is a BitChat-specific XChaCha20-Poly1305
construction, not NIP-44 encryption.&lt;/p&gt;
&lt;h3 id=&#34;channel-types&#34;&gt;Channel Types
&lt;/h3&gt;&lt;h4 id=&#34;mesh-bluetooth&#34;&gt;&lt;code&gt;mesh #bluetooth&lt;/code&gt;
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Transport&lt;/strong&gt;: Bluetooth Low Energy mesh network&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scope&lt;/strong&gt;: Local devices within multi-hop range&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Internet&lt;/strong&gt;: Not required&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use Case&lt;/strong&gt;: Offline communication, protests, disasters, remote areas&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;location-channels-block-dr5rsj7-neighborhood-dr5rs-country-dr&#34;&gt;Location Channels (&lt;code&gt;block #dr5rsj7&lt;/code&gt;, &lt;code&gt;neighborhood #dr5rs&lt;/code&gt;, &lt;code&gt;country #dr&lt;/code&gt;)
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Transport&lt;/strong&gt;: Nostr protocol over internet&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scope&lt;/strong&gt;: Geographic areas defined by geohash precision
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;block&lt;/code&gt; (7 chars): City block level&lt;/li&gt;
&lt;li&gt;&lt;code&gt;neighborhood&lt;/code&gt; (6 chars): District/neighborhood&lt;/li&gt;
&lt;li&gt;&lt;code&gt;city&lt;/code&gt; (5 chars): City level&lt;/li&gt;
&lt;li&gt;&lt;code&gt;province&lt;/code&gt; (4 chars): State/province&lt;/li&gt;
&lt;li&gt;&lt;code&gt;region&lt;/code&gt; (2 chars): Country/large region&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Internet&lt;/strong&gt;: Required (connects to Nostr relays)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use Case&lt;/strong&gt;: Location-based community chat, local events, regional discussions&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;direct-message-routing&#34;&gt;Direct Message Routing
&lt;/h3&gt;&lt;p&gt;Private messages use &lt;strong&gt;intelligent transport selection&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bluetooth First&lt;/strong&gt; (preferred when available)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Direct connection with established Noise session&lt;/li&gt;
&lt;li&gt;Fastest and most private option&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Nostr Fallback&lt;/strong&gt; (when Bluetooth unavailable)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Uses recipient&amp;rsquo;s Nostr public key&lt;/li&gt;
&lt;li&gt;BitChat&amp;rsquo;s app-specific private-envelope encryption&lt;/li&gt;
&lt;li&gt;Routes through global relay network&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Smart Queuing&lt;/strong&gt; (when neither available)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Messages queued until transport becomes available&lt;/li&gt;
&lt;li&gt;Automatic delivery when connection established&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For detailed protocol documentation, see the &lt;a class=&#34;link&#34; href=&#34;WHITEPAPER.md&#34; &gt;Technical Whitepaper&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;setup&#34;&gt;Setup
&lt;/h2&gt;&lt;h3 id=&#34;option-1-using-xcode&#34;&gt;Option 1: Using Xcode
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;open bitchat.xcodeproj
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;For a signed device build, create your ignored local configuration and replace
the example team ID with your Apple Developer Team ID:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp Configs/Local.xcconfig.example Configs/Local.xcconfig
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;Local.xcconfig.example&lt;/code&gt; derives unique app and App Group identifiers from that
team ID. The entitlement files already reference &lt;code&gt;$(APP_GROUP_ID)&lt;/code&gt;, so tracked
project or entitlement files do not need to be edited.&lt;/p&gt;
&lt;p&gt;Useful command-line checks from the repository root:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# macOS Debug build without signing&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xcodebuild -project bitchat.xcodeproj -scheme &lt;span class=&#34;s2&#34;&gt;&amp;#34;bitchat (macOS)&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -configuration Debug &lt;span class=&#34;nv&#34;&gt;CODE_SIGNING_ALLOWED&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;NO build
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Full SwiftPM test suite&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;swift &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# iOS simulator tests&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xcodebuild -project bitchat.xcodeproj -scheme &lt;span class=&#34;s2&#34;&gt;&amp;#34;bitchat (iOS)&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -sdk iphonesimulator &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -destination &lt;span class=&#34;s1&#34;&gt;&amp;#39;platform=iOS Simulator,name=iPhone 17&amp;#39;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If &lt;code&gt;iPhone 17&lt;/code&gt; is unavailable, choose an installed simulator from:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xcodebuild -showdestinations -project bitchat.xcodeproj -scheme &lt;span class=&#34;s2&#34;&gt;&amp;#34;bitchat (iOS)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;option-2-using-just&#34;&gt;Option 2: Using &lt;code&gt;just&lt;/code&gt;
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install just
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;just check
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;just run
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;just build&lt;/code&gt; and &lt;code&gt;just run&lt;/code&gt; use the current &lt;code&gt;bitchat (macOS)&lt;/code&gt; scheme and keep
Xcode output in the ignored &lt;code&gt;.DerivedData/&lt;/code&gt; directory. They never patch source,
project, configuration, or entitlement files.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;just clean&lt;/code&gt; removes only &lt;code&gt;.DerivedData/&lt;/code&gt; and &lt;code&gt;.build/&lt;/code&gt;. It does not invoke Git
or restore tracked files, so uncommitted work is preserved. &lt;code&gt;just test&lt;/code&gt; runs the
SwiftPM suite and &lt;code&gt;just test-ios&lt;/code&gt; runs the iPhone 17 simulator suite.&lt;/p&gt;
&lt;h2 id=&#34;localization&#34;&gt;Localization
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;App localizations live in &lt;code&gt;bitchat/Localizable.xcstrings&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Share extension strings are separate in &lt;code&gt;bitchatShareExtension/Localization/Localizable.xcstrings&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Prefer keys that describe intent (&lt;code&gt;app_info.features.offline.title&lt;/code&gt;) and reuse existing ones where possible.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;xcodebuild -project bitchat.xcodeproj -scheme &amp;quot;bitchat (macOS)&amp;quot; -configuration Debug CODE_SIGNING_ALLOWED=NO build&lt;/code&gt; to compile-check any localization updates.&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
