为了方便移动开发初学者的学习,本节将从创建一个iOS项目开始,详细介绍整合Mobile SDK到iOS项目的方法。但是,如果读者手中已经有一个iOS项目需要使用Mobile SDK,那么在设置该项目的运行最低系统版本为9.0的基础上,跳过下面的“1 .创建iOS应用程序”部分进行配置即可。
(1)打开Xcode(本书使用11.3版本进行演示),并在Xcode欢迎页面中单击“Create a new Xcode project”选项创建一个新的Xcode项目,Xcode欢迎页面如图3-17所示。
图3-17 Xcode欢迎页面
(2)在弹出的“Choose a template for your new project:”对话框中选择新建项目的模板“Single View App”(单视图应用程序),并单击【Next】按钮继续,如图3-18所示。
图3-18 “Choose a template for your new project:”对话框
(3)如图3-19所示,在“Choose options for your new project:”对话框中输入项目的基本信息。
● 在“Product Name”选项中输入项目名称“DroneFly”。
● 在“Organization Name”选项中输入组织名称“igsnrr”。
● 在“Organization Identifier”选项中输入组织标识“cas.igsnrr”。
● 在“Language”选项中选择使用的编程语言“Objective-C”。
● 在“User Interface”选项中选择用户界面技术“Storyboard”。
此时在“Bundle Identifier”选项中自动生成Bundle标识“cas.igsnrr.DroneFly”,其他单选框均留空,单击【Next】按钮继续。
图3-19 “Choose options for your new project:”对话框
(4)在弹出的对话框中选择项目的存储位置,单击【Create】按钮即可完成创建DroneFly应用程序项目。
iOS Mobile SDK通过Framework技术将其二进制文件和相关的资源文件等整合在一起,名为DJISDK.framework。有两种方法在iOS项目中整合Mobile SDK:第一种方法是通过CocoaPods下载DJISDK.framework文件并使用Mobile SDK;第二种方法是手动导入已经下载好的DJISDK.framework文件。
方法一:通过CocoaPods下载并使用Mobile SDK
CocoaPods是iOS项目中的类库管理工具,iOS Mobile SDK支持CocoaPods管理项目,详情参见https://cocoapods.org/pods/DJI-SDK-iOS。通过CocoaPods下载并使用Mobile SDK非常方便,具体步骤如下所示。
(1)关闭DroneFly项目。
(2)打开Mac OS中的文本编辑应用程序,并在菜单栏中选择【格式】-【制作纯文本】(快捷键:⇧⌘T)。在新建的文本中键入以下内容:
将上述文本文件存储在DroneFly项目的根目录(“DroneFly.xcodeproj”文件的所在目录)之中,并命名为“PodFile”,如图3-20所示。
图3-20 新建PodFile文件
❀ 如果Mac系统中没有安装CocoaPods,则可通过Ruby命令“sudo gem install cocoapods -n /usr/local/bin”安装CocoaPods。
(3)打开终端,并在“PodFile”所在目录下运行以下命令安装Mobile SDK(见图3-21):
pod install
图3-21 使用Cocoapads安装Mobile SDK
❀ 如果在更新Mobile SDK版本时出现“CocoaPods could not find compatible versions for pod "DJI-SDK-iOS"”错误,可尝试使用“pod repo update”命令更新CocoaPods仓库。
(4)安装完成后,在DroneFly项目的根目录下会自动生成“pods”目录,并可在其目录下的“./DJI-SDK-iOS/iOS_Mobile_SDK/”目录中找到自动下载的“DJISDK.framework”文件。
(5)由于CocoaPods通过工作空间文件管理项目的类库,因此此时打开DroneFle项目的根目录下的工作空间文件“DroneFly.xcworkspace”即可使用Mobile SDK。
方法二:手动导入DJISDK.framework文件
具体的操作步骤如下所示。
(1)在DJI Mobile SDK的下载页面(https://developer.dji.com/cn/mobile-sdk/downloads/)中下载并解压iOS_Mobile_SDK_4.13.1.zip文件,然后找到其中的DJISDK.framework文件,并将其复制到DroneFly项目的根目录下。
(2)打开DroneFly项目的项目设置面板,并在左侧列表的“TARGETS”中选择“DroneFly”。在“General”选项卡中找到“Frameworks, Libraries, and Embedded Content”选项,并单击下方的【+】按钮。
(3)在弹出的“Choose frameworks and libraries to add”对话框中,单击左下角的下拉菜单选择【Add Others…】-【Add Files…】,并在弹出的对话框中找到并选择DJISDK.framework文件的所在位置,单击【Add】按钮添加Framework文件(见图3-22)。此时,在DroneFly项目的项目设置面板的“Frameworks, Libraries, and Embedded Content”选项中,即可查看到DJISDK.framework文件。请确认DJISDK.framework右侧的“ Embed ”选项选择为“Embed&Sign”(见图3-23)。
图3-22 添加Framework文件
图3-23 添加DJISDK.framewrok文件到DroneFly项目
此时,我们就可以在DroneFly项目中使用Mobile SDK啦。
❀ 为了方便Mobile SDK的更新与管理,建议开发者使用CocoaPods工具管理Mobile SDK和其他各类第三方SDK。采用手动导入DJISDK.framework文件的方式使用Mobile SDK的唯一好处在于避免使用了Xcode工作空间(Workspace),从而简化了整个项目结构。
在Xcode资源管理器中选择DroneFly项目,打开项目设置窗口,并在其左侧列表的“TARGETS”下面选择“DroneFly”。然后,在“Info”选项卡中进行如下设置。
(1)添加无人机连接iOS设备的附件协议,即增加“Supported external accessory protocols”数组属性,并添加“com.dji.common”“com.dji.protocol”和“com.dji.video”三个字符串元素,如图3-24所示。
图3-24 添加无人机连接iOS设备的附件协议
(2)允许应用程序使用HTTP协议(非HTTPS),即在“Info”选项卡中增加“App Transport Security Settings”字典属性,并在其内部添加键“Allow Arbitrary Loads”,将其值设置为“YES”,如图3-25所示。
图3-25 允许应用程序使用HTTP协议(非HTTPS)
(3)设置应用程序密钥,即增加“DJISDKAppKey”属性,并将其值设置为密钥字符串(详见“2.3.3申请应用程序密钥”节内容),如图3-26所示。
图3-26 设置应用程序密钥
(4)设置申请用户权限描述,增加“Privacy - Bluetooth Always Usage Description”属性,并将其描述设置为“是否允许此App使用蓝牙?”,如图3-27所示。
图3-27 申请用户权限设置
此时调试运行程序,在启动DroneFly应用程序时会弹出蓝牙权限的确认对话框,如图3-28所示。
图3-28 蓝牙权限的确认对话框
❀对于使用Swift 3语言的项目,还需要在“Build Settings”选项卡的“Search Path”选项组中将“Header Search Paths”选项只保留“$(PODS_ROOT)/Headers/Public”目录,否则会在编译时出现“Include of non-modular header inside framework module 'DJISDK'”错误。