Swift Package(SPM)でObjC/OCコードを使用する方法
2555 ワード
背景
最近、Swiftベースのアプリを開発しています.すでにOCで実装されている機能やOCでしか実装できない機能の中には、できるだけOCコードを多重化したいと考えています.この文章の目的は、Swift PackageでOCコードを呼び出す方法を解決することです.
Swift Packageにはデフォルトのパスがあります.たとえばinclude/Sources/などです.以下の例はobjcとswiftコードが同じSwift Packageにある(2つのswift packageを分ける場合も同様の操作)
// Package.Swift
targets: [
.target(
name: "objc",
dependencies: []
),
.target(
name: "" ,
dependencies: ["objc"]
),
まずはPackage.swiftでは、2つのtargetが定義されています.一つはobjcで一つはswiftです.swift targetはobjc targetに依存する必要がある.objc targetの名前はカスタマイズできますが、次のフォルダの名前と一致します.
#
- Package.swift
- Sources
- <Your_Swift_Target>
- objc
- include
- header.h
- impl.m
以上がファイル構造です.ルートディレクトリの下swiftは、同じディレクトリの下にSourcesフォルダがあり、すべてのソースコードが入っています.最初のサブディレクトリはSwift関連フォルダです.もう1つはobjcで、すべてのocのソースコードが含まれています.objcの下にはincludeのディレクトリがあり、exposedヘッダファイルがすべて入っています.この一歩が肝心だ.
// Your Swift file
import objc // objc
最後にswiftファイルでobjcを参照するとobjcの下のすべてのヘッダファイルの内容を使用できます.
親測定が有効である.この方法でswift appにocのコードを挿入することができ、多重化が容易になります.また、oc libraryを参照するほか、oc_をサポートすることもできます.executableとswift_executable.詳細は付属のリンクを参照してください.
リファレンス
http://ankit.im/swift/2016/05/21/creating-objc-cpp-packages-with-swift-package-manager/