oc工程中oc、swift混編代碼打包成靜態framework踩坑筆記


參考資料:
 
兩天時間探索,期間不知道遇到了多少問題,各種google和Stack Overflow,甚至都求助了群友的力量。期間也想過放棄,還好有一顆不甘的心。終於成功了!
開心,哈哈,希望有緣人遇到同樣問題的話,下面的一些記錄可以幫助到你。
成功后,靜態庫里swift和OC代碼可以被OC工程中OC和swift類使用。
 
一、編譯庫時,選debug可以成功,但是release不成功
    原因:上面文章中忘記說要把庫設置為static的步驟了。
    正確方式:在靜態庫的buildsetting搜索mach,選擇  Static Library
    

 

二、stroyboard放到bundle中無法被成功加載
    需要在綁定了控制器的storyboard的CustomClass處, 指定Module為包含對應類的靜態庫,同時不勾選Inherit Module From Target
 
三、圖片放到bundle中格式不對
    設置 Build Setting 中的 COMBINE_HIDPI_IMAGES 為 NO,否則 Bundle 中的圖片就是 tiff 格式了。
 
四、swift代碼無法被外界OC代碼訪問
    通過相關群里與群友交流,發現是需要在被訪問的swift類前加 @objc public。如果需要繼承swift的類,可能需要加@objc open
 
五、swift代碼的協議方法無法回調
   Xcode很傻的提示在協議方法前加@nonobjc,很坑!后面在我快要放棄打包探索之路時,不甘心把同樣代碼以非靜態庫形式集成到工程里,發現居然仍然有協議方法不回調的問題。於是嘗試 把@nonobjc改為了public,居然就可以了!於是又使用git相關命令reset到靜態庫的某個tag版本。發現這么改之后整個流程就通了!
 
六、多target引用相同和不同第三方庫問題
   可以通過cocopods解決此問題。例如:
  
 1 # Uncomment the next line to define a global platform for your project
 2 platform :ios, '11.3'
 3 abstract_target 'Shows' do
 4 
 5   # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
 6   use_frameworks!
 7   
 8   #都要用:----------------------
 9   pod 'iConsole',    '~> 1.5.3'
10 
11 
12   target 'HTMCommon' do
13   end
14   
15   target 'HTMImgRecognise' do
16 
17   end
18   
19   target 'ZWEasyWalkMap' do
20     
21     # Pods for ZWEasyWalkMap
22     pod 'Realm', '~> 3.13.1'
23   end
24   
25   target 'ZWEasyWalkMap-SHXJD' do
26     pod 'Realm', '~> 3.13.1'
27   end
28 
29 
30 end
 
😔,踩坑了兩天,一把辛酸淚啊!略作記錄,以表欣慰。


免責聲明!

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



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