iOS·Charts·集成步驟

  • 本篇筆記的背景前提:

    要采用和 Android 一致的圖表界面 MPAndroidChart。所以選擇了 同一作者Swift 寫的圖表庫(kù) Charts。
    因?yàn)楣こ烫?,所以依舊是用 Objective-C 編寫的工程,沒(méi)有轉(zhuǎn)型 Swift 編寫工程。
    那么,自然的,我就得選擇 Objective-C與Swift混編。

    此處工程的前提是:Xcode 8.2.1,Charts 3.0.1
    此處工程的前提是:Xcode 8.3.1,Charts 3.0.2
    此處工程的前提是:Xcode 9.0.1,Charts 3.0.4
    此處Demo的環(huán)境是:Xcode 9.3,Charts 3.1.1


  • 如果,你的工程恰巧也是 Objective-C 編寫的,而今要使用 Charts。那么,請(qǐng)繼續(xù)往下看。

    如果,你的是 Swift 創(chuàng)建的工程,也要使用 Charts。那么,抱歉了。我的這篇筆記,好像幫不上任何忙。畢竟 Swift 調(diào)用 Swift 寫的 Charts 庫(kù),應(yīng)該是調(diào)用很自然的。
    很多用到 Objective-C和Swift混編 的開(kāi)發(fā)者都知道,混編在編譯、運(yùn)行的時(shí)候,挺慢的。尤其是,工程代碼量越大,運(yùn)行越慢。而此處的Charts庫(kù)本就很大。編譯慢在所難免。何況在Xcode 8Swift本身就編譯頗慢。

    Objective-CSwift 的混編,在 Xcode 8.3 之后,稍有改觀,編譯和運(yùn)行會(huì)快一些。

    很多開(kāi)發(fā)者大概知道很多圖表庫(kù),諸如:ECharts、ZFChart等等,但是,由于我在開(kāi)發(fā)中需要與 Android 端采取同樣界面的圖表庫(kù)。所以,我只能選擇這個(gè)Charts庫(kù) 進(jìn)行混編。
    如果,你僅僅需要一些簡(jiǎn)單的圖表功能,又是Objective-C工程,不需要和Android保持界面相同,并且想要靠譜的編譯速度,那就不太建議用這個(gè)庫(kù)。甚至建議你手碼一個(gè)圖表庫(kù)。
    考慮到性能問(wèn)題的(比如內(nèi)存),建議使用 WKWebview 加載 本地Echarts圖表頁(yè)面。


  • 準(zhǔn)備工作:

    在此假設(shè)你已經(jīng)安裝好 Cocoapods了。
    如果你還未安裝Cocoapods,請(qǐng)參考此鏈接:Cocoapods安裝&解決安裝錯(cuò)誤&使用

    已經(jīng)創(chuàng)建好了一個(gè)由 Objective-C 編寫的工程。
    然后,關(guān)掉該打開(kāi)的工程。

  • Tips:

    如果你很熟練使用 pod命令,請(qǐng)?zhí)^(guò)以下內(nèi)容。如果不熟練,這里給出了還算詳細(xì)的過(guò)程 供予參考。

  • 打開(kāi)終端或者ITerm。
  • 依次執(zhí)行如下命令行:
    cd 把工程直接拖過(guò)來(lái)
    //敲擊return鍵
    
    //新建一個(gè)Podfile文件
    touch Podfile?
    //敲擊return鍵
    
    //使用xcode打開(kāi)文件
    open -a xcode Podfile?
    //敲擊return鍵
    //在 Xcode 打開(kāi)的 Podfile文件 中編輯你需要內(nèi)容
    

  • 在Xcode打開(kāi)的Podfile中,輸入如下內(nèi)容:
    platform :ios, '8.0'
    use_frameworks!
    
    target 'testCharts' do
      pod 'Charts'
      pod 'ChartsRealm'
    end
    

  • 導(dǎo)入庫(kù)
    pod install
    
    導(dǎo)入成功后 .png
    //雙擊 .xcworkspace 文件,打開(kāi)工程
    //或者使用命令行打開(kāi)
    open -a xcode Hi.xcworkspace
    

  • 創(chuàng)建Swift文件,以此來(lái)創(chuàng)建橋接文件。
    command+n,創(chuàng)建Swift文件.png
選擇Swift語(yǔ)言.png

選擇create bridging header,Objective-C工程要用Swift文件,需要用到橋接文件.png

  • 配置
    • Tips:此時(shí)編譯,會(huì)出錯(cuò)。因?yàn)?Swift 庫(kù)Swift Language Version 的問(wèn)題。
    • 以下是編譯后出現(xiàn)的錯(cuò)誤:

    Error:The “Swift Language Version” (SWIFT_VERSION) build setting must be set to a supported value for targets which use Swift. This setting can be set in the build settings editor.

    錯(cuò)誤的意思很簡(jiǎn)單,就是 Cocoapods 管理的第三方框架 版本 出現(xiàn)了一些問(wèn)題。

    解決辦法(無(wú)論是否編譯,均需走此配置): 選擇Pods -> Targets -> Charts/ChartsRealm/RealmSwift -> Swift Compiler - Language -> Swift Language Version -> Swift x.x,即把 Unspecified 改成最新的Swift版本即可。
    如果是 個(gè)別框架 的問(wèn)題,則需要單獨(dú)選擇某個(gè)框架來(lái)設(shè)置Swift Language Version版本。

    Swift Language Version 問(wèn)題.png
    • 特別注意: 此處,先Clean一下,再編譯一下
    • 橋接文件 項(xiàng)目名-Bridging-Header.h 中,寫上要引用的Swift頭文件。
    @import Charts;
    

  • 測(cè)試:
    • 在ViewController.m中加入如下測(cè)試代碼:
    #import "ViewController.h"
    #import "Hi-Bridging-Header.h"
    @interface ViewController ()
    @end
    @implementation ViewController
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.view.backgroundColor = [UIColor grayColor];
        BarChartView *chartView = [[BarChartView alloc] initWithFrame:self.view.bounds];
        chartView.backgroundColor = [UIColor colorWithRed:0.184 green:1.000 blue:0.738 alpha:1.000];
        [self.view addSubview:chartView];
    }
    @end
    
    • Tips:當(dāng)然,此時(shí)此刻,你可以把之前創(chuàng)建的 swift文件 刪除掉了。

  • 運(yùn)行效果如圖:
    • 因?yàn)闆](méi)有數(shù)據(jù)。所以,只要這樣的提示。此時(shí),表示已經(jīng)集成成功。

效果如圖所示.png

  • Error 的處理:

    如果,你之前已經(jīng)在項(xiàng)目中使用了 Charts圖表庫(kù)。
    而現(xiàn)在,Charts 庫(kù) 已由Swift 2.3Swift 3.0版本升級(jí)為Swift 3.0Swift 4.0版本。
    如果你未執(zhí)行pod update,卻以 8.3版本以后的Xcode 打開(kāi)了工程,會(huì)有如下圖所示的提示 Swift 版本 的更新。

    提示更新.png

    所以,需要在Podfile文件的內(nèi)容中,即 最后一行 pod 'xxx' 和 末尾的 end 之間加入這樣一段代碼。

    • 如下所示。
    # Swift2.3升級(jí)到Swift3,語(yǔ)法有比較大的改動(dòng),所以在Xcode 8下需要設(shè)置Swift的版本適配語(yǔ)法問(wèn)題。
    # 方法一:
    # 使用CocoaPods,在 Podfile 添加 SWIFT_VERSION 配置,然后執(zhí)行 pod install。Podfile添加配置如下
    # 如果是適配2.3,那么改為config.buildsettings['SWIFTVERSION'] = '2.3'
    Unspecified 改為YES或者NO (其實(shí),默認(rèn)Xcode 8默認(rèn)是NO)
      post_install do |installer|
          installer.pods_project.targets.each do |target|
              target.build_configurations.each do |config|
                  config.build_settings['SWIFT_VERSION'] = '3.0'
              end
          end
      end
    # 方法二:
    # 打開(kāi)項(xiàng)目或者庫(kù)的Build Settings。
    # 把Swift Compiler Version屬性"Use Legacy Swift Language Version"把
    # 其實(shí),上面這段代碼可以廢棄了。直接從上面的 配置 一欄中講到的 Swift Language Version 設(shè)置即可。
    

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容