Ios 如何将微信API添加到Swift项目中?
我正在尝试将共享功能添加到我的项目中。但是,、和都在Objective-C中。我正在用Swift编写我的项目 我试过的 我将以下SDK文件添加到我的项目中Ios 如何将微信API添加到Swift项目中?,ios,swift,wechat,Ios,Swift,Wechat,我正在尝试将共享功能添加到我的项目中。但是,、和都在Objective-C中。我正在用Swift编写我的项目 我试过的 我将以下SDK文件添加到我的项目中 libWeChatSDK.a WechatAuthSDK.h WXApi.h WXApiObject.h 我尝试按照关于使用桥接头的建议进行操作 MyProject桥接头.h 错误 但是,我仍然无法在代码中使用微信API。我得到以下错误: WXApiObject.h WXApi.h +(BOOL)sendAuthReq:(sendAuthR
libWeChatSDK.a
WechatAuthSDK.h
WXApi.h
WXApiObject.h
我尝试按照关于使用桥接头的建议进行操作
MyProject桥接头.h
错误
但是,我仍然无法在代码中使用微信API。我得到以下错误:
WXApiObject.h
WXApi.h
+(BOOL)sendAuthReq:(sendAuthReq*)req viewController:(UIViewController*)viewController委托:(id)委托;
//需要一个类型
及
:0:错误:无法导入桥接头“[my path]/MyProject桥接头.h”
问题:
有没有人成功地将微信API用于Swift项目?我希望看到一个简单的步骤列表或一些示例代码。我不介意是否有任何与中国资源的补充链接
需要一个类型-->对于此错误,请在UIKit
中检查一次UIImage,而不是Foundation
。这些文件现在都是针对Swift的
在目标c中
#import <UIKit/UIKit.h>
#导入
您需要在文件顶部(也不需要基础导入)。
导入桥接头失败-->您犯了一个小错误。请查看此链接,它会有所帮助
有关此过程的更新,请参阅
如何在Swift项目中使用微信SDK
这本书似乎过时了,而且不完整。更好,但只处理Objective-C。下面的步骤显示了如何添加微信(微信)微信) 将SDK添加到您的项目中
申请微信应用程序ID
英文网站是。但我从未成功注册过英文网站。我最终使用了中文网站:。如何操作超出了此答案的范围,但如果您不懂中文,谷歌翻译可以帮助您。请注意,您可能还需要中国的电话号码
在你的应用程序被批准后(你只需要描述你的应用程序,不需要提供二进制或源代码),你将获得一个应用程序ID,你将在代码中使用它
下载微信SDK
您可以尝试使用英文站点上的SDK,但由于在撰写本文时中文站点上的情况似乎更为流行,因此我在这里下载了SDK以获取这些说明
我从下载了SDK,微信SDK版本1.6.2的链接是。不过,无论将来是什么版本,您可能都会希望使用最新版本
将SDK文件复制到您的Xcode项目中
为了便于组织,我将所有文件放在项目导航器的同一组中。(实际文件仍在项目的根文件夹中。)
错误修复:
在SDK 1.6.2中,问题中描述的问题出现并由解决。只需将#import
添加到WXApiObject.h
(您实际上可以用它替换#import
)如果您使用的是1.6.2之后的SDK版本,这可能不再是问题,因此您可能希望在修改SDK文件之前完成其他步骤
添加桥接标头
请注意,一些SDK文件是Objective-C头(.h)文件。为了在Swift项目中使用它们,您需要将桥接头文件添加到项目中。添加一个新文件(文件>新建>文件…>iOS>源>头文件),并将其称为YourProjectName Bridgeting header.h
将以下行添加到此文件
#import "WXApi.h"
在我的项目中,这是我桥接头文件中的唯一一行,因为这是微信SDK所需的唯一一行。(在我创建头文件时,还有一些自动生成的代码行,但我只是注释了它们,因为我不知道它们做了什么。如果我发现它们有用,我将稍后回来编辑此答案。)
有关添加桥接标头的更多帮助,请参见和
现在无需在Swift代码文件中导入任何微信SDK文件
添加所需的框架和库
转到项目的常规选项卡,向下滚动到链接的框架和库。单击加号(+)按钮添加以下所需的框架和库
- libc++.tbd
- CoreTelephony.framework
- libsqlite3.tbd
- libz.tbd
- SystemConfiguration.framework
- libWeChatSDK.a(如果您已经将它复制到项目中,那么这个应该已经存在了。)
corethelphony
,在线SDK安装说明中提到了libc++
,但不是相反。我只是为了安全起见才添加了这两个。如果其中任何一个都不是真的需要,请随时留下评论
添加URL方案
转到项目的信息选项卡,展开URL类型项
添加一个类型,其中标识符为weixin
,URL方案是您在微信成功注册应用程序后应获得的AppID
编辑AppDelegate
编辑您的AppDelegate.swift文件以包含以下函数。请确保使用您的AppID,而不是示例AppID。除此之外,您几乎可以复制和粘贴
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, WXApiDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// WeChat: replace with your AppID
WXApi.registerApp("wx68aa08d12b601234")
return true
}
func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool {
return WXApi.handleOpenURL(url, delegate: self)
}
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
return WXApi.handleOpenURL(url, delegate: self)
}
func onReq(req: BaseReq!) {
// do optional stuff
}
func onResp(resp: BaseResp!) {
// do optional stuff
}
// ...
}
查看示例演示应用程序,了解您可以在onReq
和onResp
中执行的可选操作(当前链接已断开,但如果该链接已断开,请在官方微信开发者文档中查找示例演示。)
编辑Info.plist
右键单击Info.plist并选择Open As>Source Code。然后在最终的
之前添加以下两个键:
我无法使用Objective-C定义的枚举wxscensession
,所以我只使用了它的整数值。可能有更好的解决方案,但这适用于
<unknown>:0: error: failed to import bridging header '[my path]/MyProject-Bridging-Header.h'
@import UIKit;
#import <UIKit/UIKit.h>
#import "WXApi.h"
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, WXApiDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// WeChat: replace with your AppID
WXApi.registerApp("wx68aa08d12b601234")
return true
}
func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool {
return WXApi.handleOpenURL(url, delegate: self)
}
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
return WXApi.handleOpenURL(url, delegate: self)
}
func onReq(req: BaseReq!) {
// do optional stuff
}
func onResp(resp: BaseResp!) {
// do optional stuff
}
// ...
}
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
</array>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
let message = SendMessageToWXReq()
message.text = "Hello WeChat"
message.bText = true
message.scene = Int32(WXSceneSession.rawValue) // WXSceneSession
WXApi.sendReq(message)
pod 'WechatOpenSDK'
#import "WXApi.h"
func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool {
return WXApi.handleOpenURL(url, delegate: self)
}
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
return WXApi.handleOpenURL(url, delegate: self)
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return WXApi.handleOpen(url, delegate: self)
}
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
</array>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
if WXApi.isWXAppInstalled() {
// do something with WeChat...
} else {
// WeChat app is not installed, show error message
}