loadStyle("/hexo-github/style.css");
loadStyle("/hexo-github/octicons/octicons.css");
new Badge("#badge-container-huos3203-JHHomeAPP-813e4b", "huos3203", "JHHomeAPP", "813e4b", false);
在静态库组件中使用 swift 开发
基于静态库的开发,实现封装静态库/Framework 并使用 swiftOC 混编开发

创建三个角色
- 主项目:
JHHomeAPP
- 静态库组件:
FirstPlug
-
SwiftInStaticLib
(包含 Swift 源码实现的静态库)
- 动态库
secondFramework
静态库:问题 1
当静态库组件中存在 swift 源码时,依赖该组件的主工程会报错:
1 2 3 4 5 6 7 8
|
ld: warning: Auto-Linking library not found for -lswiftDispatch ld: warning: Auto-Linking library not found for -lswiftCoreFoundation ld: warning: Auto-Linking library not found for -lswiftObjectiveC ld: warning: Auto-Linking library not found for -lswiftDarwin ld: warning: Auto-Linking library not found for -lswiftFoundation ld: warning: Auto-Linking library not found for -lswiftCoreGraphics ld: warning: Auto-Linking library not found for -lswiftCore ld: warning: Auto-Linking library not found for -lswiftSwiftOnoneSupport
|
- 联想方法:
设置 Always Embed Swift Standard Libraries
: YES
结果无效。
- 适用的解决方法
在主工程中新建一个空的 swift 源文件,不需要自动新建$(SWIFT_MODULE_NAME)-Swift.h
映射文件和JHHomeAPP/JHHomeAPP-Bridging-Header.h
头文件。
使用方法 2,问题 1 就不存在了,证明了在静态库中可以使用 swift 源码文件进行开发,同样证明了静态库可以封装包含 swift 源码的静态库。
Framework:问题 2
- 在动态库中 objc 源码方法可以封装到静态库,并在可执行文件中调用。
- 当在 Framework 中新建 swift 源文件时,第一次编译运行出现崩溃问题:
1 2 3
|
dyld: Library not loaded: @rpath/libswiftCoreImage.dylib Referenced from: .../../Debug-iphonesimulator/SecondFramework.framework/SecondFramework Reason: image not found
|
解决办法:需要在ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES
设置为YES
.再次编译出现问题 3。
Framework: 问题 3
当在 oc 源码文件中用引用-Swift.h
头文件时,出现一下问题:
1 2 3
|
'SecondFramework-Swift.h' file not found #import "SecondFramework-Swift.h" ^~~~~~~~~~~~~~~~~~~~~~~~~
|
结果将:Install Objective-C Compatibility Header
: NO
可以正常调用 swift 方法了。
验证:framework 可以封装到静态库中,当有 swift 源码实现时需要设置 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES=YES
总结
- Product Module Name: 该项默认为项目名或自定义的名称
- Defines Module: 设置为 YES(framework 默认为 YES,静态库默认为 NO)
- Embedded Content Contains Swift: 设置为 YES
- Install Objective-C Compatibility Header:设置为 YES(如上题说:在 framework 中设置为 NO,才能正常运行,在静态库中似乎不影响)
- Objective-C Bridging Header: 自定义需要桥接到 Swift 中的 OC 头文件(EX:$(SRCROOT)/Swift-Bridging-Header.h)