添加了一个.a的库
以及对应的Obj-C的.h头文件
然后对于OC的示例代码:
[JPUSHService registerForRemoteNotificationTypes🙁UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil]; |
如何如何,都转化不成swift
想要去引用此库,不论是:
#import "JPUSHService.h"
还是:
import JPUSHService
都不行。
swift how use obj-c .a lib
Using Swift with Cocoa and Objective-C (Swift 2.1): Swift and Objective-C in the Same Project
How to call Objective C code from Swift – Stack Overflow
Using Swift with Cocoa and Objective-C (Swift 2.2): Basic Setup
ios – How to import existing Objective C classes in Swift – Stack Overflow
结果都照做了,还是不行,找不到对应的变量:
swift how call obj-c .a lib
swift use object-c .a lib
Merge Objective-C static library into Swift (using mosquitto) — Swift Programming — Medium
发现:
此处的Compile Resource中没有包含:
JPUSHService.h
去把头文件所在项目路径加到头文件搜索路径中试试:
还是找不到:
把:
JianDao-Bridging-Header.h
从:
#ifndef JianDao_Bridging_Header_h #define JianDao_Bridging_Header_h #import "JPUSHService.h" #endif /* JianDao_Bridging_Header_h */ |
改为:
//#ifndef JianDao_Bridging_Header_h //#define JianDao_Bridging_Header_h #import "JPUSHService.h" //#endif /* JianDao_Bridging_Header_h */ |
编译期间加载的头文件中,还是没有JPUSH。
swift object-c static .a library
去把:
$(SRCROOT)/JianDao-Bridging-Header.h
改为:
$(SRCROOT)/JianDao/JianDao-Bridging-Header.h
问题依旧。
ios – Static Library and Swift – Stack Overflow
胡乱的把.h拖动到库里试试:
不管,至少编译包含了:
但是还是无法使用:
osx – How to import Objective C static library to Swift Framework? – Stack Overflow
试试:
问题依旧。。。
Write Swift Module Cont. Static Library (使用 Swift 创建 Swift 模块 – 静态链接库) – 猫·仁波切
在Swift中调用Objective-C的静态库 – 小木之林
通过拖动桥接头文件过去,得到的是绝对路径:
但是问题依旧。
还是改回:
$(SRCROOT)/JianDao-Bridging-Header.h
搜:
swift JPUSH
如果后面JPUSHService可用的话,代码应该这么写:
JPUSHService.registerForRemoteNotificationTypes(UIUserNotificationType.Badge.rawValue | UIUserNotificationType.Badge.rawValue | UIUserNotificationType.Alert.rawValue , categories: nil) |
使用swift语言开发的ios应用能集成极光推送吗 – 极光推送问答
有在 swift 项目中用 Jpush SDK 的吗 – V2EX
swift object-c static lib not work
swift .a lib not work
ios – Static Linking with Swift, XCode6-Beta – Stack Overflow
想办法去下载:
object-c static library
object-c static library download
别人帮忙找到:
https://github.com/jpush/jpush-swift-demo
下载看看
然后去对比,最终发现:
是app的Target中的Objective-C Bridging Header中的:
第二列中的值,只要设置好了对应的桥接头文件:
就可以编译通过了:
然后此处把自己的改为:
就可以正常编译了:
对应内部值是:
//:configuration = Debug SWIFT_OBJC_BRIDGING_HEADER = JianDao-Bridging-Header.h //:configuration = Release SWIFT_OBJC_BRIDGING_HEADER = JianDao-Bridging-Header.h //:completeSettings = some SWIFT_OBJC_BRIDGING_HEADER |
然后再去改为更好的:
$(SRCROOT)/JianDao-Bridging-Header.h
包括Project和Target:
然后再去试试
同样可以正常编译了。
然后再去看看对应的Compile Resource中,却还是没有对应的头文件:
但是是可以正常工作的。
对应的demo中,也是没有头文件的:
[总结]
swift项目中,想要试用Object-C的静态(static)库:xxx.a文件(以及对应的xxx.h)头文件的话,则需要:
1.导入已有的Object-C的.h头文件和.a静态库文件
一般做法是:
.h头文件放到项目源码对应位置
.a放到Frameworks厦门
如图:
2.swift项目中,创建对应的桥接头文件:
File-》New-》Header File-》
名为:YourProjectName-Bridging-Header.h
内容为:
你所想要导入的Object-C的头文件
比如:
我此处是:
JianDao-Bridging-Header.h
其中是:
#import "JPUSHService.h" |
(注:
当然,如果你未来防止重复导入,可以保留默认的ifndef,完整内容为:
// // JianDao-Bridging-Header.h // JianDao // // Created by licrifan on 16/3/10. // Copyright © 2016年 licrifan. All rights reserved. // #ifndef JianDao_Bridging_Header_h #define JianDao_Bridging_Header_h #import "JPUSHService.h" #endif /* JianDao_Bridging_Header_h */ |
)
3.给swift项目的编译选项添加对应的Object-C头文件
你的项目命-Target-》Build Settings-》Swift Compiler – Code Generation->Object-C Bridging Header-》切记,是第二列的那个你的app的图标的那个属性,把值改为:
xxx/YourProjectName-Bridging-Header.h
其中xxx为你的YourProjectName-Bridging-Header.h文件所在位置
比如我此处的:
$(SRCROOT)/JianDao-Bridging-Header.h
其中:
$(SRCROOT)表示项目根目录,即YourProjectName.xcodeproj所在的目录
如图:
当然,同时也要去把
第三列,iOS的项目的图标的那列的值,改为同样的值:
同理,再去Project中的确认该配置为同样的值(好像不需要设置,设置了Target就已经设置了Project了?,至少是第二列是这个逻辑:
设置了Targets中的第二列,Project的第一列的值,就无须设置,也无法修改了:
不过第二列是可以修改的,此处无须修改,只需要确认是对应的值即可:
)
[感慨]
此处,从始至终,就只是缺少了Target中的Object-C Bridging Header的第二列的值,而导致了-》无法正确找到桥接头文件,无法编译找到第三方加入的静态库。。。
抽空需要去研究研究:
到底在Targets中的第二列和第三列是什么含义。。。
以及:
Targets和Project中的设置,有何关系?
[已解决]Xcode中Project和Target之间的关系
转载请注明:在路上 » [已解决]swift中如何调用Object-C的.a的库函数