<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>yi-sang.log</title>
        <link>https://velog.io/</link>
        <description>꿈 속 코딩</description>
        <lastBuildDate>Thu, 12 Aug 2021 23:15:34 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>yi-sang.log</title>
            <url>https://images.velog.io/images/yi-sang/profile/7b5b835f-0407-4f5e-98ce-6dc5902aca36/social.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. yi-sang.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/yi-sang" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[맥북닫으면 외장 모니터 꺼지게 하기(클렘쉘 모드 끄기)]]></title>
            <link>https://velog.io/@yi-sang/%EB%A7%A5%EB%B6%81%EB%8B%AB%EC%9C%BC%EB%A9%B4-%EC%99%B8%EC%9E%A5-%EB%AA%A8%EB%8B%88%ED%84%B0-%EA%BA%BC%EC%A7%80%EA%B2%8C-%ED%95%98%EA%B8%B0%ED%81%B4%EB%A0%98%EC%89%98-%EB%AA%A8%EB%93%9C-%EB%81%84%EA%B8%B0</link>
            <guid>https://velog.io/@yi-sang/%EB%A7%A5%EB%B6%81%EB%8B%AB%EC%9C%BC%EB%A9%B4-%EC%99%B8%EC%9E%A5-%EB%AA%A8%EB%8B%88%ED%84%B0-%EA%BA%BC%EC%A7%80%EA%B2%8C-%ED%95%98%EA%B8%B0%ED%81%B4%EB%A0%98%EC%89%98-%EB%AA%A8%EB%93%9C-%EB%81%84%EA%B8%B0</guid>
            <pubDate>Thu, 12 Aug 2021 23:15:34 GMT</pubDate>
            <description><![CDATA[<h2 id="macos-1010에서-클렘쉘-모드-끄기">macOS 10.10에서 클렘쉘 모드 끄기</h2>
<pre><code class="language-shell">sudo nvram boot-args=iog=0x0</code></pre>
<h2 id="macos-1010에서-클렘쉘-모드-켜기복구">macOS 10.10에서 클렘쉘 모드 켜기(복구)</h2>
<pre><code class="language-shell">sudo nvram boot-args</code></pre>
<h2 id="macos가-1012-이상에서-클렘쉘-모드-끄기">macOS가 10.12 이상에서 클렘쉘 모드 끄기</h2>
<ol>
<li><p>homebrew가 설치 되어 있어야 한다. (터미널에서 붙여넣기)</p>
<pre><code class="language-shell">/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”</code></pre>
</li>
<li><p>No clamshell을 설치하자. (터미널에서 차례로 복사 붙여넣기)</p>
<pre><code class="language-shell">brew install pirj/homebrew-noclamshell/noclamshell</code></pre>
<pre><code class="language-shell">brew services start noclamshell</code></pre>
</li>
</ol>
<h2 id="m1-맥에서-클렘쉘-모드-끄기">M1 맥에서 클렘쉘 모드 끄기</h2>
<p>Cmd + spacebar를 누르고  /opt/homebrew/bin/를 검색한다.
<img src="https://images.velog.io/images/yi-sang/post/e42354d7-fb76-45f0-882a-0e35c2497ad1/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-08-13%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%207.44.11.png" alt=""></p>
<p>폴더 내로 들어가서 Cmd+ F로 noclamshell를 검색하면 안되고 밑으로 내려서 noclamshell을 찾아 오른쪽 클릭 -&gt; 원본 보기
<img src="https://images.velog.io/images/yi-sang/post/a1267416-a977-4c12-bea0-623fe2c6c2ed/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-08-13%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%207.50.08.png" alt=""></p>
<p>터미널 아이콘으로 된 noclamshell 오른쪽 클릭 -&gt; 다음으로 열기 -&gt; 기타 ... -&gt; 텍스트 편집기 -&gt; 열기
<img src="https://images.velog.io/images/yi-sang/post/8a7f97c9-607d-4903-903c-d5be82812852/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-08-13%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%207.50.59.png" alt=""></p>
<p>원래 코드를 다음코드로 변경한다.</p>
<pre><code class="language-shell">#!/usr/bin/env bash
LID_CLOSED=$(ioreg -r -k AppleClamshellState | grep AppleClamshellState | grep Yes)
if [ &quot;$LID_CLOSED&quot; ]; then
    CLAMSHELL=$(pmset -g powerstate | grep DCPDPDeviceProxy | wc -l)
    if (( CLAMSHELL &lt; 4 )); then
          pmset sleepnow
    fi
  EXTERNAL_DISPLAY_CONNECTED=$(pmset -g powerstate | grep AppleDisplay | grep USEABLE)
  if [ &quot;$EXTERNAL_DISPLAY_CONNECTED&quot; ]; then
    AWAKE=$(pmset -g powerstate | grep IODisplayWrangler | grep USEABLE)
    if [ &quot;$AWAKE&quot; ]; then
      pmset sleepnow
    fi
  fi
fi</code></pre>
<p>변경된 모습이다.
<img src="https://images.velog.io/images/yi-sang/post/d46e9d02-8dea-40b3-a236-b8ffe056f1b6/image.png" alt=""></p>
<h2 id="m1-맥에서-클렘쉘-모드-켜기">M1 맥에서 클렘쉘 모드 켜기</h2>
<p>다시 원상 복구 하려면 터미널에서</p>
<pre><code class="language-shell">brew services stop noclamshell</code></pre>
<pre><code class="language-shell">brew uninstall pirj/homebrew-noclamshell/noclamshell</code></pre>
<p>를 차례로 실행한다.</p>
<h4 id="참고문헌">참고문헌</h4>
<p><a href="http://dobiho.com/34190/">http://dobiho.com/34190/</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Kakao 지도 IOS API 가이드]]></title>
            <link>https://velog.io/@yi-sang/Kakao-%EC%A7%80%EB%8F%84-IOS-API-%EA%B0%80%EC%9D%B4%EB%93%9C</link>
            <guid>https://velog.io/@yi-sang/Kakao-%EC%A7%80%EB%8F%84-IOS-API-%EA%B0%80%EC%9D%B4%EB%93%9C</guid>
            <pubDate>Thu, 12 Aug 2021 19:38:17 GMT</pubDate>
            <description><![CDATA[<p><a href="https://apis.map.kakao.com/ios/guide/">카카오톡 디벨로퍼 가이드</a></p>
<p>우선 카카오톡 공식문서를 잘 읽어보자.</p>
<p>하지만 위 가이드는 Xcode 버전 10.0을 대상으로 하기 때문에 몇 가지 오류가 발생한다.</p>
<p>오류를 해결한 과정을 기록한다.</p>
<h2 id="네이티브-앱-키-발급-및-bundle-id-등록하기">네이티브 앱 키 발급 및 Bundle ID 등록하기</h2>
<p>우선 Bundle ID를 등록하자.</p>
<p>아래의 과정을 차례로 따르자</p>
<ol>
<li>카카오 개발자사이트 (<a href="https://developers.kakao.com">https://developers.kakao.com</a>) 접속</li>
<li>개발자 등록 및 앱 생성</li>
<li>IOS 플랫폼 추가: 앱 선택 – [플랫폼] – [iOS 플랫폼 등록] – 번들ID(필수) 등록</li>
<li>페이지 상단의 [네이티브 앱 키]와 등록한 [번들 ID]를 사용합니다.</li>
</ol>
<p>프로젝트를 생성할때 Bundle identifier를 기억해두거나 잊었다면</p>
<p>아래 사진에서 Bundle identifier를 확인할 수 있다.</p>
<p><img src="https://images.velog.io/images/yi-sang/post/58ba22a4-3749-4eae-8d82-762f23843f5e/image.png" alt=""></p>
<p>iOS 플랫폼 등록을 누르고 위에서 확인한 Bundle identifier를 입력한다.</p>
<p><img src="https://images.velog.io/images/yi-sang/post/ffea9630-a35d-4582-8e86-958480698b13/image.png" alt=""></p>
<p>Info.plist 파일에 다음과 같은 항목으로 앞 단계에서 발급 받은 APP KEY 를 설정한다.</p>
<ul>
<li>Key name: KAKAO_APP_KEY</li>
<li>Value Type : String</li>
<li>Value : 발급 받은 APP KEY
<img src="https://images.velog.io/images/yi-sang/post/6e437b1a-5e73-44be-b3b2-adb247cffc2f/image.png" alt=""></li>
</ul>
<p><a href="https://apis.map.kakao.com/download/ios/sdk/IOS_DaumMap_SDK_1.4.0.zip">Download SDK</a></p>
<p>SDK를 다운받아서 압축을 풀고 DaumMap.embeddedframework 폴더를 애플리케이션 프로젝트로 복사한다.
Add Files to “프로젝트명”을 이용하거나, finder에서 Xcode 왼편의 프로젝트 내에 드래그한다.
<img src="https://images.velog.io/images/yi-sang/post/4b36e88a-0c77-4eb2-81ad-1671550ef64a/image.png" alt=""></p>
<h2 id="라이브러리-파일-추가">라이브러리 파일 추가</h2>
<p>Frameworks, Libraries, and Embedded Content에서 +버튼을 눌러 아래 프레임워크들을 추가한다.</p>
<ul>
<li>Metal.framework <strong>(OpenGLES.framework 대신)</strong></li>
<li>SystemConfiguration.framework</li>
<li>CoreLocation.framework</li>
<li>QuartzCore.framework</li>
<li>libc++.tbd</li>
<li>libxml2.tbd</li>
<li>libsqlite3.tbd
<img src="https://images.velog.io/images/yi-sang/post/032c1a3f-10e9-422a-bb5f-7ce04a4ccb99/image.png" alt=""></li>
</ul>
<p>Link Binary With Libraries에서 아래 프레임 워크를 추가한다.</p>
<ul>
<li>libc++.tbd</li>
<li>libxml2.tbd</li>
<li>libsqlite3.tbd
<img src="https://images.velog.io/images/yi-sang/post/b9d13c5a-15c0-466e-9d98-b70f7eeff0f6/image.png" alt=""></li>
</ul>
<p>현재 Map용 SDK 는 Automatic Reference Counting(ARC) 을 지원하지 않는다.</p>
<p>Objective-C Automatic Reference Counting 을 No,
Weak references in Manual Retain Release을 No 로 바꾸어준다</p>
<p><img src="https://images.velog.io/images/yi-sang/post/9d85f3d1-7c03-470f-a40d-81c0a94d48f0/image.png" alt=""></p>
<p>Xcode12에서 ARM기반 맥(애플실리콘)을 지원함에 따라 아이폰 시뮬레이터에 ARM용 아키텍쳐 arm64가 추가되면서 오류가 발생한다.
Excluded Architectures에서 사진과 같이 arm64를 입력해주고,
User-Defined에서 VAILD_ARCHS가 있다면 제거해준다.
<img src="https://images.velog.io/images/yi-sang/post/e274a117-1954-4e02-ad50-2cd1ac026451/image.png" alt=""></p>
<p>SDK가 Objective-C로 구성되어 있기 때문에 우리가 사용하는 Swift에서 사용하기 위해 &quot;Bridging Header&quot; 설정해야한다.</p>
<p>커맨드 + n을 눌러 header file을 생성한다.
<img src="https://images.velog.io/images/yi-sang/post/4dccc508-5e6e-4719-a19e-8f072500e573/image.png" alt=""></p>
<p>프로젝트명-Bridging-Header.h로 파일을 저장한다.</p>
<p>헤더 파일을 열고 # import &lt;DaumMap/MTMapView.h&gt;을 추가해준다.</p>
<p><img src="https://images.velog.io/images/yi-sang/post/c99f05bf-ae07-4bd1-be12-6a2f8f93a304/image.png" alt=""></p>
<p>오른쪽에 Full Path를 복사하고 아래 사진의 Objective-C Bridging Header의 값에 붙여 넣기한다.
<img src="https://images.velog.io/images/yi-sang/post/04723a13-6ee9-496f-8902-de2339b80f06/image.png" alt=""></p>
<p>이제 ViewController에 다음과 같이 코딩하고 실행한다.</p>
<pre><code>import UIKit

class ViewController: UIViewController, MTMapViewDelegate {

    var mapView: MTMapView?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        mapView = MTMapView(frame: self.view.bounds)
        if let mapView = mapView {
            mapView.delegate = self
            mapView.baseMapType = .standard
            self.view.addSubview(mapView)
        }
    }


}</code></pre><p>올바르게 동작하는 것을 볼 수 있다.
<img src="https://images.velog.io/images/yi-sang/post/852716ce-441e-4a7d-847f-783b9483f789/image.png" alt=""></p>
]]></description>
        </item>
    </channel>
</rss>