在iOS模拟器中使用iCloud

18

在我的应用中,当我尝试在iOS模拟器中运行代码时:

NSURL *iCloudURL = [fileManager URLForUbiquityContainerIdentifier:@"2VHM28566N.com.eept.TestICloud"];
NSLog(@"IS ICloud : %@", [iCloudURL absoluteString]);

这表明iCloudURL为空。

我们能在没有iPhone设备的情况下使用iCloud吗?


1
@"2VHM28566N.com.eept.TestICloud" 是什么?当我这样做时,我只需将 nil 作为参数传递。你能解释一下这是做什么的吗? - tallen11
1
“2VHM28566N.com.eept.TestICloud”是此人特定应用程序的容器ID。如果您查看您的授权文件或iCloud容器列表,您将在使用iCloud的任何应用程序中看到类似的字符串。如果您将nil作为参数传递,则系统将使用列表中看到的第一个iCloud容器。 - theMikeSwan
3个回答

25

我今天在模拟器上尝试运行我的iCloud应用程序,但是据我所知,在模拟器中没有启用iCloud的选项。我查看了设置,但没有找到。因此答案是否定的,除非您在实际设备上测试,否则无法真正测试iCloud。

如果有人有解决办法,那就太棒了。总是在设备上测试您的应用程序有点繁琐。


6
自 Xcode 5 起,模拟器已支持 iCloud。请查看其他答案:https://dev59.com/12sz5IYBdhLWcg3wlY69#19710768。 - lari

19

在Xcode 5中:

iOS模拟器现在支持应用内文档和KVS数据的iCloud同步,使得应用能够通过iCloud在多个设备之间同步。这个功能在测试时非常有用,以确保应用文档和数据可在多个设备上正确同步。

注意:在iOS模拟器中运行应用程序时,请使用“设置”应用程序登录Apple ID账户。登录后,在Debug菜单中使用“触发iCloud同步”命令来告诉模拟器与其他设备同步。


还有一点需要注意:“iCloud模拟器仅在模拟iOS 7.0及更高版本时才能正常工作。”- https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/iOS_Simulator_Guide/TestingontheiOSSimulator/TestingontheiOSSimulator.html#//apple_ref/doc/uid/TP40012848-CH4-SW12 - stan

1
我知道这是一个老话题,但您可以通过将部署目标更改为“设备”来测试iCloud。通过USB连接您的设备,让乐趣开始吧。
我想这是出于安全原因而做的,而且确实有很好的理由。
因为您的设备将拥有一个移动配置证书,该证书与您的iCloud“bucket”以及您的应用程序包ID相关联,它确保仅您(您的应用程序和允许的设备)可以访问您配置的iCloud bucket。
如果您可以在模拟器上运行它而不需要放置所有这些证书和ID,那么您可以轻松地从任何其他下载的应用程序中获取团队ID,使用该标识符组合项目,而没有与开发人员相结合的证书,与iCloud bucket相结合,您将完全访问另一个应用程序的bucket。
我所做的一切就是订购了5m的USB延长线,这样我就可以把我的iPad、iPod和iPhone放在桌子前面,而不必蹲在桌子下面或坐在尴尬的姿势中进行测试。
编辑:只是添加一个稍微清晰的答案,回答allthewayapps关于bundle ID的问题。
2VHM28566N.com.eept.TestICloud

在这种情况下,它由三个部分组成:


2VHM28566N  -  Being the TeamID which Apple assign you when you register as a developer

com.eept  -  Reverse domain notation of the App's related website i.e. Apple apps would have com.apple

TestICloud - The name of that app itself.

简而言之,它是:
teamid.com.yourdomain.appname

希望这可以帮到您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接