编程进阶网 编程进阶网
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • README
  • Android提升进阶

  • iOS开发和进阶

    • README
    • ObjC编程入门

    • Swift编程入门

    • iOS入门到精通

      • iOS入门到精通案例
      • UIKit框架原理探索
      • UIViewController
      • 项目工程面板说明
        • 01.Main.storyboard
        • 1.1 故事版的作用
        • 1.2 故事版使用步骤
          • 1.3 能否去掉故事版
        • 02.SceneDelegate
          • 2.1 SceneDelegate是什么
          • 2.2 SceneDelegate职责
          • 2.3 SceneDelegate注意点
          • 2.4 删除SceneDelegate
        • 03.LaunchScreen
          • 3.1 LaunchScreen是什么
        • 04.AppDelegate
          • 4.1 AppDelegate是什么
          • 4.2 AppDelegate职责
          • 4.3 AppDelegate生命周期
          • 4.4 设置默认启动页面
        • 05.Pod包管理器实践
          • 5.1 Pod组件库管理
          • 5.2 安装Pod管理器
          • 5.3 创建Podfile文件
          • 5.4 安装依赖包
        • 06.info.list属性
          • 6.1 清单文件作用
          • 6.2 常见的属性介绍
          • 6.3 权限配置相关
          • 6.4 ATS拦截http
      • 通信实践和设计思想
      • 网络请求和数据解析
      • 多线程实践和原理
      • Swift和OC混编开发
      • Swift版SnapKit布局
      • 开发SDK实践设计
      • iOS经验类笔记积累
  • Web开发和进阶

  • Linux应用开发

  • Apps
  • iOS开发和进阶
  • iOS入门到精通
杨充
2025-04-07
目录

项目工程面板说明

# 08.iOS工程面板说明

# 目录介绍

  • 01.Main.storyboard
    • 1.1 故事版的作用
    • 1.2 故事版使用步骤
    • 1.3 能否去掉故事版
  • 02.SceneDelegate
    • 2.1 SceneDelegate是什么
    • 2.2 SceneDelegate职责
    • 2.3 SceneDelegate注意点
    • 2.4 删除SceneDelegate
  • 03.LaunchScreen
    • 3.1 LaunchScreen是什么
  • 04.AppDelegate
    • 4.1 AppDelegate是什么
    • 4.2 AppDelegate职责
    • 4.3 AppDelegate生命周期
    • 4.4 设置默认启动页面
  • 05.Pod包管理器实践
    • 5.1 Pod组件库管理
    • 5.2 安装Pod管理器
    • 5.3 创建Podfile文件
    • 5.4 安装依赖包
  • 06.info.plist属性
    • 6.1 清单文件作用
    • 6.2 常见的属性介绍
    • 6.3 权限配置相关
    • 6.4 ATS拦截http

# 01.Main.storyboard

# 1.1 故事版的作用

在iOS开发中,Main.storyboard是一个可视化界面编辑器,用于创建应用程序的用户界面。它是Xcode中的一个文件,用于设计和布局应用程序的视图层次结构。

如果你不进行代码控制,默认APP启动会加载main.storyboard这个界面。

# 1.2 故事版使用步骤

以下是使用Main.storyboard的一般步骤:

  1. 在项目导航器中,找到并打开名为Main.storyboard的文件。通常,它位于项目的根目录下。
  2. 在Main.storyboard中,您可以看到一个可视化的界面编辑器,以及一个对象库(Object Library)和属性检查器(Attributes Inspector)。
  3. 使用对象库中的控件(如按钮、标签、文本框等)拖放到界面编辑器中,以创建和布局您的用户界面。您可以调整控件的大小、位置和外观,以满足您的需求。
  4. 使用属性检查器来设置控件的属性,例如文本、颜色、字体、约束等。您可以通过选中控件并在属性检查器中进行更改来修改属性。
  5. 使用界面编辑器中的连接线(connections)和拖放手势(drag and drop gestures)来创建控件之间的交互和导航。
  6. 在界面编辑器中,您还可以创建和管理视图控制器(View Controller),并定义它们之间的导航关系。
  7. 在Main.storyboard中,您可以使用多个视图控制器来构建应用程序的不同屏幕和场景。您可以通过导航控制器(Navigation Controller)或标签栏控制器(Tab Bar Controller)等容器视图控制器来管理多个视图控制器之间的导航和切换。
  8. 在开发过程中,您可以通过在界面编辑器中进行实时预览来查看和测试您的用户界面。

Main.storyboard是一个重要的工具,用于设计和构建iOS应用程序的用户界面。它提供了一个直观的界面编辑器,使您能够以可视化方式创建和布局界面元素,并定义它们之间的交互和导航。

# 1.3 能否去掉故事版

需要修改这三处:1.删除main.storyboard这个文件,2.将Main Interface改为空,3.删掉info表中的"Main storyboard file base name”。

ios原生入门之storyboard页面绘制:https://blog.csdn.net/liuxingyuzaixian/article/details/129990516

# 02.SceneDelegate

# 2.1 SceneDelegate是什么

在iOS 13及更高版本中,引入了SceneDelegate作为应用程序的生命周期管理和多窗口支持的一部分。

SceneDelegate是一个代理对象,负责管理应用程序的场景(Scene)和与之相关的窗口(Window)。

# 2.2 SceneDelegate职责

SceneDelegate的一些主要职责和用法:

  1. 管理应用程序的场景:SceneDelegate负责创建、配置和销毁应用程序的场景。每个场景都代表了应用程序的一个独立实例,可以在多个窗口中同时运行。
  2. 管理窗口:SceneDelegate负责创建和管理与场景相关的窗口。您可以在SceneDelegate中设置窗口的根视图控制器(Root View Controller)和其他属性。
  3. 响应场景生命周期事件:SceneDelegate提供了一组方法,用于响应场景的生命周期事件,例如场景的创建、活动状态的变化、进入后台等。您可以在这些方法中执行相应的操作,例如更新界面、保存数据等。
  4. 支持多窗口:通过SceneDelegate,您可以为应用程序启用多窗口支持。每个场景都可以拥有自己的窗口,并且可以在不同的窗口中显示不同的内容。

# 2.3 SceneDelegate注意点

SceneDelegate是在iOS13的时候新增的,老项目的迭代更新的时候很少接触这个文件。

当AppDelegate和SceneDelegate两个文件共存的时候,不仅仅要关注AppDelegate中的回调函数,还要关注SceneDelegate代理的回调函数,因为在不同的iOS系统下走的文件回调是不一样的。

在iOS13之前通通走AppDelegate,iOS13之后就会走SceneDelegate。

# 2.4 删除SceneDelegate

不习惯使用 SceneDelegate 可以将其删除,步骤如下

  1. A. 首先删除 SceneDelegate文件:.h 和 .m
  2. B. 删除 AppDelegate文件 中新增的两个函数:application(:configurationForConnecting:options:) 和 application(:didDiscardSceneSessions:)
  3. C. 删除 Info.plist文件 中的 Application Scene Manifest
  4. D. 在 AppDelegate.h 中添加 window属性:@property (strong, nonatomic) UIWindow *window;

# 03.LaunchScreen

# 3.1 LaunchScreen是什么

Launch Screen是一个用于显示应用程序启动画面的界面。它是一个静态的界面,用于在应用程序启动期间显示,给用户一个初始的视觉反馈。

Launch Screen只是应用程序启动过程中的一个静态界面,它不应该包含复杂的逻辑或交互。一旦应用程序加载完成,Launch Screen将会被应用程序的主界面所取代。

Launch Screen的作用:Launch Screen用于在应用程序启动时显示一个静态的界面,以填补应用程序加载和初始化的时间间隙。它可以提供一个品牌标识、应用程序的名称或其他相关信息,给用户一个启动过程中的视觉反馈。

Launch Screen的设计:Launch Screen通常是一个简单的界面,不包含复杂的交互或动画。它应该尽可能地快速加载和显示,以便在应用程序启动期间提供一个无缝的体验。

iOS 13使用LaunchScreen.storyboard适配各尺寸启动图:https://juejin.cn/post/6844904040132771847

# 04.AppDelegate

# 4.1 AppDelegate是什么

AppDelegate是一个重要的类,用于管理应用程序的生命周期和处理系统级别的事件。它是应用程序的代理对象,负责处理应用程序的启动、进入后台、进入前台等事件。

简单来说,AppDelegate是应用程序与系统之间的桥梁,负责处理应用程序的生命周期事件、系统事件以及应用程序内部的一些重要事务。

# 4.2 AppDelegate职责

以下是AppDelegate的一些主要职责和用法:

  1. 应用程序的入口点:AppDelegate是应用程序的入口点,它在应用程序启动时被系统自动创建和实例化。您可以在AppDelegate中执行一些初始化操作,例如设置应用程序的初始界面、配置应用程序的全局设置等。
  2. 应用程序的生命周期管理:AppDelegate提供了一组方法,用于响应应用程序的生命周期事件。例如,当应用程序启动、进入后台、进入前台、即将终止等时,AppDelegate会调用相应的方法,您可以在这些方法中执行相应的操作,例如保存数据、更新界面等。
  3. 处理系统级别的事件:除了应用程序的生命周期事件,AppDelegate还可以处理一些系统级别的事件,例如接收远程通知、处理URL Scheme、处理应用程序间的数据共享等。您可以在AppDelegate中实现相应的方法来处理这些事件。
  4. 窗口和根视图控制器的管理:AppDelegate负责创建和管理应用程序的窗口(Window)和根视图控制器(Root View Controller)。您可以在AppDelegate中设置窗口的根视图控制器,并在需要时进行切换和管理。
  5. 全局状态的管理:由于AppDelegate是应用程序的代理对象,它可以访问和管理应用程序的全局状态。您可以在AppDelegate中定义全局变量或属性,以便在整个应用程序中共享和访问。

# 4.3 AppDelegate生命周期

AppDelegate的生命周期与应用程序的生命周期紧密相连。以下是AppDelegate生命周期的主要阶段及其对应的方法:

1.应用程序启动阶段

  1. application(:willFinishLaunchingWithOptions:): 这个方法在应用程序开始初始化但状态恢复尚未发生时调用。虽然它提供了执行初始化代码的机会,但通常不会在这里进行过多的操作,因为紧接着就会调用application(:didFinishLaunchingWithOptions:)方法。
  2. application(_:didFinishLaunchingWithOptions:): 这个方法在应用程序完成初始化并准备启动时调用。这是进行初始化操作(如设置根视图控制器、注册远程通知等)的主要地方。

2.应用程序活跃阶段

applicationDidBecomeActive(_😃:这个方法在应用程序进入前台并变为活跃状态时调用。这是执行启动后操作(如恢复网络请求、开始动画等)的好地方。

3.应用程序不活跃阶段

applicationWillResignActive(_😃:这个方法在应用程序将要失去活动状态时调用。例如,当用户按下Home键将应用程序切换到后台时,或者收到来电/短信等中断时。在这个阶段,可以进行一些准备工作,如保存数据、暂停音视频播放等。

4.应用程序后台阶段

applicationDidEnterBackground(_😃:这个方法在应用程序进入后台时调用。在这个阶段,可以进行一些清理工作,如释放资源、停止网络请求等。

5.应用程序重新进入前台阶段

applicationWillEnterForeground(_😃:这个方法在应用程序将要进入前台时调用。在这个阶段,可以进行一些准备工作,如恢复界面状态、重新加载数据等。

6.应用程序终止阶段

applicationWillTerminate(😃:在iOS中,应用程序通常不会被系统直接终止,而是会被挂起(suspended)以节省资源。然而,在某些情况下(如用户手动终止应用程序、系统内存不足等),应用程序可能会被终止。当应用程序将要被终止时,会调用applicationWillTerminate(:)方法

# 4.4 设置默认启动页面

方法1: 打开AppDelegate.swift文件。在didFinishLaunchingWithOptions方法中,找到以下代码:

window = UIWindow(frame: UIScreen.main.bounds)
let rootVC = YourViewController()
let navrootVC = UINavigationController(rootViewController: rootVC)
window?.rootViewController = navrootVC
window?.makeKeyAndVisible()
1
2
3
4
5

方法2: 用storyboard在AppDelegate.swift里面跳转控制器的代码

@icelovery func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let viewController = storyboard.instantiateViewControllerWithIdentifier("storybord名字")
    self.window?.rootViewController = viewController
    self.window?.makeKeyAndVisible()
    return true
}
1
2
3
4
5
6
7
8

注意,如果您使用了Main.storyboard作为应用程序的主要界面,您需要确保在Info.plist文件中正确设置了Main storyboard file base name键。

# 05.Pod包管理器实践

# 5.1 Pod组件库管理

CocoaPods 是 iOS 开发中常用的第三方库(组件)管理工具。允许添加依赖方便管理依赖。

# 5.2 安装Pod管理器

首先要安装Pods

sudo gem install cocoapods
$ pod --version
1.16.2
1
2
3

网上看了很多教程,如果安装失败,一般是访问梯子的问题。可以参考这篇博客:https://blog.csdn.net/weixin_38716347/article/details/116845164

# 5.3 创建Podfile文件

创建Podfile文件文件

pod init
1

可以手动创建下面的文件

platform :ios, '11.0'
use_frameworks!

target 'YourApp' do
  # 添加依赖项
  pod 'Alamofire', '~> 5.0'
  pod 'SwiftyJSON', '~> 5.0'
end
1
2
3
4
5
6
7
8

# 5.4 安装依赖包

当你想要的依赖在podfile中编写好了之后安装依赖

pod install
1

然后打开项目的.xcworkspace文件

使用项目的 .xcworkspace 文件而不是 .xcodeproj 文件来打开 Xcode。这是因为 CocoaPods 会为项目生成一个独立的工作空间,其中包含了原始项目和依赖项。

# 06.info.list属性

# 6.1 清单文件作用

清单文件是指应用程序的信息属性列表文件(Info.plist)。它是一个XML格式的文件,用于存储应用程序的配置和元数据信息。

清单文件包含了应用程序的各种设置,例如应用程序的名称、版本号、图标、权限要求、支持的设备等。

清单文件是iOS应用程序的重要组成部分,它定义了应用程序的行为和配置。通过编辑清单文件,可以设置应用程序的各种属性和权限要求。

# 6.2 常见的属性介绍

下面这些我们一般都不会在info.plist文件中修改,如果需要修改的话,直接在Project设置的General选项中修改

Bundle identifier : App的Bundle I在Apple Developer中申请的
Bundle name:  包名
Bundle version string (short) : 版本号
Bundle version :build号
Launch screen interface file base name : 启动页
Main storyboard file base name : 启动的根视图storyboard
Supported interface orientations : 设备支持的方向
1
2
3
4
5
6
7

# 6.3 权限配置相关

隐私是一个大家越来越关注的问题,所以我们在app开发中经常需要配置隐私权限,才能使用对应的API。

一些常用的权限字段说明:

Privacy - Calendars Usage Description :日历使用权限
Privacy - Bluetooth Peripheral Usage Description : 蓝牙使用权限
Privacy - Health Share Usage Description : 健康分享权限
Privacy - Health Update Usage Description : 健康数据更新权限
Privacy - Siri Usage Description : Siri使用权限
Privacy - Face ID Usage Description :  Face ID使用权限
Privacy - Microphone Usage Description : 麦克风使用权限,录音,发送语音
Privacy - Camera Usage Description: 摄像头使用权限,拍照,录制等
Privacy - Photo Library Usage Description :相册使用权限(iOS11之前读写权限,iOS11之后只有读的权限)
Privacy - Photo Library Additions Usage Description : 保存图片到相册(iOS11新增写入相册的权限)
Privacy - Contacts Usage Description  :通讯录使用权限
Privacy - Location Always Usage Description : 永久使用地址位置信息,定位相关(iOS11之前前后台都能获取定位的权限)
Privacy - Location When In Use Usage Description :仅在App使用期间访问地理位置信息
Privacy - Location Always and When In Use Usage Description :永久使用App定位的权限(iOS11之后)
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 6.4 ATS拦截http

由于安全原因,系统会拦截http请求,解决方案便是在info.plist文件中添加App Transport Security Settings的Allow Arbitrary Loads属性为YES。

上次更新: 2026/06/10, 11:13:41
UIViewController
通信实践和设计思想

← UIViewController 通信实践和设计思想→

最近更新
01
信号崩溃快速排查
06-15
02
CoreDump破案
06-15
03
perf火焰图实战
06-15
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式