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

独自Frameworkの作り方(&RubyMotionでのテスト)

More than 5 years have passed since last update.

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」が追加されています。これを利用します。

スクリーンショット_2014_01_15_23_04.jpg

実際にオレオレFrameworkを作ってみる

JSONを扱うライブラリーは数多くありますが、(個人的な都合で)JSONKitをFramework化してみます。

1.プロジェクトを作成

iOS-Universal-Frameworkが組み込み済みであれば「Static iOS Framework」を選択し、JSONKitという名前でプロジェクトを作成します。

JSONKit_xcodeproj.jpg

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に対応していないため行う作業です)

JSONKit_xcodeproj.jpg

4.エラー修正

JSONKitはXCode5でコンパイルするとエラーが2つ表示されますが、ポップアップで表示されたアドバイスにしたがって「Fix-it」を選択します。

JSONKit_xcodeproj_—_JSONKit_m.jpg

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の組み込みを行います。

Rakefile
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)
=> #<NoMethodError: undefined method
JSONData' for [...]:Array>

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