MAC OSX APP 開發入門篇
https://blog.csdn.net/star1587335/article/details/88723640
轉載自(https://macdev.io/ebook/start.html)
準備工作
Mac電腦
Mac開發準備工作,Mac電腦不必說了
只有用真正的Mac電腦才可以提升,薰陶你的審美,你才可能做出美的有價值的使用者產品。如果你使用很普通的磨具想鍛造出一把鋒利的刀劍,你的力量,審美,意識,習慣都無法成就你成為一個偉大的工程師吧。
Mac系統能提升你的工作效率,大大改善你的工作心情。只要你不去非官方的應用商店去下載App,你很少有各種病毒亂彈窗的煩惱,也不會遇到系統奔潰藍屏的事兒。開機都是秒級的,會為你省的更多時間集中精力到你的工作上去。長期不關機,都不是什麼事兒,就憑這一點Windows真是要大敗下風。
如果你有興趣對Mac電腦拆個機,看看裡面內部的結構,就會對蘋果的工藝水平,產品標準更是肅然起敬,這真是一家偉大的公司。內外如一般的美!
用Mac電腦開啟你的Mac應用開發之旅吧!
Xcode使用介紹
Xcode是開發Mac應用軟體的利器!去蘋果官網註冊AppleID,登入開發者中心可以免費下載。(你也可以使用AppCode,一個第三方的付費的 Objective-C、Swift 的整合開發環境)
首次啟動Xcode,選擇Create a new Xcode project,(非首次執行Xcode,從選單File-New->Project) 進入工程模版選擇介面
選擇OSX->Application->Cocoa Application
輸入工程名稱HelloWorld,開發語言選擇Objective-C。
完成第一個工程的建立。
Xcode工作區
工具欄:提供便捷的功能按鈕入口。包括執行工程,終止工程的最常用的功能按鈕。最右邊是3個不同方向的工作區開關按鈕。點選可以開啟或關閉不同方向的側邊欄區域。
工程結構導航區:位於最左邊區域,可以方便的瀏覽工程所有檔案。
工程Target配置區:有6個分類的切換tab,管理工程各種配置。
xib結構導航區:點選切換不同的控制元件,方便inspector
Assistant Editor:管理程式碼和xib檔案關聯
inspector面板區:位於最右邊,能方便的對當前選中的內容進行管理設定
控制元件工具箱:xib設計介面需要的各種控制元件庫
1.xib相關工作區
xib結構導航區,xib介面設計區,xib inspector面板區,控制元件工具箱,Assistant Editor, 進行xib介面設計時必須熟練使用
2.inspector面板區
分成8個功能區,點選依次可以看到File,QuickHelp,Identity,Attributes,Size,Connections,Bindings,View Effects區。
Identity: 如果控制元件使用自定義的類,需要從Class下拉列表中選擇
Attributes:用來對每個控制元件不同風格樣式屬性設定
Connections:用來控制元件響應的事件設定,控制元件對應的Outlet變數繫結
3.Assistant Editor工作區
從工程結構導航區選擇要編輯的xib檔案,點選選單View->Assistant Editor->Show Assistant Editor後,Assistant Editor區出現。右側出現程式碼編輯面板,可以輔助完成控制元件的事件Action,Outlet變數跟程式碼的繫結。
工程結構
我們來看看一開始建立的HelloWorld這個工程的組成部分。
最左邊是樹形的導航目錄,可以點選切換到不同的程式碼檔案或資源目錄進行統一管理。
目錄樹頂部根節點為工程名稱,選中後雙擊可以修改工程名稱。裡面2級目錄依次為HelloWorld,HelloWorldTests,Products.所有的重量級的元素都在第一個HelloWorld目錄裡面。
子目錄HelloWorld裡面AppDeleage是應用的代理,應用啟動後第一個介面都是由這個檔案控制的。
AppDelegate
AppDelegate.h
#import <Cocoa/Cocoa.h>
@interface AppDelegate : NSObject
@end
AppDelegate.m
#import “AppDelegate.h”
@interface AppDelegate ()
@property (weak) IBOutlet NSWindow *window;
@end
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
} - (void)applicationWillTerminate:(NSNotification *)aNotification {
// Insert code here to tear down your application
}
@end
在AppDelegate.h 申明瞭應用代理AppDelegate類,它必須繼承NSApplicationDelegate協議。
AppDelegate.m 中實現了applicationDidFinishLaunching 和 applicationWillTerminate 2個代理方法。applicationDidFinishLaunching中可以做一些應用啟動前的初始化處理。應用退出前可以在applicationWillTerminate中做一些全域性性資料區/記憶體/資源的清理釋放。
AppDelegate.m 中 還在介面中聲明瞭一個NSWindow *window的XIB檔案的IBOutlet輸出變數。這樣就可以在AppDelegate中直接操作控制window。比如說設定window的背景顏色,title標題,位置,大小等。Xcode自動生成的程式碼中沒有對window做任何控制,因此刪除這個IBOutlet型別的window定義也是可以的。
Images.xcassets
這個資料夾中對工程中使用的圖片資源可以統一管理。其中Xcode會預設建立一個AppIcon的圖片資源做為AppIcon是應用的安裝圖示。
可以依次看到5種尺寸大小的icon圖片,每一種都需要1x 2x 兩種規格大小的圖片。比如16pt的 就需要將16x16 和32X32 畫素的圖片分別拖入到1x,2x的虛線位置框裡面。但是在這裡設定AppIcon非常不方便,你會看到當前的工作區中最多能顯示2種規格的,其他3種根本看不到,即使你把工作去拉大最多隻能看到第3種規格的一半。後面我們會說明怎麼通過其他方式設定App的安裝和啟動後在系統上顯示的應用圖示。
可以點選底部+選單按鈕建立自己的Image Set,雙擊可以修改Image Set的名字。除了AppIcon以外,其他普通的圖示資源都有1x 2x 3x 三種大小規格。
MainMenu.xib
這個xib檔案是很關鍵的一個程式資原始檔。應用啟動的介面,應用的選單都定義在其中。當然你完全可以不使用這個檔案做應用的初始化介面,完全可以使用純程式碼控制,這個我們在後續的章節在詳細說明。
點選HelloWorld視窗,最右邊會出現控制面板,通過頂部的不同圖示按鈕來切換到不同功能控制區。
AutoLayout
Use Auto Layout選中表示使用自動佈局機制來控制介面上元素的佈局方式。相對於自動佈局的另外一個方式就是座標式佈局,必須由程式碼顯示的指定UI 元素之間的座標位置關係。AutoLayout是蘋果推薦的佈局方式,我們後續的程式碼示例也基本上使用自動佈局來說明。
類
每一種介面元素都是系統預設的標準類。如果想使用自定義的類,可以在輸入你的自定義類名。這樣xib檔案被載入的時候會使用你定義的類中的初始化方法完成類載入。
屬性
點選HelloWorld視窗,如上圖切換到它的屬性面板區。其中title欄位可以修改window的標題。Title Bar 選中表示window是帶有頂部標題,取消選中的話,視窗頂部的標題會消失。還有一個關鍵的Visible At Launch選中,表示應用啟動時視窗自動顯示。 如果你取消選中它,在執行Helloworld工程會發現,應用啟動視窗不見了,只有頂部的選單了。
可以通過程式碼讓它再次出現,在AppDelegate的applicationDidFinishLaunching中呼叫makeKeyAndOrderFront方法
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
[self.window makeKeyAndOrderFront:self];
}
Size
這裡可以控制Window的大小,最大(Max)最(小Min)的高度/寬度。設定了最大最小高度/寬度後會影響應用啟動會通過滑鼠去拉長拉高window的範圍,這個自己修改可以驗證下。
Connections
點選Xcode頂部View選單中Assistant Editor選擇Show Assistant Editor撥出類的定義檔案AppDelegate。
任何想通過程式碼修改UI介面上元素的屬性/行為動作時,都需要對xib中的UI介面元素命名。在這面板Referencing Outlets部分,點選New Referencing Outlet 右側的小圓,拖動這個小圓到類實現程式碼檔案AppDelegate中@interface定義區,在彈出的視窗輸入變數名稱,完成介面UI元素繫結到Outlet型別的變數上。這樣就可以使用這個變數完成對UI元素的各種控制。
Supporting Files
info.plist
工程基本資訊plist檔案。plist是apple的(key,type,value)形式描述的檔案格式,經常用來描述配置資訊。
Icon file:可以在這個欄位輸入icns格式的檔案做為AppIcon圖示。
建立一個資料夾,資料夾名字字尾為iconset,將1024x1024的一張大圖通過工具軟體或者手工縮放成如下圖的各種尺寸加到這個資料夾Icon.iconset。 拖動Icon.iconset資料夾到工程最左邊的目錄中的HelloWorld目錄中。在Icon file欄位輸入Icon即可。
Bundle identifier:應用的唯一標識字串。
Bundle versions string, short:應用對外發布的版本號。
Bundle version:應用內部版本號。提交到蘋果等待稽核中的版本,如果發現bug,可以撤下來重新提交,這時候Bundle versions string, short版本號保持不變,只需要對Bundle version版本號遞增即可。
Main nib file base name:指定應用啟動時載入的xib檔名。
Principal class:NSApplication
main.m
應用的入口。執行main函式,App執行時首先建立NSApplication例項載入xib檔案,建立xib檔案中定義的選單/window例項。這個NSApplication就是Files Owner。NSApplication是是AppDelegate代理,因此會執行AppDelegate中的applicationDidFinishLaunching:方法來進行自定義的一些初始化。
target
定義了編譯釋出的單個產品需要的原始檔,配置引數,依賴的庫,部署系統版本環境,簽名檔案等。
General
除了可以通過plist檔案修改應用的配置資訊欄位外,還可以選擇target進入General面板 來修改plist檔案中部分欄位。
Application Category:可以選擇一個應用的分類,提交Mac Appstore必須要有分類。
Deployment Info:Deployment Target設定應用支援的最低OSX系統版本。
Capabilites
這裡我們重點關注下App Sandbox,Apple現在要求上架Mac AppStore的應用必須使用沙盒,所以釋出到Mac商店的應用你必須選擇開啟。
如果你的應用要訪問伺服器的API介面,必須開啟Outgoing Connections。
Hardware裡面必須選擇開啟Printing,否則稽核不通過。
File Accedd:如果你需要讓使用者選擇訪問本地的檔案,User Selected File 中選擇讀/寫許可權。
Info
這裡最上面部分跟直接檢視info.plist 看到的內容一致.
Document Types中可以設定應用跟檔案的關聯。比如你開發了一個圖片應用,可以設定雙擊圖片時自動執行你的應用,或者當滑鼠右擊選單出現時裡面可以出現你的應用。
Build Settings
如果使用了非系統的第3方framework或者自己開發的framework,Code Signing 裡面Other Code Signing Flags 必須設定為 --deep,否則無法正常打包釋出到Mac Appstore。
Build Phases
Link binary With Libraries:點選+新增依賴的系統庫。