Dropbox Core API和Sync API

时间:2014-02-21 09:40:41

标签: ios core-data dropbox-api

我的iOS应用程序使用dropbox core api访问用户的dropbox文件夹以保存/检索文件。

我的应用程序是基于核心数据的,我想使用Sync API在不同设备之间同步核心数据数据库(我不信任核心数据和iCloud与早于7的iOS版本)。我尝试将Sync API框架添加到我的应用程序中,但xcode会返回大量重新定义错误。

有一种方法可以同时使用Core API和Sync API吗?

谢谢, 最大

3 个答案:

答案 0 :(得分:4)

最近我需要集成Core和Datastore API。通过在Dropbox论坛中提问,以及检查已经给出的一些答案,我成功地在同一个项目中使用两个SDK进行操作。

以下步骤是我为了取得成功而采取的措施。我希望它能解决你的问题。

以下版本的这些步骤正常工作

  • Dropbox Core iOS SDK v.1.3.11(2014年3月31日)
  • Dropbox Datastore / Sync v.2.1.2(2014年4月16日)

一旦您的源代码可用,所有修改都在Dropbox Core SDK中完成。

步骤

1)删除所有特定于OSX的文件

DBAuthHelperOSX.m
DBKeychain-OSX.m
DBRestClient+OSX.m
DBAuthHelperOSX.h
DBRestClient+OSX.h
DropboxOSX.h
DropboxOSX-Info.plist
DropboxOSX-Prefix.pch
MPOAuthCredentiaIConcreteStore+KeychainAdditionsMac.m

2)将文件DBAccountInfo(.m和.h)重命名为DBAccountInfoOld。在SDK的类中查找所有出现的DBAccountInfo,并替换为新名称。

3)在DBError.h中,将DBErrorCode替换为DBErrorCodeOld

4)将文件DBConnectController(.m和.h)重命名为DBConnectControllerOld。在SDK的类中查找DBConnectController的所有匹配项,并替换为新名称。

5)将DBKeychain和DBKeychain-iOS类重命名为DBKeychainOld和DBKeychainOld-iOS。在SDK类中查找所有出现的DBKeychain,并用DBKeychainOld替换它们。

6)找到所有“redential”的出现并用“redentialOld”替换它们。更新类的名称。 警告:仅替换包含属于Core SDK的表达式的变量和类名。 请勿替换,例如,在以下情况中:useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]。这是来自NSURL类的一个方法,并且修改会破坏代码。

7)将源文件导入项目。 Core SDK中的所有导入源文件都无法与ARC一起运行。这样,必须为这些文件禁用它。选择项目并进入构建阶段 - >编译源代码,选择有关Core SDK的所有文件,双击它们并插入-fno-objc-arc

8)如果你编译项目,你会发现一些重复的符号:

duplicate symbol _kDBDropboxAPIVersion in:
duplicate symbol _kDBDropboxAPIHost in:
duplicate symbol _kDBDropboxAPIContentHost in:
duplicate symbol _kDBDropboxWebHost in:
duplicate symbol _kDBSDKVersion in:
duplicate symbol _DBErrorDomain in:
duplicate symbol _DBStringFromLogLevel in:
duplicate symbol _DBLogFilePath in:
duplicate symbol _DBSetupLogToFile in:
duplicate symbol _DBLogSetLevel in:
duplicate symbol _DBLogSetCallback in:
duplicate symbol _DBLog in:
duplicate symbol _DBLogInfo in:
duplicate symbol _DBLogWarning in:
duplicate symbol _DBLogError in:
duplicate symbol _DBLogFatal in:

将“旧”附加到这些变量名称的末尾。不要忘记更新代码,以便使用新名称调用这些变量。

9)为了设法在两个SDK中链接您的Dropbox帐户,请转到Core的DBSession + iOS.m并在handleURL方法内,并注释以下行:

[[NSUserDefaults standardUserDefaults] removeObjectForKey:kDBLinkNonce];
[[NSUserDefaults standardUserDefaults] synchronize];

10)在App Delegate的application:openURL:sourceApplication:annotation:方法中插入以下代码:

[[DBSession sharedSession] handleOpenURL:url];//Core API
[[DBAccountManager sharedManager] handleOpenURL:url]; //Datastore API

重要:必须遵循此顺序!必须在数据存储区之前调用Core API中的handleOpenURL,因为修改完成于9)

11)在application:didFinishLaunchingWithOptions:中插入以下代码:

    //Datastore API
    DBAccountManager *mgr =
    [[DBAccountManager alloc] initWithAppKey:DROPBOX_APP_KEY secret:DROPBOX_APP_SECRET];
    [DBAccountManager setSharedManager:mgr];

    //CoreAPI
    DBSession *dbSession = [[DBSession alloc]initWithAppKey:DROPBOX_APP_KEY
                                                  appSecret:DROPBOX_APP_SECRET
                                                       root:kDBRootDropbox];
    [DBSession setSharedSession:dbSession];

12)为了触发链接流程,请使用[[DBAccountManager sharedManager] linkFromController:self];

13)要取消关联,请使用以下行

[[DBAccountManager sharedManager] linkedAccount] unlink];
[[DBSession sharedSession] unlinkAll];

答案 1 :(得分:2)

雅在某些情况下是可能的。这是如何同时实现Core和Sync,因为它需要大量的工作。

我建议你查看HERE

我想你会在这里找到答案。

答案 2 :(得分:0)

您可能希望尝试仅使用Sync API for files和Datastore API来同步数据。它们捆绑在同一个iOS库中并且可以很好地协同工作。