学习笔记18-Multiple Scenes、异常处理、fastlane、iOS架构

284 阅读3分钟

Multiple Scenes

在 iOS 13 即以后的版本中,苹果引入了一个新的概念叫做 UIScene 场景。一个应用程序 UIApplication 可以支持多个场景 (Scenes),可通过 UIApplication.connectedScenes 访问当前已连接的场景。

打开一个新的场景,可以调用 UIApplication.shared.requestSceneSessionActivation。

SceneDelegate 用于管理应用程序的多个场景,它的主要作用是处理每个场景的生命周期事件,确保应用程序能够正确地响应场景的创建、激活、断开和销毁。

UIWindowScene 和 UIWindow 之间包含与被包含的关系,一个 UIWindowScene 可以关联一个或多个 UIWindow 实例,但 UIWindow 不能独立于 UIWindowScene 存在。

Multiple Scenes.jpg

异常处理

在 iOS 开发中,Objective-C 和 Swift 都支持异常处理机制,其中 Objective-C 使用 @try、@catch、@finally、@throw 关键字,而 Swift 使用 do、try、catch、throw 关键字。

在 ARC 环境下,抛出异常有可能导致无法调用 release 方法,对象将在抛出异常的时候发生泄漏。对于这个问题,有个 -fobjc-arc-exception 标志告诉编译器生成异常安全代码,能确保即使在异常发生时,对象的内存管理也能正确进行。

然而,需要注意的是,苹果推荐使用错误处理(error handling)而不是异常处理(exception handling)来处理可恢复的错误。异常处理应该仅用于真正的异常情况,即那些不应该被恢复的错误。

fastlane

fastlane 是一套用于 iOS 和 Android 应用自动化部署和发布的工具集。它通过简化重复性任务,如截图、代码签名和上传到应用商店,来提高效率。fastlane 由多个独立工具组成,支持自定义 Ruby 脚本,并可与主流 CI/CD 工具集成。

  • 安装:sudo gem install fastlane
  • 初始化:fastlane init,生成 fastlane 目录和目录下的 Appfile 文件、Fastfile 文件
  • Appfile: 主要存储 App 相关的一些信息,比如 AppleID、bundleId 等
  • Fastfile: fastlane 的配置文件,它用于定义自动化任务的流程 Fastfile 示例如下:
default_platform(:ios)

platform :ios do
  desc "Description of what the lane does"
  lane :release do
    capture_screenshots                  # generate new screenshots for the App Store
    sync_code_signing(type: "appstore")  # see code signing guide for more information
    build_app(scheme: "MyApp")
    upload_to_app_store                  # upload your app to App Store Connect
    slack(message: "Successfully uploaded a new App Store build")
  end
end

iOS 架构

iOS 操作系统的架构是一个分层的架构,每层都有其特定的职责和功能。从顶层到底层,这些层次分别是:

  • Cocoa Touch 层:提供了用于构建用户界面的控制和视图类
  • Media 层:包含处理音频、视频和图像的框架
  • Core Services 层:提供了各种服务和功能,支持应用程序的基本功能需求
  • Core OS 层:最底层,直接与硬件交互

ios architecture.jpg

参考文档