从《虾票票》带你入门iOS(2)——iOS简史与工程创建

从《虾票票》带你入门iOS

上周我们聊了第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诞生

原来最后他把三个功能组合到了一台设备上,这就有了我们的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,新建工程无非就是这几步:

三步走
  1. Create a new Xcode project
  2. 选择iOS-App,点击Next
  3. 填写工程相关信息
    1. Team可以不填,基本是在真机调试或者App上架时才有用
    2. Organization Identifier一般是类似com.organization_name的形式
    3. 本项目基于OC语言,Interface、Life Cycle以及Language都是固定的了
    4. 两个复选框暂时不用管,也不用勾选
    5. 点击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

2)Bundle name

  • App的安装包名,默认为新建项目时设置的Product Name

3)Privacy系列

  • 权限相关的属性,比如访问相册、摄像头等等
    • ⚠️:其Value值一定要写清楚具体的用途,而不是单纯的写“使用…权限”,否则在上架时将面临审核被拒的问题

PS:如果想在代码中获取上面这些属性,可以通过下面的代码获取其字典,根据Key即可取到相应的Value。

NSDictionary *dic = [[NSBundle mainBundle] infoDictionary];

下周再见👋

我们会聊一聊:

  • iOS的系统架构
  • UIKit库里的重要成员
    • UIView、UIViewController以及它们各自的继承关系
    • 各个组件的基本使用和特性

❗️现在你可以尝试新建你的第一个App了!给它添加一个App图标,设置它的启动页面,修改相关的info.plist属性~