上周我们聊了第 1 部分,明确了要做一款《虾票票》App~
今天我们来到第 2 部分,从 iOS 的发展历史开始聊,然后使用 Xcode 创建一个 iOS 工程,再介绍工程里常用的一些配置。
iOS 简史#
iPhone 1 代诞生#
在 iPhone 出来之前,Apple 的两款明星产品非 iMac 和 iPod 莫属,而当时乔布斯就在想,那能不能把 iMac 缩小,或者把 iPod 扩大,从而做出一款手机呢?乔布斯把这个任务分给了两个产品线,也就是 iMac 团队和 iPod 团队,可能你想不到,最后是谁成功了?
- 基于 iMac 强大的 macOS 系统,第一款 iPhone 有非常强劲的性能;
- 并且在大家想着怎么做出各式各样的手机键盘时,乔布斯则在想为什么不把键盘作为一个软件呢?这样我想要什么样的键盘就能有什么样的键盘,并且还将拥有更大的屏幕和更轻的重量。
在 2007 年的 Apple 发布会上,乔布斯不停地重复三组词:An iPod、A Phone、An Internet Comunicate、An iPod、A Phone...
原来最后他把三个功能组合到了一台设备上,这就有了我们的iPhone 1 代了!
当时他还提到了笔记本概念提出者 Alan Kay 曾说的一句话:
People who're serious about software should make their own hardware.——1970
那些热衷于软件的人也应该制作他们自己的硬件。——1970
三十多年后的 2007 年,Apple 也做到了,后来微软其实也做到了。同时,Apple 对自己硬件的所有细节都了如指掌,算是真正做到了软硬结合。
版本历史#
- 最开始的 iOS 版本叫做 iPhone OS,到了第 4 个大版本,才叫 iOS,这个时候是把 iPod OS、iPad OS 和 iPhone OS 进行了融合;
- 到了 iOS 13 的时候,因为 iPad 一些独特的功能,比如分屏、支持 Apple Pencil、文件系统等等,iPad OS 又被独立出去了;
- 直到最近的 iOS 15。
参考:iOS 版本历史——Wiki
系统特点#
相比另一主流系统 Android,iOS 的特点很明显:
- 机型少,使用者相对少
- 生态封闭,少了自由和选择,多了安全性、易用性、软件更新及时性等等
- 主打高端市场,品牌是否溢价因人而异
这是 2017 年的时候 Apple 做了一个宣传广告,把自己的特点放大,用稍微浮夸的方式表现 Apple 的优点,感兴趣可以去看看。
Switch To iPhone - Commercial by Apple——Youtube
iOS 工程创建#
下面回到正题~
新建工程#
类似于所有 IDE,新建工程无非就是这几步:
- Create a new Xcode project
- 选择 iOS-App,点击 Next
- 填写工程相关信息
- Team 可以不填,基本是在真机调试或者 App 上架时才有用
- Organization Identifier 一般是类似 com.organization_name 的形式
- 本项目基于 OC 语言,Interface、Life Cycle 以及 Language 都是固定的了
- 两个复选框暂时不用管,也不用勾选
- 点击 Next
后面选择好了路径即完成新建。
接下来介绍工程中比较常用的三个配置:App 图标、启动页面相关以及 Info.plist 常用属性
App 图标#
新建工程后默认存在一个文件,只需往其拖入图标即可
- 关注红色箭头
- 创建工程后,会自动生成 Images.xcassets 文件,这个文件可以建立很多图像集,用来存储图片
- 拖动自己的图片到 AppIcon 这个图像集里,也就设置好我们的 App 图标了
- 至于怎么设计自己的 App 图标,就看个人发挥了~
- PS
- 如果想要丰富的图标素材,可以去iconfont—— 阿里图标库看看
- 细心的你可能会发现图片集里有各种比例的图标,它们可以通过Prepo应用(App Store 里有)生成
- 在 iOS 10.3 后,Apple 加入了动态替换特性,其实我们在双十一这种节日就可以体会到,App 图标自动切换了,而并不需要重新安装 App
- 步骤:设置 info.plist => 放图片 => 调用 setAlternateIconName 方法
- 待会我们会提到 info.plist 文件
- 关于 App 的角标 Badge,比如微信 App 上显示的未读消息数,设置 applicationIconBadgeNumber 属性即可
启动页面相关#
一个 App 启动时展示的页面实际上是由「启动页面 + 闪屏」组成,为什么要有两个页面呢?
1)先说说启动页面,又叫 Launch Screen:
在新建工程时也默认生成了一个 LaunchScreen.storyboard 文件,顾英思义,故事板,其实类似一个画板,可以通过添加一些 UIKit 组件来做自己的启动页面(关于 UIKit 组件的讲解,请继续关注本系列哦~)
同样关注红色箭头,实际上我用了三张图片(图标 + 艺术字 + 艺术字)组成了这样一个启动页面。
但是这个启动页面有一个特点,它的展示很快,不方便控制,所以有可能发生一种情况:启动页面消失了,而 App 里的内容还没加载出来,从而给用户展示一个空的页面。
2)所以就有了闪屏,又叫 Splash Screen:
它被使用的初衷就是避免在启动应用后展示一个空的页面给用户。
它是被人为添加的,现在从 App 的实际使用中其实可以感受到,这个闪屏已经被延伸作为投放广告、品牌推广的利器了!
所以它的出现有时可能适得其反,让 App 在初始化时还需要多加载一个页面,比如淘宝 App,最近取消了广告,我才发现原来之前启动淘宝慢不是自己手机的问题。
在《Apple 人机交互手册》里写了这样一句话:
https://developer.apple.com/design/human-interface-guidelines/ios/overview/themes/
As much as possible, avoid displaying a splash screen or other startup experience.
尽可能避免展示闪屏或其它多余的启动体验。
但每个公司的文化也大相径庭,听说微软在这方面反而是鼓励 App 通过闪屏扩大品牌效应~
Info.plist 常用属性#
最后一部分其实是工程中至关重要的一个文件,它也是会自动生成的,主要提供 App 的一些基本配置。
关注红色箭头,该文件本质上是一个 XML 文件,下面介绍里面的一些常用属性。
1)Bundle identifier
- App 的唯一标识符,主要是在 App 上架时申请证书需要
- 格式类似于 com.<company>.<appName>,下面看看我们常见 App 的 Bundle identifier:
- com.tencent.xin
- com.tencent.mqq
- com.ss.iphone.article.News
- 应该都能猜到,可以看出格式也没有唯一标准,比如最后一个头条 App 的格式
- 参考
2)Bundle name
- App 的安装包名,默认为新建项目时设置的 Product Name
3)Privacy 系列
- 权限相关的属性,比如访问相册、摄像头等等
- ⚠️:其 Value 值一定要写清楚具体的用途,而不是单纯的写 “使用… 权限”,否则在上架时将面临审核被拒的问题
PS:如果想在代码中获取上面这些属性,可以通过下面的代码获取其字典,根据 Key 即可取到相应的 Value。
NSDictionary *dic = [[NSBundle mainBundle] infoDictionary];
- OC 语言里调用方法的方式比较独特
- 方括号 [] 表示方法调用
- [NSBundle mainBundle] 是调用的 NSBundle 类的类方法,返回一个实例对象
- 再通过实例对象调用其 infoDictionary 方法,返回一个字典对象
- 具体语法可参考Objective-C 函数—— 易百教程
下周再见👋#
我们会聊一聊:
- iOS 的系统架构
- UIKit 库里的重要成员
- UIView、UIViewController 以及它们各自的继承关系
- 各个组件的基本使用和特性
❗️现在你可以尝试新建你的第一个 App 了!给它添加一个 App 图标,设置它的启动页面,修改相关的 info.plist 属性~