Copyright (C) iPhoneアプリ開発備忘録 All rights reserved.
ブログ内で記したコード、内容の正確性は保証いたしません。
記載内容を実装したことにより発生した不具合・損害等の責任は一切負いません。



2020年10月28日

Objective-cのプロジェクトに、SwiftのiOS-Chartsを組み込む



Objective-cで開発されたiOSアプリにチャート図を実装する手法は多くあるが、現在のアプリ開発はSwiftが主流であり、Objective-cで開発されたチャートのライブラリの多くが、現時点でメンテナンスが中断あるいは終了していると言ってよい。

従って、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 typeCannot 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の最新記事】
posted by mobileDeveloper at 20:51 | Comment(0) | Charts はてなブックマーク - Objective-cのプロジェクトに、SwiftのiOS-Chartsを組み込む | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
Apple、Appleのロゴ、App Store、iPodのロゴ、iTunesは、米国および他国のApple Inc.の登録商標です。
iPhone、iPod touch、iPadはApple Inc.の商標です。
iPhone商標は、アイホン株式会社のライセンスに基づき使用されています。
その他、本ブログに記載されている製品名、会社名は、それぞれ各社の商標または登録商標です。