machine learning은 현존하는 기술 중에 가장 인기있는 기술입니다. 사진에 나온 사람의 얼굴 인식, 키보드의 prediction, 워치의 hand writing 인식 등에 ML이 사용되고 있습니다.



    WWDC에서는 장미를 인식하는 알고리즘을 예로 들었습니다. 먼 ML은 Traning이라는 과정을 거칩니다. 이 과정을 통해 ML 모델이 생성됩니다. 이미지에 대한 정보를 수집하고 꽃의 색과 모양에 따라 꽃을 분류하는 알고리즘을 구체화시켜 나갑니다. 개발제에게는 ML 모델이라는 정형화된 파일을 제공합니다. ML 모델은 함수로 이루어져있고 내부에는 여러 레이어와 Neural network가 이어져 있습니다. ML  모델 내부의 파싱 과정을 거친 결과가 최종적으로 개발자에게 제공합니다.



    애플은 이를 제공하기 위해 검증/ 성능/ 효율 등의 3가지 측면에서 많은 고민을 하였으며, iOS 11부터 coreML을 통한 machine learning을 제공합니다. coreML은 deep learning에 기반한 framework입니다. 크게 Vision과 NLP (Naural Language Processing) 를 제공합니다. coreML은 기기에서만 동작하기 때문에 개인정보 걱정이 없으며, 서버를 사용하지 않고 데이터를 소비하지 않습니다. 무엇보다 24/7으로 항상 이용이 가능합니다. 사용환경은 아래와 같이 애플에서 제공하는 모든 플랫폼에서 사용 가능합니다. 


Vision : 오브젝트 트래킹, 얼굴 인식

NLP (Naural Language Processing) : 언어 인식, 이름 식별

Core ML : 도메인 특화 프레임워크, 음악 태깅, 이미지 캡션, 이미지/ 텍스트/ 사전, 등을 input으로 처리

Accelerate & MPS (Metal Performance Shader) : 성능 최적화를 위한 low-level package

사용 환경 : macOS, iOS, watchOS ,tvOS에서 사용 가능




    coreML은 통합된 API로 Xcode와 결합하여 제공하며, 공공 ML 모델을 지원하여 기존 ML 모델들을 사용 가능합니다. 기존 ML 모델을 추가하면 xcode에서 자동으로 ML에 대한 정보를 읽습니다. 이름/ 라이선스/ 사이즈 등의 정보가 표시되며, 컴파일할 타겟을 지정하면 코드에서 사용 가능한 class를 생성합니다. 애플에선  coreML tool (python으로 제작된 converting tool)을 제공합니다. 이를 사용해서 기존의 deep learning 프레임워크에서 생성된 ML 모델을 coreML 모델로 컨버팅이 가능합니다.


    내부적으로 JOSN 형태의 ML 모델을 로드하여 앱 번들에 최적화 하여 해당 모델을 안착합니다. 그리고 사용 가능한 class를 생성합니다. ML 모델은 정확성을 높이고 사이즈를 줄이는 것을 목표로하여 생성되며, 이에 부합한 모델이 사용하기 적합한 ML 모델입니다.


'WWDC > 2017' 카테고리의 다른 글

[iOS] Visually Rich User Experiences  (0) 2017.06.21
[iOS] Advanced Animation with UIKit  (0) 2017.06.20
[iOS] Core ML in WWDC 2017  (0) 2017.06.20

    Xcode에는 여러가지 플러그인들이 존재한다. 플러그인은 Xcode에 부가적인 기능을 제공함으로써 사용자에게 편의를 제공한다. 이번엔 앞서 말한 플러그인들을 쉽게 찾아서 쓸 수 있도록 해주는 Packgage Manager에 관한 포스팅이다. 이름은 Alcatraz!!




Alcatraz.io : http://alcatraz.io

Alcatraz in Github : https://github.com/alcatraz/Alcatraz


Command for installing the Alcatraz

curl -fsSL https://raw.github.com/supermarin/Alcatraz/master/Scripts/install.sh | sh



    위의 URL로 Alcatraz의 기능을 파악하고, 명령어를 사용하여 쉽게 설치할 수 있다. 설치하고 Xcode를 실행하면 Window 메뉴에서 'Package Manager'라는 메뉴를 확인할 수 있다. 이를 누르면 Alcatraz에서 제공하는 플러그인 검색 및 설치를 할 수 있다. Alcatraz를 이용하여 띄운 Package Manager의 화면은 아래와 같다.


    상당히 심플한 화면으로 구성되어 있다. 플러그인뿐만 아니라 에디터의 색상 컨셉을 변경할 수 있는 'Color Theme'과 파일 등을 생성할 때 사용하는 'Template'도 설치 가능하다. Alcatraz를 이용하여 유용한 플러그인들을 설치하여 사용해보자. 아래는 유용항 Xcode 플러그인에 관한 Matt Tompson의 포스팅이다.


http://nshipster.com/xcode-plugins/

'Programming > Mac & iOS' 카테고리의 다른 글

[iOS] APNS JWT (JSON Web Token)  (0) 2016.12.19
[iOS] What's new in iOS 10  (0) 2016.06.27
[iOS] Alcatraz : Xcode 패키지 매니저  (0) 2016.05.25
[iOS] '=='과 'isEqual:'의 차이  (0) 2016.05.18
[iOS] CoreData: Concurrency & Performance  (0) 2016.05.16
[iOS] Initialization과 Literal  (0) 2016.05.16


    Watch Kit이 어제 공개되었다. Watch Kit은 Xcode 6.2에서 SDK를 제공할 예정이며 현재 (2014.11.20)는 베타 버전이다. 지금도 Xcode 6.2 베타 버전을 설한다면 시뮬레이터로 Watch App을 실행 가능하다. Watch Kit에서 제공하는 구성요소는 크게 Watch에서 구동하는 'App'과 간단한 정보만을 표시하고 터치할 때 앱을 실행시키는 'Glances', 알림을 표시하고 사용자의 동작을 유도하는 'Notification' 등 3가지이다.



Watch App & Watch Extension


    먼저 Watch App부터 설명하면 Watch App은 단순히 UI와 UI 리소스만을 포함한다. 실제로 데이터를 처리하고 요청하는 등의 비지니스 로직은 iOS App의 Extension 형태로 개발되는 구조이다. 위의 그림에서 보다시피 iOS8에서 제공되는 App Extension처럼 별도의 타겟으로 Watch Extension을 생성하여 Watch App과 iOS App이 상호 작용하는 구조이다. App Extension에 대해서 잘 모르시는 분은 위젯에 관한 글을 참고하도록 하자.


    Extension을 통한 데이터의 공유는 App Group에 등록된 ID를 사용하여 UserDefault를 사용하면 된다. 파일을 공유하기 위해선 NSFileManager의 Shared container 기능을 활용하면 되며 설명된 2가지 방식을 보면 알다시피 기존의 다른 App Extension의 데이터 공유 방식과 같음을 알 수 있다. ('containerURLForSecurityApplicationGroupIdentifier:'


    다른 Extension과 다른 것이 있다면 기존 Extension은 실행 코드를 포함하여 UI 표시 여부에 따라 UI 구현까지 됐다면 Watch Extension은 위에서 말한거와 같이 Watch App에 UI와 UI 리소스가 분리되어 있다는 것이다. Watch Kit의 UI Components는 WKInterfaceObject를 상속 받으며 아래의 그림에서 같이 크게 11가지로 구성되어 있다. UI의 로직은 WKInterfaceController를 상속받아 구현이 가능하다. 기기에 관한 정보는 WKInterfaceDevice를 사용할 수 있으며 사용 가능한 정보는 스크린 정보와 지역 설정, 이미지 캐시 등이다. iOS App에서 같이 화면 전환을 위한 Navigation과 Page Control을 제공한다. Modal interface도 사용 가능하며 왼쪽 상단에 Modal interface를 지우기 위한 라벨을 제공한다. 기본적으로 'Cancel (취소)'이라는 문장이 입력되며 임의로 변경도 가능하다.



   Watch Kit에서만 별도로 제공하는 UI 기능 중에 Context Menu가 있다. Apple Watch는 감압식 터치를 사용하여 디스플레이를 세게 누르는 것과 살짝 tap하는것을 구분이 가능하다. 세게 눌렀을 때 표시 되는 것이 Context Menu이다. Context Menu는 해당 화면에서 적절한 부가 메뉴를 표시한다. Story board를 통해 Context Menu를 구현할 수 있으나 Story board를 통해 만들 경우, 런타임에서 변경이 불가능하기 때문에 좀 더 유연한 Context Menu 구현을 위해선 WKInterFaceController의 메소드를 활용한다. 추가적으로 Watch Kit에서 제공하는 Table View는 row만 존재하며 section을 나눌 수 없는 것이 Watch Kit에서 제공하는 UI만의 특징 중 하나이다.



Glances


    다음으로 Glances가 있다. Glances는 사용자에게 즉시 중요한 정보만 간략하게 표시하기 위한 인터페이스로 스크린에 딱맞는 사이즈만을 제공한다. 데이터를 Push를 통해 수신할 수 없고 Glances가 표시될 때, 데이터를 Pull하는 방식으로 동작한다. 스크롤도 할 수 없고 사용자의 입력도 받을 수 없으며, Glances를 터치하면 오로지 앱을 실행하기만 한다. Glances를 통한 앱 진입 시의 동작을 따로 구현이 가능하다. Glances의 UI 설계를 위해 Story board에서는 Glances entry를 제공한다. Glances는 Watch App 구현을 위한 필수 요소가 아니므로, 앱 외적으로 사용자의 편의를 위한 정보 표시가 필요할 때 구현하면 된다. Glances의 예시 화면은 아래와 같다.




Notification


    Notification은 Glances에 비해 유연하며 기능이 확장되어 있다. 2가지의 interface를 제공한다. Short-Look은 사용자가 알림을 확인할 수 있는 가장 첫 화면이다. 스크롤이 불가능하며 customize 또한 불가능하다. 시스템은 오로지 App icon과 App name, notification payload에 설정된 Title 메시지만을 참고하여 Template으로 표시한다. Short-Look Notification은 아래와 같다.



    사용자가 Short-Look Notification을 확인하고자 한다면 Long-Look Notification으로 넘어가게 되며 Long-Look Notification을 정의하지 않은 경우엔 Short-Look 과 비슷하게 기본화면이 표시되지만 Title 메시지와 더불어 notification payload에 설정된 Alert 메시지를 같이 표시한다. Long-Look은 크게 3가지 부분으로 나눌 수 있다. 위에서부터 순서대로 Sash, Content Area, Bottom Area로 나뉜다. Sash는 상단에 App icon과 App name이 표시되는 부분으로 색만 개발자가 설정 가능하다. Content Area는 상세 정보가 표시되는 영역으로 개발자 임의로 구현이 가능하다. 마지막으로 Bottom Area는 Notification을 지우는 버튼과 더불어 사용자가 취할 수 있는 동작을 정의한 Action Button들이 표시된다. 화면 예시는 아래와 같다. 참고로 Remote Notification 등록은 Watch App이 아닌 Watch Extension에서 할 수 있다.




Conclusion


    현재 공개된 여건 상, Watch Kit의 기능은 상당히 제한적이다. 사용할 수 있는 기능은 iOS App에서 수집한 데이터를 Watch  Glances라는 UI를 통해 정보를 표시하거나 Notification을 통해 알림을 받고 이에 대해 어떻게 처리할지 사용자에게 묻는 정도이다. 심지어 Apple은 Apple Watch를 통한 쾌적하고 빠른 반응성을 제공하기 위해 복잡한 연산들을 iOS App에 맡기길 권장하고 있다. 밑에 Apple이 권장하는 Watch Kit을 통한 개발 가이드를 요약했다. 현재 Watch Kit에 관한 더 자세한 내용은 Apple이 공개한 Document를 통하여 확인이 가능하다.



  • Core location과 같은 사용자에 관한 권한 요청을 피해라. 만약 Watch Extension에서 처음으로 권한을 요청한다면 사용자의 아이폰에 예상치 못한 메시지를 표시할 수도 있다. 만약에 사용자의 폰이 주머니에 들어있다면 사용자는 이를 확인하지 못할 수도 있다.


  • Background 실행을 사용하지 마라. Watch extension을 오로지 사용자가 직접 Watch App을 사용하는 Foreground만을 고려했고 사용자가 조작할 때만 실행된다. 결론적으로 Background Execution을 지원하지 않는다.

     

  • Long-task를 피해라. Watch Kit은 사용자의 사용이 끝난 앱을 suspend 시킨다. Watch App은 일반적으로 아주 잠깐동안 동작하기 때문에 요청한 데이터가 도착하기도 전에 Extension이 suspend될 수 있음을 참고해라.




  • 출처 : Apple Watch Kit Programming Guide, Apple Watch Kit Framework References

    Swift

    Swift는 iOS/OS X개발을 위한 새로운 객체지향 언어이다. 

      • Fast. 앱을 만들기 위한 LLVM의 향상된 코드 분석을 통한 컴파일과 최적화를 제공한다.
      • Complete platform. Swift를 통해 모든 cocoa/cocoa touch를 사용 가능하다.
      • Safe by design. 버그, 크래쉬, 보안 취약점 등을 사전에 예방할 수 있다.
      • Modern 코드의 양을 줄이고 헤더파일을 제거 했으며 Modern 프로그래밍 언어의 특징을 수용했다.
      • Interactive. Swift를 통해 즉각적인 결과물을 시험이 가능하다.
      • Unified. C와 objective-C를 완전히 대체할 수 있는 언어이다.

    Swift 관련 포스팅



    Xcode 6 feature for Swift

      • Playground
      • Learn in a playground
      • Read-eval-print loop (REPL) in LLDB
      • Per-language documentation
      • Synthesized headers



    Testing

      • Performance measurement. XCTest를 통하여 앱의 부분부분의 성능을 측정할 수 있도록 지원한다.
      • Asynchronous code testing. XCTest가 비동기적으로 작동하는 fileIO, network 동작 등을 테스트하도록 지원한다.



    Interface Builder

      • Live rendering. 소스코드를 수정한 후, 빌드과정없이 즉시 canvas에 반영된 UI를 확인할 수 있다.(IB_DESIGNABLE) 또한 Inspector에 property를 추가하여 사용할 수 있다.(IBInspectable)
      • Storyboards for OS X. App kit의 새로운 ViewController API 및 segue 등 OS X 스토리보드를 통한 풍부한 UI를 지원한다.
      • Size Classes. Size classes로 하나의 universal 스토리보드를 통하여 모든 사이즈의 iPhone, iPad를 지원한다.
      • Custom iOS fonts. 인터페이스 빌더를 통하여 내장된 custom font 사용 가능하다.



    Debugger

      • View debugging. 디버깅 중 브레이크 포인트에 걸렸을 때, 'explodes' 버튼을 누르면 바로 그 시점에서 view들을 3D 렌더링해서 확인 가능하다. view의 순서도 시각적으로 분명하게 보여준다. view를 선택하면 보조 에디터를 통하여 관련된 소스코드를 표시해준다.
      • Enhanced queue debugging. 현재 큐에서 실행 중인 블록뿐만 아니라 최근 실행된 블록까지 볼 수 있다. 그리고 실행을 위해 큐에서 대기 중인 블록들을 확인할 수 있다.
      • Debug gauges. 디버그 게이지는 디버깅이 되는 동안 리소스의 사용량에 대한 부가 정보를 알려준다. 디버그 게이지는 사용자 경헌을 저해하거나 휴대용 맥 혹은 iOS 장비들의 배터리를 소모시키는 등의 당신이 미처 깨달치 못했던 영역에 대해 일러준다.
        • I/O gauges. 새로 2가지의 gauge가 추가됬다. 네트워크와 파일 활동을 gauge를 통해 확인 가능하다.
        • iCloud gauge. iCloud gauge를 이용하면 app외에 있는 파일 저장소인 Cloud와 Cloud kit에 관한 디버깅을 지원한다. 



    Sprite Kit

      • Graphics and game development. 새로운 sprite kit 디자이너와 디버깅을 할 때, sprite kit 변수에 대한 향상된 정보창을 제공한다.
      • Support for iOS. 



    Extension and Frameworks

      • Extension support. iOS와 Mac 앱에 대해 다른 앱들과의 기능성을 확장시켰다. Xcode는 실행시킬 때, extension을 연결한다.
      • Framework for iOS. iOS 개발자는 동적 프레임워크를 작성할 수 있다. 프레임워크는 여러 프로젝트에 걸처 뛰어난 기능들이 캡슐화된  코드와 리소스의 집합이다. 프레임워크는 extension, bundle extension에 의해 사용되어 지는 공유 로직으로서 완벽히 작동을 한다.



    iOS Simulator

      • Configurations. 새로운 iOS 시뮬레이터상에서 Configuration(이하 'config')을 설정할 수 있다. 각 앱 버전에 config를 설정하여 버전 별로 각 앱 데이터와 config 등을 설정 가능하다.



    Localization

      • XLIFF import-export. Xcode는 localization이 된 문장들을 사업 표준인 XLIFF로 패키징할 수 있다. localization 작업이 완료되면 새로운 언어를 프로젝트에 추가하기 쉬어진다.
      • Implicit .string file. Xcode는 자동적으로 당신의 소스코드를 기반으로 기본 언어에 대한 .string파일을 자동적으로 생성한다. 더이상 손으로 .string를 관리할 필요가 없다.
      • Preview in interface builder. interface builder를 통하여 디자인을 하는 동안 preview assistant를 통하여 다른 언어 버전에서 앱이 어떻게 보이는지 확인 할 수 있다. 언어의 길이에 다른 인터페이스의 변화를 확인할 수 있다.
      • Run in locale.




    Compiler

      • Profile guided optimization. Profile guided optimization(이하 'PGO')는 LLVM 최적화기와 호환되며 당신의 앱의 거의 모든 부분에 대해 프로파일링하여 성능 테스트를 한다. 당신은 성능 프로파일을 직접 만들수 있으며 이를 이용하여 앱을 최적화 하거나 최적화가 필요한 부분을 지정하는데 활용할 수 있다.
      • User-defined modules.



    Instrument

      • New user interface.
      • Profile tests.
      • Support for simulator configurations. Simulator configuration은 instrument에 의해 다루어 지며 simulator의 process에 할당하거나 동작하기 쉽다.
      • New counters instrument.
      • Swift and Extension support. Swift를 지원한다. stack trace의 Swift 심볼을 확인 가능하며 할당된 Swift 타입도 확인할 수 있다. App extension을 프로파일링하기 위한 instrument를 사용할 수 있다.



    Xcode Server

      • Triggers. Triggers는 Xcode scheme의 실행을 전, 후로 실행 스크립트 룰에 의해 당신이 복잡한 통합 시나리오를 만들수 있도록 해준다. 
      • Performance test integrations. Xcode 서버는 새로운 성능 테스트 기능들을 지원한다. 이는 팀이 지속적인 성능 테스트를 위한 맥과 장비 그룹을 공유하기 쉽게 해준다.
      • Delta trackings. 통합 과정마다 이슈는 트래킹되어진다. 누군가에 의해 발생하거나 고쳐졌을 때 확인할 수 있다.
      • Greater control. Xcode 서버의 configuration option은 개발 팀에게 봇의 실행 이상의 control을 제공한다. 통합 주기, 봇의 그루핑, iOS 시뮬레이터 config는 Xcode 봇이 이전보다 더욱 강력하게 만들어준다. 새로운 report UI를 제공한다. 



    Home Kit Accessory Simulator

      • Home kit capability. 새로운 Home kit 프레임워크는 당신의 앱이 집안의 기구들과 연결되고 조종할 수 있도록 해준다. 당신의 iOS앱과 Home kit을 사용하기 위해 Home kit 스위치를 설정할 수 있다.(Xcode > Open Developer Tool > Home kit Accessory Simulator)


    'Programming > Tool' 카테고리의 다른 글

    [SVN X] Mac에서 SVN X를 이용한 SVN 사용하기  (0) 2015.12.22
    [Xcode] New Features in Xcode 6  (0) 2014.08.28
    [VI/VIM] VI와 cscope의 연동  (0) 2013.06.18
    [cscope] cscope 사용법  (0) 2013.06.18
    [ctags] ctags 사용법  (0) 2013.06.18
    [VI/VIM] 개발 환경 설정  (0) 2013.06.18

     MAC Mountain Lion으로 업데이트하고 나서 SVN의 명령어가 bin안에 있지 않고 x code app안으로 들어가면서 기존의 SVN X를 사용하던 유저는 SVN의 Path를 지정해 달라는 경고창을 볼 것이다. 아무리 SVN을 찾아봐도 명령어가 안 보일 것이다. SVN의 명령어 Path는 밑에와 같다.


    SVN bin Path : /Applications/Xcode.app/Contents/Developer/usr/bin/

    + Recent posts