RubyMotionを使っていてcocoapodsではソフト的にうまく組み込めないものがあったので、iOSで独自のFrameworkを作成して組み込む事にしてみます。
iOS-Universal-Frameworkを使った方法です。
iOS-Universal-Frameworkの組み込み
git clone https://github.com/kstenerud/iOS-Universal-Framework.git
cd iOS-Universal-Framework/
cd cd Real\ Framework/
./install.sh
Xcodeの場所を聞かれてテンプレートのインストールディレクトリーを確認して[y]を押します。(基本的には/Users/[ユーザー名]/Library/Developer/Xcode/Templates/Framework & Library)に入るようです。
Xcodeを立ち上げるとFramework&Libraryに「Static iOS Framework」が追加されています。これを利用します。
実際にオレオレFrameworkを作ってみる
JSONを扱うライブラリーは数多くありますが、(個人的な都合で)JSONKitをFramework化してみます。
1.プロジェクトを作成
iOS-Universal-Frameworkが組み込み済みであれば「Static iOS Framework」を選択し、JSONKitという名前でプロジェクトを作成します。
2.JSONKitのファイル取得
JSONKitからファイルをダウンロードします。
git clone https://github.com/johnezang/JSONKit.git
で取得したJSONKit.hとJSONKit.mをプロジェクトの中のファイルと置き換えます。別の名前で作ってしまった場合は、元のファイルをサクッとプロジェクトか取り除いてJSONKitのファイルを追加してください。
3.プロジェクトの設定
プロジェクトのBuildPhasesを選択します。
JSONKit.mのコンパイルオプションに「-fno-objc-arc」を追加します。
また、CopyHeadersのPublicにJSONKit.hを追加します。(これはJSONKitがARCに対応していないため行う作業です)
4.エラー修正
JSONKitはXCode5でコンパイルするとエラーが2つ表示されますが、ポップアップで表示されたアドバイスにしたがって「Fix-it」を選択します。
5.コンパイル
Products->Archiveを選択すると、JSONKit.fremworkが作成されます。これでiOS用のframeworkの完成です。
6.組み込み
6-1 RubyMotionプロジェクト作成
motion create JSONTest
mkdir JSONTest/vendor
作成したvendorディレクトリーの中にJSONKit.frameworkを入れます
6-2 Rakefile書き換え
Rakefileにframeworkの組み込みを行います。
Motion::Project::App.setup do |app|
# Use `rake config' to see complete project settings.
app.name = 'JSONTest'
app.vendor_project(
'vendor/JSONKit.framework',
:static,
:products => ['JSONKit'],
:headers_dir => 'Headers'
)
end
6-3 テスト
組み込む程でもないのでrakeでシュミレーターを実行し、コマンドプロンプトよりテストを行います。
(main)> ['one'=>1,'two'=>2,'three'=>3].JSONData
=> [{"one":1,"two":2,"three":3}]
ArrayやHashに対してJSONDataを呼ぶとJSON形式でデータが取得できればOKです。
ダメな場合はJSONDataを呼ぶと「undefined Method」が返ってきます。
JSONTest[5159:80b] undefined method
JSONData' for [...]:Array (NoMethodError)
JSONData' for [...]:Array>
=> #<NoMethodError: undefined method