<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>upship</title>
        <link>https://velog.io/</link>
        <description>사소한 곳에서 발휘하는 정직은 사소하지 않다</description>
        <lastBuildDate>Mon, 03 Oct 2022 09:49:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>upship</title>
            <url>https://images.velog.io/images/upship-kim/profile/85f6c904-3a54-48e9-ae73-ba132be189db/미모티콘.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. upship. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/upship-kim" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[React-Native] 폰트 설정 방법]]></title>
            <link>https://velog.io/@upship-kim/React-Native-%ED%8F%B0%ED%8A%B8-%EC%84%A4%EC%A0%95-%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@upship-kim/React-Native-%ED%8F%B0%ED%8A%B8-%EC%84%A4%EC%A0%95-%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Mon, 03 Oct 2022 09:49:00 GMT</pubDate>
            <description><![CDATA[<p>React-Native로 앱을 개발하다보면 폰트를 변경해야할 때가 있습니다.</p>
<p>ios 와 android 에서 동시에 폰트적용을 하기 위해서는 아래와 같이 해야합니다.</p>
<h3 id="폰트-설정-방법">폰트 설정 방법</h3>
<p><strong>1. &#39;react-native.config.js&#39; 생성 및 작성</strong></p>
<ul>
<li>먼저 project 의 root directory 에 아래와 같이 파일을 작성해줍니다.<pre><code class="language-javascript">//react-native.config.js
module.exports = {
project: {
  ios: {},
  android: {}, 
},
assets: [&#39;./assets/fonts&#39;], 
};
</code></pre>
</li>
</ul>
<p>```</p>
<p><strong>2. 글꼴을 담고있는 폴더를 생성</strong></p>
<ul>
<li>project의 root 경로에 <code>assets/fonts</code> 폴더를 만들고 내부에 글꼴 파일(ttf 혹은 otf) 파일을 넣어둡니다. </li>
</ul>
<p><strong>3. assets 폴더를 각 플랫폼(iOS,android)에 연동</strong></p>
<blockquote>
<p>react-native 0.69 초과의 버전이라면 
터미널 내 <code>npx react-native-asset</code> 명령어 입력
아니면 
터미널 내<code>react-native link</code> 명령어 입력</p>
</blockquote>
<ul>
<li>위 1번 에서 작성한 <code>react-native.config.js</code>을 기반으로 assets을 각 플랫폼에 동기화하여 자동으로 적용되게 해줍니다. <ul>
<li>ios: <code>root/ios/[projectName]/info.plist</code> 경로에서 <pre><code>    `&lt;key&gt;UIAppFonts&lt;/key&gt;` 아래 넣은 폰트의 명이 입력되었는지 체크 </code></pre></li>
<li>android: <code>root/android/app/src/main</code> 내 <code>assets/fonts</code>폴더와 내부 폰트가 있는지 체크</li>
</ul>
</li>
</ul>
<p>***  만약 둘중 하나라도 없다면 수동으로 폰트를 적용시켜주어야합니다. **</p>
<p><strong>4. 다시 빌드하여 확인합니다.</strong></p>
<h3 id="에러-해결">에러 해결</h3>
<ol>
<li><p>ios 내 폰트 관련 에러 발생 
해결방안: <code>assets/fonts</code> 폴더내에 넣은 폰트의 이름을 <code>서체 관리자의 &#39;PostScript 이름&#39;</code> 과 동일하게 변경해줍니다. </p>
</li>
<li><p>android 내 폰트 미적용 발생
해결방안: ios는 폰트가 적용되지만 android에서 적용되지 않는다면 코드 내 스타일에<code>fontWeight</code>가 적용되어 있는지 확인합니다. </p>
</li>
</ol>
<p><strong>(*가끔 <code>fontWeight</code> 때문에 글꼴이 적용안되는 경우가 있다고 하네요)</strong></p>
<h3 id="reference">reference</h3>
<p><a href="https://stackoverflow.com/questions/68441556/npx-react-native-link-dose-not-working-for-me">https://stackoverflow.com/questions/68441556/npx-react-native-link-dose-not-working-for-me</a></p>
<p><a href="https://techblog.geekyants.com/adding-custom-fonts-a-complete-guide-react-native-060">https://techblog.geekyants.com/adding-custom-fonts-a-complete-guide-react-native-060</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[React-Native] Drawer 네비게이터와 react-native-reanimated 라이브러리 에러 이슈]]></title>
            <link>https://velog.io/@upship-kim/React-Native-Drawer-%EB%84%A4%EB%B9%84%EA%B2%8C%EC%9D%B4%ED%84%B0%EC%99%80-react-native-reanimated-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EC%97%90%EB%9F%AC-%EC%9D%B4%EC%8A%88</link>
            <guid>https://velog.io/@upship-kim/React-Native-Drawer-%EB%84%A4%EB%B9%84%EA%B2%8C%EC%9D%B4%ED%84%B0%EC%99%80-react-native-reanimated-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EC%97%90%EB%9F%AC-%EC%9D%B4%EC%8A%88</guid>
            <pubDate>Wed, 21 Sep 2022 03:13:48 GMT</pubDate>
            <description><![CDATA[<p>React-Native의 드로어 네비게이터를 스터디하던 중 예상치 못한 에러를 만났습니다. </p>
<h3 id="drawer-navigation-설치-과정">Drawer Navigation 설치 과정</h3>
<img src="https://velog.velcdn.com/images/upship-kim/post/d6a43b81-a540-4aa6-a7be-b26016f6545d/image.png" width='400' />


 <br/>

<p>react-navigation/drawer 를 설치하려면 해당 라이브러리와 더불어 여러 종속적인 라이브러리를 함께 설치해야 합니다.</p>
<pre><code class="language-javascript"> 1. yarn add @react-navigation/drawer
 2. yarn add react-native-gesture-handler
 3. yarn add react-native-reanimated</code></pre>
<p>여기서 1번은 위 이미지와 같이 Drawer Navigator의 라이브러리, 
2번은 드로우 네이게이터에서 사용자의 제스처를 인식하기 위해 내부적으로 사용하는 라이브러러, 
3번은 리액트 네이티브에 내장된 애니메이션 효과보다 더욱 개선된 애니메이션 효과를 구현하는 라이브러리 입니다. </p>
<p>설치 이후, 아래와 같이 Drawer Navigator를 선언하여 쓰면 되는데요, </p>
<pre><code class="language-javascript">import {createDrawerNavigator} from &#39;@react-navigation/drawer&#39;;

const Drawer = createDrawerNavigator();</code></pre>
<br/>

<h3 id="에러-현상">에러 현상</h3>
<p>그런데 아래와 같은 에러 결과와 함께 
<img src="https://velog.velcdn.com/images/upship-kim/post/4ae861a7-d9c9-4f52-aa66-a44a2c6d2c33/image.png" width='200' > 
<code>TypeError: Cannot read property &#39;createDrawerNavigator&#39; of undefined</code> 
와 같은 에러 로그가 찍힘을 볼 수 있습니다. </p>
<br/>

<h3 id="해결-방안">해결 방안</h3>
<blockquote>
<p>이 에러는 <code>babel.config.js</code> 파일 내에 <code>plugins: [&#39;react-native-reanimated/plugin&#39;],</code> 을 추가해주면 해결됩니다. </p>
</blockquote>
<pre><code class="language-javascript">    module.exports = {
      presets: [&#39;module:metro-react-native-babel-preset&#39;],
      plugins: [&#39;react-native-reanimated/plugin&#39;],
    };</code></pre>
<br/>

<h3 id="추가-사항">추가 사항</h3>
<p>추가로 위 에러를 해결하기 위해 스택오버플로우나 여러 커뮤니티에서 관련 사례를 서치 해보았는데 
아래와 같은 해결방안과 파생된 다른 에러 이슈가 있었습니다. </p>
<ol>
<li><p><code>react-native-reanimated@next</code> 설치</p>
<ul>
<li>안정적으로 릴리즈된 버전이 아닌 실험적인 버전을 설치하여 해결하는 방안입니다. </li>
<li>하지만 위 방법을 사용하였을 때에 정상적으로 Drawer Navigation 이 노출됨을 확인하였지만 작동 시, 아래와 같이 경고문이 지속 발생하였습니다.<br><code>WARN  Sending &#39;onReanimatedPropsChange&#39; with no listeners registered.</code></li>
</ul>
</li>
<li><p><code>react-native-reanimated@2.8.0</code> 다운그레이드 설치 </p>
<ul>
<li>위 사례와 다르게 오히려 2.8.0 으로 다운그레이드 하여 설치하는 방법입니다. (현재 버전 2.10.0)</li>
<li>하지만 이 방법은 ios는 정상 동작함을 확인할 수 있었지만 android에서는 컴파일 에러를 내뱉는 것을 확인할 수 있었습니다. </li>
</ul>
</li>
</ol>
<h3 id="reference">reference</h3>
<ul>
<li><a href="https://docs.swmansion.com/react-native-reanimated/docs/next/fundamentals/installation">react-native-reanimated 공식 문서</a></li>
<li><a href="https://stackoverflow.com/questions/71895172/cant-merge-user-target-xcconfig-for-pod-targets-reanimated-hermes-engine">스택오버플로우 관련 사례</a></li>
<li><a href="https://velog.io/@kauthenticity/React-Native-Sending-onReanimatedPropsChange-with-no-listeners-registered">velog 관련 사례</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[(JS) for문과 while문의 차이]]></title>
            <link>https://velog.io/@upship-kim/JS-for%EB%AC%B8%EA%B3%BC-while%EB%AC%B8%EC%9D%98-%EC%B0%A8%EC%9D%B4</link>
            <guid>https://velog.io/@upship-kim/JS-for%EB%AC%B8%EA%B3%BC-while%EB%AC%B8%EC%9D%98-%EC%B0%A8%EC%9D%B4</guid>
            <pubDate>Thu, 15 Sep 2022 17:51:12 GMT</pubDate>
            <description><![CDATA[<h3 id="요약">요약</h3>
<blockquote>
<p><strong>for</strong> 문은 반복의 범위가 명확할때 사용, 
<strong>while</strong> 문은 원하는 값을 얻을 때까지 반복을 돌려야할 때 사용!</p>
</blockquote>
<p>최근 어떤 계기로 인하여 뒤늦은(?) 알고리즘 공부를 시작하였는데
for문과 while문을 제 용도에 맞지 않게 써 시간초과, 런타임에러, 틀렸다는 결과를 받고 기억하고자 for문과 while문의 차이를 정리하려 합니다. </p>
<hr>
<h3 id="for문">for문</h3>
<p>for문의 코드 구조는 아래와 같습니다. </p>
<pre><code class="language-javascript">for(초기값; 조건식; 증감연산)
    ...동작 코드
}

//예시
for(let i = 0; i &lt; 10; i++){
    console.log(i)
}</code></pre>
<p>for문은 조건식이 <strong>거짓</strong> 으로 판별될 때까지 반복합니다.
여기서 조건식은 <code>i &lt; 10;</code> 으로 정의된 부분입니다. </p>
<p>위 조건식이 false 가 될때까지 i는 0부터 시작해서 9가 되는 순간까지 
콘솔 로그를 찍게 됩니다. </p>
<p>이와 같이 <code>조건식(반복의 범위)</code> 가 들어가는 for문은 
<em>1. 구하고자 하는 값의 조건이 무엇인지 명확할 경우 사용합니다. _
_2. 반복 횟수에 따라 값을 구한다던지 또는 횟수를 참조해야할때 사용합니다.</em> </p>
<hr>
<h3 id="while문">while문</h3>
<p>while문의 코드 구조는 아래와 같습니다.</p>
<pre><code class="language-javascript">while(조건식){
    ...동작 코드
}

//예시
while(true){
    console.log(&#39;hi&#39;)
}</code></pre>
<p>while문은 어떤 조건문이 참이기만 하면 문장을 계속해서 수행합니다.
for문에 비해 변수도 새로 만들지 않고 훨씬 간단합니다.</p>
<p>간단한 만큼 예시와 같이 조건식이 항상 true인 경우 무한루프에 빠지기 쉽습니다. 그래서 주로 break문과 함께 쓰입니다. 
(break문은 반복에서의 탈출을 위해 사용하며 for문도 적용 가능합니다.)</p>
<p>이와 같이 while문은 
<em>1.<code>반복의 범위</code> 가 명확하지 않지만 원하는 값이 나올때까지 계속해서 반복할때 사용합니다.</em></p>
<p>(다만 조건이 항상 거짓일지라도 무한 루프는 피해야합니다)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[React-Native] Unable to boot device Error]]></title>
            <link>https://velog.io/@upship-kim/React-Native-Unable-to-boot-device-Error</link>
            <guid>https://velog.io/@upship-kim/React-Native-Unable-to-boot-device-Error</guid>
            <pubDate>Wed, 31 Aug 2022 03:22:23 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>버전 사양</p>
</blockquote>
<ul>
<li>node: 18.7.0</li>
<li>xcode : 13.4.1 </li>
<li>iOS Simulator : 15.0 </li>
<li>react-native: 0.69.5</li>
</ul>
<h3 id="에러-현상">에러 현상</h3>
<p>M1 Mac에서 리액트 네이티브 프로젝트로 ios 시뮬레이터를 구동할때에 요런 알림창이 뜨며 시뮬레이터가 뜨지 않는 에러를 맞닥뜨렸습니다.</p>
<pre><code>Unable to boot device in current state: Booted</code></pre><img src="https://velog.velcdn.com/images/upship-kim/post/271d00f8-91c1-429d-8b5f-1ef027457bc5/image.png" width="30" >

<h3 id="1회성-해결-방법">1회성 해결 방법</h3>
<p>관련 레퍼를 찾아본 결과 여러 해결 방안들이 있었고 그 중 가장 많았던 해결방안은 아래와 같습니다. </p>
<ol>
<li><p>터미널 또는 iTerm 에 <code>xcrun simctl list</code> 입력 </p>
</li>
<li><p>엄청나게 많은 리스트가 보여질 텐데 여기서 command+F 키를 누르고 booted를 검색한다. </p>
<img src="https://velog.velcdn.com/images/upship-kim/post/1a658bde-daf2-438c-b20f-8b8a5b44243f/image.png" width="30" >
</li>
<li><p>booted로 검색하여 나온 결과 행의 일련번호 같은걸 복사하고서 
<code>xcrun simctl shutdown &lt;시뮬레이터 일련번호 입력&gt;</code> 와 같이 입력한다 (&lt;&gt;는 빼고)</p>
</li>
<li><p>그리고 다시 시뮬레이터를 구동하면 정상적으로 화면이 노출됨을 확인할 수 있다 </p>
</li>
</ol>
<h3 id="찐해결-방법">찐해결 방법</h3>
<p>하지만 위 방법은 그때의 상황을 모면하기 위한 해결 방안으로 보입니다. 
왜냐하면 시뮬레이터를 종료했다가 다시 구동하면 위와 같은 과정을 다시 거쳐야 했기에 시뮬레이터를 자주 실행한다면 매번 위와같이 해주어야 했거든요. </p>
<p>그러다가 관련 에러를 stack overflow 에서 검색하던 도중 cool한 해결 방법을 찾았습니다. </p>
<blockquote>
<p>Simulator를 열고 Preferences -&gt; &#39;Simulator lifetime&#39; 에서 
<code>When Simulator starts boots the most recently used simulator</code> 체크해제</p>
</blockquote>
<h3 id="reference">Reference</h3>
<hr>
<p><a href="https://stackoverflow.com/questions/24135067/unable-to-boot-device-in-current-state-booted">https://stackoverflow.com/questions/24135067/unable-to-boot-device-in-current-state-booted</a></p>
]]></description>
        </item>
    </channel>
</rss>