使用MongoDB Realm在iOS上的注意事项是在2020年11月25日的时点上。2020年11月25日时适用于在iOS上使用MongoDB Realm时需要注意的事项
经过过程
目前,我正在私下开发一款iOS/Android(可能还包括Web)的应用程序。
由于计划开发一款能够在多个平台上同步数据的应用程序,因此决定使用文章标题中提到的MongoDB Realm。
在尝试将MongoDB Realm引入iOS应用时,由于一些特殊情况,在2020年11月25日需要注意一些要点,我在这里记下了备忘录。
请务必选择MongoDB 4.4版本。
如标题所示,MongoDB Realm要求使用MongoDB 4.4版本(截至2020年11月25日)。
Realm的图标是闪电,而MongoDB的图标是树叶。
MongoDB Realm使用者需要在AWS / Google Cloud / Azure上搭建MongoDB Atlas集群。
由于MongoDB Realm提供了Web UI(称为Realm UI),因此可以通过它轻松构建。所以按照Realm UI的指示进行操作,很容易会忽视的一点是(我之前也是这样),MongoDB的版本必须为4.4。
由于默认版本为4.2,某些区域只能使用4.2版本,所以在使用时请注意。
选择您偏好的供应商、地区、层次和附加设置。在您构建集群时,Atlas会在页面底部显示相关成本。
如果您希望使用同步,请确保为您的集群选择MongoDB版本4.4!
只要按照文檔中的指示操作,您可以在https://docs.mongodb.com/realm/get-started/create-realm-app/#b-create-an-atlas-cluster創建一個Atlas集群。
无法通过SwiftPM来引入Realm吗?
在阅读这份文档时,我们正在将Realm引入iOS应用程序。按照这里所记载的,Realm已经支持Swift Package Manager(SwiftPM),因此我们通过SwiftPM添加了Realm作为依赖。
根据文档指示,在追加后添加import语句。
import RealmSwift
我添加了以下内容,但无法找到应用程序,因此无法构建,并出现类似于错误的消息。
let app = App(id: YOUR_REALM_APP_ID) // Replace YOUR_REALM_APP_ID with your Realm app ID
「import文不足了吗?在Swift Package Manager中添加依赖有错误?」我怀疑我自己有所疏忽,所以重新阅读了文档,但似乎没有特别的问题。最初我怀疑是因为App.swift不存在,所以我查看了realm-cocoa的Package.swift文件发现,App.swift被排除了,似乎这是原因。试着通过CocoaPods添加依赖后,构建成功了。
由于我对被排除的原因感到好奇,尽管在文件中没有提及通过SwiftPM添加的情况下App.swift是不存在(无法使用)的,我还是追踪了一下公关事务。
App.swift被添加为Package.swift中需要排除的内容是通过这个PR完成的,但是根据这个PR,只是将RealmApp重命名为App,所以rename之前的RealmApp.swift成为需要排除的内容是根据这个PR完成的。根据PR评论,只写了”Description TK.” 。但是在阅读CHANGELOG.md后发现,这个PR似乎是开始支持MongoDB集成。
添加对下一代同步的支持。支持将数据同步至MongoDB而非Realm对象服务器。应用程序必须在realm.mongodb.com上创建。
不过,关于RealmApp.swift在Package.swift文件中被排除的原因,似乎没有特别的说明。仅有这么一条提交记录,理由不够明确,所以我决定在问题中询问一下。
只需给出一个选项: 在尝试创建问题时存在以下 ISSUE_TEMPLATE
!!! MANDATORY TO FILL OUT !!!
<!---
**Questions**: If you have questions about HOW TO USE Realm, ask on
[StackOverflow](http://stackoverflow.com/questions/ask?tags=realm),
or in our [Swift Forum](https://forums.realm.io/c/swift) or [Obj-C Forum](https://forums.realm.io/c/objc).
**Feature Request**: Just fill in the first two sections below.
**Bugs**: To help you as fast as possible with an issue please describe your issue
and the steps you have taken to reproduce it in as many details as possible.
-->
## Goals
<!--- What do you want to achieve? -->
## Expected Results
<!--- What did you expect to happen? -->
## Actual Results
<!--- What happened instead?
e.g. the stack trace of a crash
-->
## Steps for others to Reproduce
<!--- What are steps OTHERS can follow to reproduce this issue? -->
## Code Sample
<!---
Provide a code sample or test case that highlights the issue.
If relevant, include your model definitions.
For larger code samples, links to external gists/repositories are preferred.
Alternatively share confidentially via mail to help@realm.io.
Full Xcode projects that we can compile ourselves are ideal!
-->
## Version of Realm and Tooling
<!---
[In the CONTRIBUTING guidelines](https://git.io/vgxJO), you will find a script,
which will help determining some of these versions.
-->
Realm framework version: ?
Realm Object Server version: ?
Xcode version: ?
iOS/OSX version: ?
Dependency manager + version: ?
考虑到这次的事情,Swift论坛中的模板可能更适合,而且初步分析,似乎没有类似的问题,所以我决定在那里提问。
所以,我现在尝试发布了一个标题为“为什么App.swift在Package.swift中被排除?”的帖子,但看起来似乎需要批准,所以还没有显示出来。
我们已收到您的新帖子,但在出现之前需要经过管理员的审核。请耐心等待。
您有1篇待审核的帖子。
如果收到任何回复,我会追加的话。
2020年11月25日22:43补充
当文章发布后,我立刻收到了回复。(回复速度超级快)
所以,Realm的同步功能似乎不支持SPM。
我们可以直接通过Cocoapods或Carthage来使用。
虽然可能有些好的将这些信息写在文档中,但考虑到同步功能可能还在开发中或者是测试阶段,所以可能还在进行整理。
最后
不知道怎么说,变成了没有条理的文章,但是我想表达的是以下两点。
-
- Be sure to select MongoDB version 4.4
- SwiftPM経由でRealmを導入できない?
以上!