<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="386472" data-post-id="386472">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="derek-zhou" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/derek-zhou/120/19943_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		                  <h3>derek-zhou</h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body">
								<p>Ok, I was just saying I want a way to bypass the app store.Delivering mobile app on hex.pm would be very nice.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="386472" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/mob-native-beam-elixir-on-native-mobile/74924/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-386472" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="386472"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="386476" data-post-id="386476">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="andyleclair" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/andyleclair/120/36483_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		                  <h3>andyleclair</h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body">
								<p>Apple specifically forbids this and any app that attempts it will be rejected. If you care about getting your app on iOS, you simply cannot do this.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="386476" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/mob-native-beam-elixir-on-native-mobile/74924/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-386476" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="386476"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="386479" data-post-id="386479">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="jam" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jam/120/36266_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		                  <h3>jam</h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body">
								<p>I don’t think that’s true. There are many Capacitor / Cordova apps (aka apps wrapping a webview) on the App Store. These can be updated without review unless you’re updating a feature that uses an iOS feature.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="386479" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/mob-native-beam-elixir-on-native-mobile/74924/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-386479" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="386479"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #15"></div>
  </section>
</div>
    <div class="postbit" id="386480" data-post-id="386480">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="andyleclair" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/andyleclair/120/36483_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		                  <h3>andyleclair</h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body">
								<p>Sure, if you’re wrapping a web-view, but that’s not a native app. The native app review process is much more stringent. I’d think if you have the app running locally on the device (say, a LiveView app) that you could update remotely (specifically NOT loading a remote web app but updating the on-device code) that would be rejected.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="386480" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/mob-native-beam-elixir-on-native-mobile/74924/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-386480" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="386480"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #16"></div>
  </section>
</div>
    <div class="postbit" id="386481" data-post-id="386481">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="jam" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jam/120/36266_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		                  <h3>jam</h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body">
								<p>Mob seems cool. Would it offer any benefit versus writing a native iOS app other than being able to write things in elixir?</p>
<aside class="quote no-group" data-username="Grouvie" data-post="13" data-topic="74924">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/grouvie/48/40200_2.png" class="avatar"> Grouvie:</div>
<blockquote>
<p>The embedded BEAM, Phoenix, and LiveView runtime are bundled with the app itself.</p>
</blockquote>
</aside>
<p>I wonder would AtomVM be a better fit? I’ve heard BEAM is a resource hog but maybe it’s fine on iOS, I don’t know.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="386481" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/mob-native-beam-elixir-on-native-mobile/74924/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-386481" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="386481"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #17"></div>
  </section>
</div>
    <div class="postbit" id="386485" data-post-id="386485">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="GenericJam" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/GenericJam/120/15495_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		                  <h3>GenericJam</h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body">
								<p><a class="mention" href="/u/andyleclair" rel="nofollow">@andyleclair</a> there’s a bit of wiggle room here. If beam code can be defined as ‘interpreted code’ it can be allowed. This is essentially the space codepush has been operating in for years already and I believe LiveView Native apps have already made it through the app store approval process and they use the exact same mechanism.</p>
<p><a class="mention" href="/u/grouvie" rel="nofollow">@Grouvie</a> why not LiveView? This is the approach (similar?) taken by elixir desktop. I don’t want to do it this way. It’s unnecessarily heavy to wrap the server and the client together although it makes sense for their use case. I briefly considered LiveView &gt; LiveViewSvelte &gt; SvelteNative &gt; NativeScript but after making a proof of concept that was just LiveView &gt; NativeScript I realized NativeScript is just referencing the native elements which I could do myself and cut out all the middle layers.<br>
I had a few years with React Native and one of the things that annoyed me about it was all the layers. Something would break in one of the layers and then you have to unexpectedly spend a day fixing it because of a library change or something. So I’m trying to balance simplicity with convention.</p>
<p><a class="mention" href="/u/jam" rel="nofollow">@jam</a> benefits of having the BEAM on board are numerous from my perspective.</p>
<p>Event handling suddenly becomes very easy. In general I love the BEAM runtime but for mobile apps it’s a great place to have something like the BEAM that handles errors well. Everything you love about the BEAM runtime is suddenly available inside your app and not on a remote server. Right in your app.</p>
<p>Hot code upgrade. You could get really crazy with it and hardcode your data in the app itself and just send an updated version of beam code every time you want to show something new in the UI. I’m not promoting this but it is possible. Going through the app store is a really annoying and time consuming process. Delivering to the web is a dream come true because there are no gatekeepers apart from the restrictions in the browser. I’ll put in some reasonable security precautions in the app like code signing but this will essentially come down to trusting that no one takes this library and builds something malicious with it and crashes this option for everyone else. So, yes, you could completely change your app after it gets on device but the ecosystem does have some defences against this like you can get reported. You also need to have permissions granted in order to use aspects of the phone for this very reason. It would be suspicious if your flashlight app needs access to the whole file system.</p>
<p>BEAM distribution: you can link nodes directly to each other. You could imagine phone to phone communication, privileged access to your own server via your phone, etc. For example, you could run a game on two phones with one phone being the screen and the other one being the controller.<br>
Whatever you can already do with BEAM distribution you could do here. Obviously you should understand the caveats that BEAM distribution != server &lt;&gt; client. It is privileged access to another node so you should exercise caution.</p>
<p>Whatever else you love about the BEAM is now on your phone: pattern matching, etc.</p>
<p>I looked into AtomVM and it isn’t feature complete and it’s also trying to do things in a different way, etc. I’m very grateful for everything that project is doing but I didn’t think it was the right fit for this project.<br>
I actually thought I was going to have to rewrite a minimalist BEAM to be the BEAM but smaller but after my initial experiments with getting the BEAM started on device I realized it’s already light enough. Using the actual BEAM greatly reduces my maintenance burden and keeps the framework feature complete with the BEAM.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="386485" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/mob-native-beam-elixir-on-native-mobile/74924/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-386485" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="386485"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #18"></div>
  </section>
</div>
    <div class="postbit" id="386486" data-post-id="386486">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="derek-zhou" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/derek-zhou/120/19943_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		                  <h3>derek-zhou</h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body">
								<p>There are many superapp/miniapp combos in Asia. Installing non-native code not through app store is something Apple hates but impossible to get rid off completely.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="386486" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/mob-native-beam-elixir-on-native-mobile/74924/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-386486" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="386486"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #19"></div>
  </section>
</div>
    <div class="postbit" id="386487" data-post-id="386487">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="GenericJam" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/GenericJam/120/15495_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		                  <h3>GenericJam</h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body">
								<p>It’s not my intention to distribute through hex.pm. The distribution would be through the developer’s server. Perhaps there will be a business in it for someone to run this code server that signs, etc. but the intention for now is that the developer runs their own server for hot upgrade code.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="386487" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/mob-native-beam-elixir-on-native-mobile/74924/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-386487" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="386487"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #20"></div>
  </section>
</div>
    <div class="postbit" id="386488" data-post-id="386488">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="jam" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jam/120/36266_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		                  <h3>jam</h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body">
								<aside class="quote no-group" data-username="GenericJam" data-post="1" data-topic="74924">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/genericjam/48/15495_2.png" class="avatar"> GenericJam:</div>
<blockquote>
<pre data-code-wrap="elixir"><code class="lang-elixir">def render(assigns) do
      %{type: :column, props: %{padding: 16}, children: [
        %{type: :text,   props: %{text: "Count: #{assigns.count}"}},
        %{type: :button, props: %{text: "+", on_tap: self()}}
      ]}
    end
</code></pre>
</blockquote>
</aside>
<p>This syntax seems like it might get a bit unwieldy. I wonder if there’s something a bit more elegant.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="386488" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/mob-native-beam-elixir-on-native-mobile/74924/22">Post #21</a>
	                </div>
	            </div>
              <div id="likers-container-386488" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="386488"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #21"></div>
  </section>
</div>
    <div class="postbit" id="386490" data-post-id="386490">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Grouvie" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Grouvie/120/40200_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		                  <h3>Grouvie</h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body">
								<p>AtomVM won’t work with my approach. AtomVM’s own docs say it targets tiny/lightweight systems, implements only a subset of BEAM/OTP, and is “much slower than BEAM” even with JIT, while using less RAM.</p>
<aside class="onebox allowlistedgeneric" data-onebox-src="https://doc.atomvm.org/main/differences-with-beam.html?utm_source=chatgpt.com#memory-usage-and-speed">
  <header class="source">
      <img src="https://doc.atomvm.org/main/_static/favicon.ico" class="site-icon" alt="" width="48" height="48">

      <a href="https://doc.atomvm.org/main/differences-with-beam.html?utm_source=chatgpt.com#memory-usage-and-speed" target="_blank" rel="noopener nofollow ugc">doc.atomvm.org</a>
  </header>

  <article class="onebox-body">
    

<h3><a href="https://doc.atomvm.org/main/differences-with-beam.html?utm_source=chatgpt.com#memory-usage-and-speed" target="_blank" rel="noopener nofollow ugc">spawn_opt - Differences between AtomVM and BEAM — AtomVM...</a></h3>

  <p>BEAM users may be surprised by limitations or differences between AtomVM and BEAM, whether they write Erlang, Elixir or Gleam code.</p>


  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>
 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="386490" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/mob-native-beam-elixir-on-native-mobile/74924/23">Post #22</a>
	                </div>
	            </div>
              <div id="likers-container-386490" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="386490"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #22"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/74924/load_more?page=3">Load more posts</a>
</div></template></turbo-stream>