最近我需要集成 Core 和 Datastore API。通过在 Dropbox 论坛中提问以及检查已经给出的一些答案,我成功地在同一个项目中使用了两个 SDK。
以下步骤是我为了取得成功而执行的步骤。我希望它能解决你的问题。
这些步骤适用于以下版本:
- Dropbox Core iOS SDK v.1.3.11(2014 年 3 月 31 日)
- Dropbox 数据存储/同步 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。不要替换, for例如,在以下情况下: useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] . 这是 NSURL 类中的一个方法,修改它会破坏代码。
7) 将源文件导入您的项目。从 Core SDK 导入的所有源文件都无法使用 ARC 运行。这样,必须为这些文件禁用它。选择项目并转到构建阶段 -> 编译源,选择所有关于核心 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) 在application:openURL:sourceApplication:annotation:
您的 App Delegate 的方法中插入以下代码:
[[DBSession sharedSession] handleOpenURL:url];//Core API
[[DBAccountManager sharedManager] handleOpenURL:url]; //Datastore API
重要提示:必须遵守此命令!handleOpenURL
from Core API 必须在 Datastore 之前调用,因为在 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];