Cocoa-01-Mac OS应用开发概述

Objective-C是一种面向对象的编程语言,它是编写Mac OS应用、IOS手机应用软件的主要编程语言,同时也是Cocoa和Cocoa Touch框架的主要编程语言。ObjC语言并不复杂,但是会有很多名词和术语需要掌握和理解(后续会在使用时逐步介绍)。

开发语言

开发Apple公司相关产品的软件时,主要有两个框架可供使用:Cocoa和Cocoa Touch。Cocoa是一个开发Mac OS系统应用的开发工具包,而Cocoa Touch工具包主要用于IOS系统应用的开发,可以简单理解为Objective-C是一种编程语言,而Cocoa是开发框架,发展至今天,Apple Develop开发体系大体如下图所示:

上图中有几点需要详细说下明:

  • . Foundation:这是一个ObjC语言的核心扩展包。它并没有内置于Objective-C语言中,也不包含任何UI元素,所以可以在不同的平台通用,大概提供了100多个扩展类;
  • . Cocoa:MacOS系统应用开发框架,它提供了丰富用户体验的UI框架,由Foundation库、用于数据管理的CoreData框架以及AppKit图形化框架组成;
  • . Cocoa Touch:IOS系统应用开发框架,它提供了丰富用户体验的UI框架,它包括Foundation库、用于数据管理的CoreData框架以及UIKit库,UIKit可以看成是简版的Appkit,同时附加了比如wifi
    、gps等API;
  • Swift:一种后期开发的Apple系统应用软件的开发语言,原因是作为一门比较老的语言,
    Objective-C缺少很多现代语言所具备的高级特性。可以简单理解为Swift是为了弥补ObjC的缺陷而开发的一种语言,ObjC与Swift可以相互调用,所以在同一项目中可以并存;

Foundation是在早期的CoreFoundation框架的基础上开发的,开发时也可以使用CoreFoundation(但不建议),在帮助文件中以CF开头的全是CoreFoundation中的对象;

文档资料

开发文档

在Foundation中有125个可用的头文件(还在增加),通过import <Foundation/Foundation.h>的方式导入。为了不与其它框架的语言冲突,所有的系统类对象都以 NS 开头。可在官方网站获取,也可以Xcode的Help菜单下获取。
documentation

网上资料

Apple官方资料可以说做的非常用心了,主要能用到的链接有两个,其它需要的都可在下面网站进行二次导航查看:

开发工具

集成开发IDE

常用的IDE有两个一个是XCode另一个是AppCode,个人还是比较建议使用Xcode来开发的。Xcode界面如下:

笔者使用的是:Mac Monterey V12.7.3, Xcode V13.4.1 ,最新版本的Xcode

V15+版本需要升级系统,需要注意的是系统版本有时需要和硬件配置相匹配,否则可能会出现性能问题。

另一个常用的IDE是AppCode,是Google公司开发的,已经集成到了Intellij开发工具集中,这个工具不过多介绍了,操作方式同Intellij IDE家族其它产品一样,AppCode界面如下所示:

Xcode附带的开发工具

Xcode除了提供IDE外,还打包提供了如下一些常用的开发工具(随Xcode一同安装,也可在官网按需下载):

这些工具可以在Dock右键,也可以XCode【文件】菜单中打开,详细如下(部分已不再提供了而是集成到了Xcode中):

  • Instruments:用于动态调追踪和分析OS X和iOS的代码的性能分析和测试工具
  • Simulator:模拟器,用于模拟 iOS 平台设备,在模拟器上运行对应的程序, 方便没有实体设备的时候去调试程序
  • Accessibility inspector:辅助功能检查器,用它来检测APP控件元素的层级结构,使用它可以快速地获取各个控件元素的层级
  • FileMerge:可视色比较两个文件或文件内容;
  • Create ML:生成机器学习模型的工具。它可以接收用户给定的数据,生成 iOS 开发中需要的机器学习模型(Core ML 模型)
  • Reality Composer:AR 和 3D 内容创作工具,支持 Mac(与 Xcode 集成) 和 iOS 平台

其它常用开发工具

其实来讲Xcode已够做的够好了,但还有一些开发软件可能会经常用到了,笔者常用的有这些:

  • DevClearner:项目垃圾清理工具;
  • Developer:开发者客户端;
  • XCformat:代码格式化工具;
  • SF符号:ICON设计工具,此工具非常方便,里面的图标也可用于PPT制作;
  • TestFight:测试工具;
  • Transporter:App Store上传工具,用于发布个人软件;

最新的Macbook Pro笔记本电脑相比老款电脑主要是升级了CPU,所谓的M1, M2, M3除了比原Intel的CPU主要是加了MPU功能,即支持AI神经网络的计算,但这个区别对于开发Mac应用基本没有任何帮助。

XCode使用

Xcode功能非常多,无法短时间内讲清楚。不太建议针对Xcode进行系统的学习,而是在学习编码的过程中逐渐掌握。 本教程主要是介绍OS X应用的开发,所以文中所有配图全以Xcode-V13.4.1下macOS软件开发界面为主。

项目创建

  1. 首次启动Xcode,需要从菜单File-New->Project,New菜单下内容比较多,还是秉着用到再了解的原则此处只讲Project,其它的菜单项在后续需要时再详细讲解。选择project后进入工程模版选择界面:

针对不同的应用,XCode给出了不同的项目向导和基础实现,比如非图形化的项目一般选择Command Line Tool、如果是图形化的可选择App、如果是文档处理类的应用则选择Document App。

  1. 项目配置,通常是选择Storyboard和Objective-C或Swift-UI和Swift。
  • Team和Organization Identifiler:app标识,一般添加公司标识即可;

  • Interface:指定UI类型,可选的有XIB、Storyboard、Swift

    UI,主要是开发语言不同,前两者使用ObjC语言缩写,第三种使用Swift语言编写,其中XIB和Storyboard的区别不是太多,但Storyboard比XIB提供了更好的复用性;

  • Language:选择开发语言Objective-C或swift,主要是项目源码架构有些不同。因为这两种语言可以同时在一个项目中存在,所以本质上区别不大;

  • 开发语言可以选择Objective-C或Swift都可,这是两种不同的语言,Swift可认为是一种兼容性的语言,为了同样的UI在不同的设备上表现相同而开发的。

确定后,创建一个xcode项目后,项目结构大体如下,左边是源码区、中间是编辑区、右侧是属性设置区:

点击左侧三角号可以运行项目,项目运行时会在在最底部会有日志和调试区等。

补充知识:Group和Target,复杂的项目可以有多个组和目标,每个Target可以拥有不同的配置。Group主要是用于管理项目的源文件,Group不是java中包的概念,它是XCode的一个逻辑分组不会真正的移动文件位置,但可以设置Group指向某个具体的文件夹。

开发界面

Cmd类型项目工作区

大体如下图所示,比较简单,所有的源码和文件都需要自己创建。

App类型项目工作区

图形界面应用,操作会稍复杂,在Cocoa框架章会详细讲解。

  1. 工程Target配置区:有6个分类的切换tab,管理工程各种配置;
  2. Inspector面板区:位于最右边,能方便的对当前选中的内容进行管理设置;
  1. xib结构导航区:点击切换不同的控件,方便inspector;
  2. 控件工具箱:xib设计界面需要的各种控件库;
xib相关工作区

主要包括xib结构导航区,xib界面设计区,xib inspector面板区,控件工具箱以及Assistant Editor。主要是用来设计UI界面的,xib文件是一个xml格式的文件,无法像java Swing那样手工编码代码,只能依赖Interface Builder工具来拖动设计。

xib inspector面板区
  1. Identity: 如果控件使用自定义的类,需要从Class下拉列表中选择
  2. Attributes:用来对每个控件不同风格样式属性设置
  3. Connections:用来控件响应的事件设置,控件对应的Outlet变量绑定
Assistant Editor工作区

主要用于编辑xib文件,可以先选择一个xib文件后,然后通过菜单"View->Assistant Editor->Show Assistant

Editor"调出窗口(注意:Xcode版本不同其打开方式也不一样,但无论哪种方式打开都是一边是图形,一边是代码)。

在最新的Xoce版本中此菜单被移到了工作中,打开方法是先打开xib界面,然后在工具栏中找到Assistant菜单:

项目设置

项目设置的主要功能区如下图所示:

General

设置项目的基本信息,主要有两项需要注意:

  • Application Category:提交到AppStore的项目必须要设置一个分类;
  • Deployment Target:设置一个最低的os x版本;
Capabilities

App测试和发布需要关注的开关,需要哪个就开放哪个,需要关注以下两项:

  • App Sandbox:提交到AppStore的项目必须使用沙盒;
  • 需要APP要访问远程api,必须打开 Outgoing Connections;
  • Hardware里面要打开print;
  • File Access:如果要访问本地文件,此项要进行进应的设置
info

工程基本信息.plist文件,用来描述配置信息。经如设置图标等APP信息,在 Document Types 中可以设置系统文件的打开类型绑定或是鼠标右键功能等。也可以在工程中加入info.plist文件来补充此设置中的内容(.

plist优先级低于此处的设置)。

Build Settings

设置APP绑定三方软件的设置,比如引用了三方框架,则需要设置Other Code Signing Flags为--deep,否则无法正常打包。

Build Phases

Build Phases用于设置编辑目标和引入的三方库管理(Link binary With Libraries)。

快捷键

  1. 鼠标左键+option,然后点击某个类型,在弹出窗口点击相应的类型名可直接跳转到document;
  2. control+i,格式化代码;
  3. command+d,删除行(需要在keymap中搜索delete line自行设置);

新手疑惑

在java和python横行的时代,Mac开发语言可以说是比较小众,先解答几个新入门同学常见的问题的吧以免小走弯路。

Objective-C还是Swift?

RE:如果您只是业余爱好,学习swift即可(相比objc简单)。但个人建议是全学,因为Swift是基于Objective-C发展封装而来的,其底层还是ObjC

语言。有一点需要注意的是这两种语言的语法相差较远,但概念一样,掌握了其中一种后很容易掌握另一种,学习路径是objc-->swift;

Storyboard、xib还是Swift-UI?

RE:选择storyboard或swift,主要依赖于您哪种语言熟悉,不依赖是否有可拖拽的设置工具,因为做真实项目时多数是用代码堆界面,很少采用拖拽的方式;

Xcode还是AppCode?

RE:Xcode,没啥好说的。虽然AppCode相比Xcode在某些编码过程中更智能,但在生态上还是比Xcode差了很多,不过这两种IDE所创建的工程源码结构是通用的;

Xcode版本选择? {id="xcode_2"}

RE:Xcode最新版本为V15+,需要注意的是Xcode与Mac OS操作系统的版本相关,比如os x 12最高使用xcode v13,如果想使用v15的Xcode,需要装os x升级到v14(sonoma)。个人建议是如果是intel芯片的电脑不建议升级到sonoma,如果非要升级一定要提前备份系统避免不必要的麻烦。

相关推荐
Momo__10 小时前
VueUse createReusableTemplate —— 单文件组件内的模板复用神器
前端·vue.js
程序员小富10 小时前
我开源了一个开发者专属的智能 JSON 工具,得到了媳妇高度认可
前端·vue.js·后端
小小小小宇10 小时前
程序员如何给 LLM 装工具以及看懂推理过程
前端
写代码的皮筏艇10 小时前
React中的forwardRef
前端·react.js·面试
槑有老呆10 小时前
花三个月工资请了个 AI 程序员,结果它连青岛啤酒股价都查不了
前端
风骏时光牛马10 小时前
Verilog开发常见问题汇总解析
前端
子兮曰10 小时前
AI Coding Method Map:一张图看懂 AI 编程的完整链路
前端·人工智能·后端
weedsfly10 小时前
语法糖褪去之后——Babel 转译产物中的 JavaScript 本貌
前端·javascript
JustHappy10 小时前
「软件设计思想杂谈🤔」“切图仔”也能懂编译原理?框架源码也许没那么难。聊聊 Vue 的编译(上)
前端·javascript·vue.js