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を作らなくて良いです)
Targetごとのフォルダを削除
Targetごとのフォルダは不要なのでMove to Trashしてしまいましょう。
Compile Sourcesを追加
"{ライブラリ名} {プラットフォーム名}"Targetと"{ライブラリ名} {プラットフォーム名}Tests"TargetのBuild Phases > Compile Sourcesにコンパイル対象のファイルを追加します。
↓
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は異なる値です。
Share
スキーム名 > Manage Schemes...からScheme一覧を開き、追加したSchemeのSharedにチェックを入れます。
↓
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
おつかれさまでした