0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Swiftでframeworkを作って利用する

Last updated at Posted at 2024-10-20

なぜframeworkを作ろうと思ったか

数値の配列からその特徴を抽出するクラスを生成しました。
割といい感じのクラスで、使いやすく、尚且つそのアルゴリズムが簡単...
ソースコードの中身がわかると「そんな程度でできるんだ...」と思われるのもなんか悔しい。
ならばソースコード非公開で利用してもらうのがいい!
その手法の一つがframeworkだったわけです。

frameworkを作る

Xcodeプロジェクトを作る

今回はmacOS、iOSの両方で使えるMultipratformのframeworkを作ります。
数値計算だけのプログラムでGUIが関わらないため、macOS、iOSとも同じソースコードが利用できます。
MyFrameworkというプロジェクト名にしました。

スクリーンショット 2024-10-20 9.59.19.png

実際に処理をするMyFrameworkというソースファイルをプロジェクトに追加します。
MyFrameworkクラスにhello()というメソッドを実装します。
「Hello, World!」という文字列を返すメソッドです。

public class MyFramework {
    ///プロパティ、メソッドの使い方などのコメント
    public static func hello() -> String {
        return "Hello, World!"
    }
}

スクリーンショット 2024-10-20 10.28.08.png

これでプログラム自体は完成です。

ビルドの準備

今回の目標は

  • ソースコードは非公開にする
  • macOS、iOSでも使える

です。

ビルドスキーム

ソースコードを非公開にするにはReleaseでビルドします。
Releaseビルドにより、デバッグシンボルがframeworkに含まれなくなります。

プラットフォームごとにビルド

macOS、iOSの実機、iOSのシミュレータごとにビルドする必要があります。
どのプラットフォームでビルドするかは下記のように選ぶことができます。

スクリーンショット 2024-10-20 10.29.32.png

ビルドされたProductsのフォルダ内を見てみると、それぞれのプラットフォームごとにframeworkが出来上がっています。
これでframeworkは完成です。

スクリーンショット 2024-10-20 10.25.25.png

作ったframeworkを使う

frameworkを使うプロジェクトをXcodeで作成します。
もちろん、既存のプロジェクトに取り込んで使うこともできます。
今回はmacOSのFrameworkTESTというプロジェクトを作りました。

スクリーンショット 2024-10-20 10.31.27.png

プロジェクトにフレームワークを取り込む

ビルドしたframeworkを利用したいプロジェクトにドラッグ&ドロップします。
わかりやすいように、プロジェクト内にframeworksというフォルダを作りました。

スクリーンショット 2024-10-20 10.39.08.png

この後、いくつかやらなければならない作業があります。
まず、frameworkの設定をEmbed & Signにします。

スクリーンショット 2024-10-20 10.41.46.png

次にBuild Settingのframework Search Pathsを指定します。
今回はプロジェクト内のフォルダに入れたので、そのフォルダを設定用のポップオーバーにドラッグ&ドロップすれば簡単に指定できます。

スクリーンショット 2024-10-20 10.47.58.png

これでframeworkを使う準備は完了しました。

ソースコードでframeworkを利用する

まずは利用するソースコードの冒頭でインポートします。

import MyFramework

MyFrameworkのhello()メソッドを使います。

print(MyFramework.hello())

ソースコード全体はこんな感じです。

import Cocoa
import MyFramework

class ViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        print(MyFramework.hello())
    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }
}

実行すれば、ターミナルに「Hello, World!」が表示されます。

スクリーンショット 2024-10-20 11.11.05.png

ソースコードが非公開になっているか?

私はここでハマりました...
設定類は問題なく、実際は非公開になるはずです。
しかし、デバッガでframeworkのメソッドにStep Inすると、なんとソースコードが見えています!
これ、同じMacでframeworkを作って、同じMacで使っていることが原因です。
Mac内にデバッグシンボルが残っているので、それを参照してしまうということです。

なので、同じMacに別のログインアカウントを作り、そちらで確認してみます。
これでStep Inできなければ、無事非公開になっています。
別のアカウントで実行したところ、Step Inできないので、無事非公開になっています。
ターミナルには「Hello, World!」が表示され、無事frameworkが使えています。

スクリーンショット 2024-10-20 11.08.25.png

また、frameworkで利用できるプロパティ、メソッドの定義も見ることができました。

スクリーンショット 2024-10-20 11.09.11.png

無事完成

これでソースコードを非公開にしつつ、frameworkを通して自分で作ったクラスなどを多くの人に利用してもらうことができます。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?