iOS 开发环境配置备忘
2022-12-04 tech mac swift ios objectc apple-developer xcode 19 mins 112 图 6990 字

按照一些教学视频做的简单备忘:
- 斯坦福大学 CS193p
- Udemy付费课程 iOS13 & Swift - The Complete iOS App Development Bootcamp
这篇文章主要记录一些环境配置的内容,涉及代码的地方以 objectc为主,interface以storyboard为主。
后续分成几篇分别记录 objectc , swift , swiftUI 的 reference。
个人认为,对于有代码能力的人来说,这些教程内容都太过冗长,实际操作中我一般快速扫过视频,让脑子有个印象即可,需要学习特定内容再使用 chatgpt + 返回教程回顾,可以省下大量时间,并且在学习的过程中给自己更强的信心。
iOS和其他后端语言相比,乍一看让人生畏的地方,可能就是可视化的那些内容。至少我一开始是这样看的。稍微掌握之后就可以直接实战了。我甚至想到了photoshop的一些操作。
零、环境准备
- 
    一台MacBook Air/Pro 或者 Mac mini/studio 或者 iMac 
- 
    一台iPhone,iPad也可以。 
- 
    macOS,一个较新的版本。 
- 
    Xcode:,一个较新的版本。 https://developer.apple.com/support/xcode,这里列了不同版本 xcode 的OS、sdk支持情况。 Xcode也可以直接在 app store 中下载,但就不能选择特定版本了。 另外不要下载Beta版本,以免有奇怪的bug。  
- 
    一个apple 开发者账号。 只开发不发布的话,是免费的,不需要付费。 https://developer.apple.com 
- 
    一个良好、稳定的网络环境。 
一些文档
- 
    Xcode的Help链接里有文档:  
- 
    还有一个app,名字叫 Developer:  
- 
    GitHub Awesome :https://github.com/dkhamsing/open-source-ios-apps  
- 
    udemy 教材相关链接:https://www.appbrewery.co/p/ios-course-resources/,我也保存了一份pdf备份。 
- 
    令人发指的函数式编程和相关语法糖 
一、Project


Project interface分为 Storyboard 和 SwiftUI。这两者的区别为:
- storyboards和- XIB(Xml Interface Builder) 包含相当多的- XML语句,不容易阅读,也不容易编辑。
- storyboards随着时间的推移越来越大。
- XIB和- Swift是非常独立的东西,- XIB对- Swift代码不了解,而- Swift代码对- XIB也不了解。
- SwiftUI 是一个只适用于 Swift的框架。
- SwiftUI 代码比 storyboards的XML更容易阅读和管理。

最简单的创建:
- storyboard
- object c
- 不包括Tests
1. 使用storyboard, objectc生成


- Main.storyboard文件用来设计、拖拽。
2. 使用 storyboard, swift 生成


3. 使用 swiftUI, swift 生成


二、真机运行
如果是在真机上运行:
- 需要在xcode上配置证书
- 需要在手机上开启开发者模式:设置->隐私与安全性->开发者模式
- 需要在手机上信任开发者证书
以上都是免费的,不需要注册开发者账号。如果使用模拟器,则不用这么麻烦。
另外如果是从互联网上下载的代码,建议不要随意在真机上运行,有安全风险。




设置-> 通用->VPN与设备管理:

如果你的账号是团队的成员,我这边遇到好几个问题顺便记录一下(2023.08.20):
在账号中不显示团队信息,
大概率是在web配置页面,管理员没有配置你为开发者,并且开启了拉取配置信息的权限。
Failed to register bundle identifier The app identifier “xxx” cannot be registered to your development team because it is not available. Change your bundle identifier to a unique string to try again.
这里参考 Xcode Error: “The app ID cannot be registered to your development team.”
cd ~/Library/MobileDevice/Provisioning\ Profiles rm * Xcode > Preferences... > Accounts > click your Account and Team name > click Download Manual Profiles
running,点击这个三角形就在真机运行。

在Windows-> Devices and Simulators 可以看到设备列表:


Preview 可以在这里设置:

三、概念理解/设计模式
1. 系统库




框架:
- Foundation
- Core Data
- Map Kit
- UIKit
- Core Motion
2. MVC/MVVM
一般后端常讲 mvc,在iOS等前端语言中一般说mvvm,个人感觉是一样的概念。MVC:


3. Protocol/Delegate
(视频在model里)声明protocol:

controller 里实现:

4. extension

5. function


6. 闭包
关键字是 in


转成闭包:

7. 闭包细节
将函数作为返回值,如下。

最后精简为:
calculator(n1:2,n2:3){$0 * $1}
这种场景下,就可以用闭包代替。一步一步代替:
- 
    把multiply改成闭包:  
- 
    挪到调用的地方:  
- 
    让编译器自个判断闭包的返回值类型  
- 
    return可以省略:  
- 
    把3行换成1行显示  
- 
    用匿名参数$0 $1  
- 
    swift的规则,如果函数的最后一个参数是闭包,可以直接把这个参数省略掉,扔到括号外。(逆天!!!,可读性逆天!!!)  
另一个逆天的缩写,这次用map函数:


一步一步来:



最终结果:


8. 线程
UI的内容更新要在主线程里:DispatchQueue.main

9.其他库
- CoreLocation
以下开始是 xcode 的一些简单功能
四、添加资源、素材
右上角的+用得最多了,添加各种组件。

1. 增加画布
- 增加一个 viewcontroller.swift文件,自个copy 模版ViewController的内容,主要是import UIKit
- 再在storyboard上增加一个view controller。
- 右侧栏上设置对应的class。


2. 导出各种格式尺寸的第三方工具
- 应用图标Logo 转换+iOS一堆尺寸图一键导出:App Icon Generator
- 画图素材网站:https://www.canva.cn/
asset 目录里有很多不同尺寸的图(注意设置All Size):


3. 图标 SF Symbols

4. 暗色模式
Image Set -> Appearance -> 设置明色与暗色

5. 矢量图
Image Set-> Resizing -> 保留矢量信息

五、页面、页面元素和代码关联
1. 代码关联

选择 Assistant 可以将代码和界面放一起:

声明组件和Action可以用拖拽的方式,ctrl+拖动


放在 class的前部分默认就是 outlet,放在后部分默认就是Action。

关联关系可以在图形上右键查看:


2. 自适应布局
选集,061 Setting Constraints and working with the Safe Area
2.1 constraints
指定item和边缘的距离。

2.2 alignment/pinning

iOS里的stack view组件可以类比为html中的div组件。
view controller里的文件视图类似于photoshop里的图层反过来。
2.3 stack view
上图右下角的最右边那个收纳的图标。
4. UITextField

六、view、controller和绑定
1. 纯代码
这样在图形化界面里我们就根本看不见这个view了,没办法用拖拽的方式给它添加东西。
- 新建一个 swift文件:

- 
    命名为ViewController secondVC,改一下 import 为UIKit`
- 
    定义一些基本的变量保存数据 
- 
    override func viewDidLoad 
- 
    定义一个组件,例如 UILabel 
- 
    在上一个页面的 ViewController里给 secondVC 的变量赋值
- 
    在上一个页面的 ViewController里self.present(secondVC, animated:true, completion: nil)
2. 拖拽式生成view并绑定controller
在图形界面新建一个viewController


新建一个cocoa touch class:


然后在 storyboard 里点一下还没有绑定 vc 的图形:


选择之后就可以看到它绑定好了。

3. 生成view间关联:segues

点击中间那个关联的方块,设定segues的identifier名字:

然后在代码中触发这个切换:
self.performSegue(withIdentifier: "testSeg", sender: self)
同时,在前一个 controller 里我们可以做这个view 在切换前的准备工作。
4. 设置顶部出现返回栏:navigation controller
先点击第一个viewcontroller(黄色的图标),再点击再菜单栏上选择 Editor->Embed In->Navigation Controller,


navitationItem.hidesBackButton = true
4. 数据传输
给另一个 vc 创建变量:

转场的时候,将数值传过去:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
          if segue.identifier == "testSeg" {
            let destinationVC = segue.destination as! ResultViewController
            destinationVC.bmiValue = calculatorBrain.getBMIValue()
            destinationVC.advice = calculatorBrain.getAdvice()
            destinationVC.color = calculatorBrain.getColor()
        }
    }
5. 返回上个view
在新的vc里返回上一个view: 用 dismiss 方法
    @IBAction func recalculatePressed(_ sender: UIButton) {
        dismiss(animated: true, completion: nil)
    }
6. 3D查看
确保应用在运行时,可以用3D的方式查看图层,点击中间那个三个图层叠加的图标Debug View Hierarchy:


8. viewcontroller的生命周期
七、cocoapods

sudo gem install cocoapods
pod setup --verbose
更详细内容参考这篇《cocoapods 初接触》
八、
1. mark

2. 代码片段



十二、教程课程备忘
Udemy付费课程 iOS13 & Swift - The Complete iOS App Development Bootcamp
app:Rich, 015

app: Dicee, 035

app:Xylophone, 071

up 推荐面向Google 和stack overflow编程。

app: EggTimer, 081
swift相关,没啥看头

看一个时间控制器:

app: Quizzler, 095
也没啥看头

同样一个时间控制器:


app: BMI Calculator, 119
用 UISlider

也教了一些使用reference文档的方法,124

app:clima, 143

查查api开发之类的。
app: Flash Chat, 173
https://github.com/appbrewery/Flash-Chat-iOS13

布局相关 , 059

网络相关,149


动画相关,175
Timer.scheduledTimer

swift相关, 122
这些内容我觉得 斯坦福 那个视频更好。


firebase, 184-186
Firebase 是由 Google 提供的一套为开发者提供后端服务的平台,可以帮助开发者快速构建高质量的移动应用、Web 应用和桌面应用。Firebase 提供了多种功能,包括实时数据库、身份认证、云存储、云函数、分析、消息推送等。
对于 iOS 和 Android 开发者来说,Firebase 提供了一系列 SDK 和工具,使他们可以轻松地集成 Firebase 功能到他们的应用中。以下是 Firebase 提供的一些主要功能:
- 
    实时数据库 (Realtime Database):Firebase 的实时数据库是一个云托管的 NoSQL 数据库,它能够实时同步数据,使得多个客户端能够同时查看和修改数据,而不需要编写复杂的同步代码。 
- 
    身份认证 (Authentication):Firebase 身份认证提供了简单易用的身份验证功能,支持电子邮件/密码、手机号码、Google、Facebook、Twitter、GitHub 等多种登录方式。 
- 
    云存储 (Cloud Storage):Firebase 的云存储可以让开发者轻松地将用户生成的内容,如图像、视频或用户数据存储到云端,而无需自己搭建服务器。 
- 
    云函数 (Cloud Functions):Firebase 云函数让开发者能够以事件驱动的方式在云端运行代码,例如在数据库写入时触发某些操作。 
- 
    分析 (Analytics):Firebase 分析提供了应用的使用情况分析,包括用户行为、用户流、转化率等指标,帮助开发者了解用户并改进应用。 
- 
    消息推送 (Cloud Messaging):Firebase 云消息推送可以向应用的用户发送通知消息,包括文字、图像和声音等。 
- 
    性能监控 (Performance Monitoring):Firebase 提供了性能监控功能,帮助开发者监控应用的性能指标,并定位性能问题。 
- 
    A/B 测试 (A/B Testing):Firebase 提供了 A/B 测试功能,让开发者能够测试不同功能或设计对用户行为的影响,从而优化应用。 
总的来说,Firebase 提供了一整套的后端解决方案,使得开发者可以专注于应用的前端开发,而无需花费大量精力在搭建和管理后端服务上。
其他内容
- 闭包,150
- json,151
- compute 方法,152
 
          
