因此,我正在开发两个要使用同一个 iCloud 容器的应用程序。
我已经按照 Xcode 和苹果的在线文档中所示的所有步骤进行操作。我在我的应用程序中添加了激活的 iCloud 功能,选中了 CloudKit 复选框,选择了一个我想要使用的自定义容器(这两个应用程序显然相同)。
该应用程序已更改权利文件中的 iCloud 容器标识符,这应该表明一切正常。但是,每当我使用该应用程序并打印我的容器名称时,它都会显示每个应用程序的默认容器名称。
我创建了一个对象,CloudKitController用于管理所有云流量。我将它初始化为应用程序启动的超时时间,并设置如下变量:
var container: CKContainer
var publicDB: CKDatabase
let privateDB: CKDatabase
var delegate: CloudKitControllerDelegate?
override init() {
container = CKContainer.default()
print(container.containerIdentifier)
//this prints the name of the default container for the project
publicDB = container.publicCloudDatabase
privateDB = container.privateCloudDatabase
}
Run Code Online (Sandbox Code Playgroud)
我什至访问了开发人员门户并确保我要使用的容器是两个应用程序都关联的唯一容器。也没有用。
我的问题是:我怎样才能让两个应用程序(显然来自同一个开发人员帐户和配置文件)在一个 iCloud 容器上运行?
在我的应用程序中,我决定使用 CloudKit 作为我的同步后端。我的应用程序与项目无关,但为了简单起见,我们可以这么说......
所以......在我的应用程序中,用户将有多个项目。其中每个都包含与该项目关联的多个实体。比如任务,还有提醒等等。
所有这些数据将存储在用户的私人数据库中。公共数据库中不会有任何内容。
现在一个用户可以拥有多个项目。
我的第一个问题:每个项目都应该在它自己的 CKRecordZone 中吗?我没有看到这样做的好处?!?有人可以向我解释一下拥有多个记录区的好处是什么吗?所以目前所有项目都在一个区域。
接下来,我希望用户能够与其他人共享他的所有数据。目前的问题是,由于该项目当前是我数据库中的根记录,我需要为每个项目创建一个共享,对吗?!?在我的应用程序中,单独邀请用户加入每个项目实际上没有意义,因此我想以某种方式对其进行存档。创建一个将项目作为子项目的新根记录,然后用户邀请某人加入这个新根记录是否有意义?
最后一个问题...是否有类似 Sack-Team 之类的组织可以询问有关 CloudKit 的问题?似乎比在 stackoverflow 上开始一个新问题更容易,因为我的问题非常针对我的应用程序......
我正在尝试连接到 ICloud 日历并解析事件,如果我使用公共日历 url 并且工作正常,我可以做到这一点。但是,这样做我无法更新我需要连接的事件CalDav。
我很挣扎,因为这里的大多数示例都返回 404 Not Found。
任何人都可以指导我 C# 中的“ICloud Caldav 连接获取日历”示例或工作示例。
请记住,对于上述内容,我将仅拥有Username和Password帐户,因此只要我必须加载日历列表即可。
我试图在过去的 2 个小时里用谷歌搜索这个,但发现几乎没有任何用处。假设我想在 CloudKit 平台上创建一个带有联系人的消息传递应用程序。
您为用户使用公共数据库。假设您可以通过电子邮件地址在平台上搜索人员。所以电子邮件是一种存储在用户记录类型中的公共信息。然而,这个用户也有只有被接受的联系人才能看到的秘密信息。您邀请他成为您的联系人,该联系人将保存到公共数据库中并发送某种通知。
现在怎么办?您如何共享有关用户的秘密信息,例如电话号码,或者比方说他的所有联系人。CKShare似乎不能解决此类问题。另外,如果我私下给对方发消息,这条记录会保存在哪里?进入公共数据库?诶。
当然,我可以将其全部保存在公共数据库中,但这如何安全?如果应用程序可以,那么有人不能获取数据吗?我读过有关加密数据的文章,但这对我来说听起来像是很多工作和混乱,甚至不知道如何按需共享密钥。
我正在尝试使用以下代码从 iCloud 电子邮件地址发送一些电子邮件:
import smtplib
def main():
smtp_obj = smtplib.SMTP('smtp.mail.me.com', 587)
smtp_obj.starttls()
smtp_obj.login('user@icloud.com', 'password')
pairs = {'name_1': 'email_1@gmail.com', 'name_2': 'email_2@gmail.com'}
try:
for name in pairs.keys():
body = 'hi {}'.format(name)
print('Sending email to {}...'.format(name))
send_status = smtp_obj.sendmail(smtp_obj.user, pairs.get(name), body)
if send_status != {}:
print('There was a problem sending mail to {}.\n{}'.format(name, send_status))
except smtplib.SMTPDataError:
print('Sending email to {} failed.'.format(name))
finally:
smtp_obj.quit()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
然而,当我运行这个时,我只得到一个 SMTPDataError,说:
smtplib.SMTPDataError: (550, b'5.7.0 From address is not one of your addresses')
Run Code Online (Sandbox Code Playgroud)
我尝试过对不同的地址进行硬编码。当我使用我的地址时,我得到了这个。当我使用一个我知道是错误的地址时,错误消息还会打印出无效的电子邮件(该帐户无法访问该电子邮件 - …
我有一个使用 iCloud 进行同步的 iOS 和 iPadOS 应用程序。它们在 App Store 中,并且数据库已投入生产。它们的工作原理与广告中所宣传的一样。
我还编写了一个使用 iCloudkit 的 macOS 应用程序,它设置的容器NSPersistentCloudKitContainer和合并策略都设置正确。我还检查了应用程序的配置文件和证书是否正常,以及应用程序的权限。
Apple 签署了该应用程序,但是它不与 iCloud 同步,我不明白为什么。我在 Mac 上检查了 iCloud,该应用程序就在那里,设置为同步。我是否已经阅读了几篇文章并尝试了所有可能的解决方案,包括退出并重新登录、重建应用程序等。
有一件事,当我删除一个项目时,应用程序需要一些时间才能对其做出反应,就好像它正在尝试连接一样。我尝试使用 TCPDump 和其他工具来检查连接问题,但我找不到尝试连接的应用程序。
我拍了一些不同配置的屏幕截图等,以便您也可以看到,但是有人遇到过这个问题吗?您知道可能的解决方案吗?
谢谢。
Mac 上的 iCloud 设置
开发者站点上的配置文件
应用程序的项目设置(是的,容器/数据库与 iOS 应用程序相同)
代码在persistance.swift:
import CoreData
struct PersistenceController {
static let shared = PersistenceController()
static var preview: PersistenceController = {
let result = PersistenceController(inMemory: true)
let viewContext = result.container.viewContext
for _ in 0..<10 {
let newBolt = Jot(context: viewContext)
newBolt.id = UUID()
newBolt.text = …Run Code Online (Sandbox Code Playgroud) 我在应用程序商店中有一个现有的应用程序,我正在添加iCloud.我跟随Apple的指南和其他人一起工作正常.但是我注意到,如果我的设备上安装了2.0版本的应用程序(最后一个生产版本),然后我将版本3.0(带有iCloud的版本)从Xcode部署到设备,当我运行应用程序时,我得到:
NSUbiquitousKeyValueStore error: com.yourcompany.YourApp has no valid com.apple.developer.ubiquity-kvstore-identifier entitlement
Run Code Online (Sandbox Code Playgroud)
但是,如果我从设备中删除原始应用程序然后从Xcode部署3.0我没有收到错误,并且iCloud工作正常.
我应该怎么做才能让用户在升级之前不必删除应用程序?
我在运行iOS 5.0.1的多个设备上试过这个,它们都做同样的事情.
我正在尝试将iCloud支持添加到我的iOS-5.1应用程序中,根据Apple的iCloud设计指南 "准备使用iCloud的应用程序"部分.它说:
在应用程序启动过程的早期 - 在应用程序中:didFinishLaunchingWithOptions:方法(iOS)或applicationDidFinishLaunching:方法(OS X),通过调用NSFileManager方法ubiquityIdentityToken检查iCloud可用性,如下所示:
id currentiCloudToken = [[NSFileManager defaultManager] ubiquityIdentityToken];
问题是,这个方法(ubiquityIdentityToken)在OS X v10.8及更高版本中可用,我只安装了10.7.4.
如果我在10.7下进行开发,是否有任何解决方法或其他解决方案?为什么这种方法可用性与OSX版本相关,而不是iOS版本?
我有几个星期的时间来解决这个问题..所以请帮我解决这个问题.
我从苹果WWDC 2012下载了iCloud的核心数据示例代码.并试图将它用于我的应用程序,但没有任何效果.
当然,我改变了一些代码..但我不知道我应该做什么,也找不到任何关于它和教程的网站..
我已经花了几个星期,我很累.我知道这是因为我缺乏技巧.
我面临的问题是......
- (void)asyncLoadPersistentStores {
NSError *error = nil;
if ([self loadLocalPersistentStore:&error]) {
NSLog(@"Added local store");
} else {
NSLog(@"Unable to add local persistent store: %@", error);
}
//if iCloud is available, add the persistent store
//if iCloud is not available, or the add call fails, fallback to local storage
BOOL useFallbackStore = NO;
if ([self iCloudAvailable]) {
if ([self loadiCloudStore:&error]) {
NSLog(@"Added iCloud Store");
//check to see if we need to seed data from the …Run Code Online (Sandbox Code Playgroud)