-
Swift MVVM(작성중)
스탠포드 대학 CS193p 강의 중 MVVM 관련 내용을 번역하며 정리해봄 Model-View-ViewModel 코드를 구성하는 아키텍쳐의 디자인 패러다임의 하나이다. “반응형” 유저인터페이스 개념과 함께 작동하며, SwiftUI를 학습하기 전에 선행되어야 하는 개념이다. UIKit을 사용하는 구식 스타일 iOS의 MVC와는 다르다. MVVM은 모델과 뷰를 분리하려고 한다는 점에서 MVC와 비슷한 면이 있다. 모델과 뷰를 먼저 살펴본 후 MVVM이 이 두 요소를 어떻게 연결하는지 알아보도록 하자. Model 과 View Model 모델은 UI 독립적이다. 모델은 SwiftUI를 사용하지 않는다. (UIKit도) 모델은 데이터와 로직을 캡슐화 한다....
-
qtfaststart in Swift
mp4 파일중 스트리밍이 지원되지 않는 파일이 존재하였고, 이를 최적화 시켜주는 C라이브러리를 Swift로 컨버젼했음 Mp4 atoms mp4 파일 중 스트리밍이 되지 않는 파일들이 존재하는데, 이는 mp4 파일을 구성하는 요소인 atom 배치에 따른 것이었다. 데이터를 담고있는 mdat atom과 데이터에 대한 정보를 담고 있는 moov atom의 순서에 따라 스트리밍 가능 / 불가능 여부가 결정되는데, 스트리밍이 가능한 mp4는 moov atom이 mdat atom보다 앞에 배치되어 있었고, 스트리밍이 불가한 mp4는 moov atom이 파일의 가장 뒷부분에 붙어있었다. 이를 수정하여 mp4를 스트리밍해줄 수...
-
Arrange Multi-line UILabel in UIStackView with SnapKit
Multi Line UILabel을 UIStackView 안에서 정렬하기 위한 방법 정리 방법 UILabel을 UIView안에 넣고, UIView를 UIStackView에 넣으면 된다. 코드 class ExampleView: UIView { private lazy var titleLabel = UILabel() private lazy var contentLabel: UILabel = { let label = UILabel() label.numerOfLines = 0 return label }() private lazy var contentView: UIView = { let view = UIView() view.addSubview(self.contentLabel) return view }() private lazy var spacer: UIView = { let view = UIView() view.setContentHuggingPriority(.defaultLow, for: .horizontal) return...
-
Swift Fullscreen Share Extension 만들기
기존의 iOS Share Extension은 ShareViewController라는 작은 창을 이용하게 되어있다. 이 Share Extension을 요구사항에 맞게 풀스크린으로 제작하는 방법을 공유해본다. 작업환경 Xcode 9.4.1 Swift 4.1 iOS 11.3, 11.4 EntryViewController 작성 우선 공유 익스텐션에 접근시 가장 먼저 띄워줄 EntryViewController를 작성해준다. 기존에는 ShareViewController를 MainInterface.storyboard를 통해 팝업시켜주도록 되어있는데, 추후에 Info.plist를 수정하여 EntryViewController를 최초로 띄워주도록 변경하게 된다. import UIKit @objc(EntryViewController) class EntryViewController : UIViewController { override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) let shareVC = ShareViewController() shareVC.sharingData = self.extensionContext let nav...
-
[Project] 암호화 시세조회 앱 (iOS)
Swift를 이용해 암호화폐 실시간 시세와 한국 프리미엄을 조회할 수 있는 앱을 개발했습니다. Language : Swift Library : Alamofire / SwiftyJSON / SnapKit 기타 : Xcode, git 소스코드 스위프트와 Alamofire, SwiftyJSON 라이브러리를 이용해 암호화폐 거래소인 UpBit와 Bittrex의 실시간 시세 정보를 알려주는 애플리케이션을 개발하였습니다. 또한, Today Extension을 사용해 위젯을 통해 시세를 조회할 수 있는 기능을 더했습니다.
-
[Project] Cryptocurrency Price Ticker App (iOS)
I developed an app that display real time price ticker information of cryptocurrencies and Korea premiums. Language : Swift Library : Alamofire / SwiftyJSON / SnapKit ETC : Xcode, git Source Code I developed an application that shows the real-time cryptocurrencies price ticker information of UpBit and Bittrex using Swift, Alamofire and SwiftyJSON Libraries. Also, I added function that display ticker information in iOS widget using Today Extension.
-
Core ML 과 Vision: iOS11의 머신러닝 튜토리얼
출처 : Core ML and Vision: Machine Learning in iOS 11 Tutorial iOS11에서 새로이 업데이트 되는 머신러닝 기술인 Core ML과 Vision을 활용하는 적절한 튜토리얼이 있어 번역하며 공부해본다. 이 튜토리얼은 Xcode 9 Beta 버전 그리고 Swift4 와 iOS11 에서 정상작동한다. 머신 러닝의 인기가 대단하다. 많은 사람들이 그것에 대해 들어보았겠지만, 정확히 무엇을 이야기하는지 아는 사람은 그리 많지 않다. 이 튜토리얼은 Core ML과 Vision이라는 iOS11에서 처음 수개 된 프레임워크에 대해서 설명하고 있다. 특히 이미지의 장면을 분석하기 위해 Places205-GoogLeNet이라는...
-
Swift 기초 - 특징, 변수, 상수, 타입
출처 : SWIFTER 블로그 Swift에 대한 기본 개념을 정리하며 공부해본다. 스위프트의 특징 변수, 상수, 타입 변수와 상수 Bool 타입 Numeric 타입 String 타입 Array<Element> 타입 Dictionary<Key, Value> 타입 Optional<Wrapped> 타입 Any 타입 튜플 타입 타입 캐스팅 스위프트의 특징 Swift는 정적인 프로그래밍 언어이다. 정적 프로그래밍 언어란, 컴파일 등 프로그래밍 언어가 실행되기 이전 단계에서 변수/상수의 타입을 결정하는 언어를 의미한다. 정적인 언어는 동적 언어와 비교해 실행이 되기 전에 프로그램의 타당성이 검증되기 때문에 안정성이 높으며, 대규모 프로그램 개발에 적합하다는...
-
JWT(Json Web Token)을 이용한 모바일 인증
토큰 방식의 모바일 유저 인증에 대해 잘 정리되어 있는 글이 있어 번역하며 정리해본다. 출처: The Ultimate Guide to Mobile API Security 모바일 API 보안의 문제점 모바일 API보안에 OAuth2 도입하기 액세스 토큰 작동방식 모바일 API 보안의 문제점 가장 기초적인 API 보안의 형태는 HTTP Basic Authentication(HTTP 기본 인증)이다. 이 방식은 매우 간결하게 작동하기 때문에 API 서버를 만드는 사람이나 API를 활용할 개발자 모두에게 편리함을 제공해준다. 기본적인 작동방식은 다음과 같다. 개발자에게 API키(보통 ID와 PW)가 주어진다. 이 API키는 다음과 같은...
-
IGListKit 셀 선택시 배경 변경하기
IGListKit을 이용해 SideMenu를 구성하는 과정 중, 메뉴에서 해당하는 셀을 선택하면 아래의 이미지와 같이 활성화 된 셀의 배경색이 변경되게 구현하고자 한다. 처음에 기본적 형태만 구현한 상태에서는 탭을 해도 색상이 변하지 않고 해당 셀에 지정된 action만 행할 뿐이었다. 구현하기 원하는 기능은 탭을 하면 선택된 셀의 배경색이 변하고, 선택되지 않은 셀의 배경들은 투명 혹은 배경과 같은 색깔을 띄는 것이었다. IGListKit의 예제를 보고 응용해보면, 한 섹션의 색은 잘 변하지만, 다른 섹션의 셀 색깔은 개별 섹션컨트롤러에서 변경하는 것이 불가능했다. 결국...
-
IGListKit 튜토리얼
출처: IGListKit Tutorial: Better UICollectionViews iOS의 UICollectionView를 개선한 IGListKit의 튜토리얼을 번역하며 따라해본다. 시작하기 IGListKit 소개 UICollectionView를 IGListKit으로 대체하기 일지(Journal) Loader 추가하기 컬렌션 뷰 추가하기 IGListAdapter와 데이터소스 첫 Section Controller 만들기 메세지 기능 추가하기 화성의 날씨 업데이트 수행하기 마치며 대부분의 어플리케이션의 시작은 비슷비슷하다. 몇개의 스크린, 몇개의 버튼 그리고 한두개의 리스트. 하지만 시간이 지나고 어플리케이션의 규모가 커지면 기능들이 넘쳐나게된다(feature-creep). 당신의 깔끔했던 데이터 소스들은 데드라인과 PM의 압박에 시달리며 먼지가 되어간다. 잠시후, 당신은 거대한 뷰 컨트롤러(MVC, Massive View Controller)를...
-
iOS Notification 만들기
iOS Notification 만들기 본 포스팅은 OS X, Xcode 8, ios 10, Swift3.0 기반으로 작성되었습니다. APNS: Apple Push Notification Service APNS를 이용해 ios 어플리케이션에 notification을 전송하는 방법을 기록해봅니다. 애플 개발자 아이디가 있으며, 계정에 테스트를 진행할 기기가 등록되어 있다는 조건하에 진행합니다. 작업은 아래와 같은 순서로 진행됩니다. iOS Notification 만들기 개발자 계정 세팅 인증서 요청 생성 APP ID 생성 APNS 인증서 발급 서버용 APNS 인증서 발급 프로비저닝 생성 iOS Application 작성 프로젝트 설정 AppDelegate.swift 수정 구동 테스트 APNS...