従って、Objective-cで開発されたiOSアプリにチャート図を実装する場合、Swiftで開発されたチャートのライブラリを組み込むのが妥当である。
本記事では、現在iOSアプリ向けのチャートライブラリでメジャーな存在となっている、iOS-ChartsをObjective-cで開発されたプロジェクトに組み込む手順を記す。
1. iOS-Chartsのインストール
iOS-Chartsは、CocoaPodsまたはCarthageを使用してインストールする。
・CocoaPodsによるインストール
(1) インストールしたいプロジェクトのPodfileに下記を記述
target 'YOUR_PROJECT' do
use_frameworks!
pod 'Charts'
end
(2) ターミナルを起動し、下記のCocoaPodsコマンドでインストールを実行
pod install --repo-update
インストール時に、下記のメッセージが表示された場合。
[!] The `HOGE` target overrides the `ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES` build setting defined in `Pods/Target Support Files/Pods-HOGE.xcconfig'. This can lead to problems with the CocoaPods installation
- Use the `$(inherited)` flag, or
- Remove the build settings from the target.
TARGETSのBuild & Settingsで、ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES の値を $(inherited) に変更する。
2. デモ用のiOS-Chartsをダウンロードと実行
iOS-Chartsを利用するにあたっては、デモ用のプロジェクトを解析するのはよい学習方法である。
2-1. 下記のgithubのiOS-Chartsページから、デモ用のプロジェクトをダウンロードする。
※ iOS-Charts
https://github.com/danielgindi/Charts
2-2. 環境設定
(1) ダウンロードしたデモ用プロジェクトをXcodeで開く。
(2) TARGETSのSigning & Capabilitiesを開き、Signingを自分のTeamに変更する。
(3) Build &Runのターゲットを、ChartsDemo-iOS-Swiftに切り替える。この設定をしないと、ビルドが成功しても実行されない。
3. Objective-cで開発されたプロジェクトにiOS-Chartsを組み込む
3-1. 環境設定
まだ一度もSwiftで書かれたクラスをプロジェクトで使用するようにしていない場合、環境設定が必要である。
Swiftで書かれたクラスをプロジェクトで使用するようにしていない場合は、Build SettingsにSwift連携の設定項目が現れないので、ダミーでSwiftのクラスを作る。
(1) File → New → File → Swift File を選択する。
(2) Bridging-Header.hを作るか聞いてくるので、作成するを選択する。
(3) TARGETSのBuild Settingsを開き、Objective-C Bridging Header の項目に、上記(2)で指定したヘッダファイルが定義されていることを確認する。
例:プロジェクト名がHOGEの場合
HOGE-Bridging-Header.h
Bridging-Header.h は、SwiftからObjective-cのクラスにアクセスするときに必要なヘッダファイルである。
iOS-Chartsは、Objective-cからSwiftのクラスにアクセスして使用するので、このヘッダファイルはiOS-Chartsでは使用しない。
(4) TARGETSのBuild Settingsを開き、Objective-C Generated Interface Header Name の項目に、○○○-Swift.h を定義する。
例:プロジェクト名がHOGEの場合
HOGE-Swift.h
-Swift.h は、Objective-cからSwiftのクラスにアクセスするときに必要なヘッダファイルである。このファイルはXcodeにて自動的に生成されるので、管理者が改めて作る必要はない。また、このファイルはプロジェクト内に生成はされるが、Xcodeのプロジェクトのビューには表示はされない。
3-2. ビルドエラーが出たとき
ビルド時に、Expected a typeやCannot find protocol declaratiなどのエラーになった場合は、上記2.のデモアプリのBuild & Settingsと比較して、異なっている設定をひとつずつ合わせてビルドが正常終了することを確かめること。
(1) 下記のエラー表示がなされた場合は、循環参照が原因となっていることが考えられる。
Cannot find protocol declaration for 'ChartViewDelegate'
Expected a type
この場合、参照しているヘッダファイル相互で、同一のヘッダファイルをインポートしている箇所を見つけて、どちらか一方のインポート記述を削除する。
古いプロジェクトの場合、.pchファイルで記述している、インポートするヘッダファイルもチェックする必要がある。
循環参照が原因ではない場合、下記のインポート記述をして正常にビルドされるかを確認する。
#import <Charts/Charts-umbrella.h>
(2) (PROJECT_NAME)-Swift-h が参照できないエラーとなっている場合、Build & Settingsが下記の設定になっていることを確認する。
always_embed_swift_standard_libraries = YES - $(inherited)
参考記事:
https://www.itread01.com/content/1549720675.html
https://qiita.com/ioschartsman/items/2e510d311cc4fcd25608
https://qiita.com/orihomotakanat/items/b554721b047ba63b28c8
https://dev.classmethod.jp/articles/swift-oss-ios-charts/
https://qiita.com/yosshi4486/items/d54e60d493d780b6e0cf
https://kenjiszk.hatenablog.com/entry/2015/02/23/032628
https://qiita.com/yosshi4486/items/d54e60d493d780b6e0cf
https://qiita.com/rh_/items/ca5401c87fc206b3f594
【Chartsの最新記事】