MacOS-APP 开发入门篇

article/2025/10/2 12:57:28

转载自(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:点击+添加依赖的系统库。


http://chatgpt.dhexx.cn/article/DCfHZOig.shtml

相关文章

【2023最新】超详细图文保姆级教程:App开发新手入门(1)

1. 关于 『YonBuilder移动开发』 PS: 本段内容主要目的是去除官方语音描述&#xff0c;用通俗的语言来简单介绍一下『YonBuilder移动开发』&#xff0c;方便新手开发者判断是否适合自己上手学习。 简介&#xff1a; YonBuilder移动开发平台(官网&#xff1a;https://develope…

Android新手如何学习开发一款app?

毫无疑问&#xff0c;开发一款自己的App对于初学者来说&#xff0c;无论从技术学习&#xff0c;还是找工作&#xff08;或者装x&#xff09;&#xff0c;都是一大利器。那么如何才能快速上手&#xff0c;开发一款属于自己的app。本篇文章仅以自己的一些经验给更多的Android新手…

鸿蒙APP开发入门到进阶 | 入门完整篇。

大家好&#xff0c;我是 码工&#xff0c;一个有十年工作经验的码农&#xff0c;一心追求技术。 先说说我的开发经历&#xff0c;10年毕业&#xff0c;到目前已经十多年开发经验&#xff0c;大学学习了多种语言&#xff0c;Java&#xff0c;Android&#xff0c;c&#xff0c;c&…

超详细图文保姆级教程:App开发新手入门(二)

重要&#xff1a; 想学习APP开发的新手同学&#xff0c; 建议访问我发布的最新版本的文章教程 【2023最新】超详细图文保姆级教程&#xff1a;App开发新手入门 上文我们已经成功的创建了一个项目&#xff0c;接下来我们讲述一下&#xff0c;如何导入、编辑、提交项目代码下面我…

开发一款Android App,从零开始详细讲解

入门篇&#xff1a;第一篇&#xff1a;开发环境篇第二篇&#xff1a;材料设计篇第三篇&#xff1a;规范开发篇第四篇&#xff1a;从项目开发到上架篇&#xff08;篇章调整&#xff0c;最后更新&#xff09; 进阶篇&#xff1a;第五篇&#xff1a;设计模式篇第六篇&#xff1a;…

app后台开发入门

2017/5/1第二次更新 前言&#xff1a; 在我写下这篇文章之前&#xff0c;我头脑中的app后台开发&#xff0c;有且只有一个流程“客户端Cilent向服务器Server请求数据&#xff0c;服务器Server响应客户端请求并返回json数据”。但是&#xff0c;仅仅用语言描述出这个流程&#…

手机app开发(新手教程)

咳咳&#xff5e;好久不见亲们。估计你们已经忘了我的存在了吧。小编表示很伤心&#x1f494;。唉没办法最近事情有点多&#xff08;实则就是太懒&#xff0c;不想跟新&#xff09;。不过今天我先跟大家分享的是我最近研究的新方向。手机app开发。感兴趣的朋友欢迎点赞关注。小…

超详细图文保姆级教程:App开发新手入门(三)

重要&#xff1a; 想学习APP开发的新手同学&#xff0c; 建议访问我发布的最新版本的文章教程 【2023最新】超详细图文保姆级教程&#xff1a;App开发新手入门 上文我们已经完成了一个应用项目的导入、代码更新和代码提交&#xff0c;本章继续讲述一下&#xff0c;如何在开发过…

超详细图文保姆级教程:App开发新手入门(五)

重要&#xff1a; 想学习APP开发的新手同学&#xff0c; 建议访问我发布的最新版本的文章教程 【2023最新】超详细图文保姆级教程&#xff1a;App开发新手入门 上文回顾&#xff0c;我们已经完成了一个应用的版本编译&#xff0c;本章我们来了解一下如何引入APICloud的原生模块…

超详细图文保姆级教程:App开发新手入门(一)

重要&#xff1a; 想学习APP开发的新手同学&#xff0c; 建议访问我发布的最新版本的文章教程 【2023最新】超详细图文保姆级教程&#xff1a;App开发新手入门 1. 关于APICloud PS: 本段内容主要目的是去除官方语音描述&#xff0c;用通俗的语言来简单介绍一下APICloud&#x…

大数据的数据科学与关键技术是什么?

对于大数据想必大家都有所了解了吧&#xff1f;随着信息化的不断发展&#xff0c;大数据也越来越被人们所熟知。我们都知道&#xff0c;现在很多行业都离不开数据分析&#xff0c;在数据分析中我们有听说了大数据&#xff0c;大数据涉及到了很多的行业&#xff0c;一般来说&…

大数据的相关技术

架构、采集、存储、计算处理和可视化等 架构设计技术: Flume、Zookeeper和Kafka采集技术: Python和Scala存储技术&#xff1a;Hbase、Hive、Sqoop计算技术: Mahout、Spark和Storm可视化技术: Echart和Superset 大数据技术是一系列使用非传统的工具来对大量的结构化、半…

大数据分析,主要运用了哪些关键技术?

古代&#xff0c;人们用牛来拉重物&#xff0c;当一头牛拉不动一根圆木时&#xff0c;他们不曾想过培育更大更壮的牛。同样&#xff0c;在面对计算能力不足时&#xff0c;我们也应尝试着结合使用更多的计算机系统。 Hadoop就是基于这样的理念设计。Hadoop是一个由Apache基金会…

巨龙信息大数据集成系统 多元数据汇聚的一站式集成治理

巨龙大数据集成系统以20多年数据治理实践为基础&#xff0c;自主研发&#xff0c;兼容适配信创&#xff0c;为海量异构数据的超大规模数据仓库建设&#xff0c;提供抽取、清洗、整合、入库等一站式集成服务&#xff0c;帮助高效开展数据治理&#xff0c;助力数字化转型。 产品…

大数据相关技术介绍

基础&#xff1a;常用算法与数据结构、HTML、CSS、JavaScript 操作系统&#xff1a;Linux 编程语言&#xff1a; Java&#xff1a;IO模型、网络编程、多线程、内存管理机制等基础知识|熟悉缓存、消息队列、索引查询|高并发、高负载、高可用系统的设计开发及调优 Java Web项…

大数据关键技术探讨

大数据技术&#xff0c;就是从各种类型的数据中快速获得有价值信息的技术。大数据领域已经涌现出了大量新的技术&#xff0c;它们成为大数据采集、存储、处理和呈现的有力武器。 大数据处理关键技术一般包括&#xff1a;大数据采集、大数据预处理、大数据存储及管理、大数据分析…

一文全面掌握大数据关联与汇聚

云智慧 AIOps 社区是由云智慧发起&#xff0c;针对运维业务场景&#xff0c;提供算法、算力、数据集整体的服务体系及智能运维业务场景的解决方案交流社区。该社区致力于传播 AIOps 技术&#xff0c;旨在与各行业客户、用户、研究者和开发者们共同解决智能运维行业技术难题&…

大数据世界中的新技术

大数据世界正在以前所未有的方式发生着变化&#xff0c;特别是企业将数据整合到一起并将其应用到业务的情况下。而企业都面临的挑战是能够发现、识别并带来构建产品、提供服务和了解客户所需的数据。数据集成本身几十年来一直是一种实践和挑战。然而&#xff0c;新的工具和流程…

大数据分析与应用技术创新平台

原文链接&#xff1a;https://mp.weixin.qq.com/s/kCDYOInF8KjHstIMAWSljA 大数据分析与应用技术创新平台 张平文, 鄂维南, 袁晓如, 傅毅明 北京大学数学科学学院&#xff0c;北京 100871 北京大学大数据科学研究中心&#xff0c;北京 100871 北京大学信息科学技术学院&am…

大数据关键技术

大数据技术&#xff0c;就是从各种类型的数据中快速获得有价值信息的技术。大数据领域已经涌现出了大量新的技术&#xff0c;它们成为大数据采集、存储、处理和呈现的有力武器。 大数据处理关键技术一般包括&#xff1a;大数据采集、大数据预处理、大数据存储及管理、大数据分…