Help us understand the problem. What is going on with this article?

xcframeworkを作成する(第2回)

GMOアドマーケティングのT.Oです。

前回に引き続き、Swiftでxcframeworkを作成、利用する手順についてまとめます。
今回は手順3.からになります。

●xcframeworkの作成、利用手順
1. プロジェクト作成
2. xcframework生成のためのビルド設定
3. Objective-C対応
4. テスト用アプリ作成

3.Objective-C対応

Swiftで定義したメソッドやクラスをObjective-Cからも利用可能にするには@objcまたは@objcMembersアトリビュートを設定します。
@objcは特定のメソッドのみ利用する場合に使用し、@objcMembersはクラス全体のメソッドを利用する場合に使用します。
ここでは前回作成したクラスのメソッドに@objcアトリビュートを設定することにします。

Ore.swift
import UIKit

public class Ore: NSObject {
    @objc public func oreMethod(){
        print("Hello Ore XCFramework");
    }
}

Objective-Cで参照可能な定義は、xcframework以下の<プロジェクト名>-Swift.hに記述されています。
前回ビルドしたxcframeworkでは@objcアトリビュート設定前は以下のような記述内容となっています。

OreXCFramework-Swift.h(@objc設定前)
(略)
SWIFT_CLASS("_TtC14OreXCFramework3Ore")
@interface Ore : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
(略)

@objcアトリビュート設定後に、xcframeworkを再度ビルドします。
すると以下のように出力内容が変更されてoreMethod()が参照可能になっています。

OreXCFramework-Swift.h(@objc設定後)
(略)
SWIFT_CLASS("_TtC14OreXCFramework3Ore")
@interface Ore : NSObject
- (void)oreMethod;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
(略)

4.テスト用アプリ作成

xcframeworkの機能をテストするためのアプリを作成します。今回はxcframeworkと同じプロジェクトにSwift版、Objective-C版のテストアプリをそれぞれ追加することにします。

4.1.Swift版テスト用アプリ作成

xcframeworkのプロジェクトでメニューから「File」→「New」→「Target」を選択します。テンプレートの選択画面で「Single View App」を選択します。
xcframework2_p1.png

オプション選択画面に遷移します。Languageには「Swift」を選択し、Product Nameにテストアプリ名を指定して「Finish」を選択します。
ここではテストアプリ名を「OreSwiftTestApp」としました。
xcframework2_p2.png

テストアプリにフレームワークを利用するための設定を行います。
「TARGETS」でSwift版テストアプリの「OreSwiftTestApp」を選択し、「General」タブを選びます。「Frameworks, Libraries, and Embedded Content」にビルドしたxcframeworkをドラッグ&ドロップします。
xcframework2_p4.png

テストアプリのViewControllerにフレームワークを利用するためのコードを記述します。

ViewController.swift
import UIKit
import OreXCFramework

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        Ore().oreMethod()
    }

}

アプリをビルドし動作を確認します。

今回のxcframeworkはログ出力を行いますので、ログ出力を確認するためにXcodeの表示設定を変更します。画面上部のツールバーからデバッグエリアを表示する「Hide or show the Debug Area」ボタンを選択します。次に画面下部の「Show the Console」ボタンを選択します。
xcframework2_p5.png

画面の実行設定がテストアプリ(OreSwiftTestApp)になっていることを確認して、実行ボタンを選択します。xcframeworkの組み込みに問題がなければ、以下のようにコンソールに文字(”Hello Ore XCFramework”)が表示されているはずです。
xcframework2_p6.png

4.2.Objective-C版テスト用アプリ作成

xcframeworkのプロジェクトでメニューから「File」→「New」→「Target」を選択します。テンプレートの選択画面で「Single View App」を選択します。

オプション選択画面に遷移しますので、Languageには「Objective-C」を選択し、Product Nameにテストアプリ名(OreObjectiveCTestApp)を指定して「Finish」を選択します。

テストアプリにフレームワークを利用するための設定を行います。
「TARGETS」でObjective-C版テストアプリの「OreObjectiveCTestApp」を選択し、「General」タブを選びます。「Frameworks, Libraries, and Embedded Content」にビルドしたxcframeworkをドラッグ&ドロップします。

テストアプリのViewControllerにフレームワークを利用するためのコードを記述します。
xcframeworkのヘッダファイルは、"(プロジェクト名)/(プロジェクト名)-Swift.h"で参照可能です。

ViewController.m
#import "ViewController.h"
#import "OreXCFramework/OreXCFramework-Swift.h"

@interface ViewController ()
@end

@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    id oreObj;
    oreObj = [[Ore alloc] init];
    [oreObj oreMethod];
}
@end

アプリをビルドし動作を確認します。xcframeworkの組み込みに問題がなければ、Swift版と同様にコンソールに文字(”Hello Ore XCFramework”)が表示されているはずです。

「xcfameworkを作成する」をご紹介しました。いかがだったでしょうか?

明日は、「新オフィスの渋谷フクラスでエンジニアイベント「GMO Developers Night」を開催します!」です。
引き続き、GMOアドマーケティング Advent Calendar 2019 をお楽しみください!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした