Multiple Scenes
在 iOS 13 即以后的版本中,苹果引入了一个新的概念叫做 UIScene 场景。一个应用程序 UIApplication 可以支持多个场景 (Scenes),可通过 UIApplication.connectedScenes 访问当前已连接的场景。
打开一个新的场景,可以调用 UIApplication.shared.requestSceneSessionActivation。
SceneDelegate 用于管理应用程序的多个场景,它的主要作用是处理每个场景的生命周期事件,确保应用程序能够正确地响应场景的创建、激活、断开和销毁。
UIWindowScene 和 UIWindow 之间包含与被包含的关系,一个 UIWindowScene 可以关联一个或多个 UIWindow 实例,但 UIWindow 不能独立于 UIWindowScene 存在。
异常处理
在 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 层:最底层,直接与硬件交互