转载

在 Swift 项目中集成常用 SDK(一)—— 微博

从今天开始,我们将一起探讨如何更好地在 Swift 项目中引入常用 SDK,我们先从微博开始。

下载

微博 SDK 下载地址: http://open.weibo.com/wiki/SDK

转移文件

由于 Xcode 的工程管理比较刻板:完全使用工程文件描述工程,依赖相对路径或绝对路径管理工程中的文件;而 git 又是基于文件系统的版本管理工具;所以我一向手动管理文件结构,从不使用“copy if needed”功能。

对于 SDK 文件的管理,我更推荐手动管理的方式,避免工程文件夹里啥文件都有的混乱局面。

在工程根目录下新建 SDKs 文件夹,解压微博 SDK,把 libWeiboSDK 文件夹复制过去。

开始集成

基本文档

我们将根据解压出的 微博iOS平台SDK文档V3.1.1.pdf 中的内容来引入微博 SDK。

注册应用

这步大家可以自己完成,注意设置“OAuth2.0 授权设置”,把你自己的微博账号添加为测试账号即可。

设置回调 URL Scheme

到如下页面根据你的 AppKey 设置 URL Scheme 地址:

在 Swift 项目中集成常用 SDK(一)—— 微博

添加 SDK 文件到工程

这一步是重头戏,也是大多数 Swift 开发者最容易卡住的地方:Xcode 工程的静态库管理策略比较奇怪,需要我们处理各种链接器设置、工程配置、搜索目录等问题。

① 拖进文件树

新建 SDKs > WeiboSDK 两级虚拟目录,将 libWeiboSDK 文件夹中的文件全部拖进去:

在 Swift 项目中集成常用 SDK(一)—— 微博

② 引入桥接文件

在项目中新建一个 .m 的 OC 文件,随便取个名字,保存之后,Xcode 就会自动提醒我们要不要创建桥接文件:

在 Swift 项目中集成常用 SDK(一)—— 微博

删掉刚刚创建的 .m 文件,我们就得到了我们真正想要的桥接文件:

在 Swift 项目中集成常用 SDK(一)—— 微博

③ 引入 OC 头文件

在头文件中引入微博的头文件:

#import "WeiboSDK.h"

这时候我们就可以在 AppDelegate 中注册微博应用了:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.

WeiboSDK.enableDebugMode(true)
WeiboSDK.registerApp("1953849048")

return true
}

此时编译将会得到几十个 error,这是因为我们还没有引入 SDK 所依赖的系统库。

④ 引入依赖库

我们要引入 QuartzCore.framework ImageIO.framework SystemConfiguration.framework Security.framework CoreTelephony.framework CoreText.framework UIKit.framework Foundation.framework CoreGraphics.framework libz.dylib libsqlite3.dylib 这些系统库。

在 Swift 项目中集成常用 SDK(一)—— 微博

编译成功,运行起来之后,我们得到了如下错误:

2016-01-12 17:10:10.033 SwiftLoveSDKs[2112:222868] -[NSConcreteMutableData wbsdk_base64EncodedString]: unrecognized selector sent to instance 0x7faddb56d8b0
2016-01-12 17:10:10.035 SwiftLoveSDKs[2112:222868] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteMutableData wbsdk_base64EncodedString]: unrecognized selector sent to instance 0x7faddb56d8b0'

经过简单 Google,找到了解决方案: https://github.com/sinaweibosdk/weibo_ios_sdk/issues/117 如下图操作之后,bug 解决:

在 Swift 项目中集成常用 SDK(一)—— 微博

⑤ 修改 AppDelegate

新增 delegate,实现 delegate 中的方法,修改 handleOpenURL 和 openURL 方法:

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, WeiboSDKDelegate {

... ...


func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
return WeiboSDK.handleOpenURL(url, delegate: self)
}
func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool {
return WeiboSDK.handleOpenURL(url, delegate: self)
}

// for Weibo
func didReceiveWeiboRequest(request: WBBaseRequest!) {
}
func didReceiveWeiboResponse(response: WBBaseResponse!) {
}
}

在这个过程中,可以随手解决一下 iOS 9 SDK 引入的网络问题。

⑥ 通过 SSO 协议调起微博客户端实现第三方登录

在 ViewController 中增加唤起登陆的代码:

let request = WBAuthorizeRequest()
request.redirectURI = "https://api.weibo.com/oauth2/default.html"
request.scope = "all"
request.userInfo = [
"SSO_From": "ViewController"
]

WeiboSDK.sendRequest(request)

然后就发现唤不起来微博呀。

⑦ 解决起不来的问题

以“源代码”方式编辑 Info.plist:

在 Swift 项目中集成常用 SDK(一)—— 微博

<key>NSAppTransportSecurity</key> 之前插入以下内容:

<key>LSApplicationQueriesSchemes</key>
<array>
<!-- 新浪微博 URL Scheme 白名单-->
<string>sinaweibohd</string>
<string>sinaweibo</string>
<string>sinaweibosso</string>
<string>weibosdk</string>
<string>weibosdk2.5</string>
</array>

⑧ 检验成果

在 didReceiveWeiboResponse 方法中打印出登录成功后返回的信息:

func didReceiveWeiboResponse(response: WBBaseResponse!) {
if let authorizeResponse = response as? WBAuthorizeResponse {
if authorizeResponse.statusCode == WeiboSDKResponseStatusCode.Success {
print(authorizeResponse.userInfo)
}
}
}

运行,唤起微博,点击授权,授权成功返回,得到以下结果:

在 Swift 项目中集成常用 SDK(一)—— 微博

微博 SDK 集成成功!

原文  https://autolayout.club/2016/01/12/在-Swift-项目中集成常用-SDK(一)——-微博/
正文到此结束
Loading...