状态栏

Help

Search 框可以方便地检索相关设置项。

xcode-unknown-tips-Search

⌘ 1 .. ⌘ 7 可以切换窗口。

Show the Symbol navigator

在类不多时,可以方便查看所有类的结构;类多时可使用下方的 filter 功能过滤。

xcode-unknown-tips-Show the Symbol navigator

Show the Breakpoint navigator

点击右下角 + 选择 Exception Breakpoint..,可以添加更明确的报错断点,支持选择 Objective-C 或 Swift 语言。

xcode-unknown-tips-Show the Breakpoint navigator

Utilities

⌘ ⌥ 1 .. ⌘ ⌥ 7 可以切换窗口。

Show the Code Snippet Library

代码片段模板,也可以将自己写好的代码片段拖入。

xcode-unknown-tips-Show the Code Snippet Labrary

Show the Media Library

可以直接拖拽图片到 xib 中,自动创建 UIImageView。

xib

快捷键

按住 option 拖拽可以快速复制组件。

快捷键

option ⌥

  • 按住 并点击代码或方法时,可查看行内文档帮助。
  • 按住 点击文件可以在辅助编辑窗模式打开文件(多栏显示,适用于 xib 与代码绑定)。推荐
  • 按住 ⌥ ⇧ 点击文件可以选择文件打开的窗口位置。

显示和隐藏栏

  • ⌘ ⇧ y 显示/隐藏调试区域。
  • ⌘ ⌥ ⏎ 显示辅助编辑栏,Open the assistant editor
  • ⌘ ⏎ 隐藏辅助编辑器栏。

组合键

^ 为 control,⌥ 为 option

  • ⌘ ⌥ { ⌘ ⌥ } 整行上下移动代码。
  • 将光标放在方法名上任一位置,点开 Edit,按住 ⌃ ⇧ 将看到 Copy Qualified Symbol Name,按住 ⌃ ⇧ ⌥ 将看到 Copy Symbol Name。例如 [UIColor colorWithRed:255/255.0f green:127/255.0f blue:80/255.0f alpha:1] 将被拷贝为 +[UIColor colorWithRed:green:blue:alpha:]
  • 自动缩进代码:^ i,或全选 ⌘ a^ i
  • ⌘ ⇧ o Open Quickly 快速查找文件。

UIKit 技巧

UITableViewCell 自适应 UITextView 高度

使用 Auto Layout 实现:

  1. 给 textView 上下左右建立相对于 cell 的约束
  2. 取消 textView 的 Scrolling Enabled
  3. 设置 tableView.estimatedRowHeight = 70
  4. 设置 textView.delegate = self

关键代码(避免 reloadData 导致键盘隐藏和跳动):

func textViewDidChange(_ textView: UITextView) {
    let currentOffset = tableView.contentOffset
    UIView.setAnimationsEnabled(false)
    tableView.beginUpdates()
    tableView.endUpdates()
    UIView.setAnimationsEnabled(true)
    tableView.setContentOffset(currentOffset, animated: false)
}

Command Line

  • security find-identity -v 显示已安装的有效证书身份。

常见问题

Too many symbol files

上传 App Store 后收到此警告,通常是因为三方库生成了冗余的 32 位 symbols 文件。

解决方法:在 Podfile 中添加:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ARCHS'] = 'arm64'
    end
  end
end

检查 info.plist

<key>UIRequiredDeviceCapabilities</key>
<array>
    <string>arm64</string>
</array>

在 Build Settings 中搜索 valid architecture,填写 arm64

库推荐

R.swift - 强类型引用资源

R.swift 获取强类型、自动编译的图片、字体、segues 等资源,避免字符串引用导致的运行时错误。

// 传统方式(字符串,无编译检查)
let icon = UIImage(named: "settings-icon")
let font = UIFont(name: "San Francisco", size: 42)

// R.swift(强类型,编译时检查)
let icon = R.image.settingsIcon()
let font = R.font.sanFrancisco(size: 42)

配置要点:

  • 添加 R.generated.swift 时不要勾选 Copy items if needed
  • .gitignore 添加 *.generated.swift
  • 新增资源后需 ⌘ + B 编译才可使用

PromiseKit - 异步编程

PromiseKit 用于解决回调地狱问题:

// Promise 链式调用
firstly {
    login()
}.then { creds in
    fetch(avatar: creds.user)
}.done { image in
    self.imageView = image
}.catch {
    // 错误处理
}

// 并行操作
when(fulfilled: operation1(), operation2())

核心概念:

  • then - 链式调用,返回新 Promise
  • done - 链尾成功处理
  • catch - 统一错误处理
  • when - 并行等待多个 Promise
  • ensure - 无论成功失败都执行

fastlane - 自动化构建

fastlane 是 iOS/Android 自动化构建工具集:

  • produce - 创建 App ID
  • cert / sigh - 管理证书和描述文件
  • gym - 构建打包
  • deliver - 上传 App Store
  • snapshot - 自动截图
  • match - 团队证书同步

建议直接参考 fastlane 官方文档,并结合 Xcode Cloud 或 GitHub Actions 实现 CI/CD。

References