iOSでしかCarthageで導入できないライブラリをOSX,tvOS,watchOSにも対応してもらいたい時にすること

  • 10
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

iOS以外でもCarthageが使いたい

SwiftでCSVを扱うコマンドラインツールを作るために、@naoty_k さんのSwiftCSVを使わせていただこうと思ったのですが、
carthage updateを実行した時に以下のようなエラーでビルドに失敗しました。

Dependency "{ライブラリ名}" has no shared framework schemes for any of the platforms: {指定したプラットフォーム名}

これは、指定したプラットフォーム向けのSchemeがライブラリに存在しないため発生するエラーです。
内部でUIKitを使用していないライブラリなら、簡単に他のプラットフォームに対応できるので、やってみました。

手順

Targetを追加する

  • Cocoa Framework
  • TV Framework
  • Watch Framework

Product Nameは"{ライブラリ名} {プラットフォーム名}"にしましょう。
OrganizationとBundle Identifierは元からあるターゲットと同じものを指定しましょう。
(Optional) Inclide Unit Testsにチェックを入れます。(watchOSはTest Targetを作らなくて良いです)

スクリーンショット 2016-04-17 14.58.54.png

Targetごとのフォルダを削除

Targetごとのフォルダは不要なのでMove to Trashしてしまいましょう。

スクリーンショット_2016-04-17_15_02_52.png

Compile Sourcesを追加

"{ライブラリ名} {プラットフォーム名}"Targetと"{ライブラリ名} {プラットフォーム名}Tests"TargetのBuild Phases > Compile Sourcesにコンパイル対象のファイルを追加します。

スクリーンショット_2016-04-17_15_05_28.png

スクリーンショット_2016-04-17_15_07_08.png

Product Nameを修正

"{ライブラリ名} {プラットフォーム名}"Targetと"{ライブラリ名} {プラットフォーム名}Tests"TargetのBuild Settings > Packaging > Product Nameがデフォルトで
"{Target名}"になっているので"{ライブラリ名}"に変更します。

※ターゲット名にスペースを含んでいなければ修正しなくてもいいです。

Plistの指定

"{ライブラリ名} {プラットフォーム名}"Targetと"{ライブラリ名} {プラットフォーム名}Tests"TargetのBuild Settings > Packaging > Info.plist Fileを、元からあったTargetと同じものを指定します。
Test TargetとそうでないTargetは異なる値です。

スクリーンショット 2016-04-17 15.21.40.png

Share

スキーム名 > Manage Schemes...からScheme一覧を開き、追加したSchemeのSharedにチェックを入れます。

スクリーンショット 2016-04-17 15.45.28.png

スクリーンショット_2016-04-17_15_46_03.png

Deployment Targetの確認 (Optional)

"{ライブラリ名} {プラットフォーム名}"TargetのGeneral > Deployment Info の情報を確認しておきます。
デフォルトで最新のプラットフォームのバージョンが指定されていると思います。
(どのバージョンを指定するべきかはリポジトリのオーナーと相談するべきかもしれません。)

ビルドできるか確認

すべてのSchemeでビルドを実行してみて、エラーが発生しないことを確認します。

試しにCarthageで導入してみる

  • ローカルにgitリポジトリを作ります。
  • 作業結果の差分をローカルのgitリポジトリにpushします。
  • 導入するサンプルのプロジェクトを作成し、Carfileに以下のように記述します。
git "file:///path/to/loal/repo.git" "{作業中のブランチ名}"
  • carthage updateします。
  • サンプルプロジェクトでライブラリが使用できることを確認します。

Pull Requestを送る

Pull Requestを送って、Mergeされるのを待ちましょう。

実際に送ったPull Requestはこちら
Support OSX, tvOS, and watchOS with Carthage by haranicle · Pull Request #35 · naoty/SwiftCSV

おつかれさまでした :tada: