8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Framework作成-Swiftでの使用メモ(Xcode6)

Last updated at Posted at 2015-10-16

忘れないようにメモ。。。

1.xcodeのFile -> New -> Framework & Library -> Cocoa Touch Framework
 で、テンプレート作成
 (とりあえず、swiftでは、どうするかわからんのでobjective-cで作成)

2.プログラム書く
 
スクリーンショット 2015-10-16 17.25.50.png

とりあえず。。。
スクリーンショット 2015-10-16 17.27.23.png

3.APIを公開するヘッダをFramework用のヘッダにインクルードする。
スクリーンショット 2015-10-16 17.30.13.png
※""じゃなく、<>の方にする事。。。

4.公開するヘッダのTargetをPublicにする。
 (ヘッダ内でincludeしているヘッダもPublicにする事!!!)
スクリーンショット 2015-10-16 17.34.40.png
(FugaFugaObjを追加)

スクリーンショット 2015-10-16 17.36.27.png

Projectになってるので、、、、
スクリーンショット 2015-10-16 17.37.31.png

Publicにする。
includeしてるヘッダも同様。。。
スクリーンショット 2015-10-16 17.38.53.png

5.Targetの修正
スクリーンショット 2015-10-16 17.42.10.png

(とりあえず、おまじない。。。)

スクリーンショット 2015-10-16 17.47.55.png

※Dynamic Library Install Baseが何も入ってなかったら、@rpathを設定。。。

6.Universal化する為、ターゲット追加

ターゲットを追加する。(+ボタンを押す。。。)
スクリーンショット 2015-10-19 7.45.33.png

Aggregateを選択
スクリーンショット 2015-10-19 7.04.56.png

ターゲット名を「プロジェクト名」+「-Universal」とする。
スクリーンショット 2015-10-19 7.06.22.png

ターゲットが出来る。
スクリーンショット 2015-10-19 7.46.20.png

メニューから、Product -> Scheme -> Edit Scheme... を選択

スクリーンショット 2015-10-19 7.13.14.png

Manage Schemesボタンを押す。
スクリーンショット 2015-10-19 7.47.43.png

SharedにチェックしてClose
スクリーンショット 2015-10-19 7.47.54.png

Univesal化の為に、Build Phasesに Runscriptを編集

スクリーンショット 2015-10-19 7.49.27.png

ないので、+を押して追加(New Run Scriptを選択)
スクリーンショット 2015-10-19 7.50.24.png

親切な人のスクリプトを設定
https://gist.github.com/syshen/c24d127e1adc2783e0e7

######################
# Options
######################

REVEAL_ARCHIVE_IN_FINDER=false

FRAMEWORK_NAME="${PROJECT_NAME}"

SIMULATOR_LIBRARY_PATH="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${FRAMEWORK_NAME}.framework"

DEVICE_LIBRARY_PATH="${BUILD_DIR}/${CONFIGURATION}-iphoneos/${FRAMEWORK_NAME}.framework"

UNIVERSAL_LIBRARY_DIR="${BUILD_DIR}/${CONFIGURATION}-iphoneuniversal"

FRAMEWORK="${UNIVERSAL_LIBRARY_DIR}/${FRAMEWORK_NAME}.framework"


######################
# Build Frameworks
######################

xcodebuild -workspace ${PROJECT_NAME}.xcworkspace -scheme ${PROJECT_NAME} -sdk iphonesimulator -configuration ${CONFIGURATION} clean build CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphonesimulator 2>&1

xcodebuild -workspace ${PROJECT_NAME}.xcworkspace -scheme ${PROJECT_NAME} -sdk iphoneos -configuration ${CONFIGURATION} clean build CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphoneos 2>&1

######################
# Create directory for universal
######################

rm -rf "${UNIVERSAL_LIBRARY_DIR}"

mkdir "${UNIVERSAL_LIBRARY_DIR}"

mkdir "${FRAMEWORK}"


######################
# Copy files Framework
######################

cp -r "${DEVICE_LIBRARY_PATH}/." "${FRAMEWORK}"


######################
# Make an universal binary
######################

lipo "${SIMULATOR_LIBRARY_PATH}/${FRAMEWORK_NAME}" "${DEVICE_LIBRARY_PATH}/${FRAMEWORK_NAME}" -create -output "${FRAMEWORK}/${FRAMEWORK_NAME}" | echo

# For Swift framework, Swiftmodule needs to be copied in the universal framework
if [ -d "${SIMULATOR_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/" ]; then
    cp -f ${SIMULATOR_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/* "${FRAMEWORK}/Modules/${FRAMEWORK_NAME}.swiftmodule/" | echo
fi
                                                                      
if [ -d "${DEVICE_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/" ]; then
    cp -f ${DEVICE_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/* "${FRAMEWORK}/Modules/${FRAMEWORK_NAME}.swiftmodule/" | echo
fi

######################
# On Release, copy the result to release directory
######################
OUTPUT_DIR="${PROJECT_DIR}/Output/${FRAMEWORK_NAME}-${CONFIGURATION}-iphoneuniversal/"

rm -rf "$OUTPUT_DIR"
mkdir -p "$OUTPUT_DIR"

cp -r "${FRAMEWORK}" "$OUTPUT_DIR"

if [ ${REVEAL_ARCHIVE_IN_FINDER} = true ]; then
  open "${OUTPUT_DIR}/"
fi

スクリーンショット 2015-10-19 7.51.25.png

7.ビルド

クリーンして、
シミュレーターと、実機、両方でビルドする。

スクリーンショット 2015-10-19 8.01.21.png

スクリーンショット 2015-10-19 8.00.43.png

ターゲットを Univasalにして、ビルド
スクリーンショット 2015-10-19 7.54.06.png

Frameworkの出来たパスを調べる。
スクリーンショット 2015-10-16 17.53.30.png

スクリーンショット 2015-10-16 17.55.57.png

出来てる事確認
スクリーンショット 2015-10-19 8.02.47.png

8.swiftで適当にプロジェクト作成
スクリーンショット 2015-10-16 18.06.25.png

9.プロジェクト上にframeworkを適当にフォルダ掘ってコピー
スクリーンショット 2015-10-16 18.11.28.png

プロジェクトにドラッグドロップ
スクリーンショット 2015-10-16 18.14.00.png

ターゲットでframeworkが参照されてるか確認
スクリーンショット 2015-10-16 18.18.50.png

10.swiftで使えるようにヘッダ作成
ヘッダ名:プロジェクト名+「-Bridging-Header.h」

スクリーンショット 2015-10-16 18.16.57.png
(TkTkApp-Bridging-Header.hを作成)

作成したヘッダにFrameworkのヘッダをインクルードする。
スクリーンショット 2015-10-16 18.20.14.png

※共通ヘッダをインクルード

11.Build Phasesを確認

Link Binary With Librariesを確認

スクリーンショット 2015-10-16 18.23.36.png

入ってると思う。。。

Copy Filesは、ないと思うので追加する。
(メニューのEditor -> Add Build Phases は非活性なので、Build Phasesを開いて
 +ボタンを押す)

スクリーンショット 2015-10-16 18.26.58.png

※DestinationをFrameworksにする事!!!!

11.FrameworkのAPIを使ってみる

スクリーンショット 2015-10-16 18.29.21.png

共通ヘッダをimportして、API呼び出し

シミュレーターで実行してみる。
スクリーンショット 2015-10-16 18.32.33.png

動いた。。。

実機で実行
スクリーンショット 2015-10-19 8.06.30.png

同じく動いてるので、Univasal化されている。。。

TODO
・空容量がないのでXcodeを上げれない。。。
 次のXcodeでやり方かわってくるかどうか。。。

・univarsalを最初から作りたいが、xcodeがバージョンあがったら、
 そうなってるかどうか。。。(多分なってない)

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?