본문 바로가기

전체 글

(67)
m1맥(apple silicon) 개발 환경 준비하기 Apple Silicon 인 m1이 장착된 맥미니를 구입해서 개발 환경을 세팅하고 있다. 이를 기록해놓는다. Xcode Native 로 바로 설치 가능하다 Homebrew 설치하기 arm(apple silicon)용과 x86용으로 2개 설치한다. 다음은 arm 용으로 Homebrew를 설치하는 명령이다. /opt/homebrew에 설치된다. /bin/bash \-c "$(curl \-fsSL [https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh](https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh))"다음은 x86 용으로 Homebrew 설치하는 명령이다. /usr/lo..
[iOS] 다크모드 비활성화 유지보수 중인 앱에 도저히 다크 모드를 지원할 시간과 에너지(+ 예산)가 없어서 다크 모드를 아예 비활성화하기로 한다. Info.plist 에 다음과 같이 User Interface Style 항목을 추가하고 Light를 입력하면 다크 모드가 비활성화된다.
[iOS] Xcode11에서 iOS13 이전 버전 지원하기 Xcode11에서 프로젝트를 생성하면 iOS13 이후에서 사용할 수 있는 타입을 사용하기 때문에 iOS 13 이전 버전에서도 동작하는 앱을 작성하려면 약간의 조작을 해야 한다. Xcode11에서 프로젝트를 생성하는 과정에서 스토리보드와 SwiftUI 선택할 수 있다. SwiftUI는 iOS 13 이후부터 사용할 수 있으므로 스토리보드를 선택한다. 프로젝트를 생성하고 Deployment info에서 동작 버전을 설정할 수 있다. 최소 동작 버전을 iOS13 이전으로 낮추면 다음과 같은 에러가 발생한다. UIScene, UISceneDelegate 등이 iOS13에 추가된 타입이다 보니 에러가 발생한다. @available 를 사용하라는 권고?가 있지만 다 지워버리도록 하자! 프로젝트 내비게이터에서 Scen..
[iOS] 웹뷰(WKWebView)에서 네이티브로 메세지 전달. 에러 수정 기록 웹킷의 웹뷰에서 window.webkit.messageHandlers를 이용하면 네이티브 영역(Swift 코드 부분)으로 메세지를 전달할 수 있다. WKUserContentController 를 이용해서 메세지의 이름과 메세지가 전달될 때의 처리할 대상(self)를 등록해야 한다. 다음과 같이 작성하면 될 줄 알았다..... let contentController = WKUserContentController() contentController.add(self, name: "hello") webView.configuration.userContentController = contentController 웹뷰에서 webkit.messageHandlers를 통해서 보내는 메세지는 다음과 같이 작성한 메소드에 ..
macOS 카탈리나 - Xcode11 - ReactNative SwiftUI도 해볼 겸 카탈리나(beta 9)를 설치했다. IP 주소 모바히까지는 와아파이 아이콘을 옵션 + 클릭하면 IP 주소가 바로 나타났는데, 카탈리나를 설치하니 더이상 안나온다. 네트워크 환경설정에 가면 나오기는 하는데, 한 번 더 클릭해서 들어가야 하므로 조금(많이) 불편하다. CocoaPods brew를 이용해서 cocoapods를 설치해서 사용했다. 카탈리나 설치 후 cocoapods 설치는 성공했는데 실행하면 다음과 같은 에러가 발생한다. /usr/local/bin/pod: /usr/local/Cellar/cocoapods/1.7.5/libexec/bin/pod: /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby: b..
[iOS] Swift 1.2 swift로 진행하던 프로젝트를 날 잡고 Swift 1.2로 변경했다. 수정한 내용을 정리해본다. 전역 함수 변경 countElement 함수는 count로 바뀌었다. Objective-C 타입 호환 Swift 1.1 에서는 NSString과 String 타입 사이에 자동으로 타입 변환이 가능(bridging)했었다. var str1 : NSString = "NSString String Val" var str2 : String = str1 Swift 1.2 부터는 NSString과 String 사이에 암시적 타입 변환이 지원되지 않는다. 다음과 같이 as를 이용해서 타입 변환 코드를 작성해야 한다. var str1 : NSString = "NSString String Val" var str2 : Stri..
[iOS] 노티 옵저버 등록과 해제 노티에 등록된 감시 객체가 삭제되지 않는 문제가 발생! 수 시간의 디버깅 끝에 원인을 찾았다. 노티 센터에 등록한 옵저버와 옵저버를 삭제하는 코드에서의 옵저버 객체가 달랐던 것이다. 감시 객체를 삭제하는 코드는 다음과 같이 작성했다. 즉 self - 뷰 컨트롤러가 옵저버라고 생각하고 짰는데.. 옵저버를 블록 객체로 등록했었다. NSNotificationCenter.defaultCenter().removeObserver(self) 이 기회에 좀 정리해본다. == 객체를 옵저버로 사용 노티 발생 여부를 감시하는 옵저버(Observer)를 등록하는 방법은 다음과 같다. 이 메소드에서 노티 센터에 등록되는 옵저버는 observer 파라미터의 객체다. // 옵저버 객체 : observerfunc addObserv..
[Node.js] 서버 IP 얻기 서버 IP 주소 얻기function getIPAddress() { var interfaces = require('os').networkInterfaces(); for (var devName in interfaces) { var iface = interfaces[devName]; for (var i = 0; i < iface.length; i++) { var alias = iface[i]; if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) return alias.address; } } return '0.0.0.0'; } from http://stackoverflow.com/questions/3653065/get-..