状态栏
Help
Search 框可以方便地检索相关设置项。

Navigator
⌘ 1 .. ⌘ 7 可以切换窗口。
Show the Symbol navigator
在类不多时,可以方便查看所有类的结构;类多时可使用下方的 filter 功能过滤。

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

Utilities
⌘ ⌥ 1 .. ⌘ ⌥ 7 可以切换窗口。
Show the Code Snippet Library
代码片段模板,也可以将自己写好的代码片段拖入。

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。 ⌘ ⇧ oOpen Quickly 快速查找文件。
UIKit 技巧
UITableViewCell 自适应 UITextView 高度
使用 Auto Layout 实现:
- 给 textView 上下左右建立相对于 cell 的约束
- 取消 textView 的
Scrolling Enabled - 设置
tableView.estimatedRowHeight = 70 - 设置
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- 链式调用,返回新 Promisedone- 链尾成功处理catch- 统一错误处理when- 并行等待多个 Promiseensure- 无论成功失败都执行
fastlane - 自动化构建
fastlane 是 iOS/Android 自动化构建工具集:
produce- 创建 App IDcert/sigh- 管理证书和描述文件gym- 构建打包deliver- 上传 App Storesnapshot- 自动截图match- 团队证书同步
建议直接参考 fastlane 官方文档,并结合 Xcode Cloud 或 GitHub Actions 实现 CI/CD。