{"id":93850,"date":"2025-01-20T20:42:42","date_gmt":"2025-01-20T17:12:42","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/hotwire-native-switch-environments\/"},"modified":"2025-01-20T20:42:42","modified_gmt":"2025-01-20T17:12:42","slug":"hotwire-native-switch-environments","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/hotwire-native-switch-environments\/","title":{"rendered":"Hotwire Native &#8211; Switch Environments"},"content":{"rendered":"<div data-article-id=\"2228836\" id=\"article-body\">\n<p>\u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0648\u0627\u0631\u062f\u06cc \u06a9\u0647 \u0645\u062f\u062a\u06cc \u0627\u0633\u062a \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc Hotwire Native \u062e\u0648\u062f \u0645\u06cc \u062e\u0648\u0627\u0633\u062a\u0645\u060c \u062a\u0648\u0627\u0646\u0627\u06cc\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u0645\u062d\u06cc\u0637 \u0647\u0627 (\u0635\u062d\u0646\u0647\u060c \u062a\u0648\u0644\u06cc\u062f \u0648 \u063a\u06cc\u0631\u0647) \u0628\u062f\u0648\u0646 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a.<\/p>\n<p>\u0627\u06cc\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0631\u0627\u06cc \u0645\u0648\u0627\u0631\u062f\u06cc \u0645\u0627\u0646\u0646\u062f:<\/p>\n<p>\u062a\u0648\u062c\u0647: \u0645\u0646 \u0628\u0647 \u062c\u0632\u0626\u06cc\u0627\u062a \u0646\u062d\u0648\u0647 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 Hotwire Native \u0646\u0645\u06cc \u067e\u0631\u062f\u0627\u0632\u0645.<\/p>\n<p>\u0645\u0646\u0627\u0628\u0639 \u0628\u0633\u06cc\u0627\u0631 \u062e\u0648\u0628\u06cc \u0628\u0631\u0627\u06cc \u0622\u0646 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f\u060c \u0645\u0627\u0646\u0646\u062f \u0648\u0628\u0644\u0627\u06af \u062c\u0648 \u0645\u0627\u0632\u06cc\u0644\u0648\u062a\u06cc \u06cc\u0627 \u0648\u06cc\u0644\u06cc\u0627\u0645 \u06a9\u0646\u062f\u06cc.<\/p>\n<p>\u06cc\u0627 \u0627\u062e\u06cc\u0631\u0627\u064b\u060c \u06a9\u062a\u0627\u0628 \u0628\u0633\u06cc\u0627\u0631 \u062c\u0630\u0627\u0628 Hotwire Native \u0627\u062b\u0631 \u062c\u0648 \u0645\u0627\u0632\u06cc\u0644\u0648\u062a\u06cc.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"\u062a\u063a\u06cc\u06cc\u0631 \u0648\u0636\u0639\u06cc\u062a \u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/hotwire-native-switch-environments\/#%D9%88%D8%A8\" >\u0648\u0628<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/hotwire-native-switch-environments\/#Hotwire_Native_Android\" >Hotwire Native Android<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/hotwire-native-switch-environments\/#Hotwire_Native_iOS\" >Hotwire Native iOS<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D9%88%D8%A8\"><\/span>\n<p>  \u0648\u0628<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u06cc\u062f\u0647 \u0627\u0635\u0644\u06cc \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0644\u06cc\u0633\u062a\u06cc \u0627\u0632 \u0645\u062d\u06cc\u0637 \u0647\u0627 \u0631\u0627 \u0628\u0627 URL \u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0647\u06cc\u062f.<\/p>\n<p>\u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0645\u062d\u06cc\u0637\u06cc \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc \u06a9\u0646\u062f\u060c URL \u0627\u0646\u062a\u062e\u0627\u0628 \u0634\u062f\u0647 \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u06cc\u06a9 JS Bridge Component \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 Hotwire Native \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight html\"><code><span class=\"nt\"><p> <span class=\"na\">data-controller=<\/span><span class=\"s\">\"native--base-url\"<\/span><span class=\"nt\">&gt;<\/span>\n  <span class=\"nt\"><button> <span class=\"na\">data-action=<\/span><span class=\"s\">\"click-&gt;native--base-url#updateBaseURL\"<\/span> <span class=\"na\">data-native--base-url-url-param=<\/span><span class=\"s\">\"http:\/\/192.168.1.42:3000\"<\/span><span class=\"nt\">&gt;<\/span>Local<span class=\"nt\"\/><\/button><\/span>\n  <span class=\"nt\"><button> <span class=\"na\">data-action=<\/span><span class=\"s\">\"click-&gt;native--base-url#updateBaseURL\"<\/span> <span class=\"na\">data-native--base-url-url-param=<\/span><span class=\"s\">\"https:\/\/example.com\"<\/span><span class=\"nt\">&gt;<\/span>Production<span class=\"nt\"\/><\/button><\/span>\n<span class=\"nt\"\/><\/p><\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062a\u0648\u062c\u0647: \u062f\u0631 \u06cc\u06a9 \u0633\u0646\u0627\u0631\u06cc\u0648\u06cc \u0648\u0627\u0642\u0639\u06cc\u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u062e\u0648\u0627\u0647\u06cc\u062f URL \u0647\u0627\u06cc \u0645\u0645\u06a9\u0646 \u0631\u0627 \u062f\u0631 \u062c\u0627\u06cc\u06cc \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u062f\u060c \u0631\u0648\u06cc \u0622\u0646\u0647\u0627 \u062a\u06a9\u0631\u0627\u0631 \u06a9\u0646\u06cc\u062f \u0648 \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f \u06a9\u062f\u0627\u0645 \u06cc\u06a9 \u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 \u0627\u0646\u062a\u062e\u0627\u0628 \u0634\u062f\u0647 \u0627\u0633\u062a. \u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u0633\u0627\u062f\u06af\u06cc\u060c \u0641\u0639\u0644\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0627\u0646\u062c\u0627\u0645 \u062e\u0648\u0627\u0647\u062f \u0634\u062f.<\/p>\n<p><strong>\u062c\u0632\u0621 \u067e\u0644:<\/strong><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">BridgeComponent<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">@hotwired\/hotwire-native-bridge<\/span><span class=\"dl\">\"<\/span>\n\n<span class=\"c1\">\/\/ Connects to data-controller=\"native--base-url\"<\/span>\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">extends<\/span> <span class=\"nx\">BridgeComponent<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">static<\/span> <span class=\"nx\">component<\/span> <span class=\"o\">=<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">base-url<\/span><span class=\"dl\">\"<\/span>\n\n  <span class=\"nf\">updateBaseURL<\/span><span class=\"p\">({<\/span> <span class=\"na\">params<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">url<\/span> <span class=\"p\">}<\/span> <span class=\"p\">})<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nf\">send<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">updateBaseURL<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">url<\/span> <span class=\"p\">})<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0633\u0645\u062a Hotwire Native\u060c \u0628\u0627\u06cc\u062f \u067e\u06cc\u0627\u0645 JS Bridge \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u0645 \u0648 URL \u0627\u0646\u062a\u062e\u0627\u0628 \u0634\u062f\u0647 \u0631\u0627 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u0628\u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0632 \u0622\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 URL \u0627\u0635\u0644\u06cc \u0628\u0631\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc \u0622\u06cc\u0646\u062f\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645. \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 URL \u062f\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0632 SharedPreferences \u0648 \u0628\u0631\u0627\u06cc iOS \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0632 UserDefaults \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645.<\/p>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0646\u06af\u0627\u0647\u06cc \u0628\u0647 \u06a9\u062f \u0647\u0631 \u062f\u0648 \u067e\u0644\u062a\u0641\u0631\u0645 \u0628\u06cc\u0646\u062f\u0627\u0632\u06cc\u0645.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Hotwire_Native_Android\"><\/span>\n<p>  Hotwire Native Android<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u0628\u062a\u062f\u0627 \u0645\u0642\u062f\u0627\u0631\u06cc \u0622\u0645\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc\u060c \u0645\u0627 \u0628\u0647 \u0631\u0627\u0647\u06cc \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 URL \u0627\u0631\u0633\u0627\u0644 \u0634\u062f\u0647 \u0628\u06cc\u0646 \u062c\u0644\u0633\u0627\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u0645.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u06a9\u0644\u0627\u0633 \u0633\u0627\u062f\u0647 \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 SharedPreferences \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u0647 \u0646\u0638\u0631 \u0628\u0631\u0633\u062f:<\/p>\n<p><strong>SharedPreferencesAccess.kt:<\/strong><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight kotlin\"><code><span class=\"kd\">object<\/span> <span class=\"nc\">SharedPreferencesAccess<\/span> <span class=\"p\">{<\/span>\n  <span class=\"k\">const<\/span> <span class=\"kd\">val<\/span> <span class=\"py\">SHARED_PREFERENCES_FILE_KEY<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"MobileAppData\"<\/span>\n  <span class=\"k\">const<\/span> <span class=\"kd\">val<\/span> <span class=\"py\">BASE_URL_KEY<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"BaseURL\"<\/span>\n\n  <span class=\"k\">fun<\/span> <span class=\"nf\">setBaseURL<\/span><span class=\"p\">(<\/span><span class=\"n\">context<\/span><span class=\"p\">:<\/span> <span class=\"nc\">Context<\/span><span class=\"p\">,<\/span> <span class=\"n\">baseURL<\/span><span class=\"p\">:<\/span> <span class=\"nc\">String<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">val<\/span> <span class=\"py\">editor<\/span> <span class=\"p\">=<\/span> <span class=\"nf\">getPreferences<\/span><span class=\"p\">(<\/span><span class=\"n\">context<\/span><span class=\"p\">).<\/span><span class=\"nf\">edit<\/span><span class=\"p\">()<\/span>\n    <span class=\"n\">editor<\/span><span class=\"p\">.<\/span><span class=\"nf\">putString<\/span><span class=\"p\">(<\/span><span class=\"nc\">BASE_URL_KEY<\/span><span class=\"p\">,<\/span> <span class=\"n\">baseURL<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">editor<\/span><span class=\"p\">.<\/span><span class=\"nf\">apply<\/span><span class=\"p\">()<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"k\">fun<\/span> <span class=\"nf\">getBaseURL<\/span><span class=\"p\">(<\/span><span class=\"n\">context<\/span><span class=\"p\">:<\/span> <span class=\"nc\">Context<\/span><span class=\"p\">?):<\/span> <span class=\"nc\">String<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"nf\">getPreferences<\/span><span class=\"p\">(<\/span><span class=\"n\">context<\/span><span class=\"o\">!!<\/span><span class=\"p\">).<\/span><span class=\"nf\">getString<\/span><span class=\"p\">(<\/span><span class=\"nc\">BASE_URL_KEY<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"\"<\/span><span class=\"p\">)<\/span> <span class=\"o\">?:<\/span> <span class=\"s\">\"\"<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"k\">private<\/span> <span class=\"k\">fun<\/span> <span class=\"nf\">getPreferences<\/span><span class=\"p\">(<\/span><span class=\"n\">context<\/span><span class=\"p\">:<\/span> <span class=\"nc\">Context<\/span><span class=\"p\">):<\/span> <span class=\"nc\">SharedPreferences<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"n\">context<\/span><span class=\"p\">.<\/span><span class=\"nf\">getSharedPreferences<\/span><span class=\"p\">(<\/span><span class=\"nc\">SHARED_PREFERENCES_FILE_KEY<\/span><span class=\"p\">,<\/span> <span class=\"nc\">Context<\/span><span class=\"p\">.<\/span><span class=\"nc\">MODE_PRIVATE<\/span><span class=\"p\">)<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u067e\u0633 \u0627\u0632 \u0622\u0646\u060c \u0645\u0627 \u0628\u0647 \u0631\u0648\u0634\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u0645 \u062a\u0627 URL \u0647\u0627\u06cc \u062e\u0648\u062f \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0645\u062d\u06cc\u0637 \u0627\u0646\u062a\u062e\u0627\u0628 \u0634\u062f\u0647 \u0648 \u0627\u06cc\u0646\u06a9\u0647 \u0622\u06cc\u0627 URL \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0647 \u062f\u0627\u0631\u06cc\u0645 \u06cc\u0627 \u062e\u06cc\u0631\u060c \u0628\u0633\u0627\u0632\u06cc\u0645.<\/p>\n<p>\u0645\u0646 \u0627\u0632 \u06cc\u06a9 viewmodel \u0628\u0647 \u0646\u0627\u0645 EndpointModel \u0628\u0631\u0627\u06cc \u0622\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight kotlin\"><code><span class=\"kd\">class<\/span> <span class=\"nc\">EndpointModel<\/span><span class=\"p\">(<\/span><span class=\"n\">application<\/span><span class=\"p\">:<\/span> <span class=\"nc\">Application<\/span><span class=\"p\">):<\/span><span class=\"nc\">AndroidViewModel<\/span><span class=\"p\">(<\/span><span class=\"n\">application<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">private<\/span> <span class=\"kd\">var<\/span> <span class=\"py\">baseURL<\/span><span class=\"p\">:<\/span> <span class=\"nc\">String<\/span>\n\n    <span class=\"nf\">init<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"n\">baseURL<\/span> <span class=\"p\">=<\/span> <span class=\"nf\">loadBaseURL<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">fun<\/span> <span class=\"nf\">setBaseURL<\/span><span class=\"p\">(<\/span><span class=\"n\">url<\/span><span class=\"p\">:<\/span> <span class=\"nc\">String<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"n\">baseURL<\/span> <span class=\"p\">=<\/span> <span class=\"n\">url<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">private<\/span> <span class=\"k\">fun<\/span> <span class=\"nf\">loadBaseURL<\/span><span class=\"p\">():<\/span> <span class=\"nc\">String<\/span> <span class=\"p\">{<\/span>\n        <span class=\"kd\">val<\/span> <span class=\"py\">savedURL<\/span> <span class=\"p\">=<\/span> <span class=\"nc\">SharedPreferencesAccess<\/span><span class=\"p\">.<\/span><span class=\"nf\">getBaseURL<\/span><span class=\"p\">(<\/span><span class=\"n\">getApplication<\/span><span class=\"p\">&lt;<\/span><span class=\"nc\">Application<\/span><span class=\"p\">&gt;().<\/span><span class=\"n\">applicationContext<\/span><span class=\"p\">)<\/span>\n\n        <span class=\"c1\">\/\/ Here is the basic idea of this article.   <\/span>\n        <span class=\"c1\">\/\/ If we have a saved URL, we use it. <\/span>\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">savedURL<\/span><span class=\"p\">.<\/span><span class=\"nf\">isNotEmpty<\/span><span class=\"p\">())<\/span> <span class=\"p\">{<\/span>\n            <span class=\"k\">return<\/span> <span class=\"n\">savedURL<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"c1\">\/\/ Otherwise we use the default URL based on the build type.   <\/span>\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nc\">BuildConfig<\/span><span class=\"p\">.<\/span><span class=\"nc\">DEBUG<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n            <span class=\"k\">return<\/span> <span class=\"nc\">LOCAL_URL<\/span>\n        <span class=\"p\">}<\/span>\n        <span class=\"k\">return<\/span> <span class=\"nc\">PRODUCTION_URL<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"kd\">val<\/span> <span class=\"py\">startURL<\/span><span class=\"p\">:<\/span> <span class=\"nc\">String<\/span>\n        <span class=\"k\">get<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span> <span class=\"k\">return<\/span> <span class=\"s\">\"$baseURL\/home\"<\/span> <span class=\"p\">}<\/span>\n\n    <span class=\"kd\">val<\/span> <span class=\"py\">pathConfigurationURL<\/span><span class=\"p\">:<\/span> <span class=\"nc\">String<\/span>\n        <span class=\"k\">get<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span><span class=\"k\">return<\/span> <span class=\"s\">\"$baseURL\/api\/v1\/android\/path_configuration.json\"<\/span><span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062b\u0627\u0628\u062a \u0647\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0634\u062f\u0647 \u062f\u0631 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u0628\u0647 \u0646\u0627\u0645 Constants.kt \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u0627\u0646\u062f.<\/p>\n<p><strong>Constants.kt:<\/strong><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight kotlin\"><code><span class=\"k\">const<\/span> <span class=\"kd\">val<\/span> <span class=\"py\">PRODUCTION_URL<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"https:\/\/myapp.com\"<\/span>\n<span class=\"k\">const<\/span> <span class=\"kd\">val<\/span> <span class=\"py\">LOCAL_URL<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"http:\/\/192.168.1.42:3000\"<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062e\u0648\u0628\u060c \u062a\u0627 \u0627\u06cc\u0646\u062c\u0627 \u062e\u06cc\u0644\u06cc \u062e\u0648\u0628 \u0627\u0633\u062a.<\/p>\n<p>\u0645\u0627 URL \u0627\u0646\u062a\u062e\u0627\u0628 \u0634\u062f\u0647 \u0631\u0627 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645 \u0648 \u0631\u0627\u0647\u06cc \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f URL \u0647\u0627\u06cc \u062e\u0648\u062f \u0628\u0631 \u0627\u0633\u0627\u0633 \u0627\u06cc\u0646\u06a9\u0647 \u0622\u06cc\u0627 \u06cc\u06a9 URL \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0647 \u062f\u0627\u0631\u06cc\u0645 \u06cc\u0627 \u062e\u06cc\u0631 \u062f\u0627\u0631\u06cc\u0645.<\/p>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u0641\u0642\u0637 \u0628\u0627\u06cc\u062f \u0628\u0647 Hotwire Native \u0628\u06af\u0648\u06cc\u06cc\u0645 \u06a9\u0647 \u0627\u0632 URL \u0627\u0646\u062a\u062e\u0627\u0628 \u0634\u062f\u0647 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062d\u0644 \u0634\u0631\u0648\u0639 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u062f.<\/p>\n<p>\u0628\u0647 \u0637\u0648\u0631 \u067e\u06cc\u0634 \u0641\u0631\u0636\u060c Hotwire Native \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0631\u062f a <code>startLocation<\/code> \u062f\u0631 MainActivity \u062a\u0639\u0631\u06cc\u0641 \u0634\u0648\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 endpointModel\u060c \u0627\u0628\u062a\u062f\u0627 \u0628\u0627\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u06a9\u0646\u06cc\u0645. \u0627\u06cc\u0646 \u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646 \u062f\u0631 \u06a9\u0644\u0627\u0633 &#8220;MainApplication&#8221; \u0645\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f (\u062f\u0631 \u067e\u0631\u0648\u0698\u0647 Hotwire Native Demo\u060c \u0627\u06cc\u0646 \u06a9\u0644\u0627\u0633 \u0646\u0627\u0645\u06cc\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f <code>DemoApplication\\<\/code>):<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight kotlin\"><code><span class=\"kd\">class<\/span> <span class=\"nc\">MainApplication<\/span> <span class=\"p\">:<\/span> <span class=\"nc\">Application<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">val<\/span> <span class=\"py\">endpointModel<\/span><span class=\"p\">:<\/span> <span class=\"nc\">EndpointModel<\/span> <span class=\"k\">by<\/span> <span class=\"nf\">lazy<\/span> <span class=\"p\">{<\/span>\n        <span class=\"nc\">ViewModelProvider<\/span><span class=\"p\">.<\/span><span class=\"nc\">AndroidViewModelFactory<\/span><span class=\"p\">.<\/span><span class=\"nf\">getInstance<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">.<\/span><span class=\"nf\">create<\/span><span class=\"p\">(<\/span><span class=\"nc\">EndpointModel<\/span><span class=\"o\">::<\/span><span class=\"k\">class<\/span><span class=\"p\">.<\/span><span class=\"n\">java<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">override<\/span> <span class=\"k\">fun<\/span> <span class=\"nf\">onCreate<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">super<\/span><span class=\"p\">.<\/span><span class=\"nf\">onCreate<\/span><span class=\"p\">()<\/span>\n\n        <span class=\"c1\">\/\/ Load the path configuration<\/span>\n        <span class=\"nc\">Hotwire<\/span><span class=\"p\">.<\/span><span class=\"nf\">loadPathConfiguration<\/span><span class=\"p\">(<\/span>\n            <span class=\"n\">context<\/span> <span class=\"p\">=<\/span> <span class=\"k\">this<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">location<\/span> <span class=\"p\">=<\/span> <span class=\"nc\">PathConfiguration<\/span><span class=\"p\">.<\/span><span class=\"nc\">Location<\/span><span class=\"p\">(<\/span>\n                <span class=\"n\">assetFilePath<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"json\/configuration.json\"<\/span><span class=\"p\">,<\/span>\n                <span class=\"n\">remoteFileUrl<\/span> <span class=\"p\">=<\/span> <span class=\"n\">endpointModel<\/span><span class=\"p\">.<\/span><span class=\"n\">pathConfigurationURL<\/span>\n            <span class=\"p\">)<\/span>\n        <span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0627 \u0648\u062c\u0648\u062f endpointModel\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0632 \u0622\u0646 \u0628\u0631\u0627\u06cc \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0631\u062f\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645 <code>startLocation<\/code> \u062f\u0631 MainActivity:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight kotlin\"><code><span class=\"kd\">class<\/span> <span class=\"nc\">MainActivity<\/span> <span class=\"p\">:<\/span> <span class=\"nc\">HotwireActivity<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">lateinit<\/span> <span class=\"kd\">var<\/span> <span class=\"py\">endpointModel<\/span><span class=\"p\">:<\/span> <span class=\"nc\">EndpointModel<\/span>\n\n    <span class=\"k\">override<\/span> <span class=\"k\">fun<\/span> <span class=\"nf\">onCreate<\/span><span class=\"p\">(<\/span><span class=\"n\">savedInstanceState<\/span><span class=\"p\">:<\/span> <span class=\"nc\">Bundle<\/span><span class=\"p\">?)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"n\">endpointModel<\/span> <span class=\"p\">=<\/span> <span class=\"p\">(<\/span><span class=\"n\">application<\/span> <span class=\"k\">as<\/span> <span class=\"nc\">MainApplication<\/span><span class=\"p\">).<\/span><span class=\"n\">endpointModel<\/span>\n\n        <span class=\"k\">super<\/span><span class=\"p\">.<\/span><span class=\"nf\">onCreate<\/span><span class=\"p\">(<\/span><span class=\"n\">savedInstanceState<\/span><span class=\"p\">)<\/span>\n        <span class=\"nf\">setContentView<\/span><span class=\"p\">(<\/span><span class=\"nc\">R<\/span><span class=\"p\">.<\/span><span class=\"n\">layout<\/span><span class=\"p\">.<\/span><span class=\"n\">activity_main<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">override<\/span> <span class=\"k\">fun<\/span> <span class=\"nf\">navigatorConfigurations<\/span><span class=\"p\">()<\/span> <span class=\"p\">=<\/span> <span class=\"nf\">listOf<\/span><span class=\"p\">(<\/span>\n        <span class=\"nc\">NavigatorConfiguration<\/span><span class=\"p\">(<\/span>\n            <span class=\"n\">name<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"main\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">startLocation<\/span> <span class=\"p\">=<\/span> <span class=\"n\">endpointModel<\/span><span class=\"p\">.<\/span><span class=\"n\">startURL<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">navigatorHostId<\/span> <span class=\"p\">=<\/span> <span class=\"nc\">R<\/span><span class=\"p\">.<\/span><span class=\"n\">id<\/span><span class=\"p\">.<\/span><span class=\"n\">main_nav_host<\/span>\n        <span class=\"p\">)<\/span>\n    <span class=\"p\">)<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u0645\u0627 \u062a\u0645\u0627\u0645 \u0642\u0637\u0639\u0627\u062a \u0631\u0627 \u0628\u0631\u0627\u06cc \u062c\u0627\u0628\u0647\u200c\u062c\u0627\u06cc\u06cc \u067e\u0648\u06cc\u0627 \u0628\u06cc\u0646 \u0645\u062d\u06cc\u0637\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 Hotwire Native \u0622\u0645\u0627\u062f\u0647 \u06a9\u0631\u062f\u0647\u200c\u0627\u06cc\u0645.<\/p>\n<p>\u062a\u0646\u0647\u0627 \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u0627\u0632 \u062f\u0633\u062a \u0631\u0641\u062a\u0647 \u0627\u0633\u062a\u060c \u0645\u0624\u0644\u0641\u0647 \u067e\u0644 \u0627\u0633\u062a \u06a9\u0647 \u067e\u06cc\u0627\u0645 \u0631\u0627 \u0627\u0632 \u0648\u0628 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f \u0648 URL \u067e\u0627\u06cc\u0647 \u0631\u0627 \u0628\u0647 \u0631\u0648\u0632 \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight kotlin\"><code><span class=\"kd\">class<\/span> <span class=\"nc\">BaseURLComponent<\/span><span class=\"p\">(<\/span>\n    <span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"nc\">String<\/span><span class=\"p\">,<\/span>\n    <span class=\"k\">private<\/span> <span class=\"kd\">val<\/span> <span class=\"py\">hotwireDelegate<\/span><span class=\"p\">:<\/span> <span class=\"nc\">BridgeDelegate<\/span><span class=\"p\">&lt;<\/span><span class=\"nc\">HotwireDestination<\/span><span class=\"p\">&gt;<\/span>\n<span class=\"p\">)<\/span> <span class=\"p\">:<\/span> <span class=\"nc\">BridgeComponent<\/span><span class=\"p\">&lt;<\/span><span class=\"nc\">HotwireDestination<\/span><span class=\"p\">&gt;(<\/span><span class=\"n\">name<\/span><span class=\"p\">,<\/span> <span class=\"n\">hotwireDelegate<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n\n    <span class=\"k\">private<\/span> <span class=\"kd\">val<\/span> <span class=\"py\">fragment<\/span><span class=\"p\">:<\/span> <span class=\"nc\">Fragment<\/span>\n        <span class=\"k\">get<\/span><span class=\"p\">()<\/span> <span class=\"p\">=<\/span> <span class=\"n\">hotwireDelegate<\/span><span class=\"p\">.<\/span><span class=\"n\">destination<\/span><span class=\"p\">.<\/span><span class=\"n\">fragment<\/span>\n\n    <span class=\"k\">override<\/span> <span class=\"k\">fun<\/span> <span class=\"nf\">onReceive<\/span><span class=\"p\">(<\/span><span class=\"n\">message<\/span><span class=\"p\">:<\/span> <span class=\"nc\">Message<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">when<\/span> <span class=\"p\">(<\/span><span class=\"n\">message<\/span><span class=\"p\">.<\/span><span class=\"n\">event<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n            <span class=\"s\">\"updateBaseURL\"<\/span> <span class=\"p\">-&gt;<\/span> <span class=\"nf\">updateBaseURL<\/span><span class=\"p\">(<\/span><span class=\"n\">message<\/span><span class=\"p\">)<\/span>\n            <span class=\"k\">else<\/span> <span class=\"p\">-&gt;<\/span> <span class=\"nc\">Log<\/span><span class=\"p\">.<\/span><span class=\"nf\">w<\/span><span class=\"p\">(<\/span><span class=\"s\">\"BaseURLComponent\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"Unknown event for message: $message\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">private<\/span> <span class=\"k\">fun<\/span> <span class=\"nf\">updateBaseURL<\/span><span class=\"p\">(<\/span><span class=\"n\">message<\/span><span class=\"p\">:<\/span> <span class=\"nc\">Message<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"kd\">val<\/span> <span class=\"py\">data<\/span> <span class=\"p\">=<\/span> <span class=\"n\">message<\/span><span class=\"p\">.<\/span><span class=\"n\">data<\/span><span class=\"p\">&lt;<\/span><span class=\"nc\">MessageData<\/span><span class=\"p\">&gt;()<\/span> <span class=\"o\">?:<\/span> <span class=\"k\">return<\/span>\n        <span class=\"kd\">val<\/span> <span class=\"py\">url<\/span> <span class=\"p\">=<\/span> <span class=\"n\">data<\/span><span class=\"p\">.<\/span><span class=\"n\">url<\/span>\n\n        <span class=\"c1\">\/\/ Save the new base URL to SharedPreferences<\/span>\n        <span class=\"nc\">SharedPreferencesAccess<\/span><span class=\"p\">.<\/span><span class=\"nf\">setBaseURL<\/span><span class=\"p\">(<\/span><span class=\"n\">fragment<\/span><span class=\"p\">.<\/span><span class=\"nf\">requireContext<\/span><span class=\"p\">(),<\/span> <span class=\"n\">url<\/span><span class=\"p\">)<\/span>\n\n        <span class=\"c1\">\/\/ Apply the new base URL and reset the navigators<\/span>\n        <span class=\"kd\">val<\/span> <span class=\"py\">mainActivity<\/span> <span class=\"p\">=<\/span> <span class=\"n\">fragment<\/span><span class=\"p\">.<\/span><span class=\"n\">activity<\/span> <span class=\"k\">as<\/span><span class=\"p\">?<\/span> <span class=\"nc\">MainActivity<\/span>\n        <span class=\"n\">mainActivity<\/span><span class=\"o\">?.<\/span><span class=\"n\">endpointModel<\/span><span class=\"o\">?.<\/span><span class=\"nf\">setBaseURL<\/span><span class=\"p\">(<\/span><span class=\"n\">url<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">mainActivity<\/span><span class=\"o\">?.<\/span><span class=\"n\">delegate<\/span><span class=\"o\">?.<\/span><span class=\"nf\">resetNavigators<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"nd\">@Serializable<\/span>\n    <span class=\"kd\">data class<\/span> <span class=\"nc\">MessageData<\/span><span class=\"p\">(<\/span>\n        <span class=\"nd\">@SerialName<\/span><span class=\"p\">(<\/span><span class=\"s\">\"url\"<\/span><span class=\"p\">)<\/span> <span class=\"kd\">val<\/span> <span class=\"py\">url<\/span><span class=\"p\">:<\/span> <span class=\"nc\">String<\/span>\n    <span class=\"p\">)<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u0646\u062c\u0627\u0645 \u0634\u062f \ud83c\udf89<\/p>\n<p>\u0627\u06cc\u0646 \u0628\u0627\u06cc\u062f \u062a\u0645\u0627\u0645 \u0645\u0631\u0627\u062d\u0644 \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0628\u0631\u0627\u06cc \u062c\u0627\u0628\u0647\u200c\u062c\u0627\u06cc\u06cc \u0628\u06cc\u0646 \u0645\u062d\u06cc\u0637\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u062f\u0631 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 Hotwire Native Android \u0631\u0627 \u0645\u0634\u062e\u0635 \u06a9\u0646\u062f.<\/p>\n<p>\u0627\u0645\u0627 \u06cc\u06a9 \u0634\u06a9\u0627\u0631 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f. \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0627\u0645\u062a\u062d\u0627\u0646 \u0645\u06cc \u06a9\u0646\u06cc\u062f\u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0645\u062a\u0648\u062c\u0647 \u0634\u0648\u06cc\u062f \u06a9\u0647 \u0633\u0648\u0626\u06cc\u0686 \u0645\u062d\u06cc\u0637 \u062a\u0646\u0647\u0627 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0645\u062c\u062f\u062f\u0627\u064b \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0645\u0634\u06a9\u0644 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 Hotwire Native URL \u067e\u0627\u06cc\u0647 \u062c\u062f\u06cc\u062f \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 &#8220;\u067e\u06cc\u0645\u0627\u06cc\u0634 \u062f\u0631\u0648\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u06cc&#8221; \u0646\u0645\u06cc \u0634\u0646\u0627\u0633\u062f \u0648 URL \u0647\u0627 \u0631\u0627 \u0628\u0627 URL \u067e\u0627\u06cc\u0647 \u062c\u062f\u06cc\u062f \u062f\u0631 \u06cc\u06a9 \u0645\u0631\u0648\u0631\u06af\u0631 \u062e\u0627\u0631\u062c\u06cc \u0628\u0627\u0632 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0628\u0647 \u0627\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0627\u0633\u062a \u06a9\u0647 <code>AppNavigationRouteDecisionHandler<\/code> \u0627\u0632 URL \u067e\u0627\u06cc\u0647 \u062c\u062f\u06cc\u062f \u0627\u0637\u0644\u0627\u0639\u06cc \u0646\u062f\u0627\u0631\u062f. \u0635\u0627\u062f\u0642\u0627\u0646\u0647 \u0628\u06af\u0648\u06cc\u0645 \u0645\u0637\u0645\u0626\u0646 \u0646\u06cc\u0633\u062a\u0645 \u06a9\u0647 \u0622\u06cc\u0627 \u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 \u0645\u0648\u0631\u062f \u0627\u0646\u062a\u0638\u0627\u0631 \u0627\u0633\u062a \u06cc\u0627 \u06cc\u06a9 \u0627\u0634\u06a9\u0627\u0644 \u062f\u0631 Hotwire Native Android. \u0627\u0645\u0627 \u0645\u0627 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u06cc\u06a9 \u0633\u0641\u0627\u0631\u0634\u06cc \u0627\u06cc\u0646 \u0645\u0634\u06a9\u0644 \u0631\u0627 \u0628\u0631\u0637\u0631\u0641 \u06a9\u0646\u06cc\u0645 <code>Router.RouteDecisionHandler<\/code>. \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u062f\u0631 \u0627\u0633\u0646\u0627\u062f \u0631\u0633\u0645\u06cc \u062f\u0631\u0628\u0627\u0631\u0647 \u06a9\u0646\u062a\u0631\u0644\u200c\u06a9\u0646\u0646\u062f\u0647\u200c\u0647\u0627\u06cc \u0645\u0633\u06cc\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u06cc\u0634\u062a\u0631\u06cc \u06a9\u0633\u0628 \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight kotlin\"><code><span class=\"kd\">class<\/span> <span class=\"nc\">NavigationDecisionHandler<\/span> <span class=\"p\">:<\/span> <span class=\"nc\">Router<\/span><span class=\"p\">.<\/span><span class=\"nc\">RouteDecisionHandler<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">override<\/span> <span class=\"kd\">val<\/span> <span class=\"py\">name<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"app-navigation-router\"<\/span>\n\n    <span class=\"k\">override<\/span> <span class=\"kd\">val<\/span> <span class=\"py\">decision<\/span> <span class=\"p\">=<\/span> <span class=\"nc\">Router<\/span><span class=\"p\">.<\/span><span class=\"nc\">Decision<\/span><span class=\"p\">.<\/span><span class=\"nc\">NAVIGATE<\/span>\n\n    <span class=\"k\">override<\/span> <span class=\"k\">fun<\/span> <span class=\"nf\">matches<\/span><span class=\"p\">(<\/span>\n        <span class=\"n\">location<\/span><span class=\"p\">:<\/span> <span class=\"nc\">String<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">configuration<\/span><span class=\"p\">:<\/span> <span class=\"nc\">NavigatorConfiguration<\/span>\n    <span class=\"p\">):<\/span> <span class=\"nc\">Boolean<\/span> <span class=\"p\">{<\/span>\n        <span class=\"kd\">val<\/span> <span class=\"py\">baseURL<\/span> <span class=\"p\">=<\/span> <span class=\"nc\">MainApplication<\/span><span class=\"p\">().<\/span><span class=\"n\">endpointModel<\/span><span class=\"p\">.<\/span><span class=\"n\">homeURL<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">baseURL<\/span><span class=\"p\">.<\/span><span class=\"nf\">toUri<\/span><span class=\"p\">().<\/span><span class=\"n\">host<\/span> <span class=\"p\">==<\/span> <span class=\"n\">location<\/span><span class=\"p\">.<\/span><span class=\"nf\">toUri<\/span><span class=\"p\">().<\/span><span class=\"n\">host<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">override<\/span> <span class=\"k\">fun<\/span> <span class=\"nf\">handle<\/span><span class=\"p\">(<\/span>\n        <span class=\"n\">location<\/span><span class=\"p\">:<\/span> <span class=\"nc\">String<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">configuration<\/span><span class=\"p\">:<\/span> <span class=\"nc\">NavigatorConfiguration<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">activity<\/span><span class=\"p\">:<\/span> <span class=\"nc\">HotwireActivity<\/span>\n    <span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"c1\">\/\/ No-op<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062a\u0646\u0647\u0627 \u0645\u0648\u0631\u062f\u06cc \u06a9\u0647 \u0627\u06a9\u0646\u0648\u0646 \u06af\u0645 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0627\u0637\u0644\u0627\u0639 \u0631\u0633\u0627\u0646\u06cc \u0628\u0647 Hotwire Native \u062f\u0631 \u0645\u0648\u0631\u062f \u0631\u0648\u062a\u0631 \u062c\u062f\u06cc\u062f \u0648 \u062b\u0628\u062a \u0622\u0646 \u0647\u0645\u0631\u0627\u0647 \u0628\u0627 \u0631\u0648\u062a\u0631\u0647\u0627\u06cc \u067e\u06cc\u0634 \u0641\u0631\u0636\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645. \u0627\u06cc\u0646 \u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646 \u062f\u0631 \u0641\u0627\u06cc\u0644 MainApplication.kt \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f\u060c \u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u0627 \u062f\u06cc\u06af\u0631 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a Hotwire Native \u0631\u0627 \u0646\u06cc\u0632 \u062f\u0627\u0631\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight kotlin\"><code><span class=\"c1\">\/\/ Register route decision handlers<\/span>\n<span class=\"c1\">\/\/ https:\/\/native.hotwired.dev\/android\/reference#handling-url-routes<\/span>\n<span class=\"nc\">Hotwire<\/span><span class=\"p\">.<\/span><span class=\"nf\">registerRouteDecisionHandlers<\/span><span class=\"p\">(<\/span>\n    <span class=\"nc\">NavigationDecisionHandler<\/span><span class=\"p\">(),<\/span>\n    <span class=\"nc\">AppNavigationRouteDecisionHandler<\/span><span class=\"p\">(),<\/span>\n    <span class=\"nc\">BrowserRouteDecisionHandler<\/span><span class=\"p\">()<\/span>\n<span class=\"p\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0648 \u062d\u0627\u0644\u0627 \u06a9\u0627\u0631\u0645\u0648\u0646 \u062a\u0645\u0648\u0645 \u0634\u062f\ud83c\udf89\ud83c\udf89.<\/p>\n<p>\u0627\u06cc\u0646 \u0628\u0627\u0631 \u0648\u0627\u0642\u0639\u06cc<\/p>\n<p>\u0645\u0646 \u0642\u0648\u0644 \u0645\u06cc \u062f\u0647\u0645 \u0633\u0645\u062a iOS \u06a9\u0645\u06cc \u0633\u0627\u062f\u0647 \u062a\u0631 \u0627\u0633\u062a.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Hotwire_Native_iOS\"><\/span>\n<p>  Hotwire Native iOS<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06cc\u062f\u0647 \u0627\u0635\u0644\u06cc \u06cc\u06a9\u0633\u0627\u0646 \u0627\u0633\u062a: URL \u0627\u0646\u062a\u062e\u0627\u0628 \u0634\u062f\u0647 \u0631\u0627 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u062f \u0648 \u0627\u0632 \u0622\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 URL \u0627\u0635\u0644\u06cc \u0628\u0631\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc \u0622\u06cc\u0646\u062f\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u06cc\u06a9 \u06a9\u0644\u0627\u0633 \u0627\u0635\u0644\u06cc UserDefaultsAccess \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0647 \u0634\u06a9\u0644 \u0632\u06cc\u0631 \u0628\u0627\u0634\u062f:<\/p>\n<p><strong>UserDefaultsAccess:<\/strong><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight swift\"><code><span class=\"kd\">import<\/span> <span class=\"kt\">Foundation<\/span>\n\n<span class=\"kd\">class<\/span> <span class=\"kt\">UserDefaultsAccess<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">static<\/span> <span class=\"k\">let<\/span> <span class=\"nv\">KEY_BASE_URL<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"BaseURL\"<\/span>\n\n  <span class=\"kd\">private<\/span> <span class=\"nf\">init<\/span><span class=\"p\">(){}<\/span>\n\n  <span class=\"kd\">static<\/span> <span class=\"kd\">func<\/span> <span class=\"nf\">setBaseURL<\/span><span class=\"p\">(<\/span><span class=\"nv\">url<\/span><span class=\"p\">:<\/span> <span class=\"kt\">String<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kt\">UserDefaults<\/span><span class=\"o\">.<\/span><span class=\"n\">standard<\/span><span class=\"o\">.<\/span><span class=\"nf\">set<\/span><span class=\"p\">(<\/span><span class=\"n\">url<\/span><span class=\"p\">,<\/span> <span class=\"nv\">forKey<\/span><span class=\"p\">:<\/span> <span class=\"kt\">KEY_BASE_URL<\/span><span class=\"p\">)<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"kd\">static<\/span> <span class=\"kd\">func<\/span> <span class=\"nf\">getBaseURL<\/span><span class=\"p\">()<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"kt\">String<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"kt\">UserDefaults<\/span><span class=\"o\">.<\/span><span class=\"n\">standard<\/span><span class=\"o\">.<\/span><span class=\"nf\">string<\/span><span class=\"p\">(<\/span><span class=\"nv\">forKey<\/span><span class=\"p\">:<\/span> <span class=\"kt\">KEY_BASE_URL<\/span><span class=\"p\">)<\/span> <span class=\"p\">??<\/span> <span class=\"s\">\"\"<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u0645\u0627 \u0628\u0647 \u0631\u0627\u0647\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u0645 \u06a9\u0647 URL \u0647\u0627\u06cc \u062e\u0648\u062f \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0645\u062d\u06cc\u0637 \u0627\u0646\u062a\u062e\u0627\u0628 \u0634\u062f\u0647 \u0648 \u0627\u06cc\u0646\u06a9\u0647 \u0622\u06cc\u0627 URL \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0647 \u0627\u06cc \u062f\u0627\u0631\u06cc\u0645 \u06cc\u0627 \u062e\u06cc\u0631\u060c \u0628\u0633\u0627\u0632\u06cc\u0645.<\/p>\n<p>\u0645\u0634\u0627\u0628\u0647 \u0633\u0645\u062a \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u060c \u06a9\u0644\u0627\u0633\u06cc \u0628\u0647 \u0646\u0627\u0645 Endpoint \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0645 \u06a9\u0647 \u062d\u0627\u0648\u06cc \u0627\u06cc\u0646 \u0645\u0646\u0637\u0642 \u0627\u0633\u062a.<\/p>\n<p><strong>\u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646:<\/strong><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight swift\"><code><span class=\"c1\">\/\/ Learn more about this Endpoint class at this Joe Masilotti's Blog post: https:\/\/masilotti.com\/turbo-ios\/tips-and-tricks\/<\/span>\n<span class=\"kd\">import<\/span> <span class=\"kt\">Foundation<\/span>\n\n<span class=\"kd\">class<\/span> <span class=\"kt\">Endpoint<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">static<\/span> <span class=\"k\">let<\/span> <span class=\"nv\">instance<\/span> <span class=\"o\">=<\/span> <span class=\"kt\">Endpoint<\/span><span class=\"p\">()<\/span>\n\n    <span class=\"kd\">private<\/span> <span class=\"k\">var<\/span> <span class=\"nv\">baseURL<\/span><span class=\"p\">:<\/span> <span class=\"kt\">URL<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">let<\/span> <span class=\"nv\">baseURL<\/span> <span class=\"o\">=<\/span> <span class=\"kt\">UserDefaultsAccess<\/span><span class=\"o\">.<\/span><span class=\"nf\">getBaseURL<\/span><span class=\"p\">()<\/span>\n\n        <span class=\"c1\">\/\/ Same as in Android.<\/span>\n        <span class=\"c1\">\/\/ If we have a saved URL, we use it.<\/span>\n        <span class=\"k\">if<\/span> <span class=\"o\">!<\/span><span class=\"n\">baseURL<\/span><span class=\"o\">.<\/span><span class=\"n\">isEmpty<\/span> <span class=\"p\">{<\/span>\n            <span class=\"k\">return<\/span> <span class=\"kt\">URL<\/span><span class=\"p\">(<\/span><span class=\"nv\">string<\/span><span class=\"p\">:<\/span> <span class=\"n\">baseURL<\/span><span class=\"p\">)<\/span><span class=\"o\">!<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"c1\">\/\/ Otherwise we use the default URL based on the current environment.<\/span>\n        <span class=\"k\">switch<\/span> <span class=\"kt\">Environment<\/span><span class=\"o\">.<\/span><span class=\"n\">current<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">case<\/span> <span class=\"o\">.<\/span><span class=\"nv\">development<\/span><span class=\"p\">:<\/span>\n            <span class=\"k\">return<\/span> <span class=\"kt\">URL<\/span><span class=\"p\">(<\/span><span class=\"nv\">string<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"http:\/\/192.168.1.42:3000\"<\/span><span class=\"p\">)<\/span><span class=\"o\">!<\/span>\n        <span class=\"k\">case<\/span> <span class=\"o\">.<\/span><span class=\"nv\">production<\/span><span class=\"p\">:<\/span>\n            <span class=\"k\">return<\/span> <span class=\"kt\">URL<\/span><span class=\"p\">(<\/span><span class=\"nv\">string<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"https:\/\/myapp.com\"<\/span><span class=\"p\">)<\/span><span class=\"o\">!<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"kd\">private<\/span> <span class=\"nf\">init<\/span><span class=\"p\">()<\/span> <span class=\"p\">{}<\/span>\n\n    <span class=\"k\">var<\/span> <span class=\"nv\">start<\/span><span class=\"p\">:<\/span> <span class=\"kt\">URL<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">baseURL<\/span><span class=\"o\">.<\/span><span class=\"nf\">appendingPathComponent<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/home\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">var<\/span> <span class=\"nv\">pathConfiguration<\/span><span class=\"p\">:<\/span> <span class=\"kt\">URL<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">baseURL<\/span><span class=\"o\">.<\/span><span class=\"nf\">appendingPathComponent<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/api\/v1\/ios\/path_configuration.json\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><strong>\u0647\u0631 \u06a9\u062c\u0627 \u06a9\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u0648\u0644\u06cc\u0647 \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u06cc\u062f:<\/strong><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight swift\"><code><span class=\"kd\">func<\/span> <span class=\"nf\">didStart<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n  <span class=\"n\">navigator<\/span><span class=\"o\">.<\/span><span class=\"nf\">route<\/span><span class=\"p\">(<\/span><span class=\"kt\">Endpoint<\/span><span class=\"o\">.<\/span><span class=\"n\">instance<\/span><span class=\"o\">.<\/span><span class=\"n\">start<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0627 \u0648\u062c\u0648\u062f \u0622\u0646\u060c \u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 Bridge Component \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u067e\u06cc\u0627\u0645 \u0631\u0627 \u0627\u0632 \u0648\u0628 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f \u0648 URL \u067e\u0627\u06cc\u0647 \u0631\u0627 \u0628\u0647 \u0631\u0648\u0632 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight swift\"><code><span class=\"kd\">import<\/span> <span class=\"kt\">Foundation<\/span>\n<span class=\"kd\">import<\/span> <span class=\"kt\">HotwireNative<\/span>\n<span class=\"kd\">import<\/span> <span class=\"kt\">UIKit<\/span>\n\n<span class=\"kd\">final<\/span> <span class=\"kd\">class<\/span> <span class=\"kt\">BaseURLComponent<\/span><span class=\"p\">:<\/span> <span class=\"kt\">BridgeComponent<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">override<\/span> <span class=\"kd\">class<\/span> <span class=\"k\">var<\/span> <span class=\"nv\">name<\/span><span class=\"p\">:<\/span> <span class=\"kt\">String<\/span> <span class=\"p\">{<\/span> <span class=\"s\">\"base-url\"<\/span> <span class=\"p\">}<\/span>\n\n    <span class=\"k\">override<\/span> <span class=\"kd\">func<\/span> <span class=\"nf\">onReceive<\/span><span class=\"p\">(<\/span><span class=\"nv\">message<\/span><span class=\"p\">:<\/span> <span class=\"kt\">Message<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">guard<\/span> <span class=\"k\">let<\/span> <span class=\"nv\">event<\/span> <span class=\"o\">=<\/span> <span class=\"kt\">Event<\/span><span class=\"p\">(<\/span><span class=\"nv\">rawValue<\/span><span class=\"p\">:<\/span> <span class=\"n\">message<\/span><span class=\"o\">.<\/span><span class=\"n\">event<\/span><span class=\"p\">)<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n            <span class=\"k\">return<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"k\">switch<\/span> <span class=\"n\">event<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">case<\/span> <span class=\"o\">.<\/span><span class=\"nv\">updateBaseURL<\/span><span class=\"p\">:<\/span>\n            <span class=\"nf\">handleupdateBaseURL<\/span><span class=\"p\">(<\/span><span class=\"nv\">message<\/span><span class=\"p\">:<\/span> <span class=\"n\">message<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"c1\">\/\/ MARK: Private<\/span>\n\n    <span class=\"kd\">private<\/span> <span class=\"kd\">func<\/span> <span class=\"nf\">handleupdateBaseURL<\/span><span class=\"p\">(<\/span><span class=\"nv\">message<\/span><span class=\"p\">:<\/span> <span class=\"kt\">Message<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">guard<\/span> <span class=\"k\">let<\/span> <span class=\"nv\">data<\/span><span class=\"p\">:<\/span> <span class=\"kt\">MessageData<\/span> <span class=\"o\">=<\/span> <span class=\"n\">message<\/span><span class=\"o\">.<\/span><span class=\"nf\">data<\/span><span class=\"p\">()<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span> <span class=\"k\">return<\/span> <span class=\"p\">}<\/span>\n        <span class=\"k\">let<\/span> <span class=\"nv\">url<\/span> <span class=\"o\">=<\/span> <span class=\"n\">data<\/span><span class=\"o\">.<\/span><span class=\"n\">url<\/span>\n        <span class=\"kt\">UserDefaultsAccess<\/span><span class=\"o\">.<\/span><span class=\"nf\">setBaseURL<\/span><span class=\"p\">(<\/span><span class=\"nv\">url<\/span><span class=\"p\">:<\/span> <span class=\"n\">url<\/span><span class=\"p\">)<\/span>\n        <span class=\"kt\">HotwireCentral<\/span><span class=\"o\">.<\/span><span class=\"n\">instance<\/span><span class=\"o\">.<\/span><span class=\"nf\">resetNavigator<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"c1\">\/\/ MARK: Events<\/span>\n\n<span class=\"kd\">private<\/span> <span class=\"kd\">extension<\/span> <span class=\"kt\">BaseURLComponent<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">enum<\/span> <span class=\"kt\">Event<\/span><span class=\"p\">:<\/span> <span class=\"kt\">String<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">case<\/span> <span class=\"n\">updateBaseURL<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"c1\">\/\/ MARK: Message data<\/span>\n\n<span class=\"kd\">private<\/span> <span class=\"kd\">extension<\/span> <span class=\"kt\">BaseURLComponent<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">struct<\/span> <span class=\"kt\">MessageData<\/span><span class=\"p\">:<\/span> <span class=\"kt\">Decodable<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">let<\/span> <span class=\"nv\">url<\/span><span class=\"p\">:<\/span> <span class=\"kt\">String<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u062a\u0645\u0627\u0645 \u0634\u062f\u0647 \u0627\u0633\u062a. \u062c\u0632\u0621 \u067e\u0644 \u062a\u0645\u0627\u0633 \u0645\u06cc \u06af\u06cc\u0631\u062f <code>resetNavigator<\/code> \u0628\u0631\u0627\u06cc \u0627\u0639\u0645\u0627\u0644 URL \u067e\u0627\u06cc\u0647 \u062c\u062f\u06cc\u062f \u0648 \u0628\u0627\u0632\u0646\u0634\u0627\u0646\u06cc \u0646\u0627\u0648\u0628\u0631\u0647\u0627. \u06a9\u0627\u0631 \u0627\u0632 <code>resetNavigator<\/code> \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc PathConfiguration \u062c\u062f\u06cc\u062f \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 URL \u067e\u0627\u06cc\u0647 \u062c\u062f\u06cc\u062f \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f \u0648 \u0628\u0631\u0627\u06cc \u0627\u0639\u0645\u0627\u0644 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u062c\u062f\u06cc\u062f\u060c Navigator \u0631\u0627 \u0645\u062c\u062f\u062f\u0627\u064b \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u0647\u0646\u0648\u0632 \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0627\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0628\u0647 \u06a9\u0644\u0627\u0633 HotwireCentral \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight swift\"><code><span class=\"kd\">func<\/span> <span class=\"nf\">resetNavigator<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">pathConfiguration<\/span> <span class=\"o\">=<\/span> <span class=\"kt\">PathConfiguration<\/span><span class=\"p\">(<\/span><span class=\"nv\">sources<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\n        <span class=\"o\">.<\/span><span class=\"nf\">server<\/span><span class=\"p\">(<\/span><span class=\"kt\">Endpoint<\/span><span class=\"o\">.<\/span><span class=\"n\">instance<\/span><span class=\"o\">.<\/span><span class=\"n\">pathConfiguration<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">])<\/span>\n    <span class=\"k\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">navigator<\/span> <span class=\"o\">=<\/span> <span class=\"kt\">Navigator<\/span><span class=\"p\">(<\/span><span class=\"nv\">pathConfiguration<\/span><span class=\"p\">:<\/span> <span class=\"n\">pathConfiguration<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">navigator<\/span><span class=\"o\">.<\/span><span class=\"nf\">route<\/span><span class=\"p\">(<\/span><span class=\"kt\">Endpoint<\/span><span class=\"o\">.<\/span><span class=\"n\">instance<\/span><span class=\"o\">.<\/span><span class=\"n\">start<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0647\u0645\u06cc\u0646! \ud83c\udf89<\/p>\n<p>\u0628\u0647 \u0627\u06cc\u0646 \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0628\u06cc\u0646 \u0645\u062d\u06cc\u0637 \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 Hotwire Native \u062e\u0648\u062f \u0628\u062f\u0648\u0646 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0628\u062c\u0627 \u0634\u0648\u06cc\u062f.<\/p>\n<p>\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u062f \u06a9\u0627\u0645\u0644 \u0627\u06cc\u0646 \u067e\u0633\u062a \u0631\u0627 \u062f\u0631 \u0627\u06cc\u0646 \u0631\u0648\u0627\u0628\u0637 \u0639\u0645\u0648\u0645\u06cc \u067e\u06cc\u062f\u0627 \u06a9\u0646\u06cc\u062f: https:\/\/github.com\/leonvogt\/example-42\/pull\/1<\/p>\n<p>\u0627\u06af\u0631 \u0633\u0624\u0627\u0644\u060c \u0628\u0627\u0632\u062e\u0648\u0631\u062f \u06cc\u0627 \u0627\u06cc\u062f\u0647 \u0627\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u0686\u06af\u0648\u0646\u06af\u06cc \u0628\u0647\u0628\u0648\u062f \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u062f\u0627\u0631\u06cc\u062f\u060c \u062f\u0631 \u0635\u0648\u0631\u062a \u062a\u0645\u0627\u06cc\u0644 \u0628\u0627 \u0645\u0627 \u062a\u0645\u0627\u0633 \u0628\u06af\u06cc\u0631\u06cc\u062f!<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0648\u0627\u0631\u062f\u06cc \u06a9\u0647 \u0645\u062f\u062a\u06cc \u0627\u0633\u062a \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc Hotwire Native \u062e\u0648\u062f \u0645\u06cc \u062e\u0648\u0627\u0633\u062a\u0645\u060c \u062a\u0648\u0627\u0646\u0627\u06cc\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u0645\u062d\u06cc\u0637 \u0647\u0627 (\u0635\u062d\u0646\u0647\u060c \u062a\u0648\u0644\u06cc\u062f \u0648 \u063a\u06cc\u0631\u0647) \u0628\u062f\u0648\u0646 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0631\u0627\u06cc \u0645\u0648\u0627\u0631\u062f\u06cc \u0645\u0627\u0646\u0646\u062f: \u062a\u0648\u062c\u0647: \u0645\u0646 \u0628\u0647 \u062c\u0632\u0626\u06cc\u0627\u062a \u0646\u062d\u0648\u0647 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 Hotwire Native \u0646\u0645\u06cc \u067e\u0631\u062f\u0627\u0632\u0645. \u0645\u0646\u0627\u0628\u0639 \u0628\u0633\u06cc\u0627\u0631 \u062e\u0648\u0628\u06cc \u0628\u0631\u0627\u06cc \u0622\u0646 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f\u060c \u0645\u0627\u0646\u0646\u062f \u0648\u0628\u0644\u0627\u06af &hellip;<\/p>\n","protected":false},"author":2,"featured_media":93851,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/media2.dev.to\/dynamic\/image\/width=1000,height=500,fit=cover,gravity=auto,format=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fblrolbsw9bwkpmyw25xz.png","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-93850","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/93850","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=93850"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/93850\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/93851"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=93850"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=93850"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=93850"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}