swift項目引入OC混編 和OC項目引入swift混編 遇到的問題


 swift項目引入OC混編

問題來源:

1.swift項目pods  MJRefresh 為了在swift正常使用 建了一個橋接文件

2.在項目中又使用了 SDWebImage 用於加載網絡圖片

根據說明加了Podfile一個 use_frameworks!

編譯的時候問題來了

問題顯示類似這樣的錯誤:

failed to emit precompiled header '/Library/Developer/Xcode/DerivedData/MyprojectName-lajanjvhqjnfjksdsndsfkads/Build/Intermediates.noindex/PrecompiledHeaders/MyprojectName-Bridging-Header-swift_44AHJm3Z96qu-clang_2BIMGQVXGEZ09.pch' for bridging header '/Documents/MyProjectLocaiton/FoneApp-Bridging-Header.h'

問題解決方法:

了解了一下 use_frameworks! 下面是參考

https://www.jianshu.com/p/ac629a1cb8f5

//---------------------------------------------

首先需要了解下靜態庫,動態庫,Framework的區別所謂的庫就是一段編譯好的二進制文件,加上頭文件,相關的資源文件就可供別人使用

靜態庫:

(靜態鏈接庫)(.a)在編譯時會將庫copy一份到目標程序中,

編譯完成之后,目標程序不依賴外部的庫,也可以運行 缺點是會使應用程序變大

動態庫:

(.dylib)編譯時只存儲了指向動態庫的引用。 可以多個程序指向這個庫,在運行時才加載,

不會使體積變大, 但是運行時加載會損耗部分性能,並且依賴外部的環境,如果庫不存在或者版本不正確則無法運行

Framework:實際上是一種打包方式,將庫的二進制文件,頭文件和有關的資源文件打包到一起,方便管理和分發。

iOS8 / Xcode 6 之前是無法使用靜態庫,出現了AppExtension之后可以使用

對於是否使用Framework,CocoaPods 通過use_frameworks來控制

1.不使用use_frameworks! -> static libraries 方式 -> 生成.a文件

在Podfile中如不加use_frameworks!,cocoapods會生成相應的 .a文件(靜態鏈接庫),
Link Binary With Libraries: libPods-**.a 包含了其他用pod導入有第三庫的.a文件 
2.use_frameworks! -> dynamic frameworks 方式 -> 生成.framework文件
使用了use_frameworks!,cocoapods會生成對應的frameworks文件(包含了頭文件,二進制文件,資源文件等等)
Link Binary With Libraries:Pods_xxx.framework包含了其它用pod導入的第三方框架的.framework文件

1.純oc項目中 通過pod導入純oc項目, 一般都不使用frameworks

2.swift 項目中通過pod導入swift項目,必須要使用use_frameworks!,

  在需要使用的到地方 import AFNetworking

3.swift 項目中通過pod導入OC項目 

 1) 使用use_frameworks,在橋接文件里加上#import "AFNetworking/AFNetworking.h"
 2)不使用frameworks,橋接文件加上 #import "AFNetworking.h"
//---------------------------------------------

這里我發現swift 項目中通過pod

使用use_frameworks!

導入OC項目可以直接引用使用       或者放入橋接文件使用

另外學習swift寫了一些demo,加個鏈接這里 供swift初學者一起學習
 

 

 OC項目引入swift混編

OC項目Cocoapods導入Swift庫出錯解決辦法

在開發過程中主要用的是OC語言,所以pod的都是OC庫,Podfile里又沒加use_frameworks!

所以一直都是.a類型的。后來因為需求需要用到一個只有swift版本的庫,就使用use_frameworks!將所有.a庫變成了.framework。然后信心滿滿地運行工程,結果GG。

 

最后歸納出幾個需要注意的點:

 

我是這樣操作的:

1、先Podfile里屏蔽所有pod的三方,終端執行 pod install

2、Podfile里加use_frameworks!,終端執行 pod install

3、找到Target->Build Settings->Other Linker Flags,把OC Pod進來的庫,刪掉

4、Podfile里取消屏蔽的所有pod的三方,添加要加入的swift的三方,終端執行 pod install

5、將用到的庫提示找不到的,從#import <xxx.h>改為#import "xxx.h";

6、搜索Swift Language Version,將版本設置為Swift庫能支持的最高版本

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM