1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CocoaPodsがなくなったらObjective-C製パッケージはどう配布すればよいのだろう?

Posted at

昨年(2024年)に CocoaPods の メンテナンスプランが発表 されました。Swift Package Manager(以降、SwiftPM) も成熟してきており、特に困ることはないのかなと思っていたのですが、先日ふと1つの疑問が湧いてきました。

CocoaPods がなくなったら Objective-C 製パッケージはどう配布すればよいのだろう?

CocoaPods は元々 Apple プラットフォームの主要開発言語が Objective-C の時に生まれたものなので、Objective-C 製のパッケージを配布することができます。その CocoaPods がなくなってしまった時、その代替手段はあるのでしょうか?

調査したところ、結論としては SwiftPM で配布可能 です。この記事ではその方法をご紹介します。

検証環境

Objective-C製のパッケージを作る

Objective-C のコードで構成されたパッケージを作るのと、Swiftのパッケージを作るのと作業はほとんど変わりません。

  • まずは swift package init してください
  • 次に Sources 配下の Target ディレクトリに Objective-C のコード(*.h, *.m 等)を配置してください

ここから追加で必要な作業が1つだけあります。

  • Sources/{Target}/include ディレクトリに外部公開用のヘッダーファイルを置いてください

これだけです。Xcodeプロジェクトでいう Bridging Header の役割ですね。

サンプルコード

外部公開用ヘッダーファイルの配置ディレクトリは、Target のパラメータ publicHeadersPath で変更することができます。

こうしてできたパッケージは、次のようにあらゆるシーンで使用可能となります!

  • 通常の Swift パッケージの依存パッケージとして使用可能 (サンプルコード)
  • Objective-C 製パッケージの依存パッケージとして使用可能 (サンプルコード)
  • Objective-C ベースの Xcode プロジェクトの依存パッケージとして使用可能 (サンプルコード)

ただし、1つ注意点があります。1つの Target の中で Swift と Objective-C を混在させることはできません。混在させた場合、Swift Package Manager が次のようなエラーとなります。

target at '...' contains mixed language source files; feature not supported

(おまけ) XCFramework bundle で配布するのも良さそうですね

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?