iosでのframework導入のおさらい #関モバ

26
iOSでのFramework導入のおさらい @ikesyo 関西モバイルアプリ研究会 #4, 2015)07)21 Tue #関モバ

Upload: syo-ikeda

Post on 12-Aug-2015

398 views

Category:

Engineering


6 download

TRANSCRIPT

Page 1: iOSでのFramework導入のおさらい #関モバ

iOSでのFramework導入のおさらい@ikesyo

関西モバイルアプリ研究会!#4,!2015)07)21!Tue

#関モバ

Page 2: iOSでのFramework導入のおさらい #関モバ

@ikesyo

!ikesyo_nnid

いけしょー/池田翔京都でフリーランスのiOSエンジニア(時々Android)しています

現在はフリュー㈱のモバイル開発のチームにジョイン中。

Swi$/Reac*veCocoaで書いています。

Page 3: iOSでのFramework導入のおさらい #関モバ
Page 4: iOSでのFramework導入のおさらい #関モバ

Reac%veCocoa/Carthageのコミッター(Collaborator)やってます2✨

Page 5: iOSでのFramework導入のおさらい #関モバ

HimotokiというJSONデコーダーを作ってます• GitHub

• SlideShare

Page 6: iOSでのFramework導入のおさらい #関モバ

⛵!世はSwi%/Dynamic!Framework時代!⛵

Page 7: iOSでのFramework導入のおさらい #関モバ

私、iOS$7のサポートを切れるようになったらFrameworkでライブラリを導入するんだ。$!

Page 8: iOSでのFramework導入のおさらい #関モバ

でもXcode&4/5の時代からのプロジェクトにどうやったらFrameworkを導入できるの?&!

Page 9: iOSでのFramework導入のおさらい #関モバ

Frameworkの導入方法• !"CocoaPods((>=(0.36)

• ""Carthage

• #"CocoaSeeds(for(iOS(7

Page 10: iOSでのFramework導入のおさらい #関モバ

1.#CocoaPods

• みんな大好きCocoaPods先生

• 0.36から-use_frameworks!-というオプションでFrameworkの導入に対応

• CocoaPods-0.36-4-Framework-and-Swi8-Support-4-CocoaPods-Blog

• 一番簡単です# Podfileuse_frameworks!pod "Alamofire", "~> 1.2.0"

Page 11: iOSでのFramework導入のおさらい #関モバ

1.#CocoaPods

後はソース内で!import!するだけimport Alamofire

Alamofire.request(.GET, "http://httpbin.org/get")

Page 12: iOSでのFramework導入のおさらい #関モバ

2.#Carthage

• CocoaPodsのブラックボックス感が好きじゃないという人に

• 依存性管理・ビルドはしてくれるけどプロジェクトへの組み込みは自分で設定する

• 名前の由来は“パッケージ(Package)”と発音が似てるから(英語の発音はカーセッジみたいな感じです)

• [Ques3on]6Why6name6Carthage?6<6Issue6#549

I6suggested6“Carthage,”6because6it’s6vaguely6like6“package”6with6some6consonants6swapped6out.

Page 13: iOSでのFramework導入のおさらい #関モバ

2.#Carthage

• Cartfileで依存ライブラリを定義したら$ carthage updateでライブラリを取得、ビルド

• Carthage/Build/iOSにFrameworkができあがっている# Cartfilegithub "Alamofire/Alamofire" ~> 1.2.0

Page 14: iOSでのFramework導入のおさらい #関モバ

2.#Carthage

• Xcodeのターゲット設定の“General”./>.“Linked.Frameworks.and.

Libraries”に各.frameworkをドラッグ&ドロップ

• Xcodeのターゲット設定の“Build.Phases”の+アイコンから“New.Run.

Script.Phase”を選択し、スクリプトの中身として以下をペースト

/usr/local/bin/carthage copy-frameworks

してから“Input.Files”に各Frameworkのパスを追加する

$(SRCROOT)/Carthage/Build/iOS/Alamofire.framework

Page 15: iOSでのFramework導入のおさらい #関モバ

ここで注意点• “Framework+Search+Paths”+(FRAMEWORK_SEARCH_PATHS)

• Xcode+6では.frameworkをドラッグ&ドロップ時にパッケージのあるディレクトリのパスが追加されるが、Xcode+7+beta+3時点では追加されないようになっている(バグ?)ので、自分で

$(SRCROOT)/Carthage/Build/iOS

を追加する必要がある。

• Linker+Error+:+Library+not+found+D+Issue+#615+D+Carthage/Carthage

• Carthage+install+documentaMon+missing+step?+D+Issue+#347+D+Quick/Quick

Page 16: iOSでのFramework導入のおさらい #関モバ

ここで注意点• “Runpath*Search*Paths”*(LD_RUNPATH_SEARCH_PATHS)

• Xcode*6以降で作成したプロジェクト、ターゲットの場合は設定済みだが、それ以前からのプロジェクトの場合は設定されていない(かもしれない)。その場合は

$(inherited) @executable_path/Frameworks

を追加する必要がある。

• Linker*Error*:*Library*not*found*@*Issue*#615*@*Carthage/Carthage

Page 17: iOSでのFramework導入のおさらい #関モバ

ここで注意点• “Embed(Frameworks”(ビルドフェーズ

• “Build(Phases”に該当のフェーズがない場合(これもXcode(6以前からのプロジェクトの場合?)、+アイコンから“New(Copy(Files(Phase”を選択し、

• “Des@na@on”に“Frameworks”を選択

• リストに各Frameworkを追加して“Code(Sign(On(Copy”にチェックを入れる

必要がある。

• Linker(Error(:(Library(not(found(I(Issue(#615(I(Carthage/Carthage

• Library(not(loaded:(@rpath/Alamofire.framework/Alamofire(I(Issue(#616(I(Carthage/Carthage

Page 18: iOSでのFramework導入のおさらい #関モバ

!!Dynamic!Frameworkの設定方法に詳しくなれましたね!!

Page 19: iOSでのFramework導入のおさらい #関モバ

でもまだiOS$7のサポート切れないんだけど……$!

Page 20: iOSでのFramework導入のおさらい #関モバ

そんなあなたに!!

Page 21: iOSでのFramework導入のおさらい #関モバ

3.#CocoaSeeds)for)iOS)7

• devxoul/CocoaSeeds

Git$Submodule$Alterna1ve$for$Cocoa.$Inspired$by$CocoaPods.

• CocoaPodsみたいにプロジェクトへの組み込みを行うが、ソースファイルを追加してアプリと一緒にビルドする)=>)iOS)7でもSwi1のライブラリが使える)✨

• @usamik26)がさっそくPRしてます)"

• Adapt)for)mul?ple)files)op?on)by)usamiEk)F)Pull)Request)#13

• 他のFrameworkに依存して)import FooBar)しているライブラリだと困る。

Page 22: iOSでのFramework導入のおさらい #関モバ

3.#CocoaSeeds)for)iOS)7

• $ [sudo] gem install cocoaseeds

• 以下のようにSeedfileを定義して# Seedfile

# seeds for all targetsgithub "Alamofire/Alamofire", "1.2.0", :files => "Source/*.{swift,h}"

# seeds for specific targettarget :MyAppTest do github "Quick/Quick", "v0.3.1", :files => "Quick/**.{swift,h}"end

• $ seed install

Page 23: iOSでのFramework導入のおさらい #関モバ

!!快適なFrameworkライフをお過ごし下さい!"

Page 25: iOSでのFramework導入のおさらい #関モバ

Ques%ons❓

Page 26: iOSでのFramework導入のおさらい #関モバ

ありがとうございました!