Day#10 初始专案...again (+版本控制)

前言

原本的想法其实是希望可以写一个类似交友软件的app,但中途卡关,也觉得学得不够扎实,所以先写了一个小小的to-do list当作起步。
现在可能懂的比较多一点点,看看能不能完成,就当作一个更大的挑战吧୧༼✿ ͡◕ д ◕͡ ༽୨

XCode 专案

教大家如何开app新专案的文章有够多XD,这边就不赘述了。

专案大致的架构如下:arrow_down:

├─Info.plist
├─Resources
|  ├─AppDelegate
|  ├─SceneDelegate
|  ├─Extensions
|  └─DatabaseManager
├─Controllers
|  ├─ConversationViewController (原本的main ViewController)
|  ├─ChatViewController
|  ├─LoginViewController
|  ├─NewConversationViewController
|  ├─PhotoViewerViewController
|  ├─ProfileViewController
|  ├─RegisterViewController
|  └─VideoPlayerViewController
└─Views
   └─Storyboards
      ├─Main.Storyboard
      └─LaunchScreen.Storyboard

这次多了一些上次小专案没有的架构与档案,在此稍微说明一下。

Info.plist

放一些设定的地方。好随便的说明啊
如果对应到以前後端开发的档案,定位就像是config文件。
像是针对不同环境去设定变数,就可以在这边更改。

AppDelegate & SceneDelegate

简单来说,AppDelegate负责app的生命周期,而SceneDelegate负责前端画面显示的东西。
而你问我生命周期是什麽...感谢网路上总是有大神,能把???的技术用语以白话文精准清楚的解释,参混淆系列:App 的生命周期「App Life Cycle」

其中讲到当前ios13 AppDelegate中共有3个函式
:::info

  1. (:didFinishLaunchingWithOptions:) 当 App 完成系统初始化的动作时,第一时间会呼叫此函式,但当 App 进入到背景状态时,再切回到原本的 App 中则不会呼叫该函式。
  2. (_:didFinishLaunchingWithOptions:) 当建立一个新的画面时会呼叫此函式。当我们什麽都没有设置的时候,Xcode 会自动在 Info.plist 中生成一个默认的档案,名为「Default Configuration」并保留在 plist 中让使用者可以找到
  3. (:didDiscardSceneSessions:) 在 iPadOS 中使用。当使用者切换画面时(例如关闭程序等)会呼叫此函式。使用此函式可有效的释放 App 的资源。
    :::

Extensions

一些共同元件,或是单纯处理画面、与商业逻辑无关的程序转换。

DatabaseManager

跟DB连线,然後使用这个singleton连线去对DB进行资料存取。

版本控制

其实我前一份程序也有做版控,总之版控起手式

git init

在地端资料夹加上版控

git add .
git status

把目前的内容加入,使用git status可以看到还没commit的内容已被加入

git commit -m "Init pj"

commit後可以使用log去看提交纪录。

git log

不过有GUI就会想用一下,所以就下载了GitHub桌面版 XD
还算蛮好用的,也可连到GitHub、进行push。不过本系列文也不是旨在如何成为git大师,就大概带过基本语法~~

Cocoapods

先前第一次初始专案时已经提过cocoapods的角色,那我这边就不多加说明,直接附上内容。

pod init
open Podfile

可在终端机使用以上指令,然後贴上以下的dependencies。

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'RealTimeChatroom' do
  # Comment the next line if you do not want to use dynamic frameworks
  use_frameworks!

  # Pods for RealTimeChatroom

pod 'Firebase/Core'
pod 'Firebase/Auth'
pod 'Firebase/Database'
pod 'Firebase/Analytics'

pod 'MessageKit'
pod 'JGProgressHUD'
pod 'RealmSwift'
pod 'SDWebImage'

end

与上次不同,我们这次的DB采用firebase。存档後把resources下载下来。

pod install

结语

接下来就可以打开workspace,明天会先从注册/登入的画面下手。

如果有任何错误或指教,欢迎留言给我!第10天了,加油加油 ໒( ͡ᵔ ▾ ͡ᵔ )७


<<:  Day25 - 如何安全的把 Kubernetes Secret 储存到 Git Repository

>>:  那些被忽略但很好用的 Web API / Clipboard

[Day 7]想不到有梗的标题LA(前端篇)

没有想到连假结束後的第一天就要冨樫了...,我工作的公司在新加坡,而我在台湾full remote,...

DAY9 MongoDB 文件与嵌入式(巢状)文件查询(Find)

DAY9 MongoDB 文件与嵌入式(巢状)文件查询(Find) Find 把 MongoDB 的...

Day 27 - State Monad II

在上一章,我们提到了如何用一般方法实作 PRNG 乱数生成器,本章将介绍 State Monad 以...

Day 23 资料宝石:【Lab】RDS架构 建立自己的第一台云端资料库 (下)

今天我们来示范如何让一台 EC2 Instance 连线使用之前创建好的 RDS Instance...

仿Trello - Apollo client cache 操作

本系列文以制作专案为主轴,纪录小弟学习React以及GrahQL的过程。主要是记下重点步骤以及我觉...