标签: icloud

Beta测试Mac App Store应用程序

我有一个应用程序,我将把它放在Mac App Store中.我想为偏好同步添加iCloud支持,因此,我想分发以他们可以访问iCloud的方式签名的beta.

但是,我无法在Mac文档库中找到有关在App Store外部分发应用程序,使用分发密钥签名以及能够访问iCloud的任何内容.

到目前为止,我分发此类应用程序的尝试无法在测试人员的计算机上启动,控制台中的消息抱怨该应用程序具有iCloud权利.

是我可能的,或者我应该放弃iCloud支持?如果可能的话,我需要做些什么来制作可分发的,支持iCloud的版本?

编辑:要清楚,您可以将此问题中的"iCloud支持"替换为仅适用于App Store应用程序的任何其他功能.我提到它确定解决方案不是"只是将它分配给无符号".iCloud是我特定案例的目标; 我在询问一般过程.

macos app-store mac-app-store icloud

16
推荐指数
2
解决办法
3611
查看次数

不要备份到iCloud但仍然拒绝

在我的应用程序中,我必须存储核心数据数据库和音频文件,所以我解码将它们放在Documents目录中.为了防止它们备份,当我第一次启动应用程序时,我把这样的Do not BackUp标志

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
 [self addSkipBackupAttributeToItemAtURL:[self applicationDocumentsDirectory]];
}
    - (NSURL *)applicationDocumentsDirectory
{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
  if (&NSURLIsExcludedFromBackupKey == nil) { // iOS <= 5.0.1
    const char* filePath = [[URL path] fileSystemRepresentation];

    const char* attrName = "com.apple.MobileBackup";
    u_int8_t attrValue = 1;

    int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
    return result == 0;
  } else { // iOS >= 5.1
    return [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:nil]; …
Run Code Online (Sandbox Code Playgroud)

storage objective-c app-store ios icloud

16
推荐指数
1
解决办法
6601
查看次数

强制或"鼓励"iCloud将更改上传到文件

我有一个Mac和iOS应用程序,通过一个"鞋盒"文件使用iCloud共享数据.

大多数情况下,更改会以有效和迅速的方式正确同步.但是,每隔一段时间(特别是现在),我在一台设备上进行的更改只会坐在那里.

我在Mac上对共享数据文件进行了更改,数据已保存到磁盘.但是,我不知道系统是否未能数据上传到iCloud,或者iOS设备未能检查新数据,但我正在弄乱我的拇指.

电话上的iCloud状态

下面的5KB文件是应该更改的文件.无论我在Mac应用程序中做了多少更改,在测试过程中,iCloud都会暂时停止同步更改.如果我走了20分钟然后回来,它可能会再次启动.

此外:如果我在Xcode中运行Mac应用程序并密切关注同一文件,即使我对文件进行了更改并且可以确认磁盘上的文件(在Finder /终端中)实际上正在发生变化,iCloud面板也会在Xcode也不会很快得到这些变化:

Mac上的iCloud状态

请注意,我的Mac上的本地文件系统(9:01)上的相同5KB文件已更改,但iCloud只是没有提取它.此文件中存在实际内容更改,而不仅仅是修改日期更改.

所以,我想找到一种方法:

  1. 以编程方式触发同步,甚至使用Xcode.我知道可以使用模拟器触发iCloud同步,但这仅适用于在iOS上进行测试时,我更喜欢在实际硬件上进行测试.要么,

  2. 确定没有共享数据的人(或什么)"有过错".我从一开始就遵循iCloud文档,确保我使用协调写入来保存更改等.这只是一个非常间歇性的事情,iCloud会打瞌睡,并使​​测试非常令人沮丧.

macos xcode cocoa ios icloud

16
推荐指数
1
解决办法
2745
查看次数

将本地Core Data移至iCloud

如何在已使用本地存储核心数据的应用程序中启用iCloud核心数据?

我试图NSPersistentStoreUbiquitousContentNameKey在我的持久存储选项中使用.不幸的是,此选项启用iCloud但不会将任何本地数据传输到iCloud.我似乎migratePersistentStore:toURL:options:withType:error:无法上班.我提供持久性存储,URL,iCloud选项等,它仍然不会将现有的本地数据迁移到iCloud.这是我使用该方法的方式:

- (void)migratePersistentStoreWithOptions:(NSDictionary *)options {
    NSError *error;
    self.storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:[NSString stringWithFormat:@"%@.sqlite", self.SQLiteFileName]];

    NSPersistentStore *store = [self.persistentStoreCoordinator migratePersistentStore:self.persistentStoreCoordinator.persistentStores.firstObject toURL:self.storeURL options:options withType:NSSQLiteStoreType error:&error];
    if (store) NSLog(@"[CoreData Manager] Store was successfully migrated");
    else NSLog(@"[CoreData Manager] Error migrating persistent store: %@", error);
} 
Run Code Online (Sandbox Code Playgroud)

本地存储与iCloud存储分开.如果可能的话,我想将本地Core Data移动到iCloud,而无需手动转移每个实体.

有任何想法吗?我可以找到很多关于 iCloud 移回本地存储的文章,教程和帖子- 但我想本地存储迁移 iCloud.

cocoa-touch core-data objective-c ios icloud

16
推荐指数
1
解决办法
4776
查看次数

如何从终端访问我的iCloud Drive文件夹?

我正在运行OS X Yosemite.我想将我的代码文件夹保存在iCloud Drive中,以便自动备份.我经常需要从终端访问文件,那么如何从终端访问iCloud Drive?

terminal icloud osx-yosemite

16
推荐指数
1
解决办法
1万
查看次数

检测iOS应用程序是否从iCloud备份恢复

有没有办法检测启动是否来自iCloud备份?(恢复)

我看过这里,但没有任何关于它.

他们关于允许备份的规则是非常严格的(多次被拒绝)支持数据库,只有一个用户生成的更改 - 现在我必须将数据备份到其他地方并重新插入从备份恢复.

backup ios icloud

16
推荐指数
1
解决办法
771
查看次数

如何使用Core Data和iCloud在两台设备之间同步数据?

我想要实现的是当用户创建,更改或删除数据时,persistent store它将与之同步,iCloud store然后更新登录到同一iCloud帐户的其他设备.

我创建了一个Core Data Stack使用Objective-C资源并尝试在Swift中编写自己的资源,但是我在使用登录到同一个iCloud帐户的两个设备同步数据时遇到问题.

例如,当iDevice A登录到iCloud时,它会将数据备份到iCloud,但是当iDevice B登录到iCloud时,应用程序会删除持久存储上已有的任何数据以保存iCloud备份,并且不会出现商店设备之间的任何更改在另一方面,但似乎保存到iCloud商店作为最新的备份,所以如果应用程序被删除并重新安装我看到其他设备做的最新备份 - 考虑到这一点,如果iDevice B已经登录,它除非重新安装应用程序并且最后一次备份是由其他设备完成的,否则不会使用来自iDevice A的数据.

有人知道在Core data stack使用相同的iCloud帐户在两台设备之间同步数据时我出错了吗?

核心数据堆栈:

// MARK: - Core Data stack
// All the following code is in my appDelgate Core data stack 

func observeCloudActions(persistentStoreCoordinator psc:      NSPersistentStoreCoordinator?) {
// Register iCloud notifications observers for;

//Stores Will change 
//Stores Did Change 
//persistentStoreDidImportUbiquitousContentChanges
//mergeChanges

}

//Functions for notifications

func mergeChanges(notification: NSNotification) {
NSLog("mergeChanges notif:\(notification)") …
Run Code Online (Sandbox Code Playgroud)

core-data ios icloud swift

16
推荐指数
1
解决办法
5857
查看次数

如何检查iCloud是否以编程方式配置

以下是来自Apple Docs的句子:"如果未配置iCloud,请询问用户是否要配置它(如果他们想要配置iCloud,最好将它们传输到启动设置)."

如何检查是否配置了iCloud以及如何启动iCloud的设置?

iphone icloud

15
推荐指数
2
解决办法
1万
查看次数

iCloud + CoreData - 如何避免预先填充的数据重复?

我有一个iCloud鞋盒应用程序的问题,希望有人可以帮助我(我花了很多时间徒劳地对抗它).

应用程序: - 一个简单的库样式应用程序 - 包含一组类别(Cat1 .. CatN),每个类别包含项目(Item1 ... ItemM).我使用Apple的iPhoneCoreDataRecipes来设置iCloud CoreData堆栈.

一切都与iCloud完美配合,除了 - 用户可以在第一次打开应用程序后开始使用一些预先填充的空类别(他当时也可以离线).这是魔鬼.

这是我的工作 - 一旦我的persistentStoreCoordinator设置我发送通知

dispatch_async(dispatch_get_main_queue(), ^{
    [[NSNotificationCenter defaultCenter]
        postNotificationName: @"RefetchAllDatabaseData"
                      object: self
                    userInfo: nil];
    });
Run Code Online (Sandbox Code Playgroud)

这是我的MasterViewController收到的.收到通知后,MasterViewController会检查存储中的类别数.如果可用类别的数量等于0 - 则插入预填充类别.

仅供参考 - 我使用NSMergeByPropertyObjectTrumpMergePolicy作为我的ManagedObjectContext

问题:这适用于第一台设备.但对于第二个设备,iCloud的默认类别通常比设置的persistentStoreCoordinator(以及第二个设备插入的默认类别)晚收到.最后,我在两个设备上都有两组具有相同名称的类别.

有什么想法可以解决这个问题吗?

尝试过的解决方案:我试过两种策略来解决这个问题.两者都以同样的方式开始.我打电话后

[moc mergeChangesFromContextDidSaveNotification: note];
Run Code Online (Sandbox Code Playgroud)

我打电话

[self materializeKeysWithUserInfo: note.userInfo forContext: moc];
Run Code Online (Sandbox Code Playgroud)

非常感谢来自https://devforums.apple.com/thread/126670?start=400&tstart=0的 Jose Ines Cantu Arrambide 的参考代码 - 实质上

materializeKeysWithUserInfo:forContext:
Run Code Online (Sandbox Code Playgroud)

从note.userInfo获取managedObjectIds,并从ManagedObjectContext中检索相应的对象,将它们放入字典中.

策略1:

  • 我的所有类别都有创建时间戳.
  • 在从iCloud插入时,获取具有相同名称的类别对(如果有)
  • 选择较旧的重复类别
  • 将他们的项目移动到更新的重复类别
  • 删除较旧的重复类别

这些策略甚至在它们出现在UI BUT之前就有效地消除了两个设备上的重复项

1)来自第一个设备的物品在第二个设备上丢失 - 当他们来到第二个设备时,他们的父类别不存在,他们的类别字段等于零,所以我不知道放在哪里.

2)在短时间内,由于冲突,第二台设备上丢失的物品也会在第一台设备上丢失.

3)源于第二设备的一些项目也因冲突而丢失.

我试图更喜欢较新的类别而不是更新,但它没有产生任何影响 …

synchronization core-data ios icloud

15
推荐指数
1
解决办法
2474
查看次数

没有iCloud登录的CloudKit公共数据库读取

在文档中,它表示即使用户没有使用正确的iCloud帐户登录,CloudKit公共数据库也可以读取.但是,如果我没有将我的iOS模拟器或设备连接到iCloud,我无法从我的云数据库中获取任何内容.当我激活我的iCloud帐户时,我可以从我的公共数据库中获取数据.如果有人对我有答案或同样的问题可以回答那会很好.谢谢.

CKDatabase *publicDatabase = [[CKContainer containerWithIdentifier:@"mycontainer"] publicCloudDatabase];
CKRecordID *recordID = [[CKRecordID alloc] initWithRecordName:@"idofmyrecord"] ;

[publicDatabase fetchRecordWithID:recordID completionHandler:^(CKRecord *fetchedRecord, NSError *error) {
    if(!error){
        NSLog(@"****Success***** %@",fetchedRecord[@"field1"]);

    }else{
        NSLog(@"****Failed***** %@",fetchedRecord[@"field2"]);

    }
}];
Run Code Online (Sandbox Code Playgroud)

iphone ios icloud cloudkit

15
推荐指数
2
解决办法
2405
查看次数