Delphi 开发 iOS APP 的文件发布的问题

本文介绍了在使用Delphi 10.4.2和11开发iOS应用时,遇到SQLite数据库无法打开的问题。错误源于数据库文件未正确部署到iOS设备的Documents目录。解决方案是手动在Deployment设置中指定数据库文件的RemotePath为'.StartUpDocuments',并使用TPath.GetDocumentsPath获取实际路径。同时,代码中不应硬编码数据库路径,而应使用TPath.Combine与TPath.GetDocumentsPath动态组合。遵循这些步骤,可以确保FireDAC成功连接和操作SQLite数据库。

Delphi 写 iOS APP 嵌入 SQLite 数据库到 APP 里面作为 APP 的本地数据库

Delphi 10.4.2 社区版。

开发环境配置好以后,在 Delphi 里面可以直接按 F9 把程序下载到 iPhone 上跑起来。

但问题来了,我的程序用到了 SQLite,结果打开数据库出错。单步跟踪,发现情况是:

FDConnection1.Open 执行正确,异常出在 FDQuery1.Open 上面。错误提示是 XX 表不存在。这个 XX 表就是 FDQuery1 里面的 select * from XX 这个表。

这个信息误导了我,以为数据库打开了,表不在。同时,在 MAC 端的 PAServer 里面出现错误信息:error: Project1 :: Class 'TFDDatSManger' has a base class 'Firedac::Dats::TFDDatSNamedObject which does not have a complete definition.

让我以为是 FireDAC 有什么配置在 iOS 底下需要特别留意。

然后网上到处查资料,把英巴的官方文档和 iOS 有关的以及和 FireDAC 有关的读遍了也没发现问题在哪里。

反复测试,换 Delphi 11 测试,问题依旧。但是,反复测试也带来新的情况,新的情况是 FDConnection1.Open 出现异常了。这下我才怀疑数据库文件根本不存在。

加上 FileExists 函数去判断,果然数据库文件不存在。既然不存在,那之前为什么数据库连接又能成功执行?为啥现在又不能成功执行了?奇怪。

然后开始查文件不存在的原因。英巴的官方文档里面有关 SQLite 数据库在 iOS 里面跑到文档里,没有提到有用信息。最后查到某些说法,说发布的目标地址 Remote Path 应该是 StartUp\Documents。这里,当时我选择的是 ./assets/internal/,实际上,这里下拉,只有 ./assets/internal/ 一个可以选择,而且在做安卓程序的时候选择这个是正确的。

当然,按照网上的说法(非官方的),填入 StartUp\Documents,文件依旧不存在。聪明如我,当然会想到,应该模仿 ./assets/internal/,前面加上 ./ 后面加上 /

马上测试,输入 .\StartUp\Documents\ ,编译运行,在 iPhone 上能够成功打开数据库。

结论:

1. SQLite 的数据库文件 MyDB.db 要和 APP 一起安装到手机里面,在 Delphi IDE 的菜单 Project --> Deployment -- 打开这个 Deployment 窗口,在里面添加要安装的文件 MyDB.db,这个文件的 Remote Path 要手动填入 .\StartUp\Documents\ ,下拉选择没有这一项。

2. 文件安装到哪里了呢?APP 要打开文件去哪里读取?文件在APP 采用 TPath.GetDocumentsPath 获得的目录底下。

3. 重复一次:发布的时候,要和 APP 一起发布的文件,在 IDE 的 Deployment 窗口里面添加文件名后,该文件对应的 Remote Path 填入  .\StartUp\Documents\ ,APP 安装后,文件在 APP 的 TPath.GetDocumentsPath 目录底下。

4. 这个 TPath.GetDocumentsPath 在 Delphi 的程序框架里,默认不存在,必须要 uses System.IoUtils 这个单元。

5. 对于 FireDAC 来说,代码不能写死数据库在哪里。代码要这样写:

S := TPath.Combine(TPath.GetDocumentsPath, 'MyDB.db');

FdConnection1.Params.Database := S;

到这里,采用 FireDAC 在 APP 里面使用和 APP 一起打包的 SQLite 数据库就没有问题了。

Delphi XE8 iOS与Android移动应用开发(APP开发)[完整中文版],这是一本不可多得的介绍使用delphi xe8开发iOS与Android移动应用的电子书,实用的技术开发教程与技术开发手册。 Delphi XE8跨平台开发让你使用一套代码完成iOS和Android移动应用开发。强大的控件支持,让你可以不用编写一句代码并在短短几分钟内完成数据库的读写 应用开发开发效率得到充分提升,让编程不再是枯燥无味的工作。全书400多页,从开发环境的安装配置到使用基本界面控件、使用移动设备功能(移动定位、 照像机等)、使用后端服务、访问数据库等都作了全面介绍,是第一本国内最全的中文版Delphi XE8技术开发教程。本书需要有一定delphi基础知识的人阅读。 目 录 第一章 移动应用程序开发iOS和Android) 17 1. 安装与配置 17 2. 使用基本用户界面控件 18 3. 使用设备功能 20 4. 使用后端服务 21 5. 访问数据库 21 第二章 配置Mac上的开发环境(IOS) 23 2.1 Mac 和 iOS 的要求 23 2.2 配置 Mac 上的iOS模拟器 24 2.2.1 安装平台助手 24 2.2.2 运行平台助手 25 2.2.3 在Mac上安装Xcode 26 2.3 配置 Mac上iOS 硬件设备运行环境 28 2.3.1 在Mac上安装Xcode命令行工具 28 2.3.2 注册一个开发者账户 30 2.3.3 申请、下载并安装你的开发证书 30 2.3.4 注册您的设备 32 2.3.5 创建与安装配置文件 33 第三章 配置WINDOWS PC上的开发环境(iOS) 36 3.1 配置 RAD Studio 环境 37 3.1.1创建与Mac连接的配置 37 3.1.2为iOS设备添加一个SDK 40 第四章 配置WINDOWS PC上的开发环境 (Android) 43 4.1设置 RAD Studio 环境 43 4.1.1 安装RAD Studio时 android 开发工具安装选项 44 4.1.2 在开发环境中配置 Android SDK 46 4.2安装Android USB 驱动程序(必须) 50 第五章 创建移动平台应用程序 (iOS and Android) 54 5.1在你开始之前 54 5.2创建一个新的Android或iOS FireMonkey应用 55 5.3选择Style 56 5.4在多设备窗体上放置组件 56 5.5添加视图到项目 60 5.6编写用户单击按钮的事件处理程序 60 5.7测试移动应用程序 62 5.7.1在Android 设备上测试应用程序 63 5.7.2在 iOS测试应用程序 64 第六章 使用不同风格的按钮控件 (iOS and Android) 67 6.1移动平台中的按钮 67 6.2定义按钮控件的友好界面 68 6.2.1使用按钮控件的 TintColor 和 IconTintColor属性 69 6.2.2自定义按钮控件的图片 71 6.3使用按钮控件创建Segmented Control 72 6.4在工具栏创建 Scope Bar 74 第七章 使用日历控件选取日期 (iOS and Android) 76 7.1移动平台中的日历 76 7.2为用户更改的日期编写事件处理程序 78 第八章 组合框控件的使用 (iOS and Android) 81 8.1多设备应用程序中的选择器 81 8.2使用代码建立列表数据项 84 8.3显示一个指定的项目 84 8.4编写用户选择后的事件处理程序 86 第九章 使用地图控件 (iOS and Android) 88 9.1TMapView 控件的基本功能 89 9.2创建示例应用程序 89 9.2.1配置 Android 应用程序以使用 TMapView 控件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值