在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → macOS应用开发基础教程实例源码

macOS应用开发基础教程实例源码

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:19.72M
  • 下载次数:5
  • 浏览次数:97
  • 发布时间:2020-09-19
  • 实例类别:一般编程问题
  • 发 布 人:robot666
  • 文件格式:.zip
  • 所需积分:2
 

实例介绍

【实例简介】
macOS应用开发基础教程 配套的实例源码。
【实例截图】
【核心代码】
macOSwift4.0.3-Ebook-Demo
├── macOSwift4.0.3-Ebook-Demo
│   ├── Chapter 01 Preparation
│   │   └── HelloWorld
│   │   ├── HelloWorld
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── MainMenu.xib
│   │   │   ├── HelloWorld.entitlements
│   │   │   └── Info.plist
│   │   └── HelloWorld.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 02 Window
│   │   ├── Window
│   │   │   ├── Window
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── AppIcon.png
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── MainMenu.xib
│   │   │   │   └── Info.plist
│   │   │   └── Window.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── Window.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── WindowCenter
│   │   ├── WindowCenter
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   ├── ViewController.swift
│   │   │   └── WindowController.swift
│   │   └── WindowCenter.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   ├── WindowCenter.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 03 View&ScrollView
│   │   ├── NSEffectView
│   │   │   └── WindowLoginEffect
│   │   │   ├── WindowLogin
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   ├── AppIcon.appiconset
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   ├── ic_close.imageset
│   │   │   │   │   │   ├── Contents.json
│   │   │   │   │   │   └── ic_close@2x.png
│   │   │   │   │   └── ic_face.imageset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   └── ic_face@2x.png
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Controllers
│   │   │   │   │   ├── LoginViewController.swift
│   │   │   │   │   ├── LoginWindowController.swift
│   │   │   │   │   └── MainWindowController.swift
│   │   │   │   ├── Info.plist
│   │   │   │   ├── WindowBorderless.swift
│   │   │   │   └── WindowLogin.entitlements
│   │   │   └── WindowLogin.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   └── zhaojw.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── ResponderChain
│   │   │   ├── ResponderChain
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── MainMenu.xib
│   │   │   │   ├── FXButton.swift
│   │   │   │   ├── FXView.swift
│   │   │   │   ├── FXWindow.swift
│   │   │   │   └── Info.plist
│   │   │   └── ResponderChain.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── ResponderChain.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── ScrollView
│   │   │   ├── ScrollView
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── MainMenu.xib
│   │   │   │   ├── CustomScrollView.swift
│   │   │   │   ├── DisableVerticalScrollView.swift
│   │   │   │   ├── Info.plist
│   │   │   │   ├── NoScrollerScrollView.swift
│   │   │   │   └── screen.png
│   │   │   └── ScrollView.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── ScrollView.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── View
│   │   ├── View
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── MainMenu.xib
│   │   │   ├── CustomView.swift
│   │   │   └── Info.plist
│   │   └── View.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   ├── View.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 04 Controlls
│   │   ├── 4.10 NSSegmentedControl
│   │   │   ├── NSSegmentedControl
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   ├── NSSegmentedControlSize
│   │   │   │   ├── NSSegmentedControlSize
│   │   │   │   │   ├── AppDelegate.swift
│   │   │   │   │   ├── Assets.xcassets
│   │   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── Base.lproj
│   │   │   │   │   │   └── Main.storyboard
│   │   │   │   │   ├── Info.plist
│   │   │   │   │   └── ViewController.swift
│   │   │   │   └── NSSegmentedControlSize.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── xcschemes
│   │   │   │   │   ├── NSSegmentedControlSize.xcscheme
│   │   │   │   │   └── xcschememanagement.plist
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── NSSegmentedControl.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSSegmentedControl.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── 4.11 NSComboBox
│   │   │   ├── NSComboBox
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── NSComboBox.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSComboBox.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── 4.12 NSPopUpButton
│   │   │   ├── NSPopUpButton
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── NSPopUpButton.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSPopUpButton.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   ├── NSPopUpButton.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   ├── 4.13 NSSlider
│   │   │   ├── NSSlider
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── NSSlider.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSSlider.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── 4.14 NSDatePicker
│   │   │   ├── NSDatePicker
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── NSDatePicker.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSDatePicker.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── 4.15 NSStepper
│   │   │   ├── NSStepper
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── NSStepper.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSStepper.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── 4.16 NSProgressIndicator
│   │   │   ├── NSProgressIndicator
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── NSProgressIndicator.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSProgressIndicator.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── 4.17 NSImageView
│   │   │   ├── NSImageView
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── earth.png
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── NSImageView.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSImageView.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── 4.18 NSBox
│   │   │   ├── NSBox
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── NSBox.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSBox.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── 4.19 NSSplitView
│   │   │   ├── NSSplitView
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   ├── SplitView.swift
│   │   │   │   └── ViewController.swift
│   │   │   └── NSSplitView.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSSplitView.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   ├── NSSplitView.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   ├── 4.20 NSCollectionView
│   │   │   ├── NSCollectionView
│   │   │   │   ├── NSCollectionView
│   │   │   │   │   ├── AppDelegate.swift
│   │   │   │   │   ├── Assets.xcassets
│   │   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── Base.lproj
│   │   │   │   │   │   └── Main.storyboard
│   │   │   │   │   ├── Info.plist
│   │   │   │   │   └── ViewController.swift
│   │   │   │   └── NSCollectionView.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   ├── xcdebugger
│   │   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   │   └── xcschemes
│   │   │   │   │   ├── NSCollectionView.xcscheme
│   │   │   │   │   └── xcschememanagement.plist
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   ├── NSCollectionViewCode
│   │   │   │   ├── NSCollectionViewCode
│   │   │   │   │   ├── AppDelegate.swift
│   │   │   │   │   ├── Assets.xcassets
│   │   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── Base.lproj
│   │   │   │   │   │   └── Main.storyboard
│   │   │   │   │   ├── CollectionViewItem.swift
│   │   │   │   │   ├── CollectionViewItem.xib
│   │   │   │   │   ├── Info.plist
│   │   │   │   │   └── ViewController.swift
│   │   │   │   └── NSCollectionViewCode.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   ├── xcdebugger
│   │   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   │   └── xcschemes
│   │   │   │   │   ├── NSCollectionViewCode.xcscheme
│   │   │   │   │   └── xcschememanagement.plist
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   ├── NSCollectionViewDataSource
│   │   │   │   ├── NSCollectionViewDataSource
│   │   │   │   │   ├── AppDelegate.swift
│   │   │   │   │   ├── Assets.xcassets
│   │   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── Base.lproj
│   │   │   │   │   │   └── Main.storyboard
│   │   │   │   │   ├── CollectionItemView.swift
│   │   │   │   │   ├── CollectionViewItem.swift
│   │   │   │   │   ├── CollectionViewItem.xib
│   │   │   │   │   ├── Info.plist
│   │   │   │   │   └── ViewController.swift
│   │   │   │   └── NSCollectionViewDataSource.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   ├── xcdebugger
│   │   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   │   └── xcschemes
│   │   │   │   │   ├── NSCollectionViewDataSource.xcscheme
│   │   │   │   │   └── xcschememanagement.plist
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── NSCollectionViewHeadFoot
│   │   │   ├── NSCollectionViewHeadFoot
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── MainMenu.xib
│   │   │   │   ├── CollectionViewItem.swift
│   │   │   │   ├── CollectionViewItem.xib
│   │   │   │   ├── FooterView.swift
│   │   │   │   ├── FooterView.xib
│   │   │   │   ├── HeaderView.swift
│   │   │   │   ├── HeaderView.xib
│   │   │   │   ├── Info.plist
│   │   │   │   └── NSCollectionViewHeadFoot.entitlements
│   │   │   └── NSCollectionViewHeadFoot.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   └── zhaojw.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── 4.21 NSTabView
│   │   │   ├── NSTabLessView
│   │   │   │   ├── NSTabLessView
│   │   │   │   │   ├── AppDelegate.swift
│   │   │   │   │   ├── Assets.xcassets
│   │   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── Base.lproj
│   │   │   │   │   │   └── MainMenu.xib
│   │   │   │   │   ├── Info.plist
│   │   │   │   │   └── NSTabLessView.entitlements
│   │   │   │   └── NSTabLessView.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── NSTabView
│   │   │   ├── NSTabView
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── NSTabView.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSTabView.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── 4.22 NSPopover
│   │   │   ├── NSPopover
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── NSPopover.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSPopover.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── 4.2 ResponderChain
│   │   │   ├── ResponderChain
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── MainMenu.xib
│   │   │   │   ├── FXButton.swift
│   │   │   │   ├── FXView.swift
│   │   │   │   ├── FXWindow.swift
│   │   │   │   └── Info.plist
│   │   │   └── ResponderChain.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── ResponderChain.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── 4.3 NSTextField
│   │   │   ├── NSTextField
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── MainMenu.xib
│   │   │   │   └── Info.plist
│   │   │   └── NSTextField.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSTextField.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── 4.4 NSTextView
│   │   │   ├── NSTextView
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── MainMenu.xib
│   │   │   │   └── Info.plist
│   │   │   └── NSTextView.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSTextView.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── 4.5 NSSearchField
│   │   │   ├── NSSearchField
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── MainMenu.xib
│   │   │   │   └── Info.plist
│   │   │   └── NSSearchField.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSSearchField.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   ├── NSSearchField.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   ├── 4.6 Label
│   │   │   ├── Label
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── MainMenu.xib
│   │   │   │   └── Info.plist
│   │   │   └── Label.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── Label.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── 4.7 NSButton
│   │   │   ├── ImageButton
│   │   │   │   ├── ImageButton
│   │   │   │   │   ├── AppDelegate.swift
│   │   │   │   │   ├── Assets.xcassets
│   │   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── Base.lproj
│   │   │   │   │   │   └── Main.storyboard
│   │   │   │   │   ├── Info.plist
│   │   │   │   │   └── ViewController.swift
│   │   │   │   └── ImageButton.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── xcschemes
│   │   │   │   │   ├── ImageButton.xcscheme
│   │   │   │   │   └── xcschememanagement.plist
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   ├── NSButton
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── MainMenu.xib
│   │   │   │   └── Info.plist
│   │   │   └── NSButton.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSButton.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── 4.8 CheckBox
│   │   │   ├── CheckBox
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── MainMenu.xib
│   │   │   │   └── Info.plist
│   │   │   └── CheckBox.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── CheckBox.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── 4.9 Radio
│   │   ├── Radio
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── MainMenu.xib
│   │   │   └── Info.plist
│   │   └── Radio.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   ├── Radio.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 05 Alert&Panel
│   │   ├── NSAlert
│   │   │   ├── NSAlert
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── NSAlert.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSAlert.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── NSOpenPanel
│   │   │   ├── NSOpenPanel
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── NSOpenPanel.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSOpenPanel.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── NSPanel
│   │   │   ├── NSPanel
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── MainMenu.xib
│   │   │   │   └── Info.plist
│   │   │   └── NSPanel.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSPanel.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── SingleXibPanel
│   │   ├── SingleXibPanel
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   ├── MyPanel.swift
│   │   │   ├── MyPanel.xib
│   │   │   └── ViewController.swift
│   │   └── SingleXibPanel.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   └── xcschemes
│   │   │   ├── SingleXibPanel.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   ├── xcdebugger
│   │   │   └── Breakpoints_v2.xcbkptlist
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 06 ToolBar&Menu
│   │   ├── NSMenu
│   │   │   ├── NSMenu
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── NSMenu.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSMenu.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── NSStatusBar
│   │   │   ├── NSStatusBar
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── AppViewController.swift
│   │   │   │   ├── AppViewController.xib
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── blue@2x.png
│   │   │   │   ├── Info.plist
│   │   │   │   ├── Stock1.png
│   │   │   │   └── ViewController.swift
│   │   │   └── NSStatusBar.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSStatusBar.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── NSToolbar
│   │   ├── NSToolbar
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── FontSetting.png
│   │   │   ├── Info.plist
│   │   │   ├── Save.png
│   │   │   ├── ViewController.swift
│   │   │   └── WindowController.swift
│   │   └── NSToolbar.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   ├── NSToolbar.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 07 TableView&TreeView
│   │   ├── NSOutlineView
│   │   │   ├── NSOutlineView
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   ├── AppIcon.appiconset
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── Minus.imageset
│   │   │   │   │   │   ├── Contents.json
│   │   │   │   │   │   └── 涓嬫媺-鏀?png
│   │   │   │   │   └── Plus.imageset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   └── 鍙虫媺-鏀?png
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   ├── OutlineView.swift
│   │   │   │   ├── TreeNodeModel.swift
│   │   │   │   └── ViewController.swift
│   │   │   └── NSOutlineView.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSOutlineView.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── NSTableView
│   │   ├── CustomTableView
│   │   │   ├── CustomTableView
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── CustomTableRowView.swift
│   │   │   │   ├── CustomTableView-Bridging-Header.h
│   │   │   │   ├── CustomTableView.swift
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── CustomTableView.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── CustomTableView.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── NSTableView
│   │   │   ├── NSTableView
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── NSTableViewCellBased.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSTableView.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── NSTableViewBinding
│   │   │   ├── NSTableViewBinding
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── NSTableViewBinding.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   └── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   │   └── xcschemes
│   │   │   ├── NSTableViewBinding.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   ├── NSTableViewCreatedByCode
│   │   │   ├── NSTableViewCreatedByCode
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── NSTableViewCreatedByCode.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSTableViewCreatedByCode.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── NSTableViewCustomBackgroud
│   │   │   ├── NSTableViewCustomBackgroud
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── CustomTableView.swift
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── NSTableViewCustomBackgroud.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   └── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   │   └── xcschemes
│   │   │   ├── NSTableViewCustomBackgroud.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   ├── NSTableViewDragDrop
│   │   │   ├── NSTableViewDragDrop
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── NSTableViewDragDrop.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   └── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   ├── NSTableViewDragDrop.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── NSTableViewViewBased
│   │   ├── NSTableViewViewBased
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   ├── MyTableView.swift
│   │   │   └── ViewController.swift
│   │   └── NSTableViewViewBased.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   └── xcschemes
│   │   │   ├── NSTableViewViewBased.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 08 AutoLayout
│   │   ├── AutoLayout
│   │   │   ├── AutoLayout
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── AutolayoutSolution1.swift
│   │   │   │   ├── AutolayoutSolution1.xib
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── MainMenu.xib
│   │   │   │   └── Info.plist
│   │   │   └── AutoLayout.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── AutoLayout.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── AutoLayoutDemo
│   │   │   ├── AutoLayoutDemo
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── AutoLayoutX.swift
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   ├── LabelTextFieldViewController.swift
│   │   │   │   ├── LabelTextFieldViewController.xib
│   │   │   │   ├── SimpleViewController.swift
│   │   │   │   ├── SimpleViewController.xib
│   │   │   │   ├── ThreeEqualWidthButtonsViewController.swift
│   │   │   │   ├── ThreeEqualWidthButtonsViewController.xib
│   │   │   │   ├── TwoEqualWidthButtonsViewController.swift
│   │   │   │   ├── TwoEqualWidthButtonsViewController.xib
│   │   │   │   └── ViewController.swift
│   │   │   └── AutoLayoutDemo.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── AutoLayoutDemo.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── AutolayoutManySolution
│   │   │   ├── AutolayoutManySolution
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── AutolayoutSolution1.swift
│   │   │   │   ├── AutolayoutSolution1.xib
│   │   │   │   ├── AutolayoutSolution2.swift
│   │   │   │   ├── AutolayoutSolution2.xib
│   │   │   │   ├── AutolayoutSolution3.swift
│   │   │   │   ├── AutolayoutSolution3.xib
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── MainMenu.xib
│   │   │   │   └── Info.plist
│   │   │   └── AutolayoutManySolution.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   └── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   │   └── xcschemes
│   │   │   ├── AutolayoutManySolution.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   ├── NSScrollViewAutolayout
│   │   │   ├── NSScrollViewAutolayout
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── AppIcon1024.png
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── MainMenu.xib
│   │   │   │   └── Info.plist
│   │   │   └── NSScrollViewAutolayout.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   └── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   │   └── xcschemes
│   │   │   ├── NSScrollViewAutolayout.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── UseAutolayoutByCode
│   │   ├── UseAutolayoutByCode
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   └── ViewController.swift
│   │   └── UseAutolayoutByCode.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   │   └── Breakpoints_v2.xcbkptlist
│   │   └── xcschemes
│   │   ├── UseAutolayoutByCode.xcscheme
│   │   └── xcschememanagement.plist
│   ├── Chapter 09 NSWindowController
│   │   ├── NSWindowArchitecture
│   │   │   ├── NSWindowArchitecture
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── AppMainWindowController.swift
│   │   │   │   ├── AppMainWindowController.xib
│   │   │   │   ├── AppViewController.swift
│   │   │   │   ├── AppViewController.xib
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── MainMenu.xib
│   │   │   │   └── Info.plist
│   │   │   └── NSWindowArchitecture.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSWindowArchitecture.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── NSWindowController
│   │   │   ├── NSWindowController
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   ├── MyWindow.swift
│   │   │   │   └── ViewController.swift
│   │   │   └── NSWindowController.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSWindowController.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── NSWindowControllerWithXib
│   │   │   ├── NSWindowControllerWithXib
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── MainMenu.xib
│   │   │   │   ├── Info.plist
│   │   │   │   └── MyWindow.swift
│   │   │   └── NSWindowControllerWithXib.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSWindowControllerWithXib.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── WindowSwitch
│   │   ├── WindowSwitch
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   └── ViewController.swift
│   │   └── WindowSwitch.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   └── xcschemes
│   │   │   ├── WindowSwitch.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 10 NSViewController
│   │   ├── 10.1 NSViewController
│   │   │   ├── 10.1.5 ChangeView
│   │   │   │   ├── ChangeView
│   │   │   │   │   ├── AppDelegate.swift
│   │   │   │   │   ├── Assets.xcassets
│   │   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── Base.lproj
│   │   │   │   │   │   └── Main.storyboard
│   │   │   │   │   ├── Info.plist
│   │   │   │   │   └── ViewController.swift
│   │   │   │   └── ChangeView.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   ├── xcdebugger
│   │   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   │   └── xcschemes
│   │   │   │   │   ├── ChangeView.xcscheme
│   │   │   │   │   └── xcschememanagement.plist
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   ├── 10.1.6 NSViewControllerTransition
│   │   │   │   ├── NSViewControllerTransition
│   │   │   │   │   ├── AppDelegate.swift
│   │   │   │   │   ├── Assets.xcassets
│   │   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── Base.lproj
│   │   │   │   │   │   └── Main.storyboard
│   │   │   │   │   ├── CustomSegue.swift
│   │   │   │   │   ├── Info.plist
│   │   │   │   │   ├── PresentCustomAnimator.swift
│   │   │   │   │   ├── PresentViewController.swift
│   │   │   │   │   └── ViewController.swift
│   │   │   │   └── NSViewControllerTransition.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   ├── xcdebugger
│   │   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   │   └── xcschemes
│   │   │   │   │   ├── NSViewControllerTransition.xcscheme
│   │   │   │   │   └── xcschememanagement.plist
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSViewControllerTransition.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   ├── CreateViewController
│   │   │   │   ├── CreateViewController
│   │   │   │   │   ├── AppDelegate.swift
│   │   │   │   │   ├── Assets.xcassets
│   │   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── Base.lproj
│   │   │   │   │   │   └── Main.storyboard
│   │   │   │   │   ├── BasicXibViewController.swift
│   │   │   │   │   ├── BasicXibViewController.xib
│   │   │   │   │   ├── Info.plist
│   │   │   │   │   ├── LoadViewController.swift
│   │   │   │   │   ├── Storyboard.storyboard
│   │   │   │   │   ├── Test2ViewController.swift
│   │   │   │   │   ├── TestViewController.swift
│   │   │   │   │   ├── TestViewController.xib
│   │   │   │   │   ├── ViewController.swift
│   │   │   │   │   └── WindowController.swift
│   │   │   │   └── CreateViewController.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   ├── xcdebugger
│   │   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   │   └── xcschemes
│   │   │   │   │   ├── CreateViewController.xcscheme
│   │   │   │   │   └── xcschememanagement.plist
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   ├── NSViewController
│   │   │   │   ├── NSViewController
│   │   │   │   │   ├── AppDelegate.swift
│   │   │   │   │   ├── Assets.xcassets
│   │   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── Base.lproj
│   │   │   │   │   │   └── Main.storyboard
│   │   │   │   │   ├── CustomView1.swift
│   │   │   │   │   ├── CustomView.swift
│   │   │   │   │   ├── Info.plist
│   │   │   │   │   ├── ScrollView1.swift
│   │   │   │   │   ├── ScrollView.swift
│   │   │   │   │   └── ViewController.swift
│   │   │   │   └── NSViewController.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   ├── xcdebugger
│   │   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   │   └── xcschemes
│   │   │   │   │   ├── NSViewController.xcscheme
│   │   │   │   │   └── xcschememanagement.plist
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── ViewController
│   │   │   ├── ViewController
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Button.swift
│   │   │   │   ├── CustomView1.swift
│   │   │   │   ├── CustomView.swift
│   │   │   │   ├── Info.plist
│   │   │   │   ├── ScrollView1.swift
│   │   │   │   ├── ScrollView.swift
│   │   │   │   ├── ViewController.swift
│   │   │   │   └── Window.swift
│   │   │   └── ViewController.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── ViewController.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── 10.2 NSTabViewController
│   │   │   ├── 10.2.1 NSTabViewController
│   │   │   │   ├── NSTabViewController
│   │   │   │   │   ├── AppDelegate.swift
│   │   │   │   │   ├── Assets.xcassets
│   │   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── Base.lproj
│   │   │   │   │   │   └── Main.storyboard
│   │   │   │   │   ├── FirstViewController.swift
│   │   │   │   │   ├── FirstViewController.xib
│   │   │   │   │   ├── Info.plist
│   │   │   │   │   ├── SecondViewController.swift
│   │   │   │   │   ├── SecondViewController.xib
│   │   │   │   │   └── ViewController.swift
│   │   │   │   └── NSTabViewController.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   ├── xcdebugger
│   │   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   │   └── xcschemes
│   │   │   │   │   ├── NSTabViewController.xcscheme
│   │   │   │   │   └── xcschememanagement.plist
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   ├── 10.2.2 NSTabViewControllerXib
│   │   │   │   ├── NSTabViewControllerXib
│   │   │   │   │   ├── AppDelegate.swift
│   │   │   │   │   ├── Assets.xcassets
│   │   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── Base.lproj
│   │   │   │   │   │   └── MainMenu.xib
│   │   │   │   │   ├── FirstViewController.swift
│   │   │   │   │   ├── FirstViewController.xib
│   │   │   │   │   ├── Info.plist
│   │   │   │   │   ├── SecondViewController.swift
│   │   │   │   │   ├── SecondViewController.xib
│   │   │   │   │   └── TabViewContrller.swift
│   │   │   │   └── NSTabViewControllerXib.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── xcschemes
│   │   │   │   │   ├── NSTabViewControllerXib.xcscheme
│   │   │   │   │   └── xcschememanagement.plist
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── 10.2.3 NSTabViewControllerStoryboard
│   │   │   ├── NSTabViewControllerStoryboard
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── NSTabViewControllerStoryboard.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSTabViewControllerStoryboard.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── 10.3 NSSplitViewController
│   │   │   ├── CollapseSplitView
│   │   │   │   ├── CollapseSplitView
│   │   │   │   │   ├── AppDelegate.swift
│   │   │   │   │   ├── Assets.xcassets
│   │   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── Base.lproj
│   │   │   │   │   │   └── Main.storyboard
│   │   │   │   │   ├── Info.plist
│   │   │   │   │   ├── splitOpen@2x.png
│   │   │   │   │   ├── splitOpen.png
│   │   │   │   │   ├── SplitViewController.swift
│   │   │   │   │   └── WindowController.swift
│   │   │   │   └── CollapseSplitView.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── xcschemes
│   │   │   │   │   ├── CollapseSplitView.xcscheme
│   │   │   │   │   └── xcschememanagement.plist
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   ├── NSSplitVCCodeCreateDemo
│   │   │   │   ├── NSSplitVCCodeCreateDemo
│   │   │   │   │   ├── AppDelegate.swift
│   │   │   │   │   ├── Assets.xcassets
│   │   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── Base.lproj
│   │   │   │   │   │   └── Main.storyboard
│   │   │   │   │   ├── Info.plist
│   │   │   │   │   ├── SplitViewController.swift
│   │   │   │   │   ├── SubViewController.swift
│   │   │   │   │   └── SubViewController.xib
│   │   │   │   └── NSSplitVCCodeCreateDemo.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   ├── xcdebugger
│   │   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   │   └── xcschemes
│   │   │   │   │   ├── NSSplitVCCodeCreateDemo.xcscheme
│   │   │   │   │   └── xcschememanagement.plist
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   ├── NSSplitViewCollapse
│   │   │   │   ├── NSSplitViewCollapse
│   │   │   │   │   ├── AppDelegate.swift
│   │   │   │   │   ├── Assets.xcassets
│   │   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── Base.lproj
│   │   │   │   │   │   └── Main.storyboard
│   │   │   │   │   ├── Info.plist
│   │   │   │   │   ├── SplitViewController.swift
│   │   │   │   │   ├── ViewController.swift
│   │   │   │   │   └── WindowController.swift
│   │   │   │   └── NSSplitViewCollapse.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── xcschemes
│   │   │   │   │   ├── NSSplitViewCollapse.xcscheme
│   │   │   │   │   └── xcschememanagement.plist
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── NSSplitViewControllerDemo
│   │   │   ├── NSSplitViewControllerDemo
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── NSSplitViewControllerDemo.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSSplitViewControllerDemo.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── 10.4
│   │   │   ├── PureCodeApp
│   │   │   │   ├── PureCodeApp
│   │   │   │   │   ├── AppDelegate.swift
│   │   │   │   │   ├── Assets.xcassets
│   │   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── Base.lproj
│   │   │   │   │   │   └── MainMenu.xib
│   │   │   │   │   ├── Info.plist
│   │   │   │   │   ├── ViewController.swift
│   │   │   │   │   └── WindowController.swift
│   │   │   │   └── PureCodeApp.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   ├── xcdebugger
│   │   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   │   └── xcschemes
│   │   │   │   │   ├── PureCodeApp.xcscheme
│   │   │   │   │   └── xcschememanagement.plist
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   ├── PureCodeFramework
│   │   │   │   ├── PureCodeFramework
│   │   │   │   │   ├── AppDelegate.swift
│   │   │   │   │   ├── Assets.xcassets
│   │   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── Info.plist
│   │   │   │   │   ├── main.swift
│   │   │   │   │   ├── ViewController.swift
│   │   │   │   │   └── WindowController.swift
│   │   │   │   └── PureCodeFramework.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   ├── xcdebugger
│   │   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   │   └── xcschemes
│   │   │   │   │   ├── PureCodeFramework.xcscheme
│   │   │   │   │   └── xcschememanagement.plist
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── PureCodeStoryboard
│   │   │   ├── PureCodeStoryboard
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   ├── ViewController.swift
│   │   │   │   └── WindowController.swift
│   │   │   └── PureCodeStoryboard.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── PureCodeStoryboard.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── 10.5
│   │   │   ├── 10.5.1 WindowLogin
│   │   │   │   ├── WindowLogin
│   │   │   │   │   ├── AppDelegate.swift
│   │   │   │   │   ├── Assets.xcassets
│   │   │   │   │   │   ├── AppIcon.appiconset
│   │   │   │   │   │   │   └── Contents.json
│   │   │   │   │   │   ├── Contents.json
│   │   │   │   │   │   ├── ic_close.imageset
│   │   │   │   │   │   │   ├── Contents.json
│   │   │   │   │   │   │   └── ic_close@2x.png
│   │   │   │   │   │   └── ic_face.imageset
│   │   │   │   │   │   ├── Contents.json
│   │   │   │   │   │   └── ic_face@2x.png
│   │   │   │   │   ├── Base.lproj
│   │   │   │   │   │   └── Main.storyboard
│   │   │   │   │   ├── Controllers
│   │   │   │   │   │   ├── LoginViewController.swift
│   │   │   │   │   │   ├── LoginWindowController.swift
│   │   │   │   │   │   └── MainWindowController.swift
│   │   │   │   │   ├── Info.plist
│   │   │   │   │   ├── WindowBorderless.swift
│   │   │   │   │   └── WindowLogin.entitlements
│   │   │   │   └── WindowLogin.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   ├── 10.5.2 WindowLogin
│   │   │   │   ├── WindowLogin
│   │   │   │   │   ├── AppDelegate.swift
│   │   │   │   │   ├── Assets.xcassets
│   │   │   │   │   │   ├── AppIcon.appiconset
│   │   │   │   │   │   │   └── Contents.json
│   │   │   │   │   │   ├── Contents.json
│   │   │   │   │   │   ├── ic_close.imageset
│   │   │   │   │   │   │   ├── Contents.json
│   │   │   │   │   │   │   └── ic_close@2x.png
│   │   │   │   │   │   └── ic_face.imageset
│   │   │   │   │   │   ├── Contents.json
│   │   │   │   │   │   └── ic_face@2x.png
│   │   │   │   │   ├── Base.lproj
│   │   │   │   │   │   └── Main.storyboard
│   │   │   │   │   ├── Controllers
│   │   │   │   │   │   ├── LoginViewController.swift
│   │   │   │   │   │   ├── LoginWindowController.swift
│   │   │   │   │   │   └── MainWindowController.swift
│   │   │   │   │   ├── Info.plist
│   │   │   │   │   ├── WindowBorderless.swift
│   │   │   │   │   └── WindowLogin.entitlements
│   │   │   │   └── WindowLogin.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── 10.5.3 WindowLogin
│   │   │   ├── WindowLoginEffect
│   │   │   │   ├── WindowLogin
│   │   │   │   │   ├── AppDelegate.swift
│   │   │   │   │   ├── Assets.xcassets
│   │   │   │   │   │   ├── AppIcon.appiconset
│   │   │   │   │   │   │   └── Contents.json
│   │   │   │   │   │   ├── Contents.json
│   │   │   │   │   │   ├── ic_close.imageset
│   │   │   │   │   │   │   ├── Contents.json
│   │   │   │   │   │   │   └── ic_close@2x.png
│   │   │   │   │   │   └── ic_face.imageset
│   │   │   │   │   │   ├── Contents.json
│   │   │   │   │   │   └── ic_face@2x.png
│   │   │   │   │   ├── Base.lproj
│   │   │   │   │   │   └── Main.storyboard
│   │   │   │   │   ├── Controllers
│   │   │   │   │   │   ├── LoginViewController.swift
│   │   │   │   │   │   ├── LoginWindowController.swift
│   │   │   │   │   │   └── MainWindowController.swift
│   │   │   │   │   ├── Info.plist
│   │   │   │   │   ├── WindowBorderless.swift
│   │   │   │   │   └── WindowLogin.entitlements
│   │   │   │   └── WindowLogin.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   ├── WindowLoginEffectByCode
│   │   │   │   ├── WindowLogin
│   │   │   │   │   ├── AppDelegate.swift
│   │   │   │   │   ├── Assets.xcassets
│   │   │   │   │   │   ├── AppIcon.appiconset
│   │   │   │   │   │   │   └── Contents.json
│   │   │   │   │   │   ├── Contents.json
│   │   │   │   │   │   ├── ic_close.imageset
│   │   │   │   │   │   │   ├── Contents.json
│   │   │   │   │   │   │   └── ic_close@2x.png
│   │   │   │   │   │   └── ic_face.imageset
│   │   │   │   │   │   ├── Contents.json
│   │   │   │   │   │   └── ic_face@2x.png
│   │   │   │   │   ├── Base.lproj
│   │   │   │   │   │   └── Main.storyboard
│   │   │   │   │   ├── Controllers
│   │   │   │   │   │   ├── LoginViewController.swift
│   │   │   │   │   │   ├── LoginWindowController.swift
│   │   │   │   │   │   └── MainWindowController.swift
│   │   │   │   │   ├── Info.plist
│   │   │   │   │   ├── WindowBorderless.swift
│   │   │   │   │   └── WindowLogin.entitlements
│   │   │   │   └── WindowLogin.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   ├── WindowLoginFilter
│   │   │   │   ├── WindowLogin
│   │   │   │   │   ├── AppDelegate.swift
│   │   │   │   │   ├── Assets.xcassets
│   │   │   │   │   │   ├── AppIcon.appiconset
│   │   │   │   │   │   │   └── Contents.json
│   │   │   │   │   │   ├── Contents.json
│   │   │   │   │   │   ├── ic_close.imageset
│   │   │   │   │   │   │   ├── Contents.json
│   │   │   │   │   │   │   └── ic_close@2x.png
│   │   │   │   │   │   └── ic_face.imageset
│   │   │   │   │   │   ├── Contents.json
│   │   │   │   │   │   └── ic_face@2x.png
│   │   │   │   │   ├── Base.lproj
│   │   │   │   │   │   └── Main.storyboard
│   │   │   │   │   ├── Controllers
│   │   │   │   │   │   ├── LoginViewController.swift
│   │   │   │   │   │   ├── LoginWindowController.swift
│   │   │   │   │   │   └── MainWindowController.swift
│   │   │   │   │   ├── Info.plist
│   │   │   │   │   ├── WindowBorderless.swift
│   │   │   │   │   └── WindowLogin.entitlements
│   │   │   │   └── WindowLogin.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── WindowLoginViewByCode
│   │   │   ├── WindowLogin
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   ├── AppIcon.appiconset
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   ├── ic_close.imageset
│   │   │   │   │   │   ├── Contents.json
│   │   │   │   │   │   └── ic_close@2x.png
│   │   │   │   │   └── ic_face.imageset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   └── ic_face@2x.png
│   │   │   │   ├── AutoLayout
│   │   │   │   │   └── AutoLayoutX.swift
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Controllers
│   │   │   │   │   ├── LoginViewController.swift
│   │   │   │   │   ├── LoginWindowController.swift
│   │   │   │   │   ├── MainViewController.swift
│   │   │   │   │   └── MainWindowController.swift
│   │   │   │   ├── Info.plist
│   │   │   │   ├── WindowBorderless.swift
│   │   │   │   └── WindowLogin.entitlements
│   │   │   └── WindowLogin.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   └── zhaojw.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── 10.6
│   │   ├── PageScrollView
│   │   │   ├── AutoLayoutX
│   │   │   │   └── AutoLayoutX.swift
│   │   │   ├── Images
│   │   │   │   ├── icon10.png
│   │   │   │   ├── icon11.png
│   │   │   │   ├── icon12.png
│   │   │   │   ├── icon13.png
│   │   │   │   ├── icon1.png
│   │   │   │   ├── icon2.png
│   │   │   │   ├── icon3.png
│   │   │   │   ├── icon4.png
│   │   │   │   ├── icon5.png
│   │   │   │   ├── icon6.png
│   │   │   │   ├── icon7.png
│   │   │   │   ├── icon8.png
│   │   │   │   └── icon9.png
│   │   │   ├── PageScrollView
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   ├── PageContainer.swift
│   │   │   │   ├── PageIndicator.swift
│   │   │   │   ├── PageScrollView.entitlements
│   │   │   │   ├── PageScrollView.swift
│   │   │   │   └── ViewController.swift
│   │   │   └── PageScrollView.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   └── zhaojw.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── ScrollViewButtons
│   │   │   ├── ScrollViewButtons
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── AutoLayout
│   │   │   │   │   └── AutoLayoutX.swift
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── ButtonView.swift
│   │   │   │   ├── Info.plist
│   │   │   │   ├── ScrollViewButtons.entitlements
│   │   │   │   └── ViewController.swift
│   │   │   └── ScrollViewButtons.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── ScrollViewHorizontalButtons
│   │   ├── ScrollViewButtons
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── AutoLayout
│   │   │   │   └── AutoLayoutX.swift
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── ButtonView.swift
│   │   │   ├── Info.plist
│   │   │   ├── ScrollViewButtons.entitlements
│   │   │   └── ViewController.swift
│   │   └── ScrollViewButtons.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   └── zhaojw.xcuserdatad
│   │   ├── xcdebugger
│   │   │   └── Breakpoints_v2.xcbkptlist
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 11 Mouse & Keyboard Event
│   │   └── NSEvent
│   │   ├── NSEvent
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── CaptureCtrlKeyView.swift
│   │   │   ├── CustomTextView.swift
│   │   │   ├── DragView.swift
│   │   │   ├── Info.plist
│   │   │   ├── NSButtonX.swift
│   │   │   ├── NSTextFieldX.swift
│   │   │   ├── TextView.swift
│   │   │   ├── TrackView.swift
│   │   │   ├── ViewController.swift
│   │   │   ├── View.swift
│   │   │   └── Window.swift
│   │   └── NSEvent.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   ├── NSEvent.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   ├── xcdebugger
│   │   │   └── Breakpoints_v2.xcbkptlist
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 12 UndoRedo
│   │   ├── ComputeUndoRedo
│   │   │   ├── ComputeUndoRedo
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   ├── UndoManager+Ext.swift
│   │   │   │   └── ViewController.swift
│   │   │   └── ComputeUndoRedo.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── ComputeUndoRedo.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── NSUndoManager
│   │   ├── NSUndoManager
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   └── ViewController.swift
│   │   └── NSUndoManager.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   └── xcschemes
│   │   │   ├── NSUndoManager.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 13 DragDrop
│   │   ├── DragDrop
│   │   │   ├── DragDrop
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── DragImageDataItem.swift
│   │   │   │   ├── DragSourceView.swift
│   │   │   │   ├── DrawImageItem.swift
│   │   │   │   ├── DropDestinationView.swift
│   │   │   │   ├── Info.plist
│   │   │   │   ├── online@2x.png
│   │   │   │   └── ViewController.swift
│   │   │   └── DragDrop.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── DragDrop.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── FileDrag
│   │   │   ├── FileDrag
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── FileDragView.swift
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── FileDrag.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── FileDrag.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── NSOutlineViewDragDrop
│   │   │   ├── NSOutlineViewDragDrop
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── NSOutlineViewDragDrop.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSOutlineViewDragDrop.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── NSTableViewDragDrop
│   │   ├── NSTableViewDragDrop
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   └── ViewController.swift
│   │   └── NSTableViewDragDrop.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   ├── NSTableViewDragDrop.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 14 CocoaBindings
│   │   ├── KVBEmploee
│   │   │   ├── KVBEmploee
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Emploee.xcdatamodeld
│   │   │   │   │   └── Emploee.xcdatamodel
│   │   │   │   │   └── contents
│   │   │   │   ├── Employee.swift
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── KVBEmployee.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── KVBEmploee.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── KVC
│   │   │   ├── KVC
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   ├── Person.swift
│   │   │   │   ├── Phone.swift
│   │   │   │   └── ViewController.swift
│   │   │   └── KVC.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── KVC.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── KVO
│   │   │   ├── KVO
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── DBPath.swift
│   │   │   │   ├── Info.plist
│   │   │   │   ├── Student.swift
│   │   │   │   ├── Teacher.swift
│   │   │   │   └── ViewController.swift
│   │   │   └── KVO.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── KVO.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── NSArrayController
│   │   │   ├── NSArrayController
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Employee.swift
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── NSArrayController.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── NSArrayController.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── NSTreeController
│   │   ├── NSTreeController
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   ├── TreeController.swift
│   │   │   ├── TreeNode.swift
│   │   │   └── ViewController.swift
│   │   └── NSTreeController.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   └── xcschemes
│   │   │   ├── NSTreeController.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 15 Bluetooth
│   │   ├── BluetoothCentral
│   │   │   ├── BluetoothCentral
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── BluetoothCentral.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── BluetoothCentral.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── BluetoothCentralIPhone
│   │   │   ├── BluetoothCentralIPhone
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   ├── LaunchScreen.storyboard
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── BluetoothCentralIPhone.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── BluetoothCentralIPhone.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── BluetoothPeripheralOSX
│   │   ├── BluetoothPeripheralOSX
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   └── ViewController.swift
│   │   └── BluetoothPeripheralOSX.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   ├── BluetoothPeripheralOSX.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 16 Bonjour
│   │   ├── BonjourClient
│   │   │   ├── BonjourClient
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── BonjourClient.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── BonjourClient.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── BonjourServer
│   │   ├── BonjourServer
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   └── ViewController.swift
│   │   └── BonjourServer.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   └── xcschemes
│   │   │   ├── BonjourServer.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 17 Services
│   │   └── SysServiceDemo
│   │   ├── ServiceProvider.swift
│   │   ├── SysServiceDemo
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   ├── TextView.swift
│   │   │   └── ViewController.swift
│   │   └── SysServiceDemo.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   ├── SysServiceDemo.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   ├── xcdebugger
│   │   │   └── Breakpoints_v2.xcbkptlist
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 18 XPC
│   │   ├── XPCBidirectionDemo
│   │   │   ├── CallbackProtocol.swift
│   │   │   ├── DHelper
│   │   │   │   ├── Helper.swift
│   │   │   │   ├── Info.plist
│   │   │   │   └── main.swift
│   │   │   ├── HelperProtocol.swift
│   │   │   ├── XPCBidirectionDemo
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   ├── ViewController.swift
│   │   │   │   └── XPCBidirectionDemo.entitlements
│   │   │   └── XPCBidirectionDemo.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── DHelper.xcscheme
│   │   │   │   ├── xcschememanagement.plist
│   │   │   │   └── XPCBidirectionDemo.xcscheme
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── XPCDemo
│   │   ├── Helper
│   │   │   ├── Helper.entitlements
│   │   │   ├── Helper.swift
│   │   │   ├── Info.plist
│   │   │   └── main.swift
│   │   ├── HelperProtocol.swift
│   │   ├── XPCDemo
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   ├── ViewController.swift
│   │   │   └── XPCDemo.entitlements
│   │   └── XPCDemo.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   ├── Helper.xcscheme
│   │   │   ├── xcschememanagement.plist
│   │   │   └── XPCDemo.xcscheme
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 19 UserNotification
│   │   ├── LocalNotification
│   │   │   ├── LocalNotification
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   ├── icon_mac_128@2x.png
│   │   │   │   │   ├── icon_mac_128.png
│   │   │   │   │   ├── icon_mac_16@2x.png
│   │   │   │   │   ├── icon_mac_16.png
│   │   │   │   │   ├── icon_mac_256@2x.png
│   │   │   │   │   ├── icon_mac_256.png
│   │   │   │   │   ├── icon_mac_32@2x.png
│   │   │   │   │   ├── icon_mac_32.png
│   │   │   │   │   ├── icon_mac_512@2x.png
│   │   │   │   │   └── icon_mac_512.png
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   ├── Menu.png
│   │   │   │   └── ViewController.swift
│   │   │   └── LocalNotification.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── LocalNotification.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── PushNotification
│   │   ├── PushNotification
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   ├── PushNotification.entitlements
│   │   │   └── ViewController.swift
│   │   └── PushNotification.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   ├── PushNotification.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 20 Document
│   │   ├── Doc
│   │   │   ├── Doc
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   ├── Document.xib
│   │   │   │   │   └── MainMenu.xib
│   │   │   │   ├── Document.swift
│   │   │   │   └── Info.plist
│   │   │   └── Doc.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── Doc.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── DocumentDemo
│   │   │   ├── DocumentDemo
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   ├── AppIcon.appiconset
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── DataIcon.png
│   │   │   │   ├── Document.swift
│   │   │   │   ├── Info.plist
│   │   │   │   ├── pdata.png
│   │   │   │   └── ViewController.swift
│   │   │   └── DocumentDemo.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── DocumentDemo.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── FileWrapper
│   │   │   ├── FileWrapper
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── DataIcon.png
│   │   │   │   ├── Document.swift
│   │   │   │   ├── Image.png
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── FileWrapper.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── FileWrapper.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── PersonProfileDoc
│   │   ├── PersonProfileDoc
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── Document.swift
│   │   │   ├── Info.plist
│   │   │   ├── PackageDocument.swift
│   │   │   ├── pdata.png
│   │   │   ├── PersonProfile.swift
│   │   │   └── ViewController.swift
│   │   └── PersonProfileDoc.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   ├── PersonProfileDoc.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 21 iCloud
│   │   └── iCloud
│   │   ├── iCloud
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── iCloud.entitlements
│   │   │   ├── Info.plist
│   │   │   └── ViewController.swift
│   │   └── iCloudDemo.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   ├── iCloudDemo.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 22 CloudKit
│   │   └── CloudKitDemo
│   │   ├── CloudKitDemo
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── CloudKitDemo.entitlements
│   │   │   ├── Info.plist
│   │   │   └── ViewController.swift
│   │   └── CloudKitDemo.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   └── xcschemes
│   │   │   ├── CloudKitDemo.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 23 CoreData
│   │   ├── ClassesManager
│   │   │   ├── Classes+CoreDataClass.swift
│   │   │   ├── Classes+CoreDataProperties.swift
│   │   │   ├── ClassesManager
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── ClassesManager.xcdatamodeld
│   │   │   │   │   └── ClassesManager.xcdatamodel
│   │   │   │   │   └── contents
│   │   │   │   ├── CoreDataManager.swift
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── ClassesManager.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── ClassesManager.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── School
│   │   │   ├── Classes+CoreDataClass.swift
│   │   │   ├── Classes+CoreDataProperties.swift
│   │   │   ├── Profile+CoreDataClass.swift
│   │   │   ├── Profile+CoreDataProperties.swift
│   │   │   ├── School
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   ├── School2.xcdatamodeld
│   │   │   │   │   └── School.xcdatamodel
│   │   │   │   │   └── contents
│   │   │   │   ├── School.entitlements
│   │   │   │   ├── School.xcdatamodeld
│   │   │   │   │   └── School.xcdatamodel
│   │   │   │   │   └── contents
│   │   │   │   └── ViewController.swift
│   │   │   ├── School.xcdatamodeld
│   │   │   │   └── School.xcdatamodel
│   │   │   │   └── contents
│   │   │   ├── School.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   ├── Students+CoreDataClass.swift
│   │   │   ├── Students+CoreDataProperties.swift
│   │   │   ├── Subjects+CoreDataClass.swift
│   │   │   └── Subjects+CoreDataProperties.swift
│   │   ├── SchoolV2
│   │   │   ├── Classes+CoreDataClass.swift
│   │   │   ├── Classes+CoreDataProperties.swift
│   │   │   ├── Profile+CoreDataClass.swift
│   │   │   ├── Profile+CoreDataProperties.swift
│   │   │   ├── SchoolV2
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── CoreDataManager.swift
│   │   │   │   ├── Info.plist
│   │   │   │   ├── School.xcdatamodeld
│   │   │   │   │   ├── SchoolV2.xcdatamodel
│   │   │   │   │   │   └── contents
│   │   │   │   │   └── School.xcdatamodel
│   │   │   │   │   └── contents
│   │   │   │   └── ViewController.swift
│   │   │   ├── SchoolV2.xcodeproj
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcuserdata
│   │   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── xcschemes
│   │   │   │   │   ├── SchoolV2.xcscheme
│   │   │   │   │   └── xcschememanagement.plist
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   └── xcschememanagement.plist
│   │   │   ├── School.xcdatamodeld
│   │   │   │   └── School.xcdatamodel
│   │   │   │   └── contents
│   │   │   ├── Students+CoreDataClass.swift
│   │   │   ├── Students+CoreDataProperties.swift
│   │   │   ├── Subjects+CoreDataClass.swift
│   │   │   └── Subjects+CoreDataProperties.swift
│   │   └── SchoolV3
│   │   ├── Classes+CoreDataClass.swift
│   │   ├── Classes+CoreDataProperties.swift
│   │   ├── ClassInfo+CoreDataClass.swift
│   │   ├── ClassInfo+CoreDataProperties.swift
│   │   ├── Profile+CoreDataClass.swift
│   │   ├── Profile+CoreDataProperties.swift
│   │   ├── SchoolV2
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── CoreDataManager.swift
│   │   │   ├── Info.plist
│   │   │   ├── School.xcdatamodeld
│   │   │   │   ├── SchoolV2.xcdatamodel
│   │   │   │   │   └── contents
│   │   │   │   ├── SchoolV3.xcdatamodel
│   │   │   │   │   └── contents
│   │   │   │   └── School.xcdatamodel
│   │   │   │   └── contents
│   │   │   └── ViewController.swift
│   │   ├── SchoolV2_V3.xcmappingmodel
│   │   │   └── xcmapping.xml
│   │   ├── SchoolV3.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── SchoolV3.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── School.xcdatamodeld
│   │   │   └── School.xcdatamodel
│   │   │   └── contents
│   │   ├── Students+CoreDataClass.swift
│   │   ├── Students+CoreDataProperties.swift
│   │   ├── Subjects+CoreDataClass.swift
│   │   └── Subjects+CoreDataProperties.swift
│   ├── Chapter 24 HTTP
│   │   ├── HTTP
│   │   │   ├── HTTP
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── HTTP.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── HTTP.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── HTTPClient
│   │   │   ├── HTTPClient
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── HTTPClientSessionDelegate.swift
│   │   │   │   ├── HTTPClient.swift
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── HTTPClient.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── HTTPClient.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── HTTPCookie
│   │   │   ├── HTTPCookie
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── HTTPCookie.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── HTTPCookie.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── HTTPFileDownUpload
│   │   ├── HTTPFileDownUpload
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   └── ViewController.swift
│   │   └── HTTPFileDownUpload.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   ├── HTTPFileDownUpload.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 25 Thread
│   │   ├── GCD
│   │   │   ├── GCD
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── HTTPClientSessionDelegate.swift
│   │   │   │   ├── HTTPClient.swift
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── GCD.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── GCD.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   ├── OperationQueue
│   │   │   ├── OperationQueue
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── HTTPImageOperation.swift
│   │   │   │   ├── Info.plist
│   │   │   │   └── ViewController.swift
│   │   │   └── OperationQueue.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── OperationQueue.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── Thread
│   │   ├── Thread
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   ├── NSConditionLockTest.swift
│   │   │   ├── NSConditionTest.swift
│   │   │   ├── ViewController.swift
│   │   │   └── WorkThread.swift
│   │   └── Thread.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   └── xcschemes
│   │   │   ├── Thread.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 26 RunLoop
│   │   ├── RunLoop
│   │   │   ├── RunLoop
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   ├── screen.png
│   │   │   │   └── ViewController.swift
│   │   │   └── RunLoop.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── RunLoop.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── RunLoopiOS
│   │   ├── RunLoopiOS
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   ├── LaunchScreen.storyboard
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   └── ViewController.swift
│   │   └── RunLoopiOS.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   └── xcschemes
│   │   │   ├── RunLoopiOS.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 27 CocoaDraw
│   │   ├── Chapter 27 CocoaDraw
│   │   │   └── CocoaDraw
│   │   │   ├── CocoaDraw
│   │   │   │   ├── AffineTransView.swift
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── ColorViewController.swift
│   │   │   │   ├── DrawObject.swift
│   │   │   │   ├── GradientViewController.swift
│   │   │   │   ├── image.png
│   │   │   │   ├── ImageViewController.swift
│   │   │   │   ├── Info.plist
│   │   │   │   ├── LineGradientView.swift
│   │   │   │   ├── LockFocusView.swift
│   │   │   │   ├── PathView.swift
│   │   │   │   ├── RadialGradientView.swift
│   │   │   │   ├── ShadowDrawView.swift
│   │   │   │   ├── ShadowViewController.swift
│   │   │   │   ├── StringDrawView.swift
│   │   │   │   └── ViewController.swift
│   │   │   └── CocoaDraw.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── CocoaDraw.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── CocoaDraw
│   │   ├── CocoaDraw
│   │   │   ├── AffineTransView.swift
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── ColorViewController.swift
│   │   │   ├── DrawObject.swift
│   │   │   ├── GradientViewController.swift
│   │   │   ├── image.png
│   │   │   ├── ImageViewController.swift
│   │   │   ├── Info.plist
│   │   │   ├── LineGradientView.swift
│   │   │   ├── LockFocusView.swift
│   │   │   ├── PathView.swift
│   │   │   ├── RadialGradientView.swift
│   │   │   ├── ShadowDrawView.swift
│   │   │   ├── ShadowViewController.swift
│   │   │   ├── StringDrawView.swift
│   │   │   └── ViewController.swift
│   │   └── CocoaDraw.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   ├── CocoaDraw.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 28 CoreAnimation
│   │   ├── CALayerDemo
│   │   │   ├── CALayerDemo
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Ball_blue.png
│   │   │   │   ├── Ball_green.png
│   │   │   │   ├── Ball_red.png
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── CAEmitterLayerVC.swift
│   │   │   │   ├── CAGradientLayerVC.swift
│   │   │   │   ├── CAReplicatorLayerVC.swift
│   │   │   │   ├── CAShapeLayerVC.swift
│   │   │   │   ├── CATextLayerVC.swift
│   │   │   │   ├── CATiledLayerVC.swift
│   │   │   │   ├── CATransformLayerVC.swift
│   │   │   │   ├── Info.plist
│   │   │   │   ├── NSImage+cgImage.swift
│   │   │   │   ├── snowflake.png
│   │   │   │   ├── snowFlakesCell.png
│   │   │   │   ├── TileView.swift
│   │   │   │   └── ViewController.swift
│   │   │   └── CALayerDemo.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── CALayerDemo.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   ├── CALayerDemo.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── CoreAnimation
│   │   ├── CoreAnimation
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── BlueLayer.swift
│   │   │   ├── CustomView.swift
│   │   │   ├── gradintCell.png
│   │   │   ├── GroupAnimationWC.swift
│   │   │   ├── GroupAnimationWC.xib
│   │   │   ├── Info.plist
│   │   │   ├── KeyframeAnimationWC.swift
│   │   │   ├── KeyframeAnimationWC.xib
│   │   │   ├── PathAnimationWC.swift
│   │   │   ├── PathAnimationWC.xib
│   │   │   ├── TransitionAnimationWC.swift
│   │   │   ├── TransitionAnimationWC.xib
│   │   │   └── ViewController.swift
│   │   └── CoreAnimation.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   ├── CoreAnimation.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 29 MultiDelegate
│   │   ├── BuddyMultiDelegateDemo
│   │   │   ├── BuddyMultiDelegateDemo
│   │   │   │   ├── App-Bridging-Header.h
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── AutoLayoutX
│   │   │   │   │   └── AutoLayoutX.swift
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── BuddyDetailViewController.swift
│   │   │   │   ├── BuddyListViewController.swift
│   │   │   │   ├── BuddyStatusManager.swift
│   │   │   │   ├── DAO
│   │   │   │   │   ├── BuddyDetailDAO.swift
│   │   │   │   │   └── BuddyListDAO.swift
│   │   │   │   ├── DataStoreBO
│   │   │   │   │   └── DataStoreBO.swift
│   │   │   │   ├── DispatchQueue+Ext.swift
│   │   │   │   ├── Info.plist
│   │   │   │   ├── MainViewController.swift
│   │   │   │   ├── MDatabase
│   │   │   │   │   ├── DBObject
│   │   │   │   │   │   ├── DAO.swift
│   │   │   │   │   │   ├── MDAO.swift
│   │   │   │   │   │   ├── MDatabase.swift
│   │   │   │   │   │   └── MModel.swift
│   │   │   │   │   ├── Meta
│   │   │   │   │   │   ├── DatabaseInfo.swift
│   │   │   │   │   │   ├── FieldInfo.swift
│   │   │   │   │   │   ├── MDatabase+Meta.swift
│   │   │   │   │   │   ├── TableInfo.swift
│   │   │   │   │   │   └── TypeKit.swift
│   │   │   │   │   └── String+Regex.swift
│   │   │   │   ├── Model
│   │   │   │   │   ├── BuddyDetail.swift
│   │   │   │   │   └── BuddyList.swift
│   │   │   │   ├── NSImage+HHTint.h
│   │   │   │   ├── NSImage+HHTint.m
│   │   │   │   ├── Resources
│   │   │   │   │   ├── DB
│   │   │   │   │   │   └── Chat.sqlite
│   │   │   │   │   └── images
│   │   │   │   │   ├── 10.png
│   │   │   │   │   ├── 11.png
│   │   │   │   │   ├── 12.png
│   │   │   │   │   ├── 13.png
│   │   │   │   │   ├── 14.png
│   │   │   │   │   ├── 15.png
│   │   │   │   │   ├── 16.png
│   │   │   │   │   ├── 1.png
│   │   │   │   │   ├── 2.png
│   │   │   │   │   ├── 3.png
│   │   │   │   │   ├── 4.png
│   │   │   │   │   ├── 5.png
│   │   │   │   │   ├── 6.png
│   │   │   │   │   ├── 7.png
│   │   │   │   │   ├── 8.png
│   │   │   │   │   ├── 9.png
│   │   │   │   │   ├── offline@2x.png
│   │   │   │   │   ├── offline.png
│   │   │   │   │   ├── online@2x.png
│   │   │   │   │   └── online.png
│   │   │   │   └── Vendor
│   │   │   │   ├── fmdb
│   │   │   │   │   ├── FMDatabaseAdditions.h
│   │   │   │   │   ├── FMDatabaseAdditions.m
│   │   │   │   │   ├── FMDatabase.h
│   │   │   │   │   ├── FMDatabase.m
│   │   │   │   │   ├── FMDatabasePool.h
│   │   │   │   │   ├── FMDatabasePool.m
│   │   │   │   │   ├── FMDatabaseQueue.h
│   │   │   │   │   ├── FMDatabaseQueue.m
│   │   │   │   │   ├── FMDB.h
│   │   │   │   │   ├── FMResultSet.h
│   │   │   │   │   ├── FMResultSet.m
│   │   │   │   │   └── MDatabase-Bridging-Header.h
│   │   │   │   └── GCDMulticastDelegate
│   │   │   │   ├── GCDMulticastDelegate.h
│   │   │   │   └── GCDMulticastDelegate.m
│   │   │   └── BuddyMultiDelegateDemo.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── BuddyMultiDelegateDemo.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── MultiDelegate
│   │   ├── MultiDelegate
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── BuddyListController.swift
│   │   │   ├── BuddyListController.xib
│   │   │   ├── ChatViewController.swift
│   │   │   ├── ChatViewController.xib
│   │   │   ├── Info.plist
│   │   │   ├── MessageManager.swift
│   │   │   └── ViewController.swift
│   │   └── MultiDelegate.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   └── xcschemes
│   │   │   ├── MultiDelegate.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 30 Transformer
│   │   └── DataTransformer
│   │   ├── DataTransformer
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── DataField.swift
│   │   │   ├── Info.plist
│   │   │   ├── IsNotNilTransformer.swift
│   │   │   ├── TypeMapValueTransformer.swift
│   │   │   └── ViewController.swift
│   │   └── DataTransformer.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   ├── DataTransformer.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 31 Framework
│   │   ├── XXXBonjourNetWork
│   │   │   ├── XXXBonjourNetWork
│   │   │   │   ├── Helper.h
│   │   │   │   ├── Helper.m
│   │   │   │   ├── Info.plist
│   │   │   │   └── XXXBonjourNetWork.h
│   │   │   ├── XXXBonjourNetWorkManager.swift
│   │   │   └── XXXBonjourNetWork.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── xcschemes
│   │   │   │   ├── libXXXBonjourNetWork.xcscheme
│   │   │   │   ├── xcschememanagement.plist
│   │   │   │   └── XXXBonjourNetWork.xcscheme
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── XXXBonjourNetWorkManagerTest
│   │   ├── XXXBonjourNetWorkManagerTest
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   ├── ViewController.swift
│   │   │   └── XXXBonjourNetWork.framework
│   │   │   ├── Headers
│   │   │   ├── Modules
│   │   │   ├── Resources
│   │   │   ├── Versions
│   │   │   │   ├── A
│   │   │   │   │   ├── Headers
│   │   │   │   │   │   ├── Helper.h
│   │   │   │   │   │   ├── XXXBonjourNetWork.h
│   │   │   │   │   │   └── XXXBonjourNetWork-Swift.h
│   │   │   │   │   ├── Modules
│   │   │   │   │   │   ├── module.modulemap
│   │   │   │   │   │   └── XXXBonjourNetWork.swiftmodule
│   │   │   │   │   │   ├── x86_64.swiftdoc
│   │   │   │   │   │   └── x86_64.swiftmodule
│   │   │   │   │   ├── Resources
│   │   │   │   │   │   └── Info.plist
│   │   │   │   │   └── XXXBonjourNetWork
│   │   │   │   └── Current
│   │   │   └── XXXBonjourNetWork
│   │   └── XXXBonjourNetWorkManagerTest.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   └── xcschemes
│   │   │   ├── xcschememanagement.plist
│   │   │   └── XXXBonjourNetWorkManagerTest.xcscheme
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 32 Sandbox
│   │   └── SandboxFile
│   │   ├── SandboxFile
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   ├── SandboxFile.entitlements
│   │   │   └── ViewController.swift
│   │   └── SandboxFile.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   ├── SandboxFile.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 33 DataNavigation
│   │   └── DataNavigationView
│   │   ├── DataNavigationView
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   ├── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Contents.json
│   │   │   │   ├── first.imageset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   └── toolbar-first@2x.png
│   │   │   │   ├── last.imageset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   └── toolbar-last@2x.png
│   │   │   │   ├── next.imageset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   └── toolbar-next@2x.png
│   │   │   │   └── pre.imageset
│   │   │   │   ├── Contents.json
│   │   │   │   └── toolbar-pre@2x.png
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── DataNavigationItem.swift
│   │   │   ├── DataNavigationView.swift
│   │   │   ├── Info.plist
│   │   │   ├── SnapKit
│   │   │   └── ViewController.swift
│   │   ├── DataNavigationView.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── DataNavigationView.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── Masonry
│   ├── Chapter 34 TableDataNavigationViewController
│   │   └── TableViewControllerDemo
│   │   ├── File.strings
│   │   ├── TableViewControllerDemo
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   ├── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── closeDB.imageset
│   │   │   │   │   ├── CloseDB@2x.png
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Contents.json
│   │   │   │   ├── database.imageset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   ├── DBDatabase-Sys@2x.png
│   │   │   │   │   └── DBDatabase-Sys.png
│   │   │   │   ├── first.imageset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   └── toolbar-first@2x.png
│   │   │   │   ├── home.imageset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   └── SQLite-Home@2x.png
│   │   │   │   ├── last.imageset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   └── toolbar-last@2x.png
│   │   │   │   ├── next.imageset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   └── toolbar-next@2x.png
│   │   │   │   ├── openDB.imageset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   └── openDB@2x.png
│   │   │   │   ├── pre.imageset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   └── toolbar-pre@2x.png
│   │   │   │   ├── table.imageset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   ├── DBTable-Sys@2x.png
│   │   │   │   │   └── DBTable-Sys.png
│   │   │   │   └── windowIcon.imageset
│   │   │   │   ├── Contents.json
│   │   │   │   └── icon_mac_32.png
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── DataNavigationItem.swift
│   │   │   ├── DataNavigationView.swift
│   │   │   ├── DataPageManager.swift
│   │   │   ├── Info.plist
│   │   │   ├── NSButton+ColumnItem.swift
│   │   │   ├── NSComboBox+ColumnItem.swift
│   │   │   ├── NSImageView+ColumnItem.swift
│   │   │   ├── NSTableColumn+ColumnItem.swift
│   │   │   ├── NSTableView+ColumnItem.swift
│   │   │   ├── NSTextField+ColumnItem.swift
│   │   │   ├── TableColumnItem.swift
│   │   │   ├── TableDataDelegate.swift
│   │   │   ├── TableDataNavigationViewController.swift
│   │   │   ├── TableDataNavigationViewDelegate.swift
│   │   │   ├── ViewController.swift
│   │   │   ├── ViewController.xib
│   │   │   ├── ViewXibViewController.swift
│   │   │   ├── WindowController.swift
│   │   │   ├── WindowController.xib
│   │   │   ├── XibViewController.swift
│   │   │   └── XibViewController.xib
│   │   └── TableViewControllerDemo.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   ├── TableViewControllerDemo.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   ├── xcdebugger
│   │   │   └── Breakpoints_v2.xcbkptlist
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 35 AutoTools
│   │   ├── ImageAassetAutomator
│   │   │   ├── ImageAassetAutomator
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   ├── AppIcon.appiconset
│   │   │   │   │   │   ├── Contents.json
│   │   │   │   │   │   ├── icon_mac_16@2x.png
│   │   │   │   │   │   ├── icon_mac_16.png
│   │   │   │   │   │   ├── icon_mac_32@2x.png
│   │   │   │   │   │   └── icon_mac_32.png
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   └── DragImage.imageset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   └── DragImage@2x.png
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── DragImageView.swift
│   │   │   │   ├── FileManager+Ext.swift
│   │   │   │   ├── imageSize.plist
│   │   │   │   ├── Info.plist
│   │   │   │   ├── NSImage+Ext.swift
│   │   │   │   ├── NSPasteboard+Ext.swift
│   │   │   │   └── ViewController.swift
│   │   │   └── ImageAassetAutomator.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── ImageAassetAutomator.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── LocalizationTools
│   │   ├── Base.lproj
│   │   │   └── Localizable.strings
│   │   ├── en.lproj
│   │   │   └── Localizable.strings
│   │   ├── Flags
│   │   │   ├── AC.png
│   │   │   ├── AD.png
│   │   │   ├── AE.png
│   │   │   ├── AF.png
│   │   │   ├── AG.png
│   │   │   ├── AI.png
│   │   │   ├── AL.png
│   │   │   ├── AM.png
│   │   │   ├── AN.png
│   │   │   ├── AO.png
│   │   │   ├── AQ.png
│   │   │   ├── AR.png
│   │   │   ├── AS.png
│   │   │   ├── AT.png
│   │   │   ├── AU.png
│   │   │   ├── AW.png
│   │   │   ├── AX.png
│   │   │   ├── AZ.png
│   │   │   ├── BA.png
│   │   │   ├── BB.png
│   │   │   ├── BD.png
│   │   │   ├── BE.png
│   │   │   ├── BF.png
│   │   │   ├── BG.png
│   │   │   ├── BH.png
│   │   │   ├── BI.png
│   │   │   ├── BJ.png
│   │   │   ├── BM.png
│   │   │   ├── BN.png
│   │   │   ├── BO.png
│   │   │   ├── BR.png
│   │   │   ├── BS.png
│   │   │   ├── BT.png
│   │   │   ├── BV.png
│   │   │   ├── BW.png
│   │   │   ├── BY.png
│   │   │   ├── BZ.png
│   │   │   ├── CA.png
│   │   │   ├── CC.png
│   │   │   ├── CD.png
│   │   │   ├── CF.png
│   │   │   ├── CG.png
│   │   │   ├── CH.png
│   │   │   ├── CI.png
│   │   │   ├── CK.png
│   │   │   ├── CL.png
│   │   │   ├── CM.png
│   │   │   ├── CN.png
│   │   │   ├── CO.png
│   │   │   ├── CR.png
│   │   │   ├── CU.png
│   │   │   ├── CV.png
│   │   │   ├── CX.png
│   │   │   ├── CY.png
│   │   │   ├── CZ.png
│   │   │   ├── DE.png
│   │   │   ├── DJ.png
│   │   │   ├── DK.png
│   │   │   ├── DM.png
│   │   │   ├── DO.png
│   │   │   ├── DZ.png
│   │   │   ├── EC.png
│   │   │   ├── EE.png
│   │   │   ├── EG.png
│   │   │   ├── EH.png
│   │   │   ├── ER.png
│   │   │   ├── ES.png
│   │   │   ├── ET.png
│   │   │   ├── FI.png
│   │   │   ├── FJ.png
│   │   │   ├── FK.png
│   │   │   ├── FM.png
│   │   │   ├── FO.png
│   │   │   ├── FR.png
│   │   │   ├── FX.png
│   │   │   ├── GA.png
│   │   │   ├── GB.png
│   │   │   ├── GD.png
│   │   │   ├── GE.png
│   │   │   ├── GF.png
│   │   │   ├── GG.png
│   │   │   ├── GH.png
│   │   │   ├── GI.png
│   │   │   ├── GL.png
│   │   │   ├── GM.png
│   │   │   ├── GN.png
│   │   │   ├── GP.png
│   │   │   ├── GQ.png
│   │   │   ├── GR.png
│   │   │   ├── GS.png
│   │   │   ├── GT.png
│   │   │   ├── GU.png
│   │   │   ├── GW.png
│   │   │   ├── GY.png
│   │   │   ├── HE.png
│   │   │   ├── HK.png
│   │   │   ├── HM.png
│   │   │   ├── HN.png
│   │   │   ├── HR.png
│   │   │   ├── HT.png
│   │   │   ├── HU.png
│   │   │   ├── ID.png
│   │   │   ├── IE.png
│   │   │   ├── IL.png
│   │   │   ├── IM.png
│   │   │   ├── IN.png
│   │   │   ├── IO.png
│   │   │   ├── IQ.png
│   │   │   ├── IR.png
│   │   │   ├── IS.png
│   │   │   ├── IT.png
│   │   │   ├── JE.png
│   │   │   ├── JM.png
│   │   │   ├── JO.png
│   │   │   ├── JP.png
│   │   │   ├── KE.png
│   │   │   ├── KG.png
│   │   │   ├── KH.png
│   │   │   ├── KI.png
│   │   │   ├── KM.png
│   │   │   ├── KN.png
│   │   │   ├── KP.png
│   │   │   ├── KR.png
│   │   │   ├── KW.png
│   │   │   ├── KY.png
│   │   │   ├── KZ.png
│   │   │   ├── LA.png
│   │   │   ├── LB.png
│   │   │   ├── LC.png
│   │   │   ├── LI.png
│   │   │   ├── LK.png
│   │   │   ├── LR.png
│   │   │   ├── LS.png
│   │   │   ├── LT.png
│   │   │   ├── LU.png
│   │   │   ├── LV.png
│   │   │   ├── LY.png
│   │   │   ├── MA.png
│   │   │   ├── MC.png
│   │   │   ├── MD.png
│   │   │   ├── ME.png
│   │   │   ├── MF.png
│   │   │   ├── MG.png
│   │   │   ├── MH.png
│   │   │   ├── MK.png
│   │   │   ├── ML.png
│   │   │   ├── MM.png
│   │   │   ├── MN.png
│   │   │   ├── MO.png
│   │   │   ├── MP.png
│   │   │   ├── MQ.png
│   │   │   ├── MR.png
│   │   │   ├── MS.png
│   │   │   ├── MT.png
│   │   │   ├── MU.png
│   │   │   ├── MV.png
│   │   │   ├── MW.png
│   │   │   ├── MX.png
│   │   │   ├── MY.png
│   │   │   ├── MZ.png
│   │   │   ├── NA.png
│   │   │   ├── NC.png
│   │   │   ├── NE.png
│   │   │   ├── NF.png
│   │   │   ├── NG.png
│   │   │   ├── NI.png
│   │   │   ├── NL.png
│   │   │   ├── NO.png
│   │   │   ├── NP.png
│   │   │   ├── NR.png
│   │   │   ├── NU.png
│   │   │   ├── NZ.png
│   │   │   ├── OM.png
│   │   │   ├── PA.png
│   │   │   ├── PE.png
│   │   │   ├── PF.png
│   │   │   ├── PG.png
│   │   │   ├── PH.png
│   │   │   ├── PK.png
│   │   │   ├── PL.png
│   │   │   ├── PM.png
│   │   │   ├── PN.png
│   │   │   ├── PR.png
│   │   │   ├── PS.png
│   │   │   ├── PT.png
│   │   │   ├── PW.png
│   │   │   ├── PY.png
│   │   │   ├── QA.png
│   │   │   ├── RE.png
│   │   │   ├── RO.png
│   │   │   ├── RS.png
│   │   │   ├── RU.png
│   │   │   ├── RW.png
│   │   │   ├── SA.png
│   │   │   ├── SB.png
│   │   │   ├── SC.png
│   │   │   ├── SD.png
│   │   │   ├── SE.png
│   │   │   ├── SG.png
│   │   │   ├── SH.png
│   │   │   ├── SI.png
│   │   │   ├── SJ.png
│   │   │   ├── SK.png
│   │   │   ├── SL.png
│   │   │   ├── SM.png
│   │   │   ├── SN.png
│   │   │   ├── SO.png
│   │   │   ├── SR.png
│   │   │   ├── SS.png
│   │   │   ├── ST.png
│   │   │   ├── SV.png
│   │   │   ├── SY.png
│   │   │   ├── SZ.png
│   │   │   ├── TC.png
│   │   │   ├── TD.png
│   │   │   ├── TF.png
│   │   │   ├── TG.png
│   │   │   ├── TH.png
│   │   │   ├── TJ.png
│   │   │   ├── TK.png
│   │   │   ├── TL.png
│   │   │   ├── TM.png
│   │   │   ├── TN.png
│   │   │   ├── TO.png
│   │   │   ├── TR.png
│   │   │   ├── TT.png
│   │   │   ├── TV.png
│   │   │   ├── TW.png
│   │   │   ├── TZ.png
│   │   │   ├── UA.png
│   │   │   ├── UG.png
│   │   │   ├── UM.png
│   │   │   ├── US.png
│   │   │   ├── UY.png
│   │   │   ├── UZ.png
│   │   │   ├── VA.png
│   │   │   ├── VC.png
│   │   │   ├── VE.png
│   │   │   ├── VG.png
│   │   │   ├── VI.png
│   │   │   ├── VN.png
│   │   │   ├── VU.png
│   │   │   ├── WF.png
│   │   │   ├── WS.png
│   │   │   ├── XK.png
│   │   │   ├── YE.png
│   │   │   ├── YT.png
│   │   │   ├── YU.png
│   │   │   ├── ZA.png
│   │   │   ├── ZM.png
│   │   │   └── ZW.png
│   │   ├── fr.lproj
│   │   │   └── Localizable.strings
│   │   ├── ja.lproj
│   │   │   └── Localizable.strings
│   │   ├── LocalizationTools
│   │   │   ├── AppDelegate.swift
│   │   │   ├── AppleNationDAO.swift
│   │   │   ├── AppleNation.swift
│   │   │   ├── AppleNationVM.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   ├── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── arches.imageset
│   │   │   │   │   ├── arches@2x.png
│   │   │   │   │   ├── arches.png
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Contents.json
│   │   │   │   ├── toolbar-add.imageset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   ├── toolbar-add-w@2x.png
│   │   │   │   │   └── toolbar-add-w.png
│   │   │   │   ├── toolbar-refresh.imageset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   ├── toolbar-refresh-w@2x.png
│   │   │   │   │   └── toolbar-refresh-w.png
│   │   │   │   ├── toolbar-remove.imageset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   ├── toolbar-remove-w@2x.png
│   │   │   │   │   └── toolbar-remove-w.png
│   │   │   │   ├── Trans-ToolBar-Export.imageset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   ├── Trans-ToolBar-Export2@2x.png
│   │   │   │   │   └── Trans-ToolBar-Export2.png
│   │   │   │   ├── Trans-ToolBar-Help.imageset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   ├── Trans-ToolBar-Help@2x.png
│   │   │   │   │   └── Trans-ToolBar-Help.png
│   │   │   │   ├── Trans-ToolBar-Open.imageset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   ├── Trans-ToolBar-Open@2x.png
│   │   │   │   │   └── Trans-ToolBar-Open.png
│   │   │   │   └── Trans-ToolBar-Trans.imageset
│   │   │   │   ├── Contents.json
│   │   │   │   ├── Trans-ToolBar-Trans@2x.png
│   │   │   │   └── Trans-ToolBar-Trans.png
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── Countries.plist
│   │   │   ├── DAO.swift
│   │   │   ├── DataNavigationItem.swift
│   │   │   ├── DataNavigationView.swift
│   │   │   ├── FileManager+Ext.swift
│   │   │   ├── fmdb
│   │   │   │   ├── FMDatabaseAdditions.h
│   │   │   │   ├── FMDatabaseAdditions.m
│   │   │   │   ├── FMDatabase.h
│   │   │   │   ├── FMDatabase.m
│   │   │   │   ├── FMDatabasePool.h
│   │   │   │   ├── FMDatabasePool.m
│   │   │   │   ├── FMDatabaseQueue.h
│   │   │   │   ├── FMDatabaseQueue.m
│   │   │   │   ├── FMDB.h
│   │   │   │   ├── FMResultSet.h
│   │   │   │   └── FMResultSet.m
│   │   │   ├── Info.plist
│   │   │   ├── LocalizationFile.swift
│   │   │   ├── LocalizationLang.swift
│   │   │   ├── LocalizationManager.swift
│   │   │   ├── LocalizationProject.swift
│   │   │   ├── LocalizationTools-Bridging-Header.h
│   │   │   ├── MDAO.swift
│   │   │   ├── MDatabase.swift
│   │   │   ├── MModel.swift
│   │   │   ├── MouseAutoClick.h
│   │   │   ├── MouseAutoClick.m
│   │   │   ├── NationBO.swift
│   │   │   ├── NationDAO.swift
│   │   │   ├── NationListViewController.swift
│   │   │   ├── NationListView.swift
│   │   │   ├── NationPanel.swift
│   │   │   ├── NationPanel.xib
│   │   │   ├── Nations.sqlite
│   │   │   ├── Nation.swift
│   │   │   ├── NationTextViewController.swift
│   │   │   ├── NationUtil.swift
│   │   │   ├── NoodleLineNumberView
│   │   │   │   ├── NoodleLineNumberMarker.h
│   │   │   │   ├── NoodleLineNumberMarker.m
│   │   │   │   ├── NoodleLineNumberView.h
│   │   │   │   └── NoodleLineNumberView.m
│   │   │   ├── NSColor+Ext.swift
│   │   │   ├── NSPasteboard+Ext.swift
│   │   │   ├── NSScreen+Ext.swift
│   │   │   ├── String+Component.swift
│   │   │   ├── String+Regex.swift
│   │   │   ├── ViewController.swift
│   │   │   ├── WindowController.swift
│   │   │   └── XcodeEditor
│   │   │   ├── Utils
│   │   │   │   ├── NSString+RemoveEmoji.h
│   │   │   │   ├── NSString+RemoveEmoji.m
│   │   │   │   ├── XCKeyBuilder.h
│   │   │   │   └── XCKeyBuilder.m
│   │   │   ├── XCAbstractDefinition.h
│   │   │   ├── XCAbstractDefinition.m
│   │   │   ├── XCBuildFile.h
│   │   │   ├── XCBuildShellScriptDefinition.h
│   │   │   ├── XCBuildShellScriptDefinition.m
│   │   │   ├── XCBuildShellScript.h
│   │   │   ├── XCBuildShellScript.m
│   │   │   ├── XCClassDefinition.h
│   │   │   ├── XCClassDefinition.m
│   │   │   ├── XCFileOperationQueue.h
│   │   │   ├── XCFileOperationQueue.m
│   │   │   ├── XCFrameworkDefinition.h
│   │   │   ├── XCFrameworkDefinition.m
│   │   │   ├── XCGroup.h
│   │   │   ├── XCGroup.m
│   │   │   ├── XcodeEditor.h
│   │   │   ├── XcodeGroupMember.h
│   │   │   ├── XcodeMemberType.h
│   │   │   ├── XcodeMemberType.m
│   │   │   ├── XcodeSourceFileType.h
│   │   │   ├── XcodeSourceFileType.m
│   │   │   ├── XcodeSourceTreeType.h
│   │   │   ├── XcodeSourceTreeType.m
│   │   │   ├── XCProjectBuildConfig.h
│   │   │   ├── XCProjectBuildConfig.m
│   │   │   ├── XCProject.h
│   │   │   ├── XCProject.m
│   │   │   ├── XCProject+SubProject.h
│   │   │   ├── XCProject+SubProject.m
│   │   │   ├── XCSourceFileDefinition.h
│   │   │   ├── XCSourceFileDefinition.m
│   │   │   ├── XCSourceFile.h
│   │   │   ├── XCSourceFile.m
│   │   │   ├── XCSubProjectDefinition.h
│   │   │   ├── XCSubProjectDefinition.m
│   │   │   ├── XCTarget.h
│   │   │   ├── XCTarget.m
│   │   │   ├── XCVersionGroup.h
│   │   │   ├── XCVersionGroup.m
│   │   │   ├── XCXibDefinition.h
│   │   │   └── XCXibDefinition.m
│   │   ├── LocalizationTools.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── LocalizationTools.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── nl.lproj
│   │   └── Localizable.strings
│   ├── Chapter 36 BluetoothTools
│   │   ├── OpenMacI
│   │   │   ├── OpenMacI
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   ├── AppIcon.appiconset
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   └── MacColor.imageset
│   │   │   │   │   ├── Contents.json
│   │   │   │   │   └── MacColor@2x.png
│   │   │   │   ├── Base.lproj
│   │   │   │   │   ├── LaunchScreen.storyboard
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── ClientCmdHelper.swift
│   │   │   │   ├── Info.plist
│   │   │   │   ├── JSONKit.swift
│   │   │   │   ├── ViewController.swift
│   │   │   │   └── XXXCentralClient.swift
│   │   │   └── OpenMacI.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── OpenMacI.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── OpenMacX
│   │   ├── OpenMacX
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   ├── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── blue.imageset
│   │   │   │   │   ├── blue@2x.png
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Contents.json
│   │   │   │   └── openMacIcon.imageset
│   │   │   │   ├── Contents.json
│   │   │   │   └── openMacIcon@2x.png
│   │   │   ├── Base.lproj
│   │   │   │   └── MainMenu.xib
│   │   │   ├── CmdManager.swift
│   │   │   ├── Info.plist
│   │   │   ├── JSONKit.swift
│   │   │   ├── MDRestartShutdownLogout.h
│   │   │   ├── PasswordCmd.strings
│   │   │   ├── SleepCmd.strings
│   │   │   ├── String+Replace.swift
│   │   │   └── XXXPeripheralService.swift
│   │   ├── OpenMacX-Bridging-Header.h
│   │   └── OpenMacX.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   ├── OpenMacX.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   ├── Chapter 37 SQLiteDatabase
│   │   ├── FMDBEncrypt
│   │   │   ├── FMDBEncrypt
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Base.lproj
│   │   │   │   │   └── MainMenu.xib
│   │   │   │   ├── Database.sqlite
│   │   │   │   ├── fmdb
│   │   │   │   │   ├── FMDatabaseAdditions.h
│   │   │   │   │   ├── FMDatabaseAdditions.m
│   │   │   │   │   ├── FMDatabase.h
│   │   │   │   │   ├── FMDatabase.m
│   │   │   │   │   ├── FMDatabasePool.h
│   │   │   │   │   ├── FMDatabasePool.m
│   │   │   │   │   ├── FMDatabaseQueue.h
│   │   │   │   │   ├── FMDatabaseQueue.m
│   │   │   │   │   ├── FMDB.h
│   │   │   │   │   ├── FMResultSet.h
│   │   │   │   │   └── FMResultSet.m
│   │   │   │   ├── Info.plist
│   │   │   │   ├── MDatabase-Bridging-Header.h
│   │   │   │   ├── sqlite3.c
│   │   │   │   └── sqlite3.h
│   │   │   └── FMDBEncrypt.xcodeproj
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcuserdata
│   │   │   │   ├── idevfans.xcuserdatad
│   │   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   │   └── zhaojw.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   ├── xcdebugger
│   │   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   │   └── xcschemes
│   │   │   │   ├── FMDBEncrypt.xcscheme
│   │   │   │   └── xcschememanagement.plist
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── xcschemes
│   │   │   └── xcschememanagement.plist
│   │   └── MDatabase
│   │   ├── MDatabase
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Contents.json
│   │   │   ├── Base.lproj
│   │   │   │   └── Main.storyboard
│   │   │   ├── CodeGenerate.swift
│   │   │   ├── DAO.swift
│   │   │   ├── DatabaseDemo.sqlite
│   │   │   ├── DatabaseInfo.swift
│   │   │   ├── DMTemplateEngine
│   │   │   │   ├── DMTemplateEngine.h
│   │   │   │   └── DMTemplateEngine.m
│   │   │   ├── FieldInfo.swift
│   │   │   ├── fmdb
│   │   │   │   ├── FMDatabaseAdditions.h
│   │   │   │   ├── FMDatabaseAdditions.m
│   │   │   │   ├── FMDatabase.h
│   │   │   │   ├── FMDatabase.m
│   │   │   │   ├── FMDatabasePool.h
│   │   │   │   ├── FMDatabasePool.m
│   │   │   │   ├── FMDatabaseQueue.h
│   │   │   │   ├── FMDatabaseQueue.m
│   │   │   │   ├── FMDB.h
│   │   │   │   ├── FMResultSet.h
│   │   │   │   └── FMResultSet.m
│   │   │   ├── Info.plist
│   │   │   ├── MDAO.swift
│   │   │   ├── MDatabase-Bridging-Header.h
│   │   │   ├── MDatabase+Meta.swift
│   │   │   ├── MDatabase.swift
│   │   │   ├── MModel.swift
│   │   │   ├── Model.txt
│   │   │   ├── PersonDAO.swift
│   │   │   ├── Person.swift
│   │   │   ├── String+Regex.swift
│   │   │   ├── TableInfo.swift
│   │   │   ├── TypeKit.swift
│   │   │   └── ViewController.swift
│   │   └── MDatabase.xcodeproj
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcuserdata
│   │   │   ├── idevfans.xcuserdatad
│   │   │   │   └── UserInterfaceState.xcuserstate
│   │   │   └── zhaojw.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   │   └── Breakpoints_v2.xcbkptlist
│   │   │   └── xcschemes
│   │   │   ├── MDatabase.xcscheme
│   │   │   └── xcschememanagement.plist
│   │   └── zhaojw.xcuserdatad
│   │   └── xcschemes
│   │   └── xcschememanagement.plist
│   └── Chapter 38 StartFirstApp
│   └── SwiftSQLiteApp
│   ├── Browse.png
│   ├── Query.png
│   ├── README.md
│   ├── Schema.png
│   ├── SQLiteApp
│   │   ├── AppDelegate.swift
│   │   ├── Assets.xcassets
│   │   │   ├── AppIcon.appiconset
│   │   │   │   ├── Contents.json
│   │   │   │   ├── icon_mac_128@2x.png
│   │   │   │   ├── icon_mac_128.png
│   │   │   │   ├── icon_mac_16@2x.png
│   │   │   │   ├── icon_mac_16.png
│   │   │   │   ├── icon_mac_256@2x.png
│   │   │   │   ├── icon_mac_256.png
│   │   │   │   ├── icon_mac_32@2x.png
│   │   │   │   ├── icon_mac_32.png
│   │   │   │   ├── icon_mac_512@2x.png
│   │   │   │   └── icon_mac_512.png
│   │   │   ├── arches.imageset
│   │   │   │   ├── arches@2x.png
│   │   │   │   ├── arches.png
│   │   │   │   └── Contents.json
│   │   │   ├── closeDB.imageset
│   │   │   │   ├── CloseDB@2x.png
│   │   │   │   └── Contents.json
│   │   │   ├── Contents.json
│   │   │   ├── database.imageset
│   │   │   │   ├── Contents.json
│   │   │   │   ├── DBDatabase-Sys@2x.png
│   │   │   │   └── DBDatabase-Sys.png
│   │   │   ├── first.imageset
│   │   │   │   ├── Contents.json
│   │   │   │   └── toolbar-first@2x.png
│   │   │   ├── home.imageset
│   │   │   │   ├── Contents.json
│   │   │   │   └── SQLite-Home@2x.png
│   │   │   ├── last.imageset
│   │   │   │   ├── Contents.json
│   │   │   │   └── toolbar-last@2x.png
│   │   │   ├── next.imageset
│   │   │   │   ├── Contents.json
│   │   │   │   └── toolbar-next@2x.png
│   │   │   ├── openDB.imageset
│   │   │   │   ├── Contents.json
│   │   │   │   └── openDB@2x.png
│   │   │   ├── pre.imageset
│   │   │   │   ├── Contents.json
│   │   │   │   └── toolbar-pre@2x.png
│   │   │   ├── table.imageset
│   │   │   │   ├── Contents.json
│   │   │   │   ├── DBTable-Sys@2x.png
│   │   │   │   └── DBTable-Sys.png
│   │   │   └── windowIcon.imageset
│   │   │   ├── Contents.json
│   │   │   └── icon_mac_32.png
│   │   ├── Base.lproj
│   │   │   └── Main.storyboard
│   │   ├── Common
│   │   │   ├── Config.swift
│   │   │   ├── DispatchQueue+Ext.swift
│   │   │   ├── JSONKit.swift
│   │   │   ├── NSColor+Ext.swift
│   │   │   └── NSPasteboard+Ext.swift
│   │   ├── Components
│   │   │   ├── AutoLayoutX
│   │   │   │   └── AutoLayoutX.swift
│   │   │   ├── DataNavigationView
│   │   │   │   ├── DataNavigationItem.swift
│   │   │   │   └── DataNavigationView.swift
│   │   │   ├── DataNavigationViewController
│   │   │   │   ├── Controller
│   │   │   │   │   ├── TableDataNavigationViewController.swift
│   │   │   │   │   ├── TableDataNavigationViewDelegate.swift
│   │   │   │   │   ├── XibViewController.swift
│   │   │   │   │   └── XibViewController.xib
│   │   │   │   ├── DataPageManager
│   │   │   │   │   └── DataPageManager.swift
│   │   │   │   ├── Extension
│   │   │   │   │   ├── NSButton+ColumnItem.swift
│   │   │   │   │   ├── NSComboBox+ColumnItem.swift
│   │   │   │   │   ├── NSImageView+ColumnItem.swift
│   │   │   │   │   ├── NSTableColumn+ColumnItem.swift
│   │   │   │   │   ├── NSTableView+ColumnItem.swift
│   │   │   │   │   └── NSTextField+ColumnItem.swift
│   │   │   │   ├── Model
│   │   │   │   │   └── TableColumnItem.swift
│   │   │   │   └── TableDataDelegate
│   │   │   │   └── TableDataDelegate.swift
│   │   │   ├── DataStoreBO
│   │   │   │   └── DataStoreBO.swift
│   │   │   ├── MDatabase
│   │   │   │   ├── DBObject
│   │   │   │   │   ├── DAO.swift
│   │   │   │   │   ├── MDAO.swift
│   │   │   │   │   ├── MDatabase.swift
│   │   │   │   │   └── MModel.swift
│   │   │   │   ├── Meta
│   │   │   │   │   ├── DatabaseInfo.swift
│   │   │   │   │   ├── FieldInfo.swift
│   │   │   │   │   ├── MDatabase+Meta.swift
│   │   │   │   │   ├── TableInfo.swift
│   │   │   │   │   └── TypeKit.swift
│   │   │   │   └── String+Regex.swift
│   │   │   ├── MulticastDelegate
│   │   │   │   └── TableListSelectionState.swift
│   │   │   └── TreeViewDataDelegate
│   │   │   ├── TreeNodeModel.swift
│   │   │   └── TreeViewDataDelegate.swift
│   │   ├── Controllers
│   │   │   ├── Browse
│   │   │   │   ├── TableBrowseViewController.swift
│   │   │   │   └── TableBrowseViewDelegate.swift
│   │   │   ├── Main
│   │   │   │   ├── AppMainSplitViewController.swift
│   │   │   │   ├── AppMainSplitViewController.xib
│   │   │   │   ├── AppMainTabViewController.swift
│   │   │   │   └── AppMainWindowController.swift
│   │   │   ├── Preferences
│   │   │   │   ├── PreferencesViewController.swift
│   │   │   │   └── PreferencesWindowController.swift
│   │   │   ├── Query
│   │   │   │   ├── TableQueryViewController1.xib
│   │   │   │   ├── TableQueryViewController.swift
│   │   │   │   └── TableQueryViewController.xib
│   │   │   ├── Schema
│   │   │   │   └── TableSchemaViewController.swift
│   │   │   └── TableList
│   │   │   ├── TableListViewController.swift
│   │   │   ├── TableListViewController.xib
│   │   │   ├── TableListViewDelegate.swift
│   │   │   └── TableListView.swift
│   │   ├── Info.plist
│   │   ├── MacDev.sqlite
│   │   ├── SQLiteApp-Bridging-Header.h
│   │   └── Vendor
│   │   ├── fmdb
│   │   │   ├── FMDatabaseAdditions.h
│   │   │   ├── FMDatabaseAdditions.m
│   │   │   ├── FMDatabase.h
│   │   │   ├── FMDatabase.m
│   │   │   ├── FMDatabasePool.h
│   │   │   ├── FMDatabasePool.m
│   │   │   ├── FMDatabaseQueue.h
│   │   │   ├── FMDatabaseQueue.m
│   │   │   ├── FMDB.h
│   │   │   ├── FMResultSet.h
│   │   │   ├── FMResultSet.m
│   │   │   └── MDatabase-Bridging-Header.h
│   │   └── GCDMulticastDelegate
│   │   ├── GCDMulticastDelegate.h
│   │   └── GCDMulticastDelegate.m
│   ├── SQLiteAppLogicArchitecture.png
│   └── SwiftSQLiteApp.xcodeproj
│   ├── project.pbxproj
│   ├── project.xcworkspace
│   │   ├── contents.xcworkspacedata
│   │   └── xcuserdata
│   │   ├── idevfans.xcuserdatad
│   │   │   └── UserInterfaceState.xcuserstate
│   │   └── zhaojw.xcuserdatad
│   │   └── UserInterfaceState.xcuserstate
│   └── xcuserdata
│   ├── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   │   └── Breakpoints_v2.xcbkptlist
│   │   └── xcschemes
│   │   ├── SwiftSQLiteApp.xcscheme
│   │   └── xcschememanagement.plist
│   └── zhaojw.xcuserdatad
│   ├── xcdebugger
│   │   └── Breakpoints_v2.xcbkptlist
│   └── xcschemes
│   └── xcschememanagement.plist
└── __MACOSX
└── macOSwift4.0.3-Ebook-Demo
├── Chapter 01 Preparation
│   └── HelloWorld
│   └── HelloWorld
│   ├── Assets.xcassets
│   │   └── AppIcon.appiconset
│   └── Base.lproj
├── Chapter 02 Window
│   ├── Window
│   │   ├── Window
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── Window.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   └── WindowCenter
│   └── WindowCenter
│   └── Assets.xcassets
│   └── AppIcon.appiconset
├── Chapter 03 View&ScrollView
│   ├── NSEffectView
│   │   └── WindowLoginEffect
│   │   └── WindowLogin
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   ├── Base.lproj
│   │   └── Controllers
│   ├── ResponderChain
│   │   ├── ResponderChain
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── ResponderChain.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   ├── ScrollView
│   │   ├── ScrollView
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── ScrollView.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   └── View
│   ├── View
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── Base.lproj
│   └── View.xcodeproj
│   ├── project.xcworkspace
│   │   └── xcuserdata
│   └── xcuserdata
│   └── idevfans.xcuserdatad
│   ├── xcdebugger
│   └── xcschemes
├── Chapter 04 Controlls
│   ├── 4.10 NSSegmentedControl
│   │   ├── NSSegmentedControl
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   ├── NSSegmentedControlSize
│   │   │   └── NSSegmentedControlSize
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSSegmentedControl.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   ├── 4.11 NSComboBox
│   │   ├── NSComboBox
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSComboBox.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   ├── 4.12 NSPopUpButton
│   │   ├── NSPopUpButton
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSPopUpButton.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   ├── 4.13 NSSlider
│   │   ├── NSSlider
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSSlider.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   ├── 4.14 NSDatePicker
│   │   ├── NSDatePicker
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSDatePicker.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   ├── 4.15 NSStepper
│   │   ├── NSStepper
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSStepper.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   ├── 4.16 NSProgressIndicator
│   │   ├── NSProgressIndicator
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSProgressIndicator.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   ├── 4.17 NSImageView
│   │   ├── NSImageView
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSImageView.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   ├── 4.18 NSBox
│   │   ├── NSBox
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSBox.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   ├── 4.19 NSSplitView
│   │   ├── NSSplitView
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSSplitView.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   ├── 4.20 NSCollectionView
│   │   ├── NSCollectionView
│   │   │   ├── NSCollectionView
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Base.lproj
│   │   │   └── NSCollectionView.xcodeproj
│   │   │   ├── project.xcworkspace
│   │   │   │   └── xcuserdata
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   │   └── xcschemes
│   │   ├── NSCollectionViewCode
│   │   │   ├── NSCollectionViewCode
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Base.lproj
│   │   │   └── NSCollectionViewCode.xcodeproj
│   │   │   ├── project.xcworkspace
│   │   │   │   └── xcuserdata
│   │   │   │   └── idevfans.xcuserdatad
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   └── xcschemes
│   │   ├── NSCollectionViewDataSource
│   │   │   ├── NSCollectionViewDataSource
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Base.lproj
│   │   │   └── NSCollectionViewDataSource.xcodeproj
│   │   │   ├── project.xcworkspace
│   │   │   │   └── xcuserdata
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   │   └── xcschemes
│   │   └── NSCollectionViewHeadFoot
│   │   └── NSCollectionViewHeadFoot
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── Base.lproj
│   ├── 4.21 NSTabView
│   │   ├── NSTabLessView
│   │   │   └── NSTabLessView
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSTabView
│   │   ├── NSTabView
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSTabView.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   ├── 4.22 NSPopover
│   │   ├── NSPopover
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSPopover.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   ├── 4.2 ResponderChain
│   │   ├── ResponderChain
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── ResponderChain.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   ├── 4.3 NSTextField
│   │   ├── NSTextField
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSTextField.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   ├── 4.4 NSTextView
│   │   ├── NSTextView
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSTextView.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   ├── 4.5 NSSearchField
│   │   ├── NSSearchField
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSSearchField.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   ├── 4.6 Label
│   │   ├── Label
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── Label.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   ├── 4.7 NSButton
│   │   ├── ImageButton
│   │   │   └── ImageButton
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   ├── NSButton
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSButton.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   ├── 4.8 CheckBox
│   │   ├── CheckBox
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── CheckBox.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   └── 4.9 Radio
│   ├── Radio
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── Base.lproj
│   └── Radio.xcodeproj
│   ├── project.xcworkspace
│   │   └── xcuserdata
│   └── xcuserdata
│   └── idevfans.xcuserdatad
│   ├── xcdebugger
│   └── xcschemes
├── Chapter 05 Alert&Panel
│   ├── NSAlert
│   │   ├── NSAlert
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSAlert.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   ├── NSOpenPanel
│   │   ├── NSOpenPanel
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSOpenPanel.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   ├── NSPanel
│   │   ├── NSPanel
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSPanel.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   └── SingleXibPanel
│   └── SingleXibPanel
│   └── Assets.xcassets
│   └── AppIcon.appiconset
├── Chapter 06 ToolBar&Menu
│   ├── NSMenu
│   │   ├── NSMenu
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSMenu.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   ├── NSStatusBar
│   │   ├── NSStatusBar
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSStatusBar.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   └── NSToolbar
│   ├── NSToolbar
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── Base.lproj
│   └── NSToolbar.xcodeproj
│   ├── project.xcworkspace
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   └── xcuserdata
│   └── idevfans.xcuserdatad
│   ├── xcdebugger
│   └── xcschemes
├── Chapter 07 TableView&TreeView
│   ├── NSOutlineView
│   │   ├── NSOutlineView
│   │   │   ├── Assets.xcassets
│   │   │   │   ├── AppIcon.appiconset
│   │   │   │   ├── Minus.imageset
│   │   │   │   └── Plus.imageset
│   │   │   └── Base.lproj
│   │   └── NSOutlineView.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   └── NSTableView
│   ├── CustomTableView
│   │   └── CustomTableView
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── Base.lproj
│   ├── NSTableView
│   │   ├── NSTableView
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSTableViewCellBased.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   ├── NSTableViewBinding
│   │   ├── NSTableViewBinding
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSTableViewBinding.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   ├── NSTableViewCreatedByCode
│   │   ├── NSTableViewCreatedByCode
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSTableViewCreatedByCode.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   ├── NSTableViewCustomBackgroud
│   │   └── NSTableViewCustomBackgroud
│   │   └── Assets.xcassets
│   │   └── AppIcon.appiconset
│   ├── NSTableViewDragDrop
│   │   ├── NSTableViewDragDrop
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSTableViewDragDrop.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   └── NSTableViewViewBased
│   ├── NSTableViewViewBased
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── Base.lproj
│   └── NSTableViewViewBased.xcodeproj
│   ├── project.xcworkspace
│   │   └── xcuserdata
│   └── xcuserdata
│   └── idevfans.xcuserdatad
│   └── xcschemes
├── Chapter 08 AutoLayout
│   ├── AutoLayout
│   │   └── AutoLayout
│   │   └── Assets.xcassets
│   │   └── AppIcon.appiconset
│   ├── AutoLayoutDemo
│   │   └── AutoLayoutDemo
│   │   └── Assets.xcassets
│   │   └── AppIcon.appiconset
│   ├── AutolayoutManySolution
│   │   └── AutolayoutManySolution
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── Base.lproj
│   ├── NSScrollViewAutolayout
│   │   └── NSScrollViewAutolayout
│   │   └── Assets.xcassets
│   │   └── AppIcon.appiconset
│   └── UseAutolayoutByCode
│   └── UseAutolayoutByCode
│   ├── Assets.xcassets
│   │   └── AppIcon.appiconset
│   └── Base.lproj
├── Chapter 09 NSWindowController
│   ├── NSWindowArchitecture
│   │   ├── NSWindowArchitecture
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSWindowArchitecture.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   ├── NSWindowController
│   │   ├── NSWindowController
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSWindowController.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   ├── NSWindowControllerWithXib
│   │   ├── NSWindowControllerWithXib
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSWindowControllerWithXib.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   └── WindowSwitch
│   ├── WindowSwitch
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── Base.lproj
│   └── WindowSwitch.xcodeproj
│   ├── project.xcworkspace
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   └── xcuserdata
│   └── idevfans.xcuserdatad
│   └── xcschemes
├── Chapter 10 NSViewController
│   ├── 10.1 NSViewController
│   │   ├── 10.1.5 ChangeView
│   │   │   ├── ChangeView
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Base.lproj
│   │   │   └── ChangeView.xcodeproj
│   │   │   ├── project.xcworkspace
│   │   │   │   └── xcuserdata
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   └── xcschemes
│   │   ├── 10.1.6 NSViewControllerTransition
│   │   │   ├── NSViewControllerTransition
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Base.lproj
│   │   │   └── NSViewControllerTransition.xcodeproj
│   │   │   ├── project.xcworkspace
│   │   │   │   └── xcuserdata
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   └── xcschemes
│   │   ├── CreateViewController
│   │   │   ├── CreateViewController
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Base.lproj
│   │   │   └── CreateViewController.xcodeproj
│   │   │   ├── project.xcworkspace
│   │   │   │   └── xcuserdata
│   │   │   │   └── idevfans.xcuserdatad
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   └── xcschemes
│   │   ├── NSViewController
│   │   │   ├── NSViewController
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Base.lproj
│   │   │   └── NSViewController.xcodeproj
│   │   │   ├── project.xcworkspace
│   │   │   │   └── xcuserdata
│   │   │   │   └── idevfans.xcuserdatad
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   └── xcschemes
│   │   └── ViewController
│   │   ├── ViewController
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── ViewController.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   ├── 10.2 NSTabViewController
│   │   ├── 10.2.1 NSTabViewController
│   │   │   ├── NSTabViewController
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Base.lproj
│   │   │   └── NSTabViewController.xcodeproj
│   │   │   ├── project.xcworkspace
│   │   │   │   └── xcuserdata
│   │   │   │   └── idevfans.xcuserdatad
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   └── xcschemes
│   │   ├── 10.2.2 NSTabViewControllerXib
│   │   │   ├── NSTabViewControllerXib
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Base.lproj
│   │   │   └── NSTabViewControllerXib.xcodeproj
│   │   │   ├── project.xcworkspace
│   │   │   │   └── xcuserdata
│   │   │   │   └── idevfans.xcuserdatad
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   │   └── xcschemes
│   │   └── 10.2.3 NSTabViewControllerStoryboard
│   │   ├── NSTabViewControllerStoryboard
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSTabViewControllerStoryboard.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   ├── 10.3 NSSplitViewController
│   │   ├── CollapseSplitView
│   │   │   └── CollapseSplitView
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   ├── NSSplitVCCodeCreateDemo
│   │   │   ├── NSSplitVCCodeCreateDemo
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Base.lproj
│   │   │   └── NSSplitVCCodeCreateDemo.xcodeproj
│   │   │   ├── project.xcworkspace
│   │   │   │   └── xcuserdata
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   │   ├── xcdebugger
│   │   │   └── xcschemes
│   │   ├── NSSplitViewCollapse
│   │   │   ├── NSSplitViewCollapse
│   │   │   │   ├── Assets.xcassets
│   │   │   │   │   └── AppIcon.appiconset
│   │   │   │   └── Base.lproj
│   │   │   └── NSSplitViewCollapse.xcodeproj
│   │   │   ├── project.xcworkspace
│   │   │   │   └── xcuserdata
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   │   └── xcschemes
│   │   └── NSSplitViewControllerDemo
│   │   ├── NSSplitViewControllerDemo
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSSplitViewControllerDemo.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   ├── 10.4
│   │   ├── PureCodeApp
│   │   │   └── PureCodeApp
│   │   │   └── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   ├── PureCodeFramework
│   │   │   └── PureCodeFramework
│   │   │   └── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── PureCodeStoryboard
│   │   └── PureCodeStoryboard
│   │   └── Assets.xcassets
│   │   └── AppIcon.appiconset
│   ├── 10.5
│   │   ├── 10.5.1 WindowLogin
│   │   │   └── WindowLogin
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   ├── Base.lproj
│   │   │   └── Controllers
│   │   ├── 10.5.2 WindowLogin
│   │   │   └── WindowLogin
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   ├── Base.lproj
│   │   │   └── Controllers
│   │   └── 10.5.3 WindowLogin
│   │   ├── WindowLoginEffect
│   │   │   └── WindowLogin
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   ├── Base.lproj
│   │   │   └── Controllers
│   │   ├── WindowLoginEffectByCode
│   │   │   └── WindowLogin
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   ├── Base.lproj
│   │   │   └── Controllers
│   │   ├── WindowLoginFilter
│   │   │   └── WindowLogin
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   ├── Base.lproj
│   │   │   └── Controllers
│   │   └── WindowLoginViewByCode
│   │   └── WindowLogin
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   ├── AutoLayout
│   │   ├── Base.lproj
│   │   └── Controllers
│   └── 10.6
│   ├── PageScrollView
│   │   ├── AutoLayoutX
│   │   ├── Images
│   │   └── PageScrollView
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── Base.lproj
│   ├── ScrollViewButtons
│   │   └── ScrollViewButtons
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   ├── AutoLayout
│   │   └── Base.lproj
│   └── ScrollViewHorizontalButtons
│   └── ScrollViewButtons
│   ├── Assets.xcassets
│   │   └── AppIcon.appiconset
│   ├── AutoLayout
│   └── Base.lproj
├── Chapter 11 Mouse & Keyboard Event
│   └── NSEvent
│   └── NSEvent
│   ├── Assets.xcassets
│   │   └── AppIcon.appiconset
│   └── Base.lproj
├── Chapter 12 UndoRedo
│   ├── ComputeUndoRedo
│   │   ├── ComputeUndoRedo
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── ComputeUndoRedo.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   └── NSUndoManager
│   ├── NSUndoManager
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── Base.lproj
│   └── NSUndoManager.xcodeproj
│   ├── project.xcworkspace
│   │   └── xcuserdata
│   └── xcuserdata
│   └── idevfans.xcuserdatad
│   └── xcschemes
├── Chapter 13 DragDrop
│   ├── DragDrop
│   │   ├── DragDrop
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── DragDrop.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   ├── FileDrag
│   │   ├── FileDrag
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── FileDrag.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   ├── NSOutlineViewDragDrop
│   │   ├── NSOutlineViewDragDrop
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSOutlineViewDragDrop.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   └── NSTableViewDragDrop
│   ├── NSTableViewDragDrop
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── Base.lproj
│   └── NSTableViewDragDrop.xcodeproj
│   ├── project.xcworkspace
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   └── xcuserdata
│   └── idevfans.xcuserdatad
│   ├── xcdebugger
│   └── xcschemes
├── Chapter 14 CocoaBindings
│   ├── KVBEmploee
│   │   ├── KVBEmploee
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   ├── Base.lproj
│   │   │   └── Emploee.xcdatamodeld
│   │   │   └── Emploee.xcdatamodel
│   │   └── KVBEmployee.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   ├── KVC
│   │   ├── KVC
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── KVC.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   ├── KVO
│   │   ├── KVO
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── KVO.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   ├── NSArrayController
│   │   ├── NSArrayController
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── NSArrayController.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   └── NSTreeController
│   ├── NSTreeController
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── Base.lproj
│   └── NSTreeController.xcodeproj
│   ├── project.xcworkspace
│   │   └── xcuserdata
│   └── xcuserdata
│   └── idevfans.xcuserdatad
│   └── xcschemes
├── Chapter 15 Bluetooth
│   ├── BluetoothCentral
│   │   ├── BluetoothCentral
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── BluetoothCentral.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   ├── BluetoothCentralIPhone
│   │   ├── BluetoothCentralIPhone
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── BluetoothCentralIPhone.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   └── BluetoothPeripheralOSX
│   ├── BluetoothPeripheralOSX
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── Base.lproj
│   └── BluetoothPeripheralOSX.xcodeproj
│   ├── project.xcworkspace
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   └── xcuserdata
│   └── idevfans.xcuserdatad
│   ├── xcdebugger
│   └── xcschemes
├── Chapter 16 Bonjour
│   ├── BonjourClient
│   │   ├── BonjourClient
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── BonjourClient.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   └── BonjourServer
│   ├── BonjourServer
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── Base.lproj
│   └── BonjourServer.xcodeproj
│   ├── project.xcworkspace
│   │   └── xcuserdata
│   └── xcuserdata
│   └── idevfans.xcuserdatad
│   └── xcschemes
├── Chapter 17 Services
│   └── SysServiceDemo
│   ├── SysServiceDemo
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── Base.lproj
│   └── SysServiceDemo.xcodeproj
│   ├── project.xcworkspace
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   └── xcuserdata
│   └── idevfans.xcuserdatad
│   ├── xcdebugger
│   └── xcschemes
├── Chapter 18 XPC
│   ├── XPCBidirectionDemo
│   │   ├── DHelper
│   │   ├── XPCBidirectionDemo
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── XPCBidirectionDemo.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   └── XPCDemo
│   ├── Helper
│   ├── XPCDemo
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── Base.lproj
│   └── XPCDemo.xcodeproj
│   ├── project.xcworkspace
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   └── xcuserdata
│   └── idevfans.xcuserdatad
│   ├── xcdebugger
│   └── xcschemes
├── Chapter 19 UserNotification
│   ├── LocalNotification
│   │   ├── LocalNotification
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── LocalNotification.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   └── PushNotification
│   ├── PushNotification
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── Base.lproj
│   └── PushNotification.xcodeproj
│   ├── project.xcworkspace
│   │   └── xcuserdata
│   └── xcuserdata
│   └── idevfans.xcuserdatad
│   ├── xcdebugger
│   └── xcschemes
├── Chapter 20 Document
│   ├── Doc
│   │   ├── Doc
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── Doc.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   ├── DocumentDemo
│   │   ├── DocumentDemo
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── DocumentDemo.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   ├── FileWrapper
│   │   ├── FileWrapper
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   └── Base.lproj
│   │   └── FileWrapper.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   └── PersonProfileDoc
│   ├── PersonProfileDoc
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── Base.lproj
│   └── PersonProfileDoc.xcodeproj
│   ├── project.xcworkspace
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   └── xcuserdata
│   └── idevfans.xcuserdatad
│   ├── xcdebugger
│   └── xcschemes
├── Chapter 21 iCloud
│   └── iCloud
│   └── iCloud
│   └── Assets.xcassets
│   └── AppIcon.appiconset
├── Chapter 22 CloudKit
│   └── CloudKitDemo
│   ├── CloudKitDemo
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── Base.lproj
│   └── CloudKitDemo.xcodeproj
│   ├── project.xcworkspace
│   │   └── xcuserdata
│   └── xcuserdata
│   └── idevfans.xcuserdatad
│   └── xcschemes
├── Chapter 23 CoreData
│   ├── ClassesManager
│   │   ├── ClassesManager
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   ├── Base.lproj
│   │   │   └── ClassesManager.xcdatamodeld
│   │   │   └── ClassesManager.xcdatamodel
│   │   └── ClassesManager.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   ├── School
│   │   ├── School
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   ├── Base.lproj
│   │   │   ├── School2.xcdatamodeld
│   │   │   └── School.xcdatamodeld
│   │   └── School.xcdatamodeld
│   │   └── School.xcdatamodel
│   ├── SchoolV2
│   │   ├── SchoolV2
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   ├── Base.lproj
│   │   │   └── School.xcdatamodeld
│   │   │   ├── SchoolV2.xcdatamodel
│   │   │   └── School.xcdatamodel
│   │   ├── SchoolV2.xcodeproj
│   │   │   ├── project.xcworkspace
│   │   │   │   └── xcuserdata
│   │   │   │   └── idevfans.xcuserdatad
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   │   └── xcschemes
│   │   └── School.xcdatamodeld
│   │   └── School.xcdatamodel
│   └── SchoolV3
│   ├── SchoolV2
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   ├── Base.lproj
│   │   └── School.xcdatamodeld
│   │   ├── SchoolV2.xcdatamodel
│   │   ├── SchoolV3.xcdatamodel
│   │   └── School.xcdatamodel
│   ├── SchoolV2_V3.xcmappingmodel
│   ├── SchoolV3.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   └── xcschemes
│   └── School.xcdatamodeld
│   └── School.xcdatamodel
├── Chapter 24 HTTP
│   ├── HTTP
│   │   └── HTTP
│   │   └── Assets.xcassets
│   │   └── AppIcon.appiconset
│   ├── HTTPClient
│   │   └── HTTPClient
│   │   └── Assets.xcassets
│   │   └── AppIcon.appiconset
│   ├── HTTPCookie
│   │   └── HTTPCookie
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── Base.lproj
│   └── HTTPFileDownUpload
│   └── HTTPFileDownUpload
│   └── Assets.xcassets
│   └── AppIcon.appiconset
├── Chapter 25 Thread
│   ├── GCD
│   │   └── GCD
│   │   └── Assets.xcassets
│   │   └── AppIcon.appiconset
│   ├── OperationQueue
│   │   └── OperationQueue
│   │   └── Assets.xcassets
│   │   └── AppIcon.appiconset
│   └── Thread
│   └── Thread
│   ├── Assets.xcassets
│   │   └── AppIcon.appiconset
│   └── Base.lproj
├── Chapter 26 RunLoop
│   ├── RunLoop
│   │   └── RunLoop
│   │   └── Assets.xcassets
│   │   └── AppIcon.appiconset
│   └── RunLoopiOS
│   └── RunLoopiOS
│   ├── Assets.xcassets
│   │   └── AppIcon.appiconset
│   └── Base.lproj
├── Chapter 27 CocoaDraw
│   ├── Chapter 27 CocoaDraw
│   │   └── CocoaDraw
│   │   └── CocoaDraw
│   │   └── Assets.xcassets
│   │   └── AppIcon.appiconset
│   └── CocoaDraw
│   └── CocoaDraw
│   └── Assets.xcassets
│   └── AppIcon.appiconset
├── Chapter 28 CoreAnimation
│   ├── CALayerDemo
│   │   └── CALayerDemo
│   │   └── Assets.xcassets
│   │   └── AppIcon.appiconset
│   └── CoreAnimation
│   └── CoreAnimation
│   └── Assets.xcassets
│   └── AppIcon.appiconset
├── Chapter 29 MultiDelegate
│   ├── BuddyMultiDelegateDemo
│   │   └── BuddyMultiDelegateDemo
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   ├── AutoLayoutX
│   │   ├── DAO
│   │   ├── DataStoreBO
│   │   ├── MDatabase
│   │   ├── Model
│   │   ├── Resources
│   │   │   ├── DB
│   │   │   └── images
│   │   └── Vendor
│   │   ├── fmdb
│   │   └── GCDMulticastDelegate
│   └── MultiDelegate
│   └── MultiDelegate
│   ├── Assets.xcassets
│   │   └── AppIcon.appiconset
│   └── Base.lproj
├── Chapter 30 Transformer
│   └── DataTransformer
│   ├── DataTransformer
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── Base.lproj
│   └── DataTransformer.xcodeproj
│   ├── project.xcworkspace
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   └── xcuserdata
│   └── idevfans.xcuserdatad
│   ├── xcdebugger
│   └── xcschemes
├── Chapter 31 Framework
│   ├── XXXBonjourNetWork
│   │   └── XXXBonjourNetWork
│   └── XXXBonjourNetWorkManagerTest
│   └── XXXBonjourNetWorkManagerTest
│   ├── Assets.xcassets
│   │   └── AppIcon.appiconset
│   └── Base.lproj
├── Chapter 32 Sandbox
│   └── SandboxFile
│   ├── SandboxFile
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── Base.lproj
│   └── SandboxFile.xcodeproj
│   ├── project.xcworkspace
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   └── xcuserdata
│   └── idevfans.xcuserdatad
│   ├── xcdebugger
│   └── xcschemes
├── Chapter 33 DataNavigation
│   └── DataNavigationView
│   ├── DataNavigationView
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   └── SnapKit
│   └── Masonry
├── Chapter 34 TableDataNavigationViewController
│   └── TableViewControllerDemo
│   ├── TableViewControllerDemo
│   │   ├── Assets.xcassets
│   │   │   ├── AppIcon.appiconset
│   │   │   ├── closeDB.imageset
│   │   │   ├── database.imageset
│   │   │   ├── first.imageset
│   │   │   ├── home.imageset
│   │   │   ├── last.imageset
│   │   │   ├── next.imageset
│   │   │   ├── openDB.imageset
│   │   │   ├── pre.imageset
│   │   │   ├── table.imageset
│   │   │   └── windowIcon.imageset
│   │   └── Base.lproj
│   └── TableViewControllerDemo.xcodeproj
│   ├── project.xcworkspace
│   │   └── xcuserdata
│   └── xcuserdata
│   └── idevfans.xcuserdatad
│   ├── xcdebugger
│   └── xcschemes
├── Chapter 35 AutoTools
│   ├── ImageAassetAutomator
│   │   ├── ImageAassetAutomator
│   │   │   ├── Assets.xcassets
│   │   │   │   ├── AppIcon.appiconset
│   │   │   │   └── DragImage.imageset
│   │   │   └── Base.lproj
│   │   └── ImageAassetAutomator.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   └── LocalizationTools
│   ├── Base.lproj
│   ├── en.lproj
│   ├── Flags
│   ├── fr.lproj
│   ├── ja.lproj
│   ├── LocalizationTools
│   │   ├── Assets.xcassets
│   │   │   ├── AppIcon.appiconset
│   │   │   ├── arches.imageset
│   │   │   ├── toolbar-add.imageset
│   │   │   ├── toolbar-refresh.imageset
│   │   │   ├── toolbar-remove.imageset
│   │   │   ├── Trans-ToolBar-Export.imageset
│   │   │   ├── Trans-ToolBar-Help.imageset
│   │   │   ├── Trans-ToolBar-Open.imageset
│   │   │   └── Trans-ToolBar-Trans.imageset
│   │   ├── Base.lproj
│   │   ├── fmdb
│   │   ├── NoodleLineNumberView
│   │   └── XcodeEditor
│   │   └── Utils
│   ├── LocalizationTools.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   └── nl.lproj
├── Chapter 36 BluetoothTools
│   ├── OpenMacI
│   │   ├── OpenMacI
│   │   │   ├── Assets.xcassets
│   │   │   │   ├── AppIcon.appiconset
│   │   │   │   └── MacColor.imageset
│   │   │   └── Base.lproj
│   │   └── OpenMacI.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   └── OpenMacX
│   ├── OpenMacX
│   │   ├── Assets.xcassets
│   │   │   ├── AppIcon.appiconset
│   │   │   ├── blue.imageset
│   │   │   └── openMacIcon.imageset
│   │   └── Base.lproj
│   └── OpenMacX.xcodeproj
│   ├── project.xcworkspace
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   └── xcuserdata
│   └── idevfans.xcuserdatad
│   ├── xcdebugger
│   └── xcschemes
├── Chapter 37 SQLiteDatabase
│   ├── FMDBEncrypt
│   │   ├── FMDBEncrypt
│   │   │   ├── Assets.xcassets
│   │   │   │   └── AppIcon.appiconset
│   │   │   ├── Base.lproj
│   │   │   └── fmdb
│   │   └── FMDBEncrypt.xcodeproj
│   │   ├── project.xcworkspace
│   │   │   └── xcuserdata
│   │   │   └── idevfans.xcuserdatad
│   │   └── xcuserdata
│   │   └── idevfans.xcuserdatad
│   │   ├── xcdebugger
│   │   └── xcschemes
│   └── MDatabase
│   ├── MDatabase
│   │   ├── Assets.xcassets
│   │   │   └── AppIcon.appiconset
│   │   ├── Base.lproj
│   │   ├── DMTemplateEngine
│   │   └── fmdb
│   └── MDatabase.xcodeproj
│   ├── project.xcworkspace
│   │   └── xcuserdata
│   └── xcuserdata
│   └── idevfans.xcuserdatad
│   ├── xcdebugger
│   └── xcschemes
└── Chapter 38 StartFirstApp
└── SwiftSQLiteApp
└── SQLiteApp
├── Assets.xcassets
├── Common
├── Components
│   ├── AutoLayoutX
│   ├── DataNavigationView
│   ├── DataNavigationViewController
│   │   ├── Controller
│   │   ├── Extension
│   │   └── TableDataDelegate
│   ├── DataStoreBO
│   ├── MDatabase
│   ├── MulticastDelegate
│   └── TreeViewDataDelegate
├── Controllers
│   ├── Browse
│   ├── Main
│   ├── Query
│   ├── Schema
│   └── TableList
└── Vendor
├── fmdb
└── GCDMulticastDelegate

3873 directories, 2805 files

标签:

实例下载地址

macOS应用开发基础教程实例源码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警