開発メモ

開発関係のメモをいろいろと。たぶん。

Xcodeでworkspaceを使って複数のprojectをまとめて扱う方法

細かいところをよく忘れるので、全体の流れをメモ。

動作を確認した環境

環境 情報
Xcode 6.0.1 (6A317)
Swift 1.0
Date 2014/10/13

概要

基本的な流れはこんな感じ。

  1. 取りまとめるprojectを作成
  2. workspaceを作成
  3. workspaceにprojectを登録
  4. 参照や依存関係を設定

あとは使うだけ。

1. 取りまとめるprojectを作成

適当にprojectを作成。今回は、アプリとフレームワークそれぞれのprojectを用意。

  • JunkApp
    アプリ側のproject。Single View Applicationから作成。

  • JunkFramework
    フレームワーク側のproject。Cocoa Touch Frameworkから作成。

2. workspaceを作成

新規でworkspaceを作成。

f:id:see_ku:20141013200448p:plain

3. workspaceにprojectを登録

メニューからAddを選んでworkspaceにprojectを登録。

f:id:see_ku:20141013200510p:plain

この時、『Copy items into destination group's folder (if needed)』のチェックを外しておくのがポイント。たぶん。

f:id:see_ku:20141013200526p:plain

projectを2つ追加するとこんな感じになるはず。

f:id:see_ku:20141013200545p:plain

4. 参照や依存関係を設定

今回はフレームワークとそれを使うアプリを登録したので、フレームワークの参照を設定。

アプリ側からフレームワークを参照

アプリ側のターゲットの設定で、フレームワークを追加。

f:id:see_ku:20141013200611p:plain

普通に追加するだけ。

f:id:see_ku:20141013200629p:plain

謎の警告が出るのでSearch Pathを修正

アプリ側のターゲットの設定で、Search Pathを修正。

Target - [Build Settings]で[Framework Search Paths]を探してダブルクリック。

f:id:see_ku:20141013200648p:plain

なぜか、追加したフレームワークのパスが入ってるのでこれを削除。

依存関係がうまくいかない場合

運が良ければこれだけの設定で普通に使えるはず。なぜか、フレームワーク側の修正がアプリ側に波及しない場合、以下の設定を行って無理矢理フレームワークに依存させる。

f:id:see_ku:20141013200705p:plain

これで、うまくいくようになるはず。たぶん。

アプリでフレームワークを使用する

普通に、SDKで用意されているフレームワークを使うのと同じ。importで取り込んで、あとは普通に使うだけ。

// フレームワークを参照
import JunkFramework

class AppClass {

    // フレームワーク側のクラスを使用
    func useJunk() {
        let temp = JunkClass()
        temp.junkFunc()
    }
}

アクセス制御がpublicになってるものしかアクセス出来ないので注意。