hunk.code_window: ---
   Expo provides various settings to configure how your app receives over-the-air (OTA) JavaScript updates. OTA updates allow you to publish a new version of your app JavaScript and assets without building a new version of your standalone app and re-submitting to app stores ([read more about the limitations](../../workflow/publishing/)).
   To perform an over-the-air update of your app, you simply run `expo publish`. If you're using release channels, specify one with `--release-channel <channel-name>` option. Please note that if you wish to update the SDK version which your app is using, you need to rebuild your app with `expo build:*` command and upload the binary file to the appropriate app store ([see the docs here](../../distribution/building-standalone-apps)).
   OTA updates are controlled by the [`updates` settings in app.json](../../workflow/configuration/#updates), which handle the initial app load, and the [Updates SDK module](../../sdk/updates/), which allows you to fetch updates asynchronously from your JS.
  
hunk.labels: keep keep keep keep replace keep keep keep
hunk.after_edit: To perform an over-the-air update of your app, you simply run `expo publish`. If you're using release channels, specify one with `--release-channel <channel-name>` option. **Please note**- if you wish to update the SDK version of your app, or make [any of the these changes](../../workflow/publishing/#some-native-configuration-cant-be-updated-by), you'll need to rebuild your app with `expo build:*` command and upload the binary file to the appropriate app store ([see the docs here](../../distribution/building-standalone-apps)).
  
hunk.file_path: docs/pages/versions/unversioned/guides/configuring-ota-updates.md
hunk.type: replace
file: //////////////////////////////////////////////////////////////////////////////
  //
  // (C) Copyright Ion Gaztanaga 2012-2012.
  // Distributed under the Boost Software License, Version 1.0.
  // (See accompanying file LICENSE_1_0.txt or copy at
  // http://www.boost.org/LICENSE_1_0.txt)
  //
  // See http://www.boost.org/libs/move for documentation.
  //
  //////////////////////////////////////////////////////////////////////////////
  
  //! \file
  
  #ifndef BOOST_MOVE_ALGORITHM_HPP
  #define BOOST_MOVE_ALGORITHM_HPP
  
  #ifndef BOOST_CONFIG_HPP
  #  include <boost/config.hpp>
  #endif
  #
  #if defined(BOOST_HAS_PRAGMA_ONCE)
  #  pragma once
  #endif
  
  #include <boost/move/detail/config_begin.hpp>
  
  #include <boost/move/utility_core.hpp>
  #include <boost/move/iterator.hpp>
  #include <boost/move/algo/move.hpp>
  #include <boost/detail/no_exceptions_support.hpp>
  
  #include <algorithm> //copy, copy_backward
  #include <memory>    //uninitialized_copy
  
  namespace boost {
  
  //////////////////////////////////////////////////////////////////////////////
  //
  //                            uninitialized_copy_or_move
  //
  //////////////////////////////////////////////////////////////////////////////
  
  namespace move_detail {
  
  template
  <typename I,   // I models InputIterator
  typename F>   // F models ForwardIterator
  inline F uninitialized_move_move_iterator(I f, I l, F r
  //                             ,typename ::boost::move_detail::enable_if< has_move_emulation_enabled<typename I::value_type> >::type* = 0
  )
  {
     return ::boost::uninitialized_move(f, l, r);
  }
  /*
  template
  <typename I,   // I models InputIterator
  typename F>   // F models ForwardIterator
  F uninitialized_move_move_iterator(I f, I l, F r,
                                     typename ::boost::move_detail::disable_if< has_move_emulation_enabled<typename I::value_type> >::type* = 0)
  {
     return std::uninitialized_copy(f.base(), l.base(), r);
  }
  */
  }  //namespace move_detail {
  
  template
  <typename I,   // I models InputIterator
  typename F>   // F models ForwardIterator
  inline F uninitialized_copy_or_move(I f, I l, F r,
                               typename ::boost::move_detail::enable_if< move_detail::is_move_iterator<I> >::type* = 0)
  {
     return ::boost::move_detail::uninitialized_move_move_iterator(f, l, r);
  }
  
  //////////////////////////////////////////////////////////////////////////////
  //
  //                            copy_or_move
  //
  //////////////////////////////////////////////////////////////////////////////
  
  namespace move_detail {
  
  template
  <typename I,   // I models InputIterator
  typename F>   // F models ForwardIterator
  inline F move_move_iterator(I f, I l, F r
  //                             ,typename ::boost::move_detail::enable_if< has_move_emulation_enabled<typename I::value_type> >::type* = 0
  )
  {
     return ::boost::move(f, l, r);
  }
  /*
  template
  <typename I,   // I models InputIterator
  typename F>   // F models ForwardIterator
  F move_move_iterator(I f, I l, F r,
                                     typename ::boost::move_detail::disable_if< has_move_emulation_enabled<typename I::value_type> >::type* = 0)
  {
     return std::copy(f.base(), l.base(), r);
  }
  */
  
  }  //namespace move_detail {
  
  template
  <typename I,   // I models InputIterator
  typename F>   // F models ForwardIterator
  inline F copy_or_move(I f, I l, F r,
                               typename ::boost::move_detail::enable_if< move_detail::is_move_iterator<I> >::type* = 0)
  {
     return ::boost::move_detail::move_move_iterator(f, l, r);
  }
  
  /// @endcond
  
  //! <b>Effects</b>:
  //!   \code
  //!   for (; first != last; ++result, ++first)
  //!      new (static_cast<void*>(&*result))
  //!         typename iterator_traits<ForwardIterator>::value_type(*first);
  //!   \endcode
  //!
  //! <b>Returns</b>: result
  //!
  //! <b>Note</b>: This function is provided because
  //!   <i>std::uninitialized_copy</i> from some STL implementations
  //!    is not compatible with <i>move_iterator</i>
  template
  <typename I,   // I models InputIterator
  typename F>   // F models ForwardIterator
  inline F uninitialized_copy_or_move(I f, I l, F r
     /// @cond
     ,typename ::boost::move_detail::disable_if< move_detail::is_move_iterator<I> >::type* = 0
     /// @endcond
     )
  {
     return std::uninitialized_copy(f, l, r);
  }
  
  //! <b>Effects</b>:
  //!   \code
  //!   for (; first != last; ++result, ++first)
  //!      *result = *first;
  //!   \endcode
  //!
  //! <b>Returns</b>: result
  //!
  //! <b>Note</b>: This function is provided because
  //!   <i>std::uninitialized_copy</i> from some STL implementations
  //!    is not compatible with <i>move_iterator</i>
  template
  <typename I,   // I models InputIterator
  typename F>   // F models ForwardIterator
  inline F copy_or_move(I f, I l, F r
     /// @cond
     ,typename ::boost::move_detail::disable_if< move_detail::is_move_iterator<I> >::type* = 0
     /// @endcond
     )
  {
     return std::copy(f, l, r);
  }
  
  }  //namespace boost {
  
  #include <boost/move/detail/config_end.hpp>
  
  #endif //#ifndef BOOST_MOVE_ALGORITHM_HPP
  