第1章 创建项目并集成LeanCloud SDK
在真正创建Instagram仿真项目之前,让我们先了解下BaaS(Backend as a Service,后端即服务)的相关知识。试想一下,现在大部分的手机应用(App)都需要和后端服务器进行交互,小到用户登录、存储关键信息,大到数据分析、实时监控和直播。不借助移动网络并使用后台数据服务的单机应用现在真是屈指可数了。
BaaS可以为我们做什么呢?它主要为移动应用开发者提供各种移动后端服务,帮助移动(网页)应用开发者将他们的应用与后端云储存和后端应用开放的API连接,同时提供了用户管理、推送通知以及与社交网络服务整合等功能。这些服务的提供是通过使用定制的软件开发工具(SDK)和应用程序接口(API)来实现的,如图1-1所示。
图1-1 用户通过iPhone的App与LeanCloud云端进行数据交互
当用户使用手机打开某个App以后,App会通过特定API与BaaS平台的服务进行数据交换和处理,并将需要的数据或处理结果反馈给当前用户或其他用户。
在国内,也有几个老牌的MBaaS(Mobile Backend as a Service,移动后端即服务)平台, LeanCloud就是其中一个,通过它所提供的服务,我们再也不需要租用服务器,也不需要编写后端代码。LeanCloud平台提供了一站式后端云服务,从数据存储、实时聊天、消息推送到移动统计,涵盖应用开发的多方面后端需求。
在国外,最著名的BaaS平台就是广大程序员所熟知的Parse,它的出名不仅仅是因为它的广泛用户群体,更重要的是在Facebook收购它以后,出于对自身竞争力的考虑,决定在2017年年初关闭Parse,并将Parse的源代码开源。
1.1 访问LeanCloud
步骤1 浏览器中访问leancloud.cn,注册一个账号,如果之前注册过则直接登录,如图1-2所示。
图1-2 在浏览器中访问leancloud.cn
步骤2 在应用程序列表中单击创建应用按钮,输入新应用名称,这里设置为Instagram,单击创建按钮,如图1-3所示。
图1-3 在LeanCloud云端创建Insta-gram应用
步骤3 在LeanCloud云端创建好后台应用程序以后,单击该应用标签右上角的齿轮图标便进入到Insta-gram程序的配置页面。在该页面中单击顶端帮助菜单中的快速入门,如图1-4所示。
图1-4 从菜单中找到快速入门
步骤4 在快速入门页面中选择好开发平台(iOS)和应用(Instagram),就可以根据下面的步骤将LeanCloud SDK集成到项目之中了。
1.2 创建Xcode项目——Instagram
在LeanCloud云端创建好Instagram应用以后,我们还需要在Xcode中创建一个iOS项目。
步骤1 运行Xcode 8(截止到目前还是beta版),在欢迎菜单中选择Create a new Xcode project。从项目模板面板中选择iOS→Application→Single View Application,如图1-5所示。
图1-5 Xcode项目模板选择对话框
步骤2 在模板设置对话框中设置Project Name为Instagram; Team为你开发用的AppleID账号;Organization Name为开发团队或个人的名称,可任意填写;Organization Identifier为组织标识,推荐为一个域名的反向,比如这里的cn.liuming;Bundle Identifier会被自动设置为Organization Identifier与Product Name的整合;Language为Swift; Devices为iPhone;剩下的三个选项全都不用勾选,如图1-6所示,单击Next按钮。
图1-6 设置Instagram应用的基础选项
步骤3 在确定好项目保存的本地磁盘位置以后,单击Create按钮,便成功创建iOS项目——Instagram。图1-7所示是该项目在Xcode 8中的工作界面。
图1-7 Xcode的工作界面
接下来,需要将LeanCloud SDK集成到Instagram项目之中了。
1.3 将LeanCloud SDK集成到iOS项目中
安装LeanCloud SDK到iOS项目有两种不同的方式:一是通过CocoaPods方式,一是通过手动安装方式。如果你对CocoaPods有所了解的话,肯定首选这个,因为它大大简化了安装过程并且易于维护。好在这一过程并不复杂,让我们开始吧!
步骤1 根据LeanCloud入门引导,在Xcode导航区域的Instagram项目图标(蓝色的)上单击鼠标右键(Control+Click),在弹出的快捷菜单中选择New File,如图1-8所示。
图1-8 在Instagram项目中添加一个新文件
步骤2 在新文件模板中选择Other→Empty,单击Next按钮。设置文件名为Podfile后,单击Create按钮,如图1-9所示。
图1-9 选择新建文件类型
步骤3 在项目导航中选中Podfile文件,并添加下面的代码到文件中。
use_frameworks! # LeanCloud SDK 只能作为动态框架集成到项目中 target 'Instagram' do # Instagram 是项目的名称 pod 'AVOSCloud' # LeanCloud 基础模块 pod 'AVOSCloudIM' # IM 模块 pod 'AVOSCloudCrashReporting' # 崩溃报告模块 end
Podfile文件的第一行代表我们所安装的LeanCloud SDK必须作为动态框架集成到项目中。然后是对Instagram项目添加三个模块:AVOSCloud、AVOSCloudIM和AVOSCloud-CrashReporting。其中,第一个模块是必须添加的,后面两个是可选的。
注意
在LeanCloud SDK的框架中所有模块名称都是以AVOS开头的,这是为什么呢?据说,当时该平台的名称就叫作AVOSCloud,但是担心国内对使用AV一词有被屏蔽的风险,所以就改成了LeanCloud。
步骤4 关闭Xcode,打开Mac系统的终端程序,进入当前的Instagram项目文件夹中,也就是含有Podfile文件层级的目录。执行pod install命令。
liumingdeMBP:Instagram liuming$ ls Instagram Instagram.xcodeproj Podfile liumingdeMBP:Instagram liuming$ pod install Analyzing dependencies Downloading dependencies Installing AVOSCloud (3.3.5) Installing AVOSCloudCrashReporting (3.3.5) Installing AVOSCloudIM (3.3.5) Generating Pods project Integrating client project [! ] Please close any current Xcode sessions and use `Instagram.xcworkspace` for this project from now on. Pod installation complete! There are 3 dependencies from the Podfile and 3 total pods installed.
通过CocoaPods方式在Instagram项目中安装好LeanCloud SDK框架以后,就可以在项目中使用AVOSCloud模块提供的API了。
提示
如果你的Mac OS系统还没有安装过CocoaPods的话,可以使用手机或平板扫描下方的二维码,如图1-10所示,观看在Mac OS系统上安装CocoaPods的视频教程。
图1-10 在Mac OS系统中安装CocoaPods的视频教程
步骤5 在Mac OS系统的Finder中打开Instagram项目,注意,此时我们需要打开的项目文件不再是Instagram.xcodeproj,而是Instagram. xcworkspace。只有打开这个文件,Instagram项目中才会包含LeanCloud SDK。
当上面的这些步骤操作完成以后,在项目导航中看起来应该是如图1-11所示的样子。
图1-11 在Xcode中添加AVOSCloud框架后的效果
我们所打开的Instagram.xcworkspace实际上是一个Xcode的工作区,在该工作区中一共有两个项目:Instagram和Pods。Pods就是通过CocoaPods自动生成的项目,该项目维护着Instagram项目所依赖的第三方库——LeanCloud SDK。
注意
iOS从8.0开始支持动态库,所以请确保你的项目只支持iOS 8及以上版本。
1.4 初始化 LeanCloud SDK
接下来,我们需要在项目中添加一些文件和代码,对LeanCloud SDK进行初始化。
由 于Instagram项 目 是Swift语 言 项 目,而 加 载 的 第 三 方 库LeanCloud SDK是Objective-C语言的项目,因此在Swift项目中调用Objective-C语言的API,需要我们在Instagram中添加一个桥接文件。
步骤1 在项目导航中选择Instagram组(黄色图标的),右击鼠标在菜单中选择New File,在新文件模板面板中选择iOS→Cocoa Touch Class创建一个新类,在新文件选项面板中将Language设置为Objective-C,其他按默认值即可,单击Next和Create按钮。此时, Xcode会弹出一个新的对话框,提示是否配置一个Objective-C的桥接头文件,单击Create Bridging Header按钮,如图1-12所示。此时,在项目中创建了Instagram-Bridging-Header.h文件和另外两个Objective-C的类文件:xxxxx.h和xxxxx.m。
图1-12 为Instagram创建Objective-C的桥接头文件
步骤2 在项目导航中选中删除xxxxx.h和xxxxx.m文件,并将其移动到垃圾桶(Move to Trash)。然后打开Instagram-Bridging-Header.h文件,在该文件中添加下面的代码:
#import <AVOSCloud.h>
经过上面的两步操作,现在我们就可以在Instagram(Swift语言)项目中随意调用AVOSCloud(Objective-C语言)的API函数了,而且调用语法还是保持着swift风格。
步骤3 添加下面的代码到application(_: didFinishLaunchingWithOptions:)方法中,当应用程序启动后会首先调用该方法,我们可以在这里进行最基础的设置,比如这里通过AVOSCloud API让应用程序连接到LeanCloud云端平台。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]? ) -> Bool { AVOSCloud.setApplicationId("2NL5pkgYfnrMXkbf17w5rU62-gzGzoHsz", clientKey: "6Sl5rQaIyXh90CE0i26b2gaJ") // 如果想跟踪统计应用的打开情况,可以添加下面一行代码 AVAnalytics.trackAppOpened(launchOptions: launchOptions) return true }
通过AVOSCloud类的setApplicationId(_: clientKey:)方法,可以让应用程序连接到LeanCloud云端,它带有两个参数:第一个参数applicationId是在LeanCloud中创建的应用程序Id,第二个参数clientKey是LeanCloud应用中的client key。我们可以在LeanCloud云端中的Instagram控制台里面找到相关的Key值,然后直接复制即可,如图1-13所示。
图1-13 在LeanCloud平台查看Key信息
步骤4 在AVAnalytics.trackAppOpened(launchOptions: launchOptions)代码的下面,添加下面的代码:
AVAnalytics.trackAppOpened(launchOptions: launchOptions) let testObject = AVObject(className: "TestObject") testObject? .setObject("bar", forKey: "foo") testObject? .save() return true
通过上面的代码,我们首先创建了一个AVObject类型的对象,该对象相当于云端TestObject数据表中的一条数据记录。因为是新建,所以该记录应该是全新的,并且等待着存储到云端的TestObject数据表里面。
如果在云端的Instagram应用中没有TestObject数据表的话,AVObject对象会自动创建它。该对象将foo字段的值设置为bar,如果TestObject中没有foo字段的话,AVObject也会自动创建该字段。最后,保存这条记录到云端的TestObject数据表里面。
技巧
除了使用setObject(_:forKey key:)方式添加数据到TestObject对象以外,还可以利用AVObject类的脚标方式添加数据,
let testObject = AVObject(className: "TestObject") //testObject? .setObject("bar", forKey: "foo") testObject? ["foo"] = "bar" testObject? .save()
步骤5 构建并运行项目,一个类名为TestObject的新对象会被发送到LeanCloud云端并保存下来。当程序启动以后,在LeanCloud上访问控制台→数据管理就可以看到上面创建的TestObject的相关数据,如图1-14所示。
图1-14 在LeanCloud云端的Instagram应用中查看添加的数据
在LeanCloud云端的TestObject数据表中,除了foo字段以外,每条记录都会默认有一个objectId字段,作为记录的唯一标识;ACL字段与认证相关;createdAt代表该条记录的创建时间;updatedAt代表该条记录的修改时间。
当LeanCloud SDK测试成功以后,就可以删除之前的测试代码了,删除下面的代码:
let testObject = AVObject(className: "TestObject") //testObject? .setObject("bar", forKey: "foo") testObject? ["foo"] = "bar2" testObject? .save()
本章小结
本章我们学习了如何在LeanCloud云端创建Instagram应用,在Xcode中创建一个Single View Application类型的iOS应用程序项目,以及通过CocoaPods方式安装LeanCloud SDK到Xcode项目中的方法。
当我们开发iOS应用时,会经常使用到各式各样的第三方开源类库,比如JSONKit、AFNetWorking等。可能某个类库又用到其他类库,所以要使用它,必须下载所有需要用到的类库,而手动一个个下载所需类库十分麻烦。此外,项目中用到的类库如果有更新,就必须下载新版本,重新加入到项目中。面对这样的情况,CocoaPods成为一个非常好的选择。CocoaPods是iOS最常用且最有名的类库管理工具,上述两个烦人的问题,通过CocoaPods,只需要一行命令就可以完全解决,当然前提是你必须正确设置它。重要的是,绝大部分有名的开源类库,都支持CocoaPods。因此,作为iOS程序员,掌握CocoaPods的使用是必不可少的基本技能。