[Xcode6] Universal Frameworkを作る

広告:超オススメUnity Asset
  広告:超オススメUnity Asset

これまで、SwiftベースのFrameworkを作って、とりあえずiOSシミュレーターで動けばいいや(「[Xcode6] SwiftでCocoa Touch Frameworkを作る」)、で、frameworkを入れ替えしてみて実機で動作するものをビルドできることも確認(「[Xcode6] 自作Frameworkを実機で動くようにしてみる」)してみました。

やはり、作り込みだすと、iOSシミュレーターでも実機でも確認できる状態で作業を進めたいとなってきますね。そういう形のFrameworkにするには、ユニバーサルという状態にして仕上げなければならないんだと思います。参考になるサイトを探して、

Create an iOS Universal Framework

ここの通りにやってみたらうまくいったっぽいのでスクリーンショット付きで、MEMOしておきます。

00

※ このMEMOは、有料iOSデベロッパー向けに公開されているベータ版「Xcode 6.2 beta 5」を使っています。Xcode6.1.xではこの通りに動かないかもしれません。

[Xcode6] SwiftでCocoa Touch Frameworkを作る」の流れ作成したJiminyCricketと名付けたFrameworkに、新しいターゲットを追加します。File>New>Target…

01

「iOS>Other>Aggregate」を選択。

02

一応、プロジェクト名に「-Universal」をつけて名付けておきます。

03

ここからターゲットを今追加した、JiminyCricket-Universalに切り替えます。

04

この「+」アイコンから

05

「New Run Script Phase」を選択。

06

Run Scriptのここをクリックして

07

参考にしたサイトにあったスクリプトをまるまるコピペしちゃいます。

(一応、ここ↓にもスクリプトを保存しておきます。)

08

そして、ビルドする流れですが、すでに作成しているFrameworkを更新する場合、

  1. ターゲットをFrameworkにして「Device」を選んでいる状態でクリーンナップ
  2. ターゲットをFrameworkにして「Device」を選んでいる状態でビルド
  3. ターゲットをFrameworkにして「iPhone6」を選んでいる状態でクリーンナップ
  4. ターゲットをFrameworkにして「iPhone6」を選んでいる状態でビルド
  5. ターゲットを「JiminyCricket-Universal」にして「Device」を選んでいる状態でビルド

がよさそうです。(※ クリーンナップは、「Productメニュー>clean」。上記で「iPhone6」を選んでいますが、iOSシミュレーター用のどれでもいいと思います。)

ちなみに、iOSシミュレーターの動作だけ更新できればいいみたいに、時間短縮したい場合は、

  1. ターゲットをFrameworkにして「iPhone6」を選んでいる状態でビルド
  2. ターゲットを「JiminyCricket-Universal」にして「iPhone6」を選んでいる状態でビルド

だけでも、クラスメソッドを更新するテストはうまく動作しました。

09

「JiminyCricket.framework」を「Show In Finder」で実際に書き出された場所を確認してみると「Debug-iphoneuniversal」フォルダが作成されていて、その中に「JiminyCricket.framework」が作成されました。これを使う側のアプリのプロジェクトにリンクします。

12

「WoodenHead」と名付けた使う側のアプリのこれらのリンクをすべて先ほどのユニバーサルのものに置き換えて、

10

置き換えた後ビルドするとエラーが起こる可能性があるので、サーチパス欄もユニバーサルのものまでのパスだけになっているか確認。

11

この状態で、iOSシミュレーターであっても、直接繋いだ実機や、AdHoc版として書き出したビルドを実機に入れた状態であっても、ちゃんと動くことが確認できました!

まだアプリ申請などまで試していないので、どこかでまた問題が出てくるかもしれませんが、とりあえず、この状態でコツコツとこのFrameworkファイルを作っていこうと思います。

追記:つづき

[Xcode6] iOSアプリプロジェクト内にframeworkプロジェクト