iosでのframework導入のおさらい #関モバ
TRANSCRIPT
iOSでのFramework導入のおさらい@ikesyo
関西モバイルアプリ研究会!#4,!2015)07)21!Tue
#関モバ
@ikesyo
!ikesyo_nnid
いけしょー/池田翔京都でフリーランスのiOSエンジニア(時々Android)しています
現在はフリュー㈱のモバイル開発のチームにジョイン中。
Swi$/Reac*veCocoaで書いています。
Reac%veCocoa/Carthageのコミッター(Collaborator)やってます2✨
HimotokiというJSONデコーダーを作ってます• GitHub
• SlideShare
⛵!世はSwi%/Dynamic!Framework時代!⛵
私、iOS$7のサポートを切れるようになったらFrameworkでライブラリを導入するんだ。$!
でもXcode&4/5の時代からのプロジェクトにどうやったらFrameworkを導入できるの?&!
Frameworkの導入方法• !"CocoaPods((>=(0.36)
• ""Carthage
• #"CocoaSeeds(for(iOS(7
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"
1.#CocoaPods
後はソース内で!import!するだけimport Alamofire
Alamofire.request(.GET, "http://httpbin.org/get")
2.#Carthage
• CocoaPodsのブラックボックス感が好きじゃないという人に
• 依存性管理・ビルドはしてくれるけどプロジェクトへの組み込みは自分で設定する
• 名前の由来は“パッケージ(Package)”と発音が似てるから(英語の発音はカーセッジみたいな感じです)
• [Ques3on]6Why6name6Carthage?6<6Issue6#549
I6suggested6“Carthage,”6because6it’s6vaguely6like6“package”6with6some6consonants6swapped6out.
2.#Carthage
• Cartfileで依存ライブラリを定義したら$ carthage updateでライブラリを取得、ビルド
• Carthage/Build/iOSにFrameworkができあがっている# Cartfilegithub "Alamofire/Alamofire" ~> 1.2.0
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
ここで注意点• “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
ここで注意点• “Runpath*Search*Paths”*(LD_RUNPATH_SEARCH_PATHS)
• Xcode*6以降で作成したプロジェクト、ターゲットの場合は設定済みだが、それ以前からのプロジェクトの場合は設定されていない(かもしれない)。その場合は
$(inherited) @executable_path/Frameworks
を追加する必要がある。
• Linker*Error*:*Library*not*found*@*Issue*#615*@*Carthage/Carthage
ここで注意点• “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
!!Dynamic!Frameworkの設定方法に詳しくなれましたね!!
でもまだiOS$7のサポート切れないんだけど……$!
そんなあなたに!!
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)しているライブラリだと困る。
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
!!快適なFrameworkライフをお過ごし下さい!"
参考URL
• Run%Path*Dependent*Libraries
• Xcode*%*Library*not*loaded*エラー?ここを見直そう*%*Qiita
• mikeash.com:*Friday*Q&A*2009%11%06:*Linking*and*Install*Names
• @executable*path,*@load*path*and*@rpath*L*wincent.com
Ques%ons❓
ありがとうございました!