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) 進入工程模版選擇界面
在這里XcodeStart插入圖片描述

選擇OSX->Application->Cocoa Application

ProjectTemplate

輸入工程名稱HelloWorld,開發語言選擇Objective-C。

ProjectName

完成第一個工程的創建。

Xcode工作區
工具欄:提供便捷的功能按鈕入口。包括運行工程,終止工程的最常用的功能按鈕。最右邊是3個不同方向的工作區開關按鈕。點擊可以打開或關閉不同方向的側邊欄區域。

工程結構導航區:位於最左邊區域,可以方便的瀏覽工程所有文件。

工程Target配置區:有6個分類的切換tab,管理工程各種配置。

xib結構導航區:點擊切換不同的控件,方便inspector

Assistant Editor:管理代碼和xib文件關聯

inspector面板區:位於最右邊,能方便的對當前選中的內容進行管理設置

控件工具箱:xib設計界面需要的各種控件庫

XcodeProject

1.xib相關工作區

xib結構導航區,xib界面設計區,xib inspector面板區,控件工具箱,Assistant Editor, 進行xib界面設計時必須熟練使用

XcodeXib

2.inspector面板區

分成8個功能區,點擊依次可以看到File,QuickHelp,Identity,Attributes,Size,Connections,Bindings,View Effects區。

XibInspector

Identity: 如果控件使用自定義的類,需要從Class下拉列表中選擇

Attributes:用來對每個控件不同風格樣式屬性設置

Connections:用來控件響應的事件設置,控件對應的Outlet變量綁定

3.Assistant Editor工作區

從工程結構導航區選擇要編輯的xib文件,點擊菜單View->Assistant Editor->Show Assistant Editor后,Assistant Editor區出現。右側出現代碼編輯面板,可以輔助完成控件的事件Action,Outlet變量跟代碼的綁定。

AssistentEditorXib

AssistentEditor

工程結構
我們來看看一開始建立的HelloWorld這個工程的組成部分。

ProjectStruct1

最左邊是樹形的導航目錄,可以點擊切換到不同的代碼文件或資源目錄進行統一管理。

目錄樹頂部根節點為工程名稱,選中后雙擊可以修改工程名稱。里面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是應用的安裝圖標。

ProjectStruct2

可以依次看到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
Window-Autolayout

Use Auto Layout選中表示使用自動布局機制來控制界面上元素的布局方式。相對於自動布局的另外一個方式就是坐標式布局,必須由代碼顯示的指定UI 元素之間的坐標位置關系。AutoLayout是蘋果推薦的布局方式,我們后續的代碼示例也基本上使用自動布局來說明。


Window-Class

每一種界面元素都是系統默認的標准類。如果想使用自定義的類,可以在輸入你的自定義類名。這樣xib文件被加載的時候會使用你定義的類中的初始化方法完成類加載。

屬性
ProjectStruct3

點擊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-Size

這里可以控制Window的大小,最大(Max)最(小Min)的高度/寬度。設置了最大最小高度/寬度后會影響應用啟動會通過鼠標去拉長拉高window的范圍,這個自己修改可以驗證下。

Connections
Window-Assistant

點擊Xcode頂部View菜單中Assistant Editor選擇Show Assistant Editor呼出類的定義文件AppDelegate。

Window-Connection

任何想通過代碼修改UI界面上元素的屬性/行為動作時,都需要對xib中的UI界面元素命名。在這面板Referencing Outlets部分,點擊New Referencing Outlet 右側的小圓,拖動這個小圓到類實現代碼文件AppDelegate中@interface定義區,在彈出的窗口輸入變量名稱,完成界面UI元素綁定到Outlet類型的變量上。這樣就可以使用這個變量完成對UI元素的各種控制。

Supporting Files
info.plist
Project-Infoplist

工程基本信息plist文件。plist是apple的(key,type,value)形式描述的文件格式,經常用來描述配置信息。

Icon file:可以在這個字段輸入icns格式的文件做為AppIcon圖標。

創建一個文件夾,文件夾名字后綴為iconset,將1024x1024的一張大圖通過工具軟件或者手工縮放成如下圖的各種尺寸加到這個文件夾Icon.iconset。 拖動Icon.iconset文件夾到工程最左邊的目錄中的HelloWorld目錄中。在Icon file字段輸入Icon即可。

IconSet

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:方法來進行自定義的一些初始化。

ProjectMain

target
定義了編譯發布的單個產品需要的源文件,配置參數,依賴的庫,部署系統版本環境,簽名文件等。

General
除了可以通過plist文件修改應用的配置信息字段外,還可以選擇target進入General面板 來修改plist文件中部分字段。
Project-Infoplist-Visible

Application Category:可以選擇一個應用的分類,提交Mac Appstore必須要有分類。

Deployment Info:Deployment Target設置應用支持的最低OSX系統版本。

Capabilities
Capabilites

這里我們重點關注下App Sandbox,Apple現在要求上架Mac AppStore的應用必須使用沙盒,所以發布到Mac商店的應用你必須選擇打開。
如果你的應用要訪問服務器的API接口,必須打開Outgoing Connections。
Hardware里面必須選擇打開Printing,否則審核不通過。
File Accedd:如果你需要讓用戶選擇訪問本地的文件,User Selected File 中選擇讀/寫權限。

Capabilites-Sandbox

Info
Capabilites-info

這里最上面部分跟直接查看info.plist 看到的內容一致.

Document Types中可以設置應用跟文件的關聯。比如你開發了一個圖片應用,可以設置雙擊圖片時自動運行你的應用,或者當鼠標右擊菜單出現時里面可以出現你的應用。

Build Settings
Capabilites-buildsettings

如果使用了非系統的第3方framework或者自己開發的framework,Code Signing 里面Other Code Signing Flags 必須設置為 --deep,否則無法正常打包發布到Mac Appstore。

Build Phases
Capabilites-buildphases

Link binary With Libraries:點擊+添加依賴的系統庫。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM