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

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

 

2、stroyboard放到bundle中沒法被成功加載
    須要在綁定了控制器的storyboard的CustomClass處, 指定Module爲包含對應類的靜態庫,同時不勾選Inherit Module From Target
 
3、圖片放到bundle中格式不對
    設置 Build Setting 中的 COMBINE_HIDPI_IMAGES 爲 NO,不然 Bundle 中的圖片就是 tiff 格式了。
 
4、swift代碼沒法被外界OC代碼訪問
    經過相關羣裏與羣友交流,發現是須要在被訪問的swift類前加 @objc public。若是須要繼承swift的類,可能須要加@objc open
 
5、swift代碼的協議方法沒法回調
   Xcode很傻的提示在協議方法前加@nonobjc,很坑!後面在我快要放棄打包探索之路時,不甘心把一樣代碼以非靜態庫形式集成到工程裏,發現竟然仍然有協議方法不回調的問題。因而嘗試 把@nonobjc改成了public,竟然就能夠了!因而又使用git相關命令reset到靜態庫的某個tag版本。發現這麼改以後整個流程就通了!
 
6、多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
 
😔,踩坑了兩天,一把辛酸淚啊!略做記錄,以表欣慰。

原文出處:https://www.cnblogs.com/Dast1/p/10914439.htmlhtml

相關文章
相關標籤/搜索