美文网首页MVVM+RAC
基于MVVM构建聊天App (一)从新建工程开始

基于MVVM构建聊天App (一)从新建工程开始

作者: 小時間光 | 来源:发表于2020-06-19 15:02 被阅读0次

    在开发一个新的App时不仅要考虑当前版本的需求,更要考虑到后期的版本迭代和维护工作 《Clean Code》一书中也提出代码大部分时候是用来维护的,而不是用来实现功能的。所以在前期的框架设计,技术调查上应该慎之又慎。本次我将从个人开发者角度围绕着代码的可维护性、可测试性、可复用性来实现一个简单的聊天App。

    1、基本设置

    新建一个工程,命名为RPChat,此处开发语言选择Swift:

    (1)、在工程中设置Info.plist中设置Allow Arbitrary Loads为YES,参考:stackoverflow Transport security has blocked a cleartext HTTP

    https配置

    (2)、打开Assets.xcassets按照指定的图片大小添加App的Logo图片。

    Logo

    2、工程结构

    添加三个framework分别命名为RPChat_iOS、RPChatUIKit、RPChatDataKit

    添加framework 添加framework 工程目录
    • RPChat_iOS是和UI的显示以及交互相关的代码
    • RPChatUIKit是整个项目中会用到的对UIKit的公共扩展
    • RPChatDataKit是整个项目的数据存储以及访问接口,也可以理解为是App的View Model以及Model

    3、使用carthage管理第三方开源库

    carthage version
    
    cd /Users/****/Desktop/GitHub/RPChat
    
    touch Cartfile
    

    使用VSCode打开Cartfile文件,输入用到的第三方开源库:

    github "Alamofire/Alamofire" // Http请求封装
    github "ReactiveX/RxSwift" // 用于管理App中的事件
    github "onevcat/Kingfisher" // 用于App中的缓存和下载图片
    github "SwiftyJSON/SwiftyJSON" // 生成Model
    gitHub "CoderMJLee/MJRefresh" // UItableView下拉组件
    github "robbiehanson/CocoaAsyncSocket" 
    

    执行更新命令:

    carthage update --platform iOS
    

    更新完成后,打开工程,选择TARGETS -->Build Phases--> Link Binary With Libries 点击加号,选择 Add File --> Carthage --> Build --> iOS 添加所需的FrameWork,

    下面的gif演示了如何添加第三方的FrameWork

    gif

    接下来,点击+,选择New Run Script Phase,此时新建了Run Script,在执行命令中添加:

    /usr/local/bin/Carthage copy-frameworks
    
    New Run Script

    Input Files中引入我们要用到的库的路径:

    $(SRCROOT)/Carthage/Build/iOS/Alamofire.framework
    

    其作用是把Carthage引入的第三方库在打包的时候,拷贝到特定目录。

    Carthage

    在上传到git仓库时,不需要传Carthage下的文件,所以选择忽略,在.gitignore文件中添加

    .gitignore
    *.DS_Store
    Carthage/
    xcuserdata/
    .idea/
    

    4、兼容iOS 13之前的老版本

    修改最低支持版本为iOS 11

    iOS 最低版本

    此时发现再Build工程,发现已经有很多Error,这是版本兼容的问题,由于Xcode 11新建的工程默认为当前最高版本,Xcode新增了一个SceneDelegate文件,具体作用请参考官方文档:Optimizing App Launch。现在要在AppDelegate和中SceneDelegate做兼容老版本处理。 方法就是对当前系统做一个判断,然后再根据不同系统版本分开处理。

    版本报错

    SceneDelegate直接加上@available(iOS 13.0, *)即可,
    AppDelegate做扩展处理:

    代码如下:

    @available(iOS 13.0, *)
    class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    
    }
    
    @available(iOS 13.0, *)
    extension AppDelegate {
        func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
             return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
        }
        func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
        }
    }
    

    5、国际化

    1、常用文案国际化
    • 1、如下图所示: 创建所需国际化的语言,此处我创建了英语、繁体汉语、简体汉语:
    image
    • 2、在工程中新建一个String File文件,命名为Localizable
    国际化2

    点击到Localizable.strings文件,点击右侧Localize...按钮添加需要国际化的语言。

    国际化3

    此时来做个测试,在ViewController新建一个名为testLabUILabel;

    @IBOutlet weak var testLab: UILabel!
    

    展开Localize.strings文件,在英文中添加test;,在简体中文中添加:

    "test" = "测试";
    

    ViewController中调用,

    testLab.text = NSLocalizedString("test", comment: "")
    
    test 测试

    此时点击Run可以看到testLab显示内容为test;

    English

    修改模拟器语言为简体汉语,再次运行:

    简体汉语
    2、App名称国际化
    • (1)、同样的方法新建一个名为InfoPlistString文件。

    • (2)、在InfoPlist.strings(English)文件中添加:

      CFBundleName = "CatchU";
      
    • (3)、在 InfoPlist.strings(Chinese,Simplified)中添加

      CFBundleName = "畅聊吧";
      
    • (4)、 打开Info.Plist设置Bundle name属性为$CFBundleName

    Bundle name
    • (5)、再次运行代码,可以看到,App的名称已经修改成功了。
    App Name

    本篇主要讲了App的新建和相关配置,包括:

    • 新建工程,基本配置
    • 通过三个frameworks去实现App不同层次的功能
    • 通过Carthage管理工程中用的第三方开源库
    • 对iOS 13之前的系统做一个兼容处理
    • 国际化相关

    相关文章

      网友评论

        本文标题:基于MVVM构建聊天App (一)从新建工程开始

        本文链接:https://www.haomeiwen.com/subject/vlwvxktx.html