Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何将微信API添加到Swift项目中?_Ios_Swift_Wechat - Fatal编程技术网

Ios 如何将微信API添加到Swift项目中?

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

我正在尝试将共享功能添加到我的项目中。但是,、和都在Objective-C中。我正在用Swift编写我的项目

我试过的 我将以下SDK文件添加到我的项目中

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
}