<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>bannaviiOS</title>
    <link>https://bannavi.tistory.com/</link>
    <description>원래 그냥 흥이 많은.. iOS 개발자

보여지기위한공부 &amp;lt; 나를위한공부</description>
    <language>ko</language>
    <pubDate>Sun, 12 Jul 2026 07:31:21 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>bannaviiOS</managingEditor>
    <image>
      <title>bannaviiOS</title>
      <url>https://tistory1.daumcdn.net/tistory/4560841/attach/e1812243649a4f0ebe7a2d0c2236dae2</url>
      <link>https://bannavi.tistory.com</link>
    </image>
    <item>
      <title>가뭄에 단비</title>
      <link>https://bannavi.tistory.com/560</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;껄껄&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;1334&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bf1pfT/btrWsjqqOZ1/1Q2aRszV46jJG4E9L9VsG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bf1pfT/btrWsjqqOZ1/1Q2aRszV46jJG4E9L9VsG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bf1pfT/btrWsjqqOZ1/1Q2aRszV46jJG4E9L9VsG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbf1pfT%2FbtrWsjqqOZ1%2F1Q2aRszV46jJG4E9L9VsG0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;750&quot; height=&quot;1334&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;1334&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;</description>
      <author>bannaviiOS</author>
      <guid isPermaLink="true">https://bannavi.tistory.com/560</guid>
      <comments>https://bannavi.tistory.com/560#entry560comment</comments>
      <pubDate>Tue, 17 Jan 2023 19:29:23 +0900</pubDate>
    </item>
    <item>
      <title>html 폰트가 웹뷰를 뚫고 나올때(문자넘침, html이 wkwebView를 뚫고 나올때)</title>
      <link>https://bannavi.tistory.com/559</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://wit.nts-corp.com/2017/07/25/4675&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://wit.nts-corp.com/2017/07/25/4675&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1673936987344&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;word-break 속성과 word-wrap 속성 알아보기 | WIT블로그&quot; data-og-description=&quot;실무를 하다 보면 가볍게 이해한 스펙을 바탕으로 관습적으로 사용하는 속성들이 있다. 그중 word-break 속성과 word-wrap 속성에 대해 조금 더 명확하게 정리해보았다. 본 내용은 W3C 스펙문서에서 제&quot; data-og-host=&quot;wit.nts-corp.com&quot; data-og-source-url=&quot;https://wit.nts-corp.com/2017/07/25/4675&quot; data-og-url=&quot;https://wit.nts-corp.com/2017/07/25/4675&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ILvCB/hyRksbCVAB/yu1ndw4dvcH6p5KPGS0g61/img.jpg?width=1214&amp;amp;height=940&amp;amp;face=0_0_1214_940,https://scrap.kakaocdn.net/dn/TEmbA/hyRktO8QgY/mtFJ7qkIidTP39NvlhwtXk/img.jpg?width=779&amp;amp;height=852&amp;amp;face=0_0_779_852,https://scrap.kakaocdn.net/dn/gE0l0/hyRi4Kc3hA/LB5R0G9FQtkObyvW9n7j70/img.jpg?width=360&amp;amp;height=240&amp;amp;face=0_0_360_240&quot;&gt;&lt;a href=&quot;https://wit.nts-corp.com/2017/07/25/4675&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://wit.nts-corp.com/2017/07/25/4675&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ILvCB/hyRksbCVAB/yu1ndw4dvcH6p5KPGS0g61/img.jpg?width=1214&amp;amp;height=940&amp;amp;face=0_0_1214_940,https://scrap.kakaocdn.net/dn/TEmbA/hyRktO8QgY/mtFJ7qkIidTP39NvlhwtXk/img.jpg?width=779&amp;amp;height=852&amp;amp;face=0_0_779_852,https://scrap.kakaocdn.net/dn/gE0l0/hyRi4Kc3hA/LB5R0G9FQtkObyvW9n7j70/img.jpg?width=360&amp;amp;height=240&amp;amp;face=0_0_360_240');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;word-break 속성과 word-wrap 속성 알아보기 | WIT블로그&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;실무를 하다 보면 가볍게 이해한 스펙을 바탕으로 관습적으로 사용하는 속성들이 있다. 그중 word-break 속성과 word-wrap 속성에 대해 조금 더 명확하게 정리해보았다. 본 내용은 W3C 스펙문서에서 제&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;wit.nts-corp.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>iOS/iOS</category>
      <author>bannaviiOS</author>
      <guid isPermaLink="true">https://bannavi.tistory.com/559</guid>
      <comments>https://bannavi.tistory.com/559#entry559comment</comments>
      <pubDate>Tue, 17 Jan 2023 17:00:06 +0900</pubDate>
    </item>
    <item>
      <title>푸시(push) 정복(feat. FCM, APNS, TOKEN..)</title>
      <link>https://bannavi.tistory.com/558</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;FCM 푸시 구현을 회고하면서 푸시 구현 원리에 대해 이해하기 위해 포스팅한 내용입니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;내용은 추후 보완될 수 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;push이해에 도움되는 사전지식&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;push notification이란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 캡쳐와 같은 알림&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_IMG_AFEABA870954-1.jpeg&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;576&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HmTCr/btrVTl2iQuL/wVawaraXlPAKfnXemf2OS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HmTCr/btrVTl2iQuL/wVawaraXlPAKfnXemf2OS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HmTCr/btrVTl2iQuL/wVawaraXlPAKfnXemf2OS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHmTCr%2FbtrVTl2iQuL%2FwVawaraXlPAKfnXemf2OS1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;308&quot; height=&quot;576&quot; data-filename=&quot;edited_IMG_AFEABA870954-1.jpeg&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;576&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Device token 이란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;푸시가 전송되는 앱의 주소이며, 애플에서 정한 고유한 식별자를 포함시킨 NSData 형태임. APNs만 해독 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;APNS란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Apple Push Notification service의 약자로 APN이라고도 부르며,&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;앱에 notification을 보낼 수 있도록&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;만든&amp;nbsp;&lt;/span&gt;애플 서비스이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;식별ID(identification) = 토큰 = 키 = 키값&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;애플의 푸시서비스 종류 세가지&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 로컬에서 개발자가 직접 보내는 푸시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. FCM(firebase cloud messaging)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 서버에서 보내는 APNS(Apple Push Notification service) 푸시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;- 로컬 notification이 아닌, remote notification의 경우 무조건 이 APNS를 거치는데 그 이유는 내가 보내려는 notification을 APNS가 사용자 기기로 전달하는 역할을 하기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;푸시 알람을 위한 필수 동작 세가지&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;1) 앱이 apns에게 device token(푸시가 전송되는 앱의 주소)을 요청함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;2) apns가 app에게 device token을 알려줌&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;3) app이 푸시 서버(provider)에게 device token을 보내줌&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;APNS 푸시 발생 동작 방식&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 푸시 서버(provider)는 푸시를 보내고 싶을때, apns에게 device token과 메세지 데이터를 보냄&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(이때 APNS와 푸시서버는 TLS통신을 하고, push server에 인증서가 준비되어 있어야함)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) APNs는 해당 device token으로 데이터를 보냄&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 내 device에 푸시 알람이 뜬다&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. FCM 동작원리&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-10 오후 2.30.40.png&quot; data-origin-width=&quot;342&quot; data-origin-height=&quot;336&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biu4sj/btrVQnTxKvp/ys2cJgmhsXbF5wC8NFHQ40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biu4sj/btrVQnTxKvp/ys2cJgmhsXbF5wC8NFHQ40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biu4sj/btrVQnTxKvp/ys2cJgmhsXbF5wC8NFHQ40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbiu4sj%2FbtrVQnTxKvp%2Fys2cJgmhsXbF5wC8NFHQ40%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;342&quot; height=&quot;336&quot; data-filename=&quot;스크린샷 2023-01-10 오후 2.30.40.png&quot; data-origin-width=&quot;342&quot; data-origin-height=&quot;336&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 모바일에 앱이 설치되는 순간&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Firebase 서버&lt;/b&gt;에 토큰 획득을 위한 요청을 보내고, 모바일앱이 토큰을 획득한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 획득한 토큰을 서버로 전송하여 서버 db에 저장한다. (이 토큰은 서버가&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Firebase 서버&lt;/b&gt;에 메시지 전송을 요청할때 어디로 보내는지 구분하기 위한 용도로 사용)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3)&amp;nbsp;서버는 전달받은 토큰을 db에 저장하여 타겟 모바일의 identification으로 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. Firebase서버에서 메시지데이터를 스마트폰에 전달하는 절차&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-10 오후 2.16.56.png&quot; data-origin-width=&quot;346&quot; data-origin-height=&quot;334&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uo6UV/btrVQPCpiSz/W6xABB0fSNP0x54qfCs1wk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uo6UV/btrVQPCpiSz/W6xABB0fSNP0x54qfCs1wk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uo6UV/btrVQPCpiSz/W6xABB0fSNP0x54qfCs1wk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fuo6UV%2FbtrVQPCpiSz%2FW6xABB0fSNP0x54qfCs1wk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;346&quot; height=&quot;334&quot; data-filename=&quot;스크린샷 2023-01-10 오후 2.16.56.png&quot; data-origin-width=&quot;346&quot; data-origin-height=&quot;334&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 서버에서 메세지데이터를 타겟 모바일에 전달하기 위해 DB에서 키를 획득&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 서버에서&lt;b&gt;&amp;nbsp;DB 토큰과&lt;/b&gt; 메세지 데이터를 HTTP 통신을 통해 &lt;b&gt;Firebase 서버로 전달&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Firebase 서버&lt;/b&gt;에서는 전달받은 키값을 확인해 어떤 모바일, 어떤 앱인지를 식별&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 식별된 모바일의 식별된 앱을 실행하여 앱 단말기에 푸시 전송&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 타겟 모바일의 앱은 백그라운드에 있는 상태에서도 리스너로 이벤트를 감지함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1번과 2번을 합친 FCM 흐름도&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2023-01-12-13-20-43.jpeg&quot; data-origin-width=&quot;1210&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cguPu7/btrV09HuSDP/1Lp7idTCVidEe4sOlHAbd1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cguPu7/btrV09HuSDP/1Lp7idTCVidEe4sOlHAbd1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cguPu7/btrV09HuSDP/1Lp7idTCVidEe4sOlHAbd1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcguPu7%2FbtrV09HuSDP%2F1Lp7idTCVidEe4sOlHAbd1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;514&quot; height=&quot;612&quot; data-filename=&quot;KakaoTalk_Photo_2023-01-12-13-20-43.jpeg&quot; data-origin-width=&quot;1210&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*식별된 모바일의 실행된 앱을 -&amp;gt; 식별된 모바일의 식별된 앱을&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;부연 지식&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버에서 어떤 데이터를 앱에 전달하려면 네트워크 연결은 필수이다. 앱은 서버에서 데이터가 언제 송신될지 모르기 때문에 서비스 컴포넌트로 네트워크에 항상 연결되어 있어야 하며, 백그라운드 제약때문에 앱이 포그라운드 상황이 아니라면 서버와 연결을 지속할 수 없다. 하지만 &lt;u&gt;&lt;b&gt;클라우드 메시징은 서버의 데이터를 앱에 직접 전달하지 않고 FCM 서버를 거쳐서 앱에 전달하는 방식이기 때문에 클라우드 메시징을 이용하면 서버와 앱이 네트워크 연결을 지속해서 유지하지 않아도 되며 앱이 포그라운드 상황이 아니라고 해도 데이터를 받을 수 있다.&lt;/b&gt;&lt;/u&gt;&lt;u&gt;&lt;b&gt;&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;사용자에게 push notification을 보내주는 Push server가 존재하며 이 push server는 우리 app에 알림을 보내서 사용자에게 메시지를 보여주는것임&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;apple 기기로 알림을 보내려면 APNS는 필수이며 FCM과 같이 사용하는 경우 Apple develop에서 key를 등록하고 APN인증키를 받아서 FCM 설정에 넣어줘야합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;APNS와 FCM은 서버로 토큰값을 보내서 서버측에서 해당 사용자의 토큰을 관리함.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;FCM을 이용중이라면 이 토큰값은 구글로 보내고, 구글에서 반환하는 키를 기준으로 AOS, IOS 동시에 푸시를 보냄.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;애플의 APNS서버에서는 푸시 발송을 위해 인증서와 팀아이디, 앱아이디, 번들아이디의 정보를 가지고 해당 단말을 타겟으로 푸시를 보내는 역할을 함(최근 HTTP/2 이슈로 이전에 사용하던 서버 IP를 더이상 지원하지 않는다고 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;로컬푸시와 APNS의 가장 큰 차이점: 토큰 필요의 유무&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 72px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 28.8372%; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 19.4768%; height: 20px;&quot;&gt;&lt;b&gt;로컬푸시&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.6628%; height: 20px;&quot;&gt;&lt;b&gt;APNS&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.465%; height: 20px;&quot;&gt;&lt;b&gt;FCM&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 28.8372%; height: 17px;&quot;&gt;&lt;b&gt;토큰유무&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 19.4768%; height: 17px;&quot;&gt;필요 X&lt;/td&gt;
&lt;td style=&quot;width: 18.6628%; height: 17px;&quot;&gt;&lt;b&gt;&lt;b&gt;필요 O&lt;/b&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.465%; height: 17px;&quot;&gt;&lt;b&gt;&lt;b&gt;필요 O&lt;/b&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 28.8372%; height: 17px;&quot;&gt;&lt;b&gt;인증서&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 19.4768%; height: 17px;&quot;&gt;필요 X&lt;/td&gt;
&lt;td style=&quot;width: 18.6628%; height: 17px;&quot;&gt;&lt;b&gt;필요 O&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.465%; height: 17px;&quot;&gt;&lt;b&gt;필요 O&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 28.8372%; height: 18px;&quot;&gt;&lt;b&gt;Capability(Push Notifications) 설정&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 19.4768%; height: 18px;&quot;&gt;필요 X&lt;/td&gt;
&lt;td style=&quot;width: 18.6628%; height: 18px;&quot;&gt;&lt;b&gt;필요 O&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.465%; height: 18px;&quot;&gt;&lt;b&gt;필요 O&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;p8인증키와 p12인증서의 차이&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 33px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 16px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 16px;&quot;&gt;&lt;b&gt;p12(private key) - 과거&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 16px;&quot;&gt;&lt;b&gt;p8(public key) - 최신&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;b&gt;갱신필요&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;1년마다 갱신필요&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;영구적(유효기간X)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;b&gt;사용 범위&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;앱마다 고유한 CSR 발급 필요&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;한개의 키로 여러앱에 등록 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;p12 -&amp;gt; 인증서&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;p8 -&amp;gt; 인증키&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-12 오후 2.32.12.png&quot; data-origin-width=&quot;1664&quot; data-origin-height=&quot;1076&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bduMOd/btrV1UDJr2B/VkQUtkQ7DQzK4xM6yqOKv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bduMOd/btrV1UDJr2B/VkQUtkQ7DQzK4xM6yqOKv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bduMOd/btrV1UDJr2B/VkQUtkQ7DQzK4xM6yqOKv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbduMOd%2FbtrV1UDJr2B%2FVkQUtkQ7DQzK4xM6yqOKv0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1664&quot; height=&quot;1076&quot; data-filename=&quot;스크린샷 2023-01-12 오후 2.32.12.png&quot; data-origin-width=&quot;1664&quot; data-origin-height=&quot;1076&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;포스팅 작성에 큰 도움을 주신 블로거분들&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://tttap.tistory.com/156&quot;&gt;https://tttap.tistory.com/156&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://babbab2.tistory.com/57&quot;&gt;https://babbab2.tistory.com/57&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://woongsios.tistory.com/51&quot;&gt;https://woongsios.tistory.com/51&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://zeddios.tistory.com/1373&quot;&gt;https://zeddios.tistory.com/1373&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://sweetdev.tistory.com/476&quot;&gt;https://sweetdev.tistory.com/476&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://maruzzing.github.io/study/etc/FCM(Firebase-Cloud-Messaging)%EC%9D%B4%EB%9E%80/&quot;&gt;https://maruzzing.github.io/study/etc/FCM(Firebase-Cloud-Messaging)%EC%9D%B4%EB%9E%80/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. &lt;a href=&quot;https://codinghero.tistory.com/50&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://codinghero.tistory.com/50&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. &lt;a href=&quot;https://pgnt.tistory.com/117&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://pgnt.tistory.com/117&lt;/a&gt;&lt;/p&gt;</description>
      <category>iOS/iOS</category>
      <author>bannaviiOS</author>
      <guid isPermaLink="true">https://bannavi.tistory.com/558</guid>
      <comments>https://bannavi.tistory.com/558#entry558comment</comments>
      <pubDate>Tue, 10 Jan 2023 17:57:21 +0900</pubDate>
    </item>
    <item>
      <title>bannaviiOS) 엔터프라이즈 배포 (드롭박스 업로드 + html파일 만들기, 엔터프라이즈방식으로 배포된 앱 다운로드 방법 가이드)</title>
      <link>https://bannavi.tistory.com/556</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;드롭박스 업로드와 html 파일을 생성하는 방법을 기술합니다.&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(export 단계까지 마쳤다는 가정하에 포스팅합니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;드롭박스에 업로드 및 html파일 만들기&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;드롭박스에 ipa파일과 아이콘 이미지를 업로드합니다. 이후 업로드된 ipa, 아이콘 이미지 선택 후 &amp;lsquo;공유&amp;rsquo; &amp;gt; &amp;lsquo;링크만들기&amp;rsquo; &amp;gt; &amp;lsquo;링크복사&amp;rsquo;합니다.&lt;/li&gt;
&lt;li&gt;export된 폴더안에서 &amp;ldquo;manifest.plist&amp;rdquo;파일을 클 하여 아래와 같이 펼쳐줍니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-12-20 오후 2.03.45.png&quot; data-origin-width=&quot;933&quot; data-origin-height=&quot;371&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciY4s4/btrUacEZkiM/3o0WHaC1GeUwVKRA2jUqw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciY4s4/btrUacEZkiM/3o0WHaC1GeUwVKRA2jUqw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciY4s4/btrUacEZkiM/3o0WHaC1GeUwVKRA2jUqw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciY4s4%2FbtrUacEZkiM%2F3o0WHaC1GeUwVKRA2jUqw0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;933&quot; height=&quot;371&quot; data-filename=&quot;스크린샷 2022-12-20 오후 2.03.45.png&quot; data-origin-width=&quot;933&quot; data-origin-height=&quot;371&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2-1. 1번에 ipa파일 링크를 넣고, 2, 3번에 아이콘 이미지의 링크를 넣습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주의할점 1) 링크뒤의 ?dl=0 형식 삭제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주의할점 2) /s/앞의 주소를 &lt;a href=&quot;https://dl.dropboxusercontent.com&quot;&gt;https://dl.dropboxusercontent.com&lt;/a&gt; 이렇게 바꿔줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;여기서 핵 중요한 부분. thinned&lt;span style=&quot;background-color: #ffffff; color: #4d5156;&quot;&gt;-assets 삭제해주어야합니다.(이걸 삭제 안해주면 나중에 앱이 다운되지 않아요)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2-2. 이렇게 다시 만들어진 manifest.plist파일을 command+s 버튼으로 저장하고 다시 드롭박스에 업로드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2-3. manifest링크도 html에 적용시켜야하는데 위에서 언급했던 주의할점 1, 2번을 참고하여 링크를 만들어서, 아래&lt;br /&gt;html부분에 넣어야합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. html파일 만들기(sublime text를 다운로드 받고 아래의 코드를 복붙하여 html형식으로 저장함)&lt;/p&gt;
&lt;pre id=&quot;code_1671514447057&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!doctype html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
 &amp;lt;head&amp;gt;
  &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
  &amp;lt;title&amp;gt;다운로드&amp;lt;/title&amp;gt;
 &amp;lt;/head&amp;gt;
 &amp;lt;body&amp;gt;
  &amp;lt;ul&amp;gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&quot;itms-services://?action=download-manifest&amp;amp;url=요기에 https부터 만들어진 manifest 링크넣기&quot;&amp;gt;다운로드&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;/ul&amp;gt;
 &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. html파일을 클릭하면 다운로드 글씨가 보이고 다운로드됌.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt; 엔터프라이즈 방식으로 배포된 앱 다운로드 방법 가이드&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 위의 과정에서 만든 html첨부파일을 다운로드 받은 후, &amp;ldquo;카카오톡 나에게 보내기&amp;rdquo; 기능으로 나에게 첨부파일을 보냅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-12-20 오후 2.43.54.png&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dFWpzU/btrT81jZgz9/5ULTzC9W4en2y7VhQWZAS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dFWpzU/btrT81jZgz9/5ULTzC9W4en2y7VhQWZAS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dFWpzU/btrT81jZgz9/5ULTzC9W4en2y7VhQWZAS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdFWpzU%2FbtrT81jZgz9%2F5ULTzC9W4en2y7VhQWZAS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;425&quot; height=&quot;109&quot; data-filename=&quot;스크린샷 2022-12-20 오후 2.43.54.png&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;234&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. &lt;b&gt;해당 파일을 클릭한 뒤, &amp;ldquo;&lt;span style=&quot;color: #006dd7;&quot;&gt;다운로드&lt;/span&gt;&amp;rdquo;를 클릭합니다.&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-12-20 오후 2.44.36.png&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnyakK/btrT4GIedC0/tnZvay3iKo2Rtr18mQ8Jr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnyakK/btrT4GIedC0/tnZvay3iKo2Rtr18mQ8Jr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnyakK/btrT4GIedC0/tnZvay3iKo2Rtr18mQ8Jr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnyakK%2FbtrT4GIedC0%2FtnZvay3iKo2Rtr18mQ8Jr0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;359&quot; height=&quot;111&quot; data-filename=&quot;스크린샷 2022-12-20 오후 2.44.36.png&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3. 팝업이 뜨면 순서대로 &amp;ldquo;열기 - 설치&amp;rdquo;를 클릭합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;4. 스마트폰 홈 화면에 앱이 다운로드 됩니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;5. 앱 선택시, &quot;&lt;b&gt;신뢰하지 않는 기업용 개발자&quot;&lt;/b&gt; 라는 팝업이 뜨면 &quot;설정 - 일반 - VPN 및 기기관리&quot;를 선택합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(iOS버전에 따라 메뉴가 다르게 보일 수 있습니다. VPN과 기기관리 메뉴가 따로 보인다면 기기관리를 클릭합니다.)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;6. 기업용 앱에 있는 &quot;KT&quot;를 선택하고&amp;nbsp;&lt;span style=&quot;color: #006dd7;&quot;&gt;'KT'신뢰&lt;/span&gt;를 클릭하여 신뢰합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-12-20 오후 2.46.18.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;760&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dIDOTc/btrT6ejPrkO/OD6e2l8hVVmT4fLUkXK3H1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dIDOTc/btrT6ejPrkO/OD6e2l8hVVmT4fLUkXK3H1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dIDOTc/btrT6ejPrkO/OD6e2l8hVVmT4fLUkXK3H1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdIDOTc%2FbtrT6ejPrkO%2FOD6e2l8hVVmT4fLUkXK3H1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;294&quot; height=&quot;259&quot; data-filename=&quot;스크린샷 2022-12-20 오후 2.46.18.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;760&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;7. &lt;b&gt;앱을 재실행합니다.&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>iOS/iOS</category>
      <category>드롭박스 #dropbox #html #html파일만들기</category>
      <category>엔터프라이즈 #enterprise #앱배포 #내부배포 #ios #ipa #manifest</category>
      <author>bannaviiOS</author>
      <guid isPermaLink="true">https://bannavi.tistory.com/556</guid>
      <comments>https://bannavi.tistory.com/556#entry556comment</comments>
      <pubDate>Tue, 20 Dec 2022 14:50:03 +0900</pubDate>
    </item>
    <item>
      <title>obfuscator 프로그램이 실행 안될때(Feat. 난독화 프로그램, ixShield)</title>
      <link>https://bannavi.tistory.com/554</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;완성된 프로젝트를 난독화하는 업무를 맡았었는데 고객사에서 보내주신 프로그램(obfuscator)을 더블클릭해도 작동되지 않았다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;혼자 방법을 알아보다가 알게됐는데 리눅스 명령어 chmod를 사용해서 해결할 수 있었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-02 오후 1.14.14.png&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;446&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dk6xML/btrU139VVbt/5K1QBdWn8lr3NNvHxKJeq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dk6xML/btrU139VVbt/5K1QBdWn8lr3NNvHxKJeq1/img.png&quot; data-alt=&quot;네..&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dk6xML/btrU139VVbt/5K1QBdWn8lr3NNvHxKJeq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdk6xML%2FbtrU139VVbt%2F5K1QBdWn8lr3NNvHxKJeq1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;427&quot; height=&quot;194&quot; data-filename=&quot;스크린샷 2023-01-02 오후 1.14.14.png&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;446&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;네..&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;유닉스 수업때 들었던 내용이 그대로 적용되서 흥미로웠다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;결론은 ls 명령어를 이용해서 허가권(permission)을 확인해주고(아래에서 7번째줄)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;파일의 읽기, 쓰기 권한만 부여되어있었던 것을 chmod 755를 이용해서 실행권한(x)까지 부여해준 뒤 파일을 클릭해보니&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;정상으로 프로그램이 실행되었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-02 오후 1.32.30.png&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;109&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6l83v/btrU8EnQj2J/G5UZW0z0HKxUjIBGzsT7M0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6l83v/btrU8EnQj2J/G5UZW0z0HKxUjIBGzsT7M0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6l83v/btrU8EnQj2J/G5UZW0z0HKxUjIBGzsT7M0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6l83v%2FbtrU8EnQj2J%2FG5UZW0z0HKxUjIBGzsT7M0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;491&quot; height=&quot;109&quot; data-filename=&quot;스크린샷 2023-01-02 오후 1.32.30.png&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;109&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-02 오후 1.38.23.png&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;213&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vlJro/btrVe31acAs/xpK3z7PFrxPS0W1SVYUrbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vlJro/btrVe31acAs/xpK3z7PFrxPS0W1SVYUrbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vlJro/btrVe31acAs/xpK3z7PFrxPS0W1SVYUrbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvlJro%2FbtrVe31acAs%2FxpK3z7PFrxPS0W1SVYUrbK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;773&quot; height=&quot;213&quot; data-filename=&quot;스크린샷 2023-01-02 오후 1.38.23.png&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;213&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://gtblog.grs.pw/37&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://gtblog.grs.pw/37&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1672122643422&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;리눅스 파일, 디렉토리 권한 확인하기 ls 명령어&quot; data-og-description=&quot;리눅스 파일, 디렉토리 권한 확인하기 ls -l 명령을 사용하여 파일, 디렉토리 리스트를 출력하면 권한(퍼미션, 허가권)을 확인할 수 있습니다. 출력 결과는 각각 파일종류 및 권한(퍼미션), 링크수&quot; data-og-host=&quot;gtblog.grs.pw&quot; data-og-source-url=&quot;https://gtblog.grs.pw/37&quot; data-og-url=&quot;https://gtblog.grs.pw/37&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bnYQsV/hyQ1eNHKQa/X5Y9APXl8TvvKKqiOOs7y1/img.jpg?width=550&amp;amp;height=112&amp;amp;face=0_0_550_112,https://scrap.kakaocdn.net/dn/HreQH/hyQ1qggwul/LdGW74v6ZWEHgf2qojEa00/img.jpg?width=550&amp;amp;height=112&amp;amp;face=0_0_550_112&quot;&gt;&lt;a href=&quot;https://gtblog.grs.pw/37&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://gtblog.grs.pw/37&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bnYQsV/hyQ1eNHKQa/X5Y9APXl8TvvKKqiOOs7y1/img.jpg?width=550&amp;amp;height=112&amp;amp;face=0_0_550_112,https://scrap.kakaocdn.net/dn/HreQH/hyQ1qggwul/LdGW74v6ZWEHgf2qojEa00/img.jpg?width=550&amp;amp;height=112&amp;amp;face=0_0_550_112');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;리눅스 파일, 디렉토리 권한 확인하기 ls 명령어&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;리눅스 파일, 디렉토리 권한 확인하기 ls -l 명령을 사용하여 파일, 디렉토리 리스트를 출력하면 권한(퍼미션, 허가권)을 확인할 수 있습니다. 출력 결과는 각각 파일종류 및 권한(퍼미션), 링크수&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;gtblog.grs.pw&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>iOS/iOS</category>
      <category>ixShield #obfuscator #ios난독화 #난독화 #ios #swift</category>
      <author>bannaviiOS</author>
      <guid isPermaLink="true">https://bannavi.tistory.com/554</guid>
      <comments>https://bannavi.tistory.com/554#entry554comment</comments>
      <pubDate>Thu, 15 Dec 2022 09:29:22 +0900</pubDate>
    </item>
    <item>
      <title>bannaviiOS) wkwebView로딩속도가 너무 느릴때..(feat. 초기화면 설정)</title>
      <link>https://bannavi.tistory.com/553</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;wkwebView 로딩 속도가 너무 느렸던 이슈가 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;개선 방법을 찾아보니, &lt;/span&gt;&lt;span&gt;stackoverflow에서 &lt;/span&gt;&lt;span&gt;WKWebView&lt;/span&gt;가&lt;span&gt; &lt;/span&gt;기본적으로&lt;span&gt; JS&lt;/span&gt;의&lt;span&gt; JIT &lt;/span&gt;렌더링을&lt;span&gt; &lt;/span&gt;사용하지&lt;span&gt; &lt;/span&gt;않기&lt;span&gt; &lt;/span&gt;때문에&lt;span&gt; &lt;/span&gt;로딩&lt;span&gt; &lt;/span&gt;속도가&lt;span&gt; &lt;/span&gt;느린것이라고 했다. 아래의 코드를 추가하면 wkwebView로드 속도가 더 빨라질것이라고 했는데..&lt;/p&gt;
&lt;pre id=&quot;code_1669767476500&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;webConfiguration.suppressesIncrementalRendering = true&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별 차도는 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 현재 프로젝트 코드 구성을 살펴보는데,&amp;nbsp; launchscreen화면이 너무 빨리 사라지는 이슈가 있어서 appdelegate.swift파일의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;didFinishLaunchingWithOptions 함수 내부에 아래의 코드를 넣어주었었다.&lt;/p&gt;
&lt;pre id=&quot;code_1669790719910&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Thread.sleep(forTimeInterval: 2.0)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;메인스토리보드에 연결된 init view를 열때,&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;쓰레드로 메인 뷰를 열 시간을 지연&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;시켰던 것인데 왠지 이것 때문에&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;웹뷰화면이 느리게 뜬것일수도 있다는 생각이 들었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;그래서 사용했던 launchscreen을 사용하지 않고, 위의 Thread.sleep도 주석처리를 하고,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Main 스토리보드만을 이용해서 splash뷰를 구현하기로 했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;간단히 미리 설명하자면, 앱이 실행될때 launch screen file을 Main.storyboard로 수정하여, 앱이 실행되면 &lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;launch screen이 아니라 &lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Main.storyboard를 띄우도록 하고, 뷰컨 위에 &lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;launch screen역할을 대신할, &lt;/span&gt;UIVIew를 add하여 2초 후에 뷰를 사라지게하면..&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;야매같지만 해볼법할것 같았고, 실제로도 유의미했다.(이런식으로 구현은 많이 안하겠지만.... 더 좋은 방법이 있다면 댓글을 부탁드립니다)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;1) launch screen file을 main으로 바꾸고&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-11-30 오후 3.52.06.png&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;138&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LOvi5/btrSr5Jm3OJ/UJ1WCkse1IUrec2arM58E1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LOvi5/btrSr5Jm3OJ/UJ1WCkse1IUrec2arM58E1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LOvi5/btrSr5Jm3OJ/UJ1WCkse1IUrec2arM58E1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLOvi5%2FbtrSr5Jm3OJ%2FUJ1WCkse1IUrec2arM58E1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1207&quot; height=&quot;138&quot; data-filename=&quot;스크린샷 2022-11-30 오후 3.52.06.png&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;138&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 웹뷰에 splashView를 add해주고&lt;/b&gt;&lt;span&gt;(constraints 설정 필요)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1669791893789&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;self.webView.addSubview(splashView)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;3) 2초후에 webView에 add했던 splash view를 사라지게 하기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1669792719178&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2) {

            UIView.animate(

                withDuration: 1.0,

                animations: {

                    self.splashView.alpha = 0.0

                }) { finished in

                    self.splashView.isHidden = true

                }

}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>iOS/iOS</category>
      <category>animation</category>
      <category>DispatchQueue</category>
      <category>LaunchScreen</category>
      <category>splashView</category>
      <author>bannaviiOS</author>
      <guid isPermaLink="true">https://bannavi.tistory.com/553</guid>
      <comments>https://bannavi.tistory.com/553#entry553comment</comments>
      <pubDate>Wed, 30 Nov 2022 16:21:02 +0900</pubDate>
    </item>
    <item>
      <title>bannaviiOS) LaunchScreen이 너무 빨리 사라질때 시간 늦추기</title>
      <link>https://bannavi.tistory.com/552</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://g-y-e-o-m.tistory.com/20&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://g-y-e-o-m.tistory.com/20&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1669707712756&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[SWIFT] Launch Image에 이미지 등록 및 delay 시간 주기&quot; data-og-description=&quot;[Launch Image] 참고로 알아둘 것은 Launch Screen File이란 것과 Launch Image Source 두 가지가 있다는 것이다. Launch Images Source는 앱이 실행되고 그냥 이미지 하나 잠깐 띄우고 메인으로 넘어갈때 활용하면 되&quot; data-og-host=&quot;g-y-e-o-m.tistory.com&quot; data-og-source-url=&quot;https://g-y-e-o-m.tistory.com/20&quot; data-og-url=&quot;https://g-y-e-o-m.tistory.com/20&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/VRbsD/hyQJDTHzSz/fTbIk4woggSvsDbkgYBfz0/img.png?width=612&amp;amp;height=128&amp;amp;face=0_0_612_128,https://scrap.kakaocdn.net/dn/bPN6Hm/hyQJHaHwtn/99CPSlRPgD8hYm7EIUarPK/img.png?width=612&amp;amp;height=128&amp;amp;face=0_0_612_128,https://scrap.kakaocdn.net/dn/MmPd2/hyQJAbzZQQ/BP5JncfJtH1hb0fPii5NA0/img.jpg?width=6000&amp;amp;height=4000&amp;amp;face=0_0_6000_4000&quot;&gt;&lt;a href=&quot;https://g-y-e-o-m.tistory.com/20&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://g-y-e-o-m.tistory.com/20&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/VRbsD/hyQJDTHzSz/fTbIk4woggSvsDbkgYBfz0/img.png?width=612&amp;amp;height=128&amp;amp;face=0_0_612_128,https://scrap.kakaocdn.net/dn/bPN6Hm/hyQJHaHwtn/99CPSlRPgD8hYm7EIUarPK/img.png?width=612&amp;amp;height=128&amp;amp;face=0_0_612_128,https://scrap.kakaocdn.net/dn/MmPd2/hyQJAbzZQQ/BP5JncfJtH1hb0fPii5NA0/img.jpg?width=6000&amp;amp;height=4000&amp;amp;face=0_0_6000_4000');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[SWIFT] Launch Image에 이미지 등록 및 delay 시간 주기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[Launch Image] 참고로 알아둘 것은 Launch Screen File이란 것과 Launch Image Source 두 가지가 있다는 것이다. Launch Images Source는 앱이 실행되고 그냥 이미지 하나 잠깐 띄우고 메인으로 넘어갈때 활용하면 되&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;g-y-e-o-m.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 해결은 금방 했지만 새롭게 안 사실이 있어서 기록해보려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;해결방법&lt;/span&gt;&lt;br /&gt;appdelegate.swift파일 안에 있는 &lt;/b&gt;didFinishLaunchingWithOptions함수에 해당내용을 구현&lt;/p&gt;
&lt;pre id=&quot;code_1669709182445&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -&amp;gt; Bool {
        // Override point for customization after application launch.
        Thread.sleep(forTimeInterval: 2.0)
        return true
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;알게된 것&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;didFinishLaunchingWithOptions 함수가, 메인스토리보드에 연결된 init view를 열때 호출되는 함수&lt;/span&gt; 라는것.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그냥 뭉뚱그려서 appdelegate에 있는 &lt;span style=&quot;color: #000000;&quot;&gt;didFinishLaunchingWithOptions함수가 앱이 처음 실행될때 불려지는 함수라고만 알고 있었지, 저런 의미를 갖고있는지 잘 몰랐다.ㅎㅎ 이래서 얇고 넓게라도(그런게 있는지라도 알고있어야) 알고있어야, 머릿속에서 이어지나보다 굿굿ㅎㅎ&lt;/span&gt;&lt;/p&gt;</description>
      <category>iOS/iOS</category>
      <category>appdelegate #ios #</category>
      <category>didFinishLaunchingWithOptions #</category>
      <category>Thread #ios #swift</category>
      <author>bannaviiOS</author>
      <guid isPermaLink="true">https://bannavi.tistory.com/552</guid>
      <comments>https://bannavi.tistory.com/552#entry552comment</comments>
      <pubDate>Tue, 29 Nov 2022 17:24:39 +0900</pubDate>
    </item>
    <item>
      <title>bannaviiOS) testflight archive할때 주의사항</title>
      <link>https://bannavi.tistory.com/551</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오랜만에 팀원의 요구로 testflight배포를 하게됐는데, 불과 몇달만에 이렇게 익숙해 졌다는 점이 나를 기분좋게 했다.&lt;br /&gt;그래서 다음엔 더 능숙하게 처리하기 위해서 오늘 깨달은 점을 기록해본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bannavi.tistory.com/351&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;testflight배포하는 방법&lt;/a&gt;을 지난 글에서 포스팅했었는데 참고하기도 참 좋았다. 크크(과거의 나 칭찬해:))&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 동일한 빌드 버전으로는 빌드파일을 보낼 수 없음. 빌드파일을 보낼 때마다 빌드버전을 수정해주어야 합니다.&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;u&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;2. 초대 메일을 받고 testflight가 실행되는 조건은 2개로 나뉘는데&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;2-1) 해당 테스트 기기에서 메일을 열 경우&lt;br /&gt;2-2) 테스트 기기가 아닌 다른 기기에서 메일을 열 경우&lt;b&gt;&lt;br /&gt;&lt;/b&gt;2-1번 같은 경우는 TestFlight 가 기기에 설치되어 있을경우 바로 해당 앱이 활성화 되어 보이지만&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2-2번 같은 경우는&amp;nbsp; 메일에 써있는 나타난 초대 코드 (예 :&amp;nbsp;&amp;nbsp;XUFUTNCGDF)를 테스트 기기의 TestFlight에 직접 입력해 주어야 한다.&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;u&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;3. 두번의 메일을 보내는 과정을 거쳐야된다고 생각하면 된다.&lt;/b&gt;&lt;/span&gt;&lt;/u&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;첫번째) &lt;span style=&quot;color: #ef5369;&quot;&gt;사용자 및 액세스&lt;/span&gt;에 신규 사용자추가하기(여기에 먼저 추가를 해주어야 testflight의 tester에도 추가가 가능하다)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;-&amp;gt; 이 과정에서 메일을 보내야한다. (수신자에게 Accept invite누르고 이어서 연결되는 애플로그인도 해달라고 부탁하기)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;두번째&lt;span style=&quot;color: #000000;&quot;&gt;) 나의앱에서 테스트 할 앱을 선택하고 tester에 해당 사용자를 추가(나의앱에 없다면 그냥 +눌러서 추가해주면된다)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;-&amp;gt; 이 과정에서 메일을 또 보내야한다. (수신자에게 Accept invite누르고 이어서 연결되는 애플 로그인도 해달라고 부탁)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그럼 매일보내는건 끝. 그리고 여기까지 했으면 정상적으로 다운 받아진다. 잘안되면 &lt;a href=&quot;https://bannavi.tistory.com/351&quot;&gt;testflight배포하는 방법&lt;/a&gt; 이 포스팅 참고해보시길..&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 나의앱에 테스트할 앱을 + 눌러서 추가하는 과정에서 &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;SKU&lt;/span&gt;를&lt;/b&gt; 입력하라고 나오는데 보통 이 값은 &lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;bundleid가 아닌 다른 값을 입력&lt;/b&gt;&lt;/span&gt;한다고 한다. 나는 이전앱들에 맞춰서&amp;nbsp;&lt;b&gt;&quot;회사이름영어대문자두글자-앱이름영어대문자&quot; &lt;/b&gt;이런식으로 작성했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고 블로그)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://0urtrees.tistory.com/59&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://0urtrees.tistory.com/59&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1669681838763&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;iOS앱 TestFlight 앱 업로드 및 테스트 준비하기&quot; data-og-description=&quot;안녕하세요! 민군입니다 ^-^ 저는 최근 협업으로 앱을 만들고 있습니다!! 멋진앱을 만들기 위해 열심히(?) 만들고 있답니다. 오늘의 주제는 iOS앱을 TestFlight를 사용해서 테스트하는 방법을 설명해&quot; data-og-host=&quot;0urtrees.tistory.com&quot; data-og-source-url=&quot;https://0urtrees.tistory.com/59&quot; data-og-url=&quot;https://0urtrees.tistory.com/59&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Ae916/hyQJtQDi0o/owFc0IjVleUIj18qtiKGm1/img.png?width=800&amp;amp;height=456&amp;amp;face=0_0_800_456,https://scrap.kakaocdn.net/dn/E3UfF/hyQJuhIcKM/TkkC2300kPNq1sLs42Vlf0/img.png?width=800&amp;amp;height=456&amp;amp;face=0_0_800_456,https://scrap.kakaocdn.net/dn/cw6DyI/hyQJD6LZDo/Dfp8fbAlHP1akq9WGbHhl1/img.png?width=1506&amp;amp;height=914&amp;amp;face=0_0_1506_914&quot;&gt;&lt;a href=&quot;https://0urtrees.tistory.com/59&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://0urtrees.tistory.com/59&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Ae916/hyQJtQDi0o/owFc0IjVleUIj18qtiKGm1/img.png?width=800&amp;amp;height=456&amp;amp;face=0_0_800_456,https://scrap.kakaocdn.net/dn/E3UfF/hyQJuhIcKM/TkkC2300kPNq1sLs42Vlf0/img.png?width=800&amp;amp;height=456&amp;amp;face=0_0_800_456,https://scrap.kakaocdn.net/dn/cw6DyI/hyQJD6LZDo/Dfp8fbAlHP1akq9WGbHhl1/img.png?width=1506&amp;amp;height=914&amp;amp;face=0_0_1506_914');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;iOS앱 TestFlight 앱 업로드 및 테스트 준비하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요! 민군입니다 ^-^ 저는 최근 협업으로 앱을 만들고 있습니다!! 멋진앱을 만들기 위해 열심히(?) 만들고 있답니다. 오늘의 주제는 iOS앱을 TestFlight를 사용해서 테스트하는 방법을 설명해&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;0urtrees.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://sweetcoding.tistory.com/77&quot;&gt;https://sweetcoding.tistory.com/77&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1669688891491&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;how to invite testflight tester (TestFlight 테스터 초대  방법)&quot; data-og-description=&quot;TestFlight에 앱을 올리고 테스터들을 초대해야하는데 방법은 아래와 같다. 1. 아래 사이트에 들어간다. https://appstoreconnect.apple.com/access/users https://appstoreconnect.apple.com/login?targetUrl=%2Faccess%2Fusers&amp;amp;authRes&quot; data-og-host=&quot;sweetcoding.tistory.com&quot; data-og-source-url=&quot;https://sweetcoding.tistory.com/77&quot; data-og-url=&quot;https://sweetcoding.tistory.com/77&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/r0tId/hyQJIG9LCP/to4kvbb955leFXrOLfhqX1/img.png?width=800&amp;amp;height=174&amp;amp;face=0_0_800_174,https://scrap.kakaocdn.net/dn/cXP50u/hyQJImO9is/H7gNRB002fc9OEF4WP4Sf0/img.png?width=800&amp;amp;height=174&amp;amp;face=0_0_800_174,https://scrap.kakaocdn.net/dn/dlrlqx/hyQJxyQB6n/Uj3XzctSsrKTYlvBK7OpV0/img.png?width=1297&amp;amp;height=923&amp;amp;face=0_0_1297_923&quot;&gt;&lt;a href=&quot;https://sweetcoding.tistory.com/77&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://sweetcoding.tistory.com/77&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/r0tId/hyQJIG9LCP/to4kvbb955leFXrOLfhqX1/img.png?width=800&amp;amp;height=174&amp;amp;face=0_0_800_174,https://scrap.kakaocdn.net/dn/cXP50u/hyQJImO9is/H7gNRB002fc9OEF4WP4Sf0/img.png?width=800&amp;amp;height=174&amp;amp;face=0_0_800_174,https://scrap.kakaocdn.net/dn/dlrlqx/hyQJxyQB6n/Uj3XzctSsrKTYlvBK7OpV0/img.png?width=1297&amp;amp;height=923&amp;amp;face=0_0_1297_923');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;how to invite testflight tester (TestFlight 테스터 초대 방법)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;TestFlight에 앱을 올리고 테스터들을 초대해야하는데 방법은 아래와 같다. 1. 아래 사이트에 들어간다. https://appstoreconnect.apple.com/access/users https://appstoreconnect.apple.com/login?targetUrl=%2Faccess%2Fusers&amp;amp;authRes&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;sweetcoding.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>iOS/iOS</category>
      <category>ios #testflight #tester #swift</category>
      <author>bannaviiOS</author>
      <guid isPermaLink="true">https://bannavi.tistory.com/551</guid>
      <comments>https://bannavi.tistory.com/551#entry551comment</comments>
      <pubDate>Tue, 29 Nov 2022 11:45:21 +0900</pubDate>
    </item>
    <item>
      <title>bannaviiOS) testflight error: This bundle is invalid (Feat.UIApplicationExitsOnSuspend)</title>
      <link>https://bannavi.tistory.com/550</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;어느정도 구현을 마치고.. testflight버전을 사내에 배포해서 test를 요청 드리려고 했었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-11-29 오전 10.58.47.png&quot; data-origin-width=&quot;848&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tnkUf/btrSmrLmJkX/Y7WbQU88KcdPUEroeLiik1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tnkUf/btrSmrLmJkX/Y7WbQU88KcdPUEroeLiik1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tnkUf/btrSmrLmJkX/Y7WbQU88KcdPUEroeLiik1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtnkUf%2FbtrSmrLmJkX%2FY7WbQU88KcdPUEroeLiik1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;848&quot; height=&quot;40&quot; data-filename=&quot;스크린샷 2022-11-29 오전 10.58.47.png&quot; data-origin-width=&quot;848&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;Any iOS Device 또는 연결되어있는 iPhone기기로 설정했고,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;xcode에서 Product - Archive를 눌러서 조금 기다려주면..&lt;br /&gt;Archives가 뜹니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;testflight로 배포할 앱을 선택하고 Distribute App 클릭.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-11-29 오전 11.13.08.png&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chwSSN/btrSlW5ZiiR/OWCnBOnVkUkec03ogGO2qk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chwSSN/btrSlW5ZiiR/OWCnBOnVkUkec03ogGO2qk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chwSSN/btrSlW5ZiiR/OWCnBOnVkUkec03ogGO2qk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchwSSN%2FbtrSlW5ZiiR%2FOWCnBOnVkUkec03ogGO2qk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;314&quot; data-filename=&quot;스크린샷 2022-11-29 오전 11.13.08.png&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;314&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;next 누르면서 개인 회사에 맞게 옵션 설정하고 해주면 원래 되는데..&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-11-28 오후 5.18.59.png&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;203&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFGt0K/btrSlGIoww3/VGJGoVwcsCDhuwDjFkk6JK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFGt0K/btrSlGIoww3/VGJGoVwcsCDhuwDjFkk6JK/img.png&quot; data-alt=&quot;띠용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFGt0K/btrSlGIoww3/VGJGoVwcsCDhuwDjFkk6JK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFGt0K%2FbtrSlGIoww3%2FVGJGoVwcsCDhuwDjFkk6JK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;658&quot; height=&quot;203&quot; data-filename=&quot;스크린샷 2022-11-28 오후 5.18.59.png&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;203&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;띠용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;어떠한 에러때문에 distribute가 안된다고 했다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;찾아보니, UIApplicationExitsOnSuspend 키를 앞으로 애플에서 지원 안할껀데 info.plist에 있다고 하는 내용이었다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;근데 info에 없던데..숨어있었다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;Application does not run in backgound를 우클릭하고 Raw Keys and Values를 클릭하면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;안보였었던 UIApplicationExitsOnSuspend가 보이게되는데 -버튼을 눌러서 삭제해줬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-11-28 오후 5.22.38.png&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;482&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8oJuI/btrSlo2keDX/NKYMP8mvGRCYjgXE17gA4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8oJuI/btrSlo2keDX/NKYMP8mvGRCYjgXE17gA4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8oJuI/btrSlo2keDX/NKYMP8mvGRCYjgXE17gA4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8oJuI%2FbtrSlo2keDX%2FNKYMP8mvGRCYjgXE17gA4K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1320&quot; height=&quot;482&quot; data-filename=&quot;스크린샷 2022-11-28 오후 5.22.38.png&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;482&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-11-28 오후 5.23.08.png&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmkyn9/btrSlkFDvrn/daZ0syKZytWuiN81YKjH81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmkyn9/btrSlkFDvrn/daZ0syKZytWuiN81YKjH81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmkyn9/btrSlkFDvrn/daZ0syKZytWuiN81YKjH81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcmkyn9%2FbtrSlkFDvrn%2FdaZ0syKZytWuiN81YKjH81%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1184&quot; height=&quot;214&quot; data-filename=&quot;스크린샷 2022-11-28 오후 5.23.08.png&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 느낌 쎄한게.... foreground, background모드 상태에서 url정보를 담고있는 push를 터치했을때 해당 url(나는 알림페이지)로 이동하는 방법을 구현할때 필요하다고 해서 넣었던 property였었는데 저걸 -하니까 왠지 되던 기능이 안될것 같은 느낌..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 다행히 testflight로 까니까 정상으로 원하는 기능이 됐었다. 휴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고했던 블로그)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://blog.naver.com/yoohee2018/221566174487&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://blog.naver.com/yoohee2018/221566174487&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1669624189420&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Unity] Deprecated Info.plist Key - The Info.plist contains a key 'UIApplicationExitsOnSuspend'&quot; data-og-description=&quot;Unity 2019.1.4.1f [19.06.19 기준 에러발생] 유니티 iOS 빌드하여 Xcode에서 Archive 제출 시 다음과...&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://blog.naver.com/yoohee2018/221566174487&quot; data-og-url=&quot;https://blog.naver.com/yoohee2018/221566174487&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cY5Hzd/hyQJBgoxMV/d70BQBHx0xHzqqfPcRszeK/img.png?width=743&amp;amp;height=382&amp;amp;face=0_0_743_382&quot;&gt;&lt;a href=&quot;https://blog.naver.com/yoohee2018/221566174487&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.naver.com/yoohee2018/221566174487&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cY5Hzd/hyQJBgoxMV/d70BQBHx0xHzqqfPcRszeK/img.png?width=743&amp;amp;height=382&amp;amp;face=0_0_743_382');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Unity] Deprecated Info.plist Key - The Info.plist contains a key 'UIApplicationExitsOnSuspend'&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Unity 2019.1.4.1f [19.06.19 기준 에러발생] 유니티 iOS 빌드하여 Xcode에서 Archive 제출 시 다음과...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>iOS/iOS</category>
      <category>testflight #</category>
      <category>UIApplicationExitsOnSuspend #ios #swift</category>
      <author>bannaviiOS</author>
      <guid isPermaLink="true">https://bannavi.tistory.com/550</guid>
      <comments>https://bannavi.tistory.com/550#entry550comment</comments>
      <pubDate>Tue, 29 Nov 2022 11:27:05 +0900</pubDate>
    </item>
    <item>
      <title>bannaviiOS) wkWebView 뽀개기(feat.evaluateJavaScript vs addUserScript)</title>
      <link>https://bannavi.tistory.com/549</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;javascript에게 함수나 값을 전달할때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 블로그에선 evaluateJavaScript를 사용하고, 어디에선 addUserScript를 사용하던데 무슨 차이인지가 궁금해졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나와 같은 궁금증을 가진 stackoverflower가 있었는데...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/41488423/javascript-in-wkwebview-evaluatejavascript-vs-adduserscript&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/41488423/javascript-in-wkwebview-evaluatejavascript-vs-adduserscript&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1669616627177&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Javascript in WKWebView - evaluateJavaScript vs addUserScript&quot; data-og-description=&quot;I am trying to understand the best way to execute javascript with WKWebview Could someone please give me the use cases / best practices when using WKWebView. When to use addUserScript and&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/41488423/javascript-in-wkwebview-evaluatejavascript-vs-adduserscript&quot; data-og-url=&quot;https://stackoverflow.com/questions/41488423/javascript-in-wkwebview-evaluatejavascript-vs-adduserscript&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dX2kQC/hyQJuarBMI/NHvumclIOTkVV7NHzU5hn0/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/41488423/javascript-in-wkwebview-evaluatejavascript-vs-adduserscript&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/41488423/javascript-in-wkwebview-evaluatejavascript-vs-adduserscript&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dX2kQC/hyQJuarBMI/NHvumclIOTkVV7NHzU5hn0/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Javascript in WKWebView - evaluateJavaScript vs addUserScript&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I am trying to understand the best way to execute javascript with WKWebview Could someone please give me the use cases / best practices when using WKWebView. When to use addUserScript and&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;stackoverflower1&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;네이티브&lt;/span&gt; &lt;span&gt;코드에서&lt;/span&gt; js DOM &lt;span&gt;강조&lt;/span&gt; &lt;span&gt;텍스트로&lt;/span&gt; javascript &lt;span&gt;삽입&lt;/span&gt; WKUserContentController&lt;span&gt;를&lt;/span&gt; &lt;span&gt;사용하면&lt;/span&gt; DOM &lt;span&gt;트리가&lt;/span&gt; &lt;span&gt;로드되기&lt;/span&gt; &lt;span&gt;시작하거나&lt;/span&gt; &lt;span&gt;로드가&lt;/span&gt; &lt;span&gt;완료될&lt;/span&gt; &lt;span&gt;때&lt;/span&gt; &lt;span&gt;삽입할&lt;/span&gt; WKUserScript&lt;span&gt;를&lt;/span&gt; &lt;span&gt;추가&lt;/span&gt;(&lt;span&gt;및&lt;/span&gt; &lt;span&gt;제거&lt;/span&gt;)&lt;span&gt;할&lt;/span&gt; &lt;span&gt;수&lt;/span&gt; &lt;span&gt;있습니다&lt;/span&gt;. &lt;span&gt;반대로&lt;/span&gt;, evaluateJavaScript&lt;span&gt;를&lt;/span&gt; &lt;span&gt;사용하면&lt;/span&gt; &lt;span&gt;애플리케이션이&lt;/span&gt; &lt;span&gt;언제든지&lt;/span&gt; &lt;span&gt;필요에&lt;/span&gt; &lt;span&gt;따라&lt;/span&gt; &lt;span&gt;자바스크립트&lt;/span&gt; &lt;span&gt;스니펫을&lt;/span&gt; &lt;span&gt;실행할&lt;/span&gt; &lt;span&gt;수&lt;/span&gt; &lt;span&gt;있습니다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 잘.. 잘 모르겠어요 더 쉬운 설명좀..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;stackoverflower2 &amp;amp; 3&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제 경험상 WKUserScript는 더 많은 권한을 가지고 있는 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그러나&lt;/span&gt; WKUserScript&lt;span&gt;는&lt;/span&gt; &lt;span&gt;삽입한&lt;/span&gt; javascript&lt;span&gt;를&lt;/span&gt; &lt;span&gt;실행하기&lt;/span&gt; &lt;span&gt;위해&lt;/span&gt; &lt;span&gt;추가&lt;/span&gt; reload()&lt;span&gt;가&lt;/span&gt; &lt;span&gt;필요합니다&lt;/span&gt;. 그래서&amp;nbsp;&lt;span&gt;때로는&lt;/span&gt; &lt;span&gt;코드가&lt;/span&gt; &lt;span&gt;복잡해지는데&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;webView&lt;span&gt;가&lt;/span&gt; &lt;span&gt;요청을&lt;/span&gt; &lt;span&gt;로드하기&lt;/span&gt; &lt;span&gt;전에&lt;/span&gt; contentController&lt;span&gt;에&lt;/span&gt; &lt;span&gt;추가하면&lt;/span&gt; &lt;span&gt;추가&lt;/span&gt; reload() &lt;span&gt;작업이&lt;/span&gt; &lt;span&gt;필요하지&lt;/span&gt; &lt;span&gt;않긴 합니다.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;evaluateJavaScript&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;메소드를&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;사용하여&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;쿠키를&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;주입할&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;수&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 가장 큰 차이는 쿠키 주입의 여부인것 같음.&lt;/p&gt;</description>
      <category>iOS/iOS</category>
      <category>addUserScript</category>
      <category>evaluateJavaScript #</category>
      <category>Ios #cookie #wkwebVIew</category>
      <author>bannaviiOS</author>
      <guid isPermaLink="true">https://bannavi.tistory.com/549</guid>
      <comments>https://bannavi.tistory.com/549#entry549comment</comments>
      <pubDate>Mon, 28 Nov 2022 15:58:25 +0900</pubDate>
    </item>
  </channel>
</rss>