Xcode7.3 & SwiftでつくるCocoaTouch Framework（作成編）


<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/64295d28-1804-ecff-877b-94919edf5825.png" width="250">

# はじめに

以前、Objective-Cで同様の事はやった事はあったのですが、今後の可能性を考え調査してみました。
また、本記事は、作成編、使用編、そしてドキュメント生成編の3部構成となる予定で今回は作成編です。


# 環境

- OS X El Captian 10.11.4
- Xcode 7.3
- Swift 2.0

# 作成方法

## Xodeを起動

- Create a new Xcode projectを選択

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/7bb14746-957a-9b6b-dd68-550acedba2fc.png" width="480">

- 今回はCocoa Touch Frameworkを選択して作成していきます。

## 作成するCocoa Touch Frameworkの作成

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/c082d40d-fb36-280c-ea6a-e7542a882837.png" width="480">

- 作成するフレームワークの名前を決めます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/e9ad2b99-4188-8d86-df54-9369ab8b12ac.png" width="480">

- 今回は「Ditto」とします。

- 言語は今回「Swift」を採用します。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/2ab74e56-a7df-6a36-eb74-05bf829ab21d.png" width="250">

- フレームワークの実装ファイルを追加

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/fe197389-62bb-e078-dc44-2b6e2d43ae62.png" width="480">

- Xcode -> File -> New -> File...から選択

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/ae6ff69a-4eb3-226d-7995-7efa9b4738c6.png" width="480">

- 今回はFramework名と同様に「Ditto」とつけました。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/07bad2a0-4ea5-dffc-713b-4e5ff8d59368.png" width="480">

- Createを選択すると、上記のようにファイルが生成されます。
ｰ あなたの素晴らしいアイディアをコードに落とし込みましょう。

## Frameworkのビルド

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/ed769674-000f-607e-c0f4-253b16d2122e.png" width="480">

- これらを使用する際に、実機、シミュレーターどちらも対応させる為にfat binaryにします。

## Build Settingsの設定

- Build Settings->Architectures->Build Active Architecture Onlyを”NO”にします。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/22fd6527-57a0-ec33-3fa6-ab3b79467547.png" width="480">

ｰ Build Settings->Architectures->Valid Architectureに”armv7 armv7s arm64 i386 x86_64”を設定します。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/2d3df9c9-4dcc-2e0e-f364-30854e8012b2.png" width="480">

## Fat Binary作成の為のTargetを追加

- File->New->Targetを選択する。Otherにあります。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/9a18c424-3263-9a60-64b7-a70d5b92646b.png" width="480">


- 任意の名前をつけます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/d9c80e53-8ed0-3bb8-6cd5-d2b9d1ec640e.png" width="480">

- 次にビルド時にFat Binaryを作成するためのScirptを先程作成したTargetに追加します。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/0f03074d-88fb-6052-f559-71ddae3f2a42.png" width="480">

- テキストエリアに秘伝のコードをはります。

https://gist.github.com/mfks17/8bb852c0a8d44787b9c2f6a9385ac4bf


<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/a92c2381-af4b-8a2d-d8bb-716d94cdef30.png" width="480">



- Schemeを作ったTargetでビルドすると、プロジェクトのルートディレクトリにFrameworkが作成されます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/b4fb2220-5f72-15b3-24bf-532bcb4f0552.png" width="300">


## Fat Binaryであるかの確認

- Fat Binaryができたところで、[lipo](http://ss64.com/osx/lipo.html)コマンドで確認するScriptを追加します。
- 先程と同じ要領で、以下のScriptを追加します。

https://gist.github.com/mfks17/5413f87ad882de762dab94bd77d40642

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/9be213d0-ac1a-81db-e0e9-727a82c6c648.png" width="480">

- 再度ビルドして、ログを確認すると以下のような結果になっている事がわかります。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/6996fcce-632e-ff48-808f-8060aa6884b9.png" width="480">

# 感想

スクショをとるのが大変でしたが、Frameworkを作ることができました。まだ、作成されたFrameworkを実際に使用するところまでいっていないで、続きを書きたいと思います。

# 謝辞

- [Introduction to Framework Programming Guide](https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPFrameworks/Frameworks.html#//apple_ref/doc/uid/10000183-SW1)

- [How to create an iOS Cocoa Touch Framework using Xcode](http://locomoviles.com/uncategorized/create-ios-cocoa-touch-framework-using-xcode/)

- [自作Universal Frameworkをつくる (Xcode, Objective-C)](http://jimaoka.hatenablog.jp/entry/ios-framework)