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官方资料可以说做的非常用心了,主要能用到的链接有两个,其它需要的都可在下面网站进行二次导航查看:
- AppleDeveloper:https://developer.apple.com/cn/
- Swift-API:https://docs.swift.org/swift-book/documentation/the-swift-programming-language/aboutswift/
开发工具
集成开发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软件开发界面为主。
项目创建
- 首次启动Xcode,需要从菜单File-New->Project,New菜单下内容比较多,还是秉着用到再了解的原则此处只讲Project,其它的菜单项在后续需要时再详细讲解。选择project后进入工程模版选择界面:
针对不同的应用,XCode给出了不同的项目向导和基础实现,比如非图形化的项目一般选择Command Line Tool、如果是图形化的可选择App、如果是文档处理类的应用则选择Document App。
- 项目配置,通常是选择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框架章会详细讲解。
- 工程Target配置区:有6个分类的切换tab,管理工程各种配置;
- Inspector面板区:位于最右边,能方便的对当前选中的内容进行管理设置;
- xib结构导航区:点击切换不同的控件,方便inspector;
- 控件工具箱:xib设计界面需要的各种控件库;
xib相关工作区
主要包括xib结构导航区,xib界面设计区,xib inspector面板区,控件工具箱以及Assistant Editor。主要是用来设计UI界面的,xib文件是一个xml格式的文件,无法像java Swing那样手工编码代码,只能依赖Interface Builder工具来拖动设计。
xib inspector面板区
- Identity: 如果控件使用自定义的类,需要从Class下拉列表中选择
- Attributes:用来对每个控件不同风格样式属性设置
- 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)。
快捷键
- 鼠标左键+option,然后点击某个类型,在弹出窗口点击相应的类型名可直接跳转到document;
- control+i,格式化代码;
- 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,如果非要升级一定要提前备份系统避免不必要的麻烦。