2019年8月31日0件のコメントSwiftで自前ライブラリを作る方法(Xcode利用)Swiftでは関数やクラス、構造体などを詰め込んだFrameworkを作ることができる。Swiftでは関数が「一級市民」なのでいわゆる「メンバ関数」のような事をしなくてもよい事も補足しておく。iOSのアプリは巨大化しているので、コードの再利用が望ましい。それはFrameworkにするのがよいだろう。例によって最新の情報がなかったので自分でやってみた。複雑なサンプルだと本当に必要なことがなんなのか分からなくなるのでごく簡単なアプリケーションを作成する。基本的な流れはmacOS等でも同じだろう。大まかに言って次のような手順を取る。importをソースコードに書き込むこれで元と同じように動作するはず。コメントアウトしていた部分を削除これを忘れないように、そして余計な部分を削除してしまうこともあるのでテストを忘れないこと。Builderリアルタイムに更新されない。それについてはまた別の項で書く予定。CocoaPodsを利用したより大きなプロジェクト構成法については項を改めて記す。簡単なプログラムを作って、詳細な手順を見ていこう。作成対象の概要:Xcode10の場合を想定する。固定の挨拶文に現在の日付を加えてラベルに表示するという簡単なプログラムだ。ここではHelloDateTimeというプロジェクトを作っている。Labelを作ってViewControllerにリンクを張っておく。}}そして挨拶文に日付を加えたStringを返却する関数を別ファイルに作っておく。"."}Java等と違い、この関数、クラスのメンバ関数のようなものではないことにも注目。これが「一級市民」と呼ばれる理由の一つであろう。手順2:対象をFrameworkとしてビルドするこれは独立したプロジェクトでやった方が良いと思う。別のプロジェクトでも使いたいというのが動機だからである。Frameworkを選んでFramework用のプロジェクトを作成する。ファイル追加でFrameworkの中にSwiftのファイルを追加する。中身は以下のようなもの。"."}気をつけなくてはいけないのはアクセスコントロールがpublicにしてあること。SwiftではDefaultがinternalなので外部利用するために必要なのである。構造体やクラスの場合はダミーのInitializerをpublicで入れるのを忘れないようにする。}これがないとビルドが通らない。ExplicitなInitializerがあればそれをpublicにすればよい。Deviceにしておく。しないと特定のデバイスでしか動かないモジュールが出来てしまう。間違いがなければビルドも上手く通り、Productsの中にできている.frameworkファイルを元プロジェクトにFinderでドラッグする。(作業は手順4の第一段階で実施)手順3:元ファイルのFrameworkに組み込んだ部分をコメントアウト重複定義になってしまうので、既存の部分をまずはコメントアウトしておく。Finishすると下のようになる。手順4:先ほどビルドしたFrameworkを組み込むこれはいくつかの段階を踏まなくてはいけない。第一段階:Frameworkファイルのプロジェクトへの読み込みドラッグする場所はプロジェクトプロジェクトナビゲーターで.xcodeprojの下。この時、開くダイアログで一番上のチェックボックスをチェックしておくこと。Librariesの中に先ほど追加したFrameworkファイルが現れている。これを一旦マイナスアイコンで削除する。Librariesの中にも同じものができる。追加したFrameworkの中にある関数などを利用するソースコードでインポートする。補完が働くので安心してよい。}}import追加前だとi以下のようなエラーが出る。不要になるので削除する。十分テストを行ってからすべきだろう。以上でFrameworkを作成、利用できるようになる。Frameworkの中で更新があったら、プロジェクト毎に手順4を繰り返す必要がある。まとめやや面倒だが、ソースコードのリユースを進める上で避けられないFramework作成を詳述した。業務アプリケーションをプロトタイプから派生させていく際には不可欠なプロセスだろう。今回は関数でやったが、クラスや構造体でも同じプロセスである。