macOS 應用開發基礎教程

趙君衛 張帆

  • 出版商: 人民郵電
  • 出版日期: 2018-09-01
  • 定價: $648
  • 售價: 8.5$551
  • 語言: 簡體中文
  • 頁數: 586
  • 裝訂: 平裝
  • ISBN: 7115486409
  • ISBN-13: 9787115486400
  • 相關分類: Apple Developer
  • 立即出貨 (庫存 < 3)

買這商品的人也買了...

商品描述

本書是Swift版本的macOS應用開發教程。本書全面介紹和說明瞭macOS平臺中應用開發的系統控件,詳細闡述和探討了應用開發的常用組件、系統框架、應用沙盒處理、上架流程、生產力工具開發等內容,並配有豐富的示例講解。書中還介紹了幾個小型的演示項目,剖析了開發過程、開發思路和關鍵流程代碼,力求讓讀者從基礎知識和項目實踐等多個維度去理解和掌握macOS平臺的應用開發。
本書立足普及基本的macOS應用開發知識,力求每個知識點的講解都簡明扼要,並通過代碼示例演示讓讀者盡快學以致用,非常適合macOS應用開發的初學者閱讀。但是,本書中並沒有介紹Swift的基礎語法,閱讀本書需要讀者瞭解Swift的知識。

作者簡介

趙君衛(微博@劍指人心),中國早期的iOSkai發者,負責開發了zhu名的LBS交友App“飄信”,
曾擔任蘇寧易購移動技術團隊負責人、途牛金融移動技術總監;2014年開始接觸macOS應用開發,
獨立開發了macOS平台上UI設計工具AppX;創建了macOS應用開發網站macdev,
匯聚與macOS相關的開發資源,崇尚自動化開發的理念,打造先進的生產力工具。

張帆(微博@AB人生-東門吹牛西門吹雪),留美博士,
專注於計算機和互聯網技術在諸如信息安全、通信電子、醫療健康等特定行業的應用,
擅長iOS和.NET開發;曾在美國微軟總部和飛利浦醫療北美總部任職;入選浙江省“千人計劃”;
曾任新加坡國立大學訪問學者,現任浙江大學信息與電子工程學院和浙江大學網絡空間安全研究中心副教授,
同時也是新加坡科技設計大學訪問教授。

目錄大綱

第1章準備工作1 
1.1 Mac電腦1 
1.2 Xcode使用介紹1 
1.2.1 Xcode工作區2 
1.2.2 xib界面設計相關的工作區和菜單3 
1.3工程結構5 
1.3.1使用xib方式創建的工程5 
1.3 .2使用storyboard方式創建的工程11 

第2章窗口對象13 
2.1窗口界面的組成14 
2.2模態窗口16 
2.2.1模態窗口16 
2.2.2模態會話窗口16 
2.3編程控制窗口17 
2.3.1創建窗口對象17 
2.3.2窗口通知18 
2.3.3 NSWindow的contentView 18 
2.3.4設置窗口的image和title 19 
2.3.5設置窗口的背景顏色19 
2.3.6關閉窗口時終止應用19 
2.3.7在窗口標題區域增加視圖20 
2.3.8 NSWindow如何正確地保證居中顯示21 
2.3.9窗口顯示位置控制21 
2.3.10應用關閉後點擊Dock菜單再次打開應用21 
2.4窗口的創建和管理21 

第3章視圖和滾動條23 
3.1基本視圖23
3.1.1坐標系統23 
3.1.2 frame和bounds 24 
3.1.3坐標轉換25 
3.1.4視圖管理25 
3.1.5視圖查找25 
3.1.6視圖的autoSize控制25 
3.1.7視圖的layer屬性27 
3.1.8視圖繪製27 
3.1.9事件響應28 
3.1.10視圖的frame/bounds變化通知28 
3.2增效視圖29 
3.3滾動條視圖31 
3.3.1滾動條視圖工作原理31 
3.3.2用代碼創建滾動條視圖32 
3.3 .3滾動到zhi定的位置32 
3.3.4用代碼實現文本視圖滾動的示例33 
3.3.5滾動條的顯示控制34 

第4章基本控件35 
4.1控件的分類35 
4.2控件家族類圖譜35 
4.2.1 NSResponder 37 
4.2.2 NSView 38 
4.2.3 NSControl 38 
4.2.4 NSCell 38 
4.2.5小結39 
4.3文本框39 
4.3.1 UI屬性說明40 
4.3.2事件響應40 
4.3.3文本內容的讀取或修改41
4.3.4特殊按鍵響應處理41 
4.4文本視圖42 
4.4.1 UI屬性說明42 
4.4.2事件響應43 
4.4.3文本的格式化顯示43 
4.4.4文本框高度根據文字高度自適應增長44 
4.5文本搜索框44 
4.6文本標籤46 
4.6.1 UI屬性說明46 
4.6.2用代碼創建文本標籤46 
4.7按鈕48 
4.7.1 UI屬性說明48 
4.7.2事件響應48 
4.7.3連接事件49 
4.7.4用代碼創建按鈕49 
4.7.5圖片按鈕的創建49 
4.8複選框50 
4.8.1 UI屬性說明51 
4.8.2事件響應51 
4.9單選按鈕51 
4.9.1 UI屬性說明51 
4.9.2事件響應52 
4.10分段選擇控件52 
4.10.1 UI屬性說明53 
4.10.2事件響應53 
4.10.3分段大小的控制53 
4.10.4分段樣式風格的控制53 
4.11組合框54 
4.11.1 UI屬性說明54 
4.11.2事件響應55 
4.11.3動態增加列表內容55
4.11.4使用數據源和代理55 
4.12彈出式按鈕56 
4.12.1 UI屬性說明56 
4.12.2動態列表項配置56 
4.12.3事件響應57 
4.13滑桿57 
4.13.1屬性設置57 
4.13.2水平和垂直方向設置57 
4.13.3事件綁定58 
4.14日期選擇器58 
4.14.1 UI屬性說明58 
4.14.2獲取日期59 
4.14.3日期變化的事件59 
4.15步進器59 
4.15.1 UI屬性說明60 
4.15 .2事件響應60 
4.15.3文本框數據與步進器保持同步60 
4.16進度指示器60 
4.16.1 UI屬性說明61 
4.16.2啟動指示器動畫61 
4.16.3更新指示器進度61 
4.16.4停止指示器動畫61 
4.16.5用代碼創建進度指示器62 
4.17圖像視圖62 
4.17.1 UI屬性說明62 
4.17.2圓角處理62 
4.18分組框63 
4.18.1 UI屬性說明63 
4.18.2用代碼創建分組框63 
4.19分欄視圖64
4.19.1重要屬性和方法說明64 
4.19.2用代碼創建分欄視圖65 
4.19.3自定義分欄視圖樣式風格65 
4.19.4分欄視圖中的子視圖控制66 
4.19.5分欄視圖子視圖的隱藏和顯示68 
4.20集合視圖68 
4.20.1集合視圖的content 69 
4.20.2 NSCollectionViewItem 69 
4.20.3綁定模型到視圖70 
4.20.4使用數據源方式管理集合視圖71 
4.20.5實現集合視圖的高亮選擇73 
4.20.6集合視圖的背景設置75 
4.20.7集合視圖的佈局管理器75 
4.20.8設置集合視圖的頂部頭和底部尾77 
4.20.9用代碼創建集合視圖79 
4.21選項卡視圖79 
4.21 .1 UI屬性說明80 
4.21.2代理協議NSTabViewDelegate 80 
4.21.3動態增加選項卡80 
4.21.4用無邊風格的選項卡進行切換控制81 
4.22彈出式氣泡82 
4.22.1重要屬性82 
4.22.2使用示例83 

第5章面板和警告框84 
5.1面板84 
5.1.1 UI屬性說明85 
5.1.2顯示面板85
5.1.3隱藏面板86 
5.1.4文件打開面板86 
5.1.5文件保存面板88 
5.1.6顏色選擇面板88 
5.1.7字體選擇面板89 
5.2警告框89 
5.2.1 UI屬性說明89 
5.2.2添加按鈕90 
5.2.3使用示例90 
5.3使用獨立的xib文件創建面板類91 

第6章工具欄和菜單94 
6.1工具欄94 
6.1.1創建工具欄94 
6.1.2 UI屬性說明95 
6.1.3 NSToolbarItem的屬性說明96 
6.1.4事件響應96 
6.1.5創建非標準的工具欄項97 
6.1.6驗證工具欄項97 
6.1.7用代碼創建工具欄98 
6.1.8工具欄與窗口控制按鈕融合顯示99 
6.2菜單99 
6.2.1 UI屬性說明100 
6.2.2增加菜單101 
6.2.3彈出式菜單101 
6.2.4設置上下文菜單102 
6.2.5 Dock菜單102 
6.2.6用代碼創建菜單103 
6.2.7獲取應用默認的菜單104 
6.2.8菜單有效性驗證104 
6.3狀態條105
6.3.1 NSStatusBar類的對象關係105 
6.3.2 NSStatusBar的使用方式105 
6.3.3狀態條增加彈出視圖107 

第7章表視圖109 
7.1表視圖109 
7.1.1使用xib創建表格109 
7.1.2表格樣式設置112 
7.1.3表格數據顯示配置112 
7.1.4表格事件119 
7.1.5創建表格上下文菜單120 
7.1.6數據排序120 
7.1.7數據拖放121 
7.1.8表格數據獲取121 
7.1.9編輯表格內容121 
7.1.10動態增加/刪除表格行122 
7.1.11用代碼創建表格123 
7.1.12代碼控制選中行125 
7.1.13表格行選中顏色定制126 
7.2大綱視圖控件126 
7.2.1節點模型定義127 
7.2.2初始化模型數據128 
7.2.3實現數據源協議128 
7.2.4實現代理方法,綁定數據到節點視圖129 
7.2.5節點選擇的變化事件通知129 
7.2.6動態增加節點130 
7.2.7動態刪除節點130 
7.2.8代碼控制行的展開和選中131
7.2.9修改節點展開關閉的默認圖標132 
7.2.10鼠標右鍵上下文菜單133 

第8章自動佈局134 
8.1自動佈局的原理134 
8.1.1傳統的佈局134 
8.1.2自動佈局135 
8.2棧視圖137 
8.3 Xcode中的自動佈局設置138 
8.3.1 Stack 139 
8.3.2 Align 140 
8.3.3 Pin 140 
8.3.4 Resolve 141 
8.4自動佈局的多種解決方案141 
8.4.1一個問題的多種解決方案142 
8.4.2約束選擇的原則和建議144 
8.5自動佈局使用示例144 
8.5.1兩個視圖大小相同144 
8.5.2 3個View大小相同145 
8.5.3文本標籤和輸入框145 
8.5.4文本標籤動態字體和輸入框146 
8.5.5多行文本標籤和輸入框146 
8.5.6多行文本標籤動態字體和輸入框147 
8.5.7兩個視圖大小相同、水平方向的間距相同148 
8.5.8簡單的Stack View 149 
8.5.9複雜界面未使用棧視圖150 
8.5.10複雜界面使用多個嵌套棧視圖151 
8.6滾動條視圖使用自動佈局151
8.7通過代碼設置自動佈局約束153 
8.7.1使用NSLayoutConstraint類153 
8.7.2使用NSLayoutAnchor 155 
8.7.3使用VFL定義約束關係155 
8.7.4使用第三方庫AutoLayoutX 155 

第9章窗口控制器157 
9.1 xib中窗口的加載創建過程157 
9.2手工創建窗口需要注意的問題160 
9.3窗口控制器和窗口的關係161 
9.4將AppDelegate中窗口的管理功能分離161 
9.5窗口切換後對象失去焦點問題163 

第10章視圖控制器164 
10.1視圖控制器164 
10.1.1視圖生命週期過程165 
10.1.2創建視圖控制器的3種方式166 
10.1.3 representedObject屬性167 
10.1.4子視圖控制器管理168 
10.1.5兩個視圖控制器之間的切換方法169 
10.1.6 Storyboard中的視圖控制172 
10.1.7視圖中手勢識別174 
10.2選項卡控制器175 
10.2.1使用NSTabView創建選項卡視圖175 
10.2.2使用NSTabViewController管理選項卡視圖176
10.2.3使用Storyboard方式創建176 
10.2.4選項卡選中事件177 
10.3分欄視圖控制器178 
10.3.1控制器的幾個重要的屬性和方法178 
10.3.2 NSSplitViewItem 179 
10.3.3 NSSplitView 179 
10.3.4使用Storyboard創建分欄視圖控制器179 
10.3.5用代碼創建分欄視圖控制器180 
10.3.6可折疊的視圖控制181 
10.4視圖控制器與窗口控制器的關係183 
10.4.1視圖與窗口183 
10.4. 2視圖控制器與窗口控制器183 
10.4.3不依賴xib和storyboard,純代碼實現應用184 
10.5使用窗口控制器和視圖控制器實現簡單登錄流程186 
10.5.1登錄流程的基本工程實現186 
10.5.2代碼控制啟動的控制器190 
10.5.3登錄頁面使用效果美化190 
10.5.4登錄頁面純代碼實現192 
10.5.5整個工程純代碼實現195 
10.6滾動條視圖gao級用法195 
10.6.1滾動條視圖顯示多個按鈕195 
10.6.2滾動條視圖處理分頁滑動199 

第11章鼠標和鍵盤事件206 
11.1事件的分發過程206
11.2事件中的兩個核心類207 
11.2.1 NSResponder 207 
11.2.2 NSEvent 207 
11.3鼠標事件208 
11.3.1鼠標點擊208 
11.3.2鼠標拖放209 
11.3.3鼠標區域跟踪210 
11.3.4模擬鼠標點擊選中212 
11.4鍵盤事件213 
11.4.1快捷鍵213 
11.4.2控制鍵214 
11.5按鍵綁定事件215 
11.5.1系統綁定的按鍵事件215 
11.5.2文字輸入216 
11.6事件監控218 
11.7動作消息218 
11.8在視圖控制器中處理事件219 

第12章撤銷/重做操作220 
12.1撤銷/重做流程分析220 
12.2實現原理222 
12.3撤銷/重做動作的管理223 
12.3.1 NSUndoManager的創建223 
12.3.2註冊撤銷動作223 
12.3.3清除撤銷動作224 
12.3.4禁止註冊撤銷動作224 
12.3.5撤銷動作命名224 
12.3.6撤銷組224 
12.4撤銷棧的深度224
12.5撤銷/重做通知消息225 
12.6撤銷/重做編程示例225 

第13章拖放操作227 
13.1拖放開始227 
13.1.1拖放數據定義227 
13.1.2拖放的可視化圖像設置229 
13.1.3拖放源事件229 
13.1.4拖放源協議NSDraggingSource 230 
13.2拖放接收231 
13.2.1註冊接收的拖放類型231 
13.2.2拖放目標方協議231 
13.2.3拖放接收方處理過程231 
13.3拖放端到端編程232 
13.3.1拖放源類DragSourceView 232 
13.3.2拖放目標類233 
13.3.3視圖控制器中拖放源初始化235 
13.4常見的拖放示例236 
13.4.1文件拖放處理236 
13.4 .2表格視圖的拖放處理237 
13.4.3大綱視圖的數據拖放處理239 

第14章Cocoa數據綁定243 
14.1 KVC 243 
14.1.1 KVC屬性讀寫接口244 
14.1.2 KVC路徑訪問相關接口244 
14.1 .3批量屬性訪問接口244 
14.2 KVO 245 
14.2.1 KVO相關接口245
14.2.2手工管理KVO 246 
14.2.3 KVO的簡單例子247 
14.3 KVB 248 
14.3.1傳統的數據更新流程249 
14.3.2使用綁定技術簡化更新流程249 
14.3.3實現綁定依賴的關鍵點252 
14.3 .4 KVB綁定的處理流程253 
14.3.5使用NSArrayController管理數據254 
14.3.6使用NSTreeController管理數據256 

第15章藍牙框架261 
15.1藍牙數據交換流程261 
15.2藍牙框架中的相關類262 
15.2.1外圍設備相關263 
15.2.2數據中心相關263 
15.2.3服務相關263 
15.2.4特徵值相關263 
15.3外圍設備的工作流程263 
15.3.1系統初始化上電263 
15.3.2創建服務264 
15.3.3創建特徵值264 
15.3.4服務與特徵值關聯264 
15.3.5發布服務264 
15.3.6廣播服務265 
15.3.7數據讀寫請求265 
15.3.8訂閱請求處理266 
15.4數據中心工作流程266 
15.4.1系統初始化上電266
15.4.2搜索外圍設備267 
15.4.3建立連接267 
15.4.4查詢服務267 
15.4.5查詢服務特徵值267 
15.4.6服務特徵讀請求268 
15.4.7服務特徵值寫268 
15.4.8服務訂閱269 

第16章Bonjour協議270 
16.1 Bonjour服務命名規則271 
16.2 Bonjour協議API棧271 
16.3 Bonjour核心流程271 
16.3.1服務發布272 
16.3.2服務發現272 
16.3.3地址解析273 
16.4 Bonjour編程273 
16.4.1服務發布273 
16.4.2服務發現274 
16.4.3直接使用Bonjour進行數據發送274 
16.4.4需要注意的問題275 

第17章系統服務276 
17.1服務處理流程277 
17.2服務定義277 
17.3服務提供方編程279 
17.3.1實現服務功能接口279 
17.3.2聲明服務280 
17.3.3註冊服務281 
17.3.4測試服務功能281 
17.4服務使用方編程282
17.4.1註冊數據類型282 
17.4.2菜單有效性校驗282 
17.4.3發送數據到剪貼板283 
17.4.4從剪貼板讀取結果數據283 

第18章XPC服務284 
18.1 XPC架構284 
18.2 XPC編程實現285 
18.2.1 XPC服務接口對象285 
18.2.2 XPC服務方編程285 
18.2.3 XPC服務請求方編程287 
18.2.4 XPC服務接口反向調用288 

第19章消息推送290 
19.1本地消息通知290 
19.1.1註冊本地消息通知290 
19.1.2實現本地消息代理協議方法291 
19.1.3取消本地通知291 
19.1.4程序控制發送消息通知292 
19.2遠程消息通知292 
19.2.1推送消息的處理流程292 
19.2.2請求消息推送註冊293 
19.2.3設備293 
19.2.4推送消息接收293 
19.2.5提供者消息發送294 
19.2.6消息格式294 
19.2.7 Feedback服務295 
19.2.8消息推送環境的證書配置295 
19.2.9推送消息的發送296

第20章多文檔應用298 
20.1文檔應用中的關鍵對象298 
20.1.1文檔控制器298 
20.1.2文檔模型299 
20.1.3文檔窗口控制器299 
20.2創建基於文檔的工程299 
20.2.1 Document Types 300 
20.2 .2 Exported UTIs 301 
20.2.3文檔編程模板工程301 
20.3 wrapper方式讀取文件303 
20.3.1創建NSFileWrapper管理文件304 
20.3.2從NSFileWrapper實例讀取內容304 
20.3.3支持NSFileWrapper文件的工程配置305 
20.3. 4完整的FileWrapper工程示例305 
20.4文檔處理流程309 
20.4.1新建文檔流程309 
20.4.2打開文檔流程309 
20.4.3保存文檔流程310 
20.4.4導出文件流程310 
20.5文檔應用開發步驟310 
20.6文檔應用中的撤銷/重做支持311 
20.7文檔應用管理個人檔案312 
20.7.1個人檔案數據模型312 
20.7.2文檔數據以普通文件方式存儲313 
20.7.3文檔數據以wrapper方式存儲316

第21章iCloud同步320 
21.1容器320 
21.2 iCloud數據存儲321 
21.2.1 iCloud文檔數據處理流程321 
21.2.2 iCloud文檔本地目錄323 
21.3鍵值存儲324 
21.3.1鍵值存儲接口324 
21.3.2鍵值存儲限制324 
21.3.3鍵值存儲數據變化通知325 
21.3.4鍵值存儲處理流程325 
21.4 iCloud開發前準備工作325 
21.5容器數據在多個App間共享327 
21.5.1鍵值存儲數據的App間共享訪問327 
21.5.2文檔數據的App間共享訪問328 
21.6數據衝突328 
21.6.1鍵值數據衝突328 
21.6.2文檔類型數據衝突328 

第22章CloudKit 329 
22.1使用Dashboard後台管理數據330 
22.2容器共享332 
22.3創建記錄結構333 
22.4 CloudKit數據操作334 
22.4.1保存數據334 
22.4.2刪除數據336 
22.4.3查詢數據336 
22.4.4數據關聯reference 337 
22.4.5批量查詢數據操作337
22.5訂閱數據變化通知338 
22.5.1創建訂閱338 
22.5.2註冊消息推送338 
22.6生產環境部署339 

第23章Core Data 340 
23.1 Core Data對象棧341 
23.2在項目中使用Core Data 341 
23.2.1數據增加345 
23.2.2數據刪除346 
23.2.3數據修改346 
23.2.4數據查詢346 
23.3模型間關係347 
23.3.1一對一347 
23.3.2一對多348 
23.3.3多對多348 
23.4使用Bindings綁定管理對象350 
23.5撤銷/重做操作的支持353 
23.6版本升級遷移354 
23.6.1輕量級遷移354 
23.6.2基於模型映射的遷移357 

第24章HTTP網絡編程360 
24.1簡單的數據請求361 
24.1.1使用系統默認方式創建URLSession 361 
24.1.2使用自定義的代理方法創建URLSession 362 
24.1.3創建URLSession使用POST方式傳遞數據363 
24.2文件下載364 
24.2.1創建下載任務364
24.2.2實現下載代理協議364 
24.3文件上傳365 
24.3.1流式文件上傳客戶端代碼編寫365 
24.3.2表單文件上傳客戶端代碼編寫366 
24.4緩存368 
24.5 Cookie管理369 
24.5.1 Cookie編程370 
24.5. 2 Cookie的一些使用場景370 
24.6斷點續傳371 
24.7基於URLSessionDataTask封裝的網絡處理工具類372 
24.7.1網絡處理工具類實現分析372 
24.7.2 HTTPClient工具類實現373 

第25章多線程377 
25.1 GCD 377 
25.1.1分發隊列377 
25.1.2 GCD多線程編程378 
25.1.3 GCD實際使用的例子382 
25.2 OperationQueue 384 
25.2.1 BlockOperation 384 
25.2.2 Operation 385 
25.2.3設置任務間的依賴386 
25.2.4設置Operation執行完的回調387 
25.2.5取消任務387 
25.2.6暫停或恢復隊列的執行387 
25.2.7任務執行的優先級387 
25.3 Thread 388
25.3.1線程創建方式388 
25.3.2 Thread類中的關鍵方法和屬性389 
25.3.3線程中的共享資源保護390 

第26章事件循環393 
26.1 RunLoop的模式393 
26.2 RunLoop類394 
26.3 RunLoop的活動狀態395 
26.4定時器396 
26.5 RunLoop中的輸入源397 
26.6 RunLoop事件處理流程398 
26.7 RunLoop使用場景398 

第27章繪圖技術399 
27.1繪圖上下文399 
27.2坐標系統399 
27.2.1笛卡兒坐標399 
27.2.2屏幕坐標與本地坐標400 
27.2.3坐標變換400 
27.3顏色與透明度403 
27.3.1顏色模型和顏色空間403 
27.3.2創建顏色403 
27.3.3在繪圖上下文中使用顏色404 
27.3.4從系統顏色面板獲取顏色的方式404 
27.4繪圖狀態405 
27.5圖像406 
27.5.1圖像內部緩存406 
27.5.2圖像大小406 
27.5.3圖像的坐標系統406 
27.5.4圖像繪製方法407
27.5.5圖像創建或加載407 
27.5.6屏幕圖像的捕獲408 
27.5.7圖像的格式轉換409 
27.6陰影和漸變409 
27.6.1陰影409 
27.6.2漸變410 
27.7文本繪製413 
27.7.1文本屬性參數413 
27.7.2 String的繪製方法413 
27.8使用路徑繪圖414 
27.8.1路徑的樣式415 
27.8.2點418 
27.8.3線418 
27.8.4多邊形418 
27.8.5矩形418 
27.8.6圓角矩形419 
27.8.7圓和橢圓419 
27.8.8弧形419 
27.8.9貝塞爾曲線420 
27.9繪圖的性能優化420 

第28章核心動畫422 
28.1動畫的產生過程422 
28.2層423 
28.2.1視圖和層423 
28.2.2層的坐標系統424 
28.2.3層的時間系統425 
28.2.4層的對象樹425 
28.2.5層級管理方法426 
28.2.6層的內容426 
28.2.7層的深度427
28.2.8層的透視投影427 
28.3層動畫428 
28.3.1隱式動畫428 
28.3.2顯式動畫429 
28.4核心動畫對象430 
28.4.1動畫相關類431 
28.4.2協議433 
28.4.3輔助類435 
28.4 .4事務436 
28.5動畫的控制437 
28.5.1隱式動畫的產生過程437 
28.5.2隱式動畫的動作定義438 
28.5.3動畫結束通知438 
28.5.4動畫的暫停和恢復439 
28.6 macOS中的屬性動畫439 
28.6.1屬性動畫440 
28.6.2動畫上下文對象440 
28.6.3自動佈局動畫441 
28.7系統動畫與核心動畫的對比441 
28.8動畫編程示例442 
28.8.1關鍵幀動畫442 
28.8.2分組動畫444 
28.8 .3轉場動畫444 
28.9動畫性能445 
28.10系統專有層446 
28.10.1漸變層446 
28.10.2形狀層447 
28.10.3文本層448 
28.10.4分片層448
28.10.5副本層449 
28.10.6發射層450 
28.10.7變換層452 

第29章多代理455 
29.1多代理與代理和通知的比較455 
29.1.1代理方式實現455 
29.1.2通知456 
29.1.3多代理456 
29.2多代理的實現457 
29.2.1 Objective-C中多代理實現技術457 
29.2.2使用消息轉發機制進行優化457 
29.2.3 XMPPFramework 458 
29.3聊天列表示例459 
29.3.1主要的視圖控制器459 
29.3 .2聯繫人模型類460 
29.3.3多代理管理類460 
29.3.4多代理的註冊461 
29.3.5多代理的通知462 

第30章數據轉換464 
30.1轉換器基類465 
30.2系統實現的轉換器465 
30.3綁定中使用的轉換器466 
30.3.1類型轉換器的實現和註冊466 
30.3.2實現模型類467 
30.3.3綁定Combo Box控件到模型類468 
30.4實現自定義轉換器的步驟469 
30.5使用轉換器分離數據轉換邏輯469

第31章框架471 
31.1框架與靜態庫471 
31.2創建框架工程471 
31.2.1接口定義471 
31.2.2頭文件引用聲明472 
31.2.3使用框架473 
31.2.4框架的加載路徑476 
31.2.5框架的簽名問題478 

第32章應用沙盒化479 
32.1 macOS沙盒機制479 
32.2應用沙盒配置信息479 
32.3文件沙盒編程481 
32.3.1設計界面481 
32.3.2 App啟動處理481 
32.3.3打開文件處理流程482 
32.3.4保存文件483 
32.3.5應用沙盒配置483 
32.3.6作用域安全的書籤484 
32.3.7保存打開的文件URL的書籤484 
32.3.8應用啟動時通過URL的書籤獲取文件shou權484 

第33章數據導航視圖487 
33.1 DataNavigationItem的設計487 
33.1.1 DataNavigationItem基類488 
33.1.2 DataNavigationButtonItem 488 
33.1.3 DataNavigationTextItem 488
33.1.4 DataNavigationFlexibleItem 489 
33.2 DataNavigationView接口和屬性489 
33.2.1接口489 
33.2.2內部屬性489 
33.3 DataNavigationView代碼實現490 
33.3.1 item配置490 
33.3.2創建視圖491 
33.3.3自動佈局492 
33.3.4更新文本視圖的方法494 
33.4使用DataNavigationView 494 

第34章表格數據管理控制器497 
34.1表格列的動態配置497 
34.1.1表列定義的模型498 
34.1.2 NSTableColumn類的擴展499 
34.1.3 NSTableView類的擴展499 
34.1 .4代碼動態配置表列的表數據導航控制器500 
34.2實現用代碼創建的表格和用xib創建表格的兼容504 
34.3表格的數據代理505 
34.3.1數據集管理操作接口505 
34.3.2數據源實現507 
34.3.3動態創建表格內容的數據代理方法507 
34.3.4表內容的編輯處理511 
34.3.5 TableDataDelegate的使用512 
34.4數據列排序513
34.5數據行拖放交換順序514 
34.6數據分頁顯示控制515 
34.6.1分頁控制器515 
34.6.2分頁導航視圖517 
34.6.3分頁數據獲取519 
34.7表格數據的增刪編輯操作519 
34.7.1增加數據519 
34.7 .2刪除數據520 
34.7.3編輯表數據521 

第35章自動化小工具522 
35.1圖片資源適配自動化工具522 
35.1.1實現思路522 
35.1.2工程實現524 
35.2國際化527 
35.2.1 App語言國際化的過程527 
35.2.2自動化的思路530 
35.2.3 Xcode工程文件的編輯和修改531 

第36章iPhone利用藍牙控制Mac 534 
36.1控制的主要流程分析534 
36.2 macOS服務器端535 
36.2.1 XXXPeripheralService服務類535 
36.2 .2 macOS端界面開發537 
36.2.3 Mac鎖屏狀態通知538 
36.2.4控制Mac電腦的系統命令和腳本539 
36.2.5 macOS端接收iOS端的命令處理540 
36.3 iOS控制端541
36.3.1 XXXCentralClient類541 
36.3.2 iOS界面開發543 

第37章SQLite數據庫編程546 
37.1 FMDB介紹546 
37.2數據庫操作接口封裝548 
37.2.1數據庫管理對象548 
37.2.2數據訪問對象549 
37.2.3 MDAO對象551 
37.2.4數據模型對象552 
37.2.5具體使用553 
37.3數據庫加密554 
37.3.1獲取支持加密的SQLite3版本554 
37.3.2加密數據庫555 
37.3.3操作加密數據庫556 
37.4獲取SQLite元數據556 
37.5模板引擎559 
37.5.1 Xcode中的模板560 
37.5.2模板引擎處理流程560 
37.6表模型自動化代碼生成561 
37.6.1模板文件定義561 
37.6.2代碼實現562 

第38章開發一個完整的macOS應用564 
38.1制定目標564 
38.2開發自己的應用564 
38.3主界面設計564 
38.3.1主窗口控制器565 
38.3.2分欄頁面控制器566
38.3.3左邊導航列表頁的設計與實現567 
38.3.4分欄右部界面570 
38.3.5詳細界面設計571 
38.4工具欄設計572 
38.5菜單設計574 
38.5.1系統菜單574 
38.5.2上下文菜單575 
38.6應用偏好設置577 
38.7頁面控制器的核心流程578 
38.8用戶體驗的一點改進582 
38.9發布應用準備583 
38.9.1發佈到非應用商店渠道583 
38.9.2發佈到應用商店584 

後記586